Changeset 33106 for main/trunk/greenstone3/web/interfaces
- Timestamp:
- 2019-05-24T00:19:32+12:00 (5 years ago)
- Location:
- main/trunk/greenstone3/web/interfaces/default
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/web/interfaces/default/js/berrybasket/berrycheckout.js
r33104 r33106 19 19 var options = ['fullview', 'textview', 'email']; 20 20 21 function deleteSelected() { 22 23 if(docList.length == 0) return; // no berries on page, nothing to delete 24 25 // https://stackoverflow.com/questions/386281/how-to-implement-select-all-check-box-in-html 26 //https://stackoverflow.com/questions/590018/getting-all-selected-checkboxes-in-an-array 27 //https://www.w3schools.com/jsref/met_document_queryselectorall.asp 28 //https://www.w3schools.com/cssref/css_selectors.asp 29 var selectedCheckboxList = document.querySelectorAll('input[name=select-berry-checkbox]:checked'); 30 if(selectedCheckboxList.length == 0) return; // nothing selected, so nothing to delete 31 32 doDelete(selectedCheckboxList); 33 } 21 34 22 35 function deleteAll() { … … 71 84 YAHOO.util.Connect.asyncRequest(request_type, delurl , delcallback); 72 85 86 } 87 88 89 function doDelete(selectedList) { // given list of selected checkboxes 90 91 var idsToDelete = []; 92 93 // construct the deletion url by concatenating the ids with | which is %7C in URL-encoded form 94 var delurl = delurlPath; // var delurlPath is declared in ygDDPlayer.js. 95 96 for(var i = 0; i < selectedList.length; i++) { 97 selected_id = selectedList[i].id; 98 // Format of checkbox id: "<docid>-checkbox" 99 var end = selected_id.indexOf("-checkbox"); 100 var doc_id = selected_id.substring(0, end); 101 102 idsToDelete[i] = doc_id; 103 104 // Now just need to append each doc_id to the deletion URL separated by |, 105 // but this character needs to be URL encoded, else the delete doesn't work. 106 if((i+1) == selectedList.length) { // if it's the last id to process, don't append separator 107 delurl += doc_id; 108 } else { // there's more ids to process, so append separator 109 delurl += doc_id + "%7C"; // url-encoded version of | 110 } 111 112 } 113 114 // The following is a modified version of methods internal to 115 // ygDDPlayer.js's ygDDPlayer.prototype.onDragDrop 116 var delSuccess = function(o) { 117 var result = o.responseXML; 118 119 var deleteAll = false; 120 if(selectedList.length === docList.length) { // deleting all berries, can optimise 121 deleteAll = true; 122 } 123 else { // Not deleting all berries, just a subset 124 // Remove id of selected doc to be deleted from docList. 125 // No ordering of berry indexes according to the order they're added, 126 // So can't optimise comparison further than traversing the docList array in reverse 127 for (var i = docList.length - 1; i >= 0; i--) { 128 var berry = docList[i]; 129 var berry_id = berry['collection'] + ":" + berry['name']; 130 131 for(var j = 0; j < idsToDelete.length; j++) { 132 if(idsToDelete[j] == berry_id) { 133 docList.splice(i, 1); // i indexes into docList, delete element i from docList 134 break; 135 } 136 } 137 } 138 139 // remove the selected documents' HTML display elements 140 var berryDocsList = YAHOO.util.Dom.get('berryDocsList'); // ordered list item containing the berries 141 for(var i = 0; i < selectedList.length; i++) { 142 var li = selectedList[i].parentNode; // list item parent of checkbox 143 // remove the list item from its containing orderedList 144 berryDocsList.removeChild(li); 145 } 146 } 147 148 // if all docs are deleted, then display "berry basket is empty" message 149 if (deleteAll || !berryDocsList.hasChildNodes()) { 150 if(deleteAll) { 151 // if deleting all docs, just use the easy way to empty the docList array 152 docList.length = 0; // https://www.jstips.co/en/javascript/two-ways-to-empty-an-array/ 153 } 154 155 // Removing all child nodes (done one at a time) is more optimal 156 // than setting innerHTML to empty string, see 157 // https://stackoverflow.com/questions/3955229/remove-all-child-elements-of-a-dom-node-in-javascript 158 var content = YAHOO.util.Dom.get('berryBasketContent'); 159 while (content.hasChildNodes()) { 160 content.removeChild(content.firstChild); 161 } 162 content.appendChild(document.createTextNode('Your berry basket is empty.')); 163 164 var trashbin = YAHOO.util.Dom.get('trashbin'); 165 if ( trashbin !=null){ 166 trashbin.style.background = 'url("interfaces/default/images/trash-full.png") 0 0 no-repeat'; 167 } 168 } 169 170 // deselect the delete-all and delete-selected checkboxes 171 YAHOO.util.Dom.get('delall-checkbox').checked = false; 172 YAHOO.util.Dom.get('delselected-checkbox').checked = false; 173 } 174 175 var delFailure = function(o){ alert("Deletion failed" + o);} 176 177 var delcallback = { 178 success:delSuccess, 179 failure:delFailure, 180 argument:null // supposed to be the ygDDPlayer object, but don't have a ref to it here, so trying null 181 } 182 183 // Finally send the actual delete request 184 // request_type defaults to GET, which is what's used for add and del, see ygDDPlayer.js. 185 YAHOO.util.Connect.asyncRequest(request_type, delurl , delcallback); 73 186 } 74 187 … … 195 308 dlist.appendChild(ol); 196 309 310 ol.setAttribute("id", "berryDocsList"); 311 197 312 for (var i in docList){ 198 313 var doc = docList[i]; 199 314 var li = document.createElement('li'); 200 var a = document.createElement('a');201 315 var img = document.createElement('img'); 202 316 var text =""; 203 317 318 var doc_id = doc['collection']+":"+ doc['name']; 319 204 320 img.setAttribute("src", "interfaces/default/images/berry.png"); 205 img.setAttribute("id", doc ['collection']+":"+ doc['name']);321 img.setAttribute("id", doc_id); 206 322 img.setAttribute("height", "15px"); 207 323 img.setAttribute("width", "15px"); 208 324 li.appendChild(img); 209 325 210 generateDocDisplay(li, doc)326 generateDocDisplay(li, doc, doc_id) 211 327 li.className = 'berrydoc'; 212 328 ol.appendChild(li); … … 216 332 } 217 333 218 function generateDocDisplay(li, doc) { 219 334 function generateDocDisplay(li, doc, doc_id) { 335 var checkbox = document.createElement('input'); 336 checkbox.setAttribute("type", "checkbox"); 337 checkbox.setAttribute("id", doc_id+"-checkbox"); 338 checkbox.setAttribute("name", "select-berry-checkbox"); 339 checkbox.setAttribute("value", "select-"+doc_id); 340 220 341 var a = document.createElement('a'); 221 342 var text=""; … … 226 347 li.appendChild(document.createTextNode(doc['root_Title']+": ")); 227 348 } 349 li.appendChild(checkbox); 228 350 li.appendChild(a); 229 351 li.appendChild(document.createTextNode(" ("+doc['collection']+")")); -
main/trunk/greenstone3/web/interfaces/default/transform/pages/berry.xsl
r33104 r33106 51 51 <div class="clear"><xsl:text> </xsl:text></div> 52 52 </table> 53 <input type="checkbox" name="delsel-checkbox" id="delselected-checkbox" value="delete-all" onclick="deleteSelected()">Delete Selected</input> 53 54 <input type="checkbox" name="delall-checkbox" id="delall-checkbox" value="delete-all" onclick="deleteAll()">Delete All</input> 54 55 <div id="berryBasketContent"><span><xsl:text> </xsl:text></span></div>
Note:
See TracChangeset
for help on using the changeset viewer.