@massimo-cassandro/js-file-uploader
Version:
HTML5 Async File Uploader
11 lines (10 loc) • 31.3 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).FileUploader=t()}(this,(function(){"use strict";const e={alert_too_much_files:"Puoi selezionare un solo file!",alert_xhr_error:"Si è verificato un errore nel caricamento del file “<strong>{{file_name}}</strong>”.",alert_file_format_error:"Il file “<strong>{{file_name}}</strong>” è di un formato non consentito",alert_file_size_error:"Le dimensioni di “<strong>{{file_name}}</strong>” ({{file_size}}) superano il valore massimo consentito ({{allowed_size}})",fupl_alert_header:"Errore",fupl_alert_btn_text:"OK",alert_img_exact_width_err:"<strong>{{file_name}}</strong>: larghezza non corrispondente ({{image_dimension}}px invece di {{allowed_dimension}}px)",alert_img_min_width_err:"<strong>{{file_name}}</strong>: larghezza inferiore a quella minima consentita ({{image_dimension}}px invece di {{allowed_dimension}}px)",alert_img_max_width_err:"<strong>{{file_name}}</strong>: larghezza superiore a quella massima consentita ({{image_dimension}}px invece di {{allowed_dimension}}px)",alert_img_exact_height_err:"<strong>{{file_name}}</strong>: altezza non corrispondente ({{image_dimension}}px invece di {{allowed_dimension}}px)",alert_img_min_height_err:"<strong>{{file_name}}</strong>: altezza inferiore a quella minima consentita ({{image_dimension}}px invece di {{allowed_dimension}}px)",alert_img_max_height_err:"<strong>{{file_name}}</strong>: altezza superiore a quella massima consentita ({{image_dimension}}px invece di {{allowed_dimension}}px)",alert_img_ratio_err:"<strong>{{file_name}}</strong>: la proporzione tra base e altezza dell’immagine non corrisponde a quella richiesta ({{aspect_ratio}})",no_img_text:"Nessuna immagine presente",no_doc_text:"Nessun file presente",remove_btn_text:"Elimina questo file",info_text_std_imgs:"immagini in formato <strong>JPEG</strong>, <strong>PNG</strong>, <strong>GIF</strong> o <strong>WEBP</strong>",info_text_imgs_svg:"immagini in formato <strong>JPEG</strong>, <strong>PNG</strong>, <strong>GIF</strong>, <strong>WEBP</strong> o <strong>SVG</strong>",info_text_imgs_svg_size_info_text:"<strong>Solo per le immagini non SVG:</strong> ",info_text_img_optimize_info:'Per modificare e comprimere le immagini puoi utilizzare <a href="https://www.iloveimg.com/it" target="_blank" rel="noopener noreferrer">I Love IMG</a>.<br>Puoi ridurre le dimensioni dei documenti PDF con <a href="https://www.ilovepdf.com/it/comprimere_pdf" target="_blank" rel="noopener noreferrer">I Love PDF</a>.',info_text_svg_optimize_info:'È consigliabile ottimizzare i file SVG prima del caricamento, ad esempio tramite <a href="https://jakearchibald.github.io/svgomg/" target="_blank" rel="noopener noreferrer">SVGO</a>',info_text_img_fixed_size:"dimensioni: <strong>{{img_w}}×{{img_h}}px</strong>",info_text_img_equal_min_size:"larghezza e altezza non inferiori a <strong>{{img_min_w}}px</strong>",info_text_img_equal_max_size:"larghezza e altezza non superiori a <strong>{{img_max_w}}px</strong>",info_text_img_fixed_width:"larghezza <strong>{{img_w}}px</strong>",info_text_img_fixed_height:"altezza <strong>{{img_h}}px</strong>",info_text_img_width_range:"larghezza compresa tra <strong>{{img_min_w}}px</strong> e <strong>{{img_max_w}}px</strong>",info_text_img_min_width:"larghezza non inferiore a <strong>{{img_min_w}}px</strong>",info_text_img_max_width:"larghezza non superiore a <strong>{{img_max_w}}px</strong>",info_text_img_height_range:"altezza compresa tra <strong>{{img_min_h}}px</strong> e <strong>{{img_max_h}}px</strong>",info_text_img_min_height:"altezza non inferiore a <strong>{{img_min_h}}px</strong>",info_text_img_max_height:"altezza non superiore a <strong>{{img_max_h}}px</strong>",info_text_pdf_file:"file in formato <strong>PDF</strong>",info_text_svg_file:"immagini in formato <strong>SVG</strong>",info_text_max_filesize:"max <strong>{{max_filesize}}</strong>",info_text_img_aspect_ratio:"Il rapporto tra base e altezza dell’immagine deve essere esattamente pari a <strong>{{img_aspect_ratio}}</strong>",img_single_select_text:"Seleziona un’immagine",img_single_drag_text:"…oppure trascinala qui",img_multiple_select_text:"Seleziona una o più immagini",img_multiple_drag_text:"…oppure trascinale qui",doc_single_select_text:"Seleziona un documento",doc_single_drag_text:"…oppure trascinalo qui",doc_multiple_select_text:"Seleziona uno o più documenti",doc_multiple_drag_text:"…oppure trascinali qui",sortable_icon_title_text:"Trascina per cambiare l’ordinamento"},t={uploader_url:null,locales:"it-IT",debug:!1,ajax_method:"POST",disabled:!1,filetype:"auto",accept:null,multiple:!1,required:!1,disable_submit:!1,template_main:'<div class="fupl-result"></div><div class="fupl-panel"><div class="fupl-button"><label><input type="file"></label><div class="fupl-dd-text"></div></div><div class="fupl-info-text"></div></div>',template_empty_img:'<div class="fupl-result-empty text-muted small font-italic">{{no_img_text}}</div>',template_empty_doc:'<div class="fupl-result-empty text-muted small font-italic">{{no_doc_text}}</div>',template_remove_btn:'<button type="button" class="close fupl-remove-trigger" aria-label="{{remove_btn_text}}" title="{{remove_btn_text}}"><span aria-hidden="true">×</span></button>',template_loading_element:'<div class="fupl-loading"><progress class="fupl-progress" max=100 value=0></progress></div>',template_alternative_loading_element:'<div class="spinner-grow text-primary" role="status"><span class="sr-only">Loading...</span></div',template_img_item_single:'<div class="fupl-item"><div class="fupl-remove"></div><img alt="Immagine caricata" class="img-fluid fupl-img"><div class="fupl-file-info"><div class="text-truncate fupl-file-name"></div><div class="fupl-file-size"></div><div class="fupl-extra-fields"></div></div></div>',template_img_item_multiple:'<div class="fupl-item"><div class="fupl-remove"></div><div class="fupl-img-wrapper"><img alt="Immagine caricata" class="img-fluid fupl-img" draggable="false"></div><div class="fupl-file-info"><div class="text-truncate fupl-file-name"></div><div class="fupl-file-size"></div></div><div class="fupl-extra-fields"></div><div class="fupl-sortable-icon"></div></div>',template_doc_item_single:'<div class="fupl-item"><div class="fupl-doc-wrapper"><div class="fupl-remove"></div><div class="fupl-doc text-truncate"><a class="text-truncate fupl-file-name fupl-url" draggable="false"></a></div></div><div class="small ml-1 text-nowrap fupl-file-size"></div><div class="fupl-extra-fields"></div><div class="fupl-sortable-icon"></div></div>',template_doc_item_multiple:null,wrapper_extra_class:null,fupl_alert_template:'<div class="fupl-alert-overlay">\n <div class="fupl-alert">\n <div class="fupl-alert-header">{{fupl_alert_header}}</div>\n <div class="fupl-alert-body"></div>\n <div class="fupl-alert-footer">\n <button type="button" class="fupl-alert-btn">{{fupl_alert_btn_text}}</button>\n </div>\n </div>\n </div>',fupl_alert_btn_class:"btn btn-secondary",element_dragover_class:"fupl-is-dragover",uploader_legend:!0,uploader_legend_text:null,uploader_legend_class:null,input_label_class:"btn btn-outline-primary btn-sm",show_info_text:!0,show_optimize_info:!0,info_text_wrap_string:["(",")"],info_text_join_string:" - ",custom_info_text:null,help_text:null,img_w:null,img_h:null,img_min_w:null,img_min_h:null,img_max_w:null,img_max_h:null,img_aspect_ratio:null,aspect_ratio_accuracy:2,max_filesize:null,varname:"file",registered_extra_field_varname:null,init_callback:null,upload_start_callback:null,upload_complete_callback:null,alternative_loading_func:null,values:[],delete_varname:"elimina_file[]",fancybox:!1,fancybox_anchor_markup:'<a class="fupl-url" data-fancybox="fupl-gallery"></a>',fancybox_callback_func:null,sortable:!1,sortable_varname:"fupl_order",sortable_icon:'<div title="{{sortable_icon_title_text}}"></div>',extra_fields:null},i={mimetypes:(()=>{let e={auto:null,img:["image/png","image/jpeg","image/pjpeg","image/gif","image/webp",".png",".jpg",".jpeg",".pjpg",".pjpeg",".gif",".webp"],pdf:["application/pdf",".pdf"],svg:["image/svg+xml",".svg",".svgz"]};return e["img+svg"]=e.img.concat(e.svg),e})(),isSuitableBrowser:()=>{if(-1!==navigator.userAgent.indexOf("MSIE")||navigator.appVersion.indexOf("Trident/")>-1||navigator.userAgent.indexOf("Trident/")>-1)return!1;var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&"FormData"in window&&"FileReader"in window&&"fetch"in window},set_has_values:e=>{let t=e.opts.instance_result_wrapper.querySelectorAll(".fupl-item").length;e.opts.wrapper.dataset.hasValues=t?"true":"false",t||(e.opts.instance_result_wrapper.innerHTML="img"===e.opts._type?e.opts.template_empty_img.replace(/{{no_img_text}}/g,e.strs.no_img_text):e.opts.template_empty_doc.replace(/{{no_doc_text}}/g,e.strs.no_doc_text))},parse_bytes_value:(e,t)=>{let i=1048576;return(e=+e)>=i?(e/i).toLocaleString(t,{maximumFractionDigits:1})+'<span class="fupl-unit">MB</span>':e<1024?Number((e/1024).toFixed(2)).toLocaleString(t,{maximumFractionDigits:2})+'<span class="fupl-unit">KB</span>':Math.round(e/1024).toLocaleString(t,{maximumFractionDigits:0})+'<span class="fupl-unit">KB</span>'},parse_max_filesize:(e,t)=>{if(e){var i,s,a;if(isNaN(e)){if(s=e.substr(-2,2).toUpperCase(),a=i=+e.substr(0,e.length-2),isNaN(i)||"KB"!==s&&"MB"!==s)return!1}else s="KB",a=i=+e;return i>=1024&&"KB"===s&&(s="MB",a=Math.round(i/1024*100)/100),"KB"===s?i*=1024:i=1024*i*1024,{maxbytes:i,feedback_size:a.toLocaleString(t,{maximumFractionDigits:"KB"===s?0:1})+'<span class="fupl-unit">'+s+"</span>"}}return null},exec_callback:(e,t)=>{try{if("string"==typeof e){let i=window;e.split(".").forEach((function(e){i=i[e]})),i(t)}else e(t)}catch(t){alert(`Error: “${e}” callback function doesn't exist`),console.error(t)}}};let s=null,a=!1;const r={sorting_class:"fupl-sorting",sorting_item_class:"fupl-item-sorting",over_item_class:"fupl-item-dragover"},l=()=>{s&&(s.classList.remove(r.sorting_item_class),s.parentNode.querySelectorAll("."+r.over_item_class).forEach((e=>{e.classList.remove(r.over_item_class)})),s.closest(".fupl").classList.remove(r.sorting_class)),s=null};function o(e,t,o=!1){try{let n=t.opts[`template_${t.opts._type}_item_${t.opts._mode}`];null===n&&"multiple"===t.opts._mode&&(n=t.opts[`template_${t.opts._type}_item_single`]);let p=document.createElement("div");p.innerHTML=n;let _=p.querySelector(".fupl-remove");_&&(_.innerHTML=t.opts.template_remove_btn.replace(/{{remove_btn_text}}/g,t.strs.remove_btn_text));let m=p.querySelector(".fupl-file-name");m&&e.name&&(m.innerHTML=e.name,m.title=e.name);let c=p.querySelector(".fupl-file-size");if(c){let s="";"img"===t.opts._type&&e.wi&&e.he&&(s=e.wi+"×"+e.he+'<span class="fupl-unit">px</span>',e.size&&(s+=" – ")),e.size&&(s+=i.parse_bytes_value(e.size,t.opts.locales)),c.innerHTML=s}"img"===t.opts._type&&(p.querySelector(".fupl-img").src=e.src);let d=p.querySelector(".fupl-url");d&&e.url&&(d.href=e.url);let g=p.querySelector(".fupl-item");e.loading&&(g.classList.add("fupl-is-uploading"),g.insertAdjacentHTML("beforeend",t.opts.template_loading_element)),"single"===t.opts._mode?t.opts.instance_result_wrapper.innerHTML=p.innerHTML:(t.opts.instance_result_wrapper.querySelector(".fupl-item")||(t.opts.instance_result_wrapper.innerHTML=""),t.opts.instance_result_wrapper.insertAdjacentHTML("beforeend",p.innerHTML));let u=t.opts.instance_result_wrapper.querySelector(".fupl-item:last-child");u.dataset.id=e.id;let f=u.querySelector(".fupl-remove-trigger");if(f&&f.addEventListener("click",(()=>{u.remove();let s=e.rel_id?e.rel_id:e.id;s&&o&&t.opts.wrapper.insertAdjacentHTML("beforeend",`<input type="hidden" name="${t.opts.delete_varname}" value="${s}">`),i.set_has_values(t)})),t.opts.fancybox&&"img"===t.opts._type&&e.url&&t.opts.fancybox_anchor_markup){if(!u.querySelector("a.fupl-url")){let e=u.querySelector(".fupl-img"),i=document.createElement("div");i.innerHTML=t.opts.fancybox_anchor_markup,i=i.firstChild,e.parentNode.insertBefore(i,e),i.appendChild(e)}u.querySelector("a.fupl-url").setAttribute("href",e.url)}let h=u.querySelector(".fupl-extra-fields");if(null!==t.opts.extra_fields&&h&&(t.opts.extra_fields.forEach((i=>{h.insertAdjacentHTML("beforeend",i.markup.replace(/{{idx}}/g,e.id).replace(/{{val}}/g,o&&e[i.value_key]?e[i.value_key]:"").replace(/{{checked}}/g,o&&+e[i.value_key]?" checked ":" ").replace(/{{name}}/g,(o&&t.opts.registered_extra_field_varname?t.opts.registered_extra_field_varname:t.opts.varname)+"["+(i.use_rel_id&&e.rel_id?e.rel_id:e.id)+"]["+i.value_key+"]"))})),h.querySelectorAll('select[data-selected]:not([data-selected=""]').forEach((e=>{const t=e.dataset.selected;e.querySelector(`option[value="${t}"]`)?.setAttribute("selected",!0)})),t.opts.sortable&&h.querySelectorAll("select, input, textarea").forEach((e=>{e.setAttribute("draggable","false"),["dragstart","drag","mousedown"].forEach((t=>{e.addEventListener(t,(e=>{"mousedown"!==t&&e.preventDefault(),e.stopPropagation()}))}))}))),t.opts.sortable){u.setAttribute("draggable",!0);let i=t.opts.instance_result_wrapper.querySelectorAll(".fupl-item").length-1;u.insertAdjacentHTML("beforeend",'<input type="hidden" class="fupl-sortable-order" name="'+(o&&t.opts.registered_extra_field_varname?t.opts.registered_extra_field_varname:t.opts.varname)+`[${e.id}][${t.opts.sortable_varname}]" value="${i}">`),t.opts.sortable_icon&&(u.querySelector(".fupl-sortable-icon").innerHTML=t.opts.sortable_icon.replace("{{sortable_icon_title_text}}",t.strs.sortable_icon_title_text)),function(e,t){e.addEventListener("dragstart",(function(e){a=t.wrapper.disabled,l(),a||(s=this,t.element.classList.add(r.sorting_class),e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("text","fupl-sorting"),this.classList.add(r.sorting_item_class))}),!1),e.addEventListener("dragenter",(function(e){"fupl-sorting"!==e.dataTransfer.getData("text")||a||(e.stopPropagation&&e.stopPropagation(),this!==s&&this.classList.add(r.over_item_class))}),!1),e.addEventListener("dragover",(function(e){return"fupl-sorting"!==e.dataTransfer.getData("text")||a||(e.preventDefault&&e.preventDefault(),e.dataTransfer.dropEffect="move",this!==s&&this.classList.add(r.over_item_class)),!1}),!1),e.addEventListener("dragleave",(function(){this.classList.remove(r.over_item_class)}),!1),e.addEventListener("drop",(function(e){return"fupl-sorting"!==e.dataTransfer.getData("text")||a||(e.stopPropagation&&e.stopPropagation(),e.preventDefault(),s&&(this.previousElementSibling===s&&this.nextElementSibling?this.parentNode.insertBefore(s,this.nextElementSibling):this.nextElementSibling?this.parentNode.insertBefore(s,this):this.parentNode.insertAdjacentElement("beforeend",s)),l()),!1}),!1),e.addEventListener("dragend",(function(e){"fupl-sorting"!==e.dataTransfer.getData("text")||a||(t.element.classList.remove(r.sorting_class),l(),t.instance_result_wrapper.querySelectorAll(".fupl-sortable-order").forEach(((e,t)=>{e.value=t})))}),!1)}(u,t.opts)}return t.opts.instance_result_wrapper.querySelector(".fupl-item:last-child")}catch(e){console.error(e)}}function n(e,t){let i=t.element.querySelector(".fupl-alert-body ul");"string"==typeof e&&(e=[e]),i||(t.element.insertAdjacentHTML("beforeend",t.fupl_alert_template),t.element.querySelector(".fupl-alert-body").innerHTML="<ul></ul>",i=t.element.querySelector(".fupl-alert-body ul"),t.element.querySelector(".fupl-alert button").addEventListener("click",(()=>{t.element.querySelector(".fupl-alert-overlay").remove()}),!1)),e.forEach((e=>{i.insertAdjacentHTML("afterbegin",`<li>${e}</li>`)}))}function p(e,t){const s=e=>{const i=t.opts.element.closest("form");t.opts.disable_submit&&i&&i.querySelectorAll('[type="submit"]').forEach((t=>{t.disabled=e}))},a=function(e,a){s(!0);let r=o({id:e.id,name:e.file.name,url:null,src:a,wi:e.width,he:e.height,size:e.file.size,loading:!0},t),l=r.querySelector(".fupl-progress"),p=r.querySelector(".fupl-loading"),_=t.strs.alert_xhr_error.replace(/{{file_name}}/,e.file.name);t.opts.upload_start_callback&&i.exec_callback(t.opts.upload_start_callback,{item:e,img_preview:a,uploader_options:t}),new Promise((function(s,a){let o=new XMLHttpRequest;o.open(t.opts.ajax_method,t.opts.uploader_url,!0),o.onload=function(){if(o.status>=200&&o.status<400){const r=JSON.parse(o.responseText);r.error?(n(_,t.opts),console.error(r.error),a()):(e.tmp_file=r.tmp_file,s()),t.opts.upload_complete_callback&&i.exec_callback(t.opts.upload_complete_callback,{item:e,server_error:r.error,fupl:t}),t.opts.debug&&(console.groupCollapsed(`FileUploader ${t.opts._vers} ajax response`),console.log(r),console.groupEnd())}else n(_,t.opts),console.error(o.status,o.statusText),console.error(o.responseText);a()},o.onerror=function(){n(_,t.opts),t.opts.debug&&(console.error(o.status,o.statusText),console.error(o.responseText)),a()},o.upload.addEventListener("progress",(function(e){if(t.opts.alternative_loading_func)i.exec_callback(t.opts.alternative_loading_func,e,t);else{let i=Math.round(e.loaded/e.total*100)||0;l&&(e.lengthComputable?(i=i===1/0?100:i,r.querySelector(".fupl-progress").value=i):(p.innerHTML=t.opts.template_alternative_loading_element,l=null))}}),!1);let m=new FormData;m.append("file",e.file),o.send(m)})).then((function(){r.classList.remove("fupl-is-uploading"),r.querySelector(".fupl-loading").remove(),r.insertAdjacentHTML("beforeend",function(e,t){let i="",s={tmp_file:e.tmp_file,file_name:(e=>{let t="";const i="-",s={"à":"a","è":"e","é":"e","ì":"i","ò":"o","ù":"u","À":"A","È":"E","É":"E","Ì":"I","Ò":"O","Ù":"U","'":i,"|":i,"!":i,'"':i,$:i,"%":i,"&":i,"/":i,"(":i,")":i,"=":i,"?":i,"^":i,"*":i,"[":i,"]":i,"ç":"c","@":i,"#":i,"<":i,">":i,"ü":"u","Ü":"U","ñ":"n","Ñ":"N","~":i,":":i,"\\":i};for(var a=0;a<e.length;a++)e[a]in s?t+=s[e[a]]:768===e.charCodeAt(a)||769===e.charCodeAt(a)?t+="":e.charCodeAt(a)>127?t+=i:t+=e.charAt(a);return t.replace(/ /g,i).replace(new RegExp(`^${i}+`),"").replace(new RegExp(`${i}+`,"g"),i)})(e.file.name),size:e.file.size,type:e.file.type};e.isBitmapImg&&(s.width=e.width,s.height=e.height);for(let a in s)i+='<input type="hidden" name="'+t.varname+"["+e.id+"]["+a+']" value="'+(null!==s[a]&&void 0!==s[a]?s[a]:"")+'">';return'<div class="fupl-hiddens">'+i+"</div>"}(e,t.opts)),i.set_has_values(t),s(!1)}),(function(){r.querySelector(".fupl-remove-trigger").click(),i.set_has_values(t)}))};e.length&&[...e].forEach((function(e,s){try{const r=e.name.split(".").pop().toLowerCase();let l={id:"fupl_item_"+Date.now()+"_"+s,file:e,width:null,height:null,tmp_file:null,isBitmapImg:-1!==i.mimetypes.img.indexOf(e.type)||-1!==i.mimetypes.img.indexOf("."+r)};if(t.opts.accept.length&&-1===t.opts.accept.indexOf(e.type)&&-1===t.opts.accept.indexOf("."+r))throw console.log(e.type),t.strs.alert_file_format_error.replace(/{{file_name}}/,e.name);if("img"===t.opts._type&&(-1===i.mimetypes.img.indexOf(e.type)||-1===i.mimetypes.img.indexOf("."+r)))throw t.strs.alert_file_format_error.replace(/{{file_name}}/,e.name);if(null!==t.opts.max_filesize&&e.size>t.opts.max_filesize.maxbytes){let s=i.parse_bytes_value(e.size,t.opts.locales);throw t.strs.alert_file_size_error.replace(/{{file_name}}/,e.name).replace(/{{file_size}}/,s).replace(/{{allowed_size}}/,t.opts.max_filesize.feedback_size)}if(l.isBitmapImg){let i=new FileReader;i.addEventListener("load",(function(){let s=new Image;s.src=i.result,s.addEventListener("load",(function(){let r=[];l.width=s.width,l.height=s.height,t.opts.img_w&&s.width!==t.opts.img_w?r.push(t.strs.alert_img_exact_width_err.replace(/{{image_dimension}}/,s.width).replace(/{{allowed_dimension}}/,t.opts.img_w)):t.opts.img_min_w&&s.width<t.opts.img_min_w?r.push(t.strs.alert_img_min_width_err.replace(/{{image_dimension}}/,s.width).replace(/{{allowed_dimension}}/,t.opts.img_min_w)):t.opts.img_max_w&&s.width>t.opts.img_max_w&&r.push(t.strs.alert_img_max_width_err.replace(/{{image_dimension}}/,s.width).replace(/{{allowed_dimension}}/,t.opts.img_max_w)),t.opts.img_h&&s.height!==t.opts.img_h?r.push(t.strs.alert_img_exact_height_err.replace(/{{image_dimension}}/,s.height).replace(/{{allowed_dimension}}/,t.opts.img_h)):t.opts.img_min_h&&s.height<t.opts.img_min_h?r.push(t.strs.alert_img_min_height_err.replace(/{{image_dimension}}/,s.height).replace(/{{allowed_dimension}}/,t.opts.img_min_h)):t.opts.img_max_h&&s.height>t.opts.img_max_h&&r.push(t.strs.alert_img_max_height_err.replace(/{{image_dimension}}/,s.height).replace(/{{allowed_dimension}}/,t.opts.img_max_h)),t.opts.img_aspect_ratio_parsed&&Math.round((s.width/s.height+Number.EPSILON)*t.opts.aspect_ratio_accuracy)/t.opts.aspect_ratio_accuracy!==t.opts.img_aspect_ratio_parsed&&r.push(t.strs.alert_img_ratio_err.replace(/{{aspect_ratio}}/,t.opts.img_aspect_ratio)),r.length?(r=r.map((t=>t.replace(/{{file_name}}/,e.name))),n(r,t.opts)):a(l,i.result)}),!1)}),!1),i.readAsDataURL(e)}else a(l)}catch(e){n(e,t.opts)}}))}function _(e){try{let t=e.opts.element.querySelector('input[type="file"]'),s=e.opts.element.querySelector("label");if("auto"===e.opts.filetype){let i=[],s=[];null!==e.opts.accept&&(s=e.opts.accept.split(",").map((e=>e.trim()))),t&&t.getAttribute("accept")&&(i=t.getAttribute("accept").split(",").map((e=>e.trim()))),e.opts.accept=[...new Set([...s,...i])]}else e.opts.accept=i.mimetypes[e.opts.filetype];let a=i.parse_max_filesize(e.opts.max_filesize,e.opts.locales);if(!1===a)throw new Error(`FileUploader: incorrect value for “max_filesize” parameter (${e.opts.max_filesize})`);if(e.opts.max_filesize=a,e.opts.multiple=Boolean(e.opts.multiple||t&&t.hasAttribute("multiple")),e.opts.required=Boolean(e.opts.required||t&&t.hasAttribute("required")),e.opts.disabled=Boolean(e.opts.disabled||t&&t.hasAttribute("disabled")),e.opts._type=-1!==["img","svg","img+svg"].indexOf(e.opts.filetype)?"img":"doc",e.opts._mode=e.opts.multiple?"multiple":"single",!e.opts.uploader_legend_text&&s&&(e.opts.uploader_legend_text=s.innerHTML),e.opts.uploader_legend_text||(e.opts.uploader_legend_text="__legend__"),e.opts.element.classList.add("fupl"),e.opts.wrapper=document.createElement("fieldset"),e.opts.element.parentNode.insertBefore(e.opts.wrapper,e.opts.element),e.opts.wrapper.appendChild(e.opts.element),e.opts.wrapper.classList.add("fupl-wrapper"),e.opts.wrapper.classList.add("fupl-type-"+e.opts._type),e.opts.multiple&&e.opts.wrapper.classList.add("fupl-multiple"),e.opts.wrapper_extra_class&&e.opts.wrapper.classList.add(...e.opts.wrapper_extra_class.split(" ")),e.opts.uploader_legend){let t=["fupl-legend"];e.opts.uploader_legend_class&&t.push(e.opts.uploader_legend_class),e.opts.required&&t.push("required"),e.opts.element.insertAdjacentHTML("beforebegin","<legend"+(t.length?' class="'+t.join(" ")+'"':"")+">"+e.opts.uploader_legend_text+"</legend>"),e.opts.wrapper.classList.add("fupl-has-legend")}if(e.opts.help_text&&e.opts.element.insertAdjacentHTML("beforebegin",`<div class="fupl-help-text">${e.opts.help_text}</div>`),e.opts.element.innerHTML=e.opts.template_main,e.opts.instance_input=e.opts.element.querySelector('.fupl-panel input[type="file"]'),e.opts.instance_label=e.opts.element.querySelector(".fupl-panel label"),e.opts.instance_dd_text=e.opts.element.querySelector(".fupl-panel .fupl-dd-text"),e.opts.instance_info_text=e.opts.element.querySelector(".fupl-panel .fupl-info-text"),e.opts.instance_result_wrapper=e.opts.element.querySelector(".fupl-result"),e.opts.multiple&&e.opts.instance_input.setAttribute("multiple",""),null!==e.opts.accept&&e.opts.instance_input.setAttribute("accept",e.opts.accept.join(",")),e.opts.required&&(e.opts.wrapper.dataset.required="true"),e.opts.disabled&&(e.opts.wrapper.setAttribute("disabled",!0),e.opts.wrapper.setAttribute("aria-disabled",!0)),e.opts.instance_label.insertAdjacentHTML("beforeend",e.strs[`${e.opts._type}_${e.opts._mode}_select_text`]),e.opts.input_label_class&&e.opts.instance_label.classList.add(...e.opts.input_label_class.split(" ")),e.opts.instance_dd_text.innerHTML=e.strs[`${e.opts._type}_${e.opts._mode}_drag_text`],e.opts.show_info_text&&(e.opts.custom_info_text?e.opts.instance_info_text.innerHTML=e.opts.custom_info_text:e.opts.instance_info_text.innerHTML=function(e){let t=[];switch(e.opts.filetype){case"img":t.push(e.strs.info_text_std_imgs);break;case"img+svg":t.push(e.strs.info_text_imgs_svg);break;case"svg":t.push(e.strs.info_text_svg_file);break;case"pdf":t.push(e.strs.info_text_pdf_file)}if(null!==e.opts.max_filesize&&t.push(e.strs.info_text_max_filesize),"img"===e.opts.filetype||"img+svg"===e.opts.filetype){let i=[];e.opts.img_w&&e.opts.img_h?i.push(e.strs.info_text_img_fixed_size):e.opts.img_min_w&&e.opts.img_min_h&&e.opts.img_min_w===e.opts.img_min_h?i.push(e.strs.info_text_img_equal_min_size):e.opts.img_max_w&&e.opts.img_max_h&&e.opts.img_max_w===e.opts.img_max_h?i.push(e.strs.info_text_img_equal_max_size):(e.opts.img_w?i.push(e.strs.info_text_img_fixed_width):e.opts.img_min_w&&e.opts.img_max_w?i.push(e.strs.info_text_img_width_range):e.opts.img_min_w?i.push(e.strs.info_text_img_min_width):e.opts.img_max_w&&i.push(e.strs.info_text_img_max_width),e.opts.img_h?i.push(e.strs.info_text_img_fixed_height):e.opts.img_min_h&&e.opts.img_max_h?i.push(e.strs.info_text_img_height_range):e.opts.img_min_h?i.push(e.strs.info_text_img_min_height):e.opts.img_max_h&&i.push(e.strs.info_text_img_max_height)),null!==e.opts.img_aspect_ratio&&i.push(e.strs.info_text_img_aspect_ratio),i.length&&t.push(("img+svg"===e.opts.filetype?e.strs.info_text_imgs_svg_size_info_text:"")+i.join(", "))}t=t.map((t=>t.replace(/{{img_w}}/,e.opts.img_w).replace(/{{img_h}}/,e.opts.img_h).replace(/{{img_min_w}}/,e.opts.img_min_w).replace(/{{img_min_h}}/,e.opts.img_min_h).replace(/{{img_max_w}}/,e.opts.img_max_w).replace(/{{img_max_h}}/,e.opts.img_max_h).replace(/{{img_aspect_ratio}}/,e.opts.img_aspect_ratio).replace(/{{max_filesize}}/,e.opts.max_filesize?e.opts.max_filesize.feedback_size:null)));let i=t.join(e.opts.info_text_join_string);return i=i.charAt(0).toUpperCase()+i.slice(1),e.opts.info_text_wrap_string&&i&&(i=e.opts.info_text_wrap_string[0]+i+e.opts.info_text_wrap_string[1]),"img"!==e.opts.filetype&&"img+svg"!==e.opts.filetype||(i+="<div>"+e.strs.info_text_img_optimize_info+"</div>"),"svg"!==e.opts.filetype&&"img+svg"!==e.opts.filetype||(i+="<div>"+e.strs.info_text_svg_optimize_info+"</div>"),i}(e)),e.opts.sortable){if(!e.opts.multiple||!e.opts.sortable_varname)throw new Error(`FileUploader: incorrect “sortable” settings:\n"sortable": ${e.opts.sortable?"true":"false"}\n"multiple": ${e.opts.multiple?"true":"false"}\n"sortable_varname": "${e.opts.sortable_varname}"`);e.opts.instance_result_wrapper.classList.add("fupl-sortable")}if(e.opts.values){if("object"!=typeof e.opts.values)throw new Error("FileUploader: incorrect “values” parameter");Array.isArray(e.opts.values)||(e.opts.values=[e.opts.values])}if(e.opts.values&&e.opts.values.length&&e.opts.values.forEach((t=>{o(t,e,!0)})),i.set_has_values(e),function(e){["dragenter","dragover","dragleave","drop"].forEach((t=>{e.opts.element.addEventListener(t,(e=>{e.preventDefault(),e.stopPropagation()}),!1)})),["dragover","dragenter"].forEach((t=>{e.opts.element.addEventListener(t,(()=>{e.opts.element.classList.add(e.opts.element_dragover_class)}),!1)})),["dragleave","dragend"].forEach((t=>{e.opts.element.addEventListener(t,(()=>{e.opts.element.classList.remove(e.opts.element_dragover_class)}),!1)})),e.opts.element.addEventListener("drop",(t=>{if(e.opts.element.classList.remove(e.opts.element_dragover_class),!e.opts.wrapper.hasAttribute("disabled")){let i=t.dataTransfer.files;i.length&&(!e.opts.multiple&&i.length>1?n(e.strs.alert_too_much_files,e.opts):p(i,e))}}),!1),e.opts.instance_input.addEventListener("change",(()=>{p(e.opts.instance_input.files,e)}))}(e),null!==e.opts.init_callback&&i.exec_callback(e.opts.init_callback,e),e.opts.fancybox&&null!==e.opts.fancybox_callback_func&&i.exec_callback(e.opts.fancybox_callback_func,e.opts),e.opts.debug){const t=Object.keys(e.opts).sort().reduce(((t,i)=>(t[i]=JSON.stringify(e.opts[i]),t)),{});void 0===window.fileUploderOpts&&(window.fileUploderOpts={}),window.fileUploderOpts[e.opts.varname]=t,console.groupCollapsed(`FileUploader ${e.opts._vers} options`),console.table(t),console.groupEnd()}}catch(e){console.error(e)}}
/*!@preserve
*
* FileUploader 2
* HTML5 / JS Async Uploader
* Massimo Cassandro 2017-2021
*
*/
return function(s){const a=Object.assign({},e,s.local_strs||{});let r=Object.assign({_vers:"3.4.2"},t,s.options||{});for(let e in r)"string"==typeof r[e]&&(r[e]=r[e].replace(/\{\{(.*?)\}\}/g,((e,t)=>a[t])));var l;l={selector:s.selector||".file-uploader2",css:s.css||null,opts:r,strs:a},i.isSuitableBrowser()?(l.css&&document.head.insertAdjacentHTML("beforeend",'<link rel="stylesheet" href="'+l.css+'" type="text/css" media="all">'),document.querySelectorAll(l.selector).forEach((e=>{let t=Object.assign({},e.dataset);delete t.fileUploader;let s=Object.assign({},l.opts,JSON.parse(e.dataset.fileUploader||"{}"),t);s.element=e;try{if(!s.uploader_url)throw new Error("FileUploader: missing `uploader_url` parameter");if(s.filetype=s.filetype.toLowerCase(),s.aspect_ratio_accuracy=10**+s.aspect_ratio_accuracy,-1!==["svg+img","img-svg","svg-img"].indexOf(s.filetype)&&(s.filetype="img+svg"),-1===Object.keys(i.mimetypes).indexOf(s.filetype))throw new Error("FileUploader: incorrect `filetype` parameter")}catch(e){console.error(e)}["info_text_wrap_string","values","extra_fields"].forEach((e=>{try{"string"==typeof s[e]&&(s[e]=JSON.parse(s[e]))}catch(t){console.error(`FileUploader: the “${e}” parameter is not a valid json`),console.log(s.element),console.error(t)}}));for(let e in s)"string"==typeof s[e]&&-1!==["true","false","null"].indexOf(s[e].toLowerCase())&&(s[e]=JSON.parse(s[e]));if(s.img_aspect_ratio&&s.img_w&&s.img_h&&(console.error("FileUploader: the aspect ratio parameter will be ignored, because exact constraints have been set for width and height"),s.img_aspect_ratio=null),s.img_aspect_ratio_parsed=null,s.img_aspect_ratio)try{if(isNaN(s.img_aspect_ratio)){let e,t;-1!==s.img_aspect_ratio.indexOf("/")?[e,t]=s.img_aspect_ratio.split("/"):-1!==s.img_aspect_ratio.indexOf(":")&&([e,t]=s.img_aspect_ratio.split(":")),e&&t?(s.img_aspect_ratio_parsed=+e/+t,s.img_aspect_ratio=`${e}:${t}`):s.img_aspect_ratio_parsed=Number(s.img_aspect_ratio)}else s.img_aspect_ratio_parsed=+s.img_aspect_ratio;if(s.img_aspect_ratio_parsed&&(s.img_aspect_ratio_parsed=Math.round((s.img_aspect_ratio_parsed+Number.EPSILON)*s.aspect_ratio_accuracy)/s.aspect_ratio_accuracy),isNaN(s.img_aspect_ratio_parsed)||!s.img_aspect_ratio_parsed)throw new Error}catch(e){console.error(`FileUploader: incorrect aspect ratio parameter → ${s.img_aspect_ratio}`),s.img_aspect_ratio=null,s.img_aspect_ratio_parsed=null}s.fupl_alert_btn_class&&(s.fupl_alert_template=s.fupl_alert_template.replace("fupl-alert-btn","fupl-alert-btn "+s.fupl_alert_btn_class)),new _({strs:l.strs,opts:s})}))):"console"in window&&console.error("This browser can't run FileUploader")}}));
//# sourceMappingURL=FileUploader.umd.min.js.map