Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"cmitem.min.js","sources":["../../../../src/local/content/section/cmitem.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 course module item component.\n *\n * This component is used to control specific course modules interactions like drag and drop.\n *\n * @module     core_courseformat/local/content/section/cmitem\n * @class      core_courseformat/local/content/section/cmitem\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 DndCmItem from 'core_courseformat/local/courseeditor/dndcmitem';\n\nexport default class extends DndCmItem {\n\n    /**\n     * Constructor hook.\n     */\n    create() {\n        // Optional component name for debugging.\n        this.name = 'content_section_cmitem';\n        // Default query selectors.\n        this.selectors = {\n            BULKSELECT: `[data-for='cmBulkSelect']`,\n            BULKCHECKBOX: `[data-bulkcheckbox]`,\n            CARD: `[data-region='activity-card']`,\n            DRAGICON: `.editing_move`,\n            INPLACEEDITABLE: `[data-inplaceeditablelink]`,\n        };\n        // Most classes will be loaded later by DndCmItem.\n        this.classes = {\n            LOCKED: 'editinprogress',\n            HIDE: 'd-none',\n            SELECTED: 'selected',\n        };\n        // We need our id to watch specific events.\n        this.id = this.element.dataset.id;\n    }\n\n    /**\n     * Initial state ready method.\n     * @param {Object} state the state data\n     */\n    stateReady(state) {\n        this.configDragDrop(this.id);\n        this.getElement(this.selectors.DRAGICON)?.classList.add(this.classes.DRAGICON);\n        this._refreshBulk({state});\n    }\n\n    /**\n     * Component watchers.\n     *\n     * @returns {Array} of watchers\n     */\n    getWatchers() {\n        return [\n            {watch: `cm[${this.id}]:deleted`, handler: this.unregister},\n            {watch: `cm[${this.id}]:updated`, handler: this._refreshCm},\n            {watch: `bulk:updated`, handler: this._refreshBulk},\n        ];\n    }\n\n    /**\n     * Return the custom activity card drag shadow image.\n     *\n     * The element returned will be used when the user drags the card.\n     *\n     * @returns {HTMLElement}\n     */\n    setDragImage() {\n        return this.getElement(this.selectors.CARD);\n    }\n\n    /**\n     * Update a course index cm using the state information.\n     *\n     * @param {object} param\n     * @param {Object} param.element details the update details.\n     */\n    _refreshCm({element}) {\n        // Update classes.\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    }\n\n    /**\n     * Update the bulk editing interface.\n     *\n     * @param {object} param\n     * @param {Object} param.state the state data\n     */\n    _refreshBulk({state}) {\n        const bulk = state.bulk;\n        // For now, dragging elements in bulk is not possible.\n        this.setDraggable(!bulk.enabled);\n        // Convert the card into an active element in bulk mode.\n        if (bulk.enabled) {\n            this.element.dataset.action = 'toggleSelectionCm';\n            this.element.dataset.preventDefault = 1;\n        } else {\n            this.element.removeAttribute('data-action');\n            this.element.removeAttribute('data-preventDefault');\n        }\n\n        this.getElement(this.selectors.BULKSELECT)?.classList.toggle(this.classes.HIDE, !bulk.enabled);\n\n        const disabled = !this._isCmBulkEnabled(bulk);\n        const selected = this._isSelected(bulk);\n        this._refreshActivityCard(bulk, selected);\n        this._setCheckboxValue(selected, disabled);\n    }\n\n    /**\n     * Update the activity card depending on the bulk selection.\n     *\n     * @param {Object} bulk the current bulk state data\n     * @param {Boolean} selected if the activity is selected.\n     */\n    _refreshActivityCard(bulk, selected) {\n        this.getElement(this.selectors.INPLACEEDITABLE)?.classList.toggle(this.classes.HIDE, bulk.enabled);\n        this.getElement(this.selectors.CARD)?.classList.toggle(this.classes.SELECTED, selected);\n        this.element.classList.toggle(this.classes.SELECTED, selected);\n    }\n\n    /**\n     * Modify the checkbox element.\n     * @param {Boolean} checked the new checked value\n     * @param {Boolean} disabled the new disabled value\n     */\n    _setCheckboxValue(checked, disabled) {\n        const checkbox = this.getElement(this.selectors.BULKCHECKBOX);\n        if (!checkbox) {\n            return;\n        }\n        checkbox.checked = checked;\n        checkbox.disabled = disabled;\n        // Is selectable is used to easily scan the page for bulk checkboxes.\n        if (disabled) {\n            checkbox.removeAttribute('data-is-selectable');\n        } else {\n            checkbox.dataset.isSelectable = 1;\n        }\n    }\n\n    /**\n     * Check if cm bulk selection is available.\n     * @param {Object} bulk the current state bulk attribute\n     * @returns {Boolean}\n     */\n    _isCmBulkEnabled(bulk) {\n        if (!bulk.enabled) {\n            return false;\n        }\n        return (bulk.selectedType === '' || bulk.selectedType === 'cm');\n    }\n\n    /**\n     * Check if the cm id is part of the current bulk selection.\n     * @param {Object} bulk the current state bulk attribute\n     * @returns {Boolean}\n     */\n    _isSelected(bulk) {\n        if (bulk.selectedType !== 'cm') {\n            return false;\n        }\n        return bulk.selection.includes(this.id);\n    }\n}\n"],"names":["DndCmItem","create","name","selectors","BULKSELECT","BULKCHECKBOX","CARD","DRAGICON","INPLACEEDITABLE","classes","LOCKED","HIDE","SELECTED","id","this","element","dataset","stateReady","state","configDragDrop","getElement","classList","add","_refreshBulk","getWatchers","watch","handler","unregister","_refreshCm","setDragImage","toggle","DRAGGING","dragging","locked","bulk","setDraggable","enabled","action","preventDefault","removeAttribute","disabled","_isCmBulkEnabled","selected","_isSelected","_refreshActivityCard","_setCheckboxValue","checked","checkbox","isSelectable","selectedType","selection","includes"],"mappings":";;;;;;;;;;0KA4B6BA,mBAKzBC,cAESC,KAAO,8BAEPC,UAAY,CACbC,uCACAC,mCACAC,qCACAC,yBACAC,mDAGCC,QAAU,CACXC,OAAQ,iBACRC,KAAM,SACNC,SAAU,iBAGTC,GAAKC,KAAKC,QAAQC,QAAQH,GAOnCI,WAAWC,iCACFC,eAAeL,KAAKD,kCACpBO,WAAWN,KAAKX,UAAUI,wDAAWc,UAAUC,IAAIR,KAAKL,QAAQF,eAChEgB,aAAa,CAACL,MAAAA,QAQvBM,oBACW,CACH,CAACC,mBAAaX,KAAKD,gBAAea,QAASZ,KAAKa,YAChD,CAACF,mBAAaX,KAAKD,gBAAea,QAASZ,KAAKc,YAChD,CAACH,qBAAuBC,QAASZ,KAAKS,eAW9CM,sBACWf,KAAKM,WAAWN,KAAKX,UAAUG,MAS1CsB,2DAAWb,QAACA,mBAEHA,QAAQM,UAAUS,OAAOhB,KAAKL,QAAQsB,mCAAUhB,QAAQiB,+DACxDjB,QAAQM,UAAUS,OAAOhB,KAAKL,QAAQC,+BAAQK,QAAQkB,yDACtDA,OAASlB,QAAQkB,OAS1BV,8CAAaL,MAACA,mBACJgB,KAAOhB,MAAMgB,UAEdC,cAAcD,KAAKE,SAEpBF,KAAKE,cACArB,QAAQC,QAAQqB,OAAS,yBACzBtB,QAAQC,QAAQsB,eAAiB,SAEjCvB,QAAQwB,gBAAgB,oBACxBxB,QAAQwB,gBAAgB,uDAG5BnB,WAAWN,KAAKX,UAAUC,4DAAaiB,UAAUS,OAAOhB,KAAKL,QAAQE,MAAOuB,KAAKE,eAEhFI,UAAY1B,KAAK2B,iBAAiBP,MAClCQ,SAAW5B,KAAK6B,YAAYT,WAC7BU,qBAAqBV,KAAMQ,eAC3BG,kBAAkBH,SAAUF,UASrCI,qBAAqBV,KAAMQ,iFAClBtB,WAAWN,KAAKX,UAAUK,iEAAkBa,UAAUS,OAAOhB,KAAKL,QAAQE,KAAMuB,KAAKE,wCACrFhB,WAAWN,KAAKX,UAAUG,sDAAOe,UAAUS,OAAOhB,KAAKL,QAAQG,SAAU8B,eACzE3B,QAAQM,UAAUS,OAAOhB,KAAKL,QAAQG,SAAU8B,UAQzDG,kBAAkBC,QAASN,gBACjBO,SAAWjC,KAAKM,WAAWN,KAAKX,UAAUE,cAC3C0C,WAGLA,SAASD,QAAUA,QACnBC,SAASP,SAAWA,SAEhBA,SACAO,SAASR,gBAAgB,sBAEzBQ,SAAS/B,QAAQgC,aAAe,GASxCP,iBAAiBP,cACRA,KAAKE,UAGoB,KAAtBF,KAAKe,cAA6C,OAAtBf,KAAKe,cAQ7CN,YAAYT,YACkB,OAAtBA,KAAKe,cAGFf,KAAKgB,UAAUC,SAASrC,KAAKD"}