MDL-69301 course: Remove custom keyboard navigation code
[moodle.git] / course / amd / build / actions.min.js.map
1 {"version":3,"sources":["../src/actions.js"],"names":["define","$","ajax","templates","notification","str","url","Y","ModalFactory","ModalEvents","KeyCodes","log","CSS","EDITINPROGRESS","SECTIONDRAGGABLE","EDITINGMOVE","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","getModuleName","name","getName","addActivitySpinner","activity","addClass","actionarea","find","spinner","add_spinner","show","addSectionSpinner","sectionelement","addSectionLightbox","lightbox","add_lightbox","removeSpinner","delay","window","setTimeout","removeClass","hide","removeLightbox","initActionMenu","elementid","coursebase","invoke_function","core","actionmenu","newDOMNode","one","focusActionItem","elementId","action","mainelement","selector","is","focus","findNextFocusable","mainElement","tabables","isInside","foundElement","each","contains","editModule","moduleElement","cmid","target","attr","promises","call","methodname","args","sectionreturn","closest","when","apply","done","data","elementToFocus","replaceWith","index","trigger","Event","ajaxreturn","fail","ex","e","exception","isDefaultPrevented","refreshModule","activityElement","replaceActivityHtmlWith","confirmDeleteModule","onconfirm","modtypename","match","modulename","get_string","pluginname","get_strings","key","param","type","s","confirm","confirmEditSection","message","replaceActionItem","actionitem","image","stringname","stringcomponent","newaction","component","then","strings","html","renderPix","pixhtml","catch","defaultEditSectionHandler","sectionElement","actionItem","courseformat","modules","i","section_availability","first","oldmarker","oldActionItem","activityHTML","editSection","sectionid","dataencoded","parseJSON","register_module","set_visibility_resource_ui","getDOMNode","initCoursePage","on","keyCode","moduleId","preventDefault","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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","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 * @package    core\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"],"file":"actions.min.js"}