1// Simple File List Pro - Copyright 2022 2// Author: Mitchell Bennis | [email protected] | https://simplefilelist.com 3// License: EULA | https://simplefilelist.com/end-user-license-agreement/ 4// All changes to, modifications to, or re-uses of this script are prohibited without prior consent. 5 6// Used in front-side and back-side file list display 7 8console.log('ee-footer.js Loaded'); 9 10// Upon page load completion... 11jQuery(document).ready(function() { 12 13 console.log('eeSFL Document Ready'); 14 15 jQuery('#eeSFL_MoveToFolder').hide(); 16 jQuery('.eeSFL_BulkDownloadBar').hide(); 17 18 window.addEventListener('touchstart', function() { 19 eeSFL_isTouchscreen = true; 20 }); 21 22 23 jQuery('.eeSFL_ModalClose').on('click', function() { 24 jQuery('.eeSFL_Modal').hide(); 25 }); 26 27 28 // The File Operations Bar ----------------- 29 30 jQuery('#eeSFL_FileOpsAction').val('Folder'); // Make sure this gets reset if the page is reloaded. 31 32 // Get translated text items 33 var eeSFL_NewFolderNamePlaceholder = jQuery('#eeSFL_NewFolderNamePlaceholder').text(); 34 jQuery('#eeSFL_FileOpsActionInput').attr('placeholder', eeSFL_NewFolderNamePlaceholder); // Place this right away 35 var eeSFL_ZipFileName = jQuery('#eeSFL_ZipFileName').text(); 36 var eeSFL_DeleteText = jQuery('#eeSFL_DeleteText').text(); 37 var eeSFL_DescriptionPlaceholder = jQuery('#eeSFL_DescriptionPlaceholder').html(); 38 39 // Required Inputs per Action 40 jQuery('#eeSFL_FileOpsAction').on('change', function() { 41 42 if(jQuery(this).val() == 'Delete') { 43 44 console.log('Deleting Files'); 45 46 jQuery('#eeSFL_MoveToFolder').hide(); 47 jQuery('#eeSFL_FileOpsActionInput').show(); 48 jQuery('#eeSFL_FileOpsActionInput').attr('name', 'eeSFL_DeletingFiles'); 49 jQuery('#eeSFL_FileOpsActionInput').attr('value', ''); 50 jQuery('#eeSFL_FileOpsActionInput').attr('placeholder', eeSFL_DeleteText); 51 jQuery('#eeSFL_FileOpsActionInput').attr('disabled', 'disabled'); 52 jQuery('#eeSFL_FileOpsActionInput').removeAttr('required'); 53 54 } else if(jQuery(this).val() == 'Move') { 55 56 console.log('Moving Files'); 57 58 jQuery('#eeSFL_FileOpsActionInput').removeAttr('required'); 59 jQuery('#eeSFL_FileOpsActionInput').hide(); 60 jQuery('#eeSFL_MoveToFolder').show(); 61 62 } else if(jQuery(this).val() == 'Description') { 63 64 console.log('Adding Description'); 65 66 jQuery('#eeSFL_MoveToFolder').hide(); 67 jQuery('#eeSFL_FileOpsActionInput').show(); 68 jQuery('#eeSFL_FileOpsActionInput').attr('name', 'eeSFL_Description'); 69 jQuery('#eeSFL_FileOpsActionInput').attr('value', ''); 70 jQuery('#eeSFL_FileOpsActionInput').attr('placeholder', eeSFL_DescriptionPlaceholder); 71 jQuery('#eeSFL_FileOpsActionInput').attr('required', 'required'); 72 jQuery('#eeSFL_FileOpsActionInput').removeAttr('disabled'); 73 74 } else if(jQuery(this).val() == 'Download') { 75 76 console.log('Downloading Files'); 77 78 jQuery('#eeSFL_MoveToFolder').hide(); 79 jQuery('#eeSFL_FileOpsActionInput').show(); 80 jQuery('#eeSFL_FileOpsActionInput').attr('name', 'eeSFL_ZipFileName'); 81 jQuery('#eeSFL_FileOpsActionInput').attr('value', eeSFL_ZipFileName + '.zip'); 82 jQuery('#eeSFL_FileOpsActionInput').attr('required', 'required'); 83 jQuery('#eeSFL_FileOpsActionInput').removeAttr('disabled'); 84 85 } else { // Create Folder 86 87 jQuery('#eeSFL_MoveToFolder').hide(); 88 jQuery('#eeSFL_FileOpsActionInput').show(); 89 jQuery('#eeSFL_FileOpsActionInput').attr('name', 'eeSFL_NewFolderName'); 90 jQuery('#eeSFL_FileOpsActionInput').attr('value', ''); 91 jQuery('#eeSFL_FileOpsActionInput').attr('placeholder', eeSFL_NewFolderNamePlaceholder); 92 jQuery('#eeSFL_FileOpsActionInput').attr('required', 'required'); 93 jQuery('#eeSFL_FileOpsActionInput').removeAttr('disabled'); 94 } 95 96 }); 97 98 // Bulk Editing Checkboxes 99 100 // Check / Uncheck All 101 jQuery('#eeSFL_BulkEditAll').on('click', function() { 102 103 if( ! jQuery('.eeSFL_BulkDownloadBar').is(":visible") ) { 104 jQuery('.eeSFL_BulkDownloadBar').slideDown(); 105 } 106 107 var eeSFL_FileOpsFiles = ''; 108 109 if(jQuery('#eeSFL_BulkEditAll').is(':checked')) { 110 111 // console.log('Checking all ...'); 112 jQuery('.eeSFL_BulkEditCheck').prop('checked', jQuery(this).prop('checked')); 113 114 115 // Loop through all checkboxes 116 jQuery('.eeSFL_BulkEditCheck').each(function () { 117 118 eeSFL_FileOpsFiles += ',' + jQuery(this).val(); 119 }); 120 121 } else { 122 123 // console.log('Unchecking all ...'); 124 jQuery('.eeSFL_BulkEditCheck').removeAttr('checked'); 125 126 127 128 jQuery('.eeSFL_BulkDownloadBar').slideUp(); 129 } 130 131 jQuery('#eeSFL_FileOpsFiles').val(eeSFL_FileOpsFiles); // Fill the hidden input 132 }); 133 134 135 136 137 138 // Add Files to Bulk Edit List 139 jQuery('.eeSFL_BulkEditCheck').on('click', function() { 140 141 var eeSFL_BulkFileID = jQuery(this).val(); // This checkbox 142 var eeSFL_FileOpsFiles = jQuery('#eeSFL_FileOpsFiles').val(); // The files we're working with 143 144 if(eeSFL_BulkFileID) { 145 146 if(jQuery('#eeSFL_BulkEdit_' + eeSFL_BulkFileID).is(':checked') ) { 147 148 console.log('Bulk Edit File ID ADD: ' + eeSFL_BulkFileID); 149 150 if( ! jQuery('.eeSFL_BulkDownloadBar').is(":visible") ) { 151 jQuery('.eeSFL_BulkDownloadBar').slideDown(); 152 } 153 154 eeSFL_FileOpsFiles = eeSFL_FileOpsFiles + ',' + eeSFL_BulkFileID; 155 156 } else { 157 158 console.log('Bulk Edit File ID REMOVE: ' + eeSFL_BulkFileID); 159 160 eeSFL_FileOpsFiles = eeSFL_FileOpsFiles.replace(',' + eeSFL_BulkFileID, ''); // Remove this ID 161 162 if( ! jQuery('.eeSFL_BulkEditCheck').is(':checked') ) { 163 jQuery('.eeSFL_BulkDownloadBar').slideUp(); 164 } 165 } 166 } 167 168 jQuery('#eeSFL_FileOpsFiles').val(eeSFL_FileOpsFiles); 169 console.log('#eeSFL_FileOpsFiles = ' + eeSFL_FileOpsFiles); 170 171 }); 172 173}); // END Ready Function 174 175 176// Strip Slashes 177String.prototype.eeSFL_StripSlashes = function(){ 178 return this.replace(/\\(.)/mg, "$1"); 179} 180 181 182// Copy File URL to Clipboard 183function eeSFL_CopyLinkToClipboard(eeSFL_FileURL) { 184 185 var eeTemp = jQuery('<input name="eeTemp" value="' + eeSFL_FileURL + '" type="url" class="" id="eeTemp" />'); // Create a temporary input 186 jQuery("body").append(eeTemp); // Add it to the bottom of the page 187 188 var eeTempInput = jQuery('#eeTemp'); 189 eeTempInput.focus(); 190 eeTempInput.select(); // Select the temp input 191 // eeTempInput.setSelectionRange(0, 99999); /* For mobile devices <<<------------ TO DO */ 192 document.execCommand("copy"); // Copy to clipboard 193 eeTemp.remove(); // Remove the temp input 194 195 alert(eesfl_vars['eeCopyLinkText'] + "\r\n" + eeSFL_FileURL); // Alert the user 196} 197 198 199 200 201 202function eeSFL_DownloadFolder(eeSFL_FolderID, eeSFL_FolderName) { 203 204 var eeToday = new Date(); 205 var eeDay = String(eeToday.getDate()).padStart(2, '0'); 206 var eeMonth = String(eeToday.getMonth() + 1).padStart(2, '0'); //January is 0! 207 var eeYear = eeToday.getFullYear(); 208 209 jQuery('#eeSFL_FolderToDownload').val(eeSFL_FolderID); 210 jQuery('#eeSFL_FolderDownloadZipFileName').val(eeSFL_FolderName + '_' + eeYear + '-' + eeMonth + '-' + eeDay); 211 212 // Disable all the links to prevent re-clicks 213 jQuery('#eeSFL_RowID-' + eeSFL_FolderID + ' a.eeSFL_FolderDownload').css('color', '#666'); 214 jQuery('#eeSFL_RowID-' + eeSFL_FolderID + ' a.eeSFL_FolderDownload').text(eesfl_vars['eePleaseWaitText'] + ' ......'); 215 jQuery('a.eeSFL_FolderDownload').removeAttr('href'); // All of them 216 217 jQuery('#eeSFL_DownloadFolderForm').submit(); 218} 219 220 221 222 223
224function eeSFL_EditFile(eeSFL_FileID) { 225 226 event.preventDefault(); // Don't follow the link 227 228 if( jQuery('#eeSFL_EditFileWrap_' + eeSFL_FileID).is(':visible') ) { 229 230 jQuery('#eeSFL_EditFileWrap_' + eeSFL_FileID).slideUp(); 231 jQuery('#eeSFL_EditFile_' + eeSFL_FileID).text(eesfl_vars['eeEditText']); 232 233 } else { 234 235 jQuery('#eeSFL_EditFileWrap_' + eeSFL_FileID).slideDown(); 236 jQuery('#eeSFL_EditFile_' + eeSFL_FileID).text(eesfl_vars['eeCancelText']); 237 } 238} 239 240 241 242 243// Triggered when you click the Delete link 244function eeSFL_Delete(eeSFL_FileID) { 245 246 event.preventDefault(); // Don't follow the link 247 248 console.log('Deleting File ID #' + eeSFL_FileID); 249 250 // Get the File Name 251 var eeSFL_FileName = jQuery('#eeSFL_RowID-' + eeSFL_FileID + ' .eeSFL_RealFileName').text(); 252 253 console.log(eeSFL_FileName); 254 255 if( confirm( eesfl_vars['eeConfirmDeleteText'] + "\r\n\r\n" + eeSFL_FileName ) ) { 256 257 eeSFL_FileAction(eeSFL_FileID, 'Delete'); 258 259 } 260 261} 262 263 264 265 266 267// Extract an Archive 268function eeSFL_ExtractArchive(FolderName) { 269 270 var response = confirm(eesfl_vars.eeExtractConfirm1 + "\n" + eesfl_vars.eeExtractConfirm2 + "\n" + FolderName + "\n" + eesfl_vars.eeExtractConfirm3); 271 272 if (response != true) { 273 274 // Do No-thing, uuuu NOTHING! 275 event.preventDefault(); 276 277 } else { 278 279 // Guard against clickity-clickers 280 jQuery('a.eeSFL_ExtractArchive').hide(); 281 } 282} 283 284 285 286 287// Confirm or cancel folder delete 288function eeSFLF_ConfirmFolderDelete() { 289 290 var response = confirm("Are You Sure?\nAll Contents Will Be Deleted"); 291 292 if (response != true) { 293 294 event.preventDefault(); 295 } 296} 297 298 299 300 301function eeSFL_ValidateEmail(eeSFL_CheckEmail) { 302 303 var eeSFL_EmailFormat = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 304 305 if (eeSFL_CheckEmail.match(eeSFL_EmailFormat)) { 306 return 'GOOD'; 307 } else { 308 return "BAD"; 309 } 310} 311 312 313 314// File Size Formatting 315function eeSFL_GetFileSize(bytes, si) { 316 317 var thresh = si ? 1000 : 1024; 318 319 if(Math.abs(bytes) < thresh) { 320 return bytes + ' B'; 321 } 322 323 var units = si 324 ? ['kB','MB','GB','TB','PB','EB','ZB','YB'] 325 : ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; 326 var u = -1; 327 328 do { 329 bytes /= thresh; 330 ++u; 331 } while(Math.abs(bytes) >= thresh && u < units.length - 1); 332 333 return bytes.toFixed(1)+' '+units[u]; 334}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.