/
var
/
www
/
html
/
lgpd
/
lib
/
form
/
amd
/
build
/
Upload File
HOME
{"version":3,"sources":["../src/filetypes.js"],"names":["define","$","Log","Str","ModalFactory","ModalEvents","Ajax","Templates","Tree","FileTypes","elementId","elementLabel","onlyTypes","allowAll","inputField","wrapperBrowserTrigger","wrapperDescriptions","length","error","prepareBrowserTrigger","then","prepareBrowserModal","bind","prepareBrowserTree","prototype","render","html","browserTrigger","find","create","type","types","SAVE_CANCEL","title","modal","browserModal","getRoot","on","hidden","focus","save","saveBrowserModal","e","preventDefault","is","bodyContent","loadBrowserModalBody","browserTree","getBody","handleKeyDown","item","keyCode","keys","enter","space","stopPropagation","toggleCheckbox","attr","call","hideOrShowItemsDependingOnAllowAll","currentTarget","checkbox","key","prop","show","setBody","when","args","onlytypes","join","allowall","current","val","methodname","browserData","elementid","groups","allcheckbox","updateDescriptions","newvalue","each","push","filter","x","i","a","indexOf","descriptions","forEach","description","text","trim","extensions","templatedata","hasdescriptions","others","hide","init"],"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 * This module allows to enhance the form elements MoodleQuickForm_filetypes\n *\n * @module core_form/filetypes\n * @package core_form\n * @copyright 2017 David Mudrak <david@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.3\n */\ndefine(['jquery', 'core/log', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/ajax',\n 'core/templates', 'core/tree'],\n function($, Log, Str, ModalFactory, ModalEvents, Ajax, Templates, Tree) {\n\n \"use strict\";\n\n /**\n * Constructor of the FileTypes instances.\n *\n * @constructor\n * @param {String} elementId The id of the form element to enhance\n * @param {String} elementLabel The label of the form element used as the modal selector title\n * @param {String} onlyTypes Limit the list of offered types to this\n * @param {Bool} allowAll Allow presence of the \"All file types\" item\n */\n var FileTypes = function(elementId, elementLabel, onlyTypes, allowAll) {\n\n this.elementId = elementId;\n this.elementLabel = elementLabel;\n this.onlyTypes = onlyTypes;\n this.allowAll = allowAll;\n\n this.inputField = $('#' + elementId);\n this.wrapperBrowserTrigger = $('[data-filetypesbrowser=\"' + elementId + '\"]');\n this.wrapperDescriptions = $('[data-filetypesdescriptions=\"' + elementId + '\"]');\n\n if (!this.wrapperBrowserTrigger.length) {\n // This is a valid case. Most probably the element is frozen and\n // the filetypes browser should not be available.\n return;\n }\n\n if (!this.inputField.length || !this.wrapperDescriptions.length) {\n Log.error('core_form/filetypes: Unexpected DOM structure, unable to enhance filetypes field ' + elementId);\n return;\n }\n\n this.prepareBrowserTrigger()\n .then(function() {\n return this.prepareBrowserModal();\n }.bind(this))\n\n .then(function() {\n return this.prepareBrowserTree();\n }.bind(this));\n };\n\n /**\n * Create and set the browser trigger widget (this.browserTrigger).\n *\n * @method prepareBrowserTrigger\n * @returns {Promise}\n */\n FileTypes.prototype.prepareBrowserTrigger = function() {\n return Templates.render('core_form/filetypes-trigger', {})\n .then(function(html) {\n this.wrapperBrowserTrigger.html(html);\n this.browserTrigger = this.wrapperBrowserTrigger.find('[data-filetypeswidget=\"browsertrigger\"]');\n }.bind(this));\n };\n\n /**\n * Create and set the modal for displaying the browser (this.browserModal).\n *\n * @method prepareBrowserModal\n * @returns {Promise}\n */\n FileTypes.prototype.prepareBrowserModal = function() {\n return ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: this.elementLabel\n\n }).then(function(modal) {\n this.browserModal = modal;\n }.bind(this))\n\n .then(function() {\n // Because we have custom conditional modal trigger, we need to\n // handle the focus after closing ourselves, too.\n this.browserModal.getRoot().on(ModalEvents.hidden, function() {\n this.browserTrigger.focus();\n }.bind(this));\n\n this.browserModal.getRoot().on(ModalEvents.save, function() {\n this.saveBrowserModal();\n }.bind(this));\n }.bind(this));\n\n };\n\n /**\n * Create and set the tree in the browser modal's body.\n *\n * @method prepareBrowserTree\n * @returns {Promise}\n */\n FileTypes.prototype.prepareBrowserTree = function() {\n\n this.browserTrigger.on('click', function(e) {\n e.preventDefault();\n\n // We want to display the browser modal only when the associated input\n // field is not frozen (disabled).\n if (this.inputField.is('[disabled]')) {\n return;\n }\n\n var bodyContent = this.loadBrowserModalBody();\n\n bodyContent.then(function() {\n\n // Turn the list of groups and extensions into the tree.\n this.browserTree = new Tree(this.browserModal.getBody());\n\n // Override the behaviour of the Enter and Space keys to toggle our checkbox,\n // rather than toggle the tree node expansion status.\n this.browserTree.handleKeyDown = function(item, e) {\n if (e.keyCode == this.browserTree.keys.enter || e.keyCode == this.browserTree.keys.space) {\n e.preventDefault();\n e.stopPropagation();\n this.toggleCheckbox(item.attr('data-filetypesbrowserkey'));\n } else {\n Tree.prototype.handleKeyDown.call(this.browserTree, item, e);\n }\n }.bind(this);\n\n if (this.allowAll) {\n // Hide all other items if \"All file types\" is enabled.\n this.hideOrShowItemsDependingOnAllowAll(this.browserModal.getRoot()\n .find('input[type=\"checkbox\"][data-filetypesbrowserkey=\"*\"]:first'));\n // And do the same whenever we click that checkbox.\n this.browserModal.getRoot().on('change', 'input[type=\"checkbox\"][data-filetypesbrowserkey=\"*\"]', function(e) {\n this.hideOrShowItemsDependingOnAllowAll($(e.currentTarget));\n }.bind(this));\n }\n\n // Synchronize checked status if the file extension is present in multiple groups.\n this.browserModal.getRoot().on('change', 'input[type=\"checkbox\"][data-filetypesbrowserkey]', function(e) {\n var checkbox = $(e.currentTarget);\n var key = checkbox.attr('data-filetypesbrowserkey');\n this.browserModal.getRoot().find('input[type=\"checkbox\"][data-filetypesbrowserkey=\"' + key + '\"]')\n .prop('checked', checkbox.prop('checked'));\n }.bind(this));\n\n }.bind(this))\n\n .then(function() {\n this.browserModal.show();\n }.bind(this));\n\n this.browserModal.setBody(bodyContent);\n\n }.bind(this));\n\n // Return a resolved promise.\n return $.when();\n };\n\n /**\n * Load the browser modal body contents.\n *\n * @returns {Promise}\n */\n FileTypes.prototype.loadBrowserModalBody = function() {\n\n var args = {\n onlytypes: this.onlyTypes.join(),\n allowall: this.allowAll,\n current: this.inputField.val()\n };\n\n return Ajax.call([{\n methodname: 'core_form_get_filetypes_browser_data',\n args: args\n\n }])[0].then(function(browserData) {\n return Templates.render('core_form/filetypes-browser', {\n elementid: this.elementId,\n groups: browserData.groups\n });\n }.bind(this));\n };\n\n /**\n * Change the checked status of the given file type (group or extension).\n *\n * @method toggleCheckbox\n * @param {String} key\n */\n FileTypes.prototype.toggleCheckbox = function(key) {\n\n var checkbox = this.browserModal.getRoot().find('input[type=\"checkbox\"][data-filetypesbrowserkey=\"' + key + '\"]:first');\n\n checkbox.prop('checked', !checkbox.prop('checked'));\n };\n\n /**\n * Update the associated input field with selected file types.\n *\n * @method saveBrowserModal\n */\n FileTypes.prototype.saveBrowserModal = function() {\n\n // Check the \"All file types\" first.\n if (this.allowAll) {\n var allcheckbox = this.browserModal.getRoot().find('input[type=\"checkbox\"][data-filetypesbrowserkey=\"*\"]');\n if (allcheckbox.length && allcheckbox.prop('checked')) {\n this.inputField.val('*');\n this.updateDescriptions(['*']);\n return;\n }\n }\n\n // Iterate over all checked boxes and populate the list.\n var newvalue = [];\n\n this.browserModal.getRoot().find('input[type=\"checkbox\"]').each(/** @this represents the checkbox */ function() {\n var checkbox = $(this);\n var key = checkbox.attr('data-filetypesbrowserkey');\n\n if (checkbox.prop('checked')) {\n newvalue.push(key);\n }\n });\n\n // Remove duplicates (e.g. file types present in multiple groups).\n newvalue = newvalue.filter(function(x, i, a) {\n return a.indexOf(x) == i;\n });\n\n this.inputField.val(newvalue.join(' '));\n this.updateDescriptions(newvalue);\n };\n\n /**\n * Describe the selected filetypes in the form when saving the browser.\n *\n * @param {Array} keys List of keys to describe\n * @returns {Promise}\n */\n FileTypes.prototype.updateDescriptions = function(keys) {\n\n var descriptions = [];\n\n keys.forEach(function(key) {\n descriptions.push({\n description: this.browserModal.getRoot().find('[data-filetypesname=\"' + key + '\"]:first').text().trim(),\n extensions: this.browserModal.getRoot().find('[data-filetypesextensions=\"' + key + '\"]:first').text().trim()\n });\n }.bind(this));\n\n var templatedata = {\n hasdescriptions: (descriptions.length > 0),\n descriptions: descriptions\n };\n\n return Templates.render('core_form/filetypes-descriptions', templatedata)\n .then(function(html) {\n this.wrapperDescriptions.html(html);\n }.bind(this));\n };\n\n /**\n * If \"All file types\" is checked, all other browser items are made hidden, and vice versa.\n *\n * @param {jQuery} allcheckbox The \"All file types\" checkbox.\n */\n FileTypes.prototype.hideOrShowItemsDependingOnAllowAll = function(allcheckbox) {\n var others = this.browserModal.getRoot().find('[role=\"treeitem\"][data-filetypesbrowserkey!=\"*\"]');\n if (allcheckbox.prop('checked')) {\n others.hide();\n } else {\n others.show();\n }\n };\n\n return {\n init: function(elementId, elementLabel, onlyTypes, allowAll) {\n new FileTypes(elementId, elementLabel, onlyTypes, allowAll);\n }\n };\n});\n"],"file":"filetypes.min.js"}