MDL-67264 core_course: Activity chooser new feature
[moodle.git] / course / amd / build / local / activitychooser / dialogue.min.js.map
1 {"version":3,"sources":["../../../src/local/activitychooser/dialogue.js"],"names":["showModuleHelp","carousel","moduleData","help","find","selectors","regions","innerHTML","spinnerPromise","transitionPromiseResolver","transitionPromise","Promise","resolve","contentPromise","Templates","renderForPromise","all","then","html","js","replaceNodeContents","querySelector","chooserSummary","description","focus","catch","Notification","exception","one","registerListenerEvents","modal","mappedModules","bodyClickListener","e","target","closest","actions","optionActions","showSummary","getBody","module","chooserOption","container","moduleName","dataset","modname","get","matches","closeOption","on","allModules","modules","caller","getModuleSelector","getBodyPromise","body","interval","pause","keyboard","addEventListener","initKeyboardNavigation","chooserOptions","querySelectorAll","Array","from","forEach","element","document","keyCode","enter","space","preventDefault","arrowRight","currentOption","nextOption","nextElementSibling","firstOption","firstElementChild","toFocusOption","clickErrorHandler","focusChooserOption","arrowLeft","previousOption","previousElementSibling","lastOption","lastElementChild","home","end","currentChooserOption","previousChooserOption","previousChooserOptionLink","addChooser","previousChooserOptionHelp","tabIndex","currentChooserOptionLink","currentChooserOptionHelp","item","fallback","displayChooser","origin","sectionModules","Map","set","modulename","getRoot","ModalEvents","hidden","destroy","shown","getModal","firstChooserOption","show"],"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 * A type of dialogue used as for choosing options.\n *\n * @module     core_course/local/chooser/dialogue\n * @package    core\n * @copyright  2019 Mihail Geshoski <mihail@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport * as ModalEvents from 'core/modal_events';\nimport selectors from 'core_course/local/activitychooser/selectors';\nimport * as Templates from 'core/templates';\nimport {end, arrowLeft, arrowRight, home, enter, space} from 'core/key_codes';\nimport {addIconToContainer} from 'core/loadingicon';\n\n/**\n * Given an event from the main module 'page' navigate to it's help section via a carousel.\n *\n * @method showModuleHelp\n * @param {jQuery} carousel Our initialized carousel to manipulate\n * @param {Object} moduleData Data of the module to carousel to\n */\nconst showModuleHelp = (carousel, moduleData) => {\n    const help = carousel.find(selectors.regions.help)[0];\n    help.innerHTML = '';\n\n    // Add a spinner.\n    const spinnerPromise = addIconToContainer(help);\n\n    // Used later...\n    let transitionPromiseResolver = null;\n    const transitionPromise = new Promise(resolve => {\n        transitionPromiseResolver = resolve;\n    });\n\n    // Build up the html & js ready to place into the help section.\n    const contentPromise = Templates.renderForPromise('core_course/chooser_help', moduleData);\n\n    // Wait for the content to be ready, and for the transition to be complet.\n    Promise.all([contentPromise, spinnerPromise, transitionPromise])\n        .then(([{html, js}]) => Templates.replaceNodeContents(help, html, js))\n        .then(() => {\n            help.querySelector(selectors.regions.chooserSummary.description).focus();\n            return help;\n        })\n        .catch(Notification.exception);\n\n    // Move to the next slide, and resolve the transition promise when it's done.\n    carousel.one('slid.bs.carousel', () => {\n        transitionPromiseResolver();\n    });\n    // Trigger the transition between 'pages'.\n    carousel.carousel('next');\n};\n\n/**\n * Register chooser related event listeners.\n *\n * @method registerListenerEvents\n * @param {Promise} modal Our modal that we are working with\n * @param {Map} mappedModules A map of all of the modules we are working with with K: mod_name V: {Object}\n */\nconst registerListenerEvents = (modal, mappedModules) => {\n    const bodyClickListener = e => {\n        if (e.target.closest(selectors.actions.optionActions.showSummary)) {\n            const carousel = $(modal.getBody()[0].querySelector(selectors.regions.carousel));\n\n            const module = e.target.closest(selectors.regions.chooserOption.container);\n            const moduleName = module.dataset.modname;\n            const moduleData = mappedModules.get(moduleName);\n            showModuleHelp(carousel, moduleData);\n        }\n\n        // From the help screen go back to the module overview.\n        if (e.target.matches(selectors.actions.closeOption)) {\n            const carousel = $(modal.getBody()[0].querySelector(selectors.regions.carousel));\n\n            // Trigger the transition between 'pages'.\n            carousel.carousel('prev');\n            carousel.on('slid.bs.carousel', () => {\n                const allModules = modal.getBody()[0].querySelector(selectors.regions.modules);\n                const caller = allModules.querySelector(selectors.regions.getModuleSelector(e.target.dataset.modname));\n                caller.focus();\n            });\n        }\n    };\n\n    modal.getBodyPromise()\n\n    // The return value of getBodyPromise is a jquery object containing the body NodeElement.\n    .then(body => body[0])\n\n    // Set up the carousel.\n    .then(body => {\n        $(body.querySelector(selectors.regions.carousel))\n            .carousel({\n                interval: false,\n                pause: true,\n                keyboard: false\n            });\n\n        return body;\n    })\n\n    // Add the listener for clicks on the body.\n    .then(body => {\n        body.addEventListener('click', bodyClickListener);\n        return body;\n    })\n\n    // Register event listeners related to the keyboard navigation controls.\n    .then(body => {\n        initKeyboardNavigation(body, mappedModules);\n        return body;\n    })\n    .catch();\n\n};\n\n/**\n * Initialise the keyboard navigation controls for the chooser.\n *\n * @method initKeyboardNavigation\n * @param {NodeElement} body Our modal that we are working with\n * @param {Map} mappedModules A map of all of the modules we are working with with K: mod_name V: {Object}\n */\nconst initKeyboardNavigation = (body, mappedModules) => {\n\n    const chooserOptions = body.querySelectorAll(selectors.regions.chooserOption.container);\n\n    Array.from(chooserOptions).forEach((element) => {\n        return element.addEventListener('keyup', (e) => {\n            const chooserOptions = document.querySelector(selectors.regions.chooserOptions);\n\n            // Check for enter/ space triggers for showing the help.\n            if (e.keyCode === enter || e.keyCode === space) {\n                if (e.target.matches(selectors.actions.optionActions.showSummary)) {\n                    e.preventDefault();\n                    const module = e.target.closest(selectors.regions.chooserOption.container);\n                    const moduleName = module.dataset.modname;\n                    const moduleData = mappedModules.get(moduleName);\n                    const carousel = $(body.querySelector(selectors.regions.carousel));\n                    carousel.carousel({\n                        interval: false,\n                        pause: true,\n                        keyboard: false\n                    });\n                    showModuleHelp(carousel, moduleData);\n                }\n            }\n\n            // Next.\n            if (e.keyCode === arrowRight) {\n                e.preventDefault();\n                const currentOption = e.target.closest(selectors.regions.chooserOption.container);\n                const nextOption = currentOption.nextElementSibling;\n                const firstOption = chooserOptions.firstElementChild;\n                const toFocusOption = clickErrorHandler(nextOption, firstOption);\n                focusChooserOption(toFocusOption, currentOption);\n            }\n\n            // Previous.\n            if (e.keyCode === arrowLeft) {\n                e.preventDefault();\n                const currentOption = e.target.closest(selectors.regions.chooserOption.container);\n                const previousOption = currentOption.previousElementSibling;\n                const lastOption = chooserOptions.lastElementChild;\n                const toFocusOption = clickErrorHandler(previousOption, lastOption);\n                focusChooserOption(toFocusOption, currentOption);\n            }\n\n            if (e.keyCode === home) {\n                e.preventDefault();\n                const currentOption = e.target.closest(selectors.regions.chooserOption.container);\n                const firstOption = chooserOptions.firstElementChild;\n                focusChooserOption(firstOption, currentOption);\n            }\n\n            if (e.keyCode === end) {\n                e.preventDefault();\n                const currentOption = e.target.closest(selectors.regions.chooserOption.container);\n                const lastOption = chooserOptions.lastElementChild;\n                focusChooserOption(lastOption, currentOption);\n            }\n        });\n    });\n};\n\n/**\n * Focus on a chooser option element and remove the previous chooser element from the focus order\n *\n * @method focusChooserOption\n * @param {HTMLElement} currentChooserOption The current chooser option element that we want to focus\n * @param {HTMLElement} previousChooserOption The previous focused option element\n */\nconst focusChooserOption = (currentChooserOption, previousChooserOption = false) => {\n    if (previousChooserOption !== false) {\n        const previousChooserOptionLink = previousChooserOption.querySelector(selectors.actions.addChooser);\n        const previousChooserOptionHelp = previousChooserOption.querySelector(selectors.actions.optionActions.showSummary);\n        // Set tabindex to -1 to remove the previous chooser option element from the focus order.\n        previousChooserOption.tabIndex = -1;\n        previousChooserOptionLink.tabIndex = -1;\n        previousChooserOptionHelp.tabIndex = -1;\n    }\n\n    const currentChooserOptionLink = currentChooserOption.querySelector(selectors.actions.addChooser);\n    const currentChooserOptionHelp = currentChooserOption.querySelector(selectors.actions.optionActions.showSummary);\n    // Set tabindex to 0 to add current chooser option element to the focus order.\n    currentChooserOption.tabIndex = 0;\n    currentChooserOptionLink.tabIndex = 0;\n    currentChooserOptionHelp.tabIndex = 0;\n    // Focus the current chooser option element.\n    currentChooserOption.focus();\n};\n\n/**\n * Small error handling function to make sure the navigated to object exists\n *\n * @method clickErrorHandler\n * @param {HTMLElement} item What we want to check exists\n * @param {HTMLElement} fallback If we dont match anything fallback the focus\n * @return {String}\n */\nconst clickErrorHandler = (item, fallback) => {\n    if (item !== null) {\n        return item;\n    } else {\n        return fallback;\n    }\n};\n\n/**\n * Display the module chooser.\n *\n * @method displayChooser\n * @param {HTMLElement} origin The calling button\n * @param {Object} modal Our created modal for the section\n * @param {Array} sectionModules An array of all of the built module information\n */\nexport const displayChooser = (origin, modal, sectionModules) => {\n\n    // Make a map so we can quickly fetch a specific module's object for either rendering or searching.\n    const mappedModules = new Map();\n    sectionModules.forEach((module) => {\n        mappedModules.set(module.modulename, module);\n    });\n\n    // Register event listeners.\n    registerListenerEvents(modal, mappedModules);\n\n    // We want to focus on the action select when the dialog is closed.\n    modal.getRoot().on(ModalEvents.hidden, () => {\n        modal.destroy();\n    });\n\n    // We want to focus on the first chooser option element as soon as the modal is opened.\n    modal.getRoot().on(ModalEvents.shown, () => {\n        modal.getModal()[0].tabIndex = -1;\n\n        modal.getBodyPromise()\n        .then(body => {\n            const firstChooserOption = body[0].querySelector(selectors.regions.chooserOption.container);\n            focusChooserOption(firstChooserOption);\n\n            return;\n        })\n        .catch(Notification.exception);\n    });\n\n    modal.show();\n};\n"],"file":"dialogue.min.js"}