Current File : /home/pacjaorg/.trash/media.1/system/js/fields/joomla-field-media.min.js |
import o from"joomla.dialog";/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/if(!window.Joomla)throw new Error("Joomla API is not properly initiated");const h=n=>{const t=n.split(/[#]/);return t.length>1?t[1].split(/[?]/)[0].split(".").pop().trim():n.split(/[#?]/)[0].split(".").pop().trim()};class d extends HTMLElement{constructor(){super(),this.show=this.show.bind(this),this.clearValue=this.clearValue.bind(this),this.modalClose=this.modalClose.bind(this),this.setValue=this.setValue.bind(this),this.updatePreview=this.updatePreview.bind(this),this.validateValue=this.validateValue.bind(this),this.markValid=this.markValid.bind(this),this.markInvalid=this.markInvalid.bind(this),this.mimeType=""}static get observedAttributes(){return["base-path","root-folder","url","modal-title","modal-width","modal-height","input","button-select","button-clear","preview","preview-width","preview-height"]}get types(){return this.getAttribute("types")||""}set types(t){this.setAttribute("types",t)}get basePath(){return this.getAttribute("base-path")}set basePath(t){this.setAttribute("base-path",t)}get url(){return this.getAttribute("url")}set url(t){this.setAttribute("url",t)}get input(){return this.getAttribute("input")}set input(t){this.setAttribute("input",t)}get buttonSelect(){return this.getAttribute("button-select")}set buttonSelect(t){this.setAttribute("button-select",t)}get buttonClear(){return this.getAttribute("button-clear")}set buttonClear(t){this.setAttribute("button-clear",t)}get modalWidth(){return this.getAttribute("modal-width")}set modalWidth(t){this.setAttribute("modal-width",t)}get modalHeight(){return this.getAttribute("modal-height")}set modalHeight(t){this.setAttribute("modal-height",t)}get modalTitle(){return this.getAttribute("modal-title")}set modalTitle(t){this.setAttribute("modal-title",t)}get previewWidth(){return parseInt(this.getAttribute("preview-width"),10)}set previewWidth(t){this.setAttribute("preview-width",t)}get previewHeight(){return parseInt(this.getAttribute("preview-height"),10)}set previewHeight(t){this.setAttribute("preview-height",t)}get preview(){return this.getAttribute("preview")}set preview(t){this.setAttribute("preview",t)}get previewContainer(){return this.getAttribute("preview-container")}connectedCallback(){if(this.button=this.querySelector(this.buttonSelect),this.inputElement=this.querySelector(this.input),this.buttonClearEl=this.querySelector(this.buttonClear),this.previewElement=this.querySelector(".field-media-preview"),!this.button||!this.inputElement||!this.buttonClearEl)throw new Error("Misconfiguaration...");if(this.button.addEventListener("click",this.show),this.buttonClearEl&&this.buttonClearEl.addEventListener("click",this.clearValue),this.supportedExtensions=Joomla.getOptions("media-picker",{}),!Object.keys(this.supportedExtensions).length)throw new Error("Joomla API is not properly initiated");this.inputElement.removeAttribute("readonly"),this.inputElement.addEventListener("change",this.validateValue),this.updatePreview()}disconnectedCallback(){this.button&&this.button.removeEventListener("click",this.show),this.buttonClearEl&&this.buttonClearEl.removeEventListener("click",this.clearValue),this.inputElement&&this.inputElement.removeEventListener("change",this.validateValue),this.dialog&&this.dialog.close()}show(){const t=new o({popupType:"iframe",src:this.url,textHeader:this.modalTitle,width:this.modalWidth,height:this.modalHeight,popupButtons:[{label:Joomla.Text._("JSELECT"),className:"button button-success btn btn-success",location:"header",onClick:()=>{this.modalClose()}},{label:"",ariaLabel:Joomla.Text._("JCLOSE"),className:"button-close btn-close",data:{buttonClose:"",dialogClose:""},location:"header"}]});t.classList.add("joomla-dialog-media-field"),t.show(),Joomla.Modal.setCurrent(t),t.addEventListener("joomla-dialog:close",()=>{Joomla.Modal.setCurrent(null),t.destroy(),this.dialog=null,Joomla.selectedMediaFile={}}),this.dialog=t}async modalClose(){try{const t=Joomla.selectedMediaFile;t&&t.type==="dir"?this.setValue(this.types.includes("directories")?t.path:""):await Joomla.getMedia(t,this.inputElement,this)}catch{Joomla.renderMessages({error:[Joomla.Text._("JLIB_APPLICATION_ERROR_SERVER")]})}Joomla.selectedMediaFile={},this.dialog.close()}setValue(t){this.inputElement.value=t,this.validatedUrl=t,this.mimeType=Joomla.selectedMediaFile.fileType,this.updatePreview(),this.inputElement.dispatchEvent(new Event("change")),this.dispatchEvent(new CustomEvent("change",{detail:{value:t},bubbles:!0}))}async validateValue(t){let{value:e}=t.target;if(!(this.validatedUrl===e||e===""))if(/^(http(s)?:\/\/).+$/.test(e))try{fetch(e).then(a=>{a.status===200?(this.validatedUrl=e,this.markValid()):(this.validatedUrl=e,this.markInvalid())})}catch{this.validatedUrl=e,this.markInvalid()}else{/^\//.test(e)&&(e=e.substring(1));const s=e.split("#")[0].split("/"),i=s.slice(1);fetch(`${Joomla.getOptions("system.paths").rootFull}/${e}`).then(l=>l.blob()).then(l=>{if(l.type.includes("image")){const r=new Image;r.src=URL.createObjectURL(l),r.onload=()=>{this.inputElement.value=`${s[0]}/${i.join("/")}#joomlaImage://local-${s[0]}/${i.join("/")}?width=${r.width}&height=${r.height}`,this.validatedUrl=`${s[0]}/${i.join("/")}#joomlaImage://local-${s[0]}/${i.join("/")}?width=${r.width}&height=${r.height}`,this.markValid()}}else l.type.includes("audio")?(this.mimeType=l.type,this.inputElement.value=e,this.validatedUrl=e,this.markValid()):l.type.includes("video")?(this.mimeType=l.type,this.inputElement.value=e,this.validatedUrl=e,this.markValid()):l.type.includes("application/pdf")?(this.mimeType=l.type,this.inputElement.value=e,this.validatedUrl=e,this.markValid()):(this.validatedUrl=e,this.markInvalid())}).catch(()=>{this.setValue(e),this.validatedUrl=e,this.markInvalid()})}}markValid(){this.inputElement.removeAttribute("required"),this.inputElement.removeAttribute("pattern"),document.formvalidator&&document.formvalidator.validate(this.inputElement)}markInvalid(){this.inputElement.setAttribute("required",""),this.inputElement.setAttribute("pattern","/^(http://INVALID/).+$/"),document.formvalidator&&document.formvalidator.validate(this.inputElement)}clearValue(){this.setValue(""),this.validatedUrl="",this.inputElement.removeAttribute("required"),this.inputElement.removeAttribute("pattern"),document.formvalidator&&document.formvalidator.validate(this.inputElement)}updatePreview(){if(!(["true","static"].indexOf(this.preview)===-1||this.preview==="false"||!this.previewElement)&&this.preview){const{value:t}=this.inputElement,{supportedExtensions:e}=this;if(!t)this.buttonClearEl.style.display="none",this.previewElement.innerHTML=Joomla.sanitizeHtml('<span class="field-media-preview-icon"></span>');else{let a;this.buttonClearEl.style.display="",this.previewElement.innerHTML="";const s=h(t).toLowerCase();e.images.includes(s)&&(a="images"),e.audios.includes(s)&&(a="audios"),e.videos.includes(s)&&(a="videos"),e.documents.includes(s)&&(a="documents");let i;const l={images:()=>{e.images.includes(s)&&(i=new Image,i.src=/http/.test(t)?t:Joomla.getOptions("system.paths").rootFull+t,i.setAttribute("alt",""))},audios:()=>{e.audios.includes(s)&&(i=document.createElement("audio"),i.src=/http/.test(t)?t:Joomla.getOptions("system.paths").rootFull+t,i.setAttribute("controls",""))},videos:()=>{if(e.videos.includes(s)){i=document.createElement("video");const r=document.createElement("source");r.src=/http/.test(t)?t:Joomla.getOptions("system.paths").rootFull+t,r.type=this.mimeType,i.setAttribute("controls",""),i.setAttribute("width",this.previewWidth),i.setAttribute("height",this.previewHeight),i.appendChild(r)}},documents:()=>{e.documents.includes(s)&&(i=document.createElement("object"),i.data=/http/.test(t)?t:Joomla.getOptions("system.paths").rootFull+t,i.type=this.mimeType,i.setAttribute("width",this.previewWidth),i.setAttribute("height",this.previewHeight))}};if(this.givenType&&["images","audios","videos","documents"].includes(this.givenType))l[this.givenType]();else if(a&&["images","audios","videos","documents"].includes(a))l[a]();else return;this.previewElement.style.width=this.previewWidth,this.previewElement.appendChild(i)}}}}customElements.define("joomla-field-media",d);