Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
{"version":3,"file":"collapsesections.min.js","sources":["../src/collapsesections.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Collapse or expand all form sections on clicking the expand all / collapse al link.\n *\n * @module core_form/collapsesections\n * @copyright 2021 Bas Brands\n * @license http://www.gnu.org/copyleft/gpl.html GN
U GPL v3 or later\n * @since 4.0\n */\n\nimport Collapse from 'theme_boost/bootstrap/collapse';\nimport Pending from 'core/pending';\n\nconst SELECTORS = {\n FORM: '.mform',\n FORMHEADER: '.fheader',\n FORMCONTAINER: 'fieldset > .fcontainer',\n};\n\nconst CLASSES = {\n SHOW: 'show',\n COLLAPSED: 'collapsed',\n HIDDEN: 'd-none'\n};\n\n/**\n * Initialises the form section collapse / expand action.\n *\n * @param {string} collapsesections the collapse/expand link id.\n */\nexport const init = collapsesections => {\n const pendingPromise = new Pending('core_form/collapsesections');\n const collapsemenu = document.querySelector(collapsesections);\n\n const formParent = collapsemenu.closest(SELECTORS.FORM);\n const formContainers = formParent.querySelectorAll(SELECTORS.FORMCONTAINER);\n [...formContainers].map(formContainer => new Collapse(formContainer, {toggle: false}));\n\n collapsemenu.addEventListener('keydown', e => {\n if (e.key === 'Enter' || e.key === ' ') {\n
e.preventDefault();\n collapsemenu.click();\n }\n });\n\n // Override default collapse class if all visible containers are expanded on page load\n let formcontainercount = 0;\n let expandedcount = 0;\n formContainers.forEach(container => {\n const parentFieldset = container.parentElement;\n if (!parentFieldset.classList.contains(CLASSES.HIDDEN)) {\n formcontainercount++;\n }\n if (container.classList.contains(CLASSES.SHOW)) {\n expandedcount++;\n }\n });\n\n if (formcontainercount === expandedcount) {\n collapsemenu.classList.remove(CLASSES.COLLAPSED);\n collapsemenu.setAttribute('aria-expanded', true);\n }\n\n // When the collapse menu is toggled, update each form container to match.\n collapsemenu.addEventListener('click', () => {\n if (collapsemenu.classList.contains(CLASSES.COLLAPSED)) {\n const pendingPromiseToggle = new Pending('core_form/collapsesections:tog
gle-on');\n formContainers.forEach((container, index, array) => {\n Collapse.getInstance(container).show();\n if (index === array.length - 1) {\n pendingPromiseToggle.resolve();\n }\n });\n } else {\n const pendingPromiseToggle = new Pending('core_form/collapsesections:toggle-off');\n formContainers.forEach((container, index, array) => {\n Collapse.getInstance(container).hide();\n if (index === array.length - 1) {\n pendingPromiseToggle.resolve();\n }\n });\n }\n });\n\n // Ensure collapse menu button adds aria-controls attribute referring to each collapsible element.\n const collapseElements = formParent.querySelectorAll(SELECTORS.FORMHEADER);\n const collapseElementIds = [...collapseElements].map((element, index) => {\n element.id = element.id || `collapseElement-${index}`;\n return elem
ent.id;\n });\n collapsemenu.setAttribute('aria-controls', collapseElementIds.join(' '));\n\n // When any form container is toggled, re-calculate collapse menu state.\n const collapseTriggerList = document.querySelectorAll(SELECTORS.FORMCONTAINER);\n [...collapseTriggerList].forEach(collapseTriggerEl => {\n collapseTriggerEl.addEventListener('hidden.bs.collapse', () => {\n const allCollapsed = [...formContainers].every(container => !container.classList.contains(CLASSES.SHOW));\n if (allCollapsed) {\n collapsemenu.classList.add(CLASSES.COLLAPSED);\n collapsemenu.setAttribute('aria-expanded', false);\n }\n });\n collapseTriggerEl.addEventListener('shown.bs.collapse', () => {\n const allExpanded = [...formContainers].every(container => container.classList.contains(CLASSES.SHOW));\n if (allExpanded) {\n collapsemenu.classList.remove(CLASSES.COLLAPSED);\n collapsem
enu.setAttribute('aria-expanded', true);\n }\n });\n });\n pendingPromise.resolve();\n};\n"],"names":["SELECTORS","CLASSES","collapsesections","pendingPromise","Pending","collapsemenu","document","querySelector","formParent","closest","formContainers","querySelectorAll","map","formContainer","Collapse","toggle","addEventListener","e","key","preventDefault","click","formcontainercount","expandedcount","forEach","container","parentElement","classList","contains","remove","setAttribute","pendingPromiseToggle","index","array","getInstance","show","length","resolve","hide","collapseElementIds","element","id","join","collapseTriggerEl","every","add"],"mappings":";;;;;;;;8KA2BMA,eACI,SADJA,qBAEU,WAFVA,wBAGa,yBAGbC,aACI,OADJA,kBAES,YAFTA,eAGM,uBAQQC,yBACVC,eAAiB,IAAIC,iBAAQ,8BAC7BC,aAAeC,SAASC,cAAcL,kBAEtCM,WAAaH,aAAaI,QAAQT,gBAClCU,eAAiBF,WAAWG,iBAAiBX,6BAC/CU,gBAAgBE,KAAIC,eAAiB,IAAIC,kBAASD,cAAe,CAACE,QAAQ,MAE9EV,aAAaW,iBAAiB,WAAWC,IACvB,UAAVA,EAAEC,KAA6B,MAAVD,EAAEC,MACvBD,EAAEE,iBACFd,aA
Aae,gBAKjBC,mBAAqB,EACrBC,cAAgB,EACpBZ,eAAea,SAAQC,YACIA,UAAUC,cACbC,UAAUC,SAAS1B,iBACnCoB,qBAEAG,UAAUE,UAAUC,SAAS1B,eAC7BqB,mBAIJD,qBAAuBC,gBACvBjB,aAAaqB,UAAUE,OAAO3B,mBAC9BI,aAAawB,aAAa,iBAAiB,IAI/CxB,aAAaW,iBAAiB,SAAS,QAC/BX,aAAaqB,UAAUC,SAAS1B,mBAAoB,OAC9C6B,qBAAuB,IAAI1B,iBAAQ,wCACzCM,eAAea,SAAQ,CAACC,UAAWO,MAAOC,2BAC7BC,YAAYT,WAAWU,OAC5BH,QAAUC,MAAMG,OAAS,GACzBL,qBAAqBM,iBAG1B,OACGN,qBAAuB,IAAI1B,iBAAQ,yCACzCM,eAAea,SAAQ,CAACC,UAAWO,MAAOC,2BAC7BC,YAAYT,WAAWa,OAC5BN,QAAUC,MAAMG,OAAS,GACzBL,qBAAqBM,uBAQ/BE,mBAAqB,IADF9B,WAAWG,iBAAiBX,uBACJY,KAAI,CAAC2B,QAASR,SAC3DQ,QAAQC,GAAKD,QAAQC,8BAAyBT,OACvCQ,QAAQC,MAEnBnC,aAAawB,aAAa,gBAAiBS,mBAAmBG,KAAK,UAGvCnC,SAASK,iBAAiBX,0BAC7BuB,SAAQmB,oBAC7BA,kBAAkB1B,iBAAiB,sBAAsB,KAChC,IAAIN,gBAAgBiC,OAAMnB,YAAcA,UAAUE,UAAUC,SAAS1B,kBAEtFI,aAAaqB,UAAUkB,IAAI3C,mBAC3BI,aAAawB,aAAa,iBAAiB,OAGnDa,kBAAkB1B,iBAAiB,qBAAqB,KAChC,IAAIN,gBAAgBiC,OAAMnB,WAAaA,UAAUE,UAAUC,SAAS1B,kBAEpFI,aAAaqB,UAAUE,OAAO3B,mBAC9BI,aAAawB,aAAa,iBAAiB,UAIvD1B,eAAeiC"}