Current File : /home/pacjaorg/.trash/media.1/system/js/joomla-dialog.min.js |
/**
* @copyright (C) 2023 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/const d=`<div class="joomla-dialog-container">
<header class="joomla-dialog-header"></header>
<section class="joomla-dialog-body"></section>
<footer class="joomla-dialog-footer"></footer>
</div>`;class a extends HTMLElement{constructor(e){super(),this.popupType=this.getAttribute("type")||"inline",this.textHeader=this.getAttribute("text-header")||"",this.iconHeader="",this.textClose=Joomla.Text._("JCLOSE","Close"),this.popupContent="",this.src=this.getAttribute("src")||"",this.popupButtons=[],this.cancelable=!this.hasAttribute("not-cancelable"),this.width=this.getAttribute("width")||"",this.height=this.getAttribute("height")||"",this.popupTemplate=d,this.preferredParent=null,this.popupContentSrcLocation=null,e&&(["popupType","textHeader","textClose","popupContent","src","popupButtons","cancelable","width","height","popupTemplate","iconHeader","id","preferredParent"].forEach(t=>{e[t]!==void 0&&(this[t]=e[t])}),e.className&&this.classList.add(...e.className.split(" ")),e.data&&Object.entries(e.data).forEach(([t,p])=>{this.dataset[t]=p}))}connectedCallback(){this.renderLayout()}renderLayout(){if(this.dialog)return this;const e=()=>{this.dispatchEvent(new CustomEvent("joomla-dialog:close",{bubbles:!0}))},t=i=>{this.cancelable||i.preventDefault()};if(this.firstElementChild&&this.firstElementChild.nodeName==="DIALOG")return this.dialog=this.firstElementChild,this.dialog.addEventListener("cancel",t),this.dialog.addEventListener("close",e),this.popupTmplB=this.querySelector(".joomla-dialog-body")||this.dialog,this.popupContentElement=this.popupTmplB,this;let p;if(this.popupTemplate.tagName&&this.popupTemplate.tagName==="TEMPLATE")p=this.popupTemplate.content.cloneNode(!0);else{const i=document.createElement("template");i.innerHTML=this.popupTemplate,p=i.content}if(this.dialog=document.createElement("dialog"),this.dialog.appendChild(p),this.dialog.addEventListener("cancel",t),this.dialog.addEventListener("close",e),this.appendChild(this.dialog),this.popupTmplH=this.dialog.querySelector(".joomla-dialog-header"),this.popupTmplB=this.dialog.querySelector(".joomla-dialog-body"),this.popupTmplF=this.dialog.querySelector(".joomla-dialog-footer"),this.popupContentElement=null,!this.popupTmplB)throw new Error("The popup body not found in the template.");if(this.popupTmplH&&this.textHeader){const i=document.createElement("h3");if(i.insertAdjacentHTML("afterbegin",this.textHeader),this.popupTmplH.insertAdjacentElement("afterbegin",i),this.iconHeader){const n=document.createElement("span");n.ariaHidden=!0,n.classList.add("header-icon"),n.classList.add(...this.iconHeader.split(" ")),this.popupTmplH.insertAdjacentElement("afterbegin",n)}}this.renderBodyContent(),this.setAttribute("type",this.popupType);const s=this.popupButtons||[];s.length||s.push({label:"",ariaLabel:this.textClose,className:"button-close btn-close",data:{buttonClose:""},onClick:()=>this.close(),location:"header"});const o=document.createElement("div"),l=document.createElement("div");return o.classList.add("buttons-holder"),l.classList.add("buttons-holder"),this.popupButtons.forEach(i=>{const n=document.createElement("button");n.type="button",n.textContent=i.label||"",n.ariaLabel=i.ariaLabel||null,i.className?n.classList.add(...i.className.split(" ")):n.classList.add("button","button-primary","btn","btn-primary"),i.data&&(Object.entries(i.data).forEach(([r,h])=>{n.dataset[r]=h}),i.data.dialogClose!==void 0&&(i.onClick=()=>this.close()),i.data.dialogDestroy!==void 0&&(i.onClick=()=>this.destroy())),i.onClick&&n.addEventListener("click",i.onClick),i.location==="header"?o.appendChild(n):l.appendChild(n)}),o.children.length&&(this.popupType==="image"&&!this.textHeader?this.popupTmplB.insertAdjacentElement("afterbegin",o):this.popupTmplH?this.popupTmplH.insertAdjacentElement("beforeend",o):this.popupTmplB.insertAdjacentElement("afterbegin",o)),l.children.length&&(this.popupTmplF||this.popupTmplB).insertAdjacentElement("beforeend",l),this.width&&(this.dialog.style.width="100%",this.dialog.style.maxWidth=this.width),this.height&&(this.dialog.style.height=this.height),this.popupTmplH&&!this.popupTmplH.children.length&&this.popupTmplH.classList.add("empty"),this.popupTmplF&&!this.popupTmplF.children.length&&this.popupTmplF.classList.add("empty"),this}renderBodyContent(){if(!this.popupTmplB||this.popupContentElement)return this;const e=()=>{this.classList.add("loaded"),this.classList.remove("loading"),this.popupContentElement.removeEventListener("load",e),this.dispatchEvent(new CustomEvent("joomla-dialog:load")),(this.popupType==="inline"||this.popupType==="ajax")&&this.popupContentElement.dispatchEvent(new CustomEvent("joomla:updated",{bubbles:!0,cancelable:!0}))};switch(this.classList.add("loading"),this.popupType){case"inline":{let t=this.popupContent;!t&&this.src&&(this.src[0]==="."||this.src[0]==="#")&&(t=document.querySelector(this.src),this.popupContent=t),t instanceof HTMLElement?t.nodeName==="TEMPLATE"?this.popupTmplB.appendChild(t.content.cloneNode(!0)):(this.popupContentSrcLocation={parent:t.parentElement,nextSibling:t.nextSibling},this.popupTmplB.appendChild(t)):this.popupTmplB.insertAdjacentHTML("afterbegin",Joomla.sanitizeHtml(t)),this.popupContentElement=this.popupTmplB,e();break}case"iframe":{const t=document.createElement("iframe");t.addEventListener("load",e),t.src=this.src,t.width="100%",t.height="720",this.width||(t.style.maxWidth="100%",t.width="1024"),t.classList.add("iframe-content"),this.popupContentElement=t,this.popupTmplB.appendChild(t);break}case"image":{const t=document.createElement("img");t.addEventListener("load",e),t.src=this.src,this.popupContentElement=t,this.popupTmplB.appendChild(t);break}case"ajax":{fetch(this.src).then(t=>{if(t.status!==200)throw new Error(t.statusText);return t.text()}).then(t=>{this.popupTmplB.insertAdjacentHTML("afterbegin",Joomla.sanitizeHtml(t)),this.popupContentElement=this.popupTmplB,e()}).catch(t=>{throw t});break}default:throw new Error("Unknown popup type requested")}return this}findPreferredParent(){let e;if(this.preferredParent instanceof HTMLElement)e=this.preferredParent;else if(this.preferredParent)e=document.querySelector(this.preferredParent);else if(this.popupType==="inline"){let t=this.popupContent;!t&&this.src&&(this.src[0]==="."||this.src[0]==="#")&&(t=document.querySelector(this.src),e=t?t.parentElement:!1)}return e||!1}getHeader(){return this.renderLayout(),this.popupTmplH||!1}getBody(){return this.renderLayout(),this.popupTmplB}getBodyContent(){return this.renderLayout(),this.popupContentElement||this.popupTmplB}getFooter(){return this.renderLayout(),this.popupTmplF||!1}show(){return this.parentElement||(this.findPreferredParent()||document.body).appendChild(this),this.dialog.showModal(),this.dispatchEvent(new CustomEvent("joomla-dialog:open",{bubbles:!0})),this}open(){return this.show()}close(){if(!this.dialog)throw new Error("Calling close for non opened dialog is discouraged.");return this.dialog.close(),this}hide(){return this.close()}destroy(){if(this.dialog){if(this.dialog.close(),this.removeChild(this.dialog),this.parentElement.removeChild(this),this.popupContentSrcLocation&&this.popupContent){const{parent:e,nextSibling:t}=this.popupContentSrcLocation;e.insertBefore(this.popupContent,t)}this.dialog=null,this.popupTmplH=null,this.popupTmplB=null,this.popupTmplF=null,this.popupContentElement=null,this.popupContentSrcLocation=null}}static alert(e,t){return new Promise(p=>{const s=new this;s.popupType="inline",s.popupContent=e,s.textHeader=t||Joomla.Text._("INFO","Info"),s.popupButtons=[{label:Joomla.Text._("JOK","Okay"),data:{buttonOk:""},onClick:()=>s.close()}],s.classList.add("joomla-dialog-alert"),s.addEventListener("joomla-dialog:close",()=>{s.destroy(),p()}),s.show()})}static confirm(e,t){return new Promise(p=>{let s=!1;const o=new this;o.popupType="inline",o.popupContent=e,o.textHeader=t||Joomla.Text._("INFO","Info"),o.popupButtons=[{label:Joomla.Text._("JYES","Yes"),data:{buttonOk:""},onClick:()=>{s=!0,o.destroy()}},{label:Joomla.Text._("JNO","No"),data:{buttonCancel:""},onClick:()=>{s=!1,o.destroy()},className:"button button-secondary btn btn-outline-secondary"}],o.cancelable=!1,o.classList.add("joomla-dialog-confirm"),o.addEventListener("joomla-dialog:close",()=>p(s)),o.show()})}}customElements.define("joomla-dialog",a);export{a as default};