HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/8.0.30
System: Linux multiplicar 3.10.0-1160.102.1.el7.x86_64 #1 SMP Tue Oct 17 15:42:21 UTC 2023 x86_64
User: root (0)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /var/www/html/ceade.tocsa.com.py/course/amd/build/actions.min.js.map
{"version":3,"file":"actions.min.js","sources":["../src/actions.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 * Various actions on modules and sections in the editing mode - hiding, duplicating, deleting, etc.\n *\n * @module     core_course/actions\n * @copyright  2016 Marina Glancy\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since      3.3\n */\ndefine(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str', 'core/url', 'core/yui',\n        'core/modal_factory', 'core/modal_events', 'core/key_codes', 'core/log'],\n    function($, ajax, templates, notification, str, url, Y, ModalFactory, ModalEvents, KeyCodes, log) {\n        var CSS = {\n            EDITINPROGRESS: 'editinprogress',\n            SECTIONDRAGGABLE: 'sectiondraggable',\n            EDITINGMOVE: 'editing_move'\n        };\n        var SELECTOR = {\n            ACTIVITYLI: 'li.activity',\n            ACTIONAREA: '.actions',\n            ACTIVITYACTION: 'a.cm-edit-action',\n            MENU: '.moodle-actionmenu[data-enhance=moodle-core-actionmenu]',\n            TOGGLE: '.toggle-display,.dropdown-toggle',\n            SECTIONLI: 'li.section',\n            SECTIONACTIONMENU: '.section_action_menu',\n            ADDSECTIONS: '#changenumsections [data-add-sections]'\n        };\n\n        Y.use('moodle-course-coursebase', function() {\n            var courseformatselector = M.course.format.get_section_selector();\n            if (courseformatselector) {\n                SELECTOR.SECTIONLI = courseformatselector;\n            }\n        });\n\n        /**\n         * Wrapper for Y.Moodle.core_course.util.cm.getId\n         *\n         * @param {JQuery} element\n         * @returns {Integer}\n         */\n        var getModuleId = function(element) {\n            var id;\n            Y.use('moodle-course-util', function(Y) {\n                id = Y.Moodle.core_course.util.cm.getId(Y.Node(element.get(0)));\n            });\n            return id;\n        };\n\n        /**\n         * Wrapper for Y.Moodle.core_course.util.cm.getName\n         *\n         * @param {JQuery} element\n         * @returns {String}\n         */\n        var getModuleName = function(element) {\n            var name;\n            Y.use('moodle-course-util', function(Y) {\n                name = Y.Moodle.core_course.util.cm.getName(Y.Node(element.get(0)));\n            });\n            return name;\n        };\n\n        /**\n         * Wrapper for M.util.add_spinner for an activity\n         *\n         * @param {JQuery} activity\n         * @returns {Node}\n         */\n        var addActivitySpinner = function(activity) {\n            activity.addClass(CSS.EDITINPROGRESS);\n            var actionarea = activity.find(SELECTOR.ACTIONAREA).get(0);\n            if (actionarea) {\n                var spinner = M.util.add_spinner(Y, Y.Node(actionarea));\n                spinner.show();\n                return spinner;\n            }\n            return null;\n        };\n\n        /**\n         * Wrapper for M.util.add_spinner for a section\n         *\n         * @param {JQuery} sectionelement\n         * @returns {Node}\n         */\n        var addSectionSpinner = function(sectionelement) {\n            sectionelement.addClass(CSS.EDITINPROGRESS);\n            var actionarea = sectionelement.find(SELECTOR.SECTIONACTIONMENU).get(0);\n            if (actionarea) {\n                var spinner = M.util.add_spinner(Y, Y.Node(actionarea));\n                spinner.show();\n                return spinner;\n            }\n            return null;\n        };\n\n        /**\n         * Wrapper for M.util.add_lightbox\n         *\n         * @param {JQuery} sectionelement\n         * @returns {Node}\n         */\n        var addSectionLightbox = function(sectionelement) {\n            var lightbox = M.util.add_lightbox(Y, Y.Node(sectionelement.get(0)));\n            lightbox.show();\n            return lightbox;\n        };\n\n        /**\n         * Removes the spinner element\n         *\n         * @param {JQuery} element\n         * @param {Node} spinner\n         * @param {Number} delay\n         */\n        var removeSpinner = function(element, spinner, delay) {\n            window.setTimeout(function() {\n                element.removeClass(CSS.EDITINPROGRESS);\n                if (spinner) {\n                    spinner.hide();\n                }\n            }, delay);\n        };\n\n        /**\n         * Removes the lightbox element\n         *\n         * @param {Node} lightbox lighbox YUI element returned by addSectionLightbox\n         * @param {Number} delay\n         */\n        var removeLightbox = function(lightbox, delay) {\n            if (lightbox) {\n                window.setTimeout(function() {\n                    lightbox.hide();\n                }, delay);\n            }\n        };\n\n        /**\n         * Initialise action menu for the element (section or module)\n         *\n         * @param {String} elementid CSS id attribute of the element\n         */\n        var initActionMenu = function(elementid) {\n            // Initialise action menu in the new activity.\n            Y.use('moodle-course-coursebase', function() {\n                M.course.coursebase.invoke_function('setup_for_resource', '#' + elementid);\n            });\n            if (M.core.actionmenu && M.core.actionmenu.newDOMNode) {\n                M.core.actionmenu.newDOMNode(Y.one('#' + elementid));\n            }\n        };\n\n        /**\n         * Returns focus to the element that was clicked or \"Edit\" link if element is no longer visible.\n         *\n         * @param {String} elementId CSS id attribute of the element\n         * @param {String} action data-action property of the element that was clicked\n         */\n        var focusActionItem = function(elementId, action) {\n            var mainelement = $('#' + elementId);\n            var selector = '[data-action=' + action + ']';\n            if (action === 'groupsseparate' || action === 'groupsvisible' || action === 'groupsnone') {\n                // New element will have different data-action.\n                selector = '[data-action=groupsseparate],[data-action=groupsvisible],[data-action=groupsnone]';\n            }\n            if (mainelement.find(selector).is(':visible')) {\n                mainelement.find(selector).focus();\n            } else {\n                // Element not visible, focus the \"Edit\" link.\n                mainelement.find(SELECTOR.MENU).find(SELECTOR.TOGGLE).focus();\n            }\n        };\n\n        /**\n         * Find next <a> after the element\n         *\n         * @param {JQuery} mainElement element that is about to be deleted\n         * @returns {JQuery}\n         */\n        var findNextFocusable = function(mainElement) {\n            var tabables = $(\"a:visible\");\n            var isInside = false;\n            var foundElement = null;\n            tabables.each(function() {\n                if ($.contains(mainElement[0], this)) {\n                    isInside = true;\n                } else if (isInside) {\n                    foundElement = this;\n                    return false; // Returning false in .each() is equivalent to \"break;\" inside the loop in php.\n                }\n            });\n            return foundElement;\n        };\n\n        /**\n         * Performs an action on a module (moving, deleting, duplicating, hiding, etc.)\n         *\n         * @param {JQuery} moduleElement activity element we perform action on\n         * @param {Number} cmid\n         * @param {JQuery} target the element (menu item) that was clicked\n         */\n        var editModule = function(moduleElement, cmid, target) {\n            var action = target.attr('data-action');\n            var spinner = addActivitySpinner(moduleElement);\n            var promises = ajax.call([{\n                methodname: 'core_course_edit_module',\n                args: {id: cmid,\n                    action: action,\n                    sectionreturn: target.attr('data-sectionreturn') ? target.attr('data-sectionreturn') : 0\n                }\n            }], true);\n\n            var lightbox;\n            if (action === 'duplicate') {\n                lightbox = addSectionLightbox(target.closest(SELECTOR.SECTIONLI));\n            }\n            $.when.apply($, promises)\n                .done(function(data) {\n                    var elementToFocus = findNextFocusable(moduleElement);\n                    moduleElement.replaceWith(data);\n                    // Initialise action menu for activity(ies) added as a result of this.\n                    $('<div>' + data + '</div>').find(SELECTOR.ACTIVITYLI).each(function(index) {\n                        initActionMenu($(this).attr('id'));\n                        if (index === 0) {\n                            focusActionItem($(this).attr('id'), action);\n                            elementToFocus = null;\n                        }\n                    });\n                    // In case of activity deletion focus the next focusable element.\n                    if (elementToFocus) {\n                        elementToFocus.focus();\n                    }\n                    // Remove spinner and lightbox with a delay.\n                    removeSpinner(moduleElement, spinner, 400);\n                    removeLightbox(lightbox, 400);\n                    // Trigger event that can be observed by course formats.\n                    moduleElement.trigger($.Event('coursemoduleedited', {ajaxreturn: data, action: action}));\n                }).fail(function(ex) {\n                    // Remove spinner and lightbox.\n                    removeSpinner(moduleElement, spinner);\n                    removeLightbox(lightbox);\n                    // Trigger event that can be observed by course formats.\n                    var e = $.Event('coursemoduleeditfailed', {exception: ex, action: action});\n                    moduleElement.trigger(e);\n                    if (!e.isDefaultPrevented()) {\n                        notification.exception(ex);\n                    }\n                });\n        };\n\n        /**\n         * Requests html for the module via WS core_course_get_module and updates the module on the course page\n         *\n         * Used after d&d of the module to another section\n         *\n         * @param {JQuery} activityElement\n         * @param {Number} cmid\n         * @param {Number} sectionreturn\n         */\n        var refreshModule = function(activityElement, cmid, sectionreturn) {\n            var spinner = addActivitySpinner(activityElement);\n            var promises = ajax.call([{\n                methodname: 'core_course_get_module',\n                args: {id: cmid, sectionreturn: sectionreturn}\n            }], true);\n\n            $.when.apply($, promises)\n                .done(function(data) {\n                    removeSpinner(activityElement, spinner, 400);\n                    replaceActivityHtmlWith(data);\n                }).fail(function() {\n                    removeSpinner(activityElement, spinner);\n                });\n        };\n\n        /**\n         * Displays the delete confirmation to delete a module\n         *\n         * @param {JQuery} mainelement activity element we perform action on\n         * @param {function} onconfirm function to execute on confirm\n         */\n        var confirmDeleteModule = function(mainelement, onconfirm) {\n            var modtypename = mainelement.attr('class').match(/modtype_([^\\s]*)/)[1];\n            var modulename = getModuleName(mainelement);\n\n            str.get_string('pluginname', modtypename).done(function(pluginname) {\n                var plugindata = {\n                    type: pluginname,\n                    name: modulename\n                };\n                str.get_strings([\n                    {key: 'confirm'},\n                    {key: modulename === null ? 'deletechecktype' : 'deletechecktypename', param: plugindata},\n                    {key: 'yes'},\n                    {key: 'no'}\n                ]).done(function(s) {\n                        notification.confirm(s[0], s[1], s[2], s[3], onconfirm);\n                    }\n                );\n            });\n        };\n\n        /**\n         * Displays the delete confirmation to delete a section\n         *\n         * @param {String} message confirmation message\n         * @param {function} onconfirm function to execute on confirm\n         */\n        var confirmEditSection = function(message, onconfirm) {\n            str.get_strings([\n                {key: 'confirm'}, // TODO link text\n                {key: 'yes'},\n                {key: 'no'}\n            ]).done(function(s) {\n                    notification.confirm(s[0], message, s[1], s[2], onconfirm);\n                }\n            );\n        };\n\n        /**\n         * Replaces an action menu item with another one (for example Show->Hide, Set marker->Remove marker)\n         *\n         * @param {JQuery} actionitem\n         * @param {String} image new image name (\"i/show\", \"i/hide\", etc.)\n         * @param {String} stringname new string for the action menu item\n         * @param {String} stringcomponent\n         * @param {String} newaction new value for data-action attribute of the link\n         * @return {Promise} promise which is resolved when the replacement has completed\n         */\n        var replaceActionItem = function(actionitem, image, stringname,\n                                           stringcomponent, newaction) {\n\n            var stringRequests = [{key: stringname, component: stringcomponent}];\n            // Do not provide an icon with duplicate, different text to the menu item.\n\n            return str.get_strings(stringRequests).then(function(strings) {\n                actionitem.find('span.menu-action-text').html(strings[0]);\n\n                return templates.renderPix(image, 'core');\n            }).then(function(pixhtml) {\n                actionitem.find('.icon').replaceWith(pixhtml);\n                actionitem.attr('data-action', newaction);\n                return;\n            }).catch(notification.exception);\n        };\n\n        /**\n         * Default post-processing for section AJAX edit actions.\n         *\n         * This can be overridden in course formats by listening to event coursesectionedited:\n         *\n         * $('body').on('coursesectionedited', 'li.section', function(e) {\n         *     var action = e.action,\n         *         sectionElement = $(e.target),\n         *         data = e.ajaxreturn;\n         *     // ... Do some processing here.\n         *     e.preventDefault(); // Prevent default handler.\n         * });\n         *\n         * @param {JQuery} sectionElement\n         * @param {JQuery} actionItem\n         * @param {Object} data\n         * @param {String} courseformat\n         */\n        var defaultEditSectionHandler = function(sectionElement, actionItem, data, courseformat) {\n            var action = actionItem.attr('data-action');\n            if (action === 'hide' || action === 'show') {\n                if (action === 'hide') {\n                    sectionElement.addClass('hidden');\n                    replaceActionItem(actionItem, 'i/show',\n                        'showfromothers', 'format_' + courseformat, 'show');\n                } else {\n                    sectionElement.removeClass('hidden');\n                    replaceActionItem(actionItem, 'i/hide',\n                        'hidefromothers', 'format_' + courseformat, 'hide');\n                }\n                // Replace the modules with new html (that indicates that they are now hidden or not hidden).\n                if (data.modules !== undefined) {\n                    for (var i in data.modules) {\n                        replaceActivityHtmlWith(data.modules[i]);\n                    }\n                }\n                // Replace the section availability information.\n                if (data.section_availability !== undefined) {\n                    sectionElement.find('.section_availability').first().replaceWith(data.section_availability);\n                }\n            } else if (action === 'setmarker') {\n                var oldmarker = $(SELECTOR.SECTIONLI + '.current'),\n                    oldActionItem = oldmarker.find(SELECTOR.SECTIONACTIONMENU + ' ' + 'a[data-action=removemarker]');\n                oldmarker.removeClass('current');\n                replaceActionItem(oldActionItem, 'i/marker',\n                    'highlight', 'core', 'setmarker');\n                sectionElement.addClass('current');\n                replaceActionItem(actionItem, 'i/marked',\n                    'highlightoff', 'core', 'removemarker');\n            } else if (action === 'removemarker') {\n                sectionElement.removeClass('current');\n                replaceActionItem(actionItem, 'i/marker',\n                    'highlight', 'core', 'setmarker');\n            }\n        };\n\n        /**\n         * Replaces the course module with the new html (used to update module after it was edited or its visibility was changed).\n         *\n         * @param {String} activityHTML\n         */\n        var replaceActivityHtmlWith = function(activityHTML) {\n            $('<div>' + activityHTML + '</div>').find(SELECTOR.ACTIVITYLI).each(function() {\n                // Extract id from the new activity html.\n                var id = $(this).attr('id');\n                // Find the existing element with the same id and replace its contents with new html.\n                $(SELECTOR.ACTIVITYLI + '#' + id).replaceWith(activityHTML);\n                // Initialise action menu.\n                initActionMenu(id);\n            });\n        };\n\n        /**\n         * Performs an action on a module (moving, deleting, duplicating, hiding, etc.)\n         *\n         * @param {JQuery} sectionElement section element we perform action on\n         * @param {Nunmber} sectionid\n         * @param {JQuery} target the element (menu item) that was clicked\n         * @param {String} courseformat\n         */\n        var editSection = function(sectionElement, sectionid, target, courseformat) {\n            var action = target.attr('data-action'),\n                sectionreturn = target.attr('data-sectionreturn') ? target.attr('data-sectionreturn') : 0;\n            var spinner = addSectionSpinner(sectionElement);\n            var promises = ajax.call([{\n                methodname: 'core_course_edit_section',\n                args: {id: sectionid, action: action, sectionreturn: sectionreturn}\n            }], true);\n\n            var lightbox = addSectionLightbox(sectionElement);\n            $.when.apply($, promises)\n                .done(function(dataencoded) {\n                    var data = $.parseJSON(dataencoded);\n                    removeSpinner(sectionElement, spinner);\n                    removeLightbox(lightbox);\n                    sectionElement.find(SELECTOR.SECTIONACTIONMENU).find(SELECTOR.TOGGLE).focus();\n                    // Trigger event that can be observed by course formats.\n                    var e = $.Event('coursesectionedited', {ajaxreturn: data, action: action});\n                    sectionElement.trigger(e);\n                    if (!e.isDefaultPrevented()) {\n                        defaultEditSectionHandler(sectionElement, target, data, courseformat);\n                    }\n                }).fail(function(ex) {\n                    // Remove spinner and lightbox.\n                    removeSpinner(sectionElement, spinner);\n                    removeLightbox(lightbox);\n                    // Trigger event that can be observed by course formats.\n                    var e = $.Event('coursesectioneditfailed', {exception: ex, action: action});\n                    sectionElement.trigger(e);\n                    if (!e.isDefaultPrevented()) {\n                        notification.exception(ex);\n                    }\n                });\n        };\n\n        // Register a function to be executed after D&D of an activity.\n        Y.use('moodle-course-coursebase', function() {\n            M.course.coursebase.register_module({\n                // Ignore camelcase eslint rule for the next line because it is an expected name of the callback.\n                // eslint-disable-next-line camelcase\n                set_visibility_resource_ui: function(args) {\n                    var mainelement = $(args.element.getDOMNode());\n                    var cmid = getModuleId(mainelement);\n                    if (cmid) {\n                        var sectionreturn = mainelement.find('.' + CSS.EDITINGMOVE).attr('data-sectionreturn');\n                        refreshModule(mainelement, cmid, sectionreturn);\n                    }\n                }\n            });\n        });\n\n        return /** @alias module:core_course/actions */ {\n\n            /**\n             * Initialises course page\n             *\n             * @method init\n             * @param {String} courseformat name of the current course format (for fetching strings)\n             */\n            initCoursePage: function(courseformat) {\n\n                // Add a handler for course module actions.\n                $('body').on('click keypress', SELECTOR.ACTIVITYLI + ' ' +\n                        SELECTOR.ACTIVITYACTION + '[data-action]', function(e) {\n                    if (e.type === 'keypress' && e.keyCode !== 13) {\n                        return;\n                    }\n                    var actionItem = $(this),\n                        moduleElement = actionItem.closest(SELECTOR.ACTIVITYLI),\n                        action = actionItem.attr('data-action'),\n                        moduleId = getModuleId(moduleElement);\n                    switch (action) {\n                        case 'moveleft':\n                        case 'moveright':\n                        case 'delete':\n                        case 'duplicate':\n                        case 'hide':\n                        case 'stealth':\n                        case 'show':\n                        case 'groupsseparate':\n                        case 'groupsvisible':\n                        case 'groupsnone':\n                            break;\n                        default:\n                            // Nothing to do here!\n                            return;\n                    }\n                    if (!moduleId) {\n                        return;\n                    }\n                    e.preventDefault();\n                    if (action === 'delete') {\n                        // Deleting requires confirmation.\n                        confirmDeleteModule(moduleElement, function() {\n                            editModule(moduleElement, moduleId, actionItem);\n                        });\n                    } else {\n                        editModule(moduleElement, moduleId, actionItem);\n                    }\n                });\n\n                // Add a handler for section show/hide actions.\n                $('body').on('click keypress', SELECTOR.SECTIONLI + ' ' +\n                            SELECTOR.SECTIONACTIONMENU + '[data-sectionid] ' +\n                            'a[data-action]', function(e) {\n                    if (e.type === 'keypress' && e.keyCode !== 13) {\n                        return;\n                    }\n                    var actionItem = $(this),\n                        sectionElement = actionItem.closest(SELECTOR.SECTIONLI),\n                        sectionId = actionItem.closest(SELECTOR.SECTIONACTIONMENU).attr('data-sectionid');\n                    e.preventDefault();\n                    if (actionItem.attr('data-confirm')) {\n                        // Action requires confirmation.\n                        confirmEditSection(actionItem.attr('data-confirm'), function() {\n                            editSection(sectionElement, sectionId, actionItem, courseformat);\n                        });\n                    } else {\n                        editSection(sectionElement, sectionId, actionItem, courseformat);\n                    }\n                });\n\n                // Add a handler for \"Add sections\" link to ask for a number of sections to add.\n                str.get_string('numberweeks').done(function(strNumberSections) {\n                    var trigger = $(SELECTOR.ADDSECTIONS),\n                        modalTitle = trigger.attr('data-add-sections'),\n                        newSections = trigger.attr('data-new-sections');\n                    var modalBody = $('<div><label for=\"add_section_numsections\"></label> ' +\n                        '<input id=\"add_section_numsections\" type=\"number\" min=\"1\" max=\"' + newSections + '\" value=\"1\"></div>');\n                    modalBody.find('label').html(strNumberSections);\n                    ModalFactory.create({\n                        title: modalTitle,\n                        type: ModalFactory.types.SAVE_CANCEL,\n                        body: modalBody.html()\n                    }, trigger)\n                    .done(function(modal) {\n                        var numSections = $(modal.getBody()).find('#add_section_numsections'),\n                        addSections = function() {\n                            // Check if value of the \"Number of sections\" is a valid positive integer and redirect\n                            // to adding a section script.\n                            if ('' + parseInt(numSections.val()) === numSections.val() && parseInt(numSections.val()) >= 1) {\n                                document.location = trigger.attr('href') + '&numsections=' + parseInt(numSections.val());\n                            }\n                        };\n                        modal.setSaveButtonText(modalTitle);\n                        modal.getRoot().on(ModalEvents.shown, function() {\n                            // When modal is shown focus and select the input and add a listener to keypress of \"Enter\".\n                            numSections.focus().select().on('keydown', function(e) {\n                                if (e.keyCode === KeyCodes.enter) {\n                                    addSections();\n                                }\n                            });\n                        });\n                        modal.getRoot().on(ModalEvents.save, function(e) {\n                            // When modal \"Add\" button is pressed.\n                            e.preventDefault();\n                            addSections();\n                        });\n                    });\n                });\n            },\n\n            /**\n             * Replaces a section action menu item with another one (for example Show->Hide, Set marker->Remove marker)\n             *\n             * This method can be used by course formats in their listener to the coursesectionedited event\n             *\n             * @deprecated since Moodle 3.9\n             * @param {JQuery} sectionelement\n             * @param {String} selector CSS selector inside the section element, for example \"a[data-action=show]\"\n             * @param {String} image new image name (\"i/show\", \"i/hide\", etc.)\n             * @param {String} stringname new string for the action menu item\n             * @param {String} stringcomponent\n             * @param {String} newaction new value for data-action attribute of the link\n             */\n            replaceSectionActionItem: function(sectionelement, selector, image, stringname,\n                                                    stringcomponent, newaction) {\n                log.debug('replaceSectionActionItem() is deprecated and will be removed.');\n                var actionitem = sectionelement.find(SELECTOR.SECTIONACTIONMENU + ' ' + selector);\n                replaceActionItem(actionitem, image, stringname, stringcomponent, newaction);\n            }\n        };\n    });\n"],"names":["define","$","ajax","templates","notification","str","url","Y","ModalFactory","ModalEvents","KeyCodes","log","CSS","SELECTOR","ACTIVITYLI","ACTIONAREA","ACTIVITYACTION","MENU","TOGGLE","SECTIONLI","SECTIONACTIONMENU","ADDSECTIONS","use","courseformatselector","M","course","format","get_section_selector","getModuleId","element","id","Moodle","core_course","util","cm","getId","Node","get","addActivitySpinner","activity","addClass","actionarea","find","spinner","add_spinner","show","addSectionLightbox","sectionelement","lightbox","add_lightbox","removeSpinner","delay","window","setTimeout","removeClass","hide","removeLightbox","initActionMenu","elementid","coursebase","invoke_function","core","actionmenu","newDOMNode","one","editModule","moduleElement","cmid","target","action","attr","promises","call","methodname","args","sectionreturn","closest","when","apply","done","data","mainElement","tabables","isInside","foundElement","elementToFocus","each","contains","this","replaceWith","index","elementId","mainelement","selector","is","focus","focusActionItem","trigger","Event","ajaxreturn","fail","ex","e","exception","isDefaultPrevented","confirmDeleteModule","onconfirm","name","modtypename","match","modulename","getName","get_string","pluginname","plugindata","type","get_strings","key","param","s","confirm","replaceActionItem","actionitem","image","stringname","stringcomponent","newaction","stringRequests","component","then","strings","html","renderPix","pixhtml","catch","replaceActivityHtmlWith","activityHTML","editSection","sectionElement","sectionid","courseformat","addSectionSpinner","dataencoded","parseJSON","actionItem","undefined","modules","i","section_availability","first","oldmarker","oldActionItem","defaultEditSectionHandler","register_module","set_visibility_resource_ui","getDOMNode","activityElement","refreshModule","initCoursePage","on","keyCode","moduleId","preventDefault","message","sectionId","strNumberSections","modalTitle","newSections","modalBody","create","title","types","SAVE_CANCEL","body","modal","numSections","getBody","addSections","parseInt","val","document","location","setSaveButtonText","getRoot","shown","select","enter","save","replaceSectionActionItem","debug"],"mappings":"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"}