Current File : /home/pacjaorg/.trash/media.1/system/js/fields/joomla-field-subform.min.js
/**
 * @copyright  (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */const KEYCODE={SPACE:"Space",ESC:"Escape",ENTER:"Enter"};function hasModifier(g){return g.ctrlKey||g.metaKey||g.shiftKey}class JoomlaFieldSubform extends HTMLElement{get buttonAdd(){return this.getAttribute("button-add")}get buttonRemove(){return this.getAttribute("button-remove")}get buttonMove(){return this.getAttribute("button-move")}get rowsContainer(){return this.getAttribute("rows-container")}get repeatableElement(){return this.getAttribute("repeatable-element")}get minimum(){return this.getAttribute("minimum")}get maximum(){return this.getAttribute("maximum")}get name(){return this.getAttribute("name")}set name(e){this.template=this.template.replace(new RegExp(` name="${this.name.replace(/[[\]]/g,"\\$&")}`,"g"),` name="${e}`),this.setAttribute("name",e)}constructor(){super();const e=this;if(this.containerWithRows=this,this.rowsContainer){const t=this.querySelectorAll(this.rowsContainer);Array.from(t).forEach(o=>{o.closest("joomla-field-subform")===this&&(this.containerWithRows=o)})}this.lastRowIndex=this.getRows().length-1,this.template="",this.prepareTemplate(),(this.buttonAdd||this.buttonRemove)&&(this.addEventListener("click",t=>{let o=null,l=null;if(e.buttonAdd&&(o=t.target.closest(e.buttonAdd)),e.buttonRemove&&(l=t.target.closest(e.buttonRemove)),o&&o.closest("joomla-field-subform")===e){let n=o.closest(e.repeatableElement);n=n&&n.closest("joomla-field-subform")===e?n:null,e.addRow(n),t.preventDefault()}else if(l&&l.closest("joomla-field-subform")===e){const n=l.closest(e.repeatableElement);e.removeRow(n),t.preventDefault()}}),this.addEventListener("keydown",t=>{if(t.code!==KEYCODE.SPACE)return;const o=e.buttonAdd&&t.target.matches(e.buttonAdd),l=e.buttonRemove&&t.target.matches(e.buttonRemove);if((o||l)&&t.target.closest("joomla-field-subform")===e){let n=t.target.closest(e.repeatableElement);n=n&&n.closest("joomla-field-subform")===e?n:null,l&&n?e.removeRow(n):o&&e.addRow(n),t.preventDefault()}})),this.buttonMove&&this.setUpDragSort()}getRows(){const e=Array.from(this.containerWithRows.children),t=[];return e.forEach(o=>{o.matches(this.repeatableElement)&&t.push(o)}),t}prepareTemplate(){const e=[].slice.call(this.children).filter(t=>t.classList.contains("subform-repeatable-template-section"));if(e[0]&&(this.template=e[0].innerHTML),!this.template)throw new Error("The row template is required for the subform element to work")}addRow(e){const t=this.getRows().length;if(t>=this.maximum)return null;let o;this.containerWithRows.nodeName==="TBODY"||this.containerWithRows.nodeName==="TABLE"?o=document.createElement("tbody"):o=document.createElement("div"),o.innerHTML=this.template;const l=o.children[0];return e?e.parentNode.insertBefore(l,e.nextSibling):this.containerWithRows.append(l),this.buttonMove&&(l.setAttribute("draggable","false"),l.setAttribute("aria-grabbed","false"),l.setAttribute("tabindex","0")),l.setAttribute("data-new","1"),this.fixUniqueAttributes(l,t),this.dispatchEvent(new CustomEvent("subform-row-add",{detail:{row:l},bubbles:!0})),l.dispatchEvent(new CustomEvent("joomla:updated",{bubbles:!0,cancelable:!0})),l}removeRow(e){this.getRows().length<=this.minimum||(this.dispatchEvent(new CustomEvent("subform-row-remove",{detail:{row:e},bubbles:!0})),e.dispatchEvent(new CustomEvent("joomla:removed",{bubbles:!0,cancelable:!0})),e.parentNode.removeChild(e))}fixUniqueAttributes(e,t){const o=t||0,l=e.getAttribute("data-group"),n=e.getAttribute("data-base-name"),p=Math.max(this.lastRowIndex,o),h=n+p;this.lastRowIndex=p+1,e.setAttribute("data-group",h);let r=e.querySelectorAll("[name]");const s={};r=[].slice.call(r).filter(i=>i.nodeName==="JOOMLA-FIELD-SUBFORM"?i.parentElement.closest("joomla-field-subform")===this:i.closest("joomla-field-subform")===this),r.forEach(i=>{const a=i,c=a.getAttribute("name"),E=a.getAttribute("aria-describedby"),b=c.replace(/(\[\]$)/g,"").replace(/(\]\[)/g,"__").replace(/\[/g,"_").replace(/\]/g,""),R=c.replace(`[${l}][`,`[${h}][`);let d=b.replace(l,h).replace(/\W/g,"_"),m=0;const v=a.id;if(a.type==="checkbox"&&c.match(/\[\]$/)){if(m=s[b]?s[b].length:0,!m){let u=a.closest(".checkboxes, fieldset");if(u&&(u=u.nodeName==="FIELDSET"?u:u.parentElement.nodeName==="FIELDSET"?u.parentElement:!1),u){const w=u.id;u.id=d;const f=e.querySelector(`label[for="${w}"]`);f&&(f.setAttribute("for",d),f.id&&f.setAttribute("id",`${d}-lbl`))}}d+=m}else if(a.type==="radio"){if(m=s[b]?s[b].length:0,!m){let u=a.closest(".radio, .switcher, fieldset");if(u&&(u=u.nodeName==="FIELDSET"?u:u.parentElement.nodeName==="FIELDSET"?u.parentElement:!1),u){const w=u.id;u.id=d;const f=e.querySelector(`label[for="${w}"]`);f&&(f.setAttribute("for",d),f.id&&f.setAttribute("id",`${d}-lbl`))}}d+=m}s[b]?s[b].push(!0):s[b]=[!0],a.name=R,a.id&&(a.id=d),E&&a.setAttribute("aria-describedby",`${R}-desc`);const A=e.querySelector(`label[for="${v}"]`);A&&(A.setAttribute("for",d),A.id&&A.setAttribute("id",`${d}-lbl`))})}setUpDragSort(){const e=this;let t=null,o=!1;this.getRows().forEach(r=>{r.setAttribute("draggable","false"),r.setAttribute("aria-grabbed","false"),r.setAttribute("tabindex","0")});function l(r){return!r.form&&r.matches(e.buttonMove)?r:r.closest(e.buttonMove)}function n(r,s){let i=!1;if(r.parentNode===s.parentNode){for(let a=r;a;a=a.previousSibling)if(a===s){i=!0;break}}i?s.parentNode.insertBefore(r,s):s.parentNode.insertBefore(r,s.nextSibling)}this.addEventListener("touchstart",r=>{o=!0;const s=l(r.target),i=s?s.closest(e.repeatableElement):null;!i||i.closest("joomla-field-subform")!==e||(t?(i!==t&&n(t,i),t.setAttribute("draggable","false"),t.setAttribute("aria-grabbed","false"),t=null):(i.setAttribute("draggable","true"),i.setAttribute("aria-grabbed","true"),t=i),r.preventDefault())}),this.addEventListener("mousedown",({target:r})=>{if(o)return;const s=l(r),i=s?s.closest(e.repeatableElement):null;!i||i.closest("joomla-field-subform")!==e||(i.setAttribute("draggable","true"),i.setAttribute("aria-grabbed","true"),t=i)}),this.addEventListener("mouseup",()=>{t&&!o&&(t.setAttribute("draggable","false"),t.setAttribute("aria-grabbed","false"),t=null)}),this.addEventListener("keydown",r=>{if(r.code!==KEYCODE.ESC&&r.code!==KEYCODE.SPACE&&r.code!==KEYCODE.ENTER||r.target.form||!r.target.matches(e.repeatableElement))return;const s=r.target;if(!(!s||s.closest("joomla-field-subform")!==e)&&(r.code===KEYCODE.SPACE&&hasModifier(r)&&(s.getAttribute("aria-grabbed")==="true"?(s.setAttribute("draggable","false"),s.setAttribute("aria-grabbed","false"),t=null):(t&&(t.setAttribute("draggable","false"),t.setAttribute("aria-grabbed","false"),t=null),s.setAttribute("draggable","true"),s.setAttribute("aria-grabbed","true"),t=s),r.preventDefault()),r.code===KEYCODE.ESC&&t&&(t.setAttribute("draggable","false"),t.setAttribute("aria-grabbed","false"),t=null),r.code===KEYCODE.ENTER&&t)){if(t.setAttribute("draggable","false"),t.setAttribute("aria-grabbed","false"),s===t){t=null;return}n(t,s),r.preventDefault(),t=null}}),this.addEventListener("dragstart",({dataTransfer:r})=>{t&&(r.effectAllowed="move",r.setData("text",""))}),this.addEventListener("dragover",r=>{t&&r.preventDefault()}),this.addEventListener("dragenter",({target:r})=>{if(!t||r.parentElement.closest("joomla-field-subform")!==e)return;const s=r.closest(e.repeatableElement);!s||s.closest("joomla-field-subform")!==e||n(t,s)}),this.addEventListener("dragend",()=>{t&&(t.setAttribute("draggable","false"),t.setAttribute("aria-grabbed","false"),t=null)});const p=`${e.buttonMove}-up`,h=`${e.buttonMove}-down`;this.addEventListener("click",({target:r})=>{if(r.closest("joomla-field-subform")!==this)return;const s=r.closest(p),i=s?null:r.closest(h);if(!s&&!i)return;let a=(s||i).closest(e.repeatableElement);if(a=a&&a.closest("joomla-field-subform")===this?a:null,!a)return;const c=this.getRows(),E=c.indexOf(a);let b=0;s?(b=E-1,b=b<0?c.length-1:b):(b=E+1,b=b>c.length-1?0:b),n(a,c[b])})}}customElements.define("joomla-field-subform",JoomlaFieldSubform);
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!