1(function($) { 2 "use strict"; 3 jQuery(document).ready(function($){ 4 function cf7_sendFileToServer(formData,status,obj){ 5 var uploadURL = elementor_file_upload.ajax_url; //Upload URL 6 var extraData ={}; //Extra Data. 7 var jqXHR=jQuery.ajax({ 8 xhr: function() { 9 var xhrobj = jQuery.ajaxSettings.xhr(); 10 if (xhrobj.upload) { 11 xhrobj.upload.addEventListener('progress', function(event) { 12 var percent = 0; 13 var position = event.loaded || event.position; 14 var total = event.total; 15 if (event.lengthComputable) { 16 percent = Math.ceil(position / total * 100); 17 percent = percent -1; 18 } 19 //Set progress 20 status.setProgress(percent); 21 }, false); 22 } 23 return xhrobj; 24 }, 25 url: uploadURL, 26 type: "POST", 27 contentType:false, 28 processData: false, 29 cache: false, 30 data: formData, 31 success: function(data){ 32 status.setProgress(100); 33 if( data.status =="ok" ) { 34 status.name_upload(data.text); 35 var name = obj.closest('.elementor-field-type-file_upload').find(".elementor-upload-field-drap_drop").val(); 36 if(name == "" ) { 37 name = data.text; 38 }else{ 39 name = name +"|"+data.text; 40 } 41 obj.closest('.elementor-field-type-file_upload').find(".elementor-upload-field-drap_drop").val(name); 42 }else{ 43 if( !data.text ) { 44 status.text("Error:"); 45 }else{ 46 status.text(data.text); 47 } 48 } 49 }, 50 error: function (request, status, error) { 51 status.text("Server file type is not allowed."); 52 } 53 }); 54 status.setAbort(jqXHR); 55 } 56 var rowCount=0; 57 function cf7_createStatusbar(obj){ 58 rowCount++; 59 var row="odd"; 60 if(rowCount %2 ==0) row ="even"; 61 this.statusbar = jQuery("<div class='elementor-drop-statusbar "+row+"'></div>"); 62 this.type = jQuery("<div class='elementor-drop-type'></div>").appendTo(this.statusbar); 63 this.type_file = jQuery("<div class='elementor-drop-type_file'></div>").appendTo(this.statusbar); 64 this.img = jQuery('<div style="display:none" class="elementor-drop-img" ></div>').appendTo(this.statusbar); 65 this.filename = jQuery("<span class='elementor-drop-filename'></span>").appendTo(this.statusbar); 66 this.size = jQuery("<span class='elementor-drop-filesize'></span>").appendTo(this.statusbar); 67 this.abort = jQuery('<div class="elementor-drop-abort"></div>').appendTo(this.statusbar); 68 this.remove = jQuery('<div style="display:none" class="elementor_file_upload_remove" ></div>').appendTo(this.statusbar); 69 this.progressBar = jQuery("<div class='elementor-drop-progressBar'><div></div></div>").appendTo(this.statusbar); 70 this.error = jQuery("<div class='elementor-drop-text-error'></div>").appendTo(this.statusbar); 71 obj.after(this.statusbar); 72 this.text = function(txt){ 73 this.error.addClass("elementor-text-error").html(txt); 74 this.progressBar.addClass("elementor-text-error-pro"); 75 } 76 this.name_upload = function(txt){ 77 this.remove.attr('data-name', txt); 78 } 79 this.setFileSize = function(txt){ 80 this.type_file.html(txt); 81 } 82 this.setFileImg = function(txt){ 83 this.img.html('<img src="'+txt+'" />'); 84 this.img.css("display","inline-block"); 85 this.type.css("display","none","important"); 86 this.type_file.css("display","none","important"); 87 } 88 this.setFileNameSize = function(name,size) 89 { 90 var sizeStr=""; 91 var sizeKB = size/1024; 92 if(parseInt(sizeKB) > 1024) 93 { 94 var sizeMB = sizeKB/1024; 95 sizeStr = "("+sizeMB.toFixed(2)+" MB)"; 96 } 97 else 98 { 99 sizeStr = "("+sizeKB.toFixed(2)+" KB)"; 100 } 101 this.filename.html(name); 102 this.size.html(sizeStr); 103 } 104 this.setProgress = function(progress){ 105 var progressBarWidth =progress*this.progressBar.width()/ 100; 106 this.progressBar.find('div').animate({ width: progressBarWidth }, 10).html(progress + "% "); 107 if(parseInt(progress) >= 100) 108 { 109 this.abort.hide(); 110 this.remove.show(); 111 } 112 } 113 this.setAbort = function(jqxhr){ 114 var sb = this.statusbar; 115 this.abort.click(function() 116 { 117 jqxhr.abort(); 118 sb.hide(); 119 }); 120 } 121 } 122 function upload_file(file,obj){ 123 const validImageTypes = ['gif', 'jpeg','jpg', 'png','webp']; 124 var fd = new FormData(); 125 fd.append('file', file); 126 fd.append('size', obj.data("size") ); 127 fd.append('type', obj.data("type") ); 128 fd.append('type_nonce', obj.data("nonce") ); 129 fd.append('nonce', elementor_file_upload.nonce ); 130 fd.append('type_upload', obj.closest('.wpcf7').find(".elementor-droptype").val() ); 131 fd.append('action', "elementor_file_upload" ); 132 var status = new cf7_createStatusbar(obj); //Using this we can set progress. 133 var file_type = file.name.split('.'); 134 file_type = file_type.slice(-1).pop() 135 status.setFileNameSize(file.name,file.size); 136 status.setFileSize(file_type); 137 const fileReader = new FileReader() 138 if (validImageTypes.includes(file_type)) {
139 fileReader.readAsDataURL(file); 140 fileReader.onload = function() { 141 const url = fileReader.result 142 status.setFileImg(url); 143 } 144 } 145 cf7_sendFileToServer(fd,status,obj); 146 } 147 function cf7_handleFileUpload(files,obj){ 148 var max = obj.attr("data-max"); 149 var name = obj.closest('.elementor-field-type-file_upload').find(".elementor-upload-field-drap_drop").val(); 150 var count = (name.match(/\|/g) || []).length; 151 if(name != "" ){ 152 count++; 153 } 154 if( max == "" ){ 155 max = 0; 156 } 157 var max_limit = max - count + 1; 158 if ( max != 0 && parseInt(files.length)>=max_limit){ 159 alert(elementor_file_upload.text_maximum +" "+max); 160 }else{ 161 for (var i = 0; i < files.length; i++) { 162 setTimeout(upload_file(files[i],obj), 500); 163 } 164 } 165 } 166 var obj = $(".elementor-dragandrophandler"); 167 $( "body" ).on('dragenter',".elementor-dragandrophandler", function (e){ 168 e.stopPropagation(); 169 e.preventDefault(); 170 $(this).css('border', '2px solid #0B85A1'); 171 }); 172 $( "body" ).on('dragover',".elementor-dragandrophandler", function (e){ 173 e.stopPropagation(); 174 e.preventDefault(); 175 }); 176 $( "body" ).on('drop',".elementor-dragandrophandler", function (e) { 177 obj= $(this); 178 $(this).css('border', '2px dotted #0B85A1'); 179 e.preventDefault(); 180 var files = e.originalEvent.dataTransfer.files; 181 //We need to send dropped files to Server 182 cf7_handleFileUpload(files,obj); 183 }); 184 $(document).on('dragenter', function (e) { 185 e.stopPropagation(); 186 e.preventDefault(); 187 }); 188 $(document).on('dragover', function (e) { 189 e.stopPropagation(); 190 e.preventDefault(); 191 obj.css('border', '2px dotted #0B85A1'); 192 }); 193 $(document).on('drop', function (e) { 194 e.stopPropagation(); 195 e.preventDefault(); 196 }); 197 $( "body" ).on('click',".elementor-dragandrophandler a", function (e) { 198 e.preventDefault(); 199 $(this).closest(".elementor-dragandrophandler-container").find('.input-uploads').click(); 200 }); 201 $( "body" ).on('change',".input-uploads", function (e){ 202 var files = this.files; 203 //We need to send dropped files to Server 204 obj= $(this).closest('.elementor-field-type-file_upload').find('.elementor-dragandrophandler'); 205 cf7_handleFileUpload(files,obj); 206 }); 207 $("body").on("click",".elementor_file_upload_remove",function(e){ 208 e.preventDefault(); 209 var cr_name = $(this).data("name") ; 210 console.log(cr_name); 211 var data = { 212 'action': 'elementor_file_upload_remove', 213 'name': cr_name, 214 'nonce': elementor_file_upload.nonce 215 }; 216 var name = $(this).closest('.elementor-field-type-file_upload').find('.elementor-upload-field-drap_drop').val().split("|"); 217 for (var i=name.length-1; i>=0; i--) { 218 if (name[i] === cr_name) { 219 name.splice(i, 1); 220 } 221 } 222 $(this).closest('.elementor-field-type-file_upload').find('.elementor-upload-field-drap_drop').val( name.join("|") ); 223 $(this).closest('.elementor-drop-statusbar').remove(); 224 jQuery.post(elementor_file_upload.ajax_url, data, function(response) { 225 }); 226 return false; 227 }) 228 }) 229 })(jQuery);
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.