1// Simple File List Script: ee-uploader.js | Author: Mitchell Bennis | [email protected] 2 3 4 5console.log("ee-upload.js | ver 4.2.5"); 6 7 8var eeSFL_FileSet = new Array(); // Names 9var eeSFL_FileObjects = new Array(); // File objects 10var eeSFL_FileCount = 0; // How many to upload 11var eeSFL_Uploaded = 0; // How many have uploaded 12var eeSFL_Error = false; // Bad things have happened 13var eeSFL_FormatsArray = eeSFL_FileFormats.split(","); // An array of the things. 14 15 16 17 18// Receive files from input[type=file] 19function eeSFL_FileInputHandler(eeEvent) { 20 21 console.log("File Added via Input"); 22 23 var eeSFL_Files = document.getElementById("eeSFL_FileInput").files; 24 25 eeSFL_ProcessFileInput(eeSFL_Files); 26 27} 28 29// Receive files from the drop zone 30function eeSFL_DropHandler(eeEvent) { 31 32 console.log('File Added via Drop Zone'); 33 34 // Prevent default behavior (Prevent file from being opened) 35 eeEvent.preventDefault(); 36 37 eeSFL_ProcessFileInput(eeEvent.dataTransfer.files); // The file object 38} 39 40// Prevent file from being opened in the browser window 41function eeSFL_DragOverHandler(eeEvent) { 42 eeEvent.preventDefault(); 43} 44 45 46 47 48 49 50// Check the files and prepare for upload 51function eeSFL_ProcessFileInput(eeSFL_Files) { // The files object 52 53 // Make sure it's not too many 54 if(eeSFL_Files.length > eeSFL_FileLimit) { // If so, reset 55 56 eeSFL_Error = false; 57 eeSFL_File = false; 58 jQuery("#eeSFL_FileInput").val(""); 59 alert(eesfl_vars['eeUploadLimitText'] + ': ' + eeSFL_FileLimit); 60 return false; 61 } 62 63 // Loop through file object 64 for(var i = 0; i < eeSFL_Files.length; i++){ 65 66 var eeSFL_File = eeSFL_Files[i]; 67 68 console.group("File # " + i); 69 70 console.log("Name: " + eeSFL_File.name); 71 72 // Validation 73 74 // Size 75 console.log("Size: " + eeSFL_File.size); 76 77 if(eeSFL_File.size > eeSFL_UploadMaxFileSize) { 78 eeSFL_Error = eesfl_vars['eeFileTooLargeText'] + ': ' + eeSFL_File.name; 79 } 80 81 // Type 82 var eeSFL_Extension = eeSFL_File.name.split(".").pop(); 83 eeSFL_Extension = eeSFL_Extension.toLowerCase(); 84 85 if(eeSFL_FormatsArray.indexOf(eeSFL_Extension) == -1) { 86 eeSFL_Error = eesfl_vars['eeFileNotAllowedText'] + ': ' + eeSFL_Extension; 87 } 88 89 console.log("Extension: " + eeSFL_Extension); 90 console.log("Type: " + eeSFL_File.type); 91 92 // Modified date 93 console.log("Date: " + eeSFL_File.lastModified); 94 95 console.groupEnd(); 96 97 if(!eeSFL_Error) { // If no errors 98 99 eeSFL_FileObjects.push(eeSFL_File); // Add this object 100 eeSFL_FileSet.push(eeSFL_File.name); // Add this name for the post-processor 101 102 } else { 103 104 alert(eeSFL_Error); // Alert the user. 105 106 eeSFL_Error = false; 107 eeSFL_File = false; 108 jQuery("#eeSFL_FileInput").val(""); 109 return false; 110 } 111 } 112 113 114 eeSFL_FileCount = eeSFL_FileObjects.length; // Reset based on set 115 var eeSFL_FileQstring = JSON.stringify(eeSFL_FileSet); 116 117 jQuery("#eeSFL_FileList").val(eeSFL_FileQstring); // Set the hidden inputs 118 jQuery("#eeSFL_FileCount").val(eeSFL_FileCount); // The number of files 119 120 121 jQuery('#eeSFL_FileInput').hide(); 122 jQuery('#eeSFL_FilesDrug').text(eeSFL_FileCount + ' files selected.'); 123 jQuery('#eeSFL_FilesDrug').show(); 124 125 // Helpful information 126 console.log("#eeSFL_FileList Set: " + eeSFL_FileQstring); 127 console.log("#eeSFL_FileCount Set: " + eeSFL_FileCount); 128 console.log("Files: " + eeSFL_FileSet); 129 console.log("Count: " + eeSFL_FileCount); 130 131} 132 133 134 135 136// The Upload Queue Processor - This runs when the Upload button is clicked 137function eeUploadProcessor(eeSFL_FileObjects) { 138 139 eeSFL_FileCount = eeSFL_FileObjects.length; 140 141 if(eeSFL_FileCount) { 142 143 // Check if input fields have been completed, if they appear. 144 if(jQuery('#eeSFL_Comments').length >= 1) { // Get Uploader Info is ON 145 var eeSFL_Name = jQuery('#eeSFL_Name').val(); 146 var eeSFL_Email = jQuery('#eeSFL_Email').val(); 147 148 if(eeSFL_Name.length < 1) { 149 jQuery('#eeSFL_Name').css('border', '2px solid red'); 150 return; 151 } 152 153 if( eeSFL_ValidateEmail(eeSFL_Email) == 'BAD' ) { 154 jQuery('#eeSFL_Email').css('border', '2px solid red'); 155 return; 156 } 157 } 158 159 // Remove button and replace with progress bar 160 jQuery("#eeSFL_UploadGo" ).hide(); 161 162 console.log("Uploading " + eeSFL_FileCount + " files..."); 163 164 for (var i = 0; i < eeSFL_FileCount; i++) { // Loop through and upload the files 165 166 console.log("Processing File: " + eeSFL_FileObjects[i].name); 167 168 eeUploadFile(eeSFL_FileObjects[i]); // Upload the file using the function below... 169 } 170 } 171} 172 173 174 175// File Upload AJAX Call 176function eeUploadFile(eeSFL_File) { // Pass in file object 177 178 var eeXhr = new XMLHttpRequest(); 179 180 if(eeXhr.upload) { // Upload progress 181 182 jQuery('#eeSFL_UploadProgress').css('display', 'block'); 183 184 console.log('Upload in progress ...'); 185 186 eeXhr.upload.addEventListener("progress", function(e) { 187 188 var percent = parseInt((e.loaded / e.total * 100)); // Percent completed 189 console.log('Upload Progress: ' + percent + '%' ); 190 191 // Progress Bar 192 if(percent < 100) { 193 jQuery('#eeSFL_UploadProgress').css('width', percent + '%'); // Width based on percent 194 } else { 195 jQuery('#eeSFL_UploadProgress').css('width', '100%'); 196 } 197 198 }, false); 199 } 200 201 202 // Add our form data 203 var eeFormData = new FormData(); 204 205 console.log("Uploading: " + eeSFL_File.name); 206 console.log("Calling Engine: " + eeSFL_UploadEngineURL); 207 208 eeXhr.open("POST", eeSFL_UploadEngineURL, true); // URL set in ee-upload-form.php 209 210 eeXhr.onreadystatechange = function() { 211 212 if (eeXhr.readyState == 4 && eeXhr.status != 500) { // && eeXhr.status == 200 <-- Windows returns 404? 213 214 eeSFL_Uploaded ++; 215 216 console.log("File Uploaded (" + eeSFL_Uploaded + " of " + eeSFL_FileCount + ")"); 217 218 // Every thing ok, file uploaded 219 console.log("RESPONSE: " + eeXhr.responseText); 220 221 // Submit the Form 222 if(eeSFL_Uploaded == eeSFL_FileCount) { 223 224 if(eeXhr.responseText == "SUCCESS") { 225 226 jQuery('#eeSFL_UploadProgress em').fadeIn(); // Show "Processing the Upload" message 227 228 console.log("--->>> SUBMITTING FORM ..."); 229 230 document.forms.eeSFL_UploadForm.submit(); // <<<----- FORM SUBMIT 231 232 } else { 233 console.log("XHR Status: " + eeXhr.status); 234 console.log("XHR State: " + eeXhr.readyState); 235 236 var n = eeXhr.responseText.search("<");
236 // Error condition 237 if(n === 0) { 238 alert(eesfl_vars['eeUploadErrorText'] + ': ' + eeSFL_File.name); 239 jQuery( "#eeUploadingNow" ).fadeOut(); 240 } 241 return false; 242 } 243 244 } else { // Not the last file, so reset the progress bar 245 246 jQuery('#eeSFL_UploadProgress').css('width', '0%'); // Reset the progress bar 247 } 248 249 } else { 250 console.log("XHR Status: " + eeXhr.status); 251 console.log("XHR State: " + eeXhr.readyState); 252 return false; 253 } 254 }; 255 256 // Wordpress Action 257 eeFormData.append("action", "simplefilelistpro_upload_job"); 258 259 // These values are set in ee-upload-form.php 260 eeFormData.append("file", eeSFL_File); 261 eeFormData.append("eeSFL_ID", eeSFL_ListID); 262 eeFormData.append("eeSFL_FileUploadDir", eeSFL_FileUploadDir); 263 eeFormData.append("ee-simple-file-list-pro-upload", eeSFL_Nonce); 264 265 // Add the file modification date/time 266 var eeDate = new Date(eeSFL_File.lastModified); 267 var eeDateString = eeDate.toISOString().split('T')[0]; // Get just the y-m-d part 268 eeFormData.append("eeSFL_FileDate", eeDateString); 269 console.log("Date: " + eeDateString); 270 271 // Send the AJAX request... 272 eeXhr.send(eeFormData); 273} 274 275 276console.log("Waiting for files..."); 277 278// Populate the action attribute in the form 279var eeSFL_CurrentURL = document.location.href; 280jQuery("#eeSFL_UploadForm").attr("action", eeSFL_CurrentURL); 281 282
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.