Sindbad~EG File Manager

Current Path : /var/www/html/clima.sumar.com.py/course/format/amd/build/local/courseeditor/
Upload File :
Current File : /var/www/html/clima.sumar.com.py/course/format/amd/build/local/courseeditor/mutations.min.js.map

{"version":3,"file":"mutations.min.js","sources":["../../../src/local/courseeditor/mutations.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\nimport ajax from 'core/ajax';\nimport {get_string as getString} from \"core/str\";\nimport SRLogger from \"core/local/reactive/srlogger\";\n\n/**\n * Flag to determine whether the screen reader-only logger has already been set, so we only need to set it once.\n *\n * @type {boolean}\n */\nlet isLoggerSet = false;\n\n/**\n * Default mutation manager\n *\n * @module     core_courseformat/local/courseeditor/mutations\n * @class     core_courseformat/local/courseeditor/mutations\n * @copyright  2021 Ferran Recio <ferran@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default class {\n\n    // All course editor mutations for Moodle 4.0 will be located in this file.\n\n    /**\n     * Private method to call core_courseformat_update_course webservice.\n     *\n     * @method _callEditWebservice\n     * @param {string} action\n     * @param {number} courseId\n     * @param {array} ids\n     * @param {number} targetSectionId optional target section id (for moving actions)\n     * @param {number} targetCmId optional target cm id (for moving actions)\n     */\n    async _callEditWebservice(action, courseId, ids, targetSectionId, targetCmId) {\n        const args = {\n            action,\n            courseid: courseId,\n            ids,\n        };\n        if (targetSectionId) {\n            args.targetsectionid = targetSectionId;\n        }\n        if (targetCmId) {\n            args.targetcmid = targetCmId;\n        }\n        let ajaxresult = await ajax.call([{\n            methodname: 'core_courseformat_update_course',\n            args,\n        }])[0];\n        return JSON.parse(ajaxresult);\n    }\n\n    /**\n     * Execute a basic section state action.\n     * @param {StateManager} stateManager the current state manager\n     * @param {string} action the action name\n     * @param {array} sectionIds the section ids\n     * @param {number} targetSectionId optional target section id (for moving actions)\n     * @param {number} targetCmId optional target cm id (for moving actions)\n     */\n    async _sectionBasicAction(stateManager, action, sectionIds, targetSectionId, targetCmId) {\n        const logEntry = this._getLoggerEntry(stateManager, action, sectionIds, {\n            targetSectionId,\n            targetCmId,\n            itemType: 'section',\n        });\n        const course = stateManager.get('course');\n        this.sectionLock(stateManager, sectionIds, true);\n        const updates = await this._callEditWebservice(\n            action,\n            course.id,\n            sectionIds,\n            targetSectionId,\n            targetCmId\n        );\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n        this.sectionLock(stateManager, sectionIds, false);\n        stateManager.addLoggerEntry(await logEntry);\n    }\n\n    /**\n     * Execute a basic course module state action.\n     * @param {StateManager} stateManager the current state manager\n     * @param {string} action the action name\n     * @param {array} cmIds the cm ids\n     * @param {number} targetSectionId optional target section id (for moving actions)\n     * @param {number} targetCmId optional target cm id (for moving actions)\n     */\n    async _cmBasicAction(stateManager, action, cmIds, targetSectionId, targetCmId) {\n        const logEntry = this._getLoggerEntry(stateManager, action, cmIds, {\n            targetSectionId,\n            targetCmId,\n            itemType: 'cm',\n        });\n        const course = stateManager.get('course');\n        this.cmLock(stateManager, cmIds, true);\n        const updates = await this._callEditWebservice(\n            action,\n            course.id,\n            cmIds,\n            targetSectionId,\n            targetCmId\n        );\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n        this.cmLock(stateManager, cmIds, false);\n        stateManager.addLoggerEntry(await logEntry);\n    }\n\n    /**\n     * Get log entry for the current action.\n     * @param {StateManager} stateManager the current state manager\n     * @param {string} action the action name\n     * @param {int[]|null} itemIds the element ids\n     * @param {Object|undefined} data extra params for the log entry\n     * @param {string|undefined} data.itemType the element type (will be taken from action if none)\n     * @param {int|null|undefined} data.targetSectionId the target section id\n     * @param {int|null|undefined} data.targetCmId the target cm id\n     * @param {String|null|undefined} data.component optional component (for format plugins)\n     * @return {Object} the log entry\n     */\n    async _getLoggerEntry(stateManager, action, itemIds, data = {}) {\n        if (!isLoggerSet) {\n            // In case the logger has not been set from init(), ensure we set the logger.\n            stateManager.setLogger(new SRLogger());\n            isLoggerSet = true;\n        }\n        const feedbackParams = {\n            action,\n            itemType: data.itemType ?? action.split('_')[0],\n        };\n        let batch = '';\n        if (itemIds.length > 1) {\n            feedbackParams.count = itemIds.length;\n            batch = '_batch';\n        } else if (itemIds.length === 1) {\n            const itemInfo = stateManager.get(feedbackParams.itemType, itemIds[0]);\n            feedbackParams.name = itemInfo.title ?? itemInfo.name;\n            // Apply shortener for modules like label.\n        }\n        if (data.targetSectionId) {\n            feedbackParams.targetSectionName = stateManager.get('section', data.targetSectionId).title;\n        }\n        if (data.targetCmId) {\n            feedbackParams.targetCmName = stateManager.get('cm', data.targetCmId).name;\n        }\n\n        const message = await getString(\n            `${action.toLowerCase()}_feedback${batch}`,\n            data.component ?? 'core_courseformat',\n            feedbackParams\n        );\n\n        return {\n            feedbackMessage: message,\n        };\n    }\n\n    /**\n     * Mutation module initialize.\n     *\n     * The reactive instance will execute this method when addMutations or setMutation is invoked.\n     *\n     * @param {StateManager} stateManager the state manager\n     */\n    init(stateManager) {\n        // Add a method to prepare the fields when some update is coming from the server.\n        stateManager.addUpdateTypes({\n            prepareFields: this._prepareFields,\n        });\n        // Use the screen reader-only logger (SRLogger) to handle the feedback messages from the mutations.\n        stateManager.setLogger(new SRLogger());\n        isLoggerSet = true;\n    }\n\n    /**\n     * Add default values to state elements.\n     *\n     * This method is called every time a webservice returns a update state message.\n     *\n     * @param {Object} stateManager the state manager\n     * @param {String} updateName the state element to update\n     * @param {Object} fields the new data\n     * @returns {Object} final fields data\n     */\n    _prepareFields(stateManager, updateName, fields) {\n        // Any update should unlock the element.\n        fields.locked = false;\n        return fields;\n    }\n\n    /**\n     * Hides sections.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of section ids\n     */\n    async sectionHide(stateManager, sectionIds) {\n        await this._sectionBasicAction(stateManager, 'section_hide', sectionIds);\n    }\n\n    /**\n     * Show sections.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of section ids\n     */\n    async sectionShow(stateManager, sectionIds) {\n        await this._sectionBasicAction(stateManager, 'section_show', sectionIds);\n    }\n\n    /**\n     * Show cms.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    async cmShow(stateManager, cmIds) {\n        await this._cmBasicAction(stateManager, 'cm_show', cmIds);\n    }\n\n    /**\n     * Hide cms.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    async cmHide(stateManager, cmIds) {\n        await this._cmBasicAction(stateManager, 'cm_hide', cmIds);\n    }\n\n    /**\n     * Stealth cms.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    async cmStealth(stateManager, cmIds) {\n        await this._cmBasicAction(stateManager, 'cm_stealth', cmIds);\n    }\n\n    /**\n     * Duplicate course modules\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of course modules ids\n     * @param {number|undefined} targetSectionId the optional target sectionId\n     * @param {number|undefined} targetCmId the target course module id\n     */\n    async cmDuplicate(stateManager, cmIds, targetSectionId, targetCmId) {\n        const logEntry = this._getLoggerEntry(stateManager, 'cm_duplicate', cmIds);\n        const course = stateManager.get('course');\n        // Lock all target sections.\n        const sectionIds = new Set();\n        if (targetSectionId) {\n            sectionIds.add(targetSectionId);\n        } else {\n            cmIds.forEach((cmId) => {\n                const cm = stateManager.get('cm', cmId);\n                sectionIds.add(cm.sectionid);\n            });\n        }\n        this.sectionLock(stateManager, Array.from(sectionIds), true);\n\n        const updates = await this._callEditWebservice('cm_duplicate', course.id, cmIds, targetSectionId, targetCmId);\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n\n        this.sectionLock(stateManager, Array.from(sectionIds), false);\n        stateManager.addLoggerEntry(await logEntry);\n    }\n\n    /**\n     * Move course modules to specific course location.\n     *\n     * Note that one of targetSectionId or targetCmId should be provided in order to identify the\n     * new location:\n     *  - targetCmId: the activities will be located avobe the target cm. The targetSectionId\n     *                value will be ignored in this case.\n     *  - targetSectionId: the activities will be appended to the section. In this case\n     *                     targetSectionId should not be present.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmids the list of cm ids to move\n     * @param {number} targetSectionId the target section id\n     * @param {number} targetCmId the target course module id\n     */\n    async cmMove(stateManager, cmids, targetSectionId, targetCmId) {\n        if (!targetSectionId && !targetCmId) {\n            throw new Error(`Mutation cmMove requires targetSectionId or targetCmId`);\n        }\n        const course = stateManager.get('course');\n        this.cmLock(stateManager, cmids, true);\n        const updates = await this._callEditWebservice('cm_move', course.id, cmids, targetSectionId, targetCmId);\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n        this.cmLock(stateManager, cmids, false);\n    }\n\n    /**\n     * Move course modules to specific course location.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of section ids to move\n     * @param {number} targetSectionId the target section id\n     */\n    async sectionMove(stateManager, sectionIds, targetSectionId) {\n        if (!targetSectionId) {\n            throw new Error(`Mutation sectionMove requires targetSectionId`);\n        }\n        const course = stateManager.get('course');\n        this.sectionLock(stateManager, sectionIds, true);\n        const updates = await this._callEditWebservice('section_move', course.id, sectionIds, targetSectionId);\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n        this.sectionLock(stateManager, sectionIds, false);\n    }\n\n    /**\n     * Move course modules after a specific course location.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of section ids to move\n     * @param {number} targetSectionId the target section id\n     */\n    async sectionMoveAfter(stateManager, sectionIds, targetSectionId) {\n        if (!targetSectionId) {\n            throw new Error(`Mutation sectionMoveAfter requires targetSectionId`);\n        }\n        const course = stateManager.get('course');\n        this.sectionLock(stateManager, sectionIds, true);\n        const updates = await this._callEditWebservice('section_move_after', course.id, sectionIds, targetSectionId);\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n        this.sectionLock(stateManager, sectionIds, false);\n    }\n\n    /**\n     * Add a new section to a specific course location.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {number} targetSectionId optional the target section id\n     */\n    async addSection(stateManager, targetSectionId) {\n        if (!targetSectionId) {\n            targetSectionId = 0;\n        }\n        const course = stateManager.get('course');\n        const updates = await this._callEditWebservice('section_add', course.id, [], targetSectionId);\n        stateManager.processUpdates(updates);\n    }\n\n    /**\n     * Delete sections.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of course modules ids\n     */\n    async sectionDelete(stateManager, sectionIds) {\n        const course = stateManager.get('course');\n        const updates = await this._callEditWebservice('section_delete', course.id, sectionIds);\n        this.bulkReset(stateManager);\n        stateManager.processUpdates(updates);\n    }\n\n    /**\n     * Delete cms.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of section ids\n     */\n    async cmDelete(stateManager, cmIds) {\n        const course = stateManager.get('course');\n        this.cmLock(stateManager, cmIds, true);\n        const updates = await this._callEditWebservice('cm_delete', course.id, cmIds);\n        this.bulkReset(stateManager);\n        this.cmLock(stateManager, cmIds, false);\n        stateManager.processUpdates(updates);\n    }\n\n    /**\n     * Mark or unmark course modules as dragging.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of course modules ids\n     * @param {bool} dragValue the new dragging value\n     */\n    cmDrag(stateManager, cmIds, dragValue) {\n        this.setPageItem(stateManager);\n        this._setElementsValue(stateManager, 'cm', cmIds, 'dragging', dragValue);\n    }\n\n    /**\n     * Mark or unmark course sections as dragging.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of section ids\n     * @param {bool} dragValue the new dragging value\n     */\n    sectionDrag(stateManager, sectionIds, dragValue) {\n        this.setPageItem(stateManager);\n        this._setElementsValue(stateManager, 'section', sectionIds, 'dragging', dragValue);\n    }\n\n    /**\n     * Mark or unmark course modules as complete.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of course modules ids\n     * @param {bool} complete the new completion value\n     */\n    cmCompletion(stateManager, cmIds, complete) {\n        const newValue = (complete) ? 1 : 0;\n        this._setElementsValue(stateManager, 'cm', cmIds, 'completionstate', newValue);\n    }\n\n    /**\n     * Move cms to the right: indent = 1.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    async cmMoveRight(stateManager, cmIds) {\n        await this._cmBasicAction(stateManager, 'cm_moveright', cmIds);\n    }\n\n    /**\n     * Move cms to the left: indent = 0.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    async cmMoveLeft(stateManager, cmIds) {\n        await this._cmBasicAction(stateManager, 'cm_moveleft', cmIds);\n    }\n\n    /**\n     * Lock or unlock course modules.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of course modules ids\n     * @param {bool} lockValue the new locked value\n     */\n    cmLock(stateManager, cmIds, lockValue) {\n        this._setElementsValue(stateManager, 'cm', cmIds, 'locked', lockValue);\n    }\n\n    /**\n     * Lock or unlock course sections.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of section ids\n     * @param {bool} lockValue the new locked value\n     */\n    sectionLock(stateManager, sectionIds, lockValue) {\n        this._setElementsValue(stateManager, 'section', sectionIds, 'locked', lockValue);\n    }\n\n    _setElementsValue(stateManager, name, ids, fieldName, newValue) {\n        stateManager.setReadOnly(false);\n        ids.forEach((id) => {\n            const element = stateManager.get(name, id);\n            if (element) {\n                element[fieldName] = newValue;\n            }\n        });\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Set the page current item.\n     *\n     * Only one element of the course state can be the page item at a time.\n     *\n     * There are several actions that can alter the page current item. For example, when the user is in an activity\n     * page, the page item is always the activity one. However, in a course page, when the user scrolls to an element,\n     * this element get the page item.\n     *\n     * If the page item is static means that it is not meant to change. This is important because\n     * static page items has some special logic. For example, if a cm is the static page item\n     * and it is inside a collapsed section, the course index will expand the section to make it visible.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {String|undefined} type the element type (section or cm). Undefined will remove the current page item.\n     * @param {Number|undefined} id the element id\n     * @param {boolean|undefined} isStatic if the page item is static\n     */\n    setPageItem(stateManager, type, id, isStatic) {\n        let newPageItem;\n        if (type !== undefined) {\n            newPageItem = stateManager.get(type, id);\n            if (!newPageItem) {\n                return;\n            }\n        }\n        stateManager.setReadOnly(false);\n        // Remove the current page item.\n        const course = stateManager.get('course');\n        course.pageItem = null;\n        // Save the new page item.\n        if (newPageItem) {\n            course.pageItem = {\n                id,\n                type,\n                sectionId: (type == 'section') ? newPageItem.id : newPageItem.sectionid,\n                isStatic,\n            };\n        }\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Unlock all course elements.\n     *\n     * @param {StateManager} stateManager the current state manager\n     */\n    unlockAll(stateManager) {\n        const state = stateManager.state;\n        stateManager.setReadOnly(false);\n        state.section.forEach((section) => {\n            section.locked = false;\n        });\n        state.cm.forEach((cm) => {\n            cm.locked = false;\n        });\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Update the course index collapsed attribute of some sections.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the affected section ids\n     * @param {boolean} collapsed the new collapsed value\n     */\n    async sectionIndexCollapsed(stateManager, sectionIds, collapsed) {\n        const affectedSections = this._updateStateSectionPreference(stateManager, 'indexcollapsed', sectionIds, collapsed);\n        if (!affectedSections) {\n            return;\n        }\n        const course = stateManager.get('course');\n        let actionName = 'section_index_collapsed';\n        if (!collapsed) {\n            actionName = 'section_index_expanded';\n        }\n        await this._callEditWebservice(actionName, course.id, affectedSections);\n    }\n\n    /**\n     * Update the course content collapsed attribute of some sections.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the affected section ids\n     * @param {boolean} collapsed the new collapsed value\n     */\n    async sectionContentCollapsed(stateManager, sectionIds, collapsed) {\n        const affectedSections = this._updateStateSectionPreference(stateManager, 'contentcollapsed', sectionIds, collapsed);\n        if (!affectedSections) {\n            return;\n        }\n        const course = stateManager.get('course');\n        let actionName = 'section_content_collapsed';\n        if (!collapsed) {\n            actionName = 'section_content_expanded';\n        }\n        await this._callEditWebservice(actionName, course.id, affectedSections);\n    }\n\n    /**\n     * Private batch update for a section preference attribute.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {string} preferenceName the preference name\n     * @param {array} sectionIds the affected section ids\n     * @param {boolean} preferenceValue the new preferenceValue value\n     * @return {Number[]|null} sections ids with the preference value true or null if no update is required\n     */\n    _updateStateSectionPreference(stateManager, preferenceName, sectionIds, preferenceValue) {\n        stateManager.setReadOnly(false);\n        const affectedSections = [];\n        // Check if we need to update preferences.\n        sectionIds.forEach(sectionId => {\n            const section = stateManager.get('section', sectionId);\n            if (section === undefined) {\n                stateManager.setReadOnly(true);\n                return null;\n            }\n            const newValue = preferenceValue ?? section[preferenceName];\n            if (section[preferenceName] != newValue) {\n                section[preferenceName] = newValue;\n                affectedSections.push(section.id);\n            }\n        });\n        stateManager.setReadOnly(true);\n        return affectedSections;\n    }\n\n    /**\n     * Enable/disable bulk editing.\n     *\n     * Note: reenabling the bulk will clean the current selection.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {Boolean} enabled the new bulk state.\n     */\n    bulkEnable(stateManager, enabled) {\n        const state = stateManager.state;\n        stateManager.setReadOnly(false);\n        state.bulk.enabled = enabled;\n        state.bulk.selectedType = '';\n        state.bulk.selection = [];\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Reset the current selection.\n     * @param {StateManager} stateManager the current state manager\n     */\n    bulkReset(stateManager) {\n        const state = stateManager.state;\n        stateManager.setReadOnly(false);\n        state.bulk.selectedType = '';\n        state.bulk.selection = [];\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Select a list of cms.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    cmSelect(stateManager, cmIds) {\n        this._addIdsToSelection(stateManager, 'cm', cmIds);\n    }\n\n    /**\n     * Unselect a list of cms.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} cmIds the list of cm ids\n     */\n    cmUnselect(stateManager, cmIds) {\n        this._removeIdsFromSelection(stateManager, 'cm', cmIds);\n    }\n\n    /**\n     * Select a list of sections.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of cm ids\n     */\n    sectionSelect(stateManager, sectionIds) {\n        this._addIdsToSelection(stateManager, 'section', sectionIds);\n    }\n\n    /**\n     * Unselect a list of sections.\n     * @param {StateManager} stateManager the current state manager\n     * @param {array} sectionIds the list of cm ids\n     */\n    sectionUnselect(stateManager, sectionIds) {\n        this._removeIdsFromSelection(stateManager, 'section', sectionIds);\n    }\n\n    /**\n     * Add some ids to the current bulk selection.\n     * @param {StateManager} stateManager the current state manager\n     * @param {String} typeName the type name (section/cm)\n     * @param {array} ids the list of ids\n     */\n    _addIdsToSelection(stateManager, typeName, ids) {\n        const bulk = stateManager.state.bulk;\n        if (!bulk?.enabled) {\n            throw new Error(`Bulk is not enabled`);\n        }\n        if (bulk?.selectedType !== \"\" && bulk?.selectedType !== typeName) {\n            throw new Error(`Cannot add ${typeName} to the current selection`);\n        }\n\n        // Stored ids are strings for compatability with HTML data attributes.\n        ids = ids.map(value => value.toString());\n\n        stateManager.setReadOnly(false);\n        bulk.selectedType = typeName;\n        const newSelection = new Set([...bulk.selection, ...ids]);\n        bulk.selection = [...newSelection];\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Remove some ids to the current bulk selection.\n     *\n     * The method resets the selection type if the current selection is empty.\n     *\n     * @param {StateManager} stateManager the current state manager\n     * @param {String} typeName the type name (section/cm)\n     * @param {array} ids the list of ids\n     */\n    _removeIdsFromSelection(stateManager, typeName, ids) {\n        const bulk = stateManager.state.bulk;\n        if (!bulk?.enabled) {\n            throw new Error(`Bulk is not enabled`);\n        }\n        if (bulk?.selectedType !== \"\" && bulk?.selectedType !== typeName) {\n            throw new Error(`Cannot remove ${typeName} from the current selection`);\n        }\n\n        // Stored ids are strings for compatability with HTML data attributes.\n        ids = ids.map(value => value.toString());\n\n        stateManager.setReadOnly(false);\n        const IdsToFilter = new Set(ids);\n        bulk.selection = bulk.selection.filter(current => !IdsToFilter.has(current));\n        if (bulk.selection.length === 0) {\n            bulk.selectedType = '';\n        }\n        stateManager.setReadOnly(true);\n    }\n\n    /**\n     * Get updated state data related to some cm ids.\n     *\n     * @method cmState\n     * @param {StateManager} stateManager the current state\n     * @param {array} cmids the list of cm ids to update\n     */\n    async cmState(stateManager, cmids) {\n        this.cmLock(stateManager, cmids, true);\n        const course = stateManager.get('course');\n        const updates = await this._callEditWebservice('cm_state', course.id, cmids);\n        stateManager.processUpdates(updates);\n        this.cmLock(stateManager, cmids, false);\n    }\n\n    /**\n     * Get updated state data related to some section ids.\n     *\n     * @method sectionState\n     * @param {StateManager} stateManager the current state\n     * @param {array} sectionIds the list of section ids to update\n     */\n    async sectionState(stateManager, sectionIds) {\n        this.sectionLock(stateManager, sectionIds, true);\n        const course = stateManager.get('course');\n        const updates = await this._callEditWebservice('section_state', course.id, sectionIds);\n        stateManager.processUpdates(updates);\n        this.sectionLock(stateManager, sectionIds, false);\n    }\n\n    /**\n     * Get the full updated state data of the course.\n     *\n     * @param {StateManager} stateManager the current state\n     */\n    async courseState(stateManager) {\n        const course = stateManager.get('course');\n        const updates = await this._callEditWebservice('course_state', course.id);\n        stateManager.processUpdates(updates);\n    }\n\n}\n"],"names":["isLoggerSet","action","courseId","ids","targetSectionId","targetCmId","args","courseid","targetsectionid","targetcmid","ajaxresult","ajax","call","methodname","JSON","parse","stateManager","sectionIds","logEntry","this","_getLoggerEntry","itemType","course","get","sectionLock","updates","_callEditWebservice","id","bulkReset","processUpdates","addLoggerEntry","cmIds","cmLock","itemIds","data","setLogger","SRLogger","feedbackParams","split","batch","length","count","itemInfo","name","title","targetSectionName","targetCmName","feedbackMessage","toLowerCase","component","init","addUpdateTypes","prepareFields","_prepareFields","updateName","fields","locked","_sectionBasicAction","_cmBasicAction","Set","add","forEach","cmId","cm","sectionid","Array","from","cmids","Error","cmDrag","dragValue","setPageItem","_setElementsValue","sectionDrag","cmCompletion","complete","newValue","lockValue","fieldName","setReadOnly","element","type","isStatic","newPageItem","undefined","pageItem","sectionId","unlockAll","state","section","collapsed","affectedSections","_updateStateSectionPreference","actionName","preferenceName","preferenceValue","push","bulkEnable","enabled","bulk","selectedType","selection","cmSelect","_addIdsToSelection","cmUnselect","_removeIdsFromSelection","sectionSelect","sectionUnselect","typeName","map","value","toString","newSelection","IdsToFilter","filter","current","has"],"mappings":"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"}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists