Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"acceptmodal.min.js","sources":["../src/acceptmodal.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 * Add policy consent modal to the page\n *\n * @module     tool_policy/acceptmodal\n * @copyright  2018 Marina Glancy\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n    'jquery',\n    'core/str',\n    'core/modal_save_cancel',\n    'core/modal_events',\n    'core/notification',\n    'core/fragment',\n    'core/ajax',\n    'core_form/changechecker',\n], function(\n    $,\n    Str,\n    ModalSaveCancel,\n    ModalEvents,\n    Notification,\n    Fragment,\n    Ajax,\n    FormChangeChecker\n) {\n\n        \"use strict\";\n\n        /**\n         * Constructor\n         *\n         * @param {int} contextid\n         *\n         * Each call to init gets it's own instance of this class.\n         */\n        var AcceptOnBehalf = function(contextid) {\n            this.contextid = contextid;\n            this.init();\n        };\n\n        /**\n         * @var {Modal} modal\n         * @private\n         */\n        AcceptOnBehalf.prototype.modal = null;\n\n        /**\n         * @var {int} contextid\n         * @private\n         */\n        AcceptOnBehalf.prototype.contextid = -1;\n\n        /**\n         * @var {object} currentTrigger The triggered HTML jQuery object\n         * @private\n         */\n        AcceptOnBehalf.prototype.currentTrigger = null;\n\n        /**\n         * @var {object} triggers The trigger selectors\n         * @private\n         */\n        AcceptOnBehalf.prototype.triggers = {\n            SINGLE: 'a[data-action=acceptmodal]',\n            BULK: 'input[data-action=acceptmodal]'\n        };\n\n        /**\n         * Initialise the class.\n         *\n         * @private\n         */\n        AcceptOnBehalf.prototype.init = function() {\n            // Initialise for links accepting policies for individual users.\n            $(this.triggers.SINGLE).on('click', function(e) {\n                e.preventDefault();\n                this.currentTrigger = $(e.currentTarget);\n                var href = $(e.currentTarget).attr('href'),\n                    formData = href.slice(href.indexOf('?') + 1);\n                this.showFormModal(formData);\n            }.bind(this));\n\n            // Initialise for multiple users acceptance form.\n            $(this.triggers.BULK).on('click', function(e) {\n                e.preventDefault();\n                this.currentTrigger = $(e.currentTarget);\n                var form = $(e.currentTarget).closest('form');\n                if (form.find('input[type=checkbox][name=\"userids[]\"]:checked').length) {\n                    var formData = form.serialize();\n                    this.showFormModal(formData);\n                } else {\n                    Str.get_strings([\n                        {key: 'notice'},\n                        {key: 'selectusersforconsent', component: 'tool_policy'},\n                        {key: 'ok'}\n                    ]).then(function(strings) {\n                        Notification.alert(strings[0], strings[1], strings[2]);\n                        return;\n                    }).fail(Notification.exception);\n                }\n            }.bind(this));\n        };\n\n        /**\n         * Show modal with a form\n         *\n         * @param {String} formData\n         */\n        AcceptOnBehalf.prototype.showFormModal = function(formData) {\n            var action;\n            var params = formData.split('&');\n            for (var i = 0; i < params.length; i++) {\n                var pair = params[i].split('=');\n                if (pair[0] == 'action') {\n                    action = pair[1];\n                }\n            }\n            // Fetch the title string.\n            Str.get_strings([\n                {key: 'statusformtitleaccept', component: 'tool_policy'},\n                {key: 'iagreetothepolicy', component: 'tool_policy'},\n                {key: 'statusformtitlerevoke', component: 'tool_policy'},\n                {key: 'irevokethepolicy', component: 'tool_policy'},\n                {key: 'statusformtitledecline', component: 'tool_policy'},\n                {key: 'declinethepolicy', component: 'tool_policy'}\n            ]).then(function(strings) {\n                var title;\n                var saveText;\n                if (action == 'accept') {\n                    title = strings[0];\n                    saveText = strings[1];\n                } else if (action == 'revoke') {\n                    title = strings[2];\n                    saveText = strings[3];\n                } else if (action == 'decline') {\n                    title = strings[4];\n                    saveText = strings[5];\n                }\n                // Create the modal.\n                return ModalSaveCancel.create({\n                    title: title,\n                    body: ''\n                }).then(function(modal) {\n                    this.modal = modal;\n                    this.setupFormModal(formData, saveText);\n                }.bind(this));\n            }.bind(this))\n                .catch(Notification.exception);\n        };\n\n        /**\n         * Setup form inside a modal\n         *\n         * @param {String} formData\n         * @param {String} saveText\n         */\n        AcceptOnBehalf.prototype.setupFormModal = function(formData, saveText) {\n            var modal = this.modal;\n\n            modal.setLarge();\n\n            modal.setSaveButtonText(saveText);\n\n            // We want to reset the form every time it is opened.\n            modal.getRoot().on(ModalEvents.hidden, this.destroy.bind(this));\n\n            modal.setBody(this.getBody(formData));\n\n            // We catch the modal save event, and use it to submit the form inside the modal.\n            // Triggering a form submission will give JS validation scripts a chance to check for errors.\n            modal.getRoot().on(ModalEvents.save, this.submitForm.bind(this));\n            // We also catch the form submit event and use it to submit the form with ajax.\n            modal.getRoot().on('submit', 'form', this.submitFormAjax.bind(this));\n\n            modal.show();\n        };\n\n        /**\n         * Load the body of the modal (contains the form)\n         *\n         * @method getBody\n         * @private\n         * @param {String} formData\n         * @return {Promise}\n         */\n        AcceptOnBehalf.prototype.getBody = function(formData) {\n            if (typeof formData === \"undefined\") {\n                formData = {};\n            }\n            // Get the content of the modal.\n            var params = {jsonformdata: JSON.stringify(formData)};\n            return Fragment.loadFragment('tool_policy', 'accept_on_behalf', this.contextid, params);\n        };\n\n        /**\n         * Submit the form inside the modal via AJAX request\n         *\n         * @method submitFormAjax\n         * @private\n         * @param {Event} e Form submission event.\n         */\n        AcceptOnBehalf.prototype.submitFormAjax = function(e) {\n            // We don't want to do a real form submission.\n            e.preventDefault();\n\n            // Convert all the form elements values to a serialised string.\n            var formData = this.modal.getRoot().find('form').serialize();\n\n            var requests = Ajax.call([{\n                methodname: 'tool_policy_submit_accept_on_behalf',\n                args: {jsonformdata: JSON.stringify(formData)}\n            }]);\n            requests[0].done(function(data) {\n                if (data.validationerrors) {\n                    this.modal.setBody(this.getBody(formData));\n                } else {\n                    this.close();\n                }\n            }.bind(this)).fail(Notification.exception);\n        };\n\n        /**\n         * This triggers a form submission, so that any mform elements can do final tricks before the form submission is processed.\n         *\n         * @method submitForm\n         * @param {Event} e Form submission event.\n         * @private\n         */\n        AcceptOnBehalf.prototype.submitForm = function(e) {\n            e.preventDefault();\n            this.modal.getRoot().find('form').submit();\n        };\n\n        /**\n         * Close the modal\n         */\n        AcceptOnBehalf.prototype.close = function() {\n            this.destroy();\n            document.location.reload();\n        };\n\n        /**\n         * Destroy the modal\n         */\n        AcceptOnBehalf.prototype.destroy = function() {\n            FormChangeChecker.resetAllFormDirtyStates();\n            this.modal.destroy();\n            this.currentTrigger.focus();\n        };\n\n        return /** @alias module:tool_policy/acceptmodal */ {\n            // Public variables and functions.\n            /**\n             * Attach event listeners to initialise this module.\n             *\n             * @method init\n             * @param {int} contextid The contextid for the course.\n             * @return {AcceptOnBehalf}\n             */\n            getInstance: function(contextid) {\n                return new AcceptOnBehalf(contextid);\n            }\n        };\n    });\n"],"names":["define","$","Str","ModalSaveCancel","ModalEvents","Notification","Fragment","Ajax","FormChangeChecker","AcceptOnBehalf","contextid","init","prototype","modal","currentTrigger","triggers","SINGLE","BULK","this","on","e","preventDefault","currentTarget","href","attr","formData","slice","indexOf","showFormModal","bind","form","closest","find","length","serialize","get_strings","key","component","then","strings","alert","fail","exception","action","params","split","i","pair","title","saveText","create","body","setupFormModal","catch","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","getBody","save","submitForm","submitFormAjax","show","jsonformdata","JSON","stringify","loadFragment","call","methodname","args","done","data","validationerrors","close","submit","document","location","reload","resetAllFormDirtyStates","focus","getInstance"],"mappings":"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"}