3 lines
6.3 KiB
JavaScript
3 lines
6.3 KiB
JavaScript
window.NodeList&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null});var ACF_Upload_Instance=function(){function e(e){this.elem=e,this.item_id=1,this.token=Joomla.getOptions("csrf.token"),this.upload_url="index.php?option=com_ajax&format=raw&plugin=ACFUpload&group=fields",this.init()}var t=e.prototype;return t.init=function(){var e=this.elem.previousElementSibling,t=e.innerHTML;if("1"!=this.elem.getAttribute("data-disabled")){e.parentElement.removeChild(e);var i=parseFloat(this.elem.getAttribute("data-maxfilesize"));i=i||null;var o=parseInt(this.elem.getAttribute("data-maxfiles")),n=1!=(o=o||null),r=!(!this.elem.previousElementSibling||"INPUT"!=this.elem.previousElementSibling.nodeName),a=this;new Dropzone(this.elem,{url:this.elem.dataset.baseurl+this.upload_url,previewTemplate:t,maxFilesize:i,uploadMultiple:n,maxFiles:o,acceptedFiles:this.elem.getAttribute("data-acceptedfiles"),autoProcessQueue:!0,parallelUploads:1,filesizeBase:1e3,createImageThumbnails:!1,previewsContainer:this.elem.querySelector(".acfupload-items"),timeout:0,dictFallbackMessage:Joomla.JText._("ACF_UPLOAD_FALLBACK_MESSAGE"),dictFileTooBig:Joomla.JText._("ACF_UPLOAD_FILETOOBIG"),dictInvalidFileType:Joomla.JText._("ACF_UPLOAD_INVALID_FILE"),dictResponseError:Joomla.JText._("ACF_UPLOAD_RESPONSE_ERROR"),dictCancelUpload:Joomla.JText._("ACF_UPLOAD_CANCEL_UPLOAD"),dictCancelUploadConfirmation:Joomla.JText._("ACF_UPLOAD_CANCEL_UPLOAD_CONFIRMATION"),dictRemoveFile:Joomla.JText._("ACF_UPLOAD_REMOVE_FILE"),dictMaxFilesExceeded:Joomla.JText._("ACF_UPLOAD_MAX_FILES_EXCEEDED"),dictRemoveFileConfirmation:Joomla.JText._("ACF_UPLOAD_REMOVE_FILE_CONFIRM"),init:function(){var e=this;"undefined"!=typeof Sortable&&n&&new Sortable(a.elem.querySelector(".acfupload-items"),{animation:150,handle:".cfup-file",onStart:function(){e.element.setAttribute("data-sorting",!0)},onEnd:function(){e.element.setAttribute("data-sorting",!1)}}),this.on("addedfile",function(t){null==t.upload&&(a.createHiddenInput(t.previewTemplate,t.path,t.title,t.description),t.error?(t.previewTemplate.classList.add("dz-error"),el_error=t.previewTemplate.querySelector(".cfup-error"),el_error.innerHTML=t.error,el_error.style.display="block"):(t.previewTemplate.querySelectorAll(".upload-link").forEach(function(e){return e.setAttribute("href",t.url)}),t.previewTemplate.dataset.file=t.encoded));var e=t.name.split(".");e&&t.previewTemplate.classList.add("cfup-"+e.pop())});var t=a.elem.dataset.value;if(t){t=JSON.parse(t);for(var i=0;i<t.length;i++){var o=t[i];o.accepted=!0,o.exists||(o.error=Joomla.JText._("ACF_UPLOAD_FILE_MISSING")),this.emit("addedfile",o),this.emit("success",o),this.emit("complete",o),this.files.push(o)}}this.on("sending",function(e,t,i){i.append("id",a.elem.dataset.id),i.append(a.token,1)}),this.on("dragenter",function(){"true"===this.element.dataset.sorting&&this.element.classList.remove("dz-drag-hover")}),this.on("dragover",function(){"true"===this.element.dataset.sorting&&this.element.classList.remove("dz-drag-hover")}),this.on("success",function(e){var t=e.xhr.response;try{if(!(t=JSON.parse(t)).file)throw"Cannot upload file";e.encoded=t.file_encode,e.response_name=t.file,e.previewTemplate.querySelectorAll(".upload-link").forEach(function(e){return e.setAttribute("href",t.url)}),e.previewTemplate.dataset.file=t.file_encode,a.createHiddenInput(e.previewTemplate,t.file)}catch(e){alert("Error! "+e)}}),this.on("removedfile",function(e){if(0!=e.size&&0!=e.accepted){var t=new XMLHttpRequest;t.onload=function(){200<=t.status&&t.status<300||alert(t.responseText)},t.open("POST",a.elem.dataset.baseurl+a.upload_url),t.setRequestHeader("X-CSRF-Token",a.token),fd=new FormData,fd.append("file",e.encoded),fd.append("task","delete"),t.send(fd)}}),r&&(a.determineFieldValidityAndToggleValidatorField(a.elem,this.files),this.on("removedfile",function(){a.determineFieldValidityAndToggleValidatorField(a.elem,this.files)}),this.on("complete",function(){a.determineFieldValidityAndToggleValidatorField(a.elem,this.files)}))}})}},t.determineFieldValidityAndToggleValidatorField=function(e,t){var i=t.some(function(e){return"success"==e.status||e.exists});this.toggleHiddenValidatorField(e,i?"hide":"show")},t.toggleHiddenValidatorField=function(e,t){void 0===t&&(t="hide");var i=e.previousElementSibling;if("hide"==t)return i.removeAttribute("required"),void i.classList.remove("required");i.setAttribute("required","required"),i.classList.add("required")},t.createHiddenInput=function(e,t,i,o){void 0===i&&(i=""),void 0===o&&(o="");var n=e.closest(".acfupload").dataset.inputname,r=n.replace("[INDEX]","["+this.item_id+"]");r+="[value]";var a=document.createElement("input");a.setAttribute("type","hidden"),a.setAttribute("name",r),a.setAttribute("value",t),e.appendChild(a);var l=e.querySelector(".cfup-custom-title");l&&(r=n.replace("[INDEX]","["+this.item_id+"]"),r+="[title]",l.setAttribute("name",r),l.setAttribute("value",i));var s=e.querySelector(".cfup-custom-description");s&&(r=n.replace("[INDEX]","["+this.item_id+"]"),r+="[description]",s.setAttribute("name",r),s.setAttribute("value",o)),this.item_id++},e}(),ACF_Upload_Init=function(){function e(){"undefined"!=typeof Dropzone&&(Dropzone.autoDiscover=!1,this.init())}var t=e.prototype;return t.init=function(){this.initEvents(),this.initInstances(this.getElements())},t.initEvents=function(){var t=this;document.querySelectorAll("joomla-field-subform").forEach(function(e){e.addEventListener("subform-row-add",function(e){t.setup(t.getElements(e.detail.row),e.detail.row),t.initInstances(t.getElements(e.detail.row))})})},t.setup=function(e,t){var i=this;e.forEach(function(e){i.updateAttributes(e,t)})},t.initInstances=function(e){e.forEach(function(e){new ACF_Upload_Instance(e)})},t.updateAttributes=function(e,t){var i=t.dataset.group.replace("row","");e.setAttribute("data-inputname",e.getAttribute("data-inputname").replace("[rowX]","[row"+i+"]"))},t.getElements=function(e){return void 0===e&&(e=""),(e=""==e?document:e).querySelectorAll(".acfupload")},e}();document.addEventListener("DOMContentLoaded",function(e){new ACF_Upload_Init});
|
|
|