1 line
2.3 KiB
JavaScript
1 line
2.3 KiB
JavaScript
import JoomlaDialog from"joomla.dialog";const setValues=(e,t,a)=>{const o=`${e.id||e.value||""}`,n=t.value!==o;t.value=o,a&&(a.value=e.title||t.value),n&&t.dispatchEvent(new CustomEvent("change",{bubbles:!0,cancelable:!0}))},doSelect=(e,t,a)=>{window.JoomlaExpectingPostMessage=!0;const o=new JoomlaDialog(a);return o.classList.add("joomla-dialog-content-select-field"),o.show(),new Promise((a=>{const n=a=>{a.origin===window.location.origin&&("joomla:content-select"===a.data.messageType?(setValues(a.data,e,t),o.close()):"joomla:cancel"===a.data.messageType&&o.close())};o.addEventListener("joomla-dialog:close",(()=>{delete window.JoomlaExpectingPostMessage,window.removeEventListener("message",n),o.destroy(),a()})),window.addEventListener("message",n)}))},updateView=(e,t)=>{const a=!!e.value;t.querySelectorAll("[data-show-when-value]").forEach((e=>{e.dataset.showWhenValue?a?e.removeAttribute("hidden"):e.setAttribute("hidden",""):a?e.setAttribute("hidden",""):e.removeAttribute("hidden")}))},setupField=e=>{const t=e?e.querySelector(".js-input-value"):null,a=e?e.querySelector(".js-input-title"):null;if(!e||!t)throw new Error("Incomplete markup of Content dialog field");e.addEventListener("change",(()=>{updateView(t,e)})),e.addEventListener("click",(e=>{const o=e.target.closest("[data-button-action]");if(!o)return;e.preventDefault();const n=o.dataset.buttonAction,s=o.dataset.modalConfig?JSON.parse(o.dataset.modalConfig):{};let l;switch(n){case"select":case"create":l=doSelect(t,a,s);break;case"edit":{const e=0===s.src.indexOf("http")?new URL(s.src):new URL(s.src,window.location.origin);e.searchParams.set("id",t.value),s.src=e.toString(),l=doSelect(t,a,s);break}case"clear":l=(async()=>setValues({id:"",title:""},t,a))();break;default:throw new Error(`Unknown action ${n} for Modal select field`)}l.then((()=>{if(o.dataset.checkinUrl){const e=o.dataset.checkinUrl,a=0===e.indexOf("http")?new URL(e):new URL(e,window.location.origin);a.searchParams.set("id",t.value),a.searchParams.set("cid[]",t.value);const n=new FormData;n.append("id",t.value),n.append("cid[]",t.value),Joomla.request({url:a.toString(),method:"POST",promise:!0,data:n})}}))}))},setup=e=>{e.querySelectorAll(".js-modal-content-select-field").forEach((e=>setupField(e)))};document.addEventListener("DOMContentLoaded",(()=>setup(document))),document.addEventListener("joomla:updated",(e=>setup(e.target))); |