Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
{"version":3,"file":"bulkactions.min.js","sources":["../src/bulkactions.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 * Javascript module for bulk actions.\n *\n * @module      gradereport_singleview/bulkactions\n * @copyright   2022 Ilya Tregubov <ilya@moodle.com>\n * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Pending from 'core/pending';\nimport CustomEvents from \"core/custom_interaction_events\";\nimport ModalSaveCancel from 'core/modal_save_cancel';\nimport Templates from 'core/templates';\nimport ModalEvents from 'core/modal_events';\nimport * as Str from 'core/str';\nimport Notification from 'core/notification';\nimport selectors from 'gradereport_singleview/selectors';\n\n/**\n * Initialize module.\n */\nexport const init = () => {\n    const pendingPromise = new Pending();\n    registerListenerEvents();\n    pendingPromise.resolve();\n};\n\n/**\n * Register bulk actions related event listeners.\n *\n * @method registerListenerEvents\n */\nconst registerListenerEvents = () => {\n    const events = [\n        'click',\n        CustomEvents.events.activate,\n        CustomEvents.events.keyboardActivate\n    ];\n    CustomEvents.define(document, events);\n\n    // Register events.\n    events.forEach((event) => {\n        document.addEventListener(event, async(e) => {\n            const trigger = e.target.closest(selectors.actions.bulkaction);\n\n            if (!trigger) {\n                return;\n            }\n            if ((trigger.dataset.action === 'overrideallgrades') || (trigger.dataset.action === 'overridenonegrades')) {\n                const override = document.querySelectorAll(selectors.elements.override);\n\n                if (trigger.dataset.action === 'overridenonegrades') {\n                    // Alert for removing all grade overrides on page.\n                    Str.get_strings([\n                        {key: 'removeoverride', component: 'gradereport_singleview'},\n                        {key: 'overridenoneconfirm', component: 'gradereport_singleview'},\n                        {key: 'removeoverridesave', component: 'gradereport_singleview'},\n                        {key: 'cancel', component: 'moodle'},\n                    ])\n                    .then((strings) => {\n                        return Notification.confirm(\n                            strings[0],\n                            strings[1],\n                            strings[2],\n                            strings[3],\n                            () => {\n                                // Uncheck each override checkbox - this will make grade and feedback input fields disabled.\n                                override.forEach((el) => {\n                                    if (el.checked) {\n                                        el.click();\n                                    }\n                                });\n                            });\n                    })\n                    .catch(Notification.exception);\n\n                } else {\n                    // Check each override checkbox - this will make grade and feedback input fields enabled.\n                    override.forEach((el) => {\n                        if (!el.checked) {\n                            el.click();\n                        }\n                    });\n                }\n            } else if ((trigger.dataset.action === 'excludeallgrades') || (trigger.dataset.action === 'excludenonegrades')) {\n                const exclude = document.querySelectorAll(selectors.elements.exclude);\n                const checked = (trigger.dataset.action === 'excludeallgrades');\n                // Uncheck or check each exclude checkbox.\n                exclude.forEach((el) => {\n                    el.checked = checked;\n                });\n            } else if (trigger.dataset.action === 'bulklegend') {\n                // Modal for bulk insert grades.\n                Str.get_strings([\n                    {key: 'bulklegend', component: 'gradereport_singleview'},\n                    {key: 'save', component: 'moodle'},\n                ])\n                .then((strings) => {\n                    return ModalSaveCancel.create({\n                        body: Templates.render('gradereport_singleview/bulkinsert', {\n                            id: 'bulkinsertmodal',\n                            name: 'bulkinsertmodal'\n                        }),\n                        title: strings[0],\n                        buttons: {\n                            save: strings[1],\n                        },\n                        removeOnClose: true,\n                        show: true,\n                    });\n                })\n                .then((modal) => {\n                    modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true);\n\n                    // We need to acknowledge that we understand risks of loosing data.\n                    // Only when acknowledge checkbox is checked we allow selecting insert options.\n                    modal.getRoot().on('change', selectors.elements.warningcheckbox,\n                        (e) => {\n                            e.preventDefault();\n                            if (e.target.checked) {\n                                modal.getRoot().find(selectors.elements.modalformdata).removeClass('dimmed_text');\n                                modal.getRoot().find(selectors.elements.modalradio).removeAttr('disabled');\n                                modal.getRoot().find(selectors.elements.modalinput).removeAttr('disabled');\n\n                                const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val();\n                                // We allow saving grades only when all needed data present on form.\n                                if (formRadioData) {\n                                    modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled');\n                                }\n                            } else {\n                                modal.getRoot().find(selectors.elements.modalformdata).addClass('dimmed_text');\n                                modal.getRoot().find(selectors.elements.modalradio).attr('disabled', true);\n                                modal.getRoot().find(selectors.elements.modalinput).attr('disabled', true);\n                                modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true);\n                            }\n                        });\n\n                    // We allow saving grades only when all needed data present on form.\n                    modal.getRoot().on('change', selectors.elements.modalradio, (e) => {\n                            e.preventDefault();\n                            modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled');\n                        });\n\n                    modal.getRoot().on(ModalEvents.save, () => {\n                        // When save button is clicked in modal form we insert data from modal\n                        // into preexisted hidden bulk insert form and Save button for table form.\n                        document.querySelector(selectors.elements.enablebulkinsert).checked = true;\n                        const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val();\n                        const $select = document.querySelector(selectors.elements.formradio);\n                        $select.value = formRadioData;\n\n                        const formData = modal.getRoot().find(selectors.elements.modalgrade).val();\n                        document.querySelector(selectors.elements.formgrade).value = formData;\n                        document.querySelector(selectors.elements.formsave).click();\n                    });\n\n                    return modal;\n                })\n                .catch(Notification.exception);\n            }\n        });\n    });\n};\n"],"names":["pendingPromise","Pending","registerListenerEvents","resolve","events","CustomEvents","activate","keyboardActivate","define","document","forEach","event","addEventListener","async","trigger","e","target","closest","selectors","actions","bulkaction","dataset","action","override","querySelectorAll","elements","Str","get_strings","key","component","then","strings","Notification","confirm","el","checked","click","catch","exception","exclude","ModalSaveCancel","create","body","Templates","render","id","name","title","buttons","save","removeOnClose","show","modal","getFooter","find","modalsave","attr","getRoot","on","warningcheckbox","preventDefault","modalformdata","removeClass","modalradio","removeAttr","modalinput","modalradiochecked","val","addClass","ModalEvents","querySelector","enablebulkinsert","formRadioData","formradio","value","formData","modalgrade","formgrade","formsave"],"mappings":"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"}