Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 11
Línea 1... Línea -...
1
{"version":3,"file":"section.min.js","sources":["../../../src/local/courseindex/section.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 * Course index section component.\n *\n * This component is used to control specific course section interactions like drag and drop.\n *\n * @module     core_courseformat/local/courseindex/section\n * @class      core_courseformat/local/courseindex/section\n * @copyright  2021 Ferran Recio <ferran@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport SectionTitle from 'core_courseformat/local/courseindex/sectiontitle';\nimport DndSection from 'core_courseformat/local/courseeditor/dndsection';\n\nexport default class Component extends DndSection {\n\n    /**\n     * Constructor hook.\n     */\n    create() {\n        // Optional component name for debugging.\n        this.name = 'courseindex_section';\n        // Default query selectors.\n        this.selectors = {\n            SECTION_ITEM: `[data-for='section_item']`,\n            SECTION_TITLE: `[data-for='section_title']`,\n            CM_LAST: `[data-for=\"cm\"]:last-child`,\n        };\n        // Default classes to toggle on refresh.\n        this.classes = {\n            SECTIONHIDDEN: 'dimmed',\n            SECTIONCURRENT: 'current',\n            LOCKED: 'editinprogress',\n            RESTRICTIONS: 'restrictions',\n            PAGEITEM: 'pageitem',\n            OVERLAYBORDERS: 'overlay-preview-borders',\n        };\n\n        // We need our id to watch specific events.\n        this.id = this.element.dataset.id;\n        this.isPageItem = false;\n    }\n\n    /**\n     * Static method to create a component instance form the mustahce template.\n     *\n     * @param {string} target the DOM main element or its ID\n     * @param {object} selectors optional css selector overrides\n     * @return {Component}\n     */\n    static init(target, selectors) {\n        return new this({\n            element: document.getElementById(target),\n            selectors,\n        });\n    }\n\n    /**\n     * Initial state ready method.\n     *\n     * @param {Object} state the initial state\n     */\n    stateReady(state) {\n        this.configState(state);\n        const sectionItem = this.getElement(this.selectors.SECTION_ITEM);\n        // Drag and drop is only available for components compatible course formats.\n        if (this.reactive.isEditing && this.reactive.supportComponents) {\n            // Init the inner dragable element passing the full section as affected region.\n            const titleitem = new SectionTitle({\n                ...this,\n                element: sectionItem,\n                fullregion: this.element,\n            });\n            this.configDragDrop(titleitem);\n        }\n        // Check if the current url is the section url.\n        const section = state.section.get(this.id);\n        if (window.location.href == section.sectionurl.replace(/&amp;/g, \"&\")) {\n            this.reactive.dispatch('setPageItem', 'section', this.id);\n            sectionItem.scrollIntoView();\n        }\n    }\n\n    /**\n     * Component watchers.\n     *\n     * @returns {Array} of watchers\n     */\n    getWatchers() {\n        return [\n            {watch: `section[${this.id}]:deleted`, handler: this.remove},\n            {watch: `section[${this.id}]:updated`, handler: this._refreshSection},\n            {watch: `course.pageItem:updated`, handler: this._refreshPageItem},\n        ];\n    }\n\n    /**\n     * Get the last CM element of that section.\n     *\n     * @returns {element|null}\n     */\n    getLastCm() {\n        return this.getElement(this.selectors.CM_LAST);\n    }\n\n    /**\n     * Update a course index section using the state information.\n     *\n     * @param {Object} param details the update details.\n     * @param {Object} param.element the section element\n     */\n    _refreshSection({element}) {\n        // Update classes.\n        const sectionItem = this.getElement(this.selectors.SECTION_ITEM);\n        sectionItem.classList.toggle(this.classes.SECTIONHIDDEN, !element.visible);\n        sectionItem.classList.toggle(this.classes.RESTRICTIONS, element.hasrestrictions ?? false);\n        this.element.classList.toggle(this.classes.SECTIONCURRENT, element.current);\n        this.element.classList.toggle(this.classes.DRAGGING, element.dragging ?? false);\n        this.element.classList.toggle(this.classes.LOCKED, element.locked ?? false);\n        this.locked = element.locked;\n        // Update title.\n        this.getElement(this.selectors.SECTION_TITLE).innerHTML = element.title;\n    }\n\n    /**\n     * Handle a page item update.\n     *\n     * @param {Object} details the update details\n     * @param {Object} details.state the state data.\n     * @param {Object} details.element the course state data.\n     */\n    _refreshPageItem({element, state}) {\n        if (!element.pageItem) {\n            return;\n        }\n        if (element.pageItem.sectionId !== this.id && this.isPageItem) {\n            this.pageItem = false;\n            this.getElement(this.selectors.SECTION_ITEM).classList.remove(this.classes.PAGEITEM);\n            return;\n        }\n        const section = state.section.get(this.id);\n        if (section.indexcollapsed && !element.pageItem?.isStatic) {\n            this.pageItem = (element.pageItem?.sectionId == this.id);\n        } else {\n            this.pageItem = (element.pageItem.type == 'section' && element.pageItem.id == this.id);\n        }\n        const sectionItem = this.getElement(this.selectors.SECTION_ITEM);\n        sectionItem.classList.toggle(this.classes.PAGEITEM, this.pageItem ?? false);\n        if (this.pageItem && !this.reactive.isEditing) {\n            this.element.scrollIntoView({block: \"nearest\"});\n        }\n    }\n\n    /**\n     * Overridden version of the component addOverlay async method.\n     *\n     * The course index is not compatible with overlay elements.\n     */\n    async addOverlay() {\n        this.element.classList.add(this.classes.OVERLAYBORDERS);\n    }\n\n    /**\n     * Overridden version of the component removeOverlay.\n     *\n     * The course index is not compatible with overlay elements.\n     */\n    removeOverlay() {\n        this.element.classList.remove(this.classes.OVERLAYBORDERS);\n    }\n}\n"],"names":["Component","DndSection","create","name","selectors","SECTION_ITEM","SECTION_TITLE","CM_LAST","classes","SECTIONHIDDEN","SECTIONCURRENT","LOCKED","RESTRICTIONS","PAGEITEM","OVERLAYBORDERS","id","this","element","dataset","isPageItem","target","document","getElementById","stateReady","state","configState","sectionItem","getElement","reactive","isEditing","supportComponents","titleitem","SectionTitle","fullregion","configDragDrop","section","get","window","location","href","sectionurl","replace","dispatch","scrollIntoView","getWatchers","watch","handler","remove","_refreshSection","_refreshPageItem","getLastCm","classList","toggle","visible","hasrestrictions","current","DRAGGING","dragging","locked","innerHTML","title","pageItem","sectionId","indexcollapsed","_element$pageItem","isStatic","type","block","add","removeOverlay"],"mappings":";;;;;;;;;;+LA6BqBA,kBAAkBC,oBAKnCC,cAESC,KAAO,2BAEPC,UAAY,CACbC,yCACAC,2CACAC,2CAGCC,QAAU,CACXC,cAAe,SACfC,eAAgB,UAChBC,OAAQ,iBACRC,aAAc,eACdC,SAAU,WACVC,eAAgB,gCAIfC,GAAKC,KAAKC,QAAQC,QAAQH,QAC1BI,YAAa,cAUVC,OAAQhB,kBACT,IAAIY,KAAK,CACZC,QAASI,SAASC,eAAeF,QACjChB,UAAAA,YASRmB,WAAWC,YACFC,YAAYD,aACXE,YAAcV,KAAKW,WAAWX,KAAKZ,UAAUC,iBAE/CW,KAAKY,SAASC,WAAab,KAAKY,SAASE,kBAAmB,OAEtDC,UAAY,IAAIC,sBAAa,IAC5BhB,KACHC,QAASS,YACTO,WAAYjB,KAAKC,eAEhBiB,eAAeH,iBAGlBI,QAAUX,MAAMW,QAAQC,IAAIpB,KAAKD,IACnCsB,OAAOC,SAASC,MAAQJ,QAAQK,WAAWC,QAAQ,SAAU,YACxDb,SAASc,SAAS,cAAe,UAAW1B,KAAKD,IACtDW,YAAYiB,kBASpBC,oBACW,CACH,CAACC,wBAAkB7B,KAAKD,gBAAe+B,QAAS9B,KAAK+B,QACrD,CAACF,wBAAkB7B,KAAKD,gBAAe+B,QAAS9B,KAAKgC,iBACrD,CAACH,gCAAkCC,QAAS9B,KAAKiC,mBASzDC,mBACWlC,KAAKW,WAAWX,KAAKZ,UAAUG,SAS1CyC,sFAAgB/B,QAACA,oBAEPS,YAAcV,KAAKW,WAAWX,KAAKZ,UAAUC,cACnDqB,YAAYyB,UAAUC,OAAOpC,KAAKR,QAAQC,eAAgBQ,QAAQoC,SAClE3B,YAAYyB,UAAUC,OAAOpC,KAAKR,QAAQI,2CAAcK,QAAQqC,8EAC3DrC,QAAQkC,UAAUC,OAAOpC,KAAKR,QAAQE,eAAgBO,QAAQsC,cAC9DtC,QAAQkC,UAAUC,OAAOpC,KAAKR,QAAQgD,mCAAUvC,QAAQwC,+DACxDxC,QAAQkC,UAAUC,OAAOpC,KAAKR,QAAQG,+BAAQM,QAAQyC,yDACtDA,OAASzC,QAAQyC,YAEjB/B,WAAWX,KAAKZ,UAAUE,eAAeqD,UAAY1C,QAAQ2C,MAUtEX,iEAAiBhC,QAACA,QAADO,MAAUA,iBAClBP,QAAQ4C,mBAGT5C,QAAQ4C,SAASC,YAAc9C,KAAKD,IAAMC,KAAKG,uBAC1C0C,UAAW,YACXlC,WAAWX,KAAKZ,UAAUC,cAAc8C,UAAUJ,OAAO/B,KAAKR,QAAQK,kCAG/DW,MAAMW,QAAQC,IAAIpB,KAAKD,IAC3BgD,0CAAmB9C,QAAQ4C,uCAARG,kBAAkBC,cAGxCJ,SAAqC,WAAzB5C,QAAQ4C,SAASK,MAAqBjD,QAAQ4C,SAAS9C,IAAMC,KAAKD,QAF9E8C,qCAAY5C,QAAQ4C,iEAAUC,YAAa9C,KAAKD,GAIrCC,KAAKW,WAAWX,KAAKZ,UAAUC,cACvC8C,UAAUC,OAAOpC,KAAKR,QAAQK,gCAAUG,KAAK6C,oDACrD7C,KAAK6C,WAAa7C,KAAKY,SAASC,gBAC3BZ,QAAQ0B,eAAe,CAACwB,MAAO,oCAUnClD,QAAQkC,UAAUiB,IAAIpD,KAAKR,QAAQM,gBAQ5CuD,qBACSpD,QAAQkC,UAAUJ,OAAO/B,KAAKR,QAAQM"}
-
 
2
1
{"version":3,"file":"section.min.js","sources":["../../../src/local/courseindex/section.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 * Course index section component.\n *\n * This component is used to control specific course section interactions like drag and drop.\n *\n * @module     core_courseformat/local/courseindex/section\n * @class      core_courseformat/local/courseindex/section\n * @copyright  2021 Ferran Recio <ferran@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport SectionTitle from 'core_courseformat/local/courseindex/sectiontitle';\nimport DndSection from 'core_courseformat/local/courseeditor/dndsection';\n\nexport default class Component extends DndSection {\n\n    /**\n     * Constructor hook.\n     */\n    create() {\n        // Optional component name for debugging.\n        this.name = 'courseindex_section';\n        // Default query selectors.\n        this.selectors = {\n            SECTION_ITEM: `[data-for='section_item']`,\n            SECTION_TITLE: `[data-for='section_title']`,\n            CM_LAST: `[data-for=\"cm\"]:last-child`,\n        };\n        // Default classes to toggle on refresh.\n        this.classes = {\n            SECTIONHIDDEN: 'dimmed',\n            SECTIONCURRENT: 'current',\n            LOCKED: 'editinprogress',\n            RESTRICTIONS: 'restrictions',\n            PAGEITEM: 'pageitem',\n            OVERLAYBORDERS: 'overlay-preview-borders',\n        };\n\n        // We need our id to watch specific events.\n        this.id = this.element.dataset.id;\n        this.isPageItem = false;\n    }\n\n    /**\n     * Static method to create a component instance form the mustahce template.\n     *\n     * @param {string} target the DOM main element or its ID\n     * @param {object} selectors optional css selector overrides\n     * @return {Component}\n     */\n    static init(target, selectors) {\n        return new this({\n            element: document.getElementById(target),\n            selectors,\n        });\n    }\n\n    /**\n     * Initial state ready method.\n     *\n     * @param {Object} state the initial state\n     */\n    stateReady(state) {\n        this.configState(state);\n        const sectionItem = this.getElement(this.selectors.SECTION_ITEM);\n        // Drag and drop is only available for components compatible course formats.\n        if (this.reactive.isEditing && this.reactive.supportComponents) {\n            // Init the inner dragable element passing the full section as affected region.\n            const titleitem = new SectionTitle({\n                ...this,\n                element: sectionItem,\n                fullregion: this.element,\n            });\n            this.configDragDrop(titleitem);\n        }\n        // Check if the current url is the section url.\n        const section = state.section.get(this.id);\n        if (window.location.href == section.sectionurl.replace(/&amp;/g, \"&\")) {\n            this.reactive.dispatch('setPageItem', 'section', this.id);\n            sectionItem.scrollIntoView();\n        }\n    }\n\n    /**\n     * Component watchers.\n     *\n     * @returns {Array} of watchers\n     */\n    getWatchers() {\n        return [\n            {watch: `section[${this.id}]:deleted`, handler: this.remove},\n            {watch: `section[${this.id}]:updated`, handler: this._refreshSection},\n            {watch: `course.pageItem:updated`, handler: this._refreshPageItem},\n        ];\n    }\n\n    /**\n     * Get the last CM element of that section.\n     *\n     * @returns {element|null}\n     */\n    getLastCm() {\n        return this.getElement(this.selectors.CM_LAST);\n    }\n\n    /**\n     * Update a course index section using the state information.\n     *\n     * @param {Object} param details the update details.\n     * @param {Object} param.element the section element\n     */\n    _refreshSection({element}) {\n        // Update classes.\n        const sectionItem = this.getElement(this.selectors.SECTION_ITEM);\n        sectionItem.classList.toggle(this.classes.SECTIONHIDDEN, !element.visible);\n        sectionItem.classList.toggle(this.classes.RESTRICTIONS, element.hasrestrictions ?? false);\n        this.element.classList.toggle(this.classes.SECTIONCURRENT, element.current);\n        this.element.classList.toggle(this.classes.DRAGGING, element.dragging ?? false);\n        this.element.classList.toggle(this.classes.LOCKED, element.locked ?? false);\n        this.locked = element.locked;\n        // Update title.\n        this.getElement(this.selectors.SECTION_TITLE).innerHTML = element.title;\n    }\n\n    /**\n     * Handle a page item update.\n     *\n     * @param {Object} details the update details\n     * @param {Object} details.state the state data.\n     * @param {Object} details.element the course state data.\n     */\n    _refreshPageItem({element, state}) {\n        if (!element.pageItem) {\n            return;\n        }\n        if (element.pageItem.sectionId !== this.id && this.isPageItem || element.pageItem.type !== 'section') {\n            this.pageItem = false;\n            this.getElement(this.selectors.SECTION_ITEM).classList.remove(this.classes.PAGEITEM);\n            return;\n        }\n        const section = state.section.get(this.id);\n        if (section.indexcollapsed && !element.pageItem?.isStatic) {\n            this.pageItem = (element.pageItem?.sectionId == this.id);\n        } else {\n            this.pageItem = (element.pageItem.type == 'section' && element.pageItem.id == this.id);\n        }\n        const sectionItem = this.getElement(this.selectors.SECTION_ITEM);\n        sectionItem.classList.toggle(this.classes.PAGEITEM, this.pageItem ?? false);\n        if (this.pageItem && !this.reactive.isEditing) {\n            this.element.scrollIntoView({block: \"nearest\"});\n        }\n    }\n\n    /**\n     * Overridden version of the component addOverlay async method.\n     *\n     * The course index is not compatible with overlay elements.\n     */\n    async addOverlay() {\n        this.element.classList.add(this.classes.OVERLAYBORDERS);\n    }\n\n    /**\n     * Overridden version of the component removeOverlay.\n     *\n     * The course index is not compatible with overlay elements.\n     */\n    removeOverlay() {\n        this.element.classList.remove(this.classes.OVERLAYBORDERS);\n    }\n}\n"],"names":["Component","DndSection","create","name","selectors","SECTION_ITEM","SECTION_TITLE","CM_LAST","classes","SECTIONHIDDEN","SECTIONCURRENT","LOCKED","RESTRICTIONS","PAGEITEM","OVERLAYBORDERS","id","this","element","dataset","isPageItem","target","document","getElementById","stateReady","state","configState","sectionItem","getElement","reactive","isEditing","supportComponents","titleitem","SectionTitle","fullregion","configDragDrop","section","get","window","location","href","sectionurl","replace","dispatch","scrollIntoView","getWatchers","watch","handler","remove","_refreshSection","_refreshPageItem","getLastCm","classList","toggle","visible","hasrestrictions","current","DRAGGING","dragging","locked","innerHTML","title","pageItem","sectionId","type","indexcollapsed","_element$pageItem","isStatic","block","add","removeOverlay"],"mappings":";;;;;;;;;;+LA6BqBA,kBAAkBC,oBAKnCC,cAESC,KAAO,2BAEPC,UAAY,CACbC,yCACAC,2CACAC,2CAGCC,QAAU,CACXC,cAAe,SACfC,eAAgB,UAChBC,OAAQ,iBACRC,aAAc,eACdC,SAAU,WACVC,eAAgB,gCAIfC,GAAKC,KAAKC,QAAQC,QAAQH,QAC1BI,YAAa,cAUVC,OAAQhB,kBACT,IAAIY,KAAK,CACZC,QAASI,SAASC,eAAeF,QACjChB,UAAAA,YASRmB,WAAWC,YACFC,YAAYD,aACXE,YAAcV,KAAKW,WAAWX,KAAKZ,UAAUC,iBAE/CW,KAAKY,SAASC,WAAab,KAAKY,SAASE,kBAAmB,OAEtDC,UAAY,IAAIC,sBAAa,IAC5BhB,KACHC,QAASS,YACTO,WAAYjB,KAAKC,eAEhBiB,eAAeH,iBAGlBI,QAAUX,MAAMW,QAAQC,IAAIpB,KAAKD,IACnCsB,OAAOC,SAASC,MAAQJ,QAAQK,WAAWC,QAAQ,SAAU,YACxDb,SAASc,SAAS,cAAe,UAAW1B,KAAKD,IACtDW,YAAYiB,kBASpBC,oBACW,CACH,CAACC,wBAAkB7B,KAAKD,gBAAe+B,QAAS9B,KAAK+B,QACrD,CAACF,wBAAkB7B,KAAKD,gBAAe+B,QAAS9B,KAAKgC,iBACrD,CAACH,gCAAkCC,QAAS9B,KAAKiC,mBASzDC,mBACWlC,KAAKW,WAAWX,KAAKZ,UAAUG,SAS1CyC,sFAAgB/B,QAACA,oBAEPS,YAAcV,KAAKW,WAAWX,KAAKZ,UAAUC,cACnDqB,YAAYyB,UAAUC,OAAOpC,KAAKR,QAAQC,eAAgBQ,QAAQoC,SAClE3B,YAAYyB,UAAUC,OAAOpC,KAAKR,QAAQI,2CAAcK,QAAQqC,8EAC3DrC,QAAQkC,UAAUC,OAAOpC,KAAKR,QAAQE,eAAgBO,QAAQsC,cAC9DtC,QAAQkC,UAAUC,OAAOpC,KAAKR,QAAQgD,mCAAUvC,QAAQwC,+DACxDxC,QAAQkC,UAAUC,OAAOpC,KAAKR,QAAQG,+BAAQM,QAAQyC,yDACtDA,OAASzC,QAAQyC,YAEjB/B,WAAWX,KAAKZ,UAAUE,eAAeqD,UAAY1C,QAAQ2C,MAUtEX,iEAAiBhC,QAACA,QAADO,MAAUA,iBAClBP,QAAQ4C,mBAGT5C,QAAQ4C,SAASC,YAAc9C,KAAKD,IAAMC,KAAKG,YAAwC,YAA1BF,QAAQ4C,SAASE,iBACzEF,UAAW,YACXlC,WAAWX,KAAKZ,UAAUC,cAAc8C,UAAUJ,OAAO/B,KAAKR,QAAQK,kCAG/DW,MAAMW,QAAQC,IAAIpB,KAAKD,IAC3BiD,0CAAmB/C,QAAQ4C,uCAARI,kBAAkBC,cAGxCL,SAAqC,WAAzB5C,QAAQ4C,SAASE,MAAqB9C,QAAQ4C,SAAS9C,IAAMC,KAAKD,QAF9E8C,qCAAY5C,QAAQ4C,iEAAUC,YAAa9C,KAAKD,GAIrCC,KAAKW,WAAWX,KAAKZ,UAAUC,cACvC8C,UAAUC,OAAOpC,KAAKR,QAAQK,gCAAUG,KAAK6C,oDACrD7C,KAAK6C,WAAa7C,KAAKY,SAASC,gBAC3BZ,QAAQ0B,eAAe,CAACwB,MAAO,oCAUnClD,QAAQkC,UAAUiB,IAAIpD,KAAKR,QAAQM,gBAQ5CuD,qBACSpD,QAAQkC,UAAUJ,OAAO/B,KAAKR,QAAQM"}
-
 
2
3
3