diff --git a/admin/tool/analytics/amd/build/log_info.min.js.map b/admin/tool/analytics/amd/build/log_info.min.js.map index 643ee195028..6e21bd92aae 100644 --- a/admin/tool/analytics/amd/build/log_info.min.js.map +++ b/admin/tool/analytics/amd/build/log_info.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/log_info.js"],"names":["define","$","str","ModalFactory","Notification","loadInfo","id","info","link","get_string","then","langString","bodyInfo","forEach","item","append","create","title","body","html","large","catch","exception"],"mappings":"AAwBAA,OAAM,2BAAC,CAAC,QAAD,CAAW,UAAX,CAAuB,oBAAvB,CAA6C,mBAA7C,CAAD,CAAoE,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+BC,CAA/B,CAA6C,CAEnH,MAAoD,CAShDC,QAAQ,CAAE,kBAASC,CAAT,CAAaC,CAAb,CAAmB,CAEzB,GAAIC,CAAAA,CAAI,CAAGP,CAAC,CAAC,wBAAyBK,CAAzB,CAA8B,KAA/B,CAAZ,CACAJ,CAAG,CAACO,UAAJ,CAAe,SAAf,CAA0B,gBAA1B,EAA4CC,IAA5C,CAAiD,SAASC,CAAT,CAAqB,CAElE,GAAIC,CAAAA,CAAQ,CAAGX,CAAC,CAAC,MAAD,CAAhB,CACAM,CAAI,CAACM,OAAL,CAAa,SAASC,CAAT,CAAe,CACxBF,CAAQ,CAACG,MAAT,CAAgB,OAASD,CAAT,CAAgB,OAAhC,CACH,CAFD,EAGAF,CAAQ,CAACG,MAAT,CAAgB,OAAhB,EAEA,MAAOZ,CAAAA,CAAY,CAACa,MAAb,CAAoB,CACvBC,KAAK,CAAEN,CADgB,CAEvBO,IAAI,CAAEN,CAAQ,CAACO,IAAT,EAFiB,CAGvBC,KAAK,GAHkB,CAApB,CAIJZ,CAJI,CAMV,CAdD,EAcGa,KAdH,CAcSjB,CAAY,CAACkB,SAdtB,CAeH,CA3B+C,CA6BvD,CA/BK,CAAN","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 .\n\n/**\n * Shows a dialogue with info about this logs.\n *\n * @module tool_analytics/log_info\n * @class log_info\n * @package tool_analytics\n * @copyright 2017 David Monllao {@link http://www.davidmonllao.com}\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/notification'], function($, str, ModalFactory, Notification) {\n\n return /** @alias module:tool_analytics/log_info */ {\n\n /**\n * Prepares a modal info for a log's results.\n *\n * @method loadInfo\n * @param {int} id\n * @param {string[]} info\n */\n loadInfo: function(id, info) {\n\n var link = $('[data-model-log-id=\"' + id + '\"]');\n str.get_string('loginfo', 'tool_analytics').then(function(langString) {\n\n var bodyInfo = $(\"\");\n\n return ModalFactory.create({\n title: langString,\n body: bodyInfo.html(),\n large: true,\n }, link);\n\n }).catch(Notification.exception);\n }\n };\n});\n"],"file":"log_info.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/log_info.js"],"names":["define","$","str","ModalFactory","Notification","loadInfo","id","info","link","get_string","then","langString","bodyInfo","forEach","item","append","create","title","body","html","large","catch","exception"],"mappings":"AAuBAA,OAAM,2BAAC,CAAC,QAAD,CAAW,UAAX,CAAuB,oBAAvB,CAA6C,mBAA7C,CAAD,CAAoE,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+BC,CAA/B,CAA6C,CAEnH,MAAoD,CAShDC,QAAQ,CAAE,kBAASC,CAAT,CAAaC,CAAb,CAAmB,CAEzB,GAAIC,CAAAA,CAAI,CAAGP,CAAC,CAAC,wBAAyBK,CAAzB,CAA8B,KAA/B,CAAZ,CACAJ,CAAG,CAACO,UAAJ,CAAe,SAAf,CAA0B,gBAA1B,EAA4CC,IAA5C,CAAiD,SAASC,CAAT,CAAqB,CAElE,GAAIC,CAAAA,CAAQ,CAAGX,CAAC,CAAC,MAAD,CAAhB,CACAM,CAAI,CAACM,OAAL,CAAa,SAASC,CAAT,CAAe,CACxBF,CAAQ,CAACG,MAAT,CAAgB,OAASD,CAAT,CAAgB,OAAhC,CACH,CAFD,EAGAF,CAAQ,CAACG,MAAT,CAAgB,OAAhB,EAEA,MAAOZ,CAAAA,CAAY,CAACa,MAAb,CAAoB,CACvBC,KAAK,CAAEN,CADgB,CAEvBO,IAAI,CAAEN,CAAQ,CAACO,IAAT,EAFiB,CAGvBC,KAAK,GAHkB,CAApB,CAIJZ,CAJI,CAMV,CAdD,EAcGa,KAdH,CAcSjB,CAAY,CAACkB,SAdtB,CAeH,CA3B+C,CA6BvD,CA/BK,CAAN","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 .\n\n/**\n * Shows a dialogue with info about this logs.\n *\n * @module tool_analytics/log_info\n * @class log_info\n * @copyright 2017 David Monllao {@link http://www.davidmonllao.com}\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/notification'], function($, str, ModalFactory, Notification) {\n\n return /** @alias module:tool_analytics/log_info */ {\n\n /**\n * Prepares a modal info for a log's results.\n *\n * @method loadInfo\n * @param {int} id\n * @param {string[]} info\n */\n loadInfo: function(id, info) {\n\n var link = $('[data-model-log-id=\"' + id + '\"]');\n str.get_string('loginfo', 'tool_analytics').then(function(langString) {\n\n var bodyInfo = $(\"\");\n\n return ModalFactory.create({\n title: langString,\n body: bodyInfo.html(),\n large: true,\n }, link);\n\n }).catch(Notification.exception);\n }\n };\n});\n"],"file":"log_info.min.js"} \ No newline at end of file diff --git a/admin/tool/analytics/amd/build/potential-contexts.min.js.map b/admin/tool/analytics/amd/build/potential-contexts.min.js.map index 03b6fb56a01..6de7893e1cb 100644 --- a/admin/tool/analytics/amd/build/potential-contexts.min.js.map +++ b/admin/tool/analytics/amd/build/potential-contexts.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/potential-contexts.js"],"names":["define","$","Ajax","processResults","selector","results","contexts","isArray","each","index","context","push","value","id","label","name","transport","query","success","failure","promise","modelid","attr","call","methodname","args","then","fail"],"mappings":"AAyBAA,OAAM,qCAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAE9C,MAA8D,CAE1DC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAQ,CAAG,EAAf,CACA,GAAIL,CAAC,CAACM,OAAF,CAAUF,CAAV,CAAJ,CAAwB,CACpBJ,CAAC,CAACO,IAAF,CAAOH,CAAP,CAAgB,SAASI,CAAT,CAAgBC,CAAhB,CAAyB,CACrCJ,CAAQ,CAACK,IAAT,CAAc,CACVC,KAAK,CAAEF,CAAO,CAACG,EADL,CAEVC,KAAK,CAAEJ,CAAO,CAACK,IAFL,CAAd,CAIH,CALD,EAMA,MAAOT,CAAAA,CAEV,CATD,IASO,CACH,MAAOD,CAAAA,CACV,CACJ,CAhByD,CAkB1DW,SAAS,CAAE,mBAASZ,CAAT,CAAmBa,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,IAC/CC,CAAAA,CAD+C,CAG/CC,CAAO,CAAGpB,CAAC,CAACG,CAAD,CAAD,CAAYkB,IAAZ,CAAiB,SAAjB,GAA+B,IAHM,CAInDF,CAAO,CAAGlB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,mCADK,CAEjBC,IAAI,CAAE,CACFR,KAAK,CAAEA,CADL,CAEFI,OAAO,CAAEA,CAFP,CAFW,CAAD,CAAV,CAAV,CAQAD,CAAO,CAAC,CAAD,CAAP,CAAWM,IAAX,CAAgBR,CAAhB,EAAyBS,IAAzB,CAA8BR,CAA9B,CACH,CA/ByD,CAmCjE,CArCK,CAAN","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 .\n\n/**\n * Potential contexts selector module.\n *\n * @module tool_analytics/potential-contexts\n * @class potential-contexts\n * @package tool_analytics\n * @copyright 2019 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax'], function($, Ajax) {\n\n return /** @alias module:tool_analytics/potential-contexts */ {\n\n processResults: function(selector, results) {\n var contexts = [];\n if ($.isArray(results)) {\n $.each(results, function(index, context) {\n contexts.push({\n value: context.id,\n label: context.name\n });\n });\n return contexts;\n\n } else {\n return results;\n }\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n\n let modelid = $(selector).attr('modelid') || null;\n promise = Ajax.call([{\n methodname: 'tool_analytics_potential_contexts',\n args: {\n query: query,\n modelid: modelid\n }\n }]);\n\n promise[0].then(success).fail(failure);\n }\n\n };\n\n});\n"],"file":"potential-contexts.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/potential-contexts.js"],"names":["define","$","Ajax","processResults","selector","results","contexts","isArray","each","index","context","push","value","id","label","name","transport","query","success","failure","promise","modelid","attr","call","methodname","args","then","fail"],"mappings":"AAwBAA,OAAM,qCAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAE9C,MAA8D,CAE1DC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAQ,CAAG,EAAf,CACA,GAAIL,CAAC,CAACM,OAAF,CAAUF,CAAV,CAAJ,CAAwB,CACpBJ,CAAC,CAACO,IAAF,CAAOH,CAAP,CAAgB,SAASI,CAAT,CAAgBC,CAAhB,CAAyB,CACrCJ,CAAQ,CAACK,IAAT,CAAc,CACVC,KAAK,CAAEF,CAAO,CAACG,EADL,CAEVC,KAAK,CAAEJ,CAAO,CAACK,IAFL,CAAd,CAIH,CALD,EAMA,MAAOT,CAAAA,CAEV,CATD,IASO,CACH,MAAOD,CAAAA,CACV,CACJ,CAhByD,CAkB1DW,SAAS,CAAE,mBAASZ,CAAT,CAAmBa,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,IAC/CC,CAAAA,CAD+C,CAG/CC,CAAO,CAAGpB,CAAC,CAACG,CAAD,CAAD,CAAYkB,IAAZ,CAAiB,SAAjB,GAA+B,IAHM,CAInDF,CAAO,CAAGlB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,mCADK,CAEjBC,IAAI,CAAE,CACFR,KAAK,CAAEA,CADL,CAEFI,OAAO,CAAEA,CAFP,CAFW,CAAD,CAAV,CAAV,CAQAD,CAAO,CAAC,CAAD,CAAP,CAAWM,IAAX,CAAgBR,CAAhB,EAAyBS,IAAzB,CAA8BR,CAA9B,CACH,CA/ByD,CAmCjE,CArCK,CAAN","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 .\n\n/**\n * Potential contexts selector module.\n *\n * @module tool_analytics/potential-contexts\n * @class potential-contexts\n * @copyright 2019 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax'], function($, Ajax) {\n\n return /** @alias module:tool_analytics/potential-contexts */ {\n\n processResults: function(selector, results) {\n var contexts = [];\n if ($.isArray(results)) {\n $.each(results, function(index, context) {\n contexts.push({\n value: context.id,\n label: context.name\n });\n });\n return contexts;\n\n } else {\n return results;\n }\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n\n let modelid = $(selector).attr('modelid') || null;\n promise = Ajax.call([{\n methodname: 'tool_analytics_potential_contexts',\n args: {\n query: query,\n modelid: modelid\n }\n }]);\n\n promise[0].then(success).fail(failure);\n }\n\n };\n\n});\n"],"file":"potential-contexts.min.js"} \ No newline at end of file diff --git a/admin/tool/analytics/amd/src/log_info.js b/admin/tool/analytics/amd/src/log_info.js index b87d56fe40b..74f2afe1e05 100644 --- a/admin/tool/analytics/amd/src/log_info.js +++ b/admin/tool/analytics/amd/src/log_info.js @@ -18,7 +18,6 @@ * * @module tool_analytics/log_info * @class log_info - * @package tool_analytics * @copyright 2017 David Monllao {@link http://www.davidmonllao.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/analytics/amd/src/potential-contexts.js b/admin/tool/analytics/amd/src/potential-contexts.js index eb353675e6c..6737c9e63dd 100644 --- a/admin/tool/analytics/amd/src/potential-contexts.js +++ b/admin/tool/analytics/amd/src/potential-contexts.js @@ -18,7 +18,6 @@ * * @module tool_analytics/potential-contexts * @class potential-contexts - * @package tool_analytics * @copyright 2019 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/build/add_category.min.js.map b/admin/tool/dataprivacy/amd/build/add_category.min.js.map index 718f6554412..ba77ccb2094 100644 --- a/admin/tool/dataprivacy/amd/build/add_category.min.js.map +++ b/admin/tool/dataprivacy/amd/build/add_category.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/add_category.js"],"names":["define","$","Str","Ajax","Notification","ModalFactory","ModalEvents","Fragment","SELECTORS","CATEGORY_LINK","AddCategory","contextId","strings","get_strings","key","component","registerEventListeners","prototype","trigger","on","then","create","type","types","SAVE_CANCEL","title","body","done","modal","setupFormModal","bind","fail","exception","getBody","formdata","params","jsonformdata","JSON","stringify","loadFragment","saveText","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","save","submitForm","submitFormAjax","show","e","preventDefault","find","submit","formData","serialize","call","methodname","args","data","validationerrors","close","document","location","reload","Y","use","M","core_formchangechecker","reset_form_dirty_state","removeListeners","off","getInstance"],"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 .\n\n/**\n * Module to add categories.\n *\n * @module tool_dataprivacy/add_category\n * @package tool_dataprivacy\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/modal_factory', 'core/modal_events', 'core/fragment'],\n function($, Str, Ajax, Notification, ModalFactory, ModalEvents, Fragment) {\n\n var SELECTORS = {\n CATEGORY_LINK: '[data-add-element=\"category\"]',\n };\n\n var AddCategory = function(contextId) {\n this.contextId = contextId;\n\n var stringKeys = [\n {\n key: 'addcategory',\n component: 'tool_dataprivacy'\n },\n {\n key: 'save',\n component: 'admin'\n }\n ];\n this.strings = Str.get_strings(stringKeys);\n\n this.registerEventListeners();\n };\n\n /**\n * @var {int} contextId\n * @private\n */\n AddCategory.prototype.contextId = 0;\n\n /**\n * @var {Promise}\n * @private\n */\n AddCategory.prototype.strings = 0;\n\n AddCategory.prototype.registerEventListeners = function() {\n\n var trigger = $(SELECTORS.CATEGORY_LINK);\n trigger.on('click', function() {\n return this.strings.then(function(strings) {\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: strings[0],\n body: '',\n }, trigger).done(function(modal) {\n this.setupFormModal(modal, strings[1]);\n }.bind(this));\n }.bind(this))\n .fail(Notification.exception);\n }.bind(this));\n\n };\n\n /**\n * @method getBody\n * @param {Object} formdata\n * @private\n * @return {Promise}\n */\n AddCategory.prototype.getBody = function(formdata) {\n\n var params = null;\n if (typeof formdata !== \"undefined\") {\n params = {jsonformdata: JSON.stringify(formdata)};\n }\n // Get the content of the modal.\n return Fragment.loadFragment('tool_dataprivacy', 'addcategory_form', this.contextId, params);\n };\n\n AddCategory.prototype.setupFormModal = function(modal, saveText) {\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());\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 this.modal = modal;\n\n modal.show();\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 AddCategory.prototype.submitForm = function(e) {\n e.preventDefault();\n this.modal.getRoot().find('form').submit();\n };\n\n AddCategory.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 Ajax.call([{\n methodname: 'tool_dataprivacy_create_category_form',\n args: {jsonformdata: JSON.stringify(formData)},\n done: function(data) {\n if (data.validationerrors) {\n this.modal.setBody(this.getBody(formData));\n } else {\n this.close();\n }\n }.bind(this),\n fail: Notification.exception\n }]);\n };\n\n AddCategory.prototype.close = function() {\n this.destroy();\n document.location.reload();\n };\n\n AddCategory.prototype.destroy = function() {\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n this.modal.destroy();\n };\n\n AddCategory.prototype.removeListeners = function() {\n $(SELECTORS.CATEGORY_LINK).off('click');\n };\n\n return /** @alias module:tool_dataprivacy/add_category */ {\n getInstance: function(contextId) {\n return new AddCategory(contextId);\n }\n };\n }\n);\n\n"],"file":"add_category.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/add_category.js"],"names":["define","$","Str","Ajax","Notification","ModalFactory","ModalEvents","Fragment","SELECTORS","CATEGORY_LINK","AddCategory","contextId","strings","get_strings","key","component","registerEventListeners","prototype","trigger","on","then","create","type","types","SAVE_CANCEL","title","body","done","modal","setupFormModal","bind","fail","exception","getBody","formdata","params","jsonformdata","JSON","stringify","loadFragment","saveText","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","save","submitForm","submitFormAjax","show","e","preventDefault","find","submit","formData","serialize","call","methodname","args","data","validationerrors","close","document","location","reload","Y","use","M","core_formchangechecker","reset_form_dirty_state","removeListeners","off","getInstance"],"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 .\n\n/**\n * Module to add categories.\n *\n * @module tool_dataprivacy/add_category\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/modal_factory', 'core/modal_events', 'core/fragment'],\n function($, Str, Ajax, Notification, ModalFactory, ModalEvents, Fragment) {\n\n var SELECTORS = {\n CATEGORY_LINK: '[data-add-element=\"category\"]',\n };\n\n var AddCategory = function(contextId) {\n this.contextId = contextId;\n\n var stringKeys = [\n {\n key: 'addcategory',\n component: 'tool_dataprivacy'\n },\n {\n key: 'save',\n component: 'admin'\n }\n ];\n this.strings = Str.get_strings(stringKeys);\n\n this.registerEventListeners();\n };\n\n /**\n * @var {int} contextId\n * @private\n */\n AddCategory.prototype.contextId = 0;\n\n /**\n * @var {Promise}\n * @private\n */\n AddCategory.prototype.strings = 0;\n\n AddCategory.prototype.registerEventListeners = function() {\n\n var trigger = $(SELECTORS.CATEGORY_LINK);\n trigger.on('click', function() {\n return this.strings.then(function(strings) {\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: strings[0],\n body: '',\n }, trigger).done(function(modal) {\n this.setupFormModal(modal, strings[1]);\n }.bind(this));\n }.bind(this))\n .fail(Notification.exception);\n }.bind(this));\n\n };\n\n /**\n * @method getBody\n * @param {Object} formdata\n * @private\n * @return {Promise}\n */\n AddCategory.prototype.getBody = function(formdata) {\n\n var params = null;\n if (typeof formdata !== \"undefined\") {\n params = {jsonformdata: JSON.stringify(formdata)};\n }\n // Get the content of the modal.\n return Fragment.loadFragment('tool_dataprivacy', 'addcategory_form', this.contextId, params);\n };\n\n AddCategory.prototype.setupFormModal = function(modal, saveText) {\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());\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 this.modal = modal;\n\n modal.show();\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 AddCategory.prototype.submitForm = function(e) {\n e.preventDefault();\n this.modal.getRoot().find('form').submit();\n };\n\n AddCategory.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 Ajax.call([{\n methodname: 'tool_dataprivacy_create_category_form',\n args: {jsonformdata: JSON.stringify(formData)},\n done: function(data) {\n if (data.validationerrors) {\n this.modal.setBody(this.getBody(formData));\n } else {\n this.close();\n }\n }.bind(this),\n fail: Notification.exception\n }]);\n };\n\n AddCategory.prototype.close = function() {\n this.destroy();\n document.location.reload();\n };\n\n AddCategory.prototype.destroy = function() {\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n this.modal.destroy();\n };\n\n AddCategory.prototype.removeListeners = function() {\n $(SELECTORS.CATEGORY_LINK).off('click');\n };\n\n return /** @alias module:tool_dataprivacy/add_category */ {\n getInstance: function(contextId) {\n return new AddCategory(contextId);\n }\n };\n }\n);\n\n"],"file":"add_category.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/add_purpose.min.js.map b/admin/tool/dataprivacy/amd/build/add_purpose.min.js.map index aabef23b184..525a7405613 100644 --- a/admin/tool/dataprivacy/amd/build/add_purpose.min.js.map +++ b/admin/tool/dataprivacy/amd/build/add_purpose.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/add_purpose.js"],"names":["define","$","Str","Ajax","Notification","ModalFactory","ModalEvents","Fragment","SELECTORS","PURPOSE_LINK","AddPurpose","contextId","strings","get_strings","key","component","registerEventListeners","prototype","trigger","on","then","create","type","types","SAVE_CANCEL","title","body","done","modal","setupFormModal","bind","fail","exception","getBody","formdata","params","jsonformdata","JSON","stringify","loadFragment","saveText","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","save","submitForm","submitFormAjax","show","e","preventDefault","find","submit","formData","serialize","call","methodname","args","data","validationerrors","close","document","location","reload","Y","use","M","core_formchangechecker","reset_form_dirty_state","removeListeners","off","getInstance"],"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 .\n\n/**\n * Module to add purposes.\n *\n * @module tool_dataprivacy/add_purpose\n * @package tool_dataprivacy\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/modal_factory', 'core/modal_events', 'core/fragment'],\n function($, Str, Ajax, Notification, ModalFactory, ModalEvents, Fragment) {\n\n var SELECTORS = {\n PURPOSE_LINK: '[data-add-element=\"purpose\"]',\n };\n\n var AddPurpose = function(contextId) {\n this.contextId = contextId;\n\n var stringKeys = [\n {\n key: 'addpurpose',\n component: 'tool_dataprivacy'\n },\n {\n key: 'save',\n component: 'admin'\n }\n ];\n this.strings = Str.get_strings(stringKeys);\n\n this.registerEventListeners();\n };\n\n /**\n * @var {int} contextId\n * @private\n */\n AddPurpose.prototype.contextId = 0;\n\n /**\n * @var {Promise}\n * @private\n */\n AddPurpose.prototype.strings = 0;\n\n AddPurpose.prototype.registerEventListeners = function() {\n\n var trigger = $(SELECTORS.PURPOSE_LINK);\n trigger.on('click', function() {\n return this.strings.then(function(strings) {\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: strings[0],\n body: '',\n }, trigger).done(function(modal) {\n this.setupFormModal(modal, strings[1]);\n }.bind(this));\n }.bind(this))\n .fail(Notification.exception);\n }.bind(this));\n\n };\n\n /**\n * @method getBody\n * @param {Object} formdata\n * @private\n * @return {Promise}\n */\n AddPurpose.prototype.getBody = function(formdata) {\n\n var params = null;\n if (typeof formdata !== \"undefined\") {\n params = {jsonformdata: JSON.stringify(formdata)};\n }\n // Get the content of the modal.\n return Fragment.loadFragment('tool_dataprivacy', 'addpurpose_form', this.contextId, params);\n };\n\n AddPurpose.prototype.setupFormModal = function(modal, saveText) {\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());\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 this.modal = modal;\n\n modal.show();\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 AddPurpose.prototype.submitForm = function(e) {\n e.preventDefault();\n this.modal.getRoot().find('form').submit();\n };\n\n AddPurpose.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 Ajax.call([{\n methodname: 'tool_dataprivacy_create_purpose_form',\n args: {jsonformdata: JSON.stringify(formData)},\n done: function(data) {\n if (data.validationerrors) {\n this.modal.setBody(this.getBody(formData));\n } else {\n this.close();\n }\n }.bind(this),\n\n fail: Notification.exception\n }]);\n };\n\n AddPurpose.prototype.close = function() {\n this.destroy();\n document.location.reload();\n };\n\n AddPurpose.prototype.destroy = function() {\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n this.modal.destroy();\n };\n\n AddPurpose.prototype.removeListeners = function() {\n $(SELECTORS.PURPOSE_LINK).off('click');\n };\n\n return /** @alias module:tool_dataprivacy/add_purpose */ {\n getInstance: function(contextId) {\n return new AddPurpose(contextId);\n }\n };\n }\n);\n\n"],"file":"add_purpose.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/add_purpose.js"],"names":["define","$","Str","Ajax","Notification","ModalFactory","ModalEvents","Fragment","SELECTORS","PURPOSE_LINK","AddPurpose","contextId","strings","get_strings","key","component","registerEventListeners","prototype","trigger","on","then","create","type","types","SAVE_CANCEL","title","body","done","modal","setupFormModal","bind","fail","exception","getBody","formdata","params","jsonformdata","JSON","stringify","loadFragment","saveText","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","save","submitForm","submitFormAjax","show","e","preventDefault","find","submit","formData","serialize","call","methodname","args","data","validationerrors","close","document","location","reload","Y","use","M","core_formchangechecker","reset_form_dirty_state","removeListeners","off","getInstance"],"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 .\n\n/**\n * Module to add purposes.\n *\n * @module tool_dataprivacy/add_purpose\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/modal_factory', 'core/modal_events', 'core/fragment'],\n function($, Str, Ajax, Notification, ModalFactory, ModalEvents, Fragment) {\n\n var SELECTORS = {\n PURPOSE_LINK: '[data-add-element=\"purpose\"]',\n };\n\n var AddPurpose = function(contextId) {\n this.contextId = contextId;\n\n var stringKeys = [\n {\n key: 'addpurpose',\n component: 'tool_dataprivacy'\n },\n {\n key: 'save',\n component: 'admin'\n }\n ];\n this.strings = Str.get_strings(stringKeys);\n\n this.registerEventListeners();\n };\n\n /**\n * @var {int} contextId\n * @private\n */\n AddPurpose.prototype.contextId = 0;\n\n /**\n * @var {Promise}\n * @private\n */\n AddPurpose.prototype.strings = 0;\n\n AddPurpose.prototype.registerEventListeners = function() {\n\n var trigger = $(SELECTORS.PURPOSE_LINK);\n trigger.on('click', function() {\n return this.strings.then(function(strings) {\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: strings[0],\n body: '',\n }, trigger).done(function(modal) {\n this.setupFormModal(modal, strings[1]);\n }.bind(this));\n }.bind(this))\n .fail(Notification.exception);\n }.bind(this));\n\n };\n\n /**\n * @method getBody\n * @param {Object} formdata\n * @private\n * @return {Promise}\n */\n AddPurpose.prototype.getBody = function(formdata) {\n\n var params = null;\n if (typeof formdata !== \"undefined\") {\n params = {jsonformdata: JSON.stringify(formdata)};\n }\n // Get the content of the modal.\n return Fragment.loadFragment('tool_dataprivacy', 'addpurpose_form', this.contextId, params);\n };\n\n AddPurpose.prototype.setupFormModal = function(modal, saveText) {\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());\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 this.modal = modal;\n\n modal.show();\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 AddPurpose.prototype.submitForm = function(e) {\n e.preventDefault();\n this.modal.getRoot().find('form').submit();\n };\n\n AddPurpose.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 Ajax.call([{\n methodname: 'tool_dataprivacy_create_purpose_form',\n args: {jsonformdata: JSON.stringify(formData)},\n done: function(data) {\n if (data.validationerrors) {\n this.modal.setBody(this.getBody(formData));\n } else {\n this.close();\n }\n }.bind(this),\n\n fail: Notification.exception\n }]);\n };\n\n AddPurpose.prototype.close = function() {\n this.destroy();\n document.location.reload();\n };\n\n AddPurpose.prototype.destroy = function() {\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n this.modal.destroy();\n };\n\n AddPurpose.prototype.removeListeners = function() {\n $(SELECTORS.PURPOSE_LINK).off('click');\n };\n\n return /** @alias module:tool_dataprivacy/add_purpose */ {\n getInstance: function(contextId) {\n return new AddPurpose(contextId);\n }\n };\n }\n);\n\n"],"file":"add_purpose.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/categoriesactions.min.js.map b/admin/tool/dataprivacy/amd/build/categoriesactions.min.js.map index b88fd11935e..cb8801921da 100644 --- a/admin/tool/dataprivacy/amd/build/categoriesactions.min.js.map +++ b/admin/tool/dataprivacy/amd/build/categoriesactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/categoriesactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","ACTIONS","DELETE","CategoriesActions","registerEvents","prototype","click","e","preventDefault","id","data","categoryname","get_strings","key","component","param","then","langStrings","title","confirmMessage","buttonText","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","result","remove","addNotification","message","warnings","fail","exception","hidden","destroy","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 .\n\n/**\n * AMD module for categories actions.\n *\n * @module tool_dataprivacy/categoriesactions\n * @package tool_dataprivacy\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{DELETE: string}}\n */\n var ACTIONS = {\n DELETE: '[data-action=\"deletecategory\"]',\n };\n\n /**\n * CategoriesActions class.\n */\n var CategoriesActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n CategoriesActions.prototype.registerEvents = function() {\n $(ACTIONS.DELETE).click(function(e) {\n e.preventDefault();\n\n var id = $(this).data('id');\n var categoryname = $(this).data('name');\n var stringkeys = [\n {\n key: 'deletecategory',\n component: 'tool_dataprivacy'\n },\n {\n key: 'deletecategorytext',\n component: 'tool_dataprivacy',\n param: categoryname\n },\n {\n key: 'delete'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langStrings) {\n var title = langStrings[0];\n var confirmMessage = langStrings[1];\n var buttonText = langStrings[2];\n return ModalFactory.create({\n title: title,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n }).then(function(modal) {\n modal.setSaveButtonText(buttonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n\n var request = {\n methodname: 'tool_dataprivacy_delete_category',\n args: {'id': id}\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n $('tr[data-categoryid=\"' + id + '\"]').remove();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n });\n }).done(function(modal) {\n modal.show();\n\n }).fail(Notification.exception);\n });\n };\n\n return /** @alias module:tool_dataprivacy/categoriesactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the module.\n *\n * @method init\n * @return {CategoriesActions}\n */\n 'init': function() {\n return new CategoriesActions();\n }\n };\n});\n"],"file":"categoriesactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/categoriesactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","ACTIONS","DELETE","CategoriesActions","registerEvents","prototype","click","e","preventDefault","id","data","categoryname","get_strings","key","component","param","then","langStrings","title","confirmMessage","buttonText","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","result","remove","addNotification","message","warnings","fail","exception","hidden","destroy","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 .\n\n/**\n * AMD module for categories actions.\n *\n * @module tool_dataprivacy/categoriesactions\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{DELETE: string}}\n */\n var ACTIONS = {\n DELETE: '[data-action=\"deletecategory\"]',\n };\n\n /**\n * CategoriesActions class.\n */\n var CategoriesActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n CategoriesActions.prototype.registerEvents = function() {\n $(ACTIONS.DELETE).click(function(e) {\n e.preventDefault();\n\n var id = $(this).data('id');\n var categoryname = $(this).data('name');\n var stringkeys = [\n {\n key: 'deletecategory',\n component: 'tool_dataprivacy'\n },\n {\n key: 'deletecategorytext',\n component: 'tool_dataprivacy',\n param: categoryname\n },\n {\n key: 'delete'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langStrings) {\n var title = langStrings[0];\n var confirmMessage = langStrings[1];\n var buttonText = langStrings[2];\n return ModalFactory.create({\n title: title,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n }).then(function(modal) {\n modal.setSaveButtonText(buttonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n\n var request = {\n methodname: 'tool_dataprivacy_delete_category',\n args: {'id': id}\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n $('tr[data-categoryid=\"' + id + '\"]').remove();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n });\n }).done(function(modal) {\n modal.show();\n\n }).fail(Notification.exception);\n });\n };\n\n return /** @alias module:tool_dataprivacy/categoriesactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the module.\n *\n * @method init\n * @return {CategoriesActions}\n */\n 'init': function() {\n return new CategoriesActions();\n }\n };\n});\n"],"file":"categoriesactions.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/data_deletion.min.js.map b/admin/tool/dataprivacy/amd/build/data_deletion.min.js.map index 6933bcc4cf9..70995ebd33a 100644 --- a/admin/tool/dataprivacy/amd/build/data_deletion.min.js.map +++ b/admin/tool/dataprivacy/amd/build/data_deletion.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/data_deletion.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","ACTIONS","MARK_FOR_DELETION","SELECT_ALL","SELECTORS","SELECTCONTEXT","DataDeletionActions","registerEvents","prototype","click","e","preventDefault","selectedIds","each","checkbox","is","push","val","showConfirmation","change","selectallnone","attr","removeAttr","ids","modalTitle","get_strings","key","component","then","langStrings","confirmMessage","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","data","result","window","location","reload","addNotification","message","warnings","fail","exception","hidden","destroy","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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/data_deletion\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{MARK_FOR_DELETION: string}}\n * @type {{SELECT_ALL: string}}\n */\n var ACTIONS = {\n MARK_FOR_DELETION: '[data-action=\"markfordeletion\"]',\n SELECT_ALL: '[data-action=\"selectall\"]',\n };\n\n /**\n * List of selectors.\n *\n * @type {{SELECTCONTEXT: string}}\n */\n var SELECTORS = {\n SELECTCONTEXT: '.selectcontext',\n };\n\n /**\n * DataDeletionActions class.\n */\n var DataDeletionActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n DataDeletionActions.prototype.registerEvents = function() {\n $(ACTIONS.MARK_FOR_DELETION).click(function(e) {\n e.preventDefault();\n\n var selectedIds = [];\n $(SELECTORS.SELECTCONTEXT).each(function() {\n var checkbox = $(this);\n if (checkbox.is(':checked')) {\n selectedIds.push(checkbox.val());\n }\n });\n showConfirmation(selectedIds);\n });\n\n $(ACTIONS.SELECT_ALL).change(function(e) {\n e.preventDefault();\n\n var selectallnone = $(this);\n if (selectallnone.is(':checked')) {\n $(SELECTORS.SELECTCONTEXT).attr('checked', 'checked');\n } else {\n $(SELECTORS.SELECTCONTEXT).removeAttr('checked');\n }\n });\n };\n\n /**\n * Show the confirmation dialogue.\n *\n * @param {Array} ids The array of expired context record IDs.\n */\n function showConfirmation(ids) {\n var keys = [\n {\n key: 'confirm',\n component: 'moodle'\n },\n {\n key: 'confirmcontextdeletion',\n component: 'tool_dataprivacy'\n }\n ];\n var wsfunction = 'tool_dataprivacy_confirm_contexts_for_deletion';\n\n var modalTitle = '';\n Str.get_strings(keys).then(function(langStrings) {\n modalTitle = langStrings[0];\n var confirmMessage = langStrings[1];\n return ModalFactory.create({\n title: modalTitle,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(modalTitle);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n // Confirm the request.\n var params = {\n 'ids': ids\n };\n\n var request = {\n methodname: wsfunction,\n args: params\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n window.location.reload();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n }).done(function(modal) {\n modal.show();\n }).fail(Notification.exception);\n }\n\n return DataDeletionActions;\n});\n"],"file":"data_deletion.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/data_deletion.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","ACTIONS","MARK_FOR_DELETION","SELECT_ALL","SELECTORS","SELECTCONTEXT","DataDeletionActions","registerEvents","prototype","click","e","preventDefault","selectedIds","each","checkbox","is","push","val","showConfirmation","change","selectallnone","attr","removeAttr","ids","modalTitle","get_strings","key","component","then","langStrings","confirmMessage","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","data","result","window","location","reload","addNotification","message","warnings","fail","exception","hidden","destroy","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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/data_deletion\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{MARK_FOR_DELETION: string}}\n * @type {{SELECT_ALL: string}}\n */\n var ACTIONS = {\n MARK_FOR_DELETION: '[data-action=\"markfordeletion\"]',\n SELECT_ALL: '[data-action=\"selectall\"]',\n };\n\n /**\n * List of selectors.\n *\n * @type {{SELECTCONTEXT: string}}\n */\n var SELECTORS = {\n SELECTCONTEXT: '.selectcontext',\n };\n\n /**\n * DataDeletionActions class.\n */\n var DataDeletionActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n DataDeletionActions.prototype.registerEvents = function() {\n $(ACTIONS.MARK_FOR_DELETION).click(function(e) {\n e.preventDefault();\n\n var selectedIds = [];\n $(SELECTORS.SELECTCONTEXT).each(function() {\n var checkbox = $(this);\n if (checkbox.is(':checked')) {\n selectedIds.push(checkbox.val());\n }\n });\n showConfirmation(selectedIds);\n });\n\n $(ACTIONS.SELECT_ALL).change(function(e) {\n e.preventDefault();\n\n var selectallnone = $(this);\n if (selectallnone.is(':checked')) {\n $(SELECTORS.SELECTCONTEXT).attr('checked', 'checked');\n } else {\n $(SELECTORS.SELECTCONTEXT).removeAttr('checked');\n }\n });\n };\n\n /**\n * Show the confirmation dialogue.\n *\n * @param {Array} ids The array of expired context record IDs.\n */\n function showConfirmation(ids) {\n var keys = [\n {\n key: 'confirm',\n component: 'moodle'\n },\n {\n key: 'confirmcontextdeletion',\n component: 'tool_dataprivacy'\n }\n ];\n var wsfunction = 'tool_dataprivacy_confirm_contexts_for_deletion';\n\n var modalTitle = '';\n Str.get_strings(keys).then(function(langStrings) {\n modalTitle = langStrings[0];\n var confirmMessage = langStrings[1];\n return ModalFactory.create({\n title: modalTitle,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(modalTitle);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n // Confirm the request.\n var params = {\n 'ids': ids\n };\n\n var request = {\n methodname: wsfunction,\n args: params\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n window.location.reload();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n }).done(function(modal) {\n modal.show();\n }).fail(Notification.exception);\n }\n\n return DataDeletionActions;\n});\n"],"file":"data_deletion.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/data_registry.min.js.map b/admin/tool/dataprivacy/amd/build/data_registry.min.js.map index eb4269ab174..b7c8d8f895c 100644 --- a/admin/tool/dataprivacy/amd/build/data_registry.min.js.map +++ b/admin/tool/dataprivacy/amd/build/data_registry.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/data_registry.js"],"names":["define","$","Str","Ajax","Notification","Templates","ModalFactory","ModalEvents","Fragment","AddPurpose","AddCategory","SELECTORS","TREE_NODES","FORM_CONTAINER","DataRegistry","systemContextId","initContextLevel","initContextId","currentContextLevel","currentContextId","init","prototype","addpurpose","addcategory","getInstance","strings","get_strings","key","component","registerEventListeners","loadForm","submitContextFormAjax","bind","submitContextLevelFormAjax","on","ev","preventDefault","trigger","currentTarget","removeClass","addClass","contextLevel","data","contextId","window","history","pushState","removeListeners","expandContextId","expandElement","expanded","expand","find","loadExtra","collapse","off","fragmentName","fragmentArgs","formSubmitCallback","clearForm","fragment","loadFragment","done","html","js","runTemplateJS","fail","exception","Y","use","M","core_formchangechecker","reset_form_dirty_state","submitForm","e","submit","submitFormAjax","saveMethodName","formData","serialize","then","call","methodname","args","jsonformdata","JSON","stringify","alert","catch","parentNode","contextid","element","branches","length","noElements","render","after","node","text","siblings"],"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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/data_registry\n * @package tool_dataprivacy\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/templates', 'core/modal_factory',\n 'core/modal_events', 'core/fragment', 'tool_dataprivacy/add_purpose', 'tool_dataprivacy/add_category'],\n function($, Str, Ajax, Notification, Templates, ModalFactory, ModalEvents, Fragment, AddPurpose, AddCategory) {\n\n var SELECTORS = {\n TREE_NODES: '[data-context-tree-node=1]',\n FORM_CONTAINER: '#context-form-container',\n };\n\n var DataRegistry = function(systemContextId, initContextLevel, initContextId) {\n this.systemContextId = systemContextId;\n this.currentContextLevel = initContextLevel;\n this.currentContextId = initContextId;\n this.init();\n };\n\n /**\n * @var {int} systemContextId\n * @private\n */\n DataRegistry.prototype.systemContextId = 0;\n\n /**\n * @var {int} currentContextLevel\n * @private\n */\n DataRegistry.prototype.currentContextLevel = 0;\n\n /**\n * @var {int} currentContextId\n * @private\n */\n DataRegistry.prototype.currentContextId = 0;\n\n /**\n * @var {AddPurpose} addpurpose\n * @private\n */\n DataRegistry.prototype.addpurpose = null;\n\n /**\n * @var {AddCategory} addcategory\n * @private\n */\n DataRegistry.prototype.addcategory = null;\n\n DataRegistry.prototype.init = function() {\n // Add purpose and category modals always at system context.\n this.addpurpose = AddPurpose.getInstance(this.systemContextId);\n this.addcategory = AddCategory.getInstance(this.systemContextId);\n\n var stringKeys = [\n {\n key: 'changessaved',\n component: 'moodle'\n }, {\n key: 'contextpurposecategorysaved',\n component: 'tool_dataprivacy'\n }, {\n key: 'noblockstoload',\n component: 'tool_dataprivacy'\n }, {\n key: 'noactivitiestoload',\n component: 'tool_dataprivacy'\n }, {\n key: 'nocoursestoload',\n component: 'tool_dataprivacy'\n }\n ];\n this.strings = Str.get_strings(stringKeys);\n\n this.registerEventListeners();\n\n // Load the default context level form.\n if (this.currentContextId) {\n this.loadForm('context_form', [this.currentContextId], this.submitContextFormAjax.bind(this));\n } else {\n this.loadForm('contextlevel_form', [this.currentContextLevel], this.submitContextLevelFormAjax.bind(this));\n }\n };\n\n DataRegistry.prototype.registerEventListeners = function() {\n $(SELECTORS.TREE_NODES).on('click', function(ev) {\n ev.preventDefault();\n\n var trigger = $(ev.currentTarget);\n\n // Active node.\n $(SELECTORS.TREE_NODES).removeClass('active');\n trigger.addClass('active');\n\n var contextLevel = trigger.data('contextlevel');\n var contextId = trigger.data('contextid');\n if (contextLevel) {\n // Context level level.\n\n window.history.pushState({}, null, '?contextlevel=' + contextLevel);\n\n // Remove previous add purpose and category listeners to avoid memory leaks.\n this.addpurpose.removeListeners();\n this.addcategory.removeListeners();\n\n // Load the context level form.\n this.currentContextLevel = contextLevel;\n this.loadForm('contextlevel_form', [this.currentContextLevel], this.submitContextLevelFormAjax.bind(this));\n } else if (contextId) {\n // Context instance level.\n\n window.history.pushState({}, null, '?contextid=' + contextId);\n\n // Remove previous add purpose and category listeners to avoid memory leaks.\n this.addpurpose.removeListeners();\n this.addcategory.removeListeners();\n\n // Load the context level form.\n this.currentContextId = contextId;\n this.loadForm('context_form', [this.currentContextId], this.submitContextFormAjax.bind(this));\n } else {\n // Expandable nodes.\n\n var expandContextId = trigger.data('expandcontextid');\n var expandElement = trigger.data('expandelement');\n var expanded = trigger.data('expanded');\n\n // Extra checking that there is an expandElement because we remove it after loading 0 branches.\n if (expandElement) {\n\n if (!expanded) {\n if (trigger.data('loaded') || !expandContextId || !expandElement) {\n this.expand(trigger);\n } else {\n\n trigger.find('> i').removeClass('fa-plus');\n trigger.find('> i').addClass('fa-circle-o-notch fa-spin');\n this.loadExtra(trigger, expandContextId, expandElement);\n }\n } else {\n this.collapse(trigger);\n }\n }\n }\n\n }.bind(this));\n };\n\n DataRegistry.prototype.removeListeners = function() {\n $(SELECTORS.TREE_NODES).off('click');\n };\n\n DataRegistry.prototype.loadForm = function(fragmentName, fragmentArgs, formSubmitCallback) {\n\n this.clearForm();\n\n var fragment = Fragment.loadFragment('tool_dataprivacy', fragmentName, this.systemContextId, fragmentArgs);\n fragment.done(function(html, js) {\n\n $(SELECTORS.FORM_CONTAINER).html(html);\n Templates.runTemplateJS(js);\n\n this.addpurpose.registerEventListeners();\n this.addcategory.registerEventListeners();\n\n // We also catch the form submit event and use it to submit the form with ajax.\n $(SELECTORS.FORM_CONTAINER).on('submit', 'form', formSubmitCallback);\n\n }.bind(this)).fail(Notification.exception);\n };\n\n DataRegistry.prototype.clearForm = function() {\n // For the previously loaded form.\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n\n // Remove previous listeners.\n $(SELECTORS.FORM_CONTAINER).off('submit', 'form');\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 DataRegistry.prototype.submitForm = function(e) {\n e.preventDefault();\n $(SELECTORS.FORM_CONTAINER).find('form').submit();\n };\n\n DataRegistry.prototype.submitContextLevelFormAjax = function(e) {\n this.submitFormAjax(e, 'tool_dataprivacy_set_contextlevel_form');\n };\n\n DataRegistry.prototype.submitContextFormAjax = function(e) {\n this.submitFormAjax(e, 'tool_dataprivacy_set_context_form');\n };\n\n DataRegistry.prototype.submitFormAjax = function(e, saveMethodName) {\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 = $(SELECTORS.FORM_CONTAINER).find('form').serialize();\n return this.strings.then(function(strings) {\n Ajax.call([{\n methodname: saveMethodName,\n args: {jsonformdata: JSON.stringify(formData)},\n done: function() {\n Notification.alert(strings[0], strings[1]);\n },\n fail: Notification.exception\n }]);\n return;\n }).catch(Notification.exception);\n\n };\n\n DataRegistry.prototype.loadExtra = function(parentNode, expandContextId, expandElement) {\n\n Ajax.call([{\n methodname: 'tool_dataprivacy_tree_extra_branches',\n args: {\n contextid: expandContextId,\n element: expandElement,\n },\n done: function(data) {\n if (data.branches.length == 0) {\n this.noElements(parentNode, expandElement);\n return;\n }\n Templates.render('tool_dataprivacy/context_tree_branches', data)\n .then(function(html) {\n parentNode.after(html);\n this.removeListeners();\n this.registerEventListeners();\n this.expand(parentNode);\n parentNode.data('loaded', 1);\n return;\n }.bind(this))\n .fail(Notification.exception);\n }.bind(this),\n fail: Notification.exception\n }]);\n };\n\n DataRegistry.prototype.noElements = function(node, expandElement) {\n node.data('expandcontextid', '');\n node.data('expandelement', '');\n this.strings.then(function(strings) {\n\n // 2 = blocks, 3 = activities, 4 = courses (although courses is not likely really).\n var key = 2;\n if (expandElement == 'module') {\n key = 3;\n } else if (expandElement == 'course') {\n key = 4;\n }\n node.text(strings[key]);\n return;\n }).fail(Notification.exception);\n };\n\n DataRegistry.prototype.collapse = function(node) {\n node.data('expanded', 0);\n node.siblings('nav').addClass('hidden');\n node.find('> i').removeClass('fa-minus');\n node.find('> i').addClass('fa-plus');\n };\n\n DataRegistry.prototype.expand = function(node) {\n node.data('expanded', 1);\n node.siblings('nav').removeClass('hidden');\n node.find('> i').removeClass('fa-plus');\n // Also remove the spinning one if data was just loaded.\n node.find('> i').removeClass('fa-circle-o-notch fa-spin');\n node.find('> i').addClass('fa-minus');\n };\n return /** @alias module:tool_dataprivacy/data_registry */ {\n\n /**\n * Initialise the page.\n *\n * @param {Number} systemContextId\n * @param {Number} initContextLevel\n * @param {Number} initContextId\n * @return {DataRegistry}\n */\n init: function(systemContextId, initContextLevel, initContextId) {\n return new DataRegistry(systemContextId, initContextLevel, initContextId);\n }\n };\n }\n);\n\n"],"file":"data_registry.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/data_registry.js"],"names":["define","$","Str","Ajax","Notification","Templates","ModalFactory","ModalEvents","Fragment","AddPurpose","AddCategory","SELECTORS","TREE_NODES","FORM_CONTAINER","DataRegistry","systemContextId","initContextLevel","initContextId","currentContextLevel","currentContextId","init","prototype","addpurpose","addcategory","getInstance","strings","get_strings","key","component","registerEventListeners","loadForm","submitContextFormAjax","bind","submitContextLevelFormAjax","on","ev","preventDefault","trigger","currentTarget","removeClass","addClass","contextLevel","data","contextId","window","history","pushState","removeListeners","expandContextId","expandElement","expanded","expand","find","loadExtra","collapse","off","fragmentName","fragmentArgs","formSubmitCallback","clearForm","fragment","loadFragment","done","html","js","runTemplateJS","fail","exception","Y","use","M","core_formchangechecker","reset_form_dirty_state","submitForm","e","submit","submitFormAjax","saveMethodName","formData","serialize","then","call","methodname","args","jsonformdata","JSON","stringify","alert","catch","parentNode","contextid","element","branches","length","noElements","render","after","node","text","siblings"],"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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/data_registry\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/ajax', 'core/notification', 'core/templates', 'core/modal_factory',\n 'core/modal_events', 'core/fragment', 'tool_dataprivacy/add_purpose', 'tool_dataprivacy/add_category'],\n function($, Str, Ajax, Notification, Templates, ModalFactory, ModalEvents, Fragment, AddPurpose, AddCategory) {\n\n var SELECTORS = {\n TREE_NODES: '[data-context-tree-node=1]',\n FORM_CONTAINER: '#context-form-container',\n };\n\n var DataRegistry = function(systemContextId, initContextLevel, initContextId) {\n this.systemContextId = systemContextId;\n this.currentContextLevel = initContextLevel;\n this.currentContextId = initContextId;\n this.init();\n };\n\n /**\n * @var {int} systemContextId\n * @private\n */\n DataRegistry.prototype.systemContextId = 0;\n\n /**\n * @var {int} currentContextLevel\n * @private\n */\n DataRegistry.prototype.currentContextLevel = 0;\n\n /**\n * @var {int} currentContextId\n * @private\n */\n DataRegistry.prototype.currentContextId = 0;\n\n /**\n * @var {AddPurpose} addpurpose\n * @private\n */\n DataRegistry.prototype.addpurpose = null;\n\n /**\n * @var {AddCategory} addcategory\n * @private\n */\n DataRegistry.prototype.addcategory = null;\n\n DataRegistry.prototype.init = function() {\n // Add purpose and category modals always at system context.\n this.addpurpose = AddPurpose.getInstance(this.systemContextId);\n this.addcategory = AddCategory.getInstance(this.systemContextId);\n\n var stringKeys = [\n {\n key: 'changessaved',\n component: 'moodle'\n }, {\n key: 'contextpurposecategorysaved',\n component: 'tool_dataprivacy'\n }, {\n key: 'noblockstoload',\n component: 'tool_dataprivacy'\n }, {\n key: 'noactivitiestoload',\n component: 'tool_dataprivacy'\n }, {\n key: 'nocoursestoload',\n component: 'tool_dataprivacy'\n }\n ];\n this.strings = Str.get_strings(stringKeys);\n\n this.registerEventListeners();\n\n // Load the default context level form.\n if (this.currentContextId) {\n this.loadForm('context_form', [this.currentContextId], this.submitContextFormAjax.bind(this));\n } else {\n this.loadForm('contextlevel_form', [this.currentContextLevel], this.submitContextLevelFormAjax.bind(this));\n }\n };\n\n DataRegistry.prototype.registerEventListeners = function() {\n $(SELECTORS.TREE_NODES).on('click', function(ev) {\n ev.preventDefault();\n\n var trigger = $(ev.currentTarget);\n\n // Active node.\n $(SELECTORS.TREE_NODES).removeClass('active');\n trigger.addClass('active');\n\n var contextLevel = trigger.data('contextlevel');\n var contextId = trigger.data('contextid');\n if (contextLevel) {\n // Context level level.\n\n window.history.pushState({}, null, '?contextlevel=' + contextLevel);\n\n // Remove previous add purpose and category listeners to avoid memory leaks.\n this.addpurpose.removeListeners();\n this.addcategory.removeListeners();\n\n // Load the context level form.\n this.currentContextLevel = contextLevel;\n this.loadForm('contextlevel_form', [this.currentContextLevel], this.submitContextLevelFormAjax.bind(this));\n } else if (contextId) {\n // Context instance level.\n\n window.history.pushState({}, null, '?contextid=' + contextId);\n\n // Remove previous add purpose and category listeners to avoid memory leaks.\n this.addpurpose.removeListeners();\n this.addcategory.removeListeners();\n\n // Load the context level form.\n this.currentContextId = contextId;\n this.loadForm('context_form', [this.currentContextId], this.submitContextFormAjax.bind(this));\n } else {\n // Expandable nodes.\n\n var expandContextId = trigger.data('expandcontextid');\n var expandElement = trigger.data('expandelement');\n var expanded = trigger.data('expanded');\n\n // Extra checking that there is an expandElement because we remove it after loading 0 branches.\n if (expandElement) {\n\n if (!expanded) {\n if (trigger.data('loaded') || !expandContextId || !expandElement) {\n this.expand(trigger);\n } else {\n\n trigger.find('> i').removeClass('fa-plus');\n trigger.find('> i').addClass('fa-circle-o-notch fa-spin');\n this.loadExtra(trigger, expandContextId, expandElement);\n }\n } else {\n this.collapse(trigger);\n }\n }\n }\n\n }.bind(this));\n };\n\n DataRegistry.prototype.removeListeners = function() {\n $(SELECTORS.TREE_NODES).off('click');\n };\n\n DataRegistry.prototype.loadForm = function(fragmentName, fragmentArgs, formSubmitCallback) {\n\n this.clearForm();\n\n var fragment = Fragment.loadFragment('tool_dataprivacy', fragmentName, this.systemContextId, fragmentArgs);\n fragment.done(function(html, js) {\n\n $(SELECTORS.FORM_CONTAINER).html(html);\n Templates.runTemplateJS(js);\n\n this.addpurpose.registerEventListeners();\n this.addcategory.registerEventListeners();\n\n // We also catch the form submit event and use it to submit the form with ajax.\n $(SELECTORS.FORM_CONTAINER).on('submit', 'form', formSubmitCallback);\n\n }.bind(this)).fail(Notification.exception);\n };\n\n DataRegistry.prototype.clearForm = function() {\n // For the previously loaded form.\n Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\n\n // Remove previous listeners.\n $(SELECTORS.FORM_CONTAINER).off('submit', 'form');\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 DataRegistry.prototype.submitForm = function(e) {\n e.preventDefault();\n $(SELECTORS.FORM_CONTAINER).find('form').submit();\n };\n\n DataRegistry.prototype.submitContextLevelFormAjax = function(e) {\n this.submitFormAjax(e, 'tool_dataprivacy_set_contextlevel_form');\n };\n\n DataRegistry.prototype.submitContextFormAjax = function(e) {\n this.submitFormAjax(e, 'tool_dataprivacy_set_context_form');\n };\n\n DataRegistry.prototype.submitFormAjax = function(e, saveMethodName) {\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 = $(SELECTORS.FORM_CONTAINER).find('form').serialize();\n return this.strings.then(function(strings) {\n Ajax.call([{\n methodname: saveMethodName,\n args: {jsonformdata: JSON.stringify(formData)},\n done: function() {\n Notification.alert(strings[0], strings[1]);\n },\n fail: Notification.exception\n }]);\n return;\n }).catch(Notification.exception);\n\n };\n\n DataRegistry.prototype.loadExtra = function(parentNode, expandContextId, expandElement) {\n\n Ajax.call([{\n methodname: 'tool_dataprivacy_tree_extra_branches',\n args: {\n contextid: expandContextId,\n element: expandElement,\n },\n done: function(data) {\n if (data.branches.length == 0) {\n this.noElements(parentNode, expandElement);\n return;\n }\n Templates.render('tool_dataprivacy/context_tree_branches', data)\n .then(function(html) {\n parentNode.after(html);\n this.removeListeners();\n this.registerEventListeners();\n this.expand(parentNode);\n parentNode.data('loaded', 1);\n return;\n }.bind(this))\n .fail(Notification.exception);\n }.bind(this),\n fail: Notification.exception\n }]);\n };\n\n DataRegistry.prototype.noElements = function(node, expandElement) {\n node.data('expandcontextid', '');\n node.data('expandelement', '');\n this.strings.then(function(strings) {\n\n // 2 = blocks, 3 = activities, 4 = courses (although courses is not likely really).\n var key = 2;\n if (expandElement == 'module') {\n key = 3;\n } else if (expandElement == 'course') {\n key = 4;\n }\n node.text(strings[key]);\n return;\n }).fail(Notification.exception);\n };\n\n DataRegistry.prototype.collapse = function(node) {\n node.data('expanded', 0);\n node.siblings('nav').addClass('hidden');\n node.find('> i').removeClass('fa-minus');\n node.find('> i').addClass('fa-plus');\n };\n\n DataRegistry.prototype.expand = function(node) {\n node.data('expanded', 1);\n node.siblings('nav').removeClass('hidden');\n node.find('> i').removeClass('fa-plus');\n // Also remove the spinning one if data was just loaded.\n node.find('> i').removeClass('fa-circle-o-notch fa-spin');\n node.find('> i').addClass('fa-minus');\n };\n return /** @alias module:tool_dataprivacy/data_registry */ {\n\n /**\n * Initialise the page.\n *\n * @param {Number} systemContextId\n * @param {Number} initContextLevel\n * @param {Number} initContextId\n * @return {DataRegistry}\n */\n init: function(systemContextId, initContextLevel, initContextId) {\n return new DataRegistry(systemContextId, initContextLevel, initContextId);\n }\n };\n }\n);\n\n"],"file":"data_registry.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/data_request_modal.min.js.map b/admin/tool/dataprivacy/amd/build/data_request_modal.min.js.map index ee4933aa76a..b8e2c8bb9d9 100644 --- a/admin/tool/dataprivacy/amd/build/data_request_modal.min.js.map +++ b/admin/tool/dataprivacy/amd/build/data_request_modal.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/data_request_modal.js"],"names":["define","$","Notification","CustomEvents","Modal","ModalRegistry","DataPrivacyEvents","registered","SELECTORS","APPROVE_BUTTON","DENY_BUTTON","COMPLETE_BUTTON","ModalDataRequest","root","call","TYPE","prototype","Object","create","constructor","registerEventListeners","getModal","on","events","activate","e","data","approveEvent","Event","approve","getRoot","trigger","isDefaultPrevented","hide","originalEvent","preventDefault","bind","denyEvent","deny","completeEvent","complete","register"],"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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/data_request_modal\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/notification', 'core/custom_interaction_events', 'core/modal', 'core/modal_registry',\n 'tool_dataprivacy/events'],\n function($, Notification, CustomEvents, Modal, ModalRegistry, DataPrivacyEvents) {\n\n var registered = false;\n var SELECTORS = {\n APPROVE_BUTTON: '[data-action=\"approve\"]',\n DENY_BUTTON: '[data-action=\"deny\"]',\n COMPLETE_BUTTON: '[data-action=\"complete\"]'\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalDataRequest = function(root) {\n Modal.call(this, root);\n };\n\n ModalDataRequest.TYPE = 'tool_dataprivacy-data_request';\n ModalDataRequest.prototype = Object.create(Modal.prototype);\n ModalDataRequest.prototype.constructor = ModalDataRequest;\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalDataRequest.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.APPROVE_BUTTON, function(e, data) {\n var approveEvent = $.Event(DataPrivacyEvents.approve);\n this.getRoot().trigger(approveEvent, this);\n\n if (!approveEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.DENY_BUTTON, function(e, data) {\n var denyEvent = $.Event(DataPrivacyEvents.deny);\n this.getRoot().trigger(denyEvent, this);\n\n if (!denyEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.COMPLETE_BUTTON, function(e, data) {\n var completeEvent = $.Event(DataPrivacyEvents.complete);\n this.getRoot().trigger(completeEvent, this);\n\n if (!completeEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalDataRequest.TYPE, ModalDataRequest, 'tool_dataprivacy/data_request_modal');\n registered = true;\n }\n\n return ModalDataRequest;\n });"],"file":"data_request_modal.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/data_request_modal.js"],"names":["define","$","Notification","CustomEvents","Modal","ModalRegistry","DataPrivacyEvents","registered","SELECTORS","APPROVE_BUTTON","DENY_BUTTON","COMPLETE_BUTTON","ModalDataRequest","root","call","TYPE","prototype","Object","create","constructor","registerEventListeners","getModal","on","events","activate","e","data","approveEvent","Event","approve","getRoot","trigger","isDefaultPrevented","hide","originalEvent","preventDefault","bind","denyEvent","deny","completeEvent","complete","register"],"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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/data_request_modal\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/notification', 'core/custom_interaction_events', 'core/modal', 'core/modal_registry',\n 'tool_dataprivacy/events'],\n function($, Notification, CustomEvents, Modal, ModalRegistry, DataPrivacyEvents) {\n\n var registered = false;\n var SELECTORS = {\n APPROVE_BUTTON: '[data-action=\"approve\"]',\n DENY_BUTTON: '[data-action=\"deny\"]',\n COMPLETE_BUTTON: '[data-action=\"complete\"]'\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalDataRequest = function(root) {\n Modal.call(this, root);\n };\n\n ModalDataRequest.TYPE = 'tool_dataprivacy-data_request';\n ModalDataRequest.prototype = Object.create(Modal.prototype);\n ModalDataRequest.prototype.constructor = ModalDataRequest;\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalDataRequest.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.APPROVE_BUTTON, function(e, data) {\n var approveEvent = $.Event(DataPrivacyEvents.approve);\n this.getRoot().trigger(approveEvent, this);\n\n if (!approveEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.DENY_BUTTON, function(e, data) {\n var denyEvent = $.Event(DataPrivacyEvents.deny);\n this.getRoot().trigger(denyEvent, this);\n\n if (!denyEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.COMPLETE_BUTTON, function(e, data) {\n var completeEvent = $.Event(DataPrivacyEvents.complete);\n this.getRoot().trigger(completeEvent, this);\n\n if (!completeEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalDataRequest.TYPE, ModalDataRequest, 'tool_dataprivacy/data_request_modal');\n registered = true;\n }\n\n return ModalDataRequest;\n });"],"file":"data_request_modal.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/defaultsactions.min.js.map b/admin/tool/dataprivacy/amd/build/defaultsactions.min.js.map index 73b2824ba09..0b988052be1 100644 --- a/admin/tool/dataprivacy/amd/build/defaultsactions.min.js.map +++ b/admin/tool/dataprivacy/amd/build/defaultsactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/defaultsactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","ACTIONS","EDIT_LEVEL_DEFAULTS","NEW_ACTIVITY_DEFAULTS","EDIT_ACTIVITY_DEFAULTS","DELETE_ACTIVITY_DEFAULTS","INHERIT","DefaultsActions","registerEvents","prototype","click","e","preventDefault","button","contextLevel","data","category","purpose","promises","call","methodname","args","titlePromise","get_string","text","when","then","categoryResponse","purposeResponse","title","categories","options","purposes","showDefaultsFormModal","catch","exception","activityResponse","activities","activity","activityDisplayName","create","body","render","type","types","SAVE_CANCEL","large","modal","setSaveButtonText","getRoot","on","save","setContextDefaults","hidden","destroy","show","categoryOptions","purposeOptions","activityOptions","forEach","currentValue","id","selected","templateContext","length","newactivitydefaults","name","modemodule","activityoptions","activityVal","val","override","overrideVal","is","done","result","window","location","reload"],"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 .\n\n/**\n * AMD module for data registry defaults actions.\n *\n * @module tool_dataprivacy/defaultsactions\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/templates'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates) {\n\n /**\n * List of action selectors.\n *\n * @type {{EDIT_LEVEL_DEFAULTS: string}}\n * @type {{NEW_ACTIVITY_DEFAULTS: string}}\n * @type {{EDIT_ACTIVITY_DEFAULTS: string}}\n * @type {{DELETE_ACTIVITY_DEFAULTS: string}}\n */\n var ACTIONS = {\n EDIT_LEVEL_DEFAULTS: '[data-action=\"edit-level-defaults\"]',\n NEW_ACTIVITY_DEFAULTS: '[data-action=\"new-activity-defaults\"]',\n EDIT_ACTIVITY_DEFAULTS: '[data-action=\"edit-activity-defaults\"]',\n DELETE_ACTIVITY_DEFAULTS: '[data-action=\"delete-activity-defaults\"]'\n };\n\n /** @type {{INHERIT: Number}} **/\n var INHERIT = -1;\n\n /**\n * DefaultsActions class.\n */\n var DefaultsActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n DefaultsActions.prototype.registerEvents = function() {\n $(ACTIONS.EDIT_LEVEL_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n var category = button.data('category');\n var purpose = button.data('purpose');\n\n // Get options.\n var requests = [\n {methodname: 'tool_dataprivacy_get_category_options', args: {}},\n {methodname: 'tool_dataprivacy_get_purpose_options', args: {}}\n ];\n\n var promises = Ajax.call(requests);\n var titlePromise = Str.get_string('editdefaults', 'tool_dataprivacy', $('#defaults-header').text());\n $.when(promises[0], promises[1], titlePromise).then(function(categoryResponse, purposeResponse, title) {\n var categories = categoryResponse.options;\n var purposes = purposeResponse.options;\n showDefaultsFormModal(title, contextLevel, category, purpose, null, categories, purposes, null);\n\n return true;\n }).catch(Notification.exception);\n });\n\n $(ACTIONS.NEW_ACTIVITY_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n\n // Get options.\n var requests = [\n {methodname: 'tool_dataprivacy_get_category_options', args: {}},\n {methodname: 'tool_dataprivacy_get_purpose_options', args: {}},\n {methodname: 'tool_dataprivacy_get_activity_options', args: {'nodefaults': true}}\n ];\n\n var promises = Ajax.call(requests);\n var titlePromise = Str.get_string('addnewdefaults', 'tool_dataprivacy');\n\n $.when(promises[0], promises[1], promises[2], titlePromise).then(\n function(categoryResponse, purposeResponse, activityResponse, title) {\n var categories = categoryResponse.options;\n var purposes = purposeResponse.options;\n var activities = activityResponse.options;\n\n showDefaultsFormModal(title, contextLevel, null, null, null, categories, purposes, activities);\n\n return true;\n\n }).catch(Notification.exception);\n }\n );\n\n $(ACTIONS.EDIT_ACTIVITY_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n var category = button.data('category');\n var purpose = button.data('purpose');\n var activity = button.data('activityname');\n\n // Get options.\n var requests = [\n {methodname: 'tool_dataprivacy_get_category_options', args: {}},\n {methodname: 'tool_dataprivacy_get_purpose_options', args: {}},\n {methodname: 'tool_dataprivacy_get_activity_options', args: {}}\n ];\n\n var promises = Ajax.call(requests);\n var titlePromise = Str.get_string('editmoduledefaults', 'tool_dataprivacy');\n\n $.when(promises[0], promises[1], promises[2], titlePromise).then(\n function(categoryResponse, purposeResponse, activityResponse, title) {\n var categories = categoryResponse.options;\n var purposes = purposeResponse.options;\n var activities = activityResponse.options;\n\n showDefaultsFormModal(title, contextLevel, category, purpose, activity, categories, purposes, activities);\n\n return true;\n\n }).catch(Notification.exception);\n }\n );\n\n $(ACTIONS.DELETE_ACTIVITY_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n var activity = button.data('activityname');\n var activityDisplayName = button.data('activitydisplayname');\n // Set category and purpose to inherit (-1).\n var category = INHERIT;\n var purpose = INHERIT;\n\n ModalFactory.create({\n title: Str.get_string('deletedefaults', 'tool_dataprivacy', activityDisplayName),\n body: Templates.render('tool_dataprivacy/delete_activity_defaults', {\"activityname\": activityDisplayName}),\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n }).then(function(modal) {\n modal.setSaveButtonText(Str.get_string('delete'));\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n setContextDefaults(contextLevel, category, purpose, activity, false);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return true;\n }).catch(Notification.exception);\n });\n };\n\n /**\n * Prepares and renders the modal for setting the defaults for the given context level/plugin.\n *\n * @param {String} title The modal's title.\n * @param {Number} contextLevel The context level to set defaults for.\n * @param {Number} category The current category ID.\n * @param {Number} purpose The current purpose ID.\n * @param {String} activity The plugin name of the activity. Optional.\n * @param {Array} categoryOptions The list of category options.\n * @param {Array} purposeOptions The list of purpose options.\n * @param {Array} activityOptions The list of activity options. Optional.\n */\n function showDefaultsFormModal(title, contextLevel, category, purpose, activity,\n categoryOptions, purposeOptions, activityOptions) {\n\n if (category !== null) {\n categoryOptions.forEach(function(currentValue) {\n if (currentValue.id === category) {\n currentValue.selected = true;\n }\n });\n }\n\n if (purpose !== null) {\n purposeOptions.forEach(function(currentValue) {\n if (currentValue.id === purpose) {\n currentValue.selected = true;\n }\n });\n }\n\n var templateContext = {\n \"contextlevel\": contextLevel,\n \"categoryoptions\": categoryOptions,\n \"purposeoptions\": purposeOptions\n };\n\n // Check the activityOptions parameter that was passed.\n if (activityOptions !== null && activityOptions.length) {\n // Check the activity parameter that was passed.\n if (activity === null) {\n // We're setting a new defaults for a module.\n templateContext.newactivitydefaults = true;\n\n } else {\n // Edit mode. Set selection.\n activityOptions.forEach(function(currentValue) {\n if (activity === currentValue.name) {\n currentValue.selected = true;\n }\n });\n }\n\n templateContext.modemodule = true;\n templateContext.activityoptions = activityOptions;\n }\n\n ModalFactory.create({\n title: title,\n body: Templates.render('tool_dataprivacy/category_purpose_form', templateContext),\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n }).then(function(modal) {\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n var activity = $('#activity');\n var activityVal = typeof activity !== 'undefined' ? activity.val() : null;\n var override = $('#override');\n var overrideVal = typeof override !== 'undefined' ? override.is(':checked') : false;\n\n setContextDefaults($('#contextlevel').val(), $('#category').val(), $('#purpose').val(), activityVal, overrideVal);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return modal;\n }).catch(Notification.exception);\n }\n\n /**\n * Calls a the tool_dataprivacy_set_context_defaults WS function.\n *\n * @param {Number} contextLevel The context level.\n * @param {Number} category The category ID.\n * @param {Number} purpose The purpose ID.\n * @param {String} activity The plugin name of the activity module.\n * @param {Boolean} override Whether to override custom instances.\n */\n function setContextDefaults(contextLevel, category, purpose, activity, override) {\n var request = {\n methodname: 'tool_dataprivacy_set_context_defaults',\n args: {\n 'contextlevel': contextLevel,\n 'category': category,\n 'purpose': purpose,\n 'override': override,\n 'activity': activity\n }\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n window.location.reload();\n }\n });\n }\n\n return /** @alias module:tool_dataprivacy/defaultsactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the module.\n *\n * @method init\n * @return {DefaultsActions}\n */\n 'init': function() {\n return new DefaultsActions();\n }\n };\n});\n"],"file":"defaultsactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/defaultsactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","ACTIONS","EDIT_LEVEL_DEFAULTS","NEW_ACTIVITY_DEFAULTS","EDIT_ACTIVITY_DEFAULTS","DELETE_ACTIVITY_DEFAULTS","INHERIT","DefaultsActions","registerEvents","prototype","click","e","preventDefault","button","contextLevel","data","category","purpose","promises","call","methodname","args","titlePromise","get_string","text","when","then","categoryResponse","purposeResponse","title","categories","options","purposes","showDefaultsFormModal","catch","exception","activityResponse","activities","activity","activityDisplayName","create","body","render","type","types","SAVE_CANCEL","large","modal","setSaveButtonText","getRoot","on","save","setContextDefaults","hidden","destroy","show","categoryOptions","purposeOptions","activityOptions","forEach","currentValue","id","selected","templateContext","length","newactivitydefaults","name","modemodule","activityoptions","activityVal","val","override","overrideVal","is","done","result","window","location","reload"],"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 .\n\n/**\n * AMD module for data registry defaults actions.\n *\n * @module tool_dataprivacy/defaultsactions\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/templates'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates) {\n\n /**\n * List of action selectors.\n *\n * @type {{EDIT_LEVEL_DEFAULTS: string}}\n * @type {{NEW_ACTIVITY_DEFAULTS: string}}\n * @type {{EDIT_ACTIVITY_DEFAULTS: string}}\n * @type {{DELETE_ACTIVITY_DEFAULTS: string}}\n */\n var ACTIONS = {\n EDIT_LEVEL_DEFAULTS: '[data-action=\"edit-level-defaults\"]',\n NEW_ACTIVITY_DEFAULTS: '[data-action=\"new-activity-defaults\"]',\n EDIT_ACTIVITY_DEFAULTS: '[data-action=\"edit-activity-defaults\"]',\n DELETE_ACTIVITY_DEFAULTS: '[data-action=\"delete-activity-defaults\"]'\n };\n\n /** @type {{INHERIT: Number}} **/\n var INHERIT = -1;\n\n /**\n * DefaultsActions class.\n */\n var DefaultsActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n DefaultsActions.prototype.registerEvents = function() {\n $(ACTIONS.EDIT_LEVEL_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n var category = button.data('category');\n var purpose = button.data('purpose');\n\n // Get options.\n var requests = [\n {methodname: 'tool_dataprivacy_get_category_options', args: {}},\n {methodname: 'tool_dataprivacy_get_purpose_options', args: {}}\n ];\n\n var promises = Ajax.call(requests);\n var titlePromise = Str.get_string('editdefaults', 'tool_dataprivacy', $('#defaults-header').text());\n $.when(promises[0], promises[1], titlePromise).then(function(categoryResponse, purposeResponse, title) {\n var categories = categoryResponse.options;\n var purposes = purposeResponse.options;\n showDefaultsFormModal(title, contextLevel, category, purpose, null, categories, purposes, null);\n\n return true;\n }).catch(Notification.exception);\n });\n\n $(ACTIONS.NEW_ACTIVITY_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n\n // Get options.\n var requests = [\n {methodname: 'tool_dataprivacy_get_category_options', args: {}},\n {methodname: 'tool_dataprivacy_get_purpose_options', args: {}},\n {methodname: 'tool_dataprivacy_get_activity_options', args: {'nodefaults': true}}\n ];\n\n var promises = Ajax.call(requests);\n var titlePromise = Str.get_string('addnewdefaults', 'tool_dataprivacy');\n\n $.when(promises[0], promises[1], promises[2], titlePromise).then(\n function(categoryResponse, purposeResponse, activityResponse, title) {\n var categories = categoryResponse.options;\n var purposes = purposeResponse.options;\n var activities = activityResponse.options;\n\n showDefaultsFormModal(title, contextLevel, null, null, null, categories, purposes, activities);\n\n return true;\n\n }).catch(Notification.exception);\n }\n );\n\n $(ACTIONS.EDIT_ACTIVITY_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n var category = button.data('category');\n var purpose = button.data('purpose');\n var activity = button.data('activityname');\n\n // Get options.\n var requests = [\n {methodname: 'tool_dataprivacy_get_category_options', args: {}},\n {methodname: 'tool_dataprivacy_get_purpose_options', args: {}},\n {methodname: 'tool_dataprivacy_get_activity_options', args: {}}\n ];\n\n var promises = Ajax.call(requests);\n var titlePromise = Str.get_string('editmoduledefaults', 'tool_dataprivacy');\n\n $.when(promises[0], promises[1], promises[2], titlePromise).then(\n function(categoryResponse, purposeResponse, activityResponse, title) {\n var categories = categoryResponse.options;\n var purposes = purposeResponse.options;\n var activities = activityResponse.options;\n\n showDefaultsFormModal(title, contextLevel, category, purpose, activity, categories, purposes, activities);\n\n return true;\n\n }).catch(Notification.exception);\n }\n );\n\n $(ACTIONS.DELETE_ACTIVITY_DEFAULTS).click(function(e) {\n e.preventDefault();\n\n var button = $(this);\n var contextLevel = button.data('contextlevel');\n var activity = button.data('activityname');\n var activityDisplayName = button.data('activitydisplayname');\n // Set category and purpose to inherit (-1).\n var category = INHERIT;\n var purpose = INHERIT;\n\n ModalFactory.create({\n title: Str.get_string('deletedefaults', 'tool_dataprivacy', activityDisplayName),\n body: Templates.render('tool_dataprivacy/delete_activity_defaults', {\"activityname\": activityDisplayName}),\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n }).then(function(modal) {\n modal.setSaveButtonText(Str.get_string('delete'));\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n setContextDefaults(contextLevel, category, purpose, activity, false);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return true;\n }).catch(Notification.exception);\n });\n };\n\n /**\n * Prepares and renders the modal for setting the defaults for the given context level/plugin.\n *\n * @param {String} title The modal's title.\n * @param {Number} contextLevel The context level to set defaults for.\n * @param {Number} category The current category ID.\n * @param {Number} purpose The current purpose ID.\n * @param {String} activity The plugin name of the activity. Optional.\n * @param {Array} categoryOptions The list of category options.\n * @param {Array} purposeOptions The list of purpose options.\n * @param {Array} activityOptions The list of activity options. Optional.\n */\n function showDefaultsFormModal(title, contextLevel, category, purpose, activity,\n categoryOptions, purposeOptions, activityOptions) {\n\n if (category !== null) {\n categoryOptions.forEach(function(currentValue) {\n if (currentValue.id === category) {\n currentValue.selected = true;\n }\n });\n }\n\n if (purpose !== null) {\n purposeOptions.forEach(function(currentValue) {\n if (currentValue.id === purpose) {\n currentValue.selected = true;\n }\n });\n }\n\n var templateContext = {\n \"contextlevel\": contextLevel,\n \"categoryoptions\": categoryOptions,\n \"purposeoptions\": purposeOptions\n };\n\n // Check the activityOptions parameter that was passed.\n if (activityOptions !== null && activityOptions.length) {\n // Check the activity parameter that was passed.\n if (activity === null) {\n // We're setting a new defaults for a module.\n templateContext.newactivitydefaults = true;\n\n } else {\n // Edit mode. Set selection.\n activityOptions.forEach(function(currentValue) {\n if (activity === currentValue.name) {\n currentValue.selected = true;\n }\n });\n }\n\n templateContext.modemodule = true;\n templateContext.activityoptions = activityOptions;\n }\n\n ModalFactory.create({\n title: title,\n body: Templates.render('tool_dataprivacy/category_purpose_form', templateContext),\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n }).then(function(modal) {\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n var activity = $('#activity');\n var activityVal = typeof activity !== 'undefined' ? activity.val() : null;\n var override = $('#override');\n var overrideVal = typeof override !== 'undefined' ? override.is(':checked') : false;\n\n setContextDefaults($('#contextlevel').val(), $('#category').val(), $('#purpose').val(), activityVal, overrideVal);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return modal;\n }).catch(Notification.exception);\n }\n\n /**\n * Calls a the tool_dataprivacy_set_context_defaults WS function.\n *\n * @param {Number} contextLevel The context level.\n * @param {Number} category The category ID.\n * @param {Number} purpose The purpose ID.\n * @param {String} activity The plugin name of the activity module.\n * @param {Boolean} override Whether to override custom instances.\n */\n function setContextDefaults(contextLevel, category, purpose, activity, override) {\n var request = {\n methodname: 'tool_dataprivacy_set_context_defaults',\n args: {\n 'contextlevel': contextLevel,\n 'category': category,\n 'purpose': purpose,\n 'override': override,\n 'activity': activity\n }\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n window.location.reload();\n }\n });\n }\n\n return /** @alias module:tool_dataprivacy/defaultsactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the module.\n *\n * @method init\n * @return {DefaultsActions}\n */\n 'init': function() {\n return new DefaultsActions();\n }\n };\n});\n"],"file":"defaultsactions.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/effective_retention_period.min.js.map b/admin/tool/dataprivacy/amd/build/effective_retention_period.min.js.map index 0452cf79826..e8e3d14390e 100644 --- a/admin/tool/dataprivacy/amd/build/effective_retention_period.min.js.map +++ b/admin/tool/dataprivacy/amd/build/effective_retention_period.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/effective_retention_period.js"],"names":["define","$","SELECTORS","PURPOSE_SELECT","RETENTION_FIELD","EffectiveRetentionPeriod","purposeRetentionPeriods","registerEventListeners","removeListeners","off","prototype","on","ev","selected","currentTarget","val","selectedPurpose","text","bind","init"],"mappings":"AAuBAA,OAAM,+CAAC,CAAC,QAAD,CAAD,CACF,SAASC,CAAT,CAAY,IAEJC,CAAAA,CAAS,CAAG,CACZC,cAAc,CAAE,eADJ,CAEZC,eAAe,CAAE,qDAFL,CAFR,CAYJC,CAAwB,CAAG,SAASC,CAAT,CAAkC,CAC7D,KAAKA,uBAAL,CAA+BA,CAA/B,CACA,KAAKC,sBAAL,EACH,CAfO,CAsBJC,CAAe,CAAG,UAAW,CAC7BP,CAAC,CAACC,CAAS,CAACC,cAAX,CAAD,CAA4BM,GAA5B,CAAgC,QAAhC,CACH,CAxBO,CA8BRJ,CAAwB,CAACK,SAAzB,CAAmCJ,uBAAnC,CAA6D,EAA7D,CAOAD,CAAwB,CAACK,SAAzB,CAAmCH,sBAAnC,CAA4D,UAAW,CAEnEN,CAAC,CAACC,CAAS,CAACC,cAAX,CAAD,CAA4BQ,EAA5B,CAA+B,QAA/B,CAAyC,SAASC,CAAT,CAAa,IAC9CC,CAAAA,CAAQ,CAAGZ,CAAC,CAACW,CAAE,CAACE,aAAJ,CAAD,CAAoBC,GAApB,EADmC,CAE9CC,CAAe,CAAG,KAAKV,uBAAL,CAA6BO,CAA7B,CAF4B,CAGlDZ,CAAC,CAACC,CAAS,CAACE,eAAX,CAAD,CAA6Ba,IAA7B,CAAkCD,CAAlC,CACH,CAJwC,CAIvCE,IAJuC,CAIlC,IAJkC,CAAzC,CAKH,CAPD,CASA,MAAwE,CACpEC,IAAI,CAAE,cAASb,CAAT,CAAkC,CAEpCE,CAAe,GACf,MAAO,IAAIH,CAAAA,CAAJ,CAA6BC,CAA7B,CACV,CALmE,CAO3E,CAtDC,CAAN","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 .\n\n/**\n * Module to update the displayed retention period.\n *\n * @module tool_dataprivacy/effective_retention_period\n * @package tool_dataprivacy\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'],\n function($) {\n\n var SELECTORS = {\n PURPOSE_SELECT: '#id_purposeid',\n RETENTION_FIELD: '#fitem_id_retention_current [data-fieldtype=static]',\n };\n\n /**\n * Constructor for the retention period display.\n *\n * @param {Array} purposeRetentionPeriods Associative array of purposeids with effective retention period at this context\n */\n var EffectiveRetentionPeriod = function(purposeRetentionPeriods) {\n this.purposeRetentionPeriods = purposeRetentionPeriods;\n this.registerEventListeners();\n };\n\n /**\n * Removes the current 'change' listeners.\n *\n * Useful when a new form is loaded.\n */\n var removeListeners = function() {\n $(SELECTORS.PURPOSE_SELECT).off('change');\n };\n\n /**\n * @var {Array} purposeRetentionPeriods\n * @private\n */\n EffectiveRetentionPeriod.prototype.purposeRetentionPeriods = [];\n\n /**\n * Add purpose change listeners.\n *\n * @method registerEventListeners\n */\n EffectiveRetentionPeriod.prototype.registerEventListeners = function() {\n\n $(SELECTORS.PURPOSE_SELECT).on('change', function(ev) {\n var selected = $(ev.currentTarget).val();\n var selectedPurpose = this.purposeRetentionPeriods[selected];\n $(SELECTORS.RETENTION_FIELD).text(selectedPurpose);\n }.bind(this));\n };\n\n return /** @alias module:tool_dataprivacy/effective_retention_period */ {\n init: function(purposeRetentionPeriods) {\n // Remove previously attached listeners.\n removeListeners();\n return new EffectiveRetentionPeriod(purposeRetentionPeriods);\n }\n };\n }\n);\n\n"],"file":"effective_retention_period.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/effective_retention_period.js"],"names":["define","$","SELECTORS","PURPOSE_SELECT","RETENTION_FIELD","EffectiveRetentionPeriod","purposeRetentionPeriods","registerEventListeners","removeListeners","off","prototype","on","ev","selected","currentTarget","val","selectedPurpose","text","bind","init"],"mappings":"AAsBAA,OAAM,+CAAC,CAAC,QAAD,CAAD,CACF,SAASC,CAAT,CAAY,IAEJC,CAAAA,CAAS,CAAG,CACZC,cAAc,CAAE,eADJ,CAEZC,eAAe,CAAE,qDAFL,CAFR,CAYJC,CAAwB,CAAG,SAASC,CAAT,CAAkC,CAC7D,KAAKA,uBAAL,CAA+BA,CAA/B,CACA,KAAKC,sBAAL,EACH,CAfO,CAsBJC,CAAe,CAAG,UAAW,CAC7BP,CAAC,CAACC,CAAS,CAACC,cAAX,CAAD,CAA4BM,GAA5B,CAAgC,QAAhC,CACH,CAxBO,CA8BRJ,CAAwB,CAACK,SAAzB,CAAmCJ,uBAAnC,CAA6D,EAA7D,CAOAD,CAAwB,CAACK,SAAzB,CAAmCH,sBAAnC,CAA4D,UAAW,CAEnEN,CAAC,CAACC,CAAS,CAACC,cAAX,CAAD,CAA4BQ,EAA5B,CAA+B,QAA/B,CAAyC,SAASC,CAAT,CAAa,IAC9CC,CAAAA,CAAQ,CAAGZ,CAAC,CAACW,CAAE,CAACE,aAAJ,CAAD,CAAoBC,GAApB,EADmC,CAE9CC,CAAe,CAAG,KAAKV,uBAAL,CAA6BO,CAA7B,CAF4B,CAGlDZ,CAAC,CAACC,CAAS,CAACE,eAAX,CAAD,CAA6Ba,IAA7B,CAAkCD,CAAlC,CACH,CAJwC,CAIvCE,IAJuC,CAIlC,IAJkC,CAAzC,CAKH,CAPD,CASA,MAAwE,CACpEC,IAAI,CAAE,cAASb,CAAT,CAAkC,CAEpCE,CAAe,GACf,MAAO,IAAIH,CAAAA,CAAJ,CAA6BC,CAA7B,CACV,CALmE,CAO3E,CAtDC,CAAN","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 .\n\n/**\n * Module to update the displayed retention period.\n *\n * @module tool_dataprivacy/effective_retention_period\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'],\n function($) {\n\n var SELECTORS = {\n PURPOSE_SELECT: '#id_purposeid',\n RETENTION_FIELD: '#fitem_id_retention_current [data-fieldtype=static]',\n };\n\n /**\n * Constructor for the retention period display.\n *\n * @param {Array} purposeRetentionPeriods Associative array of purposeids with effective retention period at this context\n */\n var EffectiveRetentionPeriod = function(purposeRetentionPeriods) {\n this.purposeRetentionPeriods = purposeRetentionPeriods;\n this.registerEventListeners();\n };\n\n /**\n * Removes the current 'change' listeners.\n *\n * Useful when a new form is loaded.\n */\n var removeListeners = function() {\n $(SELECTORS.PURPOSE_SELECT).off('change');\n };\n\n /**\n * @var {Array} purposeRetentionPeriods\n * @private\n */\n EffectiveRetentionPeriod.prototype.purposeRetentionPeriods = [];\n\n /**\n * Add purpose change listeners.\n *\n * @method registerEventListeners\n */\n EffectiveRetentionPeriod.prototype.registerEventListeners = function() {\n\n $(SELECTORS.PURPOSE_SELECT).on('change', function(ev) {\n var selected = $(ev.currentTarget).val();\n var selectedPurpose = this.purposeRetentionPeriods[selected];\n $(SELECTORS.RETENTION_FIELD).text(selectedPurpose);\n }.bind(this));\n };\n\n return /** @alias module:tool_dataprivacy/effective_retention_period */ {\n init: function(purposeRetentionPeriods) {\n // Remove previously attached listeners.\n removeListeners();\n return new EffectiveRetentionPeriod(purposeRetentionPeriods);\n }\n };\n }\n);\n\n"],"file":"effective_retention_period.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/events.min.js.map b/admin/tool/dataprivacy/amd/build/events.min.js.map index 262b82fc9cc..342a1740821 100644 --- a/admin/tool/dataprivacy/amd/build/events.min.js.map +++ b/admin/tool/dataprivacy/amd/build/events.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/events.js"],"names":["define","approve","bulkApprove","deny","bulkDeny","complete"],"mappings":"AAwBAA,OAAM,2BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,OAAO,CAAE,uCADN,CAEHC,WAAW,CAAE,4CAFV,CAGHC,IAAI,CAAE,oCAHH,CAIHC,QAAQ,CAAE,yCAJP,CAKHC,QAAQ,CAAE,wCALP,CAOV,CARK,CAAN","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 .\n\n/**\n * Contain the events the data privacy tool can fire.\n *\n * @module tool_dataprivacy/events\n * @class events\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n approve: 'tool_dataprivacy-data_request:approve',\n bulkApprove: 'tool_dataprivacy-data_request:bulk_approve',\n deny: 'tool_dataprivacy-data_request:deny',\n bulkDeny: 'tool_dataprivacy-data_request:bulk_deny',\n complete: 'tool_dataprivacy-data_request:complete'\n };\n});\n"],"file":"events.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/events.js"],"names":["define","approve","bulkApprove","deny","bulkDeny","complete"],"mappings":"AAuBAA,OAAM,2BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,OAAO,CAAE,uCADN,CAEHC,WAAW,CAAE,4CAFV,CAGHC,IAAI,CAAE,oCAHH,CAIHC,QAAQ,CAAE,yCAJP,CAKHC,QAAQ,CAAE,wCALP,CAOV,CARK,CAAN","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 .\n\n/**\n * Contain the events the data privacy tool can fire.\n *\n * @module tool_dataprivacy/events\n * @class events\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n approve: 'tool_dataprivacy-data_request:approve',\n bulkApprove: 'tool_dataprivacy-data_request:bulk_approve',\n deny: 'tool_dataprivacy-data_request:deny',\n bulkDeny: 'tool_dataprivacy-data_request:bulk_deny',\n complete: 'tool_dataprivacy-data_request:complete'\n };\n});\n"],"file":"events.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/expand_contract.min.js.map b/admin/tool/dataprivacy/amd/build/expand_contract.min.js.map index 5f7d8ab578a..55f0eeb7b0a 100644 --- a/admin/tool/dataprivacy/amd/build/expand_contract.min.js.map +++ b/admin/tool/dataprivacy/amd/build/expand_contract.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/expand_contract.js"],"names":["define","$","url","str","expandedImage","imageUrl","collapsedImage","CLASSES","EXPAND","COLLAPSE","expandCollapse","targetnode","thisnode","hasClass","removeClass","addClass","attr","find","expandCollapseAll","nextstate","currentstate","ariaexpandedstate","iconclassnow","iconclassnext","imagenow","each","data","get_string","then","langString","html","catch","Notification","exception"],"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 .\n\n/**\n * Potential user selector module.\n *\n * @module tool_dataprivacy/expand_contract\n * @class page-expand-contract\n * @package tool_dataprivacy\n * @copyright 2018 Adrian Greeve\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/url', 'core/str'], function($, url, str) {\n\n var expandedImage = $('\"\"');\n var collapsedImage = $('\"\"');\n\n /*\n * Class names to apply when expanding/collapsing nodes.\n */\n var CLASSES = {\n EXPAND: 'fa-caret-right',\n COLLAPSE: 'fa-caret-down'\n };\n\n return /** @alias module:tool_dataprivacy/expand-collapse */ {\n /**\n * Expand or collapse a selected node.\n *\n * @param {object} targetnode The node that we want to expand / collapse\n * @param {object} thisnode The node that was clicked.\n */\n expandCollapse: function(targetnode, thisnode) {\n if (targetnode.hasClass('hide')) {\n targetnode.removeClass('hide');\n targetnode.addClass('visible');\n targetnode.attr('aria-expanded', true);\n thisnode.find(':header i.fa').removeClass(CLASSES.EXPAND);\n thisnode.find(':header i.fa').addClass(CLASSES.COLLAPSE);\n thisnode.find(':header img.icon').attr('src', expandedImage.attr('src'));\n } else {\n targetnode.removeClass('visible');\n targetnode.addClass('hide');\n targetnode.attr('aria-expanded', false);\n thisnode.find(':header i.fa').removeClass(CLASSES.COLLAPSE);\n thisnode.find(':header i.fa').addClass(CLASSES.EXPAND);\n thisnode.find(':header img.icon').attr('src', collapsedImage.attr('src'));\n }\n },\n\n /**\n * Expand or collapse all nodes on this page.\n *\n * @param {string} nextstate The next state to change to.\n */\n expandCollapseAll: function(nextstate) {\n var currentstate = (nextstate == 'visible') ? 'hide' : 'visible';\n var ariaexpandedstate = (nextstate == 'visible') ? true : false;\n var iconclassnow = (nextstate == 'visible') ? CLASSES.EXPAND : CLASSES.COLLAPSE;\n var iconclassnext = (nextstate == 'visible') ? CLASSES.COLLAPSE : CLASSES.EXPAND;\n var imagenow = (nextstate == 'visible') ? expandedImage.attr('src') : collapsedImage.attr('src');\n $('.' + currentstate).each(function() {\n $(this).removeClass(currentstate);\n $(this).addClass(nextstate);\n $(this).attr('aria-expanded', ariaexpandedstate);\n });\n $('.tool_dataprivacy-expand-all').data('visibilityState', currentstate);\n\n str.get_string(currentstate, 'tool_dataprivacy').then(function(langString) {\n $('.tool_dataprivacy-expand-all').html(langString);\n return;\n }).catch(Notification.exception);\n\n $(':header i.fa').each(function() {\n $(this).removeClass(iconclassnow);\n $(this).addClass(iconclassnext);\n });\n $(':header img.icon').each(function() {\n $(this).attr('src', imagenow);\n });\n }\n };\n});\n"],"file":"expand_contract.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/expand_contract.js"],"names":["define","$","url","str","expandedImage","imageUrl","collapsedImage","CLASSES","EXPAND","COLLAPSE","expandCollapse","targetnode","thisnode","hasClass","removeClass","addClass","attr","find","expandCollapseAll","nextstate","currentstate","ariaexpandedstate","iconclassnow","iconclassnext","imagenow","each","data","get_string","then","langString","html","catch","Notification","exception"],"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 .\n\n/**\n * Potential user selector module.\n *\n * @module tool_dataprivacy/expand_contract\n * @class page-expand-contract\n * @copyright 2018 Adrian Greeve\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/url', 'core/str'], function($, url, str) {\n\n var expandedImage = $('\"\"');\n var collapsedImage = $('\"\"');\n\n /*\n * Class names to apply when expanding/collapsing nodes.\n */\n var CLASSES = {\n EXPAND: 'fa-caret-right',\n COLLAPSE: 'fa-caret-down'\n };\n\n return /** @alias module:tool_dataprivacy/expand-collapse */ {\n /**\n * Expand or collapse a selected node.\n *\n * @param {object} targetnode The node that we want to expand / collapse\n * @param {object} thisnode The node that was clicked.\n */\n expandCollapse: function(targetnode, thisnode) {\n if (targetnode.hasClass('hide')) {\n targetnode.removeClass('hide');\n targetnode.addClass('visible');\n targetnode.attr('aria-expanded', true);\n thisnode.find(':header i.fa').removeClass(CLASSES.EXPAND);\n thisnode.find(':header i.fa').addClass(CLASSES.COLLAPSE);\n thisnode.find(':header img.icon').attr('src', expandedImage.attr('src'));\n } else {\n targetnode.removeClass('visible');\n targetnode.addClass('hide');\n targetnode.attr('aria-expanded', false);\n thisnode.find(':header i.fa').removeClass(CLASSES.COLLAPSE);\n thisnode.find(':header i.fa').addClass(CLASSES.EXPAND);\n thisnode.find(':header img.icon').attr('src', collapsedImage.attr('src'));\n }\n },\n\n /**\n * Expand or collapse all nodes on this page.\n *\n * @param {string} nextstate The next state to change to.\n */\n expandCollapseAll: function(nextstate) {\n var currentstate = (nextstate == 'visible') ? 'hide' : 'visible';\n var ariaexpandedstate = (nextstate == 'visible') ? true : false;\n var iconclassnow = (nextstate == 'visible') ? CLASSES.EXPAND : CLASSES.COLLAPSE;\n var iconclassnext = (nextstate == 'visible') ? CLASSES.COLLAPSE : CLASSES.EXPAND;\n var imagenow = (nextstate == 'visible') ? expandedImage.attr('src') : collapsedImage.attr('src');\n $('.' + currentstate).each(function() {\n $(this).removeClass(currentstate);\n $(this).addClass(nextstate);\n $(this).attr('aria-expanded', ariaexpandedstate);\n });\n $('.tool_dataprivacy-expand-all').data('visibilityState', currentstate);\n\n str.get_string(currentstate, 'tool_dataprivacy').then(function(langString) {\n $('.tool_dataprivacy-expand-all').html(langString);\n return;\n }).catch(Notification.exception);\n\n $(':header i.fa').each(function() {\n $(this).removeClass(iconclassnow);\n $(this).addClass(iconclassnext);\n });\n $(':header img.icon').each(function() {\n $(this).attr('src', imagenow);\n });\n }\n };\n});\n"],"file":"expand_contract.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/form-user-selector.min.js.map b/admin/tool/dataprivacy/amd/build/form-user-selector.min.js.map index 9050ecd1031..84da21e00f3 100644 --- a/admin/tool/dataprivacy/amd/build/form-user-selector.min.js.map +++ b/admin/tool/dataprivacy/amd/build/form-user-selector.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form-user-selector.js"],"names":["define","$","Ajax","Templates","processResults","selector","results","users","each","index","user","push","value","id","label","_label","transport","query","success","failure","promise","call","methodname","args","then","promises","i","render","when","apply","arguments","fail"],"mappings":"AAyBAA,OAAM,uCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,gBAAxB,CAAD,CAA4C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA6B,CAE3E,MAAgE,CAE5DC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAK,CAAG,EAAZ,CACAN,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCH,CAAK,CAACI,IAAN,CAAW,CACPC,KAAK,CAAEF,CAAI,CAACG,EADL,CAEPC,KAAK,CAAEJ,CAAI,CAACK,MAFL,CAAX,CAIH,CALD,EAMA,MAAOR,CAAAA,CACV,CAX2D,CAa5DS,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,CACnD,GAAIC,CAAAA,CAAO,CAEDlB,CAAI,CAACmB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,4BADK,CAEjBC,IAAI,CAAE,CACFN,KAAK,CAAEA,CADL,CAFW,CAAD,CAAV,CAFV,CASAG,CAAO,CAAC,CAAD,CAAP,CAAWI,IAAX,CAAgB,SAASlB,CAAT,CAAkB,CAC9B,GAAImB,CAAAA,CAAQ,CAAG,EAAf,CACIC,CAAC,CAAG,CADR,CAIAzB,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCe,CAAQ,CAACd,IAAT,CAAcR,CAAS,CAACwB,MAAV,CAAiB,gDAAjB,CAAmEjB,CAAnE,CAAd,CACH,CAFD,EAKA,MAAOT,CAAAA,CAAC,CAAC2B,IAAF,CAAOC,KAAP,CAAa5B,CAAC,CAAC2B,IAAf,CAAqBH,CAArB,EAA+BD,IAA/B,CAAoC,UAAW,CAClD,GAAID,CAAAA,CAAI,CAAGO,SAAX,CACA7B,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCA,CAAI,CAACK,MAAL,CAAcQ,CAAI,CAACG,CAAD,CAAlB,CACAA,CAAC,EACJ,CAHD,EAIAR,CAAO,CAACZ,CAAD,CAEV,CARM,CAUV,CApBD,EAoBGyB,IApBH,CAoBQZ,CApBR,CAqBH,CA5C2D,CAgDnE,CAlDK,CAAN","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 .\n\n/**\n * Potential user selector module.\n *\n * @module tool_dataprivacy/form-user-selector\n * @class form-user-selector\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {\n\n return /** @alias module:tool_dataprivacy/form-user-selector */ {\n\n processResults: function(selector, results) {\n var users = [];\n $.each(results, function(index, user) {\n users.push({\n value: user.id,\n label: user._label\n });\n });\n return users;\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n\n promise = Ajax.call([{\n methodname: 'tool_dataprivacy_get_users',\n args: {\n query: query\n }\n }]);\n\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n // Render the label.\n $.each(results, function(index, user) {\n promises.push(Templates.render('tool_dataprivacy/form-user-selector-suggestion', user));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results, function(index, user) {\n user._label = args[i];\n i++;\n });\n success(results);\n return;\n });\n\n }).fail(failure);\n }\n\n };\n\n});\n"],"file":"form-user-selector.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/form-user-selector.js"],"names":["define","$","Ajax","Templates","processResults","selector","results","users","each","index","user","push","value","id","label","_label","transport","query","success","failure","promise","call","methodname","args","then","promises","i","render","when","apply","arguments","fail"],"mappings":"AAwBAA,OAAM,uCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,gBAAxB,CAAD,CAA4C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA6B,CAE3E,MAAgE,CAE5DC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAK,CAAG,EAAZ,CACAN,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCH,CAAK,CAACI,IAAN,CAAW,CACPC,KAAK,CAAEF,CAAI,CAACG,EADL,CAEPC,KAAK,CAAEJ,CAAI,CAACK,MAFL,CAAX,CAIH,CALD,EAMA,MAAOR,CAAAA,CACV,CAX2D,CAa5DS,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,CACnD,GAAIC,CAAAA,CAAO,CAEDlB,CAAI,CAACmB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,4BADK,CAEjBC,IAAI,CAAE,CACFN,KAAK,CAAEA,CADL,CAFW,CAAD,CAAV,CAFV,CASAG,CAAO,CAAC,CAAD,CAAP,CAAWI,IAAX,CAAgB,SAASlB,CAAT,CAAkB,CAC9B,GAAImB,CAAAA,CAAQ,CAAG,EAAf,CACIC,CAAC,CAAG,CADR,CAIAzB,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCe,CAAQ,CAACd,IAAT,CAAcR,CAAS,CAACwB,MAAV,CAAiB,gDAAjB,CAAmEjB,CAAnE,CAAd,CACH,CAFD,EAKA,MAAOT,CAAAA,CAAC,CAAC2B,IAAF,CAAOC,KAAP,CAAa5B,CAAC,CAAC2B,IAAf,CAAqBH,CAArB,EAA+BD,IAA/B,CAAoC,UAAW,CAClD,GAAID,CAAAA,CAAI,CAAGO,SAAX,CACA7B,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCA,CAAI,CAACK,MAAL,CAAcQ,CAAI,CAACG,CAAD,CAAlB,CACAA,CAAC,EACJ,CAHD,EAIAR,CAAO,CAACZ,CAAD,CAEV,CARM,CAUV,CApBD,EAoBGyB,IApBH,CAoBQZ,CApBR,CAqBH,CA5C2D,CAgDnE,CAlDK,CAAN","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 .\n\n/**\n * Potential user selector module.\n *\n * @module tool_dataprivacy/form-user-selector\n * @class form-user-selector\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {\n\n return /** @alias module:tool_dataprivacy/form-user-selector */ {\n\n processResults: function(selector, results) {\n var users = [];\n $.each(results, function(index, user) {\n users.push({\n value: user.id,\n label: user._label\n });\n });\n return users;\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n\n promise = Ajax.call([{\n methodname: 'tool_dataprivacy_get_users',\n args: {\n query: query\n }\n }]);\n\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n // Render the label.\n $.each(results, function(index, user) {\n promises.push(Templates.render('tool_dataprivacy/form-user-selector-suggestion', user));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results, function(index, user) {\n user._label = args[i];\n i++;\n });\n success(results);\n return;\n });\n\n }).fail(failure);\n }\n\n };\n\n});\n"],"file":"form-user-selector.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/myrequestactions.min.js.map b/admin/tool/dataprivacy/amd/build/myrequestactions.min.js.map index c9f78ed452a..2a466d9e1c1 100644 --- a/admin/tool/dataprivacy/amd/build/myrequestactions.min.js.map +++ b/admin/tool/dataprivacy/amd/build/myrequestactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/myrequestactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","Pending","ACTIONS","CANCEL_REQUEST","CONTACT_DPO","MyRequestActions","registerEvents","prototype","click","e","preventDefault","requestId","data","get_strings","key","component","then","langStrings","title","confirmMessage","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","result","window","location","reload","addNotification","message","warnings","fail","exception","hidden","destroy","show","pendingPromise","replyToEmail","sendButtonText","modalTitle","render","large","val","trim","length","addClass","removeAttr","sendMessageToDPO","resolve","catch","requestType","get_string","join"],"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 .\n\n/**\n * AMD module to enable users to manage their own data requests.\n *\n * @module tool_dataprivacy/myrequestactions\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/templates',\n 'core/pending'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates, Pending) {\n\n /**\n * List of action selectors.\n *\n * @type {{CANCEL_REQUEST: string}}\n * @type {{CONTACT_DPO: string}}\n */\n var ACTIONS = {\n CANCEL_REQUEST: '[data-action=\"cancel\"]',\n CONTACT_DPO: '[data-action=\"contactdpo\"]',\n };\n\n /**\n * MyRequestActions class.\n */\n var MyRequestActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n MyRequestActions.prototype.registerEvents = function() {\n $(ACTIONS.CANCEL_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n var stringkeys = [\n {\n key: 'cancelrequest',\n component: 'tool_dataprivacy'\n },\n {\n key: 'cancelrequestconfirmation',\n component: 'tool_dataprivacy'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langStrings) {\n var title = langStrings[0];\n var confirmMessage = langStrings[1];\n return ModalFactory.create({\n title: title,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n }).then(function(modal) {\n modal.setSaveButtonText(title);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n // Cancel the request.\n var params = {\n 'requestid': requestId\n };\n\n var request = {\n methodname: 'tool_dataprivacy_cancel_data_request',\n args: params\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n window.location.reload();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n });\n }).done(function(modal) {\n // Show the modal!\n modal.show();\n\n }).fail(Notification.exception);\n });\n\n $(ACTIONS.CONTACT_DPO).click(function(e) {\n var pendingPromise = new Pending('dataprivacy/crud:initModal:contactdpo');\n e.preventDefault();\n\n var replyToEmail = $(this).data('replytoemail');\n\n var keys = [\n {\n key: 'contactdataprotectionofficer',\n component: 'tool_dataprivacy'\n },\n {\n key: 'send',\n component: 'tool_dataprivacy'\n },\n ];\n\n var sendButtonText = '';\n Str.get_strings(keys).then(function(langStrings) {\n var modalTitle = langStrings[0];\n sendButtonText = langStrings[1];\n var context = {\n 'replytoemail': replyToEmail\n };\n return ModalFactory.create({\n title: modalTitle,\n body: Templates.render('tool_dataprivacy/contact_dpo', context),\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n });\n }).then(function(modal) {\n modal.setSaveButtonText(sendButtonText);\n\n // Show the modal!\n modal.show();\n\n // Handle send event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var message = $('#message').val().trim();\n if (message.length === 0) {\n e.preventDefault();\n // Show validation error when the message is empty.\n $('[data-region=\"messageinput\"]').addClass('has-danger notifyproblem');\n $('#id_error_message').removeAttr('hidden');\n } else {\n // Send the message.\n sendMessageToDPO(message);\n }\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return;\n }).then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n };\n\n /**\n * Send message to the Data Protection Officer.\n *\n * @param {String} message The message to send.\n */\n function sendMessageToDPO(message) {\n var request = {\n methodname: 'tool_dataprivacy_contact_dpo',\n args: {\n message: message\n }\n };\n\n var requestType = 'success';\n Ajax.call([request])[0].then(function(data) {\n if (data.result) {\n return Str.get_string('requestsubmitted', 'tool_dataprivacy');\n }\n requestType = 'error';\n return data.warnings.join('
');\n\n }).done(function(message) {\n Notification.addNotification({\n message: message,\n type: requestType\n });\n\n }).fail(Notification.exception);\n }\n\n return /** @alias module:tool_dataprivacy/myrequestactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the unified user filter.\n *\n * @method init\n * @return {MyRequestActions}\n */\n 'init': function() {\n return new MyRequestActions();\n }\n };\n});\n"],"file":"myrequestactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/myrequestactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","Pending","ACTIONS","CANCEL_REQUEST","CONTACT_DPO","MyRequestActions","registerEvents","prototype","click","e","preventDefault","requestId","data","get_strings","key","component","then","langStrings","title","confirmMessage","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","result","window","location","reload","addNotification","message","warnings","fail","exception","hidden","destroy","show","pendingPromise","replyToEmail","sendButtonText","modalTitle","render","large","val","trim","length","addClass","removeAttr","sendMessageToDPO","resolve","catch","requestType","get_string","join"],"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 .\n\n/**\n * AMD module to enable users to manage their own data requests.\n *\n * @module tool_dataprivacy/myrequestactions\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/templates',\n 'core/pending'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates, Pending) {\n\n /**\n * List of action selectors.\n *\n * @type {{CANCEL_REQUEST: string}}\n * @type {{CONTACT_DPO: string}}\n */\n var ACTIONS = {\n CANCEL_REQUEST: '[data-action=\"cancel\"]',\n CONTACT_DPO: '[data-action=\"contactdpo\"]',\n };\n\n /**\n * MyRequestActions class.\n */\n var MyRequestActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n MyRequestActions.prototype.registerEvents = function() {\n $(ACTIONS.CANCEL_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n var stringkeys = [\n {\n key: 'cancelrequest',\n component: 'tool_dataprivacy'\n },\n {\n key: 'cancelrequestconfirmation',\n component: 'tool_dataprivacy'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langStrings) {\n var title = langStrings[0];\n var confirmMessage = langStrings[1];\n return ModalFactory.create({\n title: title,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n }).then(function(modal) {\n modal.setSaveButtonText(title);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n // Cancel the request.\n var params = {\n 'requestid': requestId\n };\n\n var request = {\n methodname: 'tool_dataprivacy_cancel_data_request',\n args: params\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n window.location.reload();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n });\n }).done(function(modal) {\n // Show the modal!\n modal.show();\n\n }).fail(Notification.exception);\n });\n\n $(ACTIONS.CONTACT_DPO).click(function(e) {\n var pendingPromise = new Pending('dataprivacy/crud:initModal:contactdpo');\n e.preventDefault();\n\n var replyToEmail = $(this).data('replytoemail');\n\n var keys = [\n {\n key: 'contactdataprotectionofficer',\n component: 'tool_dataprivacy'\n },\n {\n key: 'send',\n component: 'tool_dataprivacy'\n },\n ];\n\n var sendButtonText = '';\n Str.get_strings(keys).then(function(langStrings) {\n var modalTitle = langStrings[0];\n sendButtonText = langStrings[1];\n var context = {\n 'replytoemail': replyToEmail\n };\n return ModalFactory.create({\n title: modalTitle,\n body: Templates.render('tool_dataprivacy/contact_dpo', context),\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n });\n }).then(function(modal) {\n modal.setSaveButtonText(sendButtonText);\n\n // Show the modal!\n modal.show();\n\n // Handle send event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var message = $('#message').val().trim();\n if (message.length === 0) {\n e.preventDefault();\n // Show validation error when the message is empty.\n $('[data-region=\"messageinput\"]').addClass('has-danger notifyproblem');\n $('#id_error_message').removeAttr('hidden');\n } else {\n // Send the message.\n sendMessageToDPO(message);\n }\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return;\n }).then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n };\n\n /**\n * Send message to the Data Protection Officer.\n *\n * @param {String} message The message to send.\n */\n function sendMessageToDPO(message) {\n var request = {\n methodname: 'tool_dataprivacy_contact_dpo',\n args: {\n message: message\n }\n };\n\n var requestType = 'success';\n Ajax.call([request])[0].then(function(data) {\n if (data.result) {\n return Str.get_string('requestsubmitted', 'tool_dataprivacy');\n }\n requestType = 'error';\n return data.warnings.join('
');\n\n }).done(function(message) {\n Notification.addNotification({\n message: message,\n type: requestType\n });\n\n }).fail(Notification.exception);\n }\n\n return /** @alias module:tool_dataprivacy/myrequestactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the unified user filter.\n *\n * @method init\n * @return {MyRequestActions}\n */\n 'init': function() {\n return new MyRequestActions();\n }\n };\n});\n"],"file":"myrequestactions.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/purposesactions.min.js.map b/admin/tool/dataprivacy/amd/build/purposesactions.min.js.map index 3762f307df0..6ac9001c7a5 100644 --- a/admin/tool/dataprivacy/amd/build/purposesactions.min.js.map +++ b/admin/tool/dataprivacy/amd/build/purposesactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/purposesactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","ACTIONS","DELETE","PurposesActions","registerEvents","prototype","click","e","preventDefault","id","data","purposename","get_strings","key","component","param","then","langStrings","title","confirmMessage","buttonText","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","result","remove","addNotification","message","warnings","fail","exception","hidden","destroy","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 .\n\n/**\n * AMD module for purposes actions.\n *\n * @module tool_dataprivacy/purposesactions\n * @package tool_dataprivacy\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{DELETE: string}}\n */\n var ACTIONS = {\n DELETE: '[data-action=\"deletepurpose\"]',\n };\n\n /**\n * PurposesActions class.\n */\n var PurposesActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n PurposesActions.prototype.registerEvents = function() {\n $(ACTIONS.DELETE).click(function(e) {\n e.preventDefault();\n\n var id = $(this).data('id');\n var purposename = $(this).data('name');\n var stringkeys = [\n {\n key: 'deletepurpose',\n component: 'tool_dataprivacy'\n },\n {\n key: 'deletepurposetext',\n component: 'tool_dataprivacy',\n param: purposename\n },\n {\n key: 'delete'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langStrings) {\n var title = langStrings[0];\n var confirmMessage = langStrings[1];\n var buttonText = langStrings[2];\n return ModalFactory.create({\n title: title,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n }).then(function(modal) {\n modal.setSaveButtonText(buttonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n\n var request = {\n methodname: 'tool_dataprivacy_delete_purpose',\n args: {'id': id}\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n $('tr[data-purposeid=\"' + id + '\"]').remove();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n });\n }).done(function(modal) {\n modal.show();\n\n }).fail(Notification.exception);\n });\n };\n\n return /** @alias module:tool_dataprivacy/purposesactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the module.\n *\n * @method init\n * @return {PurposesActions}\n */\n 'init': function() {\n return new PurposesActions();\n }\n };\n});\n"],"file":"purposesactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/purposesactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","ACTIONS","DELETE","PurposesActions","registerEvents","prototype","click","e","preventDefault","id","data","purposename","get_strings","key","component","param","then","langStrings","title","confirmMessage","buttonText","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","call","methodname","args","done","result","remove","addNotification","message","warnings","fail","exception","hidden","destroy","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 .\n\n/**\n * AMD module for purposes actions.\n *\n * @module tool_dataprivacy/purposesactions\n * @copyright 2018 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{DELETE: string}}\n */\n var ACTIONS = {\n DELETE: '[data-action=\"deletepurpose\"]',\n };\n\n /**\n * PurposesActions class.\n */\n var PurposesActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n PurposesActions.prototype.registerEvents = function() {\n $(ACTIONS.DELETE).click(function(e) {\n e.preventDefault();\n\n var id = $(this).data('id');\n var purposename = $(this).data('name');\n var stringkeys = [\n {\n key: 'deletepurpose',\n component: 'tool_dataprivacy'\n },\n {\n key: 'deletepurposetext',\n component: 'tool_dataprivacy',\n param: purposename\n },\n {\n key: 'delete'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langStrings) {\n var title = langStrings[0];\n var confirmMessage = langStrings[1];\n var buttonText = langStrings[2];\n return ModalFactory.create({\n title: title,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n }).then(function(modal) {\n modal.setSaveButtonText(buttonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n\n var request = {\n methodname: 'tool_dataprivacy_delete_purpose',\n args: {'id': id}\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n $('tr[data-purposeid=\"' + id + '\"]').remove();\n } else {\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n });\n }).done(function(modal) {\n modal.show();\n\n }).fail(Notification.exception);\n });\n };\n\n return /** @alias module:tool_dataprivacy/purposesactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the module.\n *\n * @method init\n * @return {PurposesActions}\n */\n 'init': function() {\n return new PurposesActions();\n }\n };\n});\n"],"file":"purposesactions.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/request_filter.min.js.map b/admin/tool/dataprivacy/amd/build/request_filter.min.js.map index 0bb55f0f1f0..15634cd24d4 100644 --- a/admin/tool/dataprivacy/amd/build/request_filter.min.js.map +++ b/admin/tool/dataprivacy/amd/build/request_filter.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/request_filter.js"],"names":["define","$","Autocomplete","Str","Notification","SELECTORS","REQUEST_FILTERS","init","get_strings","key","component","then","langstrings","placeholder","noSelectionString","enhance","fail","exception","last","val","on","current","join","length","form","submit"],"mappings":"AAuBAA,OAAM,mCAAC,CAAC,QAAD,CAAW,wBAAX,CAAqC,UAArC,CAAiD,mBAAjD,CAAD,CAAwE,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAA+BC,CAA/B,CAA6C,IAQnHC,CAAAA,CAAS,CAAG,CACZC,eAAe,CAAE,kBADL,CARuG,CAkBnHC,CAAI,CAAG,QAAPA,CAAAA,IAAO,EAAW,CAYlBJ,CAAG,CAACK,WAAJ,CAXiB,CACb,CACIC,GAAG,CAAE,QADT,CAEIC,SAAS,CAAE,QAFf,CADa,CAKb,CACID,GAAG,CAAE,kBADT,CAEIC,SAAS,CAAE,QAFf,CALa,CAWjB,EAA4BC,IAA5B,CAAiC,SAASC,CAAT,CAAsB,IAC/CC,CAAAA,CAAW,CAAGD,CAAW,CAAC,CAAD,CADsB,CAE/CE,CAAiB,CAAGF,CAAW,CAAC,CAAD,CAFgB,CAGnD,MAAOV,CAAAA,CAAY,CAACa,OAAb,CAAqBV,CAAS,CAACC,eAA/B,IAAuD,EAAvD,CAA2DO,CAA3D,OAAqFC,CAArF,IACV,CAJD,EAIGE,IAJH,CAIQZ,CAAY,CAACa,SAJrB,EAMA,GAAIC,CAAAA,CAAI,CAAGjB,CAAC,CAACI,CAAS,CAACC,eAAX,CAAD,CAA6Ba,GAA7B,EAAX,CACAlB,CAAC,CAACI,CAAS,CAACC,eAAX,CAAD,CAA6Bc,EAA7B,CAAgC,QAAhC,CAA0C,UAAW,CACjD,GAAIC,CAAAA,CAAO,CAAGpB,CAAC,CAAC,IAAD,CAAD,CAAQkB,GAAR,EAAd,CAEA,GAAID,CAAI,CAACI,IAAL,CAAU,GAAV,IAAmBD,CAAO,CAACC,IAAR,CAAa,GAAb,CAAvB,CAA0C,CAEtC,GAAuB,CAAnB,GAAAD,CAAO,CAACE,MAAZ,CAA0B,CACtBtB,CAAC,CAAC,kBAAD,CAAD,CAAsBkB,GAAtB,CAA0B,CAA1B,CACH,CACDlB,CAAC,CAAC,KAAKuB,IAAN,CAAD,CAAaC,MAAb,EACH,CACJ,CAVD,CAWH,CAhDsH,CAkDvH,MAAmD,CAM/ClB,IAAI,CAAE,eAAW,CACbA,CAAI,EACP,CAR8C,CAUtD,CA5DK,CAAN","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 .\n\n/**\n * JS module for the data requests filter.\n *\n * @module tool_dataprivacy/request_filter\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/form-autocomplete', 'core/str', 'core/notification'], function($, Autocomplete, Str, Notification) {\n\n /**\n * Selectors.\n *\n * @access private\n * @type {{REQUEST_FILTERS: string}}\n */\n var SELECTORS = {\n REQUEST_FILTERS: '#request-filters'\n };\n\n /**\n * Init function.\n *\n * @method init\n * @private\n */\n var init = function() {\n var stringkeys = [\n {\n key: 'filter',\n component: 'moodle'\n },\n {\n key: 'nofiltersapplied',\n component: 'moodle'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langstrings) {\n var placeholder = langstrings[0];\n var noSelectionString = langstrings[1];\n return Autocomplete.enhance(SELECTORS.REQUEST_FILTERS, false, '', placeholder, false, true, noSelectionString, true);\n }).fail(Notification.exception);\n\n var last = $(SELECTORS.REQUEST_FILTERS).val();\n $(SELECTORS.REQUEST_FILTERS).on('change', function() {\n var current = $(this).val();\n // Prevent form from submitting unnecessarily, eg. on blur when no filter is selected.\n if (last.join(',') !== current.join(',')) {\n // If we're submitting without filters, set the hidden input 'filters-cleared' to 1.\n if (current.length === 0) {\n $('#filters-cleared').val(1);\n }\n $(this.form).submit();\n }\n });\n };\n\n return /** @alias module:core/form-autocomplete */ {\n /**\n * Initialise the unified user filter.\n *\n * @method init\n */\n init: function() {\n init();\n }\n };\n});\n"],"file":"request_filter.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/request_filter.js"],"names":["define","$","Autocomplete","Str","Notification","SELECTORS","REQUEST_FILTERS","init","get_strings","key","component","then","langstrings","placeholder","noSelectionString","enhance","fail","exception","last","val","on","current","join","length","form","submit"],"mappings":"AAsBAA,OAAM,mCAAC,CAAC,QAAD,CAAW,wBAAX,CAAqC,UAArC,CAAiD,mBAAjD,CAAD,CAAwE,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAA+BC,CAA/B,CAA6C,IAQnHC,CAAAA,CAAS,CAAG,CACZC,eAAe,CAAE,kBADL,CARuG,CAkBnHC,CAAI,CAAG,QAAPA,CAAAA,IAAO,EAAW,CAYlBJ,CAAG,CAACK,WAAJ,CAXiB,CACb,CACIC,GAAG,CAAE,QADT,CAEIC,SAAS,CAAE,QAFf,CADa,CAKb,CACID,GAAG,CAAE,kBADT,CAEIC,SAAS,CAAE,QAFf,CALa,CAWjB,EAA4BC,IAA5B,CAAiC,SAASC,CAAT,CAAsB,IAC/CC,CAAAA,CAAW,CAAGD,CAAW,CAAC,CAAD,CADsB,CAE/CE,CAAiB,CAAGF,CAAW,CAAC,CAAD,CAFgB,CAGnD,MAAOV,CAAAA,CAAY,CAACa,OAAb,CAAqBV,CAAS,CAACC,eAA/B,IAAuD,EAAvD,CAA2DO,CAA3D,OAAqFC,CAArF,IACV,CAJD,EAIGE,IAJH,CAIQZ,CAAY,CAACa,SAJrB,EAMA,GAAIC,CAAAA,CAAI,CAAGjB,CAAC,CAACI,CAAS,CAACC,eAAX,CAAD,CAA6Ba,GAA7B,EAAX,CACAlB,CAAC,CAACI,CAAS,CAACC,eAAX,CAAD,CAA6Bc,EAA7B,CAAgC,QAAhC,CAA0C,UAAW,CACjD,GAAIC,CAAAA,CAAO,CAAGpB,CAAC,CAAC,IAAD,CAAD,CAAQkB,GAAR,EAAd,CAEA,GAAID,CAAI,CAACI,IAAL,CAAU,GAAV,IAAmBD,CAAO,CAACC,IAAR,CAAa,GAAb,CAAvB,CAA0C,CAEtC,GAAuB,CAAnB,GAAAD,CAAO,CAACE,MAAZ,CAA0B,CACtBtB,CAAC,CAAC,kBAAD,CAAD,CAAsBkB,GAAtB,CAA0B,CAA1B,CACH,CACDlB,CAAC,CAAC,KAAKuB,IAAN,CAAD,CAAaC,MAAb,EACH,CACJ,CAVD,CAWH,CAhDsH,CAkDvH,MAAmD,CAM/ClB,IAAI,CAAE,eAAW,CACbA,CAAI,EACP,CAR8C,CAUtD,CA5DK,CAAN","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 .\n\n/**\n * JS module for the data requests filter.\n *\n * @module tool_dataprivacy/request_filter\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/form-autocomplete', 'core/str', 'core/notification'], function($, Autocomplete, Str, Notification) {\n\n /**\n * Selectors.\n *\n * @access private\n * @type {{REQUEST_FILTERS: string}}\n */\n var SELECTORS = {\n REQUEST_FILTERS: '#request-filters'\n };\n\n /**\n * Init function.\n *\n * @method init\n * @private\n */\n var init = function() {\n var stringkeys = [\n {\n key: 'filter',\n component: 'moodle'\n },\n {\n key: 'nofiltersapplied',\n component: 'moodle'\n }\n ];\n\n Str.get_strings(stringkeys).then(function(langstrings) {\n var placeholder = langstrings[0];\n var noSelectionString = langstrings[1];\n return Autocomplete.enhance(SELECTORS.REQUEST_FILTERS, false, '', placeholder, false, true, noSelectionString, true);\n }).fail(Notification.exception);\n\n var last = $(SELECTORS.REQUEST_FILTERS).val();\n $(SELECTORS.REQUEST_FILTERS).on('change', function() {\n var current = $(this).val();\n // Prevent form from submitting unnecessarily, eg. on blur when no filter is selected.\n if (last.join(',') !== current.join(',')) {\n // If we're submitting without filters, set the hidden input 'filters-cleared' to 1.\n if (current.length === 0) {\n $('#filters-cleared').val(1);\n }\n $(this.form).submit();\n }\n });\n };\n\n return /** @alias module:core/form-autocomplete */ {\n /**\n * Initialise the unified user filter.\n *\n * @method init\n */\n init: function() {\n init();\n }\n };\n});\n"],"file":"request_filter.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/build/requestactions.min.js.map b/admin/tool/dataprivacy/amd/build/requestactions.min.js.map index 4f39d1361be..f88c1fdcd2c 100644 --- a/admin/tool/dataprivacy/amd/build/requestactions.min.js.map +++ b/admin/tool/dataprivacy/amd/build/requestactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/requestactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","ModalDataRequest","DataPrivacyEvents","ACTIONS","APPROVE_REQUEST","DENY_REQUEST","VIEW_REQUEST","MARK_COMPLETE","CHANGE_BULK_ACTION","CONFIRM_BULK_ACTION","SELECT_ALL","BULK_ACTIONS","APPROVE","DENY","SELECTORS","SELECT_REQUEST","RequestActions","registerEvents","prototype","click","e","preventDefault","requestId","data","promises","call","methodname","args","when","then","result","addNotification","message","warnings","type","body","render","templateContext","approvedeny","canmarkcomplete","create","title","typename","TYPE","large","modal","getRoot","on","approve","showConfirmation","approveEventWsData","deny","denyEventWsData","complete","handleSave","hidden","destroy","show","catch","exception","completeEventWsData","requestIds","actionEvent","wsdata","bulkActionKeys","key","component","bulkaction","parseInt","val","get_strings","done","langStrings","alert","fail","each","push","length","bulkApprove","bulkApproveEventWsData","bulkDeny","bulkDenyEventWsData","change","selectAll","is","prop","action","keys","modalTitle","confirmMessage","types","SAVE_CANCEL","setSaveButtonText","save","wsfunction","wsparams","params","window","location","reload"],"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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/requestactions\n * @package tool_dataprivacy\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/templates',\n 'tool_dataprivacy/data_request_modal',\n 'tool_dataprivacy/events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates, ModalDataRequest, DataPrivacyEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{APPROVE_REQUEST: string}}\n * @type {{DENY_REQUEST: string}}\n * @type {{VIEW_REQUEST: string}}\n * @type {{MARK_COMPLETE: string}}\n * @type {{CHANGE_BULK_ACTION: string}}\n * @type {{CONFIRM_BULK_ACTION: string}}\n * @type {{SELECT_ALL: string}}\n */\n var ACTIONS = {\n APPROVE_REQUEST: '[data-action=\"approve\"]',\n DENY_REQUEST: '[data-action=\"deny\"]',\n VIEW_REQUEST: '[data-action=\"view\"]',\n MARK_COMPLETE: '[data-action=\"complete\"]',\n CHANGE_BULK_ACTION: '[id=\"bulk-action\"]',\n CONFIRM_BULK_ACTION: '[id=\"confirm-bulk-action\"]',\n SELECT_ALL: '[data-action=\"selectall\"]'\n };\n\n /**\n * List of available bulk actions.\n *\n * @type {{APPROVE: number}}\n * @type {{DENY: number}}\n */\n var BULK_ACTIONS = {\n APPROVE: 1,\n DENY: 2\n };\n\n /**\n * List of selectors.\n *\n * @type {{SELECT_REQUEST: string}}\n */\n var SELECTORS = {\n SELECT_REQUEST: '.selectrequests'\n };\n\n /**\n * RequestActions class.\n */\n var RequestActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n RequestActions.prototype.registerEvents = function() {\n $(ACTIONS.VIEW_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n\n // Cancel the request.\n var params = {\n 'requestid': requestId\n };\n\n var request = {\n methodname: 'tool_dataprivacy_get_data_request',\n args: params\n };\n\n var promises = Ajax.call([request]);\n $.when(promises[0]).then(function(data) {\n if (data.result) {\n return data.result;\n }\n // Fail.\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n return false;\n\n }).then(function(data) {\n var body = Templates.render('tool_dataprivacy/request_details', data);\n var templateContext = {\n approvedeny: data.approvedeny,\n canmarkcomplete: data.canmarkcomplete\n };\n return ModalFactory.create({\n title: data.typename,\n body: body,\n type: ModalDataRequest.TYPE,\n large: true,\n templateContext: templateContext\n });\n\n }).then(function(modal) {\n // Handle approve event.\n modal.getRoot().on(DataPrivacyEvents.approve, function() {\n showConfirmation(DataPrivacyEvents.approve, approveEventWsData(requestId));\n });\n\n // Handle deny event.\n modal.getRoot().on(DataPrivacyEvents.deny, function() {\n showConfirmation(DataPrivacyEvents.deny, denyEventWsData(requestId));\n });\n\n // Handle send event.\n modal.getRoot().on(DataPrivacyEvents.complete, function() {\n var params = {\n 'requestid': requestId\n };\n handleSave('tool_dataprivacy_mark_complete', params);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal!\n modal.show();\n\n return;\n\n }).catch(Notification.exception);\n });\n\n $(ACTIONS.APPROVE_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n showConfirmation(DataPrivacyEvents.approve, approveEventWsData(requestId));\n });\n\n $(ACTIONS.DENY_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n showConfirmation(DataPrivacyEvents.deny, denyEventWsData(requestId));\n });\n\n $(ACTIONS.MARK_COMPLETE).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n showConfirmation(DataPrivacyEvents.complete, completeEventWsData(requestId));\n });\n\n $(ACTIONS.CONFIRM_BULK_ACTION).click(function() {\n var requestIds = [];\n var actionEvent = '';\n var wsdata = {};\n var bulkActionKeys = [\n {\n key: 'selectbulkaction',\n component: 'tool_dataprivacy'\n },\n {\n key: 'selectdatarequests',\n component: 'tool_dataprivacy'\n },\n {\n key: 'ok'\n }\n ];\n\n var bulkaction = parseInt($('#bulk-action').val());\n\n if (bulkaction != BULK_ACTIONS.APPROVE && bulkaction != BULK_ACTIONS.DENY) {\n Str.get_strings(bulkActionKeys).done(function(langStrings) {\n Notification.alert('', langStrings[0], langStrings[2]);\n }).fail(Notification.exception);\n\n return;\n }\n\n $(\".selectrequests:checked\").each(function() {\n requestIds.push($(this).val());\n });\n\n if (requestIds.length < 1) {\n Str.get_strings(bulkActionKeys).done(function(langStrings) {\n Notification.alert('', langStrings[1], langStrings[2]);\n }).fail(Notification.exception);\n\n return;\n }\n\n switch (bulkaction) {\n case BULK_ACTIONS.APPROVE:\n actionEvent = DataPrivacyEvents.bulkApprove;\n wsdata = bulkApproveEventWsData(requestIds);\n break;\n case BULK_ACTIONS.DENY:\n actionEvent = DataPrivacyEvents.bulkDeny;\n wsdata = bulkDenyEventWsData(requestIds);\n }\n\n showConfirmation(actionEvent, wsdata);\n });\n\n $(ACTIONS.SELECT_ALL).change(function(e) {\n e.preventDefault();\n\n var selectAll = $(this).is(':checked');\n $(SELECTORS.SELECT_REQUEST).prop('checked', selectAll);\n });\n };\n\n /**\n * Return the webservice data for the approve request action.\n *\n * @param {Number} requestId The ID of the request.\n * @return {Object}\n */\n function approveEventWsData(requestId) {\n return {\n 'wsfunction': 'tool_dataprivacy_approve_data_request',\n 'wsparams': {'requestid': requestId}\n };\n }\n\n /**\n * Return the webservice data for the bulk approve request action.\n *\n * @param {Array} requestIds The array of request ID's.\n * @return {Object}\n */\n function bulkApproveEventWsData(requestIds) {\n return {\n 'wsfunction': 'tool_dataprivacy_bulk_approve_data_requests',\n 'wsparams': {'requestids': requestIds}\n };\n }\n\n /**\n * Return the webservice data for the deny request action.\n *\n * @param {Number} requestId The ID of the request.\n * @return {Object}\n */\n function denyEventWsData(requestId) {\n return {\n 'wsfunction': 'tool_dataprivacy_deny_data_request',\n 'wsparams': {'requestid': requestId}\n };\n }\n\n /**\n * Return the webservice data for the bulk deny request action.\n *\n * @param {Array} requestIds The array of request ID's.\n * @return {Object}\n */\n function bulkDenyEventWsData(requestIds) {\n return {\n 'wsfunction': 'tool_dataprivacy_bulk_deny_data_requests',\n 'wsparams': {'requestids': requestIds}\n };\n }\n\n /**\n * Return the webservice data for the complete request action.\n *\n * @param {Number} requestId The ID of the request.\n * @return {Object}\n */\n function completeEventWsData(requestId) {\n return {\n 'wsfunction': 'tool_dataprivacy_mark_complete',\n 'wsparams': {'requestid': requestId}\n };\n }\n\n /**\n * Show the confirmation dialogue.\n *\n * @param {String} action The action name.\n * @param {Object} wsdata Object containing ws data.\n */\n function showConfirmation(action, wsdata) {\n var keys = [];\n\n switch (action) {\n case DataPrivacyEvents.approve:\n keys = [\n {\n key: 'approverequest',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmapproval',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.bulkApprove:\n keys = [\n {\n key: 'bulkapproverequests',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmbulkapproval',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.deny:\n keys = [\n {\n key: 'denyrequest',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmdenial',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.bulkDeny:\n keys = [\n {\n key: 'bulkdenyrequests',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmbulkdenial',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.complete:\n keys = [\n {\n key: 'markcomplete',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmcompletion',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n }\n\n var modalTitle = '';\n Str.get_strings(keys).then(function(langStrings) {\n modalTitle = langStrings[0];\n var confirmMessage = langStrings[1];\n return ModalFactory.create({\n title: modalTitle,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(modalTitle);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n handleSave(wsdata.wsfunction, wsdata.wsparams);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return;\n\n }).catch(Notification.exception);\n }\n\n /**\n * Calls a web service function and reloads the page on success and shows a notification.\n * Displays an error notification, otherwise.\n *\n * @param {String} wsfunction The web service function to call.\n * @param {Object} params The parameters for the web service functoon.\n */\n function handleSave(wsfunction, params) {\n // Confirm the request.\n var request = {\n methodname: wsfunction,\n args: params\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n // On success, reload the page so that the data request table will be updated.\n // TODO: Probably in the future, better to reload the table or the target data request via AJAX.\n window.location.reload();\n } else {\n // Add the notification.\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n }\n\n return RequestActions;\n});\n"],"file":"requestactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/requestactions.js"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","ModalDataRequest","DataPrivacyEvents","ACTIONS","APPROVE_REQUEST","DENY_REQUEST","VIEW_REQUEST","MARK_COMPLETE","CHANGE_BULK_ACTION","CONFIRM_BULK_ACTION","SELECT_ALL","BULK_ACTIONS","APPROVE","DENY","SELECTORS","SELECT_REQUEST","RequestActions","registerEvents","prototype","click","e","preventDefault","requestId","data","promises","call","methodname","args","when","then","result","addNotification","message","warnings","type","body","render","templateContext","approvedeny","canmarkcomplete","create","title","typename","TYPE","large","modal","getRoot","on","approve","showConfirmation","approveEventWsData","deny","denyEventWsData","complete","handleSave","hidden","destroy","show","catch","exception","completeEventWsData","requestIds","actionEvent","wsdata","bulkActionKeys","key","component","bulkaction","parseInt","val","get_strings","done","langStrings","alert","fail","each","push","length","bulkApprove","bulkApproveEventWsData","bulkDeny","bulkDenyEventWsData","change","selectAll","is","prop","action","keys","modalTitle","confirmMessage","types","SAVE_CANCEL","setSaveButtonText","save","wsfunction","wsparams","params","window","location","reload"],"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 .\n\n/**\n * Request actions.\n *\n * @module tool_dataprivacy/requestactions\n * @copyright 2018 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/templates',\n 'tool_dataprivacy/data_request_modal',\n 'tool_dataprivacy/events'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates, ModalDataRequest, DataPrivacyEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{APPROVE_REQUEST: string}}\n * @type {{DENY_REQUEST: string}}\n * @type {{VIEW_REQUEST: string}}\n * @type {{MARK_COMPLETE: string}}\n * @type {{CHANGE_BULK_ACTION: string}}\n * @type {{CONFIRM_BULK_ACTION: string}}\n * @type {{SELECT_ALL: string}}\n */\n var ACTIONS = {\n APPROVE_REQUEST: '[data-action=\"approve\"]',\n DENY_REQUEST: '[data-action=\"deny\"]',\n VIEW_REQUEST: '[data-action=\"view\"]',\n MARK_COMPLETE: '[data-action=\"complete\"]',\n CHANGE_BULK_ACTION: '[id=\"bulk-action\"]',\n CONFIRM_BULK_ACTION: '[id=\"confirm-bulk-action\"]',\n SELECT_ALL: '[data-action=\"selectall\"]'\n };\n\n /**\n * List of available bulk actions.\n *\n * @type {{APPROVE: number}}\n * @type {{DENY: number}}\n */\n var BULK_ACTIONS = {\n APPROVE: 1,\n DENY: 2\n };\n\n /**\n * List of selectors.\n *\n * @type {{SELECT_REQUEST: string}}\n */\n var SELECTORS = {\n SELECT_REQUEST: '.selectrequests'\n };\n\n /**\n * RequestActions class.\n */\n var RequestActions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n RequestActions.prototype.registerEvents = function() {\n $(ACTIONS.VIEW_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n\n // Cancel the request.\n var params = {\n 'requestid': requestId\n };\n\n var request = {\n methodname: 'tool_dataprivacy_get_data_request',\n args: params\n };\n\n var promises = Ajax.call([request]);\n $.when(promises[0]).then(function(data) {\n if (data.result) {\n return data.result;\n }\n // Fail.\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n return false;\n\n }).then(function(data) {\n var body = Templates.render('tool_dataprivacy/request_details', data);\n var templateContext = {\n approvedeny: data.approvedeny,\n canmarkcomplete: data.canmarkcomplete\n };\n return ModalFactory.create({\n title: data.typename,\n body: body,\n type: ModalDataRequest.TYPE,\n large: true,\n templateContext: templateContext\n });\n\n }).then(function(modal) {\n // Handle approve event.\n modal.getRoot().on(DataPrivacyEvents.approve, function() {\n showConfirmation(DataPrivacyEvents.approve, approveEventWsData(requestId));\n });\n\n // Handle deny event.\n modal.getRoot().on(DataPrivacyEvents.deny, function() {\n showConfirmation(DataPrivacyEvents.deny, denyEventWsData(requestId));\n });\n\n // Handle send event.\n modal.getRoot().on(DataPrivacyEvents.complete, function() {\n var params = {\n 'requestid': requestId\n };\n handleSave('tool_dataprivacy_mark_complete', params);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal!\n modal.show();\n\n return;\n\n }).catch(Notification.exception);\n });\n\n $(ACTIONS.APPROVE_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n showConfirmation(DataPrivacyEvents.approve, approveEventWsData(requestId));\n });\n\n $(ACTIONS.DENY_REQUEST).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n showConfirmation(DataPrivacyEvents.deny, denyEventWsData(requestId));\n });\n\n $(ACTIONS.MARK_COMPLETE).click(function(e) {\n e.preventDefault();\n\n var requestId = $(this).data('requestid');\n showConfirmation(DataPrivacyEvents.complete, completeEventWsData(requestId));\n });\n\n $(ACTIONS.CONFIRM_BULK_ACTION).click(function() {\n var requestIds = [];\n var actionEvent = '';\n var wsdata = {};\n var bulkActionKeys = [\n {\n key: 'selectbulkaction',\n component: 'tool_dataprivacy'\n },\n {\n key: 'selectdatarequests',\n component: 'tool_dataprivacy'\n },\n {\n key: 'ok'\n }\n ];\n\n var bulkaction = parseInt($('#bulk-action').val());\n\n if (bulkaction != BULK_ACTIONS.APPROVE && bulkaction != BULK_ACTIONS.DENY) {\n Str.get_strings(bulkActionKeys).done(function(langStrings) {\n Notification.alert('', langStrings[0], langStrings[2]);\n }).fail(Notification.exception);\n\n return;\n }\n\n $(\".selectrequests:checked\").each(function() {\n requestIds.push($(this).val());\n });\n\n if (requestIds.length < 1) {\n Str.get_strings(bulkActionKeys).done(function(langStrings) {\n Notification.alert('', langStrings[1], langStrings[2]);\n }).fail(Notification.exception);\n\n return;\n }\n\n switch (bulkaction) {\n case BULK_ACTIONS.APPROVE:\n actionEvent = DataPrivacyEvents.bulkApprove;\n wsdata = bulkApproveEventWsData(requestIds);\n break;\n case BULK_ACTIONS.DENY:\n actionEvent = DataPrivacyEvents.bulkDeny;\n wsdata = bulkDenyEventWsData(requestIds);\n }\n\n showConfirmation(actionEvent, wsdata);\n });\n\n $(ACTIONS.SELECT_ALL).change(function(e) {\n e.preventDefault();\n\n var selectAll = $(this).is(':checked');\n $(SELECTORS.SELECT_REQUEST).prop('checked', selectAll);\n });\n };\n\n /**\n * Return the webservice data for the approve request action.\n *\n * @param {Number} requestId The ID of the request.\n * @return {Object}\n */\n function approveEventWsData(requestId) {\n return {\n 'wsfunction': 'tool_dataprivacy_approve_data_request',\n 'wsparams': {'requestid': requestId}\n };\n }\n\n /**\n * Return the webservice data for the bulk approve request action.\n *\n * @param {Array} requestIds The array of request ID's.\n * @return {Object}\n */\n function bulkApproveEventWsData(requestIds) {\n return {\n 'wsfunction': 'tool_dataprivacy_bulk_approve_data_requests',\n 'wsparams': {'requestids': requestIds}\n };\n }\n\n /**\n * Return the webservice data for the deny request action.\n *\n * @param {Number} requestId The ID of the request.\n * @return {Object}\n */\n function denyEventWsData(requestId) {\n return {\n 'wsfunction': 'tool_dataprivacy_deny_data_request',\n 'wsparams': {'requestid': requestId}\n };\n }\n\n /**\n * Return the webservice data for the bulk deny request action.\n *\n * @param {Array} requestIds The array of request ID's.\n * @return {Object}\n */\n function bulkDenyEventWsData(requestIds) {\n return {\n 'wsfunction': 'tool_dataprivacy_bulk_deny_data_requests',\n 'wsparams': {'requestids': requestIds}\n };\n }\n\n /**\n * Return the webservice data for the complete request action.\n *\n * @param {Number} requestId The ID of the request.\n * @return {Object}\n */\n function completeEventWsData(requestId) {\n return {\n 'wsfunction': 'tool_dataprivacy_mark_complete',\n 'wsparams': {'requestid': requestId}\n };\n }\n\n /**\n * Show the confirmation dialogue.\n *\n * @param {String} action The action name.\n * @param {Object} wsdata Object containing ws data.\n */\n function showConfirmation(action, wsdata) {\n var keys = [];\n\n switch (action) {\n case DataPrivacyEvents.approve:\n keys = [\n {\n key: 'approverequest',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmapproval',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.bulkApprove:\n keys = [\n {\n key: 'bulkapproverequests',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmbulkapproval',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.deny:\n keys = [\n {\n key: 'denyrequest',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmdenial',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.bulkDeny:\n keys = [\n {\n key: 'bulkdenyrequests',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmbulkdenial',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n case DataPrivacyEvents.complete:\n keys = [\n {\n key: 'markcomplete',\n component: 'tool_dataprivacy'\n },\n {\n key: 'confirmcompletion',\n component: 'tool_dataprivacy'\n }\n ];\n break;\n }\n\n var modalTitle = '';\n Str.get_strings(keys).then(function(langStrings) {\n modalTitle = langStrings[0];\n var confirmMessage = langStrings[1];\n return ModalFactory.create({\n title: modalTitle,\n body: confirmMessage,\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(modalTitle);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function() {\n handleSave(wsdata.wsfunction, wsdata.wsparams);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return;\n\n }).catch(Notification.exception);\n }\n\n /**\n * Calls a web service function and reloads the page on success and shows a notification.\n * Displays an error notification, otherwise.\n *\n * @param {String} wsfunction The web service function to call.\n * @param {Object} params The parameters for the web service functoon.\n */\n function handleSave(wsfunction, params) {\n // Confirm the request.\n var request = {\n methodname: wsfunction,\n args: params\n };\n\n Ajax.call([request])[0].done(function(data) {\n if (data.result) {\n // On success, reload the page so that the data request table will be updated.\n // TODO: Probably in the future, better to reload the table or the target data request via AJAX.\n window.location.reload();\n } else {\n // Add the notification.\n Notification.addNotification({\n message: data.warnings[0].message,\n type: 'error'\n });\n }\n }).fail(Notification.exception);\n }\n\n return RequestActions;\n});\n"],"file":"requestactions.min.js"} \ No newline at end of file diff --git a/admin/tool/dataprivacy/amd/src/add_category.js b/admin/tool/dataprivacy/amd/src/add_category.js index 7ea22c89bb4..75bf7701f77 100644 --- a/admin/tool/dataprivacy/amd/src/add_category.js +++ b/admin/tool/dataprivacy/amd/src/add_category.js @@ -17,7 +17,6 @@ * Module to add categories. * * @module tool_dataprivacy/add_category - * @package tool_dataprivacy * @copyright 2018 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/add_purpose.js b/admin/tool/dataprivacy/amd/src/add_purpose.js index f3c573cf86c..9567cc5d6cf 100644 --- a/admin/tool/dataprivacy/amd/src/add_purpose.js +++ b/admin/tool/dataprivacy/amd/src/add_purpose.js @@ -17,7 +17,6 @@ * Module to add purposes. * * @module tool_dataprivacy/add_purpose - * @package tool_dataprivacy * @copyright 2018 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/categoriesactions.js b/admin/tool/dataprivacy/amd/src/categoriesactions.js index 6d059771ae0..f07b5710cbf 100644 --- a/admin/tool/dataprivacy/amd/src/categoriesactions.js +++ b/admin/tool/dataprivacy/amd/src/categoriesactions.js @@ -17,7 +17,6 @@ * AMD module for categories actions. * * @module tool_dataprivacy/categoriesactions - * @package tool_dataprivacy * @copyright 2018 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/data_deletion.js b/admin/tool/dataprivacy/amd/src/data_deletion.js index e36af218370..07917e2414a 100644 --- a/admin/tool/dataprivacy/amd/src/data_deletion.js +++ b/admin/tool/dataprivacy/amd/src/data_deletion.js @@ -17,7 +17,6 @@ * Request actions. * * @module tool_dataprivacy/data_deletion - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/data_registry.js b/admin/tool/dataprivacy/amd/src/data_registry.js index 07eb18dbe82..c149f128c44 100644 --- a/admin/tool/dataprivacy/amd/src/data_registry.js +++ b/admin/tool/dataprivacy/amd/src/data_registry.js @@ -17,7 +17,6 @@ * Request actions. * * @module tool_dataprivacy/data_registry - * @package tool_dataprivacy * @copyright 2018 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/data_request_modal.js b/admin/tool/dataprivacy/amd/src/data_request_modal.js index 5f841c5cfd4..8b23c88336b 100644 --- a/admin/tool/dataprivacy/amd/src/data_request_modal.js +++ b/admin/tool/dataprivacy/amd/src/data_request_modal.js @@ -17,7 +17,6 @@ * Request actions. * * @module tool_dataprivacy/data_request_modal - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/defaultsactions.js b/admin/tool/dataprivacy/amd/src/defaultsactions.js index 76cbb89ae91..688648d463b 100644 --- a/admin/tool/dataprivacy/amd/src/defaultsactions.js +++ b/admin/tool/dataprivacy/amd/src/defaultsactions.js @@ -17,7 +17,6 @@ * AMD module for data registry defaults actions. * * @module tool_dataprivacy/defaultsactions - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/effective_retention_period.js b/admin/tool/dataprivacy/amd/src/effective_retention_period.js index 7e3a1022f23..22d10f3b8c6 100644 --- a/admin/tool/dataprivacy/amd/src/effective_retention_period.js +++ b/admin/tool/dataprivacy/amd/src/effective_retention_period.js @@ -17,7 +17,6 @@ * Module to update the displayed retention period. * * @module tool_dataprivacy/effective_retention_period - * @package tool_dataprivacy * @copyright 2018 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/events.js b/admin/tool/dataprivacy/amd/src/events.js index cb1d9afadbf..6a09ca7a7b6 100644 --- a/admin/tool/dataprivacy/amd/src/events.js +++ b/admin/tool/dataprivacy/amd/src/events.js @@ -18,7 +18,6 @@ * * @module tool_dataprivacy/events * @class events - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/expand_contract.js b/admin/tool/dataprivacy/amd/src/expand_contract.js index a369f7c8721..58c05a72b55 100644 --- a/admin/tool/dataprivacy/amd/src/expand_contract.js +++ b/admin/tool/dataprivacy/amd/src/expand_contract.js @@ -18,7 +18,6 @@ * * @module tool_dataprivacy/expand_contract * @class page-expand-contract - * @package tool_dataprivacy * @copyright 2018 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/form-user-selector.js b/admin/tool/dataprivacy/amd/src/form-user-selector.js index 18c297ad2aa..e34fb363747 100644 --- a/admin/tool/dataprivacy/amd/src/form-user-selector.js +++ b/admin/tool/dataprivacy/amd/src/form-user-selector.js @@ -18,7 +18,6 @@ * * @module tool_dataprivacy/form-user-selector * @class form-user-selector - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/myrequestactions.js b/admin/tool/dataprivacy/amd/src/myrequestactions.js index 54f94fb3e01..a6b05537b6d 100644 --- a/admin/tool/dataprivacy/amd/src/myrequestactions.js +++ b/admin/tool/dataprivacy/amd/src/myrequestactions.js @@ -17,7 +17,6 @@ * AMD module to enable users to manage their own data requests. * * @module tool_dataprivacy/myrequestactions - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/purposesactions.js b/admin/tool/dataprivacy/amd/src/purposesactions.js index 05abf71896e..903eaaa3537 100644 --- a/admin/tool/dataprivacy/amd/src/purposesactions.js +++ b/admin/tool/dataprivacy/amd/src/purposesactions.js @@ -17,7 +17,6 @@ * AMD module for purposes actions. * * @module tool_dataprivacy/purposesactions - * @package tool_dataprivacy * @copyright 2018 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/request_filter.js b/admin/tool/dataprivacy/amd/src/request_filter.js index 6b915c85259..0725c9159c3 100644 --- a/admin/tool/dataprivacy/amd/src/request_filter.js +++ b/admin/tool/dataprivacy/amd/src/request_filter.js @@ -17,7 +17,6 @@ * JS module for the data requests filter. * * @module tool_dataprivacy/request_filter - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/dataprivacy/amd/src/requestactions.js b/admin/tool/dataprivacy/amd/src/requestactions.js index 37c4d9230db..02a9da68d3c 100644 --- a/admin/tool/dataprivacy/amd/src/requestactions.js +++ b/admin/tool/dataprivacy/amd/src/requestactions.js @@ -17,7 +17,6 @@ * Request actions. * * @module tool_dataprivacy/requestactions - * @package tool_dataprivacy * @copyright 2018 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/licensemanager/amd/build/delete_license.min.js.map b/admin/tool/licensemanager/amd/build/delete_license.min.js.map index caee9ae810d..944ccca050d 100644 --- a/admin/tool/licensemanager/amd/build/delete_license.min.js.map +++ b/admin/tool/licensemanager/amd/build/delete_license.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/delete_license.js"],"names":["define","$","ModalFactory","ModalEvents","Url","String","trigger","create","type","types","SAVE_CANCEL","title","get_string","body","preShowCallback","triggerElement","modal","params","data","deleteURL","relativeUrl","large","done","getRoot","on","save","e","preventDefault","window","location","href"],"mappings":"AAwBAA,OAAM,sCAAC,CAAC,QAAD,CAAW,oBAAX,CAAiC,mBAAjC,CAAsD,UAAtD,CAAkE,UAAlE,CAAD,CACF,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAuCC,CAAvC,CAA4CC,CAA5C,CAAoD,CAEhD,GAAIC,CAAAA,CAAO,CAAGL,CAAC,CAAC,iBAAD,CAAf,CACAC,CAAY,CAACK,MAAb,CAAoB,CAChBC,IAAI,CAAEN,CAAY,CAACO,KAAb,CAAmBC,WADT,CAEhBC,KAAK,CAAEN,CAAM,CAACO,UAAP,CAAkB,eAAlB,CAAmC,qBAAnC,CAFS,CAGhBC,IAAI,CAAER,CAAM,CAACO,UAAP,CAAkB,6BAAlB,CAAiD,qBAAjD,CAHU,CAIhBE,eAAe,CAAE,yBAASC,CAAT,CAAyBC,CAAzB,CAAgC,CAC7CD,CAAc,CAAGd,CAAC,CAACc,CAAD,CAAlB,CACA,GAAIE,CAAAA,CAAM,CAAG,CACT,OAAU,QADD,CAET,QAAWF,CAAc,CAACG,IAAf,CAAoB,SAApB,CAFF,CAAb,CAIAF,CAAK,CAACG,SAAN,CAAkBf,CAAG,CAACgB,WAAJ,CAAgB,sCAAhB,CAAwDH,CAAxD,IACrB,CAXe,CAYhBI,KAAK,GAZW,CAApB,CAaGf,CAbH,EAcKgB,IAdL,CAcU,SAASN,CAAT,CAAgB,CAClBA,CAAK,CAACO,OAAN,GAAgBC,EAAhB,CAAmBrB,CAAW,CAACsB,IAA/B,CAAqC,SAASC,CAAT,CAAY,CAE7CA,CAAC,CAACC,cAAF,GAEAC,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBd,CAAK,CAACG,SAChC,CALD,CAMH,CArBL,CAsBH,CA1BC,CAAN","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 .\n\n/**\n * Modal for confirming deletion of a custom license.\n *\n * @module tool_licensemanager/delete_license\n * @class delete_license\n * @package tool_licensemanager\n * @copyright 2019 Tom Dickman \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/modal_factory', 'core/modal_events', 'core/url', 'core/str'],\n function($, ModalFactory, ModalEvents, Url, String) {\n\n var trigger = $('.delete-license');\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: String.get_string('deletelicense', 'tool_licensemanager'),\n body: String.get_string('deletelicenseconfirmmessage', 'tool_licensemanager'),\n preShowCallback: function(triggerElement, modal) {\n triggerElement = $(triggerElement);\n let params = {\n 'action': 'delete',\n 'license': triggerElement.data('license')\n };\n modal.deleteURL = Url.relativeUrl('/admin/tool/licensemanager/index.php', params, true);\n },\n large: true,\n }, trigger)\n .done(function(modal) {\n modal.getRoot().on(ModalEvents.save, function(e) {\n // Stop the default save button behaviour which is to close the modal.\n e.preventDefault();\n // Redirect to delete url.\n window.location.href = modal.deleteURL;\n });\n });\n });\n"],"file":"delete_license.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/delete_license.js"],"names":["define","$","ModalFactory","ModalEvents","Url","String","trigger","create","type","types","SAVE_CANCEL","title","get_string","body","preShowCallback","triggerElement","modal","params","data","deleteURL","relativeUrl","large","done","getRoot","on","save","e","preventDefault","window","location","href"],"mappings":"AAuBAA,OAAM,sCAAC,CAAC,QAAD,CAAW,oBAAX,CAAiC,mBAAjC,CAAsD,UAAtD,CAAkE,UAAlE,CAAD,CACF,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAuCC,CAAvC,CAA4CC,CAA5C,CAAoD,CAEhD,GAAIC,CAAAA,CAAO,CAAGL,CAAC,CAAC,iBAAD,CAAf,CACAC,CAAY,CAACK,MAAb,CAAoB,CAChBC,IAAI,CAAEN,CAAY,CAACO,KAAb,CAAmBC,WADT,CAEhBC,KAAK,CAAEN,CAAM,CAACO,UAAP,CAAkB,eAAlB,CAAmC,qBAAnC,CAFS,CAGhBC,IAAI,CAAER,CAAM,CAACO,UAAP,CAAkB,6BAAlB,CAAiD,qBAAjD,CAHU,CAIhBE,eAAe,CAAE,yBAASC,CAAT,CAAyBC,CAAzB,CAAgC,CAC7CD,CAAc,CAAGd,CAAC,CAACc,CAAD,CAAlB,CACA,GAAIE,CAAAA,CAAM,CAAG,CACT,OAAU,QADD,CAET,QAAWF,CAAc,CAACG,IAAf,CAAoB,SAApB,CAFF,CAAb,CAIAF,CAAK,CAACG,SAAN,CAAkBf,CAAG,CAACgB,WAAJ,CAAgB,sCAAhB,CAAwDH,CAAxD,IACrB,CAXe,CAYhBI,KAAK,GAZW,CAApB,CAaGf,CAbH,EAcKgB,IAdL,CAcU,SAASN,CAAT,CAAgB,CAClBA,CAAK,CAACO,OAAN,GAAgBC,EAAhB,CAAmBrB,CAAW,CAACsB,IAA/B,CAAqC,SAASC,CAAT,CAAY,CAE7CA,CAAC,CAACC,cAAF,GAEAC,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBd,CAAK,CAACG,SAChC,CALD,CAMH,CArBL,CAsBH,CA1BC,CAAN","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 .\n\n/**\n * Modal for confirming deletion of a custom license.\n *\n * @module tool_licensemanager/delete_license\n * @class delete_license\n * @copyright 2019 Tom Dickman \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/modal_factory', 'core/modal_events', 'core/url', 'core/str'],\n function($, ModalFactory, ModalEvents, Url, String) {\n\n var trigger = $('.delete-license');\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: String.get_string('deletelicense', 'tool_licensemanager'),\n body: String.get_string('deletelicenseconfirmmessage', 'tool_licensemanager'),\n preShowCallback: function(triggerElement, modal) {\n triggerElement = $(triggerElement);\n let params = {\n 'action': 'delete',\n 'license': triggerElement.data('license')\n };\n modal.deleteURL = Url.relativeUrl('/admin/tool/licensemanager/index.php', params, true);\n },\n large: true,\n }, trigger)\n .done(function(modal) {\n modal.getRoot().on(ModalEvents.save, function(e) {\n // Stop the default save button behaviour which is to close the modal.\n e.preventDefault();\n // Redirect to delete url.\n window.location.href = modal.deleteURL;\n });\n });\n });\n"],"file":"delete_license.min.js"} \ No newline at end of file diff --git a/admin/tool/licensemanager/amd/src/delete_license.js b/admin/tool/licensemanager/amd/src/delete_license.js index 6abdcec052e..8f9f6525f6f 100644 --- a/admin/tool/licensemanager/amd/src/delete_license.js +++ b/admin/tool/licensemanager/amd/src/delete_license.js @@ -18,7 +18,6 @@ * * @module tool_licensemanager/delete_license * @class delete_license - * @package tool_licensemanager * @copyright 2019 Tom Dickman * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/build/actionselector.min.js.map b/admin/tool/lp/amd/build/actionselector.min.js.map index 4309e71d158..583b1ce3dcf 100644 --- a/admin/tool/lp/amd/build/actionselector.min.js.map +++ b/admin/tool/lp/amd/build/actionselector.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/actionselector.js"],"names":["define","$","Notification","Ajax","Templates","Dialogue","EventBase","ActionSelector","title","message","actions","confirm","cancel","self","prototype","constructor","apply","_title","_message","_actions","_confirm","_cancel","_selectedValue","_reset","Object","create","_popup","_afterRender","_find","attr","change","val","removeAttr","_refresh","bind","click","e","preventDefault","close","length","_trigger","action","display","_render","then","html","fail","exception","selector","getContent","find","replaceWith","choices","i","push","content","render"],"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 .\n\n/**\n * Action selector.\n *\n * To handle 'save' events use: actionselector.on('save')\n * This will receive the information to display in popup.\n * The actions have the format [{'text': sometext, 'value' : somevalue}].\n *\n * @package tool_lp\n * @copyright 2016 Serge Gauthier - \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'tool_lp/dialogue',\n 'tool_lp/event_base'],\n function($, Notification, Ajax, Templates, Dialogue, EventBase) {\n\n /**\n * Action selector class.\n * @param {String} title The title of popup.\n * @param {String} message The message to display.\n * @param {object} actions The actions that can be selected.\n * @param {String} confirm Text for confirm button.\n * @param {String} cancel Text for cancel button.\n */\n var ActionSelector = function(title, message, actions, confirm, cancel) {\n var self = this;\n\n EventBase.prototype.constructor.apply(this, []);\n self._title = title;\n self._message = message;\n self._actions = actions;\n self._confirm = confirm;\n self._cancel = cancel;\n self._selectedValue = null;\n self._reset();\n };\n\n ActionSelector.prototype = Object.create(EventBase.prototype);\n\n /** @type {String} The value that was selected. */\n ActionSelector.prototype._selectedValue = null;\n /** @type {Dialogue} The reference to the dialogue. */\n ActionSelector.prototype._popup = null;\n /** @type {String} The title of popup. */\n ActionSelector.prototype._title = null;\n /** @type {String} The message in popup. */\n ActionSelector.prototype._message = null;\n /** @type {object} The information for radion buttons. */\n ActionSelector.prototype._actions = null;\n /** @type {String} The text for confirm button. */\n ActionSelector.prototype._confirm = null;\n /** @type {String} The text for cancel button. */\n ActionSelector.prototype._cancel = null;\n\n /**\n * Hook to executed after the view is rendered.\n *\n * @method _afterRender\n */\n ActionSelector.prototype._afterRender = function() {\n var self = this;\n\n // Confirm button is disabled until a choice is done.\n self._find('[data-action=\"action-selector-confirm\"]').attr('disabled', 'disabled');\n\n // Add listener for radio buttons change.\n self._find('[data-region=\"action-selector-radio-buttons\"]').change(function() {\n self._selectedValue = $(\"input[type='radio']:checked\").val();\n self._find('[data-action=\"action-selector-confirm\"]').removeAttr('disabled');\n self._refresh.bind(self);\n });\n\n // Add listener for cancel.\n self._find('[data-action=\"action-selector-cancel\"]').click(function(e) {\n e.preventDefault();\n self.close();\n });\n\n // Add listener for confirm.\n self._find('[data-action=\"action-selector-confirm\"]').click(function(e) {\n e.preventDefault();\n if (!self._selectedValue.length) {\n return;\n }\n self._trigger('save', {action: self._selectedValue});\n self.close();\n });\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n ActionSelector.prototype.close = function() {\n var self = this;\n self._popup.close();\n self._reset();\n };\n\n /**\n * Opens the action selector.\n *\n * @method display\n * @return {Promise}\n */\n ActionSelector.prototype.display = function() {\n var self = this;\n return self._render().then(function(html) {\n self._popup = new Dialogue(\n self._title,\n html,\n self._afterRender.bind(self)\n );\n return;\n }).fail(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @return {JQuery} The node\n * @method _find\n */\n ActionSelector.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Refresh the view.\n *\n * @method _refresh\n * @return {Promise}\n */\n ActionSelector.prototype._refresh = function() {\n var self = this;\n return self._render().then(function(html) {\n self._find('[data-region=\"action-selector\"]').replaceWith(html);\n self._afterRender();\n return;\n });\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @return {Promise}\n */\n ActionSelector.prototype._render = function() {\n var self = this;\n var choices = [];\n for (var i in self._actions) {\n choices.push(self._actions[i]);\n }\n var content = {'message': self._message, 'choices': choices,\n 'confirm': self._confirm, 'cancel': self._cancel};\n\n return Templates.render('tool_lp/action_selector', content);\n };\n\n /**\n * Reset the dialogue properties.\n *\n * This does not reset everything, just enough to reset the UI.\n *\n * @method _reset\n */\n ActionSelector.prototype._reset = function() {\n this._popup = null;\n this._selectedValue = '';\n };\n\n return /** @alias module:tool_lp/actionselector */ ActionSelector;\n\n});\n"],"file":"actionselector.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/actionselector.js"],"names":["define","$","Notification","Ajax","Templates","Dialogue","EventBase","ActionSelector","title","message","actions","confirm","cancel","self","prototype","constructor","apply","_title","_message","_actions","_confirm","_cancel","_selectedValue","_reset","Object","create","_popup","_afterRender","_find","attr","change","val","removeAttr","_refresh","bind","click","e","preventDefault","close","length","_trigger","action","display","_render","then","html","fail","exception","selector","getContent","find","replaceWith","choices","i","push","content","render"],"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 .\n\n/**\n * Action selector.\n *\n * To handle 'save' events use: actionselector.on('save')\n * This will receive the information to display in popup.\n * The actions have the format [{'text': sometext, 'value' : somevalue}].\n *\n * @copyright 2016 Serge Gauthier - \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'tool_lp/dialogue',\n 'tool_lp/event_base'],\n function($, Notification, Ajax, Templates, Dialogue, EventBase) {\n\n /**\n * Action selector class.\n * @param {String} title The title of popup.\n * @param {String} message The message to display.\n * @param {object} actions The actions that can be selected.\n * @param {String} confirm Text for confirm button.\n * @param {String} cancel Text for cancel button.\n */\n var ActionSelector = function(title, message, actions, confirm, cancel) {\n var self = this;\n\n EventBase.prototype.constructor.apply(this, []);\n self._title = title;\n self._message = message;\n self._actions = actions;\n self._confirm = confirm;\n self._cancel = cancel;\n self._selectedValue = null;\n self._reset();\n };\n\n ActionSelector.prototype = Object.create(EventBase.prototype);\n\n /** @property {String} The value that was selected. */\n ActionSelector.prototype._selectedValue = null;\n /** @property {Dialogue} The reference to the dialogue. */\n ActionSelector.prototype._popup = null;\n /** @property {String} The title of popup. */\n ActionSelector.prototype._title = null;\n /** @property {String} The message in popup. */\n ActionSelector.prototype._message = null;\n /** @property {object} The information for radion buttons. */\n ActionSelector.prototype._actions = null;\n /** @property {String} The text for confirm button. */\n ActionSelector.prototype._confirm = null;\n /** @property {String} The text for cancel button. */\n ActionSelector.prototype._cancel = null;\n\n /**\n * Hook to executed after the view is rendered.\n *\n * @method _afterRender\n */\n ActionSelector.prototype._afterRender = function() {\n var self = this;\n\n // Confirm button is disabled until a choice is done.\n self._find('[data-action=\"action-selector-confirm\"]').attr('disabled', 'disabled');\n\n // Add listener for radio buttons change.\n self._find('[data-region=\"action-selector-radio-buttons\"]').change(function() {\n self._selectedValue = $(\"input[type='radio']:checked\").val();\n self._find('[data-action=\"action-selector-confirm\"]').removeAttr('disabled');\n self._refresh.bind(self);\n });\n\n // Add listener for cancel.\n self._find('[data-action=\"action-selector-cancel\"]').click(function(e) {\n e.preventDefault();\n self.close();\n });\n\n // Add listener for confirm.\n self._find('[data-action=\"action-selector-confirm\"]').click(function(e) {\n e.preventDefault();\n if (!self._selectedValue.length) {\n return;\n }\n self._trigger('save', {action: self._selectedValue});\n self.close();\n });\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n ActionSelector.prototype.close = function() {\n var self = this;\n self._popup.close();\n self._reset();\n };\n\n /**\n * Opens the action selector.\n *\n * @method display\n * @return {Promise}\n */\n ActionSelector.prototype.display = function() {\n var self = this;\n return self._render().then(function(html) {\n self._popup = new Dialogue(\n self._title,\n html,\n self._afterRender.bind(self)\n );\n return;\n }).fail(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @return {JQuery} The node\n * @method _find\n */\n ActionSelector.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Refresh the view.\n *\n * @method _refresh\n * @return {Promise}\n */\n ActionSelector.prototype._refresh = function() {\n var self = this;\n return self._render().then(function(html) {\n self._find('[data-region=\"action-selector\"]').replaceWith(html);\n self._afterRender();\n return;\n });\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @return {Promise}\n */\n ActionSelector.prototype._render = function() {\n var self = this;\n var choices = [];\n for (var i in self._actions) {\n choices.push(self._actions[i]);\n }\n var content = {'message': self._message, 'choices': choices,\n 'confirm': self._confirm, 'cancel': self._cancel};\n\n return Templates.render('tool_lp/action_selector', content);\n };\n\n /**\n * Reset the dialogue properties.\n *\n * This does not reset everything, just enough to reset the UI.\n *\n * @method _reset\n */\n ActionSelector.prototype._reset = function() {\n this._popup = null;\n this._selectedValue = '';\n };\n\n return /** @alias module:tool_lp/actionselector */ ActionSelector;\n\n});\n"],"file":"actionselector.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencies.min.js.map b/admin/tool/lp/amd/build/competencies.min.js.map index b7aa8c0a283..0e5bba456e0 100644 --- a/admin/tool/lp/amd/build/competencies.min.js.map +++ b/admin/tool/lp/amd/build/competencies.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencies.js"],"names":["define","$","notification","ajax","templates","str","Picker","dragdrop","Pending","competencies","itemid","itemtype","pagectxid","pageContextId","pickerInstance","prop","registerEvents","registerDragDrop","prototype","localthis","get_string","done","movestring","identifier","component","drag","drop","handleDrop","fail","exception","fromid","data","toid","requests","call","methodname","args","courseid","competencyidfrom","competencyidto","templateid","planid","pickCompetency","self","pagerender","pageregion","pageContextIncludes","on","e","compIds","competencyIds","pendingPromise","each","index","compId","push","competencyid","moduleid","pagecontext","contextid","length","then","context","render","html","js","replaceNode","resolve","catch","display","doDelete","deleteid","replaceWith","runTemplateJS","deleteHandler","message","id","competency","get_strings","key","param","shortname","strings","confirm","coursecompetencyid","target","ruleoutcome","val","click","preventDefault","closest"],"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 .\n\n/**\n * Handle add/remove competency links.\n *\n * @module tool_lp/competencies\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/str',\n 'tool_lp/competencypicker',\n 'tool_lp/dragdrop-reorder',\n 'core/pending'],\n function($, notification, ajax, templates, str, Picker, dragdrop, Pending) {\n\n /**\n * Constructor\n *\n * @param {Number} itemid\n * @param {String} itemtype\n * @param {Number} pagectxid\n */\n var competencies = function(itemid, itemtype, pagectxid) {\n this.itemid = itemid;\n this.itemtype = itemtype;\n this.pageContextId = pagectxid;\n this.pickerInstance = null;\n\n $('[data-region=\"actions\"] button').prop('disabled', false);\n this.registerEvents();\n this.registerDragDrop();\n };\n\n /**\n * Initialise the drag/drop code.\n * @method registerDragDrop\n */\n competencies.prototype.registerDragDrop = function() {\n var localthis = this;\n // Init this module.\n str.get_string('movecompetency', 'tool_lp').done(\n function(movestring) {\n dragdrop.dragdrop('movecompetency',\n movestring,\n {identifier: 'movecompetency', component: 'tool_lp'},\n {identifier: 'movecompetencyafter', component: 'tool_lp'},\n 'drag-samenode',\n 'drag-parentnode',\n 'drag-handlecontainer',\n function(drag, drop) {\n localthis.handleDrop(drag, drop);\n });\n }\n ).fail(notification.exception);\n\n };\n\n /**\n * Handle a drop from a drag/drop operation.\n *\n * @method handleDrop\n * @param {DOMNode} drag The dragged node.\n * @param {DOMNode} drop The dropped on node.\n */\n competencies.prototype.handleDrop = function(drag, drop) {\n var fromid = $(drag).data('id');\n var toid = $(drop).data('id');\n var localthis = this;\n var requests = [];\n\n if (localthis.itemtype == 'course') {\n requests = ajax.call([\n {\n methodname: 'core_competency_reorder_course_competency',\n args: {courseid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid}\n }\n ]);\n } else if (localthis.itemtype == 'template') {\n requests = ajax.call([\n {\n methodname: 'core_competency_reorder_template_competency',\n args: {templateid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid}\n }\n ]);\n } else if (localthis.itemtype == 'plan') {\n requests = ajax.call([\n {\n methodname: 'core_competency_reorder_plan_competency',\n args: {planid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid}\n }\n ]);\n } else {\n return;\n }\n\n requests[0].fail(notification.exception);\n };\n\n /**\n * Pick a competency\n *\n * @method pickCompetency\n * @return {Promise}\n */\n competencies.prototype.pickCompetency = function() {\n var self = this;\n var requests;\n var pagerender;\n var pageregion;\n var pageContextIncludes;\n\n if (!self.pickerInstance) {\n if (self.itemtype === 'template' || self.itemtype === 'course') {\n pageContextIncludes = 'parents';\n }\n self.pickerInstance = new Picker(self.pageContextId, false, pageContextIncludes);\n self.pickerInstance.on('save', function(e, data) {\n var compIds = data.competencyIds;\n var pendingPromise = new Pending();\n\n if (self.itemtype === \"course\") {\n requests = [];\n\n $.each(compIds, function(index, compId) {\n requests.push({\n methodname: 'core_competency_add_competency_to_course',\n args: {courseid: self.itemid, competencyid: compId}\n });\n });\n requests.push({\n methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: self.itemid, moduleid: 0}\n });\n\n pagerender = 'tool_lp/course_competencies_page';\n pageregion = 'coursecompetenciespage';\n\n } else if (self.itemtype === \"template\") {\n requests = [];\n\n $.each(compIds, function(index, compId) {\n requests.push({\n methodname: 'core_competency_add_competency_to_template',\n args: {templateid: self.itemid, competencyid: compId}\n });\n });\n requests.push({\n methodname: 'tool_lp_data_for_template_competencies_page',\n args: {templateid: self.itemid, pagecontext: {contextid: self.pageContextId}}\n });\n pagerender = 'tool_lp/template_competencies_page';\n pageregion = 'templatecompetenciespage';\n } else if (self.itemtype === \"plan\") {\n requests = [];\n\n $.each(compIds, function(index, compId) {\n requests.push({\n methodname: 'core_competency_add_competency_to_plan',\n args: {planid: self.itemid, competencyid: compId}\n });\n });\n requests.push({\n methodname: 'tool_lp_data_for_plan_page',\n args: {planid: self.itemid}\n });\n pagerender = 'tool_lp/plan_page';\n pageregion = 'plan-page';\n }\n ajax.call(requests)[requests.length - 1]\n .then(function(context) {\n return templates.render(pagerender, context);\n })\n .then(function(html, js) {\n templates.replaceNode($('[data-region=\"' + pageregion + '\"]'), html, js);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n\n return self.pickerInstance.display();\n };\n\n /**\n * Delete the link between competency and course, template or plan. Reload the page.\n *\n * @method doDelete\n * @param {int} deleteid The id of record to delete.\n */\n competencies.prototype.doDelete = function(deleteid) {\n var localthis = this;\n var requests = [],\n pagerender = '',\n pageregion = '';\n\n // Delete the link and reload the page template.\n if (localthis.itemtype == 'course') {\n requests = ajax.call([\n {methodname: 'core_competency_remove_competency_from_course',\n args: {courseid: localthis.itemid, competencyid: deleteid}},\n {methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: localthis.itemid, moduleid: 0}}\n ]);\n pagerender = 'tool_lp/course_competencies_page';\n pageregion = 'coursecompetenciespage';\n } else if (localthis.itemtype == 'template') {\n requests = ajax.call([\n {methodname: 'core_competency_remove_competency_from_template',\n args: {templateid: localthis.itemid, competencyid: deleteid}},\n {methodname: 'tool_lp_data_for_template_competencies_page',\n args: {templateid: localthis.itemid, pagecontext: {contextid: localthis.pageContextId}}}\n ]);\n pagerender = 'tool_lp/template_competencies_page';\n pageregion = 'templatecompetenciespage';\n } else if (localthis.itemtype == 'plan') {\n requests = ajax.call([\n {methodname: 'core_competency_remove_competency_from_plan',\n args: {planid: localthis.itemid, competencyid: deleteid}},\n {methodname: 'tool_lp_data_for_plan_page',\n args: {planid: localthis.itemid}}\n ]);\n pagerender = 'tool_lp/plan_page';\n pageregion = 'plan-page';\n }\n\n requests[1].done(function(context) {\n templates.render(pagerender, context).done(function(html, js) {\n $('[data-region=\"' + pageregion + '\"]').replaceWith(html);\n templates.runTemplateJS(js);\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Show a confirm dialogue before deleting a competency.\n *\n * @method deleteHandler\n * @param {int} deleteid The id of record to delete.\n */\n competencies.prototype.deleteHandler = function(deleteid) {\n var localthis = this;\n var requests = [];\n var message;\n\n if (localthis.itemtype == 'course') {\n message = 'unlinkcompetencycourse';\n } else if (localthis.itemtype == 'template') {\n message = 'unlinkcompetencytemplate';\n } else if (localthis.itemtype == 'plan') {\n message = 'unlinkcompetencyplan';\n } else {\n return;\n }\n\n requests = ajax.call([{\n methodname: 'core_competency_read_competency',\n args: {id: deleteid}\n }]);\n\n requests[0].done(function(competency) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: message, component: 'tool_lp', param: competency.shortname},\n {key: 'confirm', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Unlink the competency X from the course?\n strings[2], // Confirm.\n strings[3], // Cancel.\n function() {\n localthis.doDelete(deleteid);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Register the javascript event handlers for this page.\n *\n * @method registerEvents\n */\n competencies.prototype.registerEvents = function() {\n var localthis = this;\n\n if (localthis.itemtype == 'course') {\n // Course completion rule handling.\n $('[data-region=\"coursecompetenciespage\"]').on('change', 'select[data-field=\"ruleoutcome\"]', function(e) {\n var pendingPromise = new Pending();\n var requests = [];\n var pagerender = 'tool_lp/course_competencies_page';\n var pageregion = 'coursecompetenciespage';\n var coursecompetencyid = $(e.target).data('id');\n var ruleoutcome = $(e.target).val();\n requests = ajax.call([\n {methodname: 'core_competency_set_course_competency_ruleoutcome',\n args: {coursecompetencyid: coursecompetencyid, ruleoutcome: ruleoutcome}},\n {methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: localthis.itemid, moduleid: 0}}\n ]);\n\n requests[1].then(function(context) {\n return templates.render(pagerender, context);\n })\n .then(function(html, js) {\n return templates.replaceNode($('[data-region=\"' + pageregion + '\"]'), html, js);\n })\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n\n $('[data-region=\"actions\"] button').click(function(e) {\n var pendingPromise = new Pending();\n e.preventDefault();\n\n localthis.pickCompetency()\n .then(pendingPromise.resolve)\n .catch();\n });\n $('[data-action=\"delete-competency-link\"]').click(function(e) {\n e.preventDefault();\n\n var deleteid = $(e.target).closest('[data-id]').data('id');\n localthis.deleteHandler(deleteid);\n });\n };\n\n return /** @alias module:tool_lp/competencies */ competencies;\n});\n"],"file":"competencies.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencies.js"],"names":["define","$","notification","ajax","templates","str","Picker","dragdrop","Pending","competencies","itemid","itemtype","pagectxid","pageContextId","pickerInstance","prop","registerEvents","registerDragDrop","prototype","localthis","get_string","done","movestring","identifier","component","drag","drop","handleDrop","fail","exception","fromid","data","toid","requests","call","methodname","args","courseid","competencyidfrom","competencyidto","templateid","planid","pickCompetency","self","pagerender","pageregion","pageContextIncludes","on","e","compIds","competencyIds","pendingPromise","each","index","compId","push","competencyid","moduleid","pagecontext","contextid","length","then","context","render","html","js","replaceNode","resolve","catch","display","doDelete","deleteid","replaceWith","runTemplateJS","deleteHandler","message","id","competency","get_strings","key","param","shortname","strings","confirm","coursecompetencyid","target","ruleoutcome","val","click","preventDefault","closest"],"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 .\n\n/**\n * Handle add/remove competency links.\n *\n * @module tool_lp/competencies\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/str',\n 'tool_lp/competencypicker',\n 'tool_lp/dragdrop-reorder',\n 'core/pending'],\n function($, notification, ajax, templates, str, Picker, dragdrop, Pending) {\n\n /**\n * Constructor\n *\n * @param {Number} itemid\n * @param {String} itemtype\n * @param {Number} pagectxid\n */\n var competencies = function(itemid, itemtype, pagectxid) {\n this.itemid = itemid;\n this.itemtype = itemtype;\n this.pageContextId = pagectxid;\n this.pickerInstance = null;\n\n $('[data-region=\"actions\"] button').prop('disabled', false);\n this.registerEvents();\n this.registerDragDrop();\n };\n\n /**\n * Initialise the drag/drop code.\n * @method registerDragDrop\n */\n competencies.prototype.registerDragDrop = function() {\n var localthis = this;\n // Init this module.\n str.get_string('movecompetency', 'tool_lp').done(\n function(movestring) {\n dragdrop.dragdrop('movecompetency',\n movestring,\n {identifier: 'movecompetency', component: 'tool_lp'},\n {identifier: 'movecompetencyafter', component: 'tool_lp'},\n 'drag-samenode',\n 'drag-parentnode',\n 'drag-handlecontainer',\n function(drag, drop) {\n localthis.handleDrop(drag, drop);\n });\n }\n ).fail(notification.exception);\n\n };\n\n /**\n * Handle a drop from a drag/drop operation.\n *\n * @method handleDrop\n * @param {DOMNode} drag The dragged node.\n * @param {DOMNode} drop The dropped on node.\n */\n competencies.prototype.handleDrop = function(drag, drop) {\n var fromid = $(drag).data('id');\n var toid = $(drop).data('id');\n var localthis = this;\n var requests = [];\n\n if (localthis.itemtype == 'course') {\n requests = ajax.call([\n {\n methodname: 'core_competency_reorder_course_competency',\n args: {courseid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid}\n }\n ]);\n } else if (localthis.itemtype == 'template') {\n requests = ajax.call([\n {\n methodname: 'core_competency_reorder_template_competency',\n args: {templateid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid}\n }\n ]);\n } else if (localthis.itemtype == 'plan') {\n requests = ajax.call([\n {\n methodname: 'core_competency_reorder_plan_competency',\n args: {planid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid}\n }\n ]);\n } else {\n return;\n }\n\n requests[0].fail(notification.exception);\n };\n\n /**\n * Pick a competency\n *\n * @method pickCompetency\n * @return {Promise}\n */\n competencies.prototype.pickCompetency = function() {\n var self = this;\n var requests;\n var pagerender;\n var pageregion;\n var pageContextIncludes;\n\n if (!self.pickerInstance) {\n if (self.itemtype === 'template' || self.itemtype === 'course') {\n pageContextIncludes = 'parents';\n }\n self.pickerInstance = new Picker(self.pageContextId, false, pageContextIncludes);\n self.pickerInstance.on('save', function(e, data) {\n var compIds = data.competencyIds;\n var pendingPromise = new Pending();\n\n if (self.itemtype === \"course\") {\n requests = [];\n\n $.each(compIds, function(index, compId) {\n requests.push({\n methodname: 'core_competency_add_competency_to_course',\n args: {courseid: self.itemid, competencyid: compId}\n });\n });\n requests.push({\n methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: self.itemid, moduleid: 0}\n });\n\n pagerender = 'tool_lp/course_competencies_page';\n pageregion = 'coursecompetenciespage';\n\n } else if (self.itemtype === \"template\") {\n requests = [];\n\n $.each(compIds, function(index, compId) {\n requests.push({\n methodname: 'core_competency_add_competency_to_template',\n args: {templateid: self.itemid, competencyid: compId}\n });\n });\n requests.push({\n methodname: 'tool_lp_data_for_template_competencies_page',\n args: {templateid: self.itemid, pagecontext: {contextid: self.pageContextId}}\n });\n pagerender = 'tool_lp/template_competencies_page';\n pageregion = 'templatecompetenciespage';\n } else if (self.itemtype === \"plan\") {\n requests = [];\n\n $.each(compIds, function(index, compId) {\n requests.push({\n methodname: 'core_competency_add_competency_to_plan',\n args: {planid: self.itemid, competencyid: compId}\n });\n });\n requests.push({\n methodname: 'tool_lp_data_for_plan_page',\n args: {planid: self.itemid}\n });\n pagerender = 'tool_lp/plan_page';\n pageregion = 'plan-page';\n }\n ajax.call(requests)[requests.length - 1]\n .then(function(context) {\n return templates.render(pagerender, context);\n })\n .then(function(html, js) {\n templates.replaceNode($('[data-region=\"' + pageregion + '\"]'), html, js);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n\n return self.pickerInstance.display();\n };\n\n /**\n * Delete the link between competency and course, template or plan. Reload the page.\n *\n * @method doDelete\n * @param {int} deleteid The id of record to delete.\n */\n competencies.prototype.doDelete = function(deleteid) {\n var localthis = this;\n var requests = [],\n pagerender = '',\n pageregion = '';\n\n // Delete the link and reload the page template.\n if (localthis.itemtype == 'course') {\n requests = ajax.call([\n {methodname: 'core_competency_remove_competency_from_course',\n args: {courseid: localthis.itemid, competencyid: deleteid}},\n {methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: localthis.itemid, moduleid: 0}}\n ]);\n pagerender = 'tool_lp/course_competencies_page';\n pageregion = 'coursecompetenciespage';\n } else if (localthis.itemtype == 'template') {\n requests = ajax.call([\n {methodname: 'core_competency_remove_competency_from_template',\n args: {templateid: localthis.itemid, competencyid: deleteid}},\n {methodname: 'tool_lp_data_for_template_competencies_page',\n args: {templateid: localthis.itemid, pagecontext: {contextid: localthis.pageContextId}}}\n ]);\n pagerender = 'tool_lp/template_competencies_page';\n pageregion = 'templatecompetenciespage';\n } else if (localthis.itemtype == 'plan') {\n requests = ajax.call([\n {methodname: 'core_competency_remove_competency_from_plan',\n args: {planid: localthis.itemid, competencyid: deleteid}},\n {methodname: 'tool_lp_data_for_plan_page',\n args: {planid: localthis.itemid}}\n ]);\n pagerender = 'tool_lp/plan_page';\n pageregion = 'plan-page';\n }\n\n requests[1].done(function(context) {\n templates.render(pagerender, context).done(function(html, js) {\n $('[data-region=\"' + pageregion + '\"]').replaceWith(html);\n templates.runTemplateJS(js);\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Show a confirm dialogue before deleting a competency.\n *\n * @method deleteHandler\n * @param {int} deleteid The id of record to delete.\n */\n competencies.prototype.deleteHandler = function(deleteid) {\n var localthis = this;\n var requests = [];\n var message;\n\n if (localthis.itemtype == 'course') {\n message = 'unlinkcompetencycourse';\n } else if (localthis.itemtype == 'template') {\n message = 'unlinkcompetencytemplate';\n } else if (localthis.itemtype == 'plan') {\n message = 'unlinkcompetencyplan';\n } else {\n return;\n }\n\n requests = ajax.call([{\n methodname: 'core_competency_read_competency',\n args: {id: deleteid}\n }]);\n\n requests[0].done(function(competency) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: message, component: 'tool_lp', param: competency.shortname},\n {key: 'confirm', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Unlink the competency X from the course?\n strings[2], // Confirm.\n strings[3], // Cancel.\n function() {\n localthis.doDelete(deleteid);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Register the javascript event handlers for this page.\n *\n * @method registerEvents\n */\n competencies.prototype.registerEvents = function() {\n var localthis = this;\n\n if (localthis.itemtype == 'course') {\n // Course completion rule handling.\n $('[data-region=\"coursecompetenciespage\"]').on('change', 'select[data-field=\"ruleoutcome\"]', function(e) {\n var pendingPromise = new Pending();\n var requests = [];\n var pagerender = 'tool_lp/course_competencies_page';\n var pageregion = 'coursecompetenciespage';\n var coursecompetencyid = $(e.target).data('id');\n var ruleoutcome = $(e.target).val();\n requests = ajax.call([\n {methodname: 'core_competency_set_course_competency_ruleoutcome',\n args: {coursecompetencyid: coursecompetencyid, ruleoutcome: ruleoutcome}},\n {methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: localthis.itemid, moduleid: 0}}\n ]);\n\n requests[1].then(function(context) {\n return templates.render(pagerender, context);\n })\n .then(function(html, js) {\n return templates.replaceNode($('[data-region=\"' + pageregion + '\"]'), html, js);\n })\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n\n $('[data-region=\"actions\"] button').click(function(e) {\n var pendingPromise = new Pending();\n e.preventDefault();\n\n localthis.pickCompetency()\n .then(pendingPromise.resolve)\n .catch();\n });\n $('[data-action=\"delete-competency-link\"]').click(function(e) {\n e.preventDefault();\n\n var deleteid = $(e.target).closest('[data-id]').data('id');\n localthis.deleteHandler(deleteid);\n });\n };\n\n return /** @alias module:tool_lp/competencies */ competencies;\n});\n"],"file":"competencies.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competency_outcomes.min.js.map b/admin/tool/lp/amd/build/competency_outcomes.min.js.map index 9d51fae5228..f53bc693d85 100644 --- a/admin/tool/lp/amd/build/competency_outcomes.min.js.map +++ b/admin/tool/lp/amd/build/competency_outcomes.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competency_outcomes.js"],"names":["define","$","Str","NONE","EVIDENCE","COMPLETE","RECOMMEND","getAll","self","get_strings","key","component","then","strings","outcomes","code","name","getString","id","all","Deferred","reject","promise"],"mappings":"AAuBAA,OAAM,+BAAC,CAAC,QAAD,CACC,UADD,CAAD,CAEE,SAASC,CAAT,CAAYC,CAAZ,CAAiB,CAOrB,MAAwD,CAEpDC,IAAI,EAFgD,CAGpDC,QAAQ,EAH4C,CAIpDC,QAAQ,EAJ4C,CAKpDC,SAAS,EAL2C,CAapDC,MAAM,CAAE,iBAAW,CACf,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACA,MAAON,CAAAA,CAAG,CAACO,WAAJ,CAAgB,CACnB,CAACC,GAAG,CAAE,wBAAN,CAAgCC,SAAS,CAAE,SAA3C,CADmB,CAEnB,CAACD,GAAG,CAAE,4BAAN,CAAoCC,SAAS,CAAE,SAA/C,CAFmB,CAGnB,CAACD,GAAG,CAAE,6BAAN,CAAqCC,SAAS,CAAE,SAAhD,CAHmB,CAInB,CAACD,GAAG,CAAE,4BAAN,CAAoCC,SAAS,CAAE,SAA/C,CAJmB,CAAhB,EAKJC,IALI,CAKC,SAASC,CAAT,CAAkB,CACtB,GAAIC,CAAAA,CAAQ,CAAG,EAAf,CACAA,CAAQ,CAACN,CAAI,CAACL,IAAN,CAAR,CAAsB,CAACY,IAAI,CAAEP,CAAI,CAACL,IAAZ,CAAkBa,IAAI,CAAEH,CAAO,CAAC,CAAD,CAA/B,CAAtB,CACAC,CAAQ,CAACN,CAAI,CAACJ,QAAN,CAAR,CAA0B,CAACW,IAAI,CAAEP,CAAI,CAACJ,QAAZ,CAAsBY,IAAI,CAAEH,CAAO,CAAC,CAAD,CAAnC,CAA1B,CACAC,CAAQ,CAACN,CAAI,CAACF,SAAN,CAAR,CAA2B,CAACS,IAAI,CAAEP,CAAI,CAACF,SAAZ,CAAuBU,IAAI,CAAEH,CAAO,CAAC,CAAD,CAApC,CAA3B,CACAC,CAAQ,CAACN,CAAI,CAACH,QAAN,CAAR,CAA0B,CAACU,IAAI,CAAEP,CAAI,CAACH,QAAZ,CAAsBW,IAAI,CAAEH,CAAO,CAAC,CAAD,CAAnC,CAA1B,CACA,MAAOC,CAAAA,CACV,CAZM,CAaV,CA5BmD,CAqCpDG,SAAS,CAAE,mBAASC,CAAT,CAAa,CACpB,GAAIV,CAAAA,CAAI,CAAG,IAAX,CACIW,CAAG,CAAGX,CAAI,CAACD,MAAL,EADV,CAGA,MAAOY,CAAAA,CAAG,CAACP,IAAJ,CAAS,SAASE,CAAT,CAAmB,CAC/B,GAA4B,WAAxB,QAAOA,CAAAA,CAAQ,CAACI,CAAD,CAAnB,CAAyC,CACrC,MAAOjB,CAAAA,CAAC,CAACmB,QAAF,GAAaC,MAAb,GAAsBC,OAAtB,EACV,CACD,MAAOR,CAAAA,CAAQ,CAACI,CAAD,CAAR,CAAaF,IACvB,CALM,CAMV,CA/CmD,CAkD3D,CA3DK,CAAN","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 .\n\n/**\n * Competency rule config.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/str'],\n function($, Str) {\n\n var OUTCOME_NONE = 0,\n OUTCOME_EVIDENCE = 1,\n OUTCOME_COMPLETE = 2,\n OUTCOME_RECOMMEND = 3;\n\n return /** @alias module:tool_lp/competency_outcomes */ {\n\n NONE: OUTCOME_NONE,\n EVIDENCE: OUTCOME_EVIDENCE,\n COMPLETE: OUTCOME_COMPLETE,\n RECOMMEND: OUTCOME_RECOMMEND,\n\n /**\n * Get all the outcomes.\n *\n * @return {Object} Indexed by outcome code, contains code and name.\n * @method getAll\n */\n getAll: function() {\n var self = this;\n return Str.get_strings([\n {key: 'competencyoutcome_none', component: 'tool_lp'},\n {key: 'competencyoutcome_evidence', component: 'tool_lp'},\n {key: 'competencyoutcome_recommend', component: 'tool_lp'},\n {key: 'competencyoutcome_complete', component: 'tool_lp'},\n ]).then(function(strings) {\n var outcomes = {};\n outcomes[self.NONE] = {code: self.NONE, name: strings[0]};\n outcomes[self.EVIDENCE] = {code: self.EVIDENCE, name: strings[1]};\n outcomes[self.RECOMMEND] = {code: self.RECOMMEND, name: strings[2]};\n outcomes[self.COMPLETE] = {code: self.COMPLETE, name: strings[3]};\n return outcomes;\n });\n },\n\n /**\n * Get the string for an outcome.\n *\n * @param {Number} id The outcome code.\n * @return {Promise} Resolved with the string.\n * @method getString\n */\n getString: function(id) {\n var self = this,\n all = self.getAll();\n\n return all.then(function(outcomes) {\n if (typeof outcomes[id] === 'undefined') {\n return $.Deferred().reject().promise();\n }\n return outcomes[id].name;\n });\n }\n };\n\n});\n"],"file":"competency_outcomes.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competency_outcomes.js"],"names":["define","$","Str","NONE","EVIDENCE","COMPLETE","RECOMMEND","getAll","self","get_strings","key","component","then","strings","outcomes","code","name","getString","id","all","Deferred","reject","promise"],"mappings":"AAsBAA,OAAM,+BAAC,CAAC,QAAD,CACC,UADD,CAAD,CAEE,SAASC,CAAT,CAAYC,CAAZ,CAAiB,CAOrB,MAAwD,CAEpDC,IAAI,EAFgD,CAGpDC,QAAQ,EAH4C,CAIpDC,QAAQ,EAJ4C,CAKpDC,SAAS,EAL2C,CAapDC,MAAM,CAAE,iBAAW,CACf,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACA,MAAON,CAAAA,CAAG,CAACO,WAAJ,CAAgB,CACnB,CAACC,GAAG,CAAE,wBAAN,CAAgCC,SAAS,CAAE,SAA3C,CADmB,CAEnB,CAACD,GAAG,CAAE,4BAAN,CAAoCC,SAAS,CAAE,SAA/C,CAFmB,CAGnB,CAACD,GAAG,CAAE,6BAAN,CAAqCC,SAAS,CAAE,SAAhD,CAHmB,CAInB,CAACD,GAAG,CAAE,4BAAN,CAAoCC,SAAS,CAAE,SAA/C,CAJmB,CAAhB,EAKJC,IALI,CAKC,SAASC,CAAT,CAAkB,CACtB,GAAIC,CAAAA,CAAQ,CAAG,EAAf,CACAA,CAAQ,CAACN,CAAI,CAACL,IAAN,CAAR,CAAsB,CAACY,IAAI,CAAEP,CAAI,CAACL,IAAZ,CAAkBa,IAAI,CAAEH,CAAO,CAAC,CAAD,CAA/B,CAAtB,CACAC,CAAQ,CAACN,CAAI,CAACJ,QAAN,CAAR,CAA0B,CAACW,IAAI,CAAEP,CAAI,CAACJ,QAAZ,CAAsBY,IAAI,CAAEH,CAAO,CAAC,CAAD,CAAnC,CAA1B,CACAC,CAAQ,CAACN,CAAI,CAACF,SAAN,CAAR,CAA2B,CAACS,IAAI,CAAEP,CAAI,CAACF,SAAZ,CAAuBU,IAAI,CAAEH,CAAO,CAAC,CAAD,CAApC,CAA3B,CACAC,CAAQ,CAACN,CAAI,CAACH,QAAN,CAAR,CAA0B,CAACU,IAAI,CAAEP,CAAI,CAACH,QAAZ,CAAsBW,IAAI,CAAEH,CAAO,CAAC,CAAD,CAAnC,CAA1B,CACA,MAAOC,CAAAA,CACV,CAZM,CAaV,CA5BmD,CAqCpDG,SAAS,CAAE,mBAASC,CAAT,CAAa,CACpB,GAAIV,CAAAA,CAAI,CAAG,IAAX,CACIW,CAAG,CAAGX,CAAI,CAACD,MAAL,EADV,CAGA,MAAOY,CAAAA,CAAG,CAACP,IAAJ,CAAS,SAASE,CAAT,CAAmB,CAC/B,GAA4B,WAAxB,QAAOA,CAAAA,CAAQ,CAACI,CAAD,CAAnB,CAAyC,CACrC,MAAOjB,CAAAA,CAAC,CAACmB,QAAF,GAAaC,MAAb,GAAsBC,OAAtB,EACV,CACD,MAAOR,CAAAA,CAAQ,CAACI,CAAD,CAAR,CAAaF,IACvB,CALM,CAMV,CA/CmD,CAkD3D,CA3DK,CAAN","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 .\n\n/**\n * Competency rule config.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/str'],\n function($, Str) {\n\n var OUTCOME_NONE = 0,\n OUTCOME_EVIDENCE = 1,\n OUTCOME_COMPLETE = 2,\n OUTCOME_RECOMMEND = 3;\n\n return /** @alias module:tool_lp/competency_outcomes */ {\n\n NONE: OUTCOME_NONE,\n EVIDENCE: OUTCOME_EVIDENCE,\n COMPLETE: OUTCOME_COMPLETE,\n RECOMMEND: OUTCOME_RECOMMEND,\n\n /**\n * Get all the outcomes.\n *\n * @return {Object} Indexed by outcome code, contains code and name.\n * @method getAll\n */\n getAll: function() {\n var self = this;\n return Str.get_strings([\n {key: 'competencyoutcome_none', component: 'tool_lp'},\n {key: 'competencyoutcome_evidence', component: 'tool_lp'},\n {key: 'competencyoutcome_recommend', component: 'tool_lp'},\n {key: 'competencyoutcome_complete', component: 'tool_lp'},\n ]).then(function(strings) {\n var outcomes = {};\n outcomes[self.NONE] = {code: self.NONE, name: strings[0]};\n outcomes[self.EVIDENCE] = {code: self.EVIDENCE, name: strings[1]};\n outcomes[self.RECOMMEND] = {code: self.RECOMMEND, name: strings[2]};\n outcomes[self.COMPLETE] = {code: self.COMPLETE, name: strings[3]};\n return outcomes;\n });\n },\n\n /**\n * Get the string for an outcome.\n *\n * @param {Number} id The outcome code.\n * @return {Promise} Resolved with the string.\n * @method getString\n */\n getString: function(id) {\n var self = this,\n all = self.getAll();\n\n return all.then(function(outcomes) {\n if (typeof outcomes[id] === 'undefined') {\n return $.Deferred().reject().promise();\n }\n return outcomes[id].name;\n });\n }\n };\n\n});\n"],"file":"competency_outcomes.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competency_plan_navigation.min.js.map b/admin/tool/lp/amd/build/competency_plan_navigation.min.js.map index bb2bb21e3e0..9047a303b22 100644 --- a/admin/tool/lp/amd/build/competency_plan_navigation.min.js.map +++ b/admin/tool/lp/amd/build/competency_plan_navigation.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competency_plan_navigation.js"],"names":["define","$","CompetencyPlanNavigation","competencySelector","baseUrl","userId","competencyId","planId","_baseUrl","_userId","_competencyId","_planId","_ignoreFirstCompetency","on","_competencyChanged","bind","prototype","e","newCompetencyId","target","val","queryStr","document","location"],"mappings":"AAuBAA,OAAM,sCAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAW3B,GAAIC,CAAAA,CAAwB,CAAG,SAASC,CAAT,CAA6BC,CAA7B,CAAsCC,CAAtC,CAA8CC,CAA9C,CAA4DC,CAA5D,CAAoE,CAC/F,KAAKC,QAAL,CAAgBJ,CAAhB,CACA,KAAKK,OAAL,CAAeJ,CAAM,CAAG,EAAxB,CACA,KAAKK,aAAL,CAAqBJ,CAAY,CAAG,EAApC,CACA,KAAKK,OAAL,CAAeJ,CAAf,CACA,KAAKK,sBAAL,IAEAX,CAAC,CAACE,CAAD,CAAD,CAAsBU,EAAtB,CAAyB,QAAzB,CAAmC,KAAKC,kBAAL,CAAwBC,IAAxB,CAA6B,IAA7B,CAAnC,CACH,CARD,CAgBAb,CAAwB,CAACc,SAAzB,CAAmCF,kBAAnC,CAAwD,SAASG,CAAT,CAAY,CAChE,GAAI,KAAKL,sBAAT,CAAiC,CAC7B,KAAKA,sBAAL,IACA,MACH,CAJ+D,GAK5DM,CAAAA,CAAe,CAAGjB,CAAC,CAACgB,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EAL0C,CAM5DC,CAAQ,CAAG,WAAa,KAAKZ,OAAlB,CAA4B,UAA5B,CAAyC,KAAKE,OAA9C,CAAwD,gBAAxD,CAA2EO,CAN1B,CAOhEI,QAAQ,CAACC,QAAT,CAAoB,KAAKf,QAAL,CAAgBa,CACvC,CARD,CAWAnB,CAAwB,CAACc,SAAzB,CAAmCN,aAAnC,CAAmD,IAAnD,CAEAR,CAAwB,CAACc,SAAzB,CAAmCP,OAAnC,CAA6C,IAA7C,CAEAP,CAAwB,CAACc,SAAzB,CAAmCL,OAAnC,CAA6C,IAA7C,CAEAT,CAAwB,CAACc,SAAzB,CAAmCR,QAAnC,CAA8C,IAA9C,CAEAN,CAAwB,CAACc,SAAzB,CAAmCJ,sBAAnC,CAA4D,IAA5D,CAEA,MAA+DV,CAAAA,CAElE,CAlDK,CAAN","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 .\n\n/**\n * Event click on selecting competency in the competency autocomplete.\n *\n * @package tool_lp\n * @copyright 2016 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * CompetencyPlanNavigation\n *\n * @param {String} competencySelector The selector of the competency element.\n * @param {String} baseUrl The base url for the page (no params).\n * @param {Number} userId The user id\n * @param {Number} competencyId The competency id\n * @param {Number} planId The plan id\n */\n var CompetencyPlanNavigation = function(competencySelector, baseUrl, userId, competencyId, planId) {\n this._baseUrl = baseUrl;\n this._userId = userId + '';\n this._competencyId = competencyId + '';\n this._planId = planId;\n this._ignoreFirstCompetency = true;\n\n $(competencySelector).on('change', this._competencyChanged.bind(this));\n };\n\n /**\n * The competency was changed in the select list.\n *\n * @method _competencyChanged\n * @param {Event} e\n */\n CompetencyPlanNavigation.prototype._competencyChanged = function(e) {\n if (this._ignoreFirstCompetency) {\n this._ignoreFirstCompetency = false;\n return;\n }\n var newCompetencyId = $(e.target).val();\n var queryStr = '?userid=' + this._userId + '&planid=' + this._planId + '&competencyid=' + newCompetencyId;\n document.location = this._baseUrl + queryStr;\n };\n\n /** @type {Number} The id of the competency. */\n CompetencyPlanNavigation.prototype._competencyId = null;\n /** @type {Number} The id of the user. */\n CompetencyPlanNavigation.prototype._userId = null;\n /** @type {Number} The id of the plan. */\n CompetencyPlanNavigation.prototype._planId = null;\n /** @type {String} Plugin base url. */\n CompetencyPlanNavigation.prototype._baseUrl = null;\n /** @type {Boolean} Ignore the first change event for competencies. */\n CompetencyPlanNavigation.prototype._ignoreFirstCompetency = null;\n\n return /** @alias module:tool_lp/competency_plan_navigation */ CompetencyPlanNavigation;\n\n});\n"],"file":"competency_plan_navigation.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competency_plan_navigation.js"],"names":["define","$","CompetencyPlanNavigation","competencySelector","baseUrl","userId","competencyId","planId","_baseUrl","_userId","_competencyId","_planId","_ignoreFirstCompetency","on","_competencyChanged","bind","prototype","e","newCompetencyId","target","val","queryStr","document","location"],"mappings":"AAsBAA,OAAM,sCAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAW3B,GAAIC,CAAAA,CAAwB,CAAG,SAASC,CAAT,CAA6BC,CAA7B,CAAsCC,CAAtC,CAA8CC,CAA9C,CAA4DC,CAA5D,CAAoE,CAC/F,KAAKC,QAAL,CAAgBJ,CAAhB,CACA,KAAKK,OAAL,CAAeJ,CAAM,CAAG,EAAxB,CACA,KAAKK,aAAL,CAAqBJ,CAAY,CAAG,EAApC,CACA,KAAKK,OAAL,CAAeJ,CAAf,CACA,KAAKK,sBAAL,IAEAX,CAAC,CAACE,CAAD,CAAD,CAAsBU,EAAtB,CAAyB,QAAzB,CAAmC,KAAKC,kBAAL,CAAwBC,IAAxB,CAA6B,IAA7B,CAAnC,CACH,CARD,CAgBAb,CAAwB,CAACc,SAAzB,CAAmCF,kBAAnC,CAAwD,SAASG,CAAT,CAAY,CAChE,GAAI,KAAKL,sBAAT,CAAiC,CAC7B,KAAKA,sBAAL,IACA,MACH,CAJ+D,GAK5DM,CAAAA,CAAe,CAAGjB,CAAC,CAACgB,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EAL0C,CAM5DC,CAAQ,CAAG,WAAa,KAAKZ,OAAlB,CAA4B,UAA5B,CAAyC,KAAKE,OAA9C,CAAwD,gBAAxD,CAA2EO,CAN1B,CAOhEI,QAAQ,CAACC,QAAT,CAAoB,KAAKf,QAAL,CAAgBa,CACvC,CARD,CAWAnB,CAAwB,CAACc,SAAzB,CAAmCN,aAAnC,CAAmD,IAAnD,CAEAR,CAAwB,CAACc,SAAzB,CAAmCP,OAAnC,CAA6C,IAA7C,CAEAP,CAAwB,CAACc,SAAzB,CAAmCL,OAAnC,CAA6C,IAA7C,CAEAT,CAAwB,CAACc,SAAzB,CAAmCR,QAAnC,CAA8C,IAA9C,CAEAN,CAAwB,CAACc,SAAzB,CAAmCJ,sBAAnC,CAA4D,IAA5D,CAEA,MAA+DV,CAAAA,CAElE,CAlDK,CAAN","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 .\n\n/**\n * Event click on selecting competency in the competency autocomplete.\n *\n * @copyright 2016 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * CompetencyPlanNavigation\n *\n * @param {String} competencySelector The selector of the competency element.\n * @param {String} baseUrl The base url for the page (no params).\n * @param {Number} userId The user id\n * @param {Number} competencyId The competency id\n * @param {Number} planId The plan id\n */\n var CompetencyPlanNavigation = function(competencySelector, baseUrl, userId, competencyId, planId) {\n this._baseUrl = baseUrl;\n this._userId = userId + '';\n this._competencyId = competencyId + '';\n this._planId = planId;\n this._ignoreFirstCompetency = true;\n\n $(competencySelector).on('change', this._competencyChanged.bind(this));\n };\n\n /**\n * The competency was changed in the select list.\n *\n * @method _competencyChanged\n * @param {Event} e\n */\n CompetencyPlanNavigation.prototype._competencyChanged = function(e) {\n if (this._ignoreFirstCompetency) {\n this._ignoreFirstCompetency = false;\n return;\n }\n var newCompetencyId = $(e.target).val();\n var queryStr = '?userid=' + this._userId + '&planid=' + this._planId + '&competencyid=' + newCompetencyId;\n document.location = this._baseUrl + queryStr;\n };\n\n /** @property {Number} The id of the competency. */\n CompetencyPlanNavigation.prototype._competencyId = null;\n /** @property {Number} The id of the user. */\n CompetencyPlanNavigation.prototype._userId = null;\n /** @property {Number} The id of the plan. */\n CompetencyPlanNavigation.prototype._planId = null;\n /** @property {String} Plugin base url. */\n CompetencyPlanNavigation.prototype._baseUrl = null;\n /** @property {Boolean} Ignore the first change event for competencies. */\n CompetencyPlanNavigation.prototype._ignoreFirstCompetency = null;\n\n return /** @alias module:tool_lp/competency_plan_navigation */ CompetencyPlanNavigation;\n\n});\n"],"file":"competency_plan_navigation.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competency_rule.min.js.map b/admin/tool/lp/amd/build/competency_rule.min.js.map index a3f79cf3d6a..b0ef27547b4 100644 --- a/admin/tool/lp/amd/build/competency_rule.min.js.map +++ b/admin/tool/lp/amd/build/competency_rule.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competency_rule.js"],"names":["define","$","Rule","tree","_eventNode","_ready","Deferred","_tree","prototype","_competency","canConfig","hasChildren","id","getConfig","getType","Error","init","_load","injectTemplate","reject","promise","isValid","when","on","type","handler","setTargetCompetency","competency","_trigger","data","trigger","_triggerChange"],"mappings":"AAuBAA,OAAM,2BAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAa3B,GAAIC,CAAAA,CAAI,CAAG,SAASC,CAAT,CAAe,CACtB,KAAKC,UAAL,CAAkBH,CAAC,CAAC,OAAD,CAAnB,CACA,KAAKI,MAAL,CAAcJ,CAAC,CAACK,QAAF,EAAd,CACA,KAAKC,KAAL,CAAaJ,CAChB,CAJD,CAOAD,CAAI,CAACM,SAAL,CAAeC,WAAf,CAA6B,IAA7B,CAEAP,CAAI,CAACM,SAAL,CAAeJ,UAAf,CAA4B,IAA5B,CAEAF,CAAI,CAACM,SAAL,CAAeH,MAAf,CAAwB,IAAxB,CAEAH,CAAI,CAACM,SAAL,CAAeD,KAAf,CAAuB,IAAvB,CAQAL,CAAI,CAACM,SAAL,CAAeE,SAAf,CAA2B,UAAW,CAClC,MAAO,MAAKH,KAAL,CAAWI,WAAX,CAAuB,KAAKF,WAAL,CAAiBG,EAAxC,CACV,CAFD,CAYAV,CAAI,CAACM,SAAL,CAAeK,SAAf,CAA2B,UAAW,CAClC,MAAO,KACV,CAFD,CAWAX,CAAI,CAACM,SAAL,CAAeM,OAAf,CAAyB,UAAW,CAChC,KAAM,IAAIC,CAAAA,KAAJ,CAAU,iBAAV,CACT,CAFD,CAYAb,CAAI,CAACM,SAAL,CAAeQ,IAAf,CAAsB,UAAW,CAC7B,MAAO,MAAKC,KAAL,EACV,CAFD,CAWAf,CAAI,CAACM,SAAL,CAAeU,cAAf,CAAgC,UAAW,CACvC,MAAOjB,CAAAA,CAAC,CAACK,QAAF,GAAaa,MAAb,GAAsBC,OAAtB,EACV,CAFD,CAYAlB,CAAI,CAACM,SAAL,CAAea,OAAf,CAAyB,UAAW,CAChC,QACH,CAFD,CAWAnB,CAAI,CAACM,SAAL,CAAeS,KAAf,CAAuB,UAAW,CAC9B,MAAOhB,CAAAA,CAAC,CAACqB,IAAF,EACV,CAFD,CAWApB,CAAI,CAACM,SAAL,CAAee,EAAf,CAAoB,SAASC,CAAT,CAAeC,CAAf,CAAwB,CACxC,KAAKrB,UAAL,CAAgBmB,EAAhB,CAAmBC,CAAnB,CAAyBC,CAAzB,CACH,CAFD,CAUAvB,CAAI,CAACM,SAAL,CAAekB,mBAAf,CAAqC,SAASC,CAAT,CAAqB,CACtD,KAAKlB,WAAL,CAAmBkB,CACtB,CAFD,CAYAzB,CAAI,CAACM,SAAL,CAAeoB,QAAf,CAA0B,SAASJ,CAAT,CAAeK,CAAf,CAAqB,CAC3C,KAAKzB,UAAL,CAAgB0B,OAAhB,CAAwBN,CAAxB,CAA8B,CAACK,CAAD,CAA9B,CACH,CAFD,CAUA3B,CAAI,CAACM,SAAL,CAAeuB,cAAf,CAAgC,UAAW,CACvC,KAAKH,QAAL,CAAc,QAAd,CAAwB,IAAxB,CACH,CAFD,CAIA,MAAoD1B,CAAAA,CAEvD,CAxJK,CAAN","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 .\n\n/**\n * Competency rule base module.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * Competency rule abstract class.\n *\n * Any competency rule should extend this object. The event 'change' should be\n * triggered on the instance when the configuration has changed. This will allow\n * the components using the rule to gather the config, or check its validity.\n *\n * this._triggerChange();\n *\n * @param {Tree} tree The competency tree.\n */\n var Rule = function(tree) {\n this._eventNode = $('
');\n this._ready = $.Deferred();\n this._tree = tree;\n };\n\n /** @type {Object} The current competency. */\n Rule.prototype._competency = null;\n /** @type {Node} The node we attach the events to. */\n Rule.prototype._eventNode = null;\n /** @type {Promise} Resolved when the object is ready. */\n Rule.prototype._ready = null;\n /** @type {Tree} The competency tree. */\n Rule.prototype._tree = null;\n\n /**\n * Whether or not the current competency can be configured using this rule.\n *\n * @return {Boolean}\n * @method canConfig\n */\n Rule.prototype.canConfig = function() {\n return this._tree.hasChildren(this._competency.id);\n };\n\n /**\n * The config established by this rule.\n *\n * To override in subclasses when relevant.\n *\n * @return {String|null}\n * @method getConfig\n */\n Rule.prototype.getConfig = function() {\n return null;\n };\n\n // eslint-disable-next-line valid-jsdoc\n /**\n * Return the type of the module.\n *\n * @return {String}\n * @method getType\n */\n Rule.prototype.getType = function() {\n throw new Error('Not implemented');\n };\n\n /**\n * The init process.\n *\n * Do not override this, instead override _load.\n *\n * @return {Promise} Revoled when the plugin is initialised.\n * @method init\n */\n Rule.prototype.init = function() {\n return this._load();\n };\n\n /**\n * Callback to inject the template.\n *\n * @param {Node} container Node to inject in.\n * @return {Promise} Resolved when done.\n * @method injectTemplate\n */\n Rule.prototype.injectTemplate = function() {\n return $.Deferred().reject().promise();\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * Plugins should override this.\n *\n * @return {Boolean}\n * @method _isValid\n */\n Rule.prototype.isValid = function() {\n return false;\n };\n\n /**\n * Load the class.\n *\n * @return {Promise}\n * @method _load\n * @protected\n */\n Rule.prototype._load = function() {\n return $.when();\n };\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n Rule.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Sets the current competency.\n *\n * @param {Competency} competency\n * @method setTargetCompetency\n */\n Rule.prototype.setTargetCompetency = function(competency) {\n this._competency = competency;\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _trigger\n * @protected\n */\n Rule.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n /**\n * Trigger the change event.\n *\n * @method _triggerChange\n * @protected\n */\n Rule.prototype._triggerChange = function() {\n this._trigger('change', this);\n };\n\n return /** @alias module:tool_lp/competency_rule */ Rule;\n\n});\n"],"file":"competency_rule.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competency_rule.js"],"names":["define","$","Rule","tree","_eventNode","_ready","Deferred","_tree","prototype","_competency","canConfig","hasChildren","id","getConfig","getType","Error","init","_load","injectTemplate","reject","promise","isValid","when","on","type","handler","setTargetCompetency","competency","_trigger","data","trigger","_triggerChange"],"mappings":"AAsBAA,OAAM,2BAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAa3B,GAAIC,CAAAA,CAAI,CAAG,SAASC,CAAT,CAAe,CACtB,KAAKC,UAAL,CAAkBH,CAAC,CAAC,OAAD,CAAnB,CACA,KAAKI,MAAL,CAAcJ,CAAC,CAACK,QAAF,EAAd,CACA,KAAKC,KAAL,CAAaJ,CAChB,CAJD,CAOAD,CAAI,CAACM,SAAL,CAAeC,WAAf,CAA6B,IAA7B,CAEAP,CAAI,CAACM,SAAL,CAAeJ,UAAf,CAA4B,IAA5B,CAEAF,CAAI,CAACM,SAAL,CAAeH,MAAf,CAAwB,IAAxB,CAEAH,CAAI,CAACM,SAAL,CAAeD,KAAf,CAAuB,IAAvB,CAQAL,CAAI,CAACM,SAAL,CAAeE,SAAf,CAA2B,UAAW,CAClC,MAAO,MAAKH,KAAL,CAAWI,WAAX,CAAuB,KAAKF,WAAL,CAAiBG,EAAxC,CACV,CAFD,CAYAV,CAAI,CAACM,SAAL,CAAeK,SAAf,CAA2B,UAAW,CAClC,MAAO,KACV,CAFD,CAWAX,CAAI,CAACM,SAAL,CAAeM,OAAf,CAAyB,UAAW,CAChC,KAAM,IAAIC,CAAAA,KAAJ,CAAU,iBAAV,CACT,CAFD,CAYAb,CAAI,CAACM,SAAL,CAAeQ,IAAf,CAAsB,UAAW,CAC7B,MAAO,MAAKC,KAAL,EACV,CAFD,CAWAf,CAAI,CAACM,SAAL,CAAeU,cAAf,CAAgC,UAAW,CACvC,MAAOjB,CAAAA,CAAC,CAACK,QAAF,GAAaa,MAAb,GAAsBC,OAAtB,EACV,CAFD,CAYAlB,CAAI,CAACM,SAAL,CAAea,OAAf,CAAyB,UAAW,CAChC,QACH,CAFD,CAWAnB,CAAI,CAACM,SAAL,CAAeS,KAAf,CAAuB,UAAW,CAC9B,MAAOhB,CAAAA,CAAC,CAACqB,IAAF,EACV,CAFD,CAWApB,CAAI,CAACM,SAAL,CAAee,EAAf,CAAoB,SAASC,CAAT,CAAeC,CAAf,CAAwB,CACxC,KAAKrB,UAAL,CAAgBmB,EAAhB,CAAmBC,CAAnB,CAAyBC,CAAzB,CACH,CAFD,CAUAvB,CAAI,CAACM,SAAL,CAAekB,mBAAf,CAAqC,SAASC,CAAT,CAAqB,CACtD,KAAKlB,WAAL,CAAmBkB,CACtB,CAFD,CAYAzB,CAAI,CAACM,SAAL,CAAeoB,QAAf,CAA0B,SAASJ,CAAT,CAAeK,CAAf,CAAqB,CAC3C,KAAKzB,UAAL,CAAgB0B,OAAhB,CAAwBN,CAAxB,CAA8B,CAACK,CAAD,CAA9B,CACH,CAFD,CAUA3B,CAAI,CAACM,SAAL,CAAeuB,cAAf,CAAgC,UAAW,CACvC,KAAKH,QAAL,CAAc,QAAd,CAAwB,IAAxB,CACH,CAFD,CAIA,MAAoD1B,CAAAA,CAEvD,CAxJK,CAAN","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 .\n\n/**\n * Competency rule base module.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * Competency rule abstract class.\n *\n * Any competency rule should extend this object. The event 'change' should be\n * triggered on the instance when the configuration has changed. This will allow\n * the components using the rule to gather the config, or check its validity.\n *\n * this._triggerChange();\n *\n * @param {Tree} tree The competency tree.\n */\n var Rule = function(tree) {\n this._eventNode = $('
');\n this._ready = $.Deferred();\n this._tree = tree;\n };\n\n /** @property {Object} The current competency. */\n Rule.prototype._competency = null;\n /** @property {Node} The node we attach the events to. */\n Rule.prototype._eventNode = null;\n /** @property {Promise} Resolved when the object is ready. */\n Rule.prototype._ready = null;\n /** @property {Tree} The competency tree. */\n Rule.prototype._tree = null;\n\n /**\n * Whether or not the current competency can be configured using this rule.\n *\n * @return {Boolean}\n * @method canConfig\n */\n Rule.prototype.canConfig = function() {\n return this._tree.hasChildren(this._competency.id);\n };\n\n /**\n * The config established by this rule.\n *\n * To override in subclasses when relevant.\n *\n * @return {String|null}\n * @method getConfig\n */\n Rule.prototype.getConfig = function() {\n return null;\n };\n\n // eslint-disable-next-line valid-jsdoc\n /**\n * Return the type of the module.\n *\n * @return {String}\n * @method getType\n */\n Rule.prototype.getType = function() {\n throw new Error('Not implemented');\n };\n\n /**\n * The init process.\n *\n * Do not override this, instead override _load.\n *\n * @return {Promise} Revoled when the plugin is initialised.\n * @method init\n */\n Rule.prototype.init = function() {\n return this._load();\n };\n\n /**\n * Callback to inject the template.\n *\n * @param {Node} container Node to inject in.\n * @return {Promise} Resolved when done.\n * @method injectTemplate\n */\n Rule.prototype.injectTemplate = function() {\n return $.Deferred().reject().promise();\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * Plugins should override this.\n *\n * @return {Boolean}\n * @method _isValid\n */\n Rule.prototype.isValid = function() {\n return false;\n };\n\n /**\n * Load the class.\n *\n * @return {Promise}\n * @method _load\n * @protected\n */\n Rule.prototype._load = function() {\n return $.when();\n };\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n Rule.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Sets the current competency.\n *\n * @param {Competency} competency\n * @method setTargetCompetency\n */\n Rule.prototype.setTargetCompetency = function(competency) {\n this._competency = competency;\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _trigger\n * @protected\n */\n Rule.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n /**\n * Trigger the change event.\n *\n * @method _triggerChange\n * @protected\n */\n Rule.prototype._triggerChange = function() {\n this._trigger('change', this);\n };\n\n return /** @alias module:tool_lp/competency_rule */ Rule;\n\n});\n"],"file":"competency_rule.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competency_rule_all.min.js.map b/admin/tool/lp/amd/build/competency_rule_all.min.js.map index ec8e34c939f..330530d7668 100644 --- a/admin/tool/lp/amd/build/competency_rule_all.min.js.map +++ b/admin/tool/lp/amd/build/competency_rule_all.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competency_rule_all.js"],"names":["define","$","Str","RuleBase","Rule","apply","arguments","prototype","Object","create","getType","isValid"],"mappings":"AAuBAA,OAAM,+BAAC,CAAC,QAAD,CACC,UADD,CAEC,yBAFD,CAAD,CAIE,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA2B,CAK/B,GAAIC,CAAAA,CAAI,CAAG,UAAW,CAClBD,CAAQ,CAACE,KAAT,CAAe,IAAf,CAAqBC,SAArB,CACH,CAFD,CAGAF,CAAI,CAACG,SAAL,CAAiBC,MAAM,CAACC,MAAP,CAAcN,CAAQ,CAACI,SAAvB,CAAjB,CAQAH,CAAI,CAACG,SAAL,CAAeG,OAAf,CAAyB,UAAW,CAChC,MAAO,sCACV,CAFD,CAUAN,CAAI,CAACG,SAAL,CAAeI,OAAf,CAAyB,UAAW,CAChC,QACH,CAFD,CAIA,MAAwDP,CAAAA,CAE3D,CApCK,CAAN","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 .\n\n/**\n * Competency rule all module.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/str',\n 'tool_lp/competency_rule',\n ],\n function($, Str, RuleBase) {\n\n /**\n * Competency rule all class.\n */\n var Rule = function() {\n RuleBase.apply(this, arguments);\n };\n Rule.prototype = Object.create(RuleBase.prototype);\n\n /**\n * Return the type of the module.\n *\n * @return {String}\n * @method getType\n */\n Rule.prototype.getType = function() {\n return 'core_competency\\\\competency_rule_all';\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * @return {Boolean}\n * @method isValid\n */\n Rule.prototype.isValid = function() {\n return true;\n };\n\n return /** @alias module:tool_lp/competency_rule_all */ Rule;\n\n});\n"],"file":"competency_rule_all.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competency_rule_all.js"],"names":["define","$","Str","RuleBase","Rule","apply","arguments","prototype","Object","create","getType","isValid"],"mappings":"AAsBAA,OAAM,+BAAC,CAAC,QAAD,CACC,UADD,CAEC,yBAFD,CAAD,CAIE,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA2B,CAK/B,GAAIC,CAAAA,CAAI,CAAG,UAAW,CAClBD,CAAQ,CAACE,KAAT,CAAe,IAAf,CAAqBC,SAArB,CACH,CAFD,CAGAF,CAAI,CAACG,SAAL,CAAiBC,MAAM,CAACC,MAAP,CAAcN,CAAQ,CAACI,SAAvB,CAAjB,CAQAH,CAAI,CAACG,SAAL,CAAeG,OAAf,CAAyB,UAAW,CAChC,MAAO,sCACV,CAFD,CAUAN,CAAI,CAACG,SAAL,CAAeI,OAAf,CAAyB,UAAW,CAChC,QACH,CAFD,CAIA,MAAwDP,CAAAA,CAE3D,CApCK,CAAN","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 .\n\n/**\n * Competency rule all module.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/str',\n 'tool_lp/competency_rule',\n ],\n function($, Str, RuleBase) {\n\n /**\n * Competency rule all class.\n */\n var Rule = function() {\n RuleBase.apply(this, arguments);\n };\n Rule.prototype = Object.create(RuleBase.prototype);\n\n /**\n * Return the type of the module.\n *\n * @return {String}\n * @method getType\n */\n Rule.prototype.getType = function() {\n return 'core_competency\\\\competency_rule_all';\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * @return {Boolean}\n * @method isValid\n */\n Rule.prototype.isValid = function() {\n return true;\n };\n\n return /** @alias module:tool_lp/competency_rule_all */ Rule;\n\n});\n"],"file":"competency_rule_all.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competency_rule_points.min.js.map b/admin/tool/lp/amd/build/competency_rule_points.min.js.map index b75176e1f4c..7c71ec866e7 100644 --- a/admin/tool/lp/amd/build/competency_rule_points.min.js.map +++ b/admin/tool/lp/amd/build/competency_rule_points.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competency_rule_points.js"],"names":["define","$","Str","Templates","RuleBase","Rule","apply","arguments","prototype","Object","create","_container","_templateLoaded","getConfig","JSON","stringify","base","points","_getRequiredPoints","competencies","_getCompetenciesConfig","find","each","node","id","data","parseInt","val","required","prop","push","getType","injectTemplate","container","self","children","_tree","getChildren","_competency","context","config","ruletype","parse","ruleconfig","e","requiredpoints","competency","index","child","shortname","comp","render","then","html","change","_triggerChange","isValid","max","valid"],"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 .\n\n/**\n * Competency rule points module.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/str',\n 'core/templates',\n 'tool_lp/competency_rule',\n ],\n function($, Str, Templates, RuleBase) {\n\n /**\n * Competency rule points class.\n */\n var Rule = function() {\n RuleBase.apply(this, arguments);\n };\n Rule.prototype = Object.create(RuleBase.prototype);\n\n /** @type {Node} Reference to the container in which the template was included. */\n Rule.prototype._container = null;\n /** @type {Boolean} Whether or not the template was included. */\n Rule.prototype._templateLoaded = false;\n\n /**\n * The config established by this rule.\n *\n * @return {String}\n * @method getConfig\n */\n Rule.prototype.getConfig = function() {\n return JSON.stringify({\n base: {\n points: this._getRequiredPoints(),\n },\n competencies: this._getCompetenciesConfig()\n });\n };\n\n /**\n * Gathers the input provided by the user for competencies.\n *\n * @return {Array} Containing id, points and required.\n * @method _getCompetenciesConfig\n * @protected\n */\n Rule.prototype._getCompetenciesConfig = function() {\n var competencies = [];\n\n this._container.find('[data-competency]').each(function() {\n var node = $(this),\n id = node.data('competency'),\n points = parseInt(node.find('[name=\"points\"]').val(), 10),\n required = node.find('[name=\"required\"]').prop('checked');\n\n competencies.push({\n id: id,\n points: points,\n required: required ? 1 : 0\n });\n });\n\n return competencies;\n };\n\n /**\n * Fetches the required points set by the user.\n *\n * @return {Number}\n * @method _getRequiredPoints\n * @protected\n */\n Rule.prototype._getRequiredPoints = function() {\n return parseInt(this._container.find('[name=\"requiredpoints\"]').val() || 1, 10);\n };\n\n /**\n * Return the type of the module.\n *\n * @return {String}\n * @method getType\n */\n Rule.prototype.getType = function() {\n return 'core_competency\\\\competency_rule_points';\n };\n\n /**\n * Callback to inject the template.\n *\n * @param {Node} container Node to inject in.\n * @return {Promise} Resolved when done.\n * @method injectTemplate\n */\n Rule.prototype.injectTemplate = function(container) {\n var self = this,\n children = this._tree.getChildren(this._competency.id),\n context,\n config = {\n base: {points: 2},\n competencies: []\n };\n\n this._templateLoaded = false;\n\n // Only pre-load the configuration when the competency is using this rule.\n if (self._competency.ruletype == self.getType()) {\n try {\n config = JSON.parse(self._competency.ruleconfig);\n } catch (e) {\n // eslint-disable-line no-empty\n }\n }\n\n context = {\n requiredpoints: (config && config.base) ? config.base.points : 2,\n competency: self._competency,\n children: []\n };\n\n $.each(children, function(index, child) {\n var competency = {\n id: child.id,\n shortname: child.shortname,\n required: false,\n points: 0\n };\n\n if (config) {\n $.each(config.competencies, function(index, comp) {\n if (comp.id == competency.id) {\n competency.required = comp.required ? true : false;\n competency.points = comp.points;\n }\n });\n }\n\n context.children.push(competency);\n });\n\n return Templates.render('tool_lp/competency_rule_points', context).then(function(html) {\n self._container = container;\n container.html(html);\n container.find('input').change(function() {\n self._triggerChange();\n });\n\n // We're done, let's trigger a change.\n self._templateLoaded = true;\n self._triggerChange();\n return;\n });\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * @return {Boolean}\n * @method isValid\n */\n Rule.prototype.isValid = function() {\n if (!this._templateLoaded) {\n return false;\n }\n\n var required = this._getRequiredPoints(),\n max = 0,\n valid = true;\n\n $.each(this._getCompetenciesConfig(), function(index, competency) {\n if (competency.points < 0) {\n valid = false;\n }\n max += competency.points;\n });\n\n valid = valid && max >= required;\n return valid;\n };\n\n return /** @alias module:tool_lp/competency_rule_all */ Rule;\n\n});\n"],"file":"competency_rule_points.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competency_rule_points.js"],"names":["define","$","Str","Templates","RuleBase","Rule","apply","arguments","prototype","Object","create","_container","_templateLoaded","getConfig","JSON","stringify","base","points","_getRequiredPoints","competencies","_getCompetenciesConfig","find","each","node","id","data","parseInt","val","required","prop","push","getType","injectTemplate","container","self","children","_tree","getChildren","_competency","context","config","ruletype","parse","ruleconfig","e","requiredpoints","competency","index","child","shortname","comp","render","then","html","change","_triggerChange","isValid","max","valid"],"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 .\n\n/**\n * Competency rule points module.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/str',\n 'core/templates',\n 'tool_lp/competency_rule',\n ],\n function($, Str, Templates, RuleBase) {\n\n /**\n * Competency rule points class.\n */\n var Rule = function() {\n RuleBase.apply(this, arguments);\n };\n Rule.prototype = Object.create(RuleBase.prototype);\n\n /** @property {Node} Reference to the container in which the template was included. */\n Rule.prototype._container = null;\n /** @property {Boolean} Whether or not the template was included. */\n Rule.prototype._templateLoaded = false;\n\n /**\n * The config established by this rule.\n *\n * @return {String}\n * @method getConfig\n */\n Rule.prototype.getConfig = function() {\n return JSON.stringify({\n base: {\n points: this._getRequiredPoints(),\n },\n competencies: this._getCompetenciesConfig()\n });\n };\n\n /**\n * Gathers the input provided by the user for competencies.\n *\n * @return {Array} Containing id, points and required.\n * @method _getCompetenciesConfig\n * @protected\n */\n Rule.prototype._getCompetenciesConfig = function() {\n var competencies = [];\n\n this._container.find('[data-competency]').each(function() {\n var node = $(this),\n id = node.data('competency'),\n points = parseInt(node.find('[name=\"points\"]').val(), 10),\n required = node.find('[name=\"required\"]').prop('checked');\n\n competencies.push({\n id: id,\n points: points,\n required: required ? 1 : 0\n });\n });\n\n return competencies;\n };\n\n /**\n * Fetches the required points set by the user.\n *\n * @return {Number}\n * @method _getRequiredPoints\n * @protected\n */\n Rule.prototype._getRequiredPoints = function() {\n return parseInt(this._container.find('[name=\"requiredpoints\"]').val() || 1, 10);\n };\n\n /**\n * Return the type of the module.\n *\n * @return {String}\n * @method getType\n */\n Rule.prototype.getType = function() {\n return 'core_competency\\\\competency_rule_points';\n };\n\n /**\n * Callback to inject the template.\n *\n * @param {Node} container Node to inject in.\n * @return {Promise} Resolved when done.\n * @method injectTemplate\n */\n Rule.prototype.injectTemplate = function(container) {\n var self = this,\n children = this._tree.getChildren(this._competency.id),\n context,\n config = {\n base: {points: 2},\n competencies: []\n };\n\n this._templateLoaded = false;\n\n // Only pre-load the configuration when the competency is using this rule.\n if (self._competency.ruletype == self.getType()) {\n try {\n config = JSON.parse(self._competency.ruleconfig);\n } catch (e) {\n // eslint-disable-line no-empty\n }\n }\n\n context = {\n requiredpoints: (config && config.base) ? config.base.points : 2,\n competency: self._competency,\n children: []\n };\n\n $.each(children, function(index, child) {\n var competency = {\n id: child.id,\n shortname: child.shortname,\n required: false,\n points: 0\n };\n\n if (config) {\n $.each(config.competencies, function(index, comp) {\n if (comp.id == competency.id) {\n competency.required = comp.required ? true : false;\n competency.points = comp.points;\n }\n });\n }\n\n context.children.push(competency);\n });\n\n return Templates.render('tool_lp/competency_rule_points', context).then(function(html) {\n self._container = container;\n container.html(html);\n container.find('input').change(function() {\n self._triggerChange();\n });\n\n // We're done, let's trigger a change.\n self._templateLoaded = true;\n self._triggerChange();\n return;\n });\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * @return {Boolean}\n * @method isValid\n */\n Rule.prototype.isValid = function() {\n if (!this._templateLoaded) {\n return false;\n }\n\n var required = this._getRequiredPoints(),\n max = 0,\n valid = true;\n\n $.each(this._getCompetenciesConfig(), function(index, competency) {\n if (competency.points < 0) {\n valid = false;\n }\n max += competency.points;\n });\n\n valid = valid && max >= required;\n return valid;\n };\n\n return /** @alias module:tool_lp/competency_rule_all */ Rule;\n\n});\n"],"file":"competency_rule_points.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencyactions.min.js.map b/admin/tool/lp/amd/build/competencyactions.min.js.map index 3bdbdc7773f..34dffce4b06 100644 --- a/admin/tool/lp/amd/build/competencyactions.min.js.map +++ b/admin/tool/lp/amd/build/competencyactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencyactions.js"],"names":["define","$","url","templates","notification","str","ajax","dragdrop","Ariatree","Dialogue","menubar","Picker","Outcomes","RuleConfig","Pending","treeModel","moveSource","moveTarget","pageContextId","pickerInstance","ruleConfigInstance","relatedTarget","taxonomiesConstants","rulesModules","selectedCompetencyId","addHandler","parent","data","params","competencyframeworkid","getCompetencyFrameworkId","pagecontextid","parentid","id","relocate","queryparams","param","window","location","relativeUrl","hasRule","get_strings","key","component","shortname","done","strings","confirm","fail","exception","doMove","frameworkid","requests","call","methodname","args","competencyid","search","val","reloadPage","confirmMove","targetComp","getCompetency","sourceComp","confirmMessage","showConfirm","path","indexOf","initMovePopup","popup","body","getContent","treeRoot","find","tree","on","evt","target","selected","show","close","addCompetencyChildren","competencies","i","length","haschildren","children","moveHandler","e","preventDefault","competency","searchtext","when","apply","framework","competenciestree","onecompetency","render","editHandler","context","newhtml","newjs","replaceWith","runTemplateJS","updateSearchHandler","moveUpHandler","moveDownHandler","seeCoursesHandler","courses","html","get_string","linkedcourses","relateCompetenciesHandler","pendingPromise","compIds","competencyIds","calls","each","index","value","push","relatedcompetencyid","promises","then","js","updatedRelatedCompetencies","resolve","catch","setDisallowedCompetencyIDs","display","ruleConfigHandler","setTargetCompetencyId","ruleConfigSaveHandler","config","update","idnumber","description","descriptionformat","ruletype","ruleoutcome","ruleconfig","promise","result","renderCompetencySummary","doDelete","success","alert","deleteCompetencyHandler","dragStart","originalEvent","dataTransfer","setData","allowDrop","dropEffect","dragEnter","addClass","dragLeave","removeClass","dropOver","getData","deleteRelatedHandler","relatedid","substr","removeRelated","triggerCompetencyViewedEvent","getTaxonomyAtLevel","level","constant","Deferred","showdeleterelatedaction","showrelatedcompetencies","showrule","pluginbaseurl","NONE","getString","name","modInfo","type","strs","rule","outcome","replaceNodeContents","strAddTaxonomy","strSelectedTaxonomy","selectionChanged","node","btn","actionMenu","selectedTitle","sublevel","closeAll","clone","remove","end","text","hide","getCompetencyLevel","parseTaxonomies","taxonomiesstr","all","split","unshift","init","model","pagectxid","taxonomies","rulesMods","enhance","bind","top"],"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 .\n\n/**\n * Handle selection changes and actions on the competency tree.\n *\n * @module tool_lp/competencyactions\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/url',\n 'core/templates',\n 'core/notification',\n 'core/str',\n 'core/ajax',\n 'tool_lp/dragdrop-reorder',\n 'tool_lp/tree',\n 'tool_lp/dialogue',\n 'tool_lp/menubar',\n 'tool_lp/competencypicker',\n 'tool_lp/competency_outcomes',\n 'tool_lp/competencyruleconfig',\n 'core/pending',\n ],\n function(\n $, url, templates, notification, str, ajax, dragdrop, Ariatree, Dialogue, menubar, Picker, Outcomes, RuleConfig, Pending\n ) {\n\n // Private variables and functions.\n /** @var {Object} treeModel - This is an object representing the nodes in the tree. */\n var treeModel = null;\n /** @var {Node} moveSource - The start of a drag operation */\n var moveSource = null;\n /** @var {Node} moveTarget - The end of a drag operation */\n var moveTarget = null;\n /** @var {Number} pageContextId The page context ID. */\n var pageContextId;\n /** @type {Object} Picker instance. */\n var pickerInstance;\n /** @type {Object} Rule config instance. */\n var ruleConfigInstance;\n /** @type {Object} The competency we're picking a relation to. */\n var relatedTarget;\n /** @type {Object} Taxonomy constants indexed per level. */\n var taxonomiesConstants;\n /** @type {Array} The rules modules. Values are object containing type, namd and amd. */\n var rulesModules;\n /** @type {Number} the selected competency ID. */\n var selectedCompetencyId = null;\n\n /**\n * Respond to choosing the \"Add\" menu item for the selected node in the tree.\n * @method addHandler\n */\n var addHandler = function() {\n var parent = $('[data-region=\"competencyactions\"]').data('competency');\n\n var params = {\n competencyframeworkid: treeModel.getCompetencyFrameworkId(),\n pagecontextid: pageContextId\n };\n\n if (parent !== null) {\n // We are adding at a sub node.\n params.parentid = parent.id;\n }\n\n var relocate = function() {\n var queryparams = $.param(params);\n window.location = url.relativeUrl('/admin/tool/lp/editcompetency.php?' + queryparams);\n };\n\n if (parent !== null && treeModel.hasRule(parent.id)) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'addingcompetencywillresetparentrule', component: 'tool_lp', param: parent.shortname},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0],\n strings[1],\n strings[2],\n strings[3],\n relocate\n );\n }).fail(notification.exception);\n } else {\n relocate();\n }\n };\n\n /**\n * A source and destination has been chosen - so time to complete a move.\n * @method doMove\n */\n var doMove = function() {\n var frameworkid = $('[data-region=\"filtercompetencies\"]').data('frameworkid');\n var requests = ajax.call([{\n methodname: 'core_competency_set_parent_competency',\n args: {competencyid: moveSource, parentid: moveTarget}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: frameworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Confirms a competency move.\n *\n * @method confirmMove\n */\n var confirmMove = function() {\n moveTarget = typeof moveTarget === \"undefined\" ? 0 : moveTarget;\n if (moveTarget == moveSource) {\n // No move to do.\n return;\n }\n\n var targetComp = treeModel.getCompetency(moveTarget) || {},\n sourceComp = treeModel.getCompetency(moveSource) || {},\n confirmMessage = 'movecompetencywillresetrules',\n showConfirm = false;\n\n // We shouldn't be moving the competency to the same parent.\n if (sourceComp.parentid == moveTarget) {\n return;\n }\n\n // If we are moving to a child of self.\n if (targetComp.path && targetComp.path.indexOf('/' + sourceComp.id + '/') >= 0) {\n confirmMessage = 'movecompetencytochildofselfwillresetrules';\n\n // Show a confirmation if self has rules, as they'll disappear.\n showConfirm = showConfirm || treeModel.hasRule(sourceComp.id);\n }\n\n // Show a confirmation if the current parent, or the destination have rules.\n showConfirm = showConfirm || (treeModel.hasRule(targetComp.id) || treeModel.hasRule(sourceComp.parentid));\n\n // Show confirm, and/or do the things.\n if (showConfirm) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: confirmMessage, component: 'tool_lp'},\n {key: 'yes', component: 'moodle'},\n {key: 'no', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete competency X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doMove\n );\n }).fail(notification.exception);\n\n } else {\n doMove();\n }\n };\n\n /**\n * A move competency popup was opened - initialise the aria tree in it.\n * @method initMovePopup\n * @param {dialogue} popup The tool_lp/dialogue that was created.\n */\n var initMovePopup = function(popup) {\n var body = $(popup.getContent());\n var treeRoot = body.find('[data-enhance=movetree]');\n var tree = new Ariatree(treeRoot, false);\n tree.on('selectionchanged', function(evt, params) {\n var target = params.selected;\n moveTarget = $(target).data('id');\n });\n treeRoot.show();\n\n body.on('click', '[data-action=\"move\"]', function() {\n popup.close();\n confirmMove();\n });\n body.on('click', '[data-action=\"cancel\"]', function() {\n popup.close();\n });\n };\n\n /**\n * Turn a flat list of competencies into a tree structure (recursive).\n * @method addCompetencyChildren\n * @param {Object} parent The current parent node in the tree\n * @param {Object[]} competencies The flat list of competencies\n */\n var addCompetencyChildren = function(parent, competencies) {\n var i;\n\n for (i = 0; i < competencies.length; i++) {\n if (competencies[i].parentid == parent.id) {\n parent.haschildren = true;\n competencies[i].children = [];\n competencies[i].haschildren = false;\n parent.children[parent.children.length] = competencies[i];\n addCompetencyChildren(competencies[i], competencies);\n }\n }\n };\n\n /**\n * A node was chosen and \"Move\" was selected from the menu. Open a popup to select the target.\n * @param {Event} e\n * @method moveHandler\n */\n var moveHandler = function(e) {\n e.preventDefault();\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n\n // Remember what we are moving.\n moveSource = competency.id;\n\n // Load data for the template.\n var requests = ajax.call([\n {\n methodname: 'core_competency_search_competencies',\n args: {\n competencyframeworkid: competency.competencyframeworkid,\n searchtext: ''\n }\n }, {\n methodname: 'core_competency_read_competency_framework',\n args: {\n id: competency.competencyframeworkid\n }\n }\n ]);\n\n // When all data has arrived, continue.\n $.when.apply(null, requests).done(function(competencies, framework) {\n\n // Expand the list of competencies into a tree.\n var i;\n var competenciestree = [];\n for (i = 0; i < competencies.length; i++) {\n var onecompetency = competencies[i];\n if (onecompetency.parentid == \"0\") {\n onecompetency.children = [];\n onecompetency.haschildren = 0;\n competenciestree[competenciestree.length] = onecompetency;\n addCompetencyChildren(onecompetency, competencies);\n }\n }\n\n str.get_strings([\n {key: 'movecompetency', component: 'tool_lp', param: competency.shortname},\n {key: 'move', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n\n var context = {\n framework: framework,\n competencies: competenciestree\n };\n\n templates.render('tool_lp/competencies_move_tree', context)\n .done(function(tree) {\n new Dialogue(\n strings[0], // Move competency x.\n tree, // The move tree.\n initMovePopup\n );\n\n }).fail(notification.exception);\n\n }).fail(notification.exception);\n\n }).fail(notification.exception);\n\n };\n\n /**\n * Edit the selected competency.\n * @method editHandler\n */\n var editHandler = function() {\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n\n var params = {\n competencyframeworkid: treeModel.getCompetencyFrameworkId(),\n id: competency.id,\n parentid: competency.parentid,\n pagecontextid: pageContextId\n };\n\n var queryparams = $.param(params);\n window.location = url.relativeUrl('/admin/tool/lp/editcompetency.php?' + queryparams);\n };\n\n /**\n * Re-render the page with the latest data.\n * @param {Object} context\n * @method reloadPage\n */\n var reloadPage = function(context) {\n templates.render('tool_lp/manage_competencies_page', context)\n .done(function(newhtml, newjs) {\n $('[data-region=\"managecompetencies\"]').replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n })\n .fail(notification.exception);\n };\n\n /**\n * Perform a search and render the page with the new search results.\n * @param {Event} e\n * @method updateSearchHandler\n */\n var updateSearchHandler = function(e) {\n e.preventDefault();\n\n var frameworkid = $('[data-region=\"filtercompetencies\"]').data('frameworkid');\n\n var requests = ajax.call([{\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: frameworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[0].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Move a competency \"up\". This only affects the sort order within the same branch of the tree.\n * @method moveUpHandler\n */\n var moveUpHandler = function() {\n // We are chaining ajax requests here.\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var requests = ajax.call([{\n methodname: 'core_competency_move_up_competency',\n args: {id: competency.id}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: competency.competencyframeworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Move a competency \"down\". This only affects the sort order within the same branch of the tree.\n * @method moveDownHandler\n */\n var moveDownHandler = function() {\n // We are chaining ajax requests here.\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var requests = ajax.call([{\n methodname: 'core_competency_move_down_competency',\n args: {id: competency.id}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: competency.competencyframeworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Open a dialogue to show all the courses using the selected competency.\n * @method seeCoursesHandler\n */\n var seeCoursesHandler = function() {\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n\n var requests = ajax.call([{\n methodname: 'tool_lp_list_courses_using_competency',\n args: {id: competency.id}\n }]);\n\n requests[0].done(function(courses) {\n var context = {\n courses: courses\n };\n templates.render('tool_lp/linked_courses_summary', context).done(function(html) {\n str.get_string('linkedcourses', 'tool_lp').done(function(linkedcourses) {\n new Dialogue(\n linkedcourses, // Title.\n html, // The linked courses.\n initMovePopup\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Open a competencies popup to relate competencies.\n *\n * @method relateCompetenciesHandler\n */\n var relateCompetenciesHandler = function() {\n relatedTarget = $('[data-region=\"competencyactions\"]').data('competency');\n\n if (!pickerInstance) {\n pickerInstance = new Picker(pageContextId, relatedTarget.competencyframeworkid);\n pickerInstance.on('save', function(e, data) {\n var pendingPromise = new Pending();\n var compIds = data.competencyIds;\n\n var calls = [];\n $.each(compIds, function(index, value) {\n calls.push({\n methodname: 'core_competency_add_related_competency',\n args: {competencyid: value, relatedcompetencyid: relatedTarget.id}\n });\n });\n\n calls.push({\n methodname: 'tool_lp_data_for_related_competencies_section',\n args: {competencyid: relatedTarget.id}\n });\n\n var promises = ajax.call(calls);\n\n promises[calls.length - 1].then(function(context) {\n return templates.render('tool_lp/related_competencies', context);\n }).then(function(html, js) {\n $('[data-region=\"relatedcompetencies\"]').replaceWith(html);\n templates.runTemplateJS(js);\n updatedRelatedCompetencies();\n return;\n })\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n\n pickerInstance.setDisallowedCompetencyIDs([relatedTarget.id]);\n pickerInstance.display();\n };\n\n var ruleConfigHandler = function(e) {\n e.preventDefault();\n relatedTarget = $('[data-region=\"competencyactions\"]').data('competency');\n ruleConfigInstance.setTargetCompetencyId(relatedTarget.id);\n ruleConfigInstance.display();\n };\n\n var ruleConfigSaveHandler = function(e, config) {\n var update = {\n id: relatedTarget.id,\n shortname: relatedTarget.shortname,\n idnumber: relatedTarget.idnumber,\n description: relatedTarget.description,\n descriptionformat: relatedTarget.descriptionformat,\n ruletype: config.ruletype,\n ruleoutcome: config.ruleoutcome,\n ruleconfig: config.ruleconfig\n };\n var promise = ajax.call([{\n methodname: 'core_competency_update_competency',\n args: {competency: update}\n }]);\n promise[0].then(function(result) {\n if (result) {\n relatedTarget.ruletype = config.ruletype;\n relatedTarget.ruleoutcome = config.ruleoutcome;\n relatedTarget.ruleconfig = config.ruleconfig;\n renderCompetencySummary(relatedTarget);\n }\n return;\n }).catch(notification.exception);\n };\n\n /**\n * Delete a competency.\n * @method doDelete\n */\n var doDelete = function() {\n // We are chaining ajax requests here.\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var requests = ajax.call([{\n methodname: 'core_competency_delete_competency',\n args: {id: competency.id}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: competency.competencyframeworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[0].done(function(success) {\n if (success === false) {\n str.get_strings([\n {key: 'competencycannotbedeleted', component: 'tool_lp', param: competency.shortname},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.alert(\n null,\n strings[0]\n );\n }).fail(notification.exception);\n }\n }).fail(notification.exception);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Show a confirm dialogue before deleting a competency.\n * @method deleteCompetencyHandler\n */\n var deleteCompetencyHandler = function() {\n var competency = $('[data-region=\"competencyactions\"]').data('competency'),\n confirmMessage = 'deletecompetency';\n\n if (treeModel.hasRule(competency.parentid)) {\n confirmMessage = 'deletecompetencyparenthasrule';\n }\n\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: confirmMessage, component: 'tool_lp', param: competency.shortname},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete competency X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doDelete\n );\n }).fail(notification.exception);\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dragStart\n * @param {Event} e\n */\n var dragStart = function(e) {\n e.originalEvent.dataTransfer.setData('text', $(e.target).parent().data('id'));\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method allowDrop\n * @param {Event} e\n */\n var allowDrop = function(e) {\n e.originalEvent.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dragEnter\n * @param {Event} e\n */\n var dragEnter = function(e) {\n e.preventDefault();\n $(this).addClass('currentdragtarget');\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dragLeave\n * @param {Event} e\n */\n var dragLeave = function(e) {\n e.preventDefault();\n $(this).removeClass('currentdragtarget');\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dropOver\n * @param {Event} e\n */\n var dropOver = function(e) {\n e.preventDefault();\n moveSource = e.originalEvent.dataTransfer.getData('text');\n moveTarget = $(e.target).parent().data('id');\n $(this).removeClass('currentdragtarget');\n\n confirmMove();\n };\n\n /**\n * Deletes a related competency without confirmation.\n *\n * @param {Event} e The event that triggered the action.\n * @method deleteRelatedHandler\n */\n var deleteRelatedHandler = function(e) {\n e.preventDefault();\n\n var relatedid = this.id.substr(11);\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var removeRelated = ajax.call([\n {methodname: 'core_competency_remove_related_competency',\n args: {relatedcompetencyid: relatedid, competencyid: competency.id}},\n {methodname: 'tool_lp_data_for_related_competencies_section',\n args: {competencyid: competency.id}}\n ]);\n\n removeRelated[1].done(function(context) {\n templates.render('tool_lp/related_competencies', context).done(function(html) {\n $('[data-region=\"relatedcompetencies\"]').replaceWith(html);\n updatedRelatedCompetencies();\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Updates the competencies list (with relations) and add listeners.\n *\n * @method updatedRelatedCompetencies\n */\n var updatedRelatedCompetencies = function() {\n\n // Listeners to newly loaded related competencies.\n $('[data-action=\"deleterelation\"]').on('click', deleteRelatedHandler);\n\n };\n\n /**\n * Log the competency viewed event.\n *\n * @param {Object} competency The competency.\n * @method triggerCompetencyViewedEvent\n */\n var triggerCompetencyViewedEvent = function(competency) {\n if (competency.id !== selectedCompetencyId) {\n // Set the selected competency id.\n selectedCompetencyId = competency.id;\n ajax.call([{\n methodname: 'core_competency_competency_viewed',\n args: {id: competency.id}\n }]);\n }\n };\n\n /**\n * Return the taxonomy constant for a level.\n *\n * @param {Number} level The level.\n * @return {String}\n * @function getTaxonomyAtLevel\n */\n var getTaxonomyAtLevel = function(level) {\n var constant = taxonomiesConstants[level];\n if (!constant) {\n constant = 'competency';\n }\n return constant;\n };\n\n /**\n * Render the competency summary.\n *\n * @param {Object} competency The competency.\n */\n var renderCompetencySummary = function(competency) {\n var promise = $.Deferred().resolve().promise(),\n context = {};\n\n context.competency = competency;\n context.showdeleterelatedaction = true;\n context.showrelatedcompetencies = true;\n context.showrule = false;\n context.pluginbaseurl = url.relativeUrl('/admin/tool/lp');\n\n if (competency.ruleoutcome != Outcomes.NONE) {\n // Get the outcome and rule name.\n promise = Outcomes.getString(competency.ruleoutcome).then(function(str) {\n var name;\n $.each(rulesModules, function(index, modInfo) {\n if (modInfo.type == competency.ruletype) {\n name = modInfo.name;\n }\n });\n return [str, name];\n });\n }\n\n promise.then(function(strs) {\n if (typeof strs !== 'undefined') {\n context.showrule = true;\n context.rule = {\n outcome: strs[0],\n type: strs[1]\n };\n }\n return context;\n }).then(function(context) {\n return templates.render('tool_lp/competency_summary', context);\n }).then(function(html) {\n $('[data-region=\"competencyinfo\"]').html(html);\n $('[data-action=\"deleterelation\"]').on('click', deleteRelatedHandler);\n return templates.render('tool_lp/loading', {});\n }).then(function(html, js) {\n templates.replaceNodeContents('[data-region=\"relatedcompetencies\"]', html, js);\n return ajax.call([{\n methodname: 'tool_lp_data_for_related_competencies_section',\n args: {competencyid: competency.id}\n }])[0];\n }).then(function(context) {\n return templates.render('tool_lp/related_competencies', context);\n }).then(function(html, js) {\n $('[data-region=\"relatedcompetencies\"]').replaceWith(html);\n templates.runTemplateJS(js);\n updatedRelatedCompetencies();\n return;\n }).catch(notification.exception);\n };\n\n /**\n * Return the string \"Add \".\n *\n * @param {Number} level The level.\n * @return {String}\n * @function strAddTaxonomy\n */\n var strAddTaxonomy = function(level) {\n return str.get_string('taxonomy_add_' + getTaxonomyAtLevel(level), 'tool_lp');\n };\n\n /**\n * Return the string \"Selected \".\n *\n * @param {Number} level The level.\n * @return {String}\n * @function strSelectedTaxonomy\n */\n var strSelectedTaxonomy = function(level) {\n return str.get_string('taxonomy_selected_' + getTaxonomyAtLevel(level), 'tool_lp');\n };\n\n /**\n * Handler when a node in the aria tree is selected.\n * @method selectionChanged\n * @param {Event} evt The event that triggered the selection change.\n * @param {Object} params The parameters for the event. Contains a list of selected nodes.\n * @return {Boolean}\n */\n var selectionChanged = function(evt, params) {\n var node = params.selected,\n id = $(node).data('id'),\n btn = $('[data-region=\"competencyactions\"] [data-action=\"add\"]'),\n actionMenu = $('[data-region=\"competencyactionsmenu\"]'),\n selectedTitle = $('[data-region=\"selected-competency\"]'),\n level = 0,\n sublevel = 1;\n\n menubar.closeAll();\n\n if (typeof id === \"undefined\") {\n // Assume this is the root of the tree.\n // Here we are only getting the text from the top of the tree, to do it we clone the tree,\n // remove all children and then call text on the result.\n $('[data-region=\"competencyinfo\"]').html(node.clone().children().remove().end().text());\n $('[data-region=\"competencyactions\"]').data('competency', null);\n actionMenu.hide();\n\n } else {\n var competency = treeModel.getCompetency(id);\n\n level = treeModel.getCompetencyLevel(id);\n sublevel = level + 1;\n\n actionMenu.show();\n $('[data-region=\"competencyactions\"]').data('competency', competency);\n renderCompetencySummary(competency);\n // Log Competency viewed event.\n triggerCompetencyViewedEvent(competency);\n }\n strSelectedTaxonomy(level).then(function(str) {\n selectedTitle.text(str);\n return;\n }).catch(notification.exception);\n\n strAddTaxonomy(sublevel).then(function(str) {\n btn.show()\n .find('[data-region=\"term\"]')\n .text(str);\n return;\n }).catch(notification.exception);\n\n // We handled this event so consume it.\n evt.preventDefault();\n return false;\n };\n\n /**\n * Return the string \"Selected \".\n *\n * @function parseTaxonomies\n * @param {String} taxonomiesstr Comma separated list of taxonomies.\n * @return {Array} of level => taxonomystr\n */\n var parseTaxonomies = function(taxonomiesstr) {\n var all = taxonomiesstr.split(',');\n all.unshift(\"\");\n delete all[0];\n\n // Note we don't need to fill holes, because other functions check for empty anyway.\n return all;\n };\n\n return {\n /**\n * Initialise this page (attach event handlers etc).\n *\n * @method init\n * @param {Object} model The tree model provides some useful functions for loading and searching competencies.\n * @param {Number} pagectxid The page context ID.\n * @param {Object} taxonomies Constants indexed by level.\n * @param {Object} rulesMods The modules of the rules.\n */\n init: function(model, pagectxid, taxonomies, rulesMods) {\n treeModel = model;\n pageContextId = pagectxid;\n taxonomiesConstants = parseTaxonomies(taxonomies);\n rulesModules = rulesMods;\n\n $('[data-region=\"competencyactions\"] [data-action=\"add\"]').on('click', addHandler);\n\n menubar.enhance('.competencyactionsmenu', {\n '[data-action=\"edit\"]': editHandler,\n '[data-action=\"delete\"]': deleteCompetencyHandler,\n '[data-action=\"move\"]': moveHandler,\n '[data-action=\"moveup\"]': moveUpHandler,\n '[data-action=\"movedown\"]': moveDownHandler,\n '[data-action=\"linkedcourses\"]': seeCoursesHandler,\n '[data-action=\"relatedcompetencies\"]': relateCompetenciesHandler.bind(this),\n '[data-action=\"competencyrules\"]': ruleConfigHandler.bind(this)\n });\n $('[data-region=\"competencyactionsmenu\"]').hide();\n $('[data-region=\"competencyactions\"] [data-action=\"add\"]').hide();\n\n $('[data-region=\"filtercompetencies\"]').on('submit', updateSearchHandler);\n // Simple html5 drag drop because we already added an accessible alternative.\n var top = $('[data-region=\"managecompetencies\"] [data-enhance=\"tree\"]');\n top.on('dragstart', 'li>span', dragStart)\n .on('dragover', 'li>span', allowDrop)\n .on('dragenter', 'li>span', dragEnter)\n .on('dragleave', 'li>span', dragLeave)\n .on('drop', 'li>span', dropOver);\n\n model.on('selectionchanged', selectionChanged);\n\n // Prepare the configuration tool.\n ruleConfigInstance = new RuleConfig(treeModel, rulesModules);\n ruleConfigInstance.on('save', ruleConfigSaveHandler.bind(this));\n }\n };\n});\n"],"file":"competencyactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencyactions.js"],"names":["define","$","url","templates","notification","str","ajax","dragdrop","Ariatree","Dialogue","menubar","Picker","Outcomes","RuleConfig","Pending","treeModel","moveSource","moveTarget","pageContextId","pickerInstance","ruleConfigInstance","relatedTarget","taxonomiesConstants","rulesModules","selectedCompetencyId","addHandler","parent","data","params","competencyframeworkid","getCompetencyFrameworkId","pagecontextid","parentid","id","relocate","queryparams","param","window","location","relativeUrl","hasRule","get_strings","key","component","shortname","done","strings","confirm","fail","exception","doMove","frameworkid","requests","call","methodname","args","competencyid","search","val","reloadPage","confirmMove","targetComp","getCompetency","sourceComp","confirmMessage","showConfirm","path","indexOf","initMovePopup","popup","body","getContent","treeRoot","find","tree","on","evt","target","selected","show","close","addCompetencyChildren","competencies","i","length","haschildren","children","moveHandler","e","preventDefault","competency","searchtext","when","apply","framework","competenciestree","onecompetency","render","editHandler","context","newhtml","newjs","replaceWith","runTemplateJS","updateSearchHandler","moveUpHandler","moveDownHandler","seeCoursesHandler","courses","html","get_string","linkedcourses","relateCompetenciesHandler","pendingPromise","compIds","competencyIds","calls","each","index","value","push","relatedcompetencyid","promises","then","js","updatedRelatedCompetencies","resolve","catch","setDisallowedCompetencyIDs","display","ruleConfigHandler","setTargetCompetencyId","ruleConfigSaveHandler","config","update","idnumber","description","descriptionformat","ruletype","ruleoutcome","ruleconfig","promise","result","renderCompetencySummary","doDelete","success","alert","deleteCompetencyHandler","dragStart","originalEvent","dataTransfer","setData","allowDrop","dropEffect","dragEnter","addClass","dragLeave","removeClass","dropOver","getData","deleteRelatedHandler","relatedid","substr","removeRelated","triggerCompetencyViewedEvent","getTaxonomyAtLevel","level","constant","Deferred","showdeleterelatedaction","showrelatedcompetencies","showrule","pluginbaseurl","NONE","getString","name","modInfo","type","strs","rule","outcome","replaceNodeContents","strAddTaxonomy","strSelectedTaxonomy","selectionChanged","node","btn","actionMenu","selectedTitle","sublevel","closeAll","clone","remove","end","text","hide","getCompetencyLevel","parseTaxonomies","taxonomiesstr","all","split","unshift","init","model","pagectxid","taxonomies","rulesMods","enhance","bind","top"],"mappings":"AAsBAA,OAAM,6BAAC,CAAC,QAAD,CACC,UADD,CAEC,gBAFD,CAGC,mBAHD,CAIC,UAJD,CAKC,WALD,CAMC,0BAND,CAOC,cAPD,CAQC,kBARD,CASC,iBATD,CAUC,0BAVD,CAWC,6BAXD,CAYC,8BAZD,CAaC,cAbD,CAAD,CAeC,SACKC,CADL,CACQC,CADR,CACaC,CADb,CACwBC,CADxB,CACsCC,CADtC,CAC2CC,CAD3C,CACiDC,CADjD,CAC2DC,CAD3D,CACqEC,CADrE,CAC+EC,CAD/E,CACwFC,CADxF,CACgGC,CADhG,CAC0GC,CAD1G,CACsHC,CADtH,CAEG,IAIFC,CAAAA,CAAS,CAAG,IAJV,CAMFC,CAAU,CAAG,IANX,CAQFC,CAAU,CAAG,IARX,CAUFC,CAVE,CAYFC,CAZE,CAcFC,CAdE,CAgBFC,CAhBE,CAkBFC,CAlBE,CAoBFC,CApBE,CAsBFC,CAAoB,CAAG,IAtBrB,CA4BFC,CAAU,CAAG,UAAW,IACpBC,CAAAA,CAAM,CAAGzB,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CADW,CAGpBC,CAAM,CAAG,CACTC,qBAAqB,CAAEd,CAAS,CAACe,wBAAV,EADd,CAETC,aAAa,CAAEb,CAFN,CAHW,CAQxB,GAAe,IAAX,GAAAQ,CAAJ,CAAqB,CAEjBE,CAAM,CAACI,QAAP,CAAkBN,CAAM,CAACO,EAC5B,CAED,GAAIC,CAAAA,CAAQ,CAAG,UAAW,CACtB,GAAIC,CAAAA,CAAW,CAAGlC,CAAC,CAACmC,KAAF,CAAQR,CAAR,CAAlB,CACAS,MAAM,CAACC,QAAP,CAAkBpC,CAAG,CAACqC,WAAJ,CAAgB,qCAAuCJ,CAAvD,CACrB,CAHD,CAKA,GAAe,IAAX,GAAAT,CAAM,EAAaX,CAAS,CAACyB,OAAV,CAAkBd,CAAM,CAACO,EAAzB,CAAvB,CAAqD,CACjD5B,CAAG,CAACoC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,qCAAN,CAA6CC,SAAS,CAAE,SAAxD,CAAmEP,KAAK,CAAEV,CAAM,CAACkB,SAAjF,CAFY,CAGZ,CAACF,GAAG,CAAE,KAAN,CAAaC,SAAS,CAAE,MAAxB,CAHY,CAIZ,CAACD,GAAG,CAAE,IAAN,CAAYC,SAAS,CAAE,MAAvB,CAJY,CAAhB,EAKGE,IALH,CAKQ,SAASC,CAAT,CAAkB,CACtB1C,CAAY,CAAC2C,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKIZ,CALJ,CAOH,CAbD,EAaGc,IAbH,CAaQ5C,CAAY,CAAC6C,SAbrB,CAcH,CAfD,IAeO,CACHf,CAAQ,EACX,CACJ,CAhEK,CAsEFgB,CAAM,CAAG,UAAW,IAChBC,CAAAA,CAAW,CAAGlD,CAAC,CAAC,sCAAD,CAAD,CAAwC0B,IAAxC,CAA6C,aAA7C,CADE,CAEhByB,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,uCADU,CAEtBC,IAAI,CAAE,CAACC,YAAY,CAAExC,CAAf,CAA2BgB,QAAQ,CAAEf,CAArC,CAFgB,CAAD,CAGtB,CACCqC,UAAU,CAAE,2CADb,CAECC,IAAI,CAAE,CAAC1B,qBAAqB,CAAEsB,CAAxB,CACEM,MAAM,CAAExD,CAAC,CAAC,4CAAD,CAAD,CAA8CyD,GAA9C,EADV,CAFP,CAHsB,CAAV,CAFK,CAUpBN,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBc,CAAjB,EAA6BX,IAA7B,CAAkC5C,CAAY,CAAC6C,SAA/C,CACH,CAjFK,CAwFFW,CAAW,CAAG,UAAW,CACzB3C,CAAU,CAAyB,WAAtB,QAAOA,CAAAA,CAAP,CAAoC,CAApC,CAAwCA,CAArD,CACA,GAAIA,CAAU,EAAID,CAAlB,CAA8B,CAE1B,MACH,CAED,GAAI6C,CAAAA,CAAU,CAAG9C,CAAS,CAAC+C,aAAV,CAAwB7C,CAAxB,GAAuC,EAAxD,CACI8C,CAAU,CAAGhD,CAAS,CAAC+C,aAAV,CAAwB9C,CAAxB,GAAuC,EADxD,CAEIgD,CAAc,CAAG,8BAFrB,CAGIC,CAAW,GAHf,CAMA,GAAIF,CAAU,CAAC/B,QAAX,EAAuBf,CAA3B,CAAuC,CACnC,MACH,CAGD,GAAI4C,CAAU,CAACK,IAAX,EAAyE,CAAtD,EAAAL,CAAU,CAACK,IAAX,CAAgBC,OAAhB,CAAwB,IAAMJ,CAAU,CAAC9B,EAAjB,CAAsB,GAA9C,CAAvB,CAAgF,CAC5E+B,CAAc,CAAG,2CAAjB,CAGAC,CAAW,CAAGA,CAAW,EAAIlD,CAAS,CAACyB,OAAV,CAAkBuB,CAAU,CAAC9B,EAA7B,CAChC,CAGDgC,CAAW,CAAGA,CAAW,EAAKlD,CAAS,CAACyB,OAAV,CAAkBqB,CAAU,CAAC5B,EAA7B,GAAoClB,CAAS,CAACyB,OAAV,CAAkBuB,CAAU,CAAC/B,QAA7B,CAAlE,CAGA,GAAIiC,CAAJ,CAAiB,CACb5D,CAAG,CAACoC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAEsB,CAAN,CAAsBrB,SAAS,CAAE,SAAjC,CAFY,CAGZ,CAACD,GAAG,CAAE,KAAN,CAAaC,SAAS,CAAE,QAAxB,CAHY,CAIZ,CAACD,GAAG,CAAE,IAAN,CAAYC,SAAS,CAAE,QAAvB,CAJY,CAAhB,EAKGE,IALH,CAKQ,SAASC,CAAT,CAAkB,CACtB1C,CAAY,CAAC2C,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKII,CALJ,CAOH,CAbD,EAaGF,IAbH,CAaQ5C,CAAY,CAAC6C,SAbrB,CAeH,CAhBD,IAgBO,CACHC,CAAM,EACT,CACJ,CAxIK,CA+IFkB,CAAa,CAAG,SAASC,CAAT,CAAgB,IAC5BC,CAAAA,CAAI,CAAGrE,CAAC,CAACoE,CAAK,CAACE,UAAN,EAAD,CADoB,CAE5BC,CAAQ,CAAGF,CAAI,CAACG,IAAL,CAAU,yBAAV,CAFiB,CAG5BC,CAAI,CAAG,GAAIlE,CAAAA,CAAJ,CAAagE,CAAb,IAHqB,CAIhCE,CAAI,CAACC,EAAL,CAAQ,kBAAR,CAA4B,SAASC,CAAT,CAAchD,CAAd,CAAsB,CAC9C,GAAIiD,CAAAA,CAAM,CAAGjD,CAAM,CAACkD,QAApB,CACA7D,CAAU,CAAGhB,CAAC,CAAC4E,CAAD,CAAD,CAAUlD,IAAV,CAAe,IAAf,CAChB,CAHD,EAIA6C,CAAQ,CAACO,IAAT,GAEAT,CAAI,CAACK,EAAL,CAAQ,OAAR,CAAiB,wBAAjB,CAAyC,UAAW,CAClDN,CAAK,CAACW,KAAN,GACApB,CAAW,EACZ,CAHD,EAIAU,CAAI,CAACK,EAAL,CAAQ,OAAR,CAAiB,0BAAjB,CAA2C,UAAW,CACpDN,CAAK,CAACW,KAAN,EACD,CAFD,CAGH,CAhKK,CAwKFC,CAAqB,CAAG,SAASvD,CAAT,CAAiBwD,CAAjB,CAA+B,CACvD,GAAIC,CAAAA,CAAJ,CAEA,IAAKA,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAGD,CAAY,CAACE,MAA7B,CAAqCD,CAAC,EAAtC,CAA0C,CACtC,GAAID,CAAY,CAACC,CAAD,CAAZ,CAAgBnD,QAAhB,EAA4BN,CAAM,CAACO,EAAvC,CAA2C,CACvCP,CAAM,CAAC2D,WAAP,IACAH,CAAY,CAACC,CAAD,CAAZ,CAAgBG,QAAhB,CAA2B,EAA3B,CACAJ,CAAY,CAACC,CAAD,CAAZ,CAAgBE,WAAhB,IACA3D,CAAM,CAAC4D,QAAP,CAAgB5D,CAAM,CAAC4D,QAAP,CAAgBF,MAAhC,EAA0CF,CAAY,CAACC,CAAD,CAAtD,CACAF,CAAqB,CAACC,CAAY,CAACC,CAAD,CAAb,CAAkBD,CAAlB,CACxB,CACJ,CACJ,CApLK,CA2LFK,CAAW,CAAG,SAASC,CAAT,CAAY,CAC1BA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAAjB,CAGAX,CAAU,CAAG0E,CAAU,CAACzD,EAAxB,CAGA,GAAImB,CAAAA,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CACrB,CACIC,UAAU,CAAE,qCADhB,CAEIC,IAAI,CAAE,CACF1B,qBAAqB,CAAE6D,CAAU,CAAC7D,qBADhC,CAEF8D,UAAU,CAAE,EAFV,CAFV,CADqB,CAOlB,CACCrC,UAAU,CAAE,2CADb,CAECC,IAAI,CAAE,CACFtB,EAAE,CAAEyD,CAAU,CAAC7D,qBADb,CAFP,CAPkB,CAAV,CAAf,CAgBA5B,CAAC,CAAC2F,IAAF,CAAOC,KAAP,CAAa,IAAb,CAAmBzC,CAAnB,EAA6BP,IAA7B,CAAkC,SAASqC,CAAT,CAAuBY,CAAvB,CAAkC,IAG5DX,CAAAA,CAH4D,CAI5DY,CAAgB,CAAG,EAJyC,CAKhE,IAAKZ,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAGD,CAAY,CAACE,MAA7B,CAAqCD,CAAC,EAAtC,CAA0C,CACtC,GAAIa,CAAAA,CAAa,CAAGd,CAAY,CAACC,CAAD,CAAhC,CACA,GAA8B,GAA1B,EAAAa,CAAa,CAAChE,QAAlB,CAAmC,CAC/BgE,CAAa,CAACV,QAAd,CAAyB,EAAzB,CACAU,CAAa,CAACX,WAAd,CAA4B,CAA5B,CACAU,CAAgB,CAACA,CAAgB,CAACX,MAAlB,CAAhB,CAA4CY,CAA5C,CACAf,CAAqB,CAACe,CAAD,CAAgBd,CAAhB,CACxB,CACJ,CAED7E,CAAG,CAACoC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,gBAAN,CAAwBC,SAAS,CAAE,SAAnC,CAA8CP,KAAK,CAAEsD,CAAU,CAAC9C,SAAhE,CADY,CAEZ,CAACF,GAAG,CAAE,MAAN,CAAcC,SAAS,CAAE,SAAzB,CAFY,CAGZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAAhB,EAIGE,IAJH,CAIQ,SAASC,CAAT,CAAkB,CAOtB3C,CAAS,CAAC8F,MAAV,CAAiB,gCAAjB,CALc,CACVH,SAAS,CAAEA,CADD,CAEVZ,YAAY,CAAEa,CAFJ,CAKd,EACIlD,IADJ,CACS,SAAS6B,CAAT,CAAe,CACjB,GAAIjE,CAAAA,CAAJ,CACIqC,CAAO,CAAC,CAAD,CADX,CAEI4B,CAFJ,CAGIN,CAHJ,CAMH,CARJ,EAQMpB,IARN,CAQW5C,CAAY,CAAC6C,SARxB,CAUJ,CArBA,EAqBED,IArBF,CAqBO5C,CAAY,CAAC6C,SArBpB,CAuBH,CAtCD,EAsCGD,IAtCH,CAsCQ5C,CAAY,CAAC6C,SAtCrB,CAwCH,CA3PK,CAiQFiD,CAAW,CAAG,UAAW,IACrBR,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CADQ,CAGrBC,CAAM,CAAG,CACTC,qBAAqB,CAAEd,CAAS,CAACe,wBAAV,EADd,CAETG,EAAE,CAAEyD,CAAU,CAACzD,EAFN,CAGTD,QAAQ,CAAE0D,CAAU,CAAC1D,QAHZ,CAITD,aAAa,CAAEb,CAJN,CAHY,CAUrBiB,CAAW,CAAGlC,CAAC,CAACmC,KAAF,CAAQR,CAAR,CAVO,CAWzBS,MAAM,CAACC,QAAP,CAAkBpC,CAAG,CAACqC,WAAJ,CAAgB,qCAAuCJ,CAAvD,CACrB,CA7QK,CAoRFwB,CAAU,CAAG,SAASwC,CAAT,CAAkB,CAC/BhG,CAAS,CAAC8F,MAAV,CAAiB,kCAAjB,CAAqDE,CAArD,EACKtD,IADL,CACU,SAASuD,CAAT,CAAkBC,CAAlB,CAAyB,CAC3BpG,CAAC,CAAC,sCAAD,CAAD,CAAwCqG,WAAxC,CAAoDF,CAApD,EACAjG,CAAS,CAACoG,aAAV,CAAwBF,CAAxB,CACH,CAJL,EAKIrD,IALJ,CAKS5C,CAAY,CAAC6C,SALtB,CAMH,CA3RK,CAkSFuD,CAAmB,CAAG,SAAShB,CAAT,CAAY,CAClCA,CAAC,CAACC,cAAF,GADkC,GAG9BtC,CAAAA,CAAW,CAAGlD,CAAC,CAAC,sCAAD,CAAD,CAAwC0B,IAAxC,CAA6C,aAA7C,CAHgB,CAK9ByB,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,2CADU,CAEtBC,IAAI,CAAE,CAAC1B,qBAAqB,CAAEsB,CAAxB,CACEM,MAAM,CAAExD,CAAC,CAAC,4CAAD,CAAD,CAA8CyD,GAA9C,EADV,CAFgB,CAAD,CAAV,CALmB,CAUlCN,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBc,CAAjB,EAA6BX,IAA7B,CAAkC5C,CAAY,CAAC6C,SAA/C,CACH,CA7SK,CAmTFwD,CAAa,CAAG,UAAW,IAEvBf,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAFU,CAGvByB,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,oCADU,CAEtBC,IAAI,CAAE,CAACtB,EAAE,CAAEyD,CAAU,CAACzD,EAAhB,CAFgB,CAAD,CAGtB,CACCqB,UAAU,CAAE,2CADb,CAECC,IAAI,CAAE,CAAC1B,qBAAqB,CAAE6D,CAAU,CAAC7D,qBAAnC,CACE4B,MAAM,CAAExD,CAAC,CAAC,4CAAD,CAAD,CAA8CyD,GAA9C,EADV,CAFP,CAHsB,CAAV,CAHY,CAW3BN,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBc,CAAjB,EAA6BX,IAA7B,CAAkC5C,CAAY,CAAC6C,SAA/C,CACH,CA/TK,CAqUFyD,CAAe,CAAG,UAAW,IAEzBhB,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAFY,CAGzByB,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,sCADU,CAEtBC,IAAI,CAAE,CAACtB,EAAE,CAAEyD,CAAU,CAACzD,EAAhB,CAFgB,CAAD,CAGtB,CACCqB,UAAU,CAAE,2CADb,CAECC,IAAI,CAAE,CAAC1B,qBAAqB,CAAE6D,CAAU,CAAC7D,qBAAnC,CACE4B,MAAM,CAAExD,CAAC,CAAC,4CAAD,CAAD,CAA8CyD,GAA9C,EADV,CAFP,CAHsB,CAAV,CAHc,CAW7BN,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBc,CAAjB,EAA6BX,IAA7B,CAAkC5C,CAAY,CAAC6C,SAA/C,CACH,CAjVK,CAuVF0D,CAAiB,CAAG,UAAW,IAC3BjB,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CADc,CAG3ByB,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,uCADU,CAEtBC,IAAI,CAAE,CAACtB,EAAE,CAAEyD,CAAU,CAACzD,EAAhB,CAFgB,CAAD,CAAV,CAHgB,CAQ/BmB,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiB,SAAS+D,CAAT,CAAkB,CAI/BzG,CAAS,CAAC8F,MAAV,CAAiB,gCAAjB,CAHc,CACVW,OAAO,CAAEA,CADC,CAGd,EAA4D/D,IAA5D,CAAiE,SAASgE,CAAT,CAAe,CAC5ExG,CAAG,CAACyG,UAAJ,CAAe,eAAf,CAAgC,SAAhC,EAA2CjE,IAA3C,CAAgD,SAASkE,CAAT,CAAwB,CACpE,GAAItG,CAAAA,CAAJ,CACIsG,CADJ,CAEIF,CAFJ,CAGIzC,CAHJ,CAKH,CAND,EAMGpB,IANH,CAMQ5C,CAAY,CAAC6C,SANrB,CAOH,CARD,EAQGD,IARH,CAQQ5C,CAAY,CAAC6C,SARrB,CASH,CAbD,EAaGD,IAbH,CAaQ5C,CAAY,CAAC6C,SAbrB,CAcH,CA7WK,CAoXF+D,CAAyB,CAAG,UAAW,CACvC3F,CAAa,CAAGpB,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAAhB,CAEA,GAAI,CAACR,CAAL,CAAqB,CACjBA,CAAc,CAAG,GAAIR,CAAAA,CAAJ,CAAWO,CAAX,CAA0BG,CAAa,CAACQ,qBAAxC,CAAjB,CACAV,CAAc,CAACwD,EAAf,CAAkB,MAAlB,CAA0B,SAASa,CAAT,CAAY7D,CAAZ,CAAkB,IACpCsF,CAAAA,CAAc,CAAG,GAAInG,CAAAA,CADe,CAEpCoG,CAAO,CAAGvF,CAAI,CAACwF,aAFqB,CAIpCC,CAAK,CAAG,EAJ4B,CAKxCnH,CAAC,CAACoH,IAAF,CAAOH,CAAP,CAAgB,SAASI,CAAT,CAAgBC,CAAhB,CAAuB,CACnCH,CAAK,CAACI,IAAN,CAAW,CACPlE,UAAU,CAAE,wCADL,CAEPC,IAAI,CAAE,CAACC,YAAY,CAAE+D,CAAf,CAAsBE,mBAAmB,CAAEpG,CAAa,CAACY,EAAzD,CAFC,CAAX,CAIH,CALD,EAOAmF,CAAK,CAACI,IAAN,CAAW,CACPlE,UAAU,CAAE,+CADL,CAEPC,IAAI,CAAE,CAACC,YAAY,CAAEnC,CAAa,CAACY,EAA7B,CAFC,CAAX,EAKA,GAAIyF,CAAAA,CAAQ,CAAGpH,CAAI,CAAC+C,IAAL,CAAU+D,CAAV,CAAf,CAEAM,CAAQ,CAACN,CAAK,CAAChC,MAAN,CAAe,CAAhB,CAAR,CAA2BuC,IAA3B,CAAgC,SAASxB,CAAT,CAAkB,CAC9C,MAAOhG,CAAAA,CAAS,CAAC8F,MAAV,CAAiB,8BAAjB,CAAiDE,CAAjD,CACV,CAFD,EAEGwB,IAFH,CAEQ,SAASd,CAAT,CAAee,CAAf,CAAmB,CACvB3H,CAAC,CAAC,uCAAD,CAAD,CAAyCqG,WAAzC,CAAqDO,CAArD,EACA1G,CAAS,CAACoG,aAAV,CAAwBqB,CAAxB,EACAC,CAA0B,EAE7B,CAPD,EAQCF,IARD,CAQMV,CAAc,CAACa,OARrB,EASCC,KATD,CASO3H,CAAY,CAAC6C,SATpB,CAUH,CA7BD,CA8BH,CAED9B,CAAc,CAAC6G,0BAAf,CAA0C,CAAC3G,CAAa,CAACY,EAAf,CAA1C,EACAd,CAAc,CAAC8G,OAAf,EACH,CA3ZK,CA6ZFC,CAAiB,CAAG,SAAS1C,CAAT,CAAY,CAChCA,CAAC,CAACC,cAAF,GACApE,CAAa,CAAGpB,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAAhB,CACAP,CAAkB,CAAC+G,qBAAnB,CAAyC9G,CAAa,CAACY,EAAvD,EACAb,CAAkB,CAAC6G,OAAnB,EACH,CAlaK,CAoaFG,CAAqB,CAAG,SAAS5C,CAAT,CAAY6C,CAAZ,CAAoB,IACxCC,CAAAA,CAAM,CAAG,CACTrG,EAAE,CAAEZ,CAAa,CAACY,EADT,CAETW,SAAS,CAAEvB,CAAa,CAACuB,SAFhB,CAGT2F,QAAQ,CAAElH,CAAa,CAACkH,QAHf,CAITC,WAAW,CAAEnH,CAAa,CAACmH,WAJlB,CAKTC,iBAAiB,CAAEpH,CAAa,CAACoH,iBALxB,CAMTC,QAAQ,CAAEL,CAAM,CAACK,QANR,CAOTC,WAAW,CAAEN,CAAM,CAACM,WAPX,CAQTC,UAAU,CAAEP,CAAM,CAACO,UARV,CAD+B,CAWxCC,CAAO,CAAGvI,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACrBC,UAAU,CAAE,mCADS,CAErBC,IAAI,CAAE,CAACmC,UAAU,CAAE4C,CAAb,CAFe,CAAD,CAAV,CAX8B,CAe5CO,CAAO,CAAC,CAAD,CAAP,CAAWlB,IAAX,CAAgB,SAASmB,CAAT,CAAiB,CAC7B,GAAIA,CAAJ,CAAY,CACRzH,CAAa,CAACqH,QAAd,CAAyBL,CAAM,CAACK,QAAhC,CACArH,CAAa,CAACsH,WAAd,CAA4BN,CAAM,CAACM,WAAnC,CACAtH,CAAa,CAACuH,UAAd,CAA2BP,CAAM,CAACO,UAAlC,CACAG,CAAuB,CAAC1H,CAAD,CAC1B,CAEJ,CARD,EAQG0G,KARH,CAQS3H,CAAY,CAAC6C,SARtB,CASH,CA5bK,CAkcF+F,CAAQ,CAAG,UAAW,IAElBtD,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAFK,CAGlByB,CAAQ,CAAG9C,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,mCADU,CAEtBC,IAAI,CAAE,CAACtB,EAAE,CAAEyD,CAAU,CAACzD,EAAhB,CAFgB,CAAD,CAGtB,CACCqB,UAAU,CAAE,2CADb,CAECC,IAAI,CAAE,CAAC1B,qBAAqB,CAAE6D,CAAU,CAAC7D,qBAAnC,CACE4B,MAAM,CAAExD,CAAC,CAAC,4CAAD,CAAD,CAA8CyD,GAA9C,EADV,CAFP,CAHsB,CAAV,CAHO,CAWtBN,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiB,SAASoG,CAAT,CAAkB,CAC/B,GAAI,KAAAA,CAAJ,CAAuB,CACnB5I,CAAG,CAACoC,WAAJ,CAAgB,CAChB,CAACC,GAAG,CAAE,2BAAN,CAAmCC,SAAS,CAAE,SAA9C,CAAyDP,KAAK,CAAEsD,CAAU,CAAC9C,SAA3E,CADgB,CAEhB,CAACF,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAFgB,CAAhB,EAGGE,IAHH,CAGQ,SAASC,CAAT,CAAkB,CACtB1C,CAAY,CAAC8I,KAAb,CACI,IADJ,CAEIpG,CAAO,CAAC,CAAD,CAFX,CAIH,CARD,EAQGE,IARH,CAQQ5C,CAAY,CAAC6C,SARrB,CASH,CACJ,CAZD,EAYGD,IAZH,CAYQ5C,CAAY,CAAC6C,SAZrB,EAaAG,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBc,CAAjB,EAA6BX,IAA7B,CAAkC5C,CAAY,CAAC6C,SAA/C,CACH,CA3dK,CAieFkG,CAAuB,CAAG,UAAW,CACrC,GAAIzD,CAAAA,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAAjB,CACIqC,CAAc,CAAG,kBADrB,CAGA,GAAIjD,CAAS,CAACyB,OAAV,CAAkBkD,CAAU,CAAC1D,QAA7B,CAAJ,CAA4C,CACxCgC,CAAc,CAAG,+BACpB,CAED3D,CAAG,CAACoC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAEsB,CAAN,CAAsBrB,SAAS,CAAE,SAAjC,CAA4CP,KAAK,CAAEsD,CAAU,CAAC9C,SAA9D,CAFY,CAGZ,CAACF,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGE,IALH,CAKQ,SAASC,CAAT,CAAkB,CACtB1C,CAAY,CAAC2C,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKIkG,CALJ,CAOH,CAbD,EAaGhG,IAbH,CAaQ5C,CAAY,CAAC6C,SAbrB,CAcH,CAvfK,CA8fFmG,CAAS,CAAG,SAAS5D,CAAT,CAAY,CACxBA,CAAC,CAAC6D,aAAF,CAAgBC,YAAhB,CAA6BC,OAA7B,CAAqC,MAArC,CAA6CtJ,CAAC,CAACuF,CAAC,CAACX,MAAH,CAAD,CAAYnD,MAAZ,GAAqBC,IAArB,CAA0B,IAA1B,CAA7C,CACH,CAhgBK,CAugBF6H,CAAS,CAAG,SAAShE,CAAT,CAAY,CACxBA,CAAC,CAAC6D,aAAF,CAAgBC,YAAhB,CAA6BG,UAA7B,CAA0C,MAA1C,CACAjE,CAAC,CAACC,cAAF,EACH,CA1gBK,CAihBFiE,CAAS,CAAG,SAASlE,CAAT,CAAY,CACxBA,CAAC,CAACC,cAAF,GACAxF,CAAC,CAAC,IAAD,CAAD,CAAQ0J,QAAR,CAAiB,mBAAjB,CACH,CAphBK,CA2hBFC,CAAS,CAAG,SAASpE,CAAT,CAAY,CACxBA,CAAC,CAACC,cAAF,GACAxF,CAAC,CAAC,IAAD,CAAD,CAAQ4J,WAAR,CAAoB,mBAApB,CACH,CA9hBK,CAqiBFC,CAAQ,CAAG,SAAStE,CAAT,CAAY,CACvBA,CAAC,CAACC,cAAF,GACAzE,CAAU,CAAGwE,CAAC,CAAC6D,aAAF,CAAgBC,YAAhB,CAA6BS,OAA7B,CAAqC,MAArC,CAAb,CACA9I,CAAU,CAAGhB,CAAC,CAACuF,CAAC,CAACX,MAAH,CAAD,CAAYnD,MAAZ,GAAqBC,IAArB,CAA0B,IAA1B,CAAb,CACA1B,CAAC,CAAC,IAAD,CAAD,CAAQ4J,WAAR,CAAoB,mBAApB,EAEAjG,CAAW,EACd,CA5iBK,CAojBFoG,CAAoB,CAAG,SAASxE,CAAT,CAAY,CACnCA,CAAC,CAACC,cAAF,GADmC,GAG/BwE,CAAAA,CAAS,CAAG,KAAKhI,EAAL,CAAQiI,MAAR,CAAe,EAAf,CAHmB,CAI/BxE,CAAU,CAAGzF,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAJkB,CAK/BwI,CAAa,CAAG7J,CAAI,CAAC+C,IAAL,CAAU,CAC1B,CAACC,UAAU,CAAE,2CAAb,CACEC,IAAI,CAAE,CAACkE,mBAAmB,CAAEwC,CAAtB,CAAiCzG,YAAY,CAAEkC,CAAU,CAACzD,EAA1D,CADR,CAD0B,CAG1B,CAACqB,UAAU,CAAE,+CAAb,CACEC,IAAI,CAAE,CAACC,YAAY,CAAEkC,CAAU,CAACzD,EAA1B,CADR,CAH0B,CAAV,CALe,CAYnCkI,CAAa,CAAC,CAAD,CAAb,CAAiBtH,IAAjB,CAAsB,SAASsD,CAAT,CAAkB,CACpChG,CAAS,CAAC8F,MAAV,CAAiB,8BAAjB,CAAiDE,CAAjD,EAA0DtD,IAA1D,CAA+D,SAASgE,CAAT,CAAe,CAC1E5G,CAAC,CAAC,uCAAD,CAAD,CAAyCqG,WAAzC,CAAqDO,CAArD,EACAgB,CAA0B,EAC7B,CAHD,EAGG7E,IAHH,CAGQ5C,CAAY,CAAC6C,SAHrB,CAIH,CALD,EAKGD,IALH,CAKQ5C,CAAY,CAAC6C,SALrB,CAMH,CAtkBK,CA6kBF4E,CAA0B,CAAG,UAAW,CAGxC5H,CAAC,CAAC,kCAAD,CAAD,CAAoC0E,EAApC,CAAuC,OAAvC,CAAgDqF,CAAhD,CAEH,CAllBK,CA0lBFI,CAA4B,CAAG,SAAS1E,CAAT,CAAqB,CACpD,GAAIA,CAAU,CAACzD,EAAX,GAAkBT,CAAtB,CAA4C,CAExCA,CAAoB,CAAGkE,CAAU,CAACzD,EAAlC,CACA3B,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACHC,UAAU,CAAE,mCADT,CAEHC,IAAI,CAAE,CAACtB,EAAE,CAAEyD,CAAU,CAACzD,EAAhB,CAFH,CAAD,CAAV,CAIH,CACJ,CAnmBK,CA4mBFoI,CAAkB,CAAG,SAASC,CAAT,CAAgB,CACrC,GAAIC,CAAAA,CAAQ,CAAGjJ,CAAmB,CAACgJ,CAAD,CAAlC,CACA,GAAI,CAACC,CAAL,CAAe,CACXA,CAAQ,CAAG,YACd,CACD,MAAOA,CAAAA,CACV,CAlnBK,CAynBFxB,CAAuB,CAAG,SAASrD,CAAT,CAAqB,CAC/C,GAAImD,CAAAA,CAAO,CAAG5I,CAAC,CAACuK,QAAF,GAAa1C,OAAb,GAAuBe,OAAvB,EAAd,CACI1C,CAAO,CAAG,EADd,CAGAA,CAAO,CAACT,UAAR,CAAqBA,CAArB,CACAS,CAAO,CAACsE,uBAAR,IACAtE,CAAO,CAACuE,uBAAR,IACAvE,CAAO,CAACwE,QAAR,IACAxE,CAAO,CAACyE,aAAR,CAAwB1K,CAAG,CAACqC,WAAJ,CAAgB,gBAAhB,CAAxB,CAEA,GAAImD,CAAU,CAACiD,WAAX,EAA0B/H,CAAQ,CAACiK,IAAvC,CAA6C,CAEzChC,CAAO,CAAGjI,CAAQ,CAACkK,SAAT,CAAmBpF,CAAU,CAACiD,WAA9B,EAA2ChB,IAA3C,CAAgD,SAAStH,CAAT,CAAc,CACpE,GAAI0K,CAAAA,CAAJ,CACA9K,CAAC,CAACoH,IAAF,CAAO9F,CAAP,CAAqB,SAAS+F,CAAT,CAAgB0D,CAAhB,CAAyB,CAC1C,GAAIA,CAAO,CAACC,IAAR,EAAgBvF,CAAU,CAACgD,QAA/B,CAAyC,CACrCqC,CAAI,CAAGC,CAAO,CAACD,IAClB,CACJ,CAJD,EAKA,MAAO,CAAC1K,CAAD,CAAM0K,CAAN,CACV,CARS,CASb,CAEDlC,CAAO,CAAClB,IAAR,CAAa,SAASuD,CAAT,CAAe,CACxB,GAAoB,WAAhB,QAAOA,CAAAA,CAAX,CAAiC,CAC7B/E,CAAO,CAACwE,QAAR,IACAxE,CAAO,CAACgF,IAAR,CAAe,CACXC,OAAO,CAAEF,CAAI,CAAC,CAAD,CADF,CAEXD,IAAI,CAAEC,CAAI,CAAC,CAAD,CAFC,CAIlB,CACD,MAAO/E,CAAAA,CACV,CATD,EASGwB,IATH,CASQ,SAASxB,CAAT,CAAkB,CACtB,MAAOhG,CAAAA,CAAS,CAAC8F,MAAV,CAAiB,4BAAjB,CAA+CE,CAA/C,CACV,CAXD,EAWGwB,IAXH,CAWQ,SAASd,CAAT,CAAe,CACnB5G,CAAC,CAAC,kCAAD,CAAD,CAAoC4G,IAApC,CAAyCA,CAAzC,EACA5G,CAAC,CAAC,kCAAD,CAAD,CAAoC0E,EAApC,CAAuC,OAAvC,CAAgDqF,CAAhD,EACA,MAAO7J,CAAAA,CAAS,CAAC8F,MAAV,CAAiB,iBAAjB,CAAoC,EAApC,CACV,CAfD,EAeG0B,IAfH,CAeQ,SAASd,CAAT,CAAee,CAAf,CAAmB,CACvBzH,CAAS,CAACkL,mBAAV,CAA8B,uCAA9B,CAAqExE,CAArE,CAA2Ee,CAA3E,EACA,MAAOtH,CAAAA,CAAI,CAAC+C,IAAL,CAAU,CAAC,CACdC,UAAU,CAAE,+CADE,CAEdC,IAAI,CAAE,CAACC,YAAY,CAAEkC,CAAU,CAACzD,EAA1B,CAFQ,CAAD,CAAV,EAGH,CAHG,CAIV,CArBD,EAqBG0F,IArBH,CAqBQ,SAASxB,CAAT,CAAkB,CACtB,MAAOhG,CAAAA,CAAS,CAAC8F,MAAV,CAAiB,8BAAjB,CAAiDE,CAAjD,CACV,CAvBD,EAuBGwB,IAvBH,CAuBQ,SAASd,CAAT,CAAee,CAAf,CAAmB,CACvB3H,CAAC,CAAC,uCAAD,CAAD,CAAyCqG,WAAzC,CAAqDO,CAArD,EACA1G,CAAS,CAACoG,aAAV,CAAwBqB,CAAxB,EACAC,CAA0B,EAE7B,CA5BD,EA4BGE,KA5BH,CA4BS3H,CAAY,CAAC6C,SA5BtB,CA6BH,CA7qBK,CAsrBFqI,CAAc,CAAG,SAAShB,CAAT,CAAgB,CACjC,MAAOjK,CAAAA,CAAG,CAACyG,UAAJ,CAAe,gBAAkBuD,CAAkB,CAACC,CAAD,CAAnD,CAA4D,SAA5D,CACV,CAxrBK,CAisBFiB,CAAmB,CAAG,SAASjB,CAAT,CAAgB,CACtC,MAAOjK,CAAAA,CAAG,CAACyG,UAAJ,CAAe,qBAAuBuD,CAAkB,CAACC,CAAD,CAAxD,CAAiE,SAAjE,CACV,CAnsBK,CA4sBFkB,CAAgB,CAAG,SAAS5G,CAAT,CAAchD,CAAd,CAAsB,CACzC,GAAI6J,CAAAA,CAAI,CAAG7J,CAAM,CAACkD,QAAlB,CACI7C,CAAE,CAAGhC,CAAC,CAACwL,CAAD,CAAD,CAAQ9J,IAAR,CAAa,IAAb,CADT,CAEI+J,CAAG,CAAGzL,CAAC,CAAC,2DAAD,CAFX,CAGI0L,CAAU,CAAG1L,CAAC,CAAC,yCAAD,CAHlB,CAII2L,CAAa,CAAG3L,CAAC,CAAC,uCAAD,CAJrB,CAKIqK,CAAK,CAAG,CALZ,CAMIuB,CAAQ,CAAG,CANf,CAQAnL,CAAO,CAACoL,QAAR,GAEA,GAAkB,WAAd,QAAO7J,CAAAA,CAAX,CAA+B,CAI3BhC,CAAC,CAAC,kCAAD,CAAD,CAAoC4G,IAApC,CAAyC4E,CAAI,CAACM,KAAL,GAAazG,QAAb,GAAwB0G,MAAxB,GAAiCC,GAAjC,GAAuCC,IAAvC,EAAzC,EACAjM,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAA0D,IAA1D,EACAgK,CAAU,CAACQ,IAAX,EAEH,CARD,IAQO,CACH,GAAIzG,CAAAA,CAAU,CAAG3E,CAAS,CAAC+C,aAAV,CAAwB7B,CAAxB,CAAjB,CAEAqI,CAAK,CAAGvJ,CAAS,CAACqL,kBAAV,CAA6BnK,CAA7B,CAAR,CACA4J,CAAQ,CAAGvB,CAAK,CAAG,CAAnB,CAEAqB,CAAU,CAAC5G,IAAX,GACA9E,CAAC,CAAC,qCAAD,CAAD,CAAuC0B,IAAvC,CAA4C,YAA5C,CAA0D+D,CAA1D,EACAqD,CAAuB,CAACrD,CAAD,CAAvB,CAEA0E,CAA4B,CAAC1E,CAAD,CAC/B,CACD6F,CAAmB,CAACjB,CAAD,CAAnB,CAA2B3C,IAA3B,CAAgC,SAAStH,CAAT,CAAc,CAC1CuL,CAAa,CAACM,IAAd,CAAmB7L,CAAnB,CAEH,CAHD,EAGG0H,KAHH,CAGS3H,CAAY,CAAC6C,SAHtB,EAKAqI,CAAc,CAACO,CAAD,CAAd,CAAyBlE,IAAzB,CAA8B,SAAStH,CAAT,CAAc,CACxCqL,CAAG,CAAC3G,IAAJ,GACKN,IADL,CACU,wBADV,EAEKyH,IAFL,CAEU7L,CAFV,CAIH,CALD,EAKG0H,KALH,CAKS3H,CAAY,CAAC6C,SALtB,EAQA2B,CAAG,CAACa,cAAJ,GACA,QACH,CA1vBK,CAmwBF4G,EAAe,CAAG,SAASC,CAAT,CAAwB,CAC1C,GAAIC,CAAAA,CAAG,CAAGD,CAAa,CAACE,KAAd,CAAoB,GAApB,CAAV,CACAD,CAAG,CAACE,OAAJ,CAAY,EAAZ,EACA,MAAOF,CAAAA,CAAG,CAAC,CAAD,CAAV,CAGA,MAAOA,CAAAA,CACV,CA1wBK,CA4wBN,MAAO,CAUHG,IAAI,CAAE,cAASC,CAAT,CAAgBC,CAAhB,CAA2BC,CAA3B,CAAuCC,CAAvC,CAAkD,CACpD/L,CAAS,CAAG4L,CAAZ,CACAzL,CAAa,CAAG0L,CAAhB,CACAtL,CAAmB,CAAG+K,EAAe,CAACQ,CAAD,CAArC,CACAtL,CAAY,CAAGuL,CAAf,CAEA7M,CAAC,CAAC,2DAAD,CAAD,CAA2D0E,EAA3D,CAA8D,OAA9D,CAAuElD,CAAvE,EAEAf,CAAO,CAACqM,OAAR,CAAgB,wBAAhB,CAA0C,CACtC,uBAAwB7G,CADc,CAEtC,yBAA0BiD,CAFY,CAGtC,uBAAwB5D,CAHc,CAItC,yBAA0BkB,CAJY,CAKtC,2BAA4BC,CALU,CAMtC,gCAAiCC,CANK,CAOtC,sCAAuCK,CAAyB,CAACgG,IAA1B,CAA+B,IAA/B,CAPD,CAQtC,kCAAmC9E,CAAiB,CAAC8E,IAAlB,CAAuB,IAAvB,CARG,CAA1C,EAUA/M,CAAC,CAAC,yCAAD,CAAD,CAA2CkM,IAA3C,GACAlM,CAAC,CAAC,2DAAD,CAAD,CAA2DkM,IAA3D,GAEAlM,CAAC,CAAC,sCAAD,CAAD,CAAwC0E,EAAxC,CAA2C,QAA3C,CAAqD6B,CAArD,EAEA,GAAIyG,CAAAA,CAAG,CAAGhN,CAAC,CAAC,8DAAD,CAAX,CACAgN,CAAG,CAACtI,EAAJ,CAAO,WAAP,CAAoB,SAApB,CAA+ByE,CAA/B,EACKzE,EADL,CACQ,UADR,CACoB,SADpB,CAC+B6E,CAD/B,EAEK7E,EAFL,CAEQ,WAFR,CAEqB,SAFrB,CAEgC+E,CAFhC,EAGK/E,EAHL,CAGQ,WAHR,CAGqB,SAHrB,CAGgCiF,CAHhC,EAIKjF,EAJL,CAIQ,MAJR,CAIgB,SAJhB,CAI2BmF,CAJ3B,EAMA6C,CAAK,CAAChI,EAAN,CAAS,kBAAT,CAA6B6G,CAA7B,EAGApK,CAAkB,CAAG,GAAIP,CAAAA,CAAJ,CAAeE,CAAf,CAA0BQ,CAA1B,CAArB,CACAH,CAAkB,CAACuD,EAAnB,CAAsB,MAAtB,CAA8ByD,CAAqB,CAAC4E,IAAtB,CAA2B,IAA3B,CAA9B,CACH,CA7CE,CA+CV,CA50BK,CAAN","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 .\n\n/**\n * Handle selection changes and actions on the competency tree.\n *\n * @module tool_lp/competencyactions\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/url',\n 'core/templates',\n 'core/notification',\n 'core/str',\n 'core/ajax',\n 'tool_lp/dragdrop-reorder',\n 'tool_lp/tree',\n 'tool_lp/dialogue',\n 'tool_lp/menubar',\n 'tool_lp/competencypicker',\n 'tool_lp/competency_outcomes',\n 'tool_lp/competencyruleconfig',\n 'core/pending',\n ],\n function(\n $, url, templates, notification, str, ajax, dragdrop, Ariatree, Dialogue, menubar, Picker, Outcomes, RuleConfig, Pending\n ) {\n\n // Private variables and functions.\n /** @var {Object} treeModel - This is an object representing the nodes in the tree. */\n var treeModel = null;\n /** @var {Node} moveSource - The start of a drag operation */\n var moveSource = null;\n /** @var {Node} moveTarget - The end of a drag operation */\n var moveTarget = null;\n /** @var {Number} pageContextId The page context ID. */\n var pageContextId;\n /** @var {Object} Picker instance. */\n var pickerInstance;\n /** @var {Object} Rule config instance. */\n var ruleConfigInstance;\n /** @var {Object} The competency we're picking a relation to. */\n var relatedTarget;\n /** @var {Object} Taxonomy constants indexed per level. */\n var taxonomiesConstants;\n /** @var {Array} The rules modules. Values are object containing type, namd and amd. */\n var rulesModules;\n /** @var {Number} the selected competency ID. */\n var selectedCompetencyId = null;\n\n /**\n * Respond to choosing the \"Add\" menu item for the selected node in the tree.\n * @method addHandler\n */\n var addHandler = function() {\n var parent = $('[data-region=\"competencyactions\"]').data('competency');\n\n var params = {\n competencyframeworkid: treeModel.getCompetencyFrameworkId(),\n pagecontextid: pageContextId\n };\n\n if (parent !== null) {\n // We are adding at a sub node.\n params.parentid = parent.id;\n }\n\n var relocate = function() {\n var queryparams = $.param(params);\n window.location = url.relativeUrl('/admin/tool/lp/editcompetency.php?' + queryparams);\n };\n\n if (parent !== null && treeModel.hasRule(parent.id)) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'addingcompetencywillresetparentrule', component: 'tool_lp', param: parent.shortname},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0],\n strings[1],\n strings[2],\n strings[3],\n relocate\n );\n }).fail(notification.exception);\n } else {\n relocate();\n }\n };\n\n /**\n * A source and destination has been chosen - so time to complete a move.\n * @method doMove\n */\n var doMove = function() {\n var frameworkid = $('[data-region=\"filtercompetencies\"]').data('frameworkid');\n var requests = ajax.call([{\n methodname: 'core_competency_set_parent_competency',\n args: {competencyid: moveSource, parentid: moveTarget}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: frameworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Confirms a competency move.\n *\n * @method confirmMove\n */\n var confirmMove = function() {\n moveTarget = typeof moveTarget === \"undefined\" ? 0 : moveTarget;\n if (moveTarget == moveSource) {\n // No move to do.\n return;\n }\n\n var targetComp = treeModel.getCompetency(moveTarget) || {},\n sourceComp = treeModel.getCompetency(moveSource) || {},\n confirmMessage = 'movecompetencywillresetrules',\n showConfirm = false;\n\n // We shouldn't be moving the competency to the same parent.\n if (sourceComp.parentid == moveTarget) {\n return;\n }\n\n // If we are moving to a child of self.\n if (targetComp.path && targetComp.path.indexOf('/' + sourceComp.id + '/') >= 0) {\n confirmMessage = 'movecompetencytochildofselfwillresetrules';\n\n // Show a confirmation if self has rules, as they'll disappear.\n showConfirm = showConfirm || treeModel.hasRule(sourceComp.id);\n }\n\n // Show a confirmation if the current parent, or the destination have rules.\n showConfirm = showConfirm || (treeModel.hasRule(targetComp.id) || treeModel.hasRule(sourceComp.parentid));\n\n // Show confirm, and/or do the things.\n if (showConfirm) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: confirmMessage, component: 'tool_lp'},\n {key: 'yes', component: 'moodle'},\n {key: 'no', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete competency X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doMove\n );\n }).fail(notification.exception);\n\n } else {\n doMove();\n }\n };\n\n /**\n * A move competency popup was opened - initialise the aria tree in it.\n * @method initMovePopup\n * @param {dialogue} popup The tool_lp/dialogue that was created.\n */\n var initMovePopup = function(popup) {\n var body = $(popup.getContent());\n var treeRoot = body.find('[data-enhance=movetree]');\n var tree = new Ariatree(treeRoot, false);\n tree.on('selectionchanged', function(evt, params) {\n var target = params.selected;\n moveTarget = $(target).data('id');\n });\n treeRoot.show();\n\n body.on('click', '[data-action=\"move\"]', function() {\n popup.close();\n confirmMove();\n });\n body.on('click', '[data-action=\"cancel\"]', function() {\n popup.close();\n });\n };\n\n /**\n * Turn a flat list of competencies into a tree structure (recursive).\n * @method addCompetencyChildren\n * @param {Object} parent The current parent node in the tree\n * @param {Object[]} competencies The flat list of competencies\n */\n var addCompetencyChildren = function(parent, competencies) {\n var i;\n\n for (i = 0; i < competencies.length; i++) {\n if (competencies[i].parentid == parent.id) {\n parent.haschildren = true;\n competencies[i].children = [];\n competencies[i].haschildren = false;\n parent.children[parent.children.length] = competencies[i];\n addCompetencyChildren(competencies[i], competencies);\n }\n }\n };\n\n /**\n * A node was chosen and \"Move\" was selected from the menu. Open a popup to select the target.\n * @param {Event} e\n * @method moveHandler\n */\n var moveHandler = function(e) {\n e.preventDefault();\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n\n // Remember what we are moving.\n moveSource = competency.id;\n\n // Load data for the template.\n var requests = ajax.call([\n {\n methodname: 'core_competency_search_competencies',\n args: {\n competencyframeworkid: competency.competencyframeworkid,\n searchtext: ''\n }\n }, {\n methodname: 'core_competency_read_competency_framework',\n args: {\n id: competency.competencyframeworkid\n }\n }\n ]);\n\n // When all data has arrived, continue.\n $.when.apply(null, requests).done(function(competencies, framework) {\n\n // Expand the list of competencies into a tree.\n var i;\n var competenciestree = [];\n for (i = 0; i < competencies.length; i++) {\n var onecompetency = competencies[i];\n if (onecompetency.parentid == \"0\") {\n onecompetency.children = [];\n onecompetency.haschildren = 0;\n competenciestree[competenciestree.length] = onecompetency;\n addCompetencyChildren(onecompetency, competencies);\n }\n }\n\n str.get_strings([\n {key: 'movecompetency', component: 'tool_lp', param: competency.shortname},\n {key: 'move', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n\n var context = {\n framework: framework,\n competencies: competenciestree\n };\n\n templates.render('tool_lp/competencies_move_tree', context)\n .done(function(tree) {\n new Dialogue(\n strings[0], // Move competency x.\n tree, // The move tree.\n initMovePopup\n );\n\n }).fail(notification.exception);\n\n }).fail(notification.exception);\n\n }).fail(notification.exception);\n\n };\n\n /**\n * Edit the selected competency.\n * @method editHandler\n */\n var editHandler = function() {\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n\n var params = {\n competencyframeworkid: treeModel.getCompetencyFrameworkId(),\n id: competency.id,\n parentid: competency.parentid,\n pagecontextid: pageContextId\n };\n\n var queryparams = $.param(params);\n window.location = url.relativeUrl('/admin/tool/lp/editcompetency.php?' + queryparams);\n };\n\n /**\n * Re-render the page with the latest data.\n * @param {Object} context\n * @method reloadPage\n */\n var reloadPage = function(context) {\n templates.render('tool_lp/manage_competencies_page', context)\n .done(function(newhtml, newjs) {\n $('[data-region=\"managecompetencies\"]').replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n })\n .fail(notification.exception);\n };\n\n /**\n * Perform a search and render the page with the new search results.\n * @param {Event} e\n * @method updateSearchHandler\n */\n var updateSearchHandler = function(e) {\n e.preventDefault();\n\n var frameworkid = $('[data-region=\"filtercompetencies\"]').data('frameworkid');\n\n var requests = ajax.call([{\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: frameworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[0].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Move a competency \"up\". This only affects the sort order within the same branch of the tree.\n * @method moveUpHandler\n */\n var moveUpHandler = function() {\n // We are chaining ajax requests here.\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var requests = ajax.call([{\n methodname: 'core_competency_move_up_competency',\n args: {id: competency.id}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: competency.competencyframeworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Move a competency \"down\". This only affects the sort order within the same branch of the tree.\n * @method moveDownHandler\n */\n var moveDownHandler = function() {\n // We are chaining ajax requests here.\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var requests = ajax.call([{\n methodname: 'core_competency_move_down_competency',\n args: {id: competency.id}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: competency.competencyframeworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Open a dialogue to show all the courses using the selected competency.\n * @method seeCoursesHandler\n */\n var seeCoursesHandler = function() {\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n\n var requests = ajax.call([{\n methodname: 'tool_lp_list_courses_using_competency',\n args: {id: competency.id}\n }]);\n\n requests[0].done(function(courses) {\n var context = {\n courses: courses\n };\n templates.render('tool_lp/linked_courses_summary', context).done(function(html) {\n str.get_string('linkedcourses', 'tool_lp').done(function(linkedcourses) {\n new Dialogue(\n linkedcourses, // Title.\n html, // The linked courses.\n initMovePopup\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Open a competencies popup to relate competencies.\n *\n * @method relateCompetenciesHandler\n */\n var relateCompetenciesHandler = function() {\n relatedTarget = $('[data-region=\"competencyactions\"]').data('competency');\n\n if (!pickerInstance) {\n pickerInstance = new Picker(pageContextId, relatedTarget.competencyframeworkid);\n pickerInstance.on('save', function(e, data) {\n var pendingPromise = new Pending();\n var compIds = data.competencyIds;\n\n var calls = [];\n $.each(compIds, function(index, value) {\n calls.push({\n methodname: 'core_competency_add_related_competency',\n args: {competencyid: value, relatedcompetencyid: relatedTarget.id}\n });\n });\n\n calls.push({\n methodname: 'tool_lp_data_for_related_competencies_section',\n args: {competencyid: relatedTarget.id}\n });\n\n var promises = ajax.call(calls);\n\n promises[calls.length - 1].then(function(context) {\n return templates.render('tool_lp/related_competencies', context);\n }).then(function(html, js) {\n $('[data-region=\"relatedcompetencies\"]').replaceWith(html);\n templates.runTemplateJS(js);\n updatedRelatedCompetencies();\n return;\n })\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n\n pickerInstance.setDisallowedCompetencyIDs([relatedTarget.id]);\n pickerInstance.display();\n };\n\n var ruleConfigHandler = function(e) {\n e.preventDefault();\n relatedTarget = $('[data-region=\"competencyactions\"]').data('competency');\n ruleConfigInstance.setTargetCompetencyId(relatedTarget.id);\n ruleConfigInstance.display();\n };\n\n var ruleConfigSaveHandler = function(e, config) {\n var update = {\n id: relatedTarget.id,\n shortname: relatedTarget.shortname,\n idnumber: relatedTarget.idnumber,\n description: relatedTarget.description,\n descriptionformat: relatedTarget.descriptionformat,\n ruletype: config.ruletype,\n ruleoutcome: config.ruleoutcome,\n ruleconfig: config.ruleconfig\n };\n var promise = ajax.call([{\n methodname: 'core_competency_update_competency',\n args: {competency: update}\n }]);\n promise[0].then(function(result) {\n if (result) {\n relatedTarget.ruletype = config.ruletype;\n relatedTarget.ruleoutcome = config.ruleoutcome;\n relatedTarget.ruleconfig = config.ruleconfig;\n renderCompetencySummary(relatedTarget);\n }\n return;\n }).catch(notification.exception);\n };\n\n /**\n * Delete a competency.\n * @method doDelete\n */\n var doDelete = function() {\n // We are chaining ajax requests here.\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var requests = ajax.call([{\n methodname: 'core_competency_delete_competency',\n args: {id: competency.id}\n }, {\n methodname: 'tool_lp_data_for_competencies_manage_page',\n args: {competencyframeworkid: competency.competencyframeworkid,\n search: $('[data-region=\"filtercompetencies\"] input').val()}\n }]);\n requests[0].done(function(success) {\n if (success === false) {\n str.get_strings([\n {key: 'competencycannotbedeleted', component: 'tool_lp', param: competency.shortname},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.alert(\n null,\n strings[0]\n );\n }).fail(notification.exception);\n }\n }).fail(notification.exception);\n requests[1].done(reloadPage).fail(notification.exception);\n };\n\n /**\n * Show a confirm dialogue before deleting a competency.\n * @method deleteCompetencyHandler\n */\n var deleteCompetencyHandler = function() {\n var competency = $('[data-region=\"competencyactions\"]').data('competency'),\n confirmMessage = 'deletecompetency';\n\n if (treeModel.hasRule(competency.parentid)) {\n confirmMessage = 'deletecompetencyparenthasrule';\n }\n\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: confirmMessage, component: 'tool_lp', param: competency.shortname},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete competency X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doDelete\n );\n }).fail(notification.exception);\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dragStart\n * @param {Event} e\n */\n var dragStart = function(e) {\n e.originalEvent.dataTransfer.setData('text', $(e.target).parent().data('id'));\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method allowDrop\n * @param {Event} e\n */\n var allowDrop = function(e) {\n e.originalEvent.dataTransfer.dropEffect = 'move';\n e.preventDefault();\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dragEnter\n * @param {Event} e\n */\n var dragEnter = function(e) {\n e.preventDefault();\n $(this).addClass('currentdragtarget');\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dragLeave\n * @param {Event} e\n */\n var dragLeave = function(e) {\n e.preventDefault();\n $(this).removeClass('currentdragtarget');\n };\n\n /**\n * HTML5 implementation of drag/drop (there is an accesible alternative in the menus).\n * @method dropOver\n * @param {Event} e\n */\n var dropOver = function(e) {\n e.preventDefault();\n moveSource = e.originalEvent.dataTransfer.getData('text');\n moveTarget = $(e.target).parent().data('id');\n $(this).removeClass('currentdragtarget');\n\n confirmMove();\n };\n\n /**\n * Deletes a related competency without confirmation.\n *\n * @param {Event} e The event that triggered the action.\n * @method deleteRelatedHandler\n */\n var deleteRelatedHandler = function(e) {\n e.preventDefault();\n\n var relatedid = this.id.substr(11);\n var competency = $('[data-region=\"competencyactions\"]').data('competency');\n var removeRelated = ajax.call([\n {methodname: 'core_competency_remove_related_competency',\n args: {relatedcompetencyid: relatedid, competencyid: competency.id}},\n {methodname: 'tool_lp_data_for_related_competencies_section',\n args: {competencyid: competency.id}}\n ]);\n\n removeRelated[1].done(function(context) {\n templates.render('tool_lp/related_competencies', context).done(function(html) {\n $('[data-region=\"relatedcompetencies\"]').replaceWith(html);\n updatedRelatedCompetencies();\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Updates the competencies list (with relations) and add listeners.\n *\n * @method updatedRelatedCompetencies\n */\n var updatedRelatedCompetencies = function() {\n\n // Listeners to newly loaded related competencies.\n $('[data-action=\"deleterelation\"]').on('click', deleteRelatedHandler);\n\n };\n\n /**\n * Log the competency viewed event.\n *\n * @param {Object} competency The competency.\n * @method triggerCompetencyViewedEvent\n */\n var triggerCompetencyViewedEvent = function(competency) {\n if (competency.id !== selectedCompetencyId) {\n // Set the selected competency id.\n selectedCompetencyId = competency.id;\n ajax.call([{\n methodname: 'core_competency_competency_viewed',\n args: {id: competency.id}\n }]);\n }\n };\n\n /**\n * Return the taxonomy constant for a level.\n *\n * @param {Number} level The level.\n * @return {String}\n * @function getTaxonomyAtLevel\n */\n var getTaxonomyAtLevel = function(level) {\n var constant = taxonomiesConstants[level];\n if (!constant) {\n constant = 'competency';\n }\n return constant;\n };\n\n /**\n * Render the competency summary.\n *\n * @param {Object} competency The competency.\n */\n var renderCompetencySummary = function(competency) {\n var promise = $.Deferred().resolve().promise(),\n context = {};\n\n context.competency = competency;\n context.showdeleterelatedaction = true;\n context.showrelatedcompetencies = true;\n context.showrule = false;\n context.pluginbaseurl = url.relativeUrl('/admin/tool/lp');\n\n if (competency.ruleoutcome != Outcomes.NONE) {\n // Get the outcome and rule name.\n promise = Outcomes.getString(competency.ruleoutcome).then(function(str) {\n var name;\n $.each(rulesModules, function(index, modInfo) {\n if (modInfo.type == competency.ruletype) {\n name = modInfo.name;\n }\n });\n return [str, name];\n });\n }\n\n promise.then(function(strs) {\n if (typeof strs !== 'undefined') {\n context.showrule = true;\n context.rule = {\n outcome: strs[0],\n type: strs[1]\n };\n }\n return context;\n }).then(function(context) {\n return templates.render('tool_lp/competency_summary', context);\n }).then(function(html) {\n $('[data-region=\"competencyinfo\"]').html(html);\n $('[data-action=\"deleterelation\"]').on('click', deleteRelatedHandler);\n return templates.render('tool_lp/loading', {});\n }).then(function(html, js) {\n templates.replaceNodeContents('[data-region=\"relatedcompetencies\"]', html, js);\n return ajax.call([{\n methodname: 'tool_lp_data_for_related_competencies_section',\n args: {competencyid: competency.id}\n }])[0];\n }).then(function(context) {\n return templates.render('tool_lp/related_competencies', context);\n }).then(function(html, js) {\n $('[data-region=\"relatedcompetencies\"]').replaceWith(html);\n templates.runTemplateJS(js);\n updatedRelatedCompetencies();\n return;\n }).catch(notification.exception);\n };\n\n /**\n * Return the string \"Add \".\n *\n * @param {Number} level The level.\n * @return {String}\n * @function strAddTaxonomy\n */\n var strAddTaxonomy = function(level) {\n return str.get_string('taxonomy_add_' + getTaxonomyAtLevel(level), 'tool_lp');\n };\n\n /**\n * Return the string \"Selected \".\n *\n * @param {Number} level The level.\n * @return {String}\n * @function strSelectedTaxonomy\n */\n var strSelectedTaxonomy = function(level) {\n return str.get_string('taxonomy_selected_' + getTaxonomyAtLevel(level), 'tool_lp');\n };\n\n /**\n * Handler when a node in the aria tree is selected.\n * @method selectionChanged\n * @param {Event} evt The event that triggered the selection change.\n * @param {Object} params The parameters for the event. Contains a list of selected nodes.\n * @return {Boolean}\n */\n var selectionChanged = function(evt, params) {\n var node = params.selected,\n id = $(node).data('id'),\n btn = $('[data-region=\"competencyactions\"] [data-action=\"add\"]'),\n actionMenu = $('[data-region=\"competencyactionsmenu\"]'),\n selectedTitle = $('[data-region=\"selected-competency\"]'),\n level = 0,\n sublevel = 1;\n\n menubar.closeAll();\n\n if (typeof id === \"undefined\") {\n // Assume this is the root of the tree.\n // Here we are only getting the text from the top of the tree, to do it we clone the tree,\n // remove all children and then call text on the result.\n $('[data-region=\"competencyinfo\"]').html(node.clone().children().remove().end().text());\n $('[data-region=\"competencyactions\"]').data('competency', null);\n actionMenu.hide();\n\n } else {\n var competency = treeModel.getCompetency(id);\n\n level = treeModel.getCompetencyLevel(id);\n sublevel = level + 1;\n\n actionMenu.show();\n $('[data-region=\"competencyactions\"]').data('competency', competency);\n renderCompetencySummary(competency);\n // Log Competency viewed event.\n triggerCompetencyViewedEvent(competency);\n }\n strSelectedTaxonomy(level).then(function(str) {\n selectedTitle.text(str);\n return;\n }).catch(notification.exception);\n\n strAddTaxonomy(sublevel).then(function(str) {\n btn.show()\n .find('[data-region=\"term\"]')\n .text(str);\n return;\n }).catch(notification.exception);\n\n // We handled this event so consume it.\n evt.preventDefault();\n return false;\n };\n\n /**\n * Return the string \"Selected \".\n *\n * @function parseTaxonomies\n * @param {String} taxonomiesstr Comma separated list of taxonomies.\n * @return {Array} of level => taxonomystr\n */\n var parseTaxonomies = function(taxonomiesstr) {\n var all = taxonomiesstr.split(',');\n all.unshift(\"\");\n delete all[0];\n\n // Note we don't need to fill holes, because other functions check for empty anyway.\n return all;\n };\n\n return {\n /**\n * Initialise this page (attach event handlers etc).\n *\n * @method init\n * @param {Object} model The tree model provides some useful functions for loading and searching competencies.\n * @param {Number} pagectxid The page context ID.\n * @param {Object} taxonomies Constants indexed by level.\n * @param {Object} rulesMods The modules of the rules.\n */\n init: function(model, pagectxid, taxonomies, rulesMods) {\n treeModel = model;\n pageContextId = pagectxid;\n taxonomiesConstants = parseTaxonomies(taxonomies);\n rulesModules = rulesMods;\n\n $('[data-region=\"competencyactions\"] [data-action=\"add\"]').on('click', addHandler);\n\n menubar.enhance('.competencyactionsmenu', {\n '[data-action=\"edit\"]': editHandler,\n '[data-action=\"delete\"]': deleteCompetencyHandler,\n '[data-action=\"move\"]': moveHandler,\n '[data-action=\"moveup\"]': moveUpHandler,\n '[data-action=\"movedown\"]': moveDownHandler,\n '[data-action=\"linkedcourses\"]': seeCoursesHandler,\n '[data-action=\"relatedcompetencies\"]': relateCompetenciesHandler.bind(this),\n '[data-action=\"competencyrules\"]': ruleConfigHandler.bind(this)\n });\n $('[data-region=\"competencyactionsmenu\"]').hide();\n $('[data-region=\"competencyactions\"] [data-action=\"add\"]').hide();\n\n $('[data-region=\"filtercompetencies\"]').on('submit', updateSearchHandler);\n // Simple html5 drag drop because we already added an accessible alternative.\n var top = $('[data-region=\"managecompetencies\"] [data-enhance=\"tree\"]');\n top.on('dragstart', 'li>span', dragStart)\n .on('dragover', 'li>span', allowDrop)\n .on('dragenter', 'li>span', dragEnter)\n .on('dragleave', 'li>span', dragLeave)\n .on('drop', 'li>span', dropOver);\n\n model.on('selectionchanged', selectionChanged);\n\n // Prepare the configuration tool.\n ruleConfigInstance = new RuleConfig(treeModel, rulesModules);\n ruleConfigInstance.on('save', ruleConfigSaveHandler.bind(this));\n }\n };\n});\n"],"file":"competencyactions.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencydialogue.min.js.map b/admin/tool/lp/amd/build/competencydialogue.min.js.map index 0b54b1160dd..fda23b89f55 100644 --- a/admin/tool/lp/amd/build/competencydialogue.min.js.map +++ b/admin/tool/lp/amd/build/competencydialogue.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencydialogue.js"],"names":["define","$","notification","ajax","templates","str","Dialogue","instance","Competencydialogue","prototype","triggerCompetencyViewedEvent","competencyId","call","methodname","args","id","showDialogue","competencyid","options","datapromise","getCompetencyDataPromise","localthis","done","data","render","html","competency","shortname","fail","exception","showDialogueFromData","dataSource","enhanceDialogue","clickEventHandler","e","compdialogue","currentTarget","includerelated","includecourses","preventDefault","requests","then","context","init","delegate","bind"],"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 .\n\n/**\n * Display Competency in dialogue box.\n *\n * @module tool_lp/Competencydialogue\n * @package tool_lp\n * @copyright 2015 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/str',\n 'tool_lp/dialogue'],\n function($, notification, ajax, templates, str, Dialogue) {\n\n /**\n * The main instance we'll be working with.\n *\n * @type {Competencydialogue}\n */\n var instance;\n\n /**\n * Constructor for CompetencyDialogue.\n *\n * @param {Object} options\n *\n */\n var Competencydialogue = function() {\n // Intentionally left empty.\n };\n\n /**\n * Log the competency viewed event.\n *\n * @param {Number} competencyId The competency ID.\n * @method triggerCompetencyViewedEvent\n */\n Competencydialogue.prototype.triggerCompetencyViewedEvent = function(competencyId) {\n ajax.call([{\n methodname: 'core_competency_competency_viewed',\n args: {id: competencyId}\n }]);\n };\n\n /**\n * Display a dialogue box by competencyid.\n *\n * @param {Number} competencyid The competency ID.\n * @param {Object} options The options.\n * @method showDialogue\n */\n Competencydialogue.prototype.showDialogue = function(competencyid, options) {\n\n var datapromise = this.getCompetencyDataPromise(competencyid, options);\n var localthis = this;\n datapromise.done(function(data) {\n // Inner Html in the dialogue content.\n templates.render('tool_lp/competency_summary', data)\n .done(function(html) {\n // Log competency viewed event.\n localthis.triggerCompetencyViewedEvent(competencyid);\n\n // Show the dialogue.\n new Dialogue(\n data.competency.shortname,\n html\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Display a dialogue box from data.\n *\n * @param {Object} dataSource data to be used to display dialogue box\n * @method showDialogueFromData\n */\n Competencydialogue.prototype.showDialogueFromData = function(dataSource) {\n\n var localthis = this;\n // Inner Html in the dialogue content.\n templates.render('tool_lp/competency_summary', dataSource)\n .done(function(html) {\n // Log competency viewed event.\n localthis.triggerCompetencyViewedEvent(dataSource.id);\n\n // Show the dialogue.\n new Dialogue(\n dataSource.shortname,\n html,\n localthis.enhanceDialogue\n );\n }).fail(notification.exception);\n };\n\n /**\n * The action on the click event.\n *\n * @param {Event} e event click\n * @method clickEventHandler\n */\n Competencydialogue.prototype.clickEventHandler = function(e) {\n\n var compdialogue = e.data.compdialogue;\n var currentTarget = $(e.currentTarget);\n var competencyid = currentTarget.data('id');\n var includerelated = !(currentTarget.data('excluderelated'));\n var includecourses = currentTarget.data('includecourses');\n\n // Show the dialogue box.\n compdialogue.showDialogue(competencyid, {\n includerelated: includerelated,\n includecourses: includecourses\n });\n e.preventDefault();\n };\n\n /**\n * Get a promise on data competency.\n *\n * @param {Number} competencyid\n * @param {Object} options\n * @return {Promise} return promise on data request\n * @method getCompetencyDataPromise\n */\n Competencydialogue.prototype.getCompetencyDataPromise = function(competencyid, options) {\n\n var requests = ajax.call([\n {methodname: 'tool_lp_data_for_competency_summary',\n args: {competencyid: competencyid,\n includerelated: options.includerelated || false,\n includecourses: options.includecourses || false\n }\n }\n ]);\n\n return requests[0].then(function(context) {\n return context;\n }).fail(notification.exception);\n };\n\n return /** @alias module:tool_lp/competencydialogue */ {\n\n /**\n * Initialise the competency dialogue module.\n *\n * Only the first call matters.\n */\n init: function() {\n if (typeof instance !== 'undefined') {\n return;\n }\n\n // Instantiate the one instance and delegate event on the body.\n instance = new Competencydialogue();\n $('body').delegate('[data-action=\"competency-dialogue\"]', 'click', {compdialogue: instance},\n instance.clickEventHandler.bind(instance));\n }\n };\n});\n"],"file":"competencydialogue.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencydialogue.js"],"names":["define","$","notification","ajax","templates","str","Dialogue","instance","Competencydialogue","prototype","triggerCompetencyViewedEvent","competencyId","call","methodname","args","id","showDialogue","competencyid","options","datapromise","getCompetencyDataPromise","localthis","done","data","render","html","competency","shortname","fail","exception","showDialogueFromData","dataSource","enhanceDialogue","clickEventHandler","e","compdialogue","currentTarget","includerelated","includecourses","preventDefault","requests","then","context","init","delegate","bind"],"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 .\n\n/**\n * Display Competency in dialogue box.\n *\n * @module tool_lp/Competencydialogue\n * @copyright 2015 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/str',\n 'tool_lp/dialogue'],\n function($, notification, ajax, templates, str, Dialogue) {\n\n /**\n * The main instance we'll be working with.\n *\n * @type {Competencydialogue}\n */\n var instance;\n\n /**\n * Constructor for CompetencyDialogue.\n *\n * @param {Object} options\n *\n */\n var Competencydialogue = function() {\n // Intentionally left empty.\n };\n\n /**\n * Log the competency viewed event.\n *\n * @param {Number} competencyId The competency ID.\n * @method triggerCompetencyViewedEvent\n */\n Competencydialogue.prototype.triggerCompetencyViewedEvent = function(competencyId) {\n ajax.call([{\n methodname: 'core_competency_competency_viewed',\n args: {id: competencyId}\n }]);\n };\n\n /**\n * Display a dialogue box by competencyid.\n *\n * @param {Number} competencyid The competency ID.\n * @param {Object} options The options.\n * @method showDialogue\n */\n Competencydialogue.prototype.showDialogue = function(competencyid, options) {\n\n var datapromise = this.getCompetencyDataPromise(competencyid, options);\n var localthis = this;\n datapromise.done(function(data) {\n // Inner Html in the dialogue content.\n templates.render('tool_lp/competency_summary', data)\n .done(function(html) {\n // Log competency viewed event.\n localthis.triggerCompetencyViewedEvent(competencyid);\n\n // Show the dialogue.\n new Dialogue(\n data.competency.shortname,\n html\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Display a dialogue box from data.\n *\n * @param {Object} dataSource data to be used to display dialogue box\n * @method showDialogueFromData\n */\n Competencydialogue.prototype.showDialogueFromData = function(dataSource) {\n\n var localthis = this;\n // Inner Html in the dialogue content.\n templates.render('tool_lp/competency_summary', dataSource)\n .done(function(html) {\n // Log competency viewed event.\n localthis.triggerCompetencyViewedEvent(dataSource.id);\n\n // Show the dialogue.\n new Dialogue(\n dataSource.shortname,\n html,\n localthis.enhanceDialogue\n );\n }).fail(notification.exception);\n };\n\n /**\n * The action on the click event.\n *\n * @param {Event} e event click\n * @method clickEventHandler\n */\n Competencydialogue.prototype.clickEventHandler = function(e) {\n\n var compdialogue = e.data.compdialogue;\n var currentTarget = $(e.currentTarget);\n var competencyid = currentTarget.data('id');\n var includerelated = !(currentTarget.data('excluderelated'));\n var includecourses = currentTarget.data('includecourses');\n\n // Show the dialogue box.\n compdialogue.showDialogue(competencyid, {\n includerelated: includerelated,\n includecourses: includecourses\n });\n e.preventDefault();\n };\n\n /**\n * Get a promise on data competency.\n *\n * @param {Number} competencyid\n * @param {Object} options\n * @return {Promise} return promise on data request\n * @method getCompetencyDataPromise\n */\n Competencydialogue.prototype.getCompetencyDataPromise = function(competencyid, options) {\n\n var requests = ajax.call([\n {methodname: 'tool_lp_data_for_competency_summary',\n args: {competencyid: competencyid,\n includerelated: options.includerelated || false,\n includecourses: options.includecourses || false\n }\n }\n ]);\n\n return requests[0].then(function(context) {\n return context;\n }).fail(notification.exception);\n };\n\n return /** @alias module:tool_lp/competencydialogue */ {\n\n /**\n * Initialise the competency dialogue module.\n *\n * Only the first call matters.\n */\n init: function() {\n if (typeof instance !== 'undefined') {\n return;\n }\n\n // Instantiate the one instance and delegate event on the body.\n instance = new Competencydialogue();\n $('body').delegate('[data-action=\"competency-dialogue\"]', 'click', {compdialogue: instance},\n instance.clickEventHandler.bind(instance));\n }\n };\n});\n"],"file":"competencydialogue.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencypicker.min.js.map b/admin/tool/lp/amd/build/competencypicker.min.js.map index 44b081253bc..fd6df4a9cb8 100644 --- a/admin/tool/lp/amd/build/competencypicker.min.js.map +++ b/admin/tool/lp/amd/build/competencypicker.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencypicker.js"],"names":["define","$","Notification","Ajax","Templates","Dialogue","Str","Tree","Pending","Picker","pageContextId","singleFramework","pageContextIncludes","multiSelect","self","_eventNode","_frameworks","_reset","_pageContextId","_pageContextIncludes","_multiSelect","_frameworkId","_singleFramework","prototype","_competencies","_disallowedCompetencyIDs","_popup","_searchText","_selectedCompetencies","_onlyVisible","_afterRender","tree","_find","show","on","evt","params","selected","preventDefault","validIds","each","index","item","compId","data","valid","i","id","push","length","attr","removeAttr","change","e","target","val","_loadCompetencies","then","_refresh","bind","catch","exception","click","always","close","pendingPromise","_trigger","competencyIds","competencyId","resolve","currentItems","slice","node","toggleItem","updateFocus","display","when","get_string","_render","title","render","_fetchCompetencies","frameworkId","searchText","call","methodname","args","searchtext","competencyframeworkid","done","competencies","addCompetencyChildren","parent","parentid","haschildren","children","comp","fail","selector","getContent","find","_getFramework","fid","frm","f","_loadFrameworks","promise","framework","sort","context","contextid","includes","onlyvisible","frameworks","type","handler","_preRender","html","replaceWith","search","setDisallowedCompetencyIDs","ids","trigger"],"mappings":"AA2BAA,OAAM,4BAAC,CAAC,QAAD,CACC,mBADD,CAEC,WAFD,CAGC,gBAHD,CAIC,kBAJD,CAKC,UALD,CAMC,cAND,CAOC,cAPD,CAAD,CASE,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAgCC,CAAhC,CAA2CC,CAA3C,CAAqDC,CAArD,CAA0DC,CAA1D,CAAgEC,CAAhE,CAAyE,CAS7E,GAAIC,CAAAA,CAAM,CAAG,SAASC,CAAT,CAAwBC,CAAxB,CAAyCC,CAAzC,CAA8DC,CAA9D,CAA2E,CACpF,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACAA,CAAI,CAACC,UAAL,CAAkBd,CAAC,CAAC,aAAD,CAAnB,CACAa,CAAI,CAACE,WAAL,CAAmB,EAAnB,CACAF,CAAI,CAACG,MAAL,GAEAH,CAAI,CAACI,cAAL,CAAsBR,CAAtB,CACAI,CAAI,CAACK,oBAAL,CAA4BP,CAAmB,EAAI,UAAnD,CACAE,CAAI,CAACM,YAAL,CAA4C,WAAvB,QAAOP,CAAAA,CAAP,EAAsC,KAAAA,CAA3D,CACA,GAAIF,CAAJ,CAAqB,CACjBG,CAAI,CAACO,YAAL,CAAoBV,CAApB,CACAG,CAAI,CAACQ,gBAAL,GACH,CACJ,CAbD,CAgBAb,CAAM,CAACc,SAAP,CAAiBC,aAAjB,CAAiC,IAAjC,CAEAf,CAAM,CAACc,SAAP,CAAiBE,wBAAjB,CAA4C,IAA5C,CAEAhB,CAAM,CAACc,SAAP,CAAiBR,UAAjB,CAA8B,IAA9B,CAEAN,CAAM,CAACc,SAAP,CAAiBP,WAAjB,CAA+B,IAA/B,CAEAP,CAAM,CAACc,SAAP,CAAiBF,YAAjB,CAAgC,IAAhC,CAEAZ,CAAM,CAACc,SAAP,CAAiBL,cAAjB,CAAkC,IAAlC,CAEAT,CAAM,CAACc,SAAP,CAAiBJ,oBAAjB,CAAwC,IAAxC,CAEAV,CAAM,CAACc,SAAP,CAAiBG,MAAjB,CAA0B,IAA1B,CAEAjB,CAAM,CAACc,SAAP,CAAiBI,WAAjB,CAA+B,EAA/B,CAEAlB,CAAM,CAACc,SAAP,CAAiBK,qBAAjB,CAAyC,IAAzC,CAEAnB,CAAM,CAACc,SAAP,CAAiBD,gBAAjB,IAEAb,CAAM,CAACc,SAAP,CAAiBH,YAAjB,IAEAX,CAAM,CAACc,SAAP,CAAiBM,YAAjB,IAOApB,CAAM,CAACc,SAAP,CAAiBO,YAAjB,CAAgC,UAAW,IACnChB,CAAAA,CAAI,CAAG,IAD4B,CAInCiB,CAAI,CAAG,GAAIxB,CAAAA,CAAJ,CAASO,CAAI,CAACkB,KAAL,CAAW,yBAAX,CAAT,CAAgDlB,CAAI,CAACM,YAArD,CAJ4B,CAOvCN,CAAI,CAACkB,KAAL,CAAW,yBAAX,EAAsCC,IAAtC,GAEAF,CAAI,CAACG,EAAL,CAAQ,kBAAR,CAA4B,SAASC,CAAT,CAAcC,CAAd,CAAsB,CAC9C,GAAIC,CAAAA,CAAQ,CAAGD,CAAM,CAACC,QAAtB,CACAF,CAAG,CAACG,cAAJ,GACA,GAAIC,CAAAA,CAAQ,CAAG,EAAf,CACAtC,CAAC,CAACuC,IAAF,CAAOH,CAAP,CAAiB,SAASI,CAAT,CAAgBC,CAAhB,CAAsB,CACnC,GAAIC,CAAAA,CAAM,CAAG1C,CAAC,CAACyC,CAAD,CAAD,CAAQE,IAAR,CAAa,IAAb,CAAb,CACIC,CAAK,GADT,CAGA,GAAsB,WAAlB,QAAOF,CAAAA,CAAX,CAAmC,CAE/BE,CAAK,GACR,CAHD,IAGO,CACH5C,CAAC,CAACuC,IAAF,CAAO1B,CAAI,CAACW,wBAAZ,CAAsC,SAASqB,CAAT,CAAYC,CAAZ,CAAgB,CAClD,GAAIA,CAAE,EAAIJ,CAAV,CAAkB,CACdE,CAAK,GACR,CACJ,CAJD,CAKH,CACD,GAAIA,CAAJ,CAAW,CACPN,CAAQ,CAACS,IAAT,CAAcL,CAAd,CACH,CACJ,CAjBD,EAmBA7B,CAAI,CAACc,qBAAL,CAA6BW,CAA7B,CAGA,GAAI,CAACzB,CAAI,CAACc,qBAAL,CAA2BqB,MAAhC,CAAwC,CACpCnC,CAAI,CAACkB,KAAL,CAAW,4DAAX,EAAqEkB,IAArE,CAA0E,UAA1E,CAAsF,UAAtF,CACH,CAFD,IAEO,CACHpC,CAAI,CAACkB,KAAL,CAAW,4DAAX,EAAqEmB,UAArE,CAAgF,UAAhF,CACH,CACJ,CA/BD,EAkCA,GAAI,CAACrC,CAAI,CAACQ,gBAAV,CAA4B,CACxBR,CAAI,CAACkB,KAAL,CAAW,mCAAX,EAA8CoB,MAA9C,CAAqD,SAASC,CAAT,CAAY,CAC7DvC,CAAI,CAACO,YAAL,CAAoBpB,CAAC,CAACoD,CAAC,CAACC,MAAH,CAAD,CAAYC,GAAZ,EAApB,CACAzC,CAAI,CAAC0C,iBAAL,GAAyBC,IAAzB,CAA8B3C,CAAI,CAAC4C,QAAL,CAAcC,IAAd,CAAmB7C,CAAnB,CAA9B,EAAwD8C,KAAxD,CAA8D1D,CAAY,CAAC2D,SAA3E,CACH,CAHD,CAIH,CAGD/C,CAAI,CAACkB,KAAL,CAAW,6CAAX,EAAwD8B,KAAxD,CAA8D,SAAST,CAAT,CAAY,CACtEA,CAAC,CAACf,cAAF,GACArC,CAAC,CAACoD,CAAC,CAACC,MAAH,CAAD,CAAYJ,IAAZ,CAAiB,UAAjB,CAA6B,UAA7B,EACApC,CAAI,CAACa,WAAL,CAAmBb,CAAI,CAACkB,KAAL,CAAW,4CAAX,EAAuDuB,GAAvD,IAAgE,EAAnF,CACA,MAAOzC,CAAAA,CAAI,CAAC4C,QAAL,GAAgBK,MAAhB,CAAuB,UAAW,CACrC9D,CAAC,CAACoD,CAAC,CAACC,MAAH,CAAD,CAAYH,UAAZ,CAAuB,UAAvB,CACH,CAFM,CAGV,CAPD,EAUArC,CAAI,CAACkB,KAAL,CAAW,+DAAX,EAAwE8B,KAAxE,CAA8E,SAAST,CAAT,CAAY,CACtFA,CAAC,CAACf,cAAF,GACAxB,CAAI,CAACkD,KAAL,EACH,CAHD,EAMAlD,CAAI,CAACkB,KAAL,CAAW,4DAAX,EAAqE8B,KAArE,CAA2E,SAAST,CAAT,CAAY,CACnFA,CAAC,CAACf,cAAF,GACA,GAAI2B,CAAAA,CAAc,CAAG,GAAIzD,CAAAA,CAAzB,CACA,GAAI,CAACM,CAAI,CAACc,qBAAL,CAA2BqB,MAAhC,CAAwC,CACpC,MACH,CAED,GAAInC,CAAI,CAACM,YAAT,CAAuB,CACnBN,CAAI,CAACoD,QAAL,CAAc,MAAd,CAAsB,CAACC,aAAa,CAAErD,CAAI,CAACc,qBAArB,CAAtB,CACH,CAFD,IAEO,CAEHd,CAAI,CAACoD,QAAL,CAAc,MAAd,CAAsB,CAACE,YAAY,CAAEtD,CAAI,CAACc,qBAAL,CAA2B,CAA3B,CAAf,CAAtB,CACH,CAIDd,CAAI,CAACkD,KAAL,GACAC,CAAc,CAACI,OAAf,EACH,CAlBD,EAqBA,GAAIC,CAAAA,CAAY,CAAGxD,CAAI,CAACc,qBAAL,CAA2B2C,KAA3B,CAAiC,CAAjC,CAAnB,CAEAtE,CAAC,CAACuC,IAAF,CAAO8B,CAAP,CAAqB,SAAS7B,CAAT,CAAgBM,CAAhB,CAAoB,CACrC,GAAIyB,CAAAA,CAAI,CAAG1D,CAAI,CAACkB,KAAL,CAAW,YAAce,CAAd,CAAmB,GAA9B,CAAX,CACA,GAAIyB,CAAI,CAACvB,MAAT,CAAiB,CACblB,CAAI,CAAC0C,UAAL,CAAgBD,CAAhB,EACAzC,CAAI,CAAC2C,WAAL,CAAiBF,CAAjB,CACH,CACJ,CAND,CAQH,CAlGD,CAyGA/D,CAAM,CAACc,SAAP,CAAiByC,KAAjB,CAAyB,UAAW,CAChC,GAAIlD,CAAAA,CAAI,CAAG,IAAX,CACAA,CAAI,CAACY,MAAL,CAAYsC,KAAZ,GACAlD,CAAI,CAACG,MAAL,EACH,CAJD,CAYAR,CAAM,CAACc,SAAP,CAAiBoD,OAAjB,CAA2B,UAAW,CAClC,GAAI7D,CAAAA,CAAI,CAAG,IAAX,CACA,MAAOb,CAAAA,CAAC,CAAC2E,IAAF,CAAOtE,CAAG,CAACuE,UAAJ,CAAe,kBAAf,CAAmC,SAAnC,CAAP,CAAsD/D,CAAI,CAACgE,OAAL,EAAtD,EACNrB,IADM,CACD,SAASsB,CAAT,CAAgBC,CAAhB,CAAwB,CAC1BlE,CAAI,CAACY,MAAL,CAAc,GAAIrB,CAAAA,CAAJ,CACV0E,CADU,CAEVC,CAAM,CAAC,CAAD,CAFI,CAGVlE,CAAI,CAACgB,YAAL,CAAkB6B,IAAlB,CAAuB7C,CAAvB,CAHU,CAMjB,CARM,EAQJ8C,KARI,CAQE1D,CAAY,CAAC2D,SARf,CASV,CAXD,CAqBApD,CAAM,CAACc,SAAP,CAAiB0D,kBAAjB,CAAsC,SAASC,CAAT,CAAsBC,CAAtB,CAAkC,CACpE,GAAIrE,CAAAA,CAAI,CAAG,IAAX,CAEA,MAAOX,CAAAA,CAAI,CAACiF,IAAL,CAAU,CACb,CAACC,UAAU,CAAE,qCAAb,CAAoDC,IAAI,CAAE,CACtDC,UAAU,CAAEJ,CAD0C,CAEtDK,qBAAqB,CAAEN,CAF+B,CAA1D,CADa,CAAV,EAKJ,CALI,EAKDO,IALC,CAKI,SAASC,CAAT,CAAuB,CAK9B,QAASC,CAAAA,CAAT,CAA+BC,CAA/B,CAAuCF,CAAvC,CAAqD,CACjD,IAAK,GAAI5C,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAG4C,CAAY,CAACzC,MAAjC,CAAyCH,CAAC,EAA1C,CAA8C,CAC1C,GAAI4C,CAAY,CAAC5C,CAAD,CAAZ,CAAgB+C,QAAhB,EAA4BD,CAAM,CAAC7C,EAAvC,CAA2C,CACvC6C,CAAM,CAACE,WAAP,IACAJ,CAAY,CAAC5C,CAAD,CAAZ,CAAgBiD,QAAhB,CAA2B,EAA3B,CACAL,CAAY,CAAC5C,CAAD,CAAZ,CAAgBgD,WAAhB,IACAF,CAAM,CAACG,QAAP,CAAgBH,CAAM,CAACG,QAAP,CAAgB9C,MAAhC,EAA0CyC,CAAY,CAAC5C,CAAD,CAAtD,CACA6C,CAAqB,CAACD,CAAY,CAAC5C,CAAD,CAAb,CAAkB4C,CAAlB,CACxB,CACJ,CACJ,CAf6B,GAkB1B5C,CAAAA,CAlB0B,CAkBvBkD,CAlBuB,CAmB1BjE,CAAI,CAAG,EAnBmB,CAoB9B,IAAKe,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAG4C,CAAY,CAACzC,MAA7B,CAAqCH,CAAC,EAAtC,CAA0C,CACtCkD,CAAI,CAAGN,CAAY,CAAC5C,CAAD,CAAnB,CACA,GAAqB,GAAjB,EAAAkD,CAAI,CAACH,QAAT,CAA0B,CACtBG,CAAI,CAACD,QAAL,CAAgB,EAAhB,CACAC,CAAI,CAACF,WAAL,CAAmB,CAAnB,CACA/D,CAAI,CAACA,CAAI,CAACkB,MAAN,CAAJ,CAAoB+C,CAApB,CACAL,CAAqB,CAACK,CAAD,CAAON,CAAP,CACxB,CACJ,CAED5E,CAAI,CAACU,aAAL,CAAqBO,CAExB,CArCM,EAqCJkE,IArCI,CAqCC/F,CAAY,CAAC2D,SArCd,CAsCV,CAzCD,CAkDApD,CAAM,CAACc,SAAP,CAAiBS,KAAjB,CAAyB,SAASkE,CAAT,CAAmB,CACxC,MAAOjG,CAAAA,CAAC,CAAC,KAAKyB,MAAL,CAAYyE,UAAZ,EAAD,CAAD,CAA4BC,IAA5B,CAAiCF,CAAjC,CACV,CAFD,CAWAzF,CAAM,CAACc,SAAP,CAAiB8E,aAAjB,CAAiC,SAASC,CAAT,CAAc,CAC3C,GAAIC,CAAAA,CAAJ,CACAtG,CAAC,CAACuC,IAAF,CAAO,KAAKxB,WAAZ,CAAyB,SAAS8B,CAAT,CAAY0D,CAAZ,CAAe,CACpC,GAAIA,CAAC,CAACzD,EAAF,EAAQuD,CAAZ,CAAiB,CACbC,CAAG,CAAGC,CAET,CACJ,CALD,EAMA,MAAOD,CAAAA,CACV,CATD,CAiBA9F,CAAM,CAACc,SAAP,CAAiBiC,iBAAjB,CAAqC,UAAW,CAC5C,MAAO,MAAKyB,kBAAL,CAAwB,KAAK5D,YAA7B,CAA2C,KAAKM,WAAhD,CACV,CAFD,CAUAlB,CAAM,CAACc,SAAP,CAAiBkF,eAAjB,CAAmC,UAAW,CAC1C,GAAIC,CAAAA,CAAJ,CACI5F,CAAI,CAAG,IADX,CAIA,GAA8B,CAA1B,CAAAA,CAAI,CAACE,WAAL,CAAiBiC,MAArB,CAAiC,CAC7B,MAAOhD,CAAAA,CAAC,CAAC2E,IAAF,EACV,CAED,GAAI9D,CAAI,CAACQ,gBAAT,CAA2B,CACvBoF,CAAO,CAAGvG,CAAI,CAACiF,IAAL,CAAU,CAChB,CAACC,UAAU,CAAE,2CAAb,CAA0DC,IAAI,CAAE,CAC5DvC,EAAE,CAAE,KAAK1B,YADmD,CAAhE,CADgB,CAAV,EAIP,CAJO,EAIJoC,IAJI,CAIC,SAASkD,CAAT,CAAoB,CAC3B,MAAO,CAACA,CAAD,CACV,CANS,CAOb,CARD,IAQO,CACHD,CAAO,CAAGvG,CAAI,CAACiF,IAAL,CAAU,CAChB,CAACC,UAAU,CAAE,4CAAb,CAA2DC,IAAI,CAAE,CAC7DsB,IAAI,CAAE,WADuD,CAE7DC,OAAO,CAAE,CAACC,SAAS,CAAEhG,CAAI,CAACI,cAAjB,CAFoD,CAG7D6F,QAAQ,CAAEjG,CAAI,CAACK,oBAH8C,CAI7D6F,WAAW,CAAElG,CAAI,CAACe,YAJ2C,CAAjE,CADgB,CAAV,EAOP,CAPO,CAQb,CAED,MAAO6E,CAAAA,CAAO,CAACjB,IAAR,CAAa,SAASwB,CAAT,CAAqB,CACrCnG,CAAI,CAACE,WAAL,CAAmBiG,CACtB,CAFM,EAEJhB,IAFI,CAEC/F,CAAY,CAAC2D,SAFd,CAGV,CA/BD,CAwCApD,CAAM,CAACc,SAAP,CAAiBW,EAAjB,CAAsB,SAASgF,CAAT,CAAeC,CAAf,CAAwB,CAC1C,KAAKpG,UAAL,CAAgBmB,EAAhB,CAAmBgF,CAAnB,CAAyBC,CAAzB,CACH,CAFD,CAUA1G,CAAM,CAACc,SAAP,CAAiB6F,UAAjB,CAA8B,UAAW,CACrC,GAAItG,CAAAA,CAAI,CAAG,IAAX,CACA,MAAOA,CAAAA,CAAI,CAAC2F,eAAL,GAAuBhD,IAAvB,CAA4B,UAAW,CAC1C,GAAI,CAAC3C,CAAI,CAACO,YAAN,EAAgD,CAA1B,CAAAP,CAAI,CAACE,WAAL,CAAiBiC,MAA3C,CAAuD,CACnDnC,CAAI,CAACO,YAAL,CAAoBP,CAAI,CAACE,WAAL,CAAiB,CAAjB,EAAoB+B,EAC3C,CAGD,GAAI,CAACjC,CAAI,CAACO,YAAV,CAAwB,CACpBP,CAAI,CAACE,WAAL,CAAmB,EAAnB,CACA,MAAOf,CAAAA,CAAC,CAAC2E,IAAF,EACV,CAED,MAAO9D,CAAAA,CAAI,CAAC0C,iBAAL,EACV,CAZM,CAaV,CAfD,CAuBA/C,CAAM,CAACc,SAAP,CAAiBmC,QAAjB,CAA4B,UAAW,CACnC,GAAI5C,CAAAA,CAAI,CAAG,IAAX,CACA,MAAOA,CAAAA,CAAI,CAACgE,OAAL,GAAerB,IAAf,CAAoB,SAAS4D,CAAT,CAAe,CACtCvG,CAAI,CAACkB,KAAL,CAAW,sCAAX,EAAiDsF,WAAjD,CAA6DD,CAA7D,EACAvG,CAAI,CAACgB,YAAL,EAEH,CAJM,CAKV,CAPD,CAeArB,CAAM,CAACc,SAAP,CAAiBuD,OAAjB,CAA2B,UAAW,CAClC,GAAIhE,CAAAA,CAAI,CAAG,IAAX,CACA,MAAOA,CAAAA,CAAI,CAACsG,UAAL,GAAkB3D,IAAlB,CAAuB,UAAW,CAErC,GAAI,CAAC3C,CAAI,CAACQ,gBAAV,CAA4B,CACxBrB,CAAC,CAACuC,IAAF,CAAO1B,CAAI,CAACE,WAAZ,CAAyB,SAAS8B,CAAT,CAAY6D,CAAZ,CAAuB,CAC5C,GAAIA,CAAS,CAAC5D,EAAV,EAAgBjC,CAAI,CAACO,YAAzB,CAAuC,CACnCsF,CAAS,CAACtE,QAAV,GACH,CAFD,IAEO,CACHsE,CAAS,CAACtE,QAAV,GACH,CACJ,CAND,CAOH,CAED,GAAIwE,CAAAA,CAAO,CAAG,CACVnB,YAAY,CAAE5E,CAAI,CAACU,aADT,CAEVmF,SAAS,CAAE7F,CAAI,CAACuF,aAAL,CAAmBvF,CAAI,CAACO,YAAxB,CAFD,CAGV4F,UAAU,CAAEnG,CAAI,CAACE,WAHP,CAIVuG,MAAM,CAAEzG,CAAI,CAACa,WAJH,CAKVhB,eAAe,CAAEG,CAAI,CAACQ,gBALZ,CAAd,CAQA,MAAOlB,CAAAA,CAAS,CAAC4E,MAAV,CAAiB,2BAAjB,CAA8C6B,CAA9C,CACV,CArBM,CAsBV,CAxBD,CAiCApG,CAAM,CAACc,SAAP,CAAiBN,MAAjB,CAA0B,UAAW,CACjC,KAAKO,aAAL,CAAqB,EAArB,CACA,KAAKC,wBAAL,CAAgC,EAAhC,CACA,KAAKC,MAAL,CAAc,IAAd,CACA,KAAKC,WAAL,CAAmB,EAAnB,CACA,KAAKC,qBAAL,CAA6B,EAChC,CAND,CAgBAnB,CAAM,CAACc,SAAP,CAAiBiG,0BAAjB,CAA8C,SAASC,CAAT,CAAc,CACxD,KAAKhG,wBAAL,CAAgCgG,CACnC,CAFD,CAWAhH,CAAM,CAACc,SAAP,CAAiB2C,QAAjB,CAA4B,SAASgD,CAAT,CAAetE,CAAf,CAAqB,CAC7C,KAAK7B,UAAL,CAAgB2G,OAAhB,CAAwBR,CAAxB,CAA8B,CAACtE,CAAD,CAA9B,CACH,CAFD,CAIA,MAAqDnC,CAAAA,CAExD,CA7bK,CAAN","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 .\n\n/**\n * Competency picker.\n *\n * To handle 'save' events use: picker.on('save')\n * This will receive a object with either a single 'competencyId', or an array in 'competencyIds'\n * depending on the value of multiSelect.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'tool_lp/dialogue',\n 'core/str',\n 'tool_lp/tree',\n 'core/pending'\n ],\n function($, Notification, Ajax, Templates, Dialogue, Str, Tree, Pending) {\n\n /**\n * Competency picker class.\n * @param {Number} pageContextId The page context ID.\n * @param {Number|false} singleFramework The ID of the framework when limited to one.\n * @param {String} pageContextIncludes One of 'children', 'parents', 'self'.\n * @param {Boolean} multiSelect Support multi-select in the tree.\n */\n var Picker = function(pageContextId, singleFramework, pageContextIncludes, multiSelect) {\n var self = this;\n self._eventNode = $('
');\n self._frameworks = [];\n self._reset();\n\n self._pageContextId = pageContextId;\n self._pageContextIncludes = pageContextIncludes || 'children';\n self._multiSelect = (typeof multiSelect === 'undefined' || multiSelect === true);\n if (singleFramework) {\n self._frameworkId = singleFramework;\n self._singleFramework = true;\n }\n };\n\n /** @type {Array} The competencies fetched. */\n Picker.prototype._competencies = null;\n /** @type {Array} The competencies that cannot be picked. */\n Picker.prototype._disallowedCompetencyIDs = null;\n /** @type {Node} The node we attach the events to. */\n Picker.prototype._eventNode = null;\n /** @type {Array} The list of frameworks fetched. */\n Picker.prototype._frameworks = null;\n /** @type {Number} The current framework ID. */\n Picker.prototype._frameworkId = null;\n /** @type {Number} The page context ID. */\n Picker.prototype._pageContextId = null;\n /** @type {Number} Relevant contexts inclusion. */\n Picker.prototype._pageContextIncludes = null;\n /** @type {Dialogue} The reference to the dialogue. */\n Picker.prototype._popup = null;\n /** @type {String} The string we filter the competencies with. */\n Picker.prototype._searchText = '';\n /** @type {Object} The competency that was selected. */\n Picker.prototype._selectedCompetencies = null;\n /** @type {Boolean} Whether we can browse frameworks or not. */\n Picker.prototype._singleFramework = false;\n /** @type {Boolean} Do we allow multi select? */\n Picker.prototype._multiSelect = true;\n /** @type {Boolean} Do we allow to display hidden framework? */\n Picker.prototype._onlyVisible = true;\n\n /**\n * Hook to executed after the view is rendered.\n *\n * @method _afterRender\n */\n Picker.prototype._afterRender = function() {\n var self = this;\n\n // Initialise the tree.\n var tree = new Tree(self._find('[data-enhance=linktree]'), self._multiSelect);\n\n // To prevent jiggling we only show the tree after it is enhanced.\n self._find('[data-enhance=linktree]').show();\n\n tree.on('selectionchanged', function(evt, params) {\n var selected = params.selected;\n evt.preventDefault();\n var validIds = [];\n $.each(selected, function(index, item) {\n var compId = $(item).data('id'),\n valid = true;\n\n if (typeof compId === 'undefined') {\n // Do not allow picking nodes with no id.\n valid = false;\n } else {\n $.each(self._disallowedCompetencyIDs, function(i, id) {\n if (id == compId) {\n valid = false;\n }\n });\n }\n if (valid) {\n validIds.push(compId);\n }\n });\n\n self._selectedCompetencies = validIds;\n\n // TODO Implement disabling of nodes in the tree module somehow.\n if (!self._selectedCompetencies.length) {\n self._find('[data-region=\"competencylinktree\"] [data-action=\"add\"]').attr('disabled', 'disabled');\n } else {\n self._find('[data-region=\"competencylinktree\"] [data-action=\"add\"]').removeAttr('disabled');\n }\n });\n\n // Add listener for framework change.\n if (!self._singleFramework) {\n self._find('[data-action=\"chooseframework\"]').change(function(e) {\n self._frameworkId = $(e.target).val();\n self._loadCompetencies().then(self._refresh.bind(self)).catch(Notification.exception);\n });\n }\n\n // Add listener for search.\n self._find('[data-region=\"filtercompetencies\"] button').click(function(e) {\n e.preventDefault();\n $(e.target).attr('disabled', 'disabled');\n self._searchText = self._find('[data-region=\"filtercompetencies\"] input').val() || '';\n return self._refresh().always(function() {\n $(e.target).removeAttr('disabled');\n });\n });\n\n // Add listener for cancel.\n self._find('[data-region=\"competencylinktree\"] [data-action=\"cancel\"]').click(function(e) {\n e.preventDefault();\n self.close();\n });\n\n // Add listener for add.\n self._find('[data-region=\"competencylinktree\"] [data-action=\"add\"]').click(function(e) {\n e.preventDefault();\n var pendingPromise = new Pending();\n if (!self._selectedCompetencies.length) {\n return;\n }\n\n if (self._multiSelect) {\n self._trigger('save', {competencyIds: self._selectedCompetencies});\n } else {\n // We checked above that the array has at least one value.\n self._trigger('save', {competencyId: self._selectedCompetencies[0]});\n }\n\n // The dialogue here is a YUI dialogue and doesn't support Promises at all.\n // However, it is typically synchronous so this shoudl suffice.\n self.close();\n pendingPromise.resolve();\n });\n\n // The list of selected competencies will be modified while looping (because of the listeners above).\n var currentItems = self._selectedCompetencies.slice(0);\n\n $.each(currentItems, function(index, id) {\n var node = self._find('[data-id=' + id + ']');\n if (node.length) {\n tree.toggleItem(node);\n tree.updateFocus(node);\n }\n });\n\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n Picker.prototype.close = function() {\n var self = this;\n self._popup.close();\n self._reset();\n };\n\n /**\n * Opens the picker.\n *\n * @method display\n * @return {Promise}\n */\n Picker.prototype.display = function() {\n var self = this;\n return $.when(Str.get_string('competencypicker', 'tool_lp'), self._render())\n .then(function(title, render) {\n self._popup = new Dialogue(\n title,\n render[0],\n self._afterRender.bind(self)\n );\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Fetch the competencies.\n *\n * @param {Number} frameworkId The frameworkId.\n * @param {String} searchText Limit the competencies to those matching the text.\n * @method _fetchCompetencies\n * @return {Promise}\n */\n Picker.prototype._fetchCompetencies = function(frameworkId, searchText) {\n var self = this;\n\n return Ajax.call([\n {methodname: 'core_competency_search_competencies', args: {\n searchtext: searchText,\n competencyframeworkid: frameworkId\n }}\n ])[0].done(function(competencies) {\n /**\n * @param {Object} parent\n * @param {Array} competencies\n */\n function addCompetencyChildren(parent, competencies) {\n for (var i = 0; i < competencies.length; i++) {\n if (competencies[i].parentid == parent.id) {\n parent.haschildren = true;\n competencies[i].children = [];\n competencies[i].haschildren = false;\n parent.children[parent.children.length] = competencies[i];\n addCompetencyChildren(competencies[i], competencies);\n }\n }\n }\n\n // Expand the list of competencies into a tree.\n var i, comp;\n var tree = [];\n for (i = 0; i < competencies.length; i++) {\n comp = competencies[i];\n if (comp.parentid == \"0\") { // Loose check for now, because WS returns a string.\n comp.children = [];\n comp.haschildren = 0;\n tree[tree.length] = comp;\n addCompetencyChildren(comp, competencies);\n }\n }\n\n self._competencies = tree;\n\n }).fail(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @return {JQuery}\n * @method _find\n */\n Picker.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Convenience method to get a framework object.\n *\n * @param {Number} fid The framework ID.\n * @return {Object}\n * @method _getFramework\n */\n Picker.prototype._getFramework = function(fid) {\n var frm;\n $.each(this._frameworks, function(i, f) {\n if (f.id == fid) {\n frm = f;\n return;\n }\n });\n return frm;\n };\n\n /**\n * Load the competencies.\n *\n * @method _loadCompetencies\n * @return {Promise}\n */\n Picker.prototype._loadCompetencies = function() {\n return this._fetchCompetencies(this._frameworkId, this._searchText);\n };\n\n /**\n * Load the frameworks.\n *\n * @method _loadFrameworks\n * @return {Promise}\n */\n Picker.prototype._loadFrameworks = function() {\n var promise,\n self = this;\n\n // Quit early because we already have the data.\n if (self._frameworks.length > 0) {\n return $.when();\n }\n\n if (self._singleFramework) {\n promise = Ajax.call([\n {methodname: 'core_competency_read_competency_framework', args: {\n id: this._frameworkId\n }}\n ])[0].then(function(framework) {\n return [framework];\n });\n } else {\n promise = Ajax.call([\n {methodname: 'core_competency_list_competency_frameworks', args: {\n sort: 'shortname',\n context: {contextid: self._pageContextId},\n includes: self._pageContextIncludes,\n onlyvisible: self._onlyVisible\n }}\n ])[0];\n }\n\n return promise.done(function(frameworks) {\n self._frameworks = frameworks;\n }).fail(Notification.exception);\n };\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n Picker.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Hook to executed before render.\n *\n * @method _preRender\n * @return {Promise}\n */\n Picker.prototype._preRender = function() {\n var self = this;\n return self._loadFrameworks().then(function() {\n if (!self._frameworkId && self._frameworks.length > 0) {\n self._frameworkId = self._frameworks[0].id;\n }\n\n // We could not set a framework ID, that probably means there are no frameworks accessible.\n if (!self._frameworkId) {\n self._frameworks = [];\n return $.when();\n }\n\n return self._loadCompetencies();\n });\n };\n\n /**\n * Refresh the view.\n *\n * @method _refresh\n * @return {Promise}\n */\n Picker.prototype._refresh = function() {\n var self = this;\n return self._render().then(function(html) {\n self._find('[data-region=\"competencylinktree\"]').replaceWith(html);\n self._afterRender();\n return;\n });\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @return {Promise}\n */\n Picker.prototype._render = function() {\n var self = this;\n return self._preRender().then(function() {\n\n if (!self._singleFramework) {\n $.each(self._frameworks, function(i, framework) {\n if (framework.id == self._frameworkId) {\n framework.selected = true;\n } else {\n framework.selected = false;\n }\n });\n }\n\n var context = {\n competencies: self._competencies,\n framework: self._getFramework(self._frameworkId),\n frameworks: self._frameworks,\n search: self._searchText,\n singleFramework: self._singleFramework,\n };\n\n return Templates.render('tool_lp/competency_picker', context);\n });\n };\n\n /**\n * Reset the dialogue properties.\n *\n * This does not reset everything, just enough to reset the UI.\n *\n * @method _reset\n */\n Picker.prototype._reset = function() {\n this._competencies = [];\n this._disallowedCompetencyIDs = [];\n this._popup = null;\n this._searchText = '';\n this._selectedCompetencies = [];\n };\n\n /**\n * Set what competencies cannot be picked.\n *\n * This needs to be set after reset/close.\n *\n * @param {Number[]} ids The IDs.\n * @method _setDisallowedCompetencyIDs\n */\n Picker.prototype.setDisallowedCompetencyIDs = function(ids) {\n this._disallowedCompetencyIDs = ids;\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _reset\n */\n Picker.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n return /** @alias module:tool_lp/competencypicker */ Picker;\n\n});\n"],"file":"competencypicker.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencypicker.js"],"names":["define","$","Notification","Ajax","Templates","Dialogue","Str","Tree","Pending","Picker","pageContextId","singleFramework","pageContextIncludes","multiSelect","self","_eventNode","_frameworks","_reset","_pageContextId","_pageContextIncludes","_multiSelect","_frameworkId","_singleFramework","prototype","_competencies","_disallowedCompetencyIDs","_popup","_searchText","_selectedCompetencies","_onlyVisible","_afterRender","tree","_find","show","on","evt","params","selected","preventDefault","validIds","each","index","item","compId","data","valid","i","id","push","length","attr","removeAttr","change","e","target","val","_loadCompetencies","then","_refresh","bind","catch","exception","click","always","close","pendingPromise","_trigger","competencyIds","competencyId","resolve","currentItems","slice","node","toggleItem","updateFocus","display","when","get_string","_render","title","render","_fetchCompetencies","frameworkId","searchText","call","methodname","args","searchtext","competencyframeworkid","done","competencies","addCompetencyChildren","parent","parentid","haschildren","children","comp","fail","selector","getContent","find","_getFramework","fid","frm","f","_loadFrameworks","promise","framework","sort","context","contextid","includes","onlyvisible","frameworks","type","handler","_preRender","html","replaceWith","search","setDisallowedCompetencyIDs","ids","trigger"],"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 .\n\n/**\n * Competency picker.\n *\n * To handle 'save' events use: picker.on('save')\n * This will receive a object with either a single 'competencyId', or an array in 'competencyIds'\n * depending on the value of multiSelect.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'tool_lp/dialogue',\n 'core/str',\n 'tool_lp/tree',\n 'core/pending'\n ],\n function($, Notification, Ajax, Templates, Dialogue, Str, Tree, Pending) {\n\n /**\n * Competency picker class.\n * @param {Number} pageContextId The page context ID.\n * @param {Number|false} singleFramework The ID of the framework when limited to one.\n * @param {String} pageContextIncludes One of 'children', 'parents', 'self'.\n * @param {Boolean} multiSelect Support multi-select in the tree.\n */\n var Picker = function(pageContextId, singleFramework, pageContextIncludes, multiSelect) {\n var self = this;\n self._eventNode = $('
');\n self._frameworks = [];\n self._reset();\n\n self._pageContextId = pageContextId;\n self._pageContextIncludes = pageContextIncludes || 'children';\n self._multiSelect = (typeof multiSelect === 'undefined' || multiSelect === true);\n if (singleFramework) {\n self._frameworkId = singleFramework;\n self._singleFramework = true;\n }\n };\n\n /** @property {Array} The competencies fetched. */\n Picker.prototype._competencies = null;\n /** @property {Array} The competencies that cannot be picked. */\n Picker.prototype._disallowedCompetencyIDs = null;\n /** @property {Node} The node we attach the events to. */\n Picker.prototype._eventNode = null;\n /** @property {Array} The list of frameworks fetched. */\n Picker.prototype._frameworks = null;\n /** @property {Number} The current framework ID. */\n Picker.prototype._frameworkId = null;\n /** @property {Number} The page context ID. */\n Picker.prototype._pageContextId = null;\n /** @property {Number} Relevant contexts inclusion. */\n Picker.prototype._pageContextIncludes = null;\n /** @property {Dialogue} The reference to the dialogue. */\n Picker.prototype._popup = null;\n /** @property {String} The string we filter the competencies with. */\n Picker.prototype._searchText = '';\n /** @property {Object} The competency that was selected. */\n Picker.prototype._selectedCompetencies = null;\n /** @property {Boolean} Whether we can browse frameworks or not. */\n Picker.prototype._singleFramework = false;\n /** @property {Boolean} Do we allow multi select? */\n Picker.prototype._multiSelect = true;\n /** @property {Boolean} Do we allow to display hidden framework? */\n Picker.prototype._onlyVisible = true;\n\n /**\n * Hook to executed after the view is rendered.\n *\n * @method _afterRender\n */\n Picker.prototype._afterRender = function() {\n var self = this;\n\n // Initialise the tree.\n var tree = new Tree(self._find('[data-enhance=linktree]'), self._multiSelect);\n\n // To prevent jiggling we only show the tree after it is enhanced.\n self._find('[data-enhance=linktree]').show();\n\n tree.on('selectionchanged', function(evt, params) {\n var selected = params.selected;\n evt.preventDefault();\n var validIds = [];\n $.each(selected, function(index, item) {\n var compId = $(item).data('id'),\n valid = true;\n\n if (typeof compId === 'undefined') {\n // Do not allow picking nodes with no id.\n valid = false;\n } else {\n $.each(self._disallowedCompetencyIDs, function(i, id) {\n if (id == compId) {\n valid = false;\n }\n });\n }\n if (valid) {\n validIds.push(compId);\n }\n });\n\n self._selectedCompetencies = validIds;\n\n // TODO Implement disabling of nodes in the tree module somehow.\n if (!self._selectedCompetencies.length) {\n self._find('[data-region=\"competencylinktree\"] [data-action=\"add\"]').attr('disabled', 'disabled');\n } else {\n self._find('[data-region=\"competencylinktree\"] [data-action=\"add\"]').removeAttr('disabled');\n }\n });\n\n // Add listener for framework change.\n if (!self._singleFramework) {\n self._find('[data-action=\"chooseframework\"]').change(function(e) {\n self._frameworkId = $(e.target).val();\n self._loadCompetencies().then(self._refresh.bind(self)).catch(Notification.exception);\n });\n }\n\n // Add listener for search.\n self._find('[data-region=\"filtercompetencies\"] button').click(function(e) {\n e.preventDefault();\n $(e.target).attr('disabled', 'disabled');\n self._searchText = self._find('[data-region=\"filtercompetencies\"] input').val() || '';\n return self._refresh().always(function() {\n $(e.target).removeAttr('disabled');\n });\n });\n\n // Add listener for cancel.\n self._find('[data-region=\"competencylinktree\"] [data-action=\"cancel\"]').click(function(e) {\n e.preventDefault();\n self.close();\n });\n\n // Add listener for add.\n self._find('[data-region=\"competencylinktree\"] [data-action=\"add\"]').click(function(e) {\n e.preventDefault();\n var pendingPromise = new Pending();\n if (!self._selectedCompetencies.length) {\n return;\n }\n\n if (self._multiSelect) {\n self._trigger('save', {competencyIds: self._selectedCompetencies});\n } else {\n // We checked above that the array has at least one value.\n self._trigger('save', {competencyId: self._selectedCompetencies[0]});\n }\n\n // The dialogue here is a YUI dialogue and doesn't support Promises at all.\n // However, it is typically synchronous so this shoudl suffice.\n self.close();\n pendingPromise.resolve();\n });\n\n // The list of selected competencies will be modified while looping (because of the listeners above).\n var currentItems = self._selectedCompetencies.slice(0);\n\n $.each(currentItems, function(index, id) {\n var node = self._find('[data-id=' + id + ']');\n if (node.length) {\n tree.toggleItem(node);\n tree.updateFocus(node);\n }\n });\n\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n Picker.prototype.close = function() {\n var self = this;\n self._popup.close();\n self._reset();\n };\n\n /**\n * Opens the picker.\n *\n * @method display\n * @return {Promise}\n */\n Picker.prototype.display = function() {\n var self = this;\n return $.when(Str.get_string('competencypicker', 'tool_lp'), self._render())\n .then(function(title, render) {\n self._popup = new Dialogue(\n title,\n render[0],\n self._afterRender.bind(self)\n );\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Fetch the competencies.\n *\n * @param {Number} frameworkId The frameworkId.\n * @param {String} searchText Limit the competencies to those matching the text.\n * @method _fetchCompetencies\n * @return {Promise}\n */\n Picker.prototype._fetchCompetencies = function(frameworkId, searchText) {\n var self = this;\n\n return Ajax.call([\n {methodname: 'core_competency_search_competencies', args: {\n searchtext: searchText,\n competencyframeworkid: frameworkId\n }}\n ])[0].done(function(competencies) {\n /**\n * @param {Object} parent\n * @param {Array} competencies\n */\n function addCompetencyChildren(parent, competencies) {\n for (var i = 0; i < competencies.length; i++) {\n if (competencies[i].parentid == parent.id) {\n parent.haschildren = true;\n competencies[i].children = [];\n competencies[i].haschildren = false;\n parent.children[parent.children.length] = competencies[i];\n addCompetencyChildren(competencies[i], competencies);\n }\n }\n }\n\n // Expand the list of competencies into a tree.\n var i, comp;\n var tree = [];\n for (i = 0; i < competencies.length; i++) {\n comp = competencies[i];\n if (comp.parentid == \"0\") { // Loose check for now, because WS returns a string.\n comp.children = [];\n comp.haschildren = 0;\n tree[tree.length] = comp;\n addCompetencyChildren(comp, competencies);\n }\n }\n\n self._competencies = tree;\n\n }).fail(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @return {JQuery}\n * @method _find\n */\n Picker.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Convenience method to get a framework object.\n *\n * @param {Number} fid The framework ID.\n * @return {Object}\n * @method _getFramework\n */\n Picker.prototype._getFramework = function(fid) {\n var frm;\n $.each(this._frameworks, function(i, f) {\n if (f.id == fid) {\n frm = f;\n return;\n }\n });\n return frm;\n };\n\n /**\n * Load the competencies.\n *\n * @method _loadCompetencies\n * @return {Promise}\n */\n Picker.prototype._loadCompetencies = function() {\n return this._fetchCompetencies(this._frameworkId, this._searchText);\n };\n\n /**\n * Load the frameworks.\n *\n * @method _loadFrameworks\n * @return {Promise}\n */\n Picker.prototype._loadFrameworks = function() {\n var promise,\n self = this;\n\n // Quit early because we already have the data.\n if (self._frameworks.length > 0) {\n return $.when();\n }\n\n if (self._singleFramework) {\n promise = Ajax.call([\n {methodname: 'core_competency_read_competency_framework', args: {\n id: this._frameworkId\n }}\n ])[0].then(function(framework) {\n return [framework];\n });\n } else {\n promise = Ajax.call([\n {methodname: 'core_competency_list_competency_frameworks', args: {\n sort: 'shortname',\n context: {contextid: self._pageContextId},\n includes: self._pageContextIncludes,\n onlyvisible: self._onlyVisible\n }}\n ])[0];\n }\n\n return promise.done(function(frameworks) {\n self._frameworks = frameworks;\n }).fail(Notification.exception);\n };\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n Picker.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Hook to executed before render.\n *\n * @method _preRender\n * @return {Promise}\n */\n Picker.prototype._preRender = function() {\n var self = this;\n return self._loadFrameworks().then(function() {\n if (!self._frameworkId && self._frameworks.length > 0) {\n self._frameworkId = self._frameworks[0].id;\n }\n\n // We could not set a framework ID, that probably means there are no frameworks accessible.\n if (!self._frameworkId) {\n self._frameworks = [];\n return $.when();\n }\n\n return self._loadCompetencies();\n });\n };\n\n /**\n * Refresh the view.\n *\n * @method _refresh\n * @return {Promise}\n */\n Picker.prototype._refresh = function() {\n var self = this;\n return self._render().then(function(html) {\n self._find('[data-region=\"competencylinktree\"]').replaceWith(html);\n self._afterRender();\n return;\n });\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @return {Promise}\n */\n Picker.prototype._render = function() {\n var self = this;\n return self._preRender().then(function() {\n\n if (!self._singleFramework) {\n $.each(self._frameworks, function(i, framework) {\n if (framework.id == self._frameworkId) {\n framework.selected = true;\n } else {\n framework.selected = false;\n }\n });\n }\n\n var context = {\n competencies: self._competencies,\n framework: self._getFramework(self._frameworkId),\n frameworks: self._frameworks,\n search: self._searchText,\n singleFramework: self._singleFramework,\n };\n\n return Templates.render('tool_lp/competency_picker', context);\n });\n };\n\n /**\n * Reset the dialogue properties.\n *\n * This does not reset everything, just enough to reset the UI.\n *\n * @method _reset\n */\n Picker.prototype._reset = function() {\n this._competencies = [];\n this._disallowedCompetencyIDs = [];\n this._popup = null;\n this._searchText = '';\n this._selectedCompetencies = [];\n };\n\n /**\n * Set what competencies cannot be picked.\n *\n * This needs to be set after reset/close.\n *\n * @param {Number[]} ids The IDs.\n * @method _setDisallowedCompetencyIDs\n */\n Picker.prototype.setDisallowedCompetencyIDs = function(ids) {\n this._disallowedCompetencyIDs = ids;\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _reset\n */\n Picker.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n return /** @alias module:tool_lp/competencypicker */ Picker;\n\n});\n"],"file":"competencypicker.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencypicker_user_plans.min.js.map b/admin/tool/lp/amd/build/competencypicker_user_plans.min.js.map index ba55e4a90ff..2581ebc8755 100644 --- a/admin/tool/lp/amd/build/competencypicker_user_plans.min.js.map +++ b/admin/tool/lp/amd/build/competencypicker_user_plans.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencypicker_user_plans.js"],"names":["define","$","Notification","Ajax","Templates","Str","Tree","PickerBase","Picker","userId","singlePlan","multiSelect","prototype","constructor","apply","_userId","_plans","_planId","_singlePlan","Object","create","_afterRender","self","arguments","_find","change","e","target","val","_loadCompetencies","then","_refresh","bind","catch","exception","_fetchCompetencies","planId","searchText","call","methodname","args","id","done","competencies","i","comp","tree","length","competency","shortname","toLowerCase","indexOf","children","haschildren","push","_competencies","fail","_getPlan","plan","each","f","_searchText","_loadPlans","promise","when","userid","plans","_preRender","_render","selected","context","search","render"],"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 .\n\n/**\n * Competency picker from user plans.\n *\n * To handle 'save' events use: picker.on('save').\n *\n * This will receive a object with either a single 'competencyId', or an array in 'competencyIds'\n * depending on the value of multiSelect.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/str',\n 'tool_lp/tree',\n 'tool_lp/competencypicker'\n ],\n function($, Notification, Ajax, Templates, Str, Tree, PickerBase) {\n\n /**\n * Competency picker in plan class.\n *\n * @param {Number} userId\n * @param {Number|false} singlePlan The ID of the plan when limited to one.\n * @param {Boolean} multiSelect Support multi-select in the tree.\n */\n var Picker = function(userId, singlePlan, multiSelect) {\n PickerBase.prototype.constructor.apply(this, [1, false, 'self', multiSelect]);\n this._userId = userId;\n this._plans = [];\n\n if (singlePlan) {\n this._planId = singlePlan;\n this._singlePlan = true;\n }\n };\n Picker.prototype = Object.create(PickerBase.prototype);\n\n /** @type {Array} The list of plans fetched. */\n Picker.prototype._plans = null;\n /** @type {Number} The current plan ID. */\n Picker.prototype._planId = null;\n /** @type {Boolean} Whether we can browse plans or not. */\n Picker.prototype._singlePlan = false;\n /** @type {Number} The user the plans belongs to. */\n Picker.prototype._userId = null;\n\n /**\n * Hook to executed after the view is rendered.\n *\n * @method _afterRender\n */\n Picker.prototype._afterRender = function() {\n var self = this;\n PickerBase.prototype._afterRender.apply(self, arguments);\n\n // Add listener for framework change.\n if (!self._singlePlan) {\n self._find('[data-action=\"chooseplan\"]').change(function(e) {\n self._planId = $(e.target).val();\n self._loadCompetencies().then(self._refresh.bind(self))\n .catch(Notification.exception);\n });\n }\n };\n\n /**\n * Fetch the competencies.\n *\n * @param {Number} planId The planId.\n * @param {String} searchText Limit the competencies to those matching the text.\n * @method _fetchCompetencies\n * @return {Promise} The promise object.\n */\n Picker.prototype._fetchCompetencies = function(planId, searchText) {\n var self = this;\n\n return Ajax.call([\n {methodname: 'core_competency_list_plan_competencies', args: {\n id: planId\n }}\n ])[0].done(function(competencies) {\n\n // Expand the list of competencies into a fake tree.\n var i, comp;\n var tree = [];\n for (i = 0; i < competencies.length; i++) {\n comp = competencies[i].competency;\n if (comp.shortname.toLowerCase().indexOf(searchText.toLowerCase()) < 0) {\n continue;\n }\n comp.children = [];\n comp.haschildren = 0;\n tree.push(comp);\n }\n\n self._competencies = tree;\n\n }).fail(Notification.exception);\n };\n\n /**\n * Convenience method to get a plan object.\n *\n * @param {Number} id The plan ID.\n * @return {Object|undefined} The plan.\n * @method _getPlan\n */\n Picker.prototype._getPlan = function(id) {\n var plan;\n $.each(this._plans, function(i, f) {\n if (f.id == id) {\n plan = f;\n return;\n }\n });\n return plan;\n };\n\n /**\n * Load the competencies.\n *\n * @method _loadCompetencies\n * @return {Promise}\n */\n Picker.prototype._loadCompetencies = function() {\n return this._fetchCompetencies(this._planId, this._searchText);\n };\n\n /**\n * Load the plans.\n *\n * @method _loadPlans\n * @return {Promise}\n */\n Picker.prototype._loadPlans = function() {\n var promise,\n self = this;\n\n // Quit early because we already have the data.\n if (self._plans.length > 0) {\n return $.when();\n }\n\n if (self._singlePlan) {\n promise = Ajax.call([\n {methodname: 'core_competency_read_plan', args: {\n id: this._planId\n }}\n ])[0].then(function(plan) {\n return [plan];\n });\n } else {\n promise = Ajax.call([\n {methodname: 'core_competency_list_user_plans', args: {\n userid: self._userId\n }}\n ])[0];\n }\n\n return promise.done(function(plans) {\n self._plans = plans;\n }).fail(Notification.exception);\n };\n\n /**\n * Hook to executed before render.\n *\n * @method _preRender\n * @return {Promise}\n */\n Picker.prototype._preRender = function() {\n var self = this;\n return self._loadPlans().then(function() {\n if (!self._planId && self._plans.length > 0) {\n self._planId = self._plans[0].id;\n }\n\n // We could not set a framework ID, that probably means there are no frameworks accessible.\n if (!self._planId) {\n self._plans = [];\n return $.when();\n }\n\n return self._loadCompetencies();\n });\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @return {Promise}\n */\n Picker.prototype._render = function() {\n var self = this;\n return self._preRender().then(function() {\n\n if (!self._singlePlan) {\n $.each(self._plans, function(i, plan) {\n if (plan.id == self._planId) {\n plan.selected = true;\n } else {\n plan.selected = false;\n }\n });\n }\n\n var context = {\n competencies: self._competencies,\n plan: self._getPlan(self._planId),\n plans: self._plans,\n search: self._searchText,\n singlePlan: self._singlePlan,\n };\n\n return Templates.render('tool_lp/competency_picker_user_plans', context);\n });\n };\n\n return /** @alias module:tool_lp/competencypicker_user_plans */ Picker;\n\n});\n"],"file":"competencypicker_user_plans.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencypicker_user_plans.js"],"names":["define","$","Notification","Ajax","Templates","Str","Tree","PickerBase","Picker","userId","singlePlan","multiSelect","prototype","constructor","apply","_userId","_plans","_planId","_singlePlan","Object","create","_afterRender","self","arguments","_find","change","e","target","val","_loadCompetencies","then","_refresh","bind","catch","exception","_fetchCompetencies","planId","searchText","call","methodname","args","id","done","competencies","i","comp","tree","length","competency","shortname","toLowerCase","indexOf","children","haschildren","push","_competencies","fail","_getPlan","plan","each","f","_searchText","_loadPlans","promise","when","userid","plans","_preRender","_render","selected","context","search","render"],"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 .\n\n/**\n * Competency picker from user plans.\n *\n * To handle 'save' events use: picker.on('save').\n *\n * This will receive a object with either a single 'competencyId', or an array in 'competencyIds'\n * depending on the value of multiSelect.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/str',\n 'tool_lp/tree',\n 'tool_lp/competencypicker'\n ],\n function($, Notification, Ajax, Templates, Str, Tree, PickerBase) {\n\n /**\n * Competency picker in plan class.\n *\n * @param {Number} userId\n * @param {Number|false} singlePlan The ID of the plan when limited to one.\n * @param {Boolean} multiSelect Support multi-select in the tree.\n */\n var Picker = function(userId, singlePlan, multiSelect) {\n PickerBase.prototype.constructor.apply(this, [1, false, 'self', multiSelect]);\n this._userId = userId;\n this._plans = [];\n\n if (singlePlan) {\n this._planId = singlePlan;\n this._singlePlan = true;\n }\n };\n Picker.prototype = Object.create(PickerBase.prototype);\n\n /** @property {Array} The list of plans fetched. */\n Picker.prototype._plans = null;\n /** @property {Number} The current plan ID. */\n Picker.prototype._planId = null;\n /** @property {Boolean} Whether we can browse plans or not. */\n Picker.prototype._singlePlan = false;\n /** @property {Number} The user the plans belongs to. */\n Picker.prototype._userId = null;\n\n /**\n * Hook to executed after the view is rendered.\n *\n * @method _afterRender\n */\n Picker.prototype._afterRender = function() {\n var self = this;\n PickerBase.prototype._afterRender.apply(self, arguments);\n\n // Add listener for framework change.\n if (!self._singlePlan) {\n self._find('[data-action=\"chooseplan\"]').change(function(e) {\n self._planId = $(e.target).val();\n self._loadCompetencies().then(self._refresh.bind(self))\n .catch(Notification.exception);\n });\n }\n };\n\n /**\n * Fetch the competencies.\n *\n * @param {Number} planId The planId.\n * @param {String} searchText Limit the competencies to those matching the text.\n * @method _fetchCompetencies\n * @return {Promise} The promise object.\n */\n Picker.prototype._fetchCompetencies = function(planId, searchText) {\n var self = this;\n\n return Ajax.call([\n {methodname: 'core_competency_list_plan_competencies', args: {\n id: planId\n }}\n ])[0].done(function(competencies) {\n\n // Expand the list of competencies into a fake tree.\n var i, comp;\n var tree = [];\n for (i = 0; i < competencies.length; i++) {\n comp = competencies[i].competency;\n if (comp.shortname.toLowerCase().indexOf(searchText.toLowerCase()) < 0) {\n continue;\n }\n comp.children = [];\n comp.haschildren = 0;\n tree.push(comp);\n }\n\n self._competencies = tree;\n\n }).fail(Notification.exception);\n };\n\n /**\n * Convenience method to get a plan object.\n *\n * @param {Number} id The plan ID.\n * @return {Object|undefined} The plan.\n * @method _getPlan\n */\n Picker.prototype._getPlan = function(id) {\n var plan;\n $.each(this._plans, function(i, f) {\n if (f.id == id) {\n plan = f;\n return;\n }\n });\n return plan;\n };\n\n /**\n * Load the competencies.\n *\n * @method _loadCompetencies\n * @return {Promise}\n */\n Picker.prototype._loadCompetencies = function() {\n return this._fetchCompetencies(this._planId, this._searchText);\n };\n\n /**\n * Load the plans.\n *\n * @method _loadPlans\n * @return {Promise}\n */\n Picker.prototype._loadPlans = function() {\n var promise,\n self = this;\n\n // Quit early because we already have the data.\n if (self._plans.length > 0) {\n return $.when();\n }\n\n if (self._singlePlan) {\n promise = Ajax.call([\n {methodname: 'core_competency_read_plan', args: {\n id: this._planId\n }}\n ])[0].then(function(plan) {\n return [plan];\n });\n } else {\n promise = Ajax.call([\n {methodname: 'core_competency_list_user_plans', args: {\n userid: self._userId\n }}\n ])[0];\n }\n\n return promise.done(function(plans) {\n self._plans = plans;\n }).fail(Notification.exception);\n };\n\n /**\n * Hook to executed before render.\n *\n * @method _preRender\n * @return {Promise}\n */\n Picker.prototype._preRender = function() {\n var self = this;\n return self._loadPlans().then(function() {\n if (!self._planId && self._plans.length > 0) {\n self._planId = self._plans[0].id;\n }\n\n // We could not set a framework ID, that probably means there are no frameworks accessible.\n if (!self._planId) {\n self._plans = [];\n return $.when();\n }\n\n return self._loadCompetencies();\n });\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @return {Promise}\n */\n Picker.prototype._render = function() {\n var self = this;\n return self._preRender().then(function() {\n\n if (!self._singlePlan) {\n $.each(self._plans, function(i, plan) {\n if (plan.id == self._planId) {\n plan.selected = true;\n } else {\n plan.selected = false;\n }\n });\n }\n\n var context = {\n competencies: self._competencies,\n plan: self._getPlan(self._planId),\n plans: self._plans,\n search: self._searchText,\n singlePlan: self._singlePlan,\n };\n\n return Templates.render('tool_lp/competency_picker_user_plans', context);\n });\n };\n\n return /** @alias module:tool_lp/competencypicker_user_plans */ Picker;\n\n});\n"],"file":"competencypicker_user_plans.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencyruleconfig.min.js.map b/admin/tool/lp/amd/build/competencyruleconfig.min.js.map index 71363470286..87e5188845f 100644 --- a/admin/tool/lp/amd/build/competencyruleconfig.min.js.map +++ b/admin/tool/lp/amd/build/competencyruleconfig.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencyruleconfig.js"],"names":["define","$","Notification","Templates","Dialogue","Outcomes","Str","RuleConfig","tree","rulesModules","_eventNode","_tree","_rulesModules","_setUp","prototype","_competency","_outcomesOption","_popup","_ready","_rules","_afterChange","_isValid","_find","prop","_afterRuleConfigChange","e","rule","_getRule","_afterRender","self","on","_switchedOutcome","trigger","_switchedRule","_trigger","_getConfig","close","canBeConfigured","can","each","index","canConfig","display","when","get_string","_render","then","title","render","bind","fail","exception","selector","getContent","find","_getApplicableOutcomesOptions","options","outcome","push","code","name","selected","ruleoutcome","_getApplicableRulesOptions","_getRuleName","getType","type","ruletype","ruleconfig","getConfig","_getOutcome","val","result","modInfo","_initOutcomes","getAll","outcomes","_initRules","promises","promise","init","setTargetCompetency","splice","apply","NONE","isValid","handler","_preRender","ready","config","rules","context","competencyshortname","shortname","setTargetCompetencyId","competencyId","getCompetency","modules","Deferred","amd","require","arguments","Module","always","resolve","hide","empty","show","container","injectTemplate","catch","data"],"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 .\n\n/**\n * Competency rule config.\n *\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/templates',\n 'tool_lp/dialogue',\n 'tool_lp/competency_outcomes',\n 'core/str'],\n function($, Notification, Templates, Dialogue, Outcomes, Str) {\n\n /**\n * Competency rule class.\n *\n * When implementing this you should attach a listener to the event 'save'\n * on the instance. E.g.\n *\n * var config = new RuleConfig(tree, modules);\n * config.on('save', function(e, config) { ... });\n *\n * @param {competencytree} tree The competency tree.\n * @param {Array} rulesModules The modules containing the rules: [{ typeName: { amd: amdModule, name: ruleName }}].\n */\n var RuleConfig = function(tree, rulesModules) {\n this._eventNode = $('
');\n this._tree = tree;\n this._rulesModules = rulesModules;\n this._setUp();\n };\n\n /** @type {Object} The current competency. */\n RuleConfig.prototype._competency = null;\n /** @type {Node} The node we attach the events to. */\n RuleConfig.prototype._eventNode = null;\n /** @type {Array} Outcomes options. */\n RuleConfig.prototype._outcomesOption = null;\n /** @type {Dialogue} The dialogue. */\n RuleConfig.prototype._popup = null;\n /** @type {Promise} Resolved when the module is ready. */\n RuleConfig.prototype._ready = null;\n /** @type {Array} The rules. */\n RuleConfig.prototype._rules = null;\n /** @type {Array} The rules modules. */\n RuleConfig.prototype._rulesModules = null;\n /** @type {competencytree} The competency tree. */\n RuleConfig.prototype._tree = null;\n\n /**\n * After change.\n *\n * Triggered when a change occured.\n *\n * @method _afterChange\n * @protected\n */\n RuleConfig.prototype._afterChange = function() {\n if (!this._isValid()) {\n this._find('[data-action=\"save\"]').prop('disabled', true);\n } else {\n this._find('[data-action=\"save\"]').prop('disabled', false);\n }\n };\n\n /**\n * After change in rule's config.\n *\n * Triggered when a change occured in a specific rule config.\n *\n * @method _afterRuleConfigChange\n * @protected\n * @param {Event} e\n * @param {Rule} rule\n */\n RuleConfig.prototype._afterRuleConfigChange = function(e, rule) {\n if (rule != this._getRule()) {\n // This rule is not the current one any more, we can ignore.\n return;\n }\n this._afterChange();\n };\n\n /**\n * After render hook.\n *\n * @method _afterRender\n * @protected\n */\n RuleConfig.prototype._afterRender = function() {\n var self = this;\n\n self._find('[name=\"outcome\"]').on('change', function() {\n self._switchedOutcome();\n }).trigger('change');\n\n self._find('[name=\"rule\"]').on('change', function() {\n self._switchedRule();\n }).trigger('change');\n\n self._find('[data-action=\"save\"]').on('click', function() {\n self._trigger('save', self._getConfig());\n self.close();\n });\n\n self._find('[data-action=\"cancel\"]').on('click', function() {\n self.close();\n });\n };\n\n /**\n * Whether the current competency can be configured.\n *\n * @return {Boolean}\n * @method canBeConfigured\n */\n RuleConfig.prototype.canBeConfigured = function() {\n var can = false;\n $.each(this._rules, function(index, rule) {\n if (rule.canConfig()) {\n can = true;\n return;\n }\n });\n return can;\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n RuleConfig.prototype.close = function() {\n this._popup.close();\n this._popup = null;\n };\n\n /**\n * Opens the picker.\n *\n * @param {Number} competencyId The competency ID of the competency to work on.\n * @method display\n * @return {Promise}\n */\n RuleConfig.prototype.display = function() {\n var self = this;\n if (!self._competency) {\n return false;\n }\n return $.when(Str.get_string('competencyrule', 'tool_lp'), self._render())\n .then(function(title, render) {\n self._popup = new Dialogue(\n title,\n render[0],\n self._afterRender.bind(self)\n );\n return;\n }).fail(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @return {JQuery}\n * @method _find\n * @protected\n */\n RuleConfig.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Get the applicable outcome options.\n *\n * @return {Array}\n * @method _getApplicableOutcomesOptions\n * @protected\n */\n RuleConfig.prototype._getApplicableOutcomesOptions = function() {\n var self = this,\n options = [];\n\n $.each(self._outcomesOption, function(index, outcome) {\n options.push({\n code: outcome.code,\n name: outcome.name,\n selected: (outcome.code == self._competency.ruleoutcome) ? true : false,\n });\n });\n\n return options;\n };\n\n /**\n * Get the applicable rules options.\n *\n * @return {Array}\n * @method _getApplicableRulesOptions\n * @protected\n */\n RuleConfig.prototype._getApplicableRulesOptions = function() {\n var self = this,\n options = [];\n\n $.each(self._rules, function(index, rule) {\n if (!rule.canConfig()) {\n return;\n }\n options.push({\n name: self._getRuleName(rule.getType()),\n type: rule.getType(),\n selected: (rule.getType() == self._competency.ruletype) ? true : false,\n });\n });\n\n return options;\n };\n\n /**\n * Get the full config for the competency.\n *\n * @return {Object} Contains rule, ruleoutcome and ruleconfig.\n * @method _getConfig\n * @protected\n */\n RuleConfig.prototype._getConfig = function() {\n var rule = this._getRule();\n return {\n ruletype: rule ? rule.getType() : null,\n ruleconfig: rule ? rule.getConfig() : null,\n ruleoutcome: this._getOutcome()\n };\n };\n\n /**\n * Get the selected outcome code.\n *\n * @return {String}\n * @method _getOutcome\n * @protected\n */\n RuleConfig.prototype._getOutcome = function() {\n return this._find('[name=\"outcome\"]').val();\n };\n\n /**\n * Get the selected rule.\n *\n * @return {null|Rule}\n * @method _getRule\n * @protected\n */\n RuleConfig.prototype._getRule = function() {\n var result,\n type = this._find('[name=\"rule\"]').val();\n\n $.each(this._rules, function(index, rule) {\n if (rule.getType() == type) {\n result = rule;\n return;\n }\n });\n\n return result;\n };\n\n /**\n * Return the name of a rule.\n *\n * @param {String} type The type of a rule.\n * @return {String}\n * @method _getRuleName\n * @protected\n */\n RuleConfig.prototype._getRuleName = function(type) {\n var self = this,\n name;\n $.each(self._rulesModules, function(index, modInfo) {\n if (modInfo.type == type) {\n name = modInfo.name;\n return;\n }\n });\n return name;\n };\n\n /**\n * Initialise the outcomes.\n *\n * @return {Promise}\n * @method _initOutcomes\n * @protected\n */\n RuleConfig.prototype._initOutcomes = function() {\n var self = this;\n return Outcomes.getAll().then(function(outcomes) {\n self._outcomesOption = outcomes;\n return;\n });\n };\n\n /**\n * Initialise the rules.\n *\n * @return {Promise}\n * @method _initRules\n * @protected\n */\n RuleConfig.prototype._initRules = function() {\n var self = this,\n promises = [];\n $.each(self._rules, function(index, rule) {\n var promise = rule.init().then(function() {\n rule.setTargetCompetency(self._competency);\n rule.on('change', self._afterRuleConfigChange.bind(self));\n return;\n }, function() {\n // Upon failure remove the rule, and resolve the promise.\n self._rules.splice(index, 1);\n return $.when();\n });\n promises.push(promise);\n });\n\n return $.when.apply($.when, promises);\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * @return {Boolean}\n * @method _isValid\n * @protected\n */\n RuleConfig.prototype._isValid = function() {\n var outcome = this._getOutcome(),\n rule = this._getRule();\n\n if (outcome == Outcomes.NONE) {\n return true;\n } else if (!rule) {\n return false;\n }\n\n return rule.isValid();\n };\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n RuleConfig.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Hook to executed before render.\n *\n * @method _preRender\n * @protected\n * @return {Promise}\n */\n RuleConfig.prototype._preRender = function() {\n // We need to have all the information about the rule plugins first.\n return this.ready();\n };\n\n /**\n * Returns a promise that is resolved when the module is ready.\n *\n * @return {Promise}\n * @method ready\n * @protected\n */\n RuleConfig.prototype.ready = function() {\n return this._ready.promise();\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @protected\n * @return {Promise}\n */\n RuleConfig.prototype._render = function() {\n var self = this;\n return this._preRender().then(function() {\n var config;\n\n if (!self.canBeConfigured()) {\n config = false;\n } else {\n config = {};\n config.outcomes = self._getApplicableOutcomesOptions();\n config.rules = self._getApplicableRulesOptions();\n }\n\n var context = {\n competencyshortname: self._competency.shortname,\n config: config\n };\n\n return Templates.render('tool_lp/competency_rule_config', context);\n });\n };\n\n /**\n * Set the target competency.\n *\n * @param {Number} competencyId The target competency Id.\n * @method setTargetCompetencyId\n */\n RuleConfig.prototype.setTargetCompetencyId = function(competencyId) {\n var self = this;\n self._competency = self._tree.getCompetency(competencyId);\n $.each(self._rules, function(index, rule) {\n rule.setTargetCompetency(self._competency);\n });\n };\n\n /**\n * Set up the instance.\n *\n * @method _setUp\n * @protected\n */\n RuleConfig.prototype._setUp = function() {\n var self = this,\n promises = [],\n modules = [];\n\n self._ready = $.Deferred();\n self._rules = [];\n\n $.each(self._rulesModules, function(index, rule) {\n modules.push(rule.amd);\n });\n\n // Load all the modules.\n require(modules, function() {\n $.each(arguments, function(index, Module) {\n // Instantiate the rule and listen to it.\n var rule = new Module(self._tree);\n self._rules.push(rule);\n });\n\n // Load all the option values.\n promises.push(self._initRules());\n promises.push(self._initOutcomes());\n\n // Ready when everything is done.\n $.when.apply($.when, promises).always(function() {\n self._ready.resolve();\n });\n });\n };\n\n /**\n * Called when the user switches outcome.\n *\n * @method _switchedOutcome\n * @protected\n */\n RuleConfig.prototype._switchedOutcome = function() {\n var self = this,\n type = self._getOutcome();\n\n if (type == Outcomes.NONE) {\n // Reset to defaults.\n self._find('[data-region=\"rule-type\"]').hide()\n .find('[name=\"rule\"]').val(-1);\n self._find('[data-region=\"rule-config\"]').empty().hide();\n self._afterChange();\n return;\n }\n\n self._find('[data-region=\"rule-type\"]').show();\n self._find('[data-region=\"rule-config\"]').show();\n self._afterChange();\n };\n\n /**\n * Called when the user switches rule.\n *\n * @method _switchedRule\n * @protected\n */\n RuleConfig.prototype._switchedRule = function() {\n var self = this,\n container = self._find('[data-region=\"rule-config\"]'),\n rule = self._getRule();\n\n if (!rule) {\n container.empty().hide();\n self._afterChange();\n return;\n }\n rule.injectTemplate(container).then(function() {\n container.show();\n return;\n }).always(function() {\n self._afterChange();\n }).catch(function() {\n container.empty().hide();\n });\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _trigger\n * @protected\n */\n RuleConfig.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n return /** @alias module:tool_lp/competencyruleconfig */ RuleConfig;\n\n});\n"],"file":"competencyruleconfig.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencyruleconfig.js"],"names":["define","$","Notification","Templates","Dialogue","Outcomes","Str","RuleConfig","tree","rulesModules","_eventNode","_tree","_rulesModules","_setUp","prototype","_competency","_outcomesOption","_popup","_ready","_rules","_afterChange","_isValid","_find","prop","_afterRuleConfigChange","e","rule","_getRule","_afterRender","self","on","_switchedOutcome","trigger","_switchedRule","_trigger","_getConfig","close","canBeConfigured","can","each","index","canConfig","display","when","get_string","_render","then","title","render","bind","fail","exception","selector","getContent","find","_getApplicableOutcomesOptions","options","outcome","push","code","name","selected","ruleoutcome","_getApplicableRulesOptions","_getRuleName","getType","type","ruletype","ruleconfig","getConfig","_getOutcome","val","result","modInfo","_initOutcomes","getAll","outcomes","_initRules","promises","promise","init","setTargetCompetency","splice","apply","NONE","isValid","handler","_preRender","ready","config","rules","context","competencyshortname","shortname","setTargetCompetencyId","competencyId","getCompetency","modules","Deferred","amd","require","arguments","Module","always","resolve","hide","empty","show","container","injectTemplate","catch","data"],"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 .\n\n/**\n * Competency rule config.\n *\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/templates',\n 'tool_lp/dialogue',\n 'tool_lp/competency_outcomes',\n 'core/str'],\n function($, Notification, Templates, Dialogue, Outcomes, Str) {\n\n /**\n * Competency rule class.\n *\n * When implementing this you should attach a listener to the event 'save'\n * on the instance. E.g.\n *\n * var config = new RuleConfig(tree, modules);\n * config.on('save', function(e, config) { ... });\n *\n * @param {competencytree} tree The competency tree.\n * @param {Array} rulesModules The modules containing the rules: [{ typeName: { amd: amdModule, name: ruleName }}].\n */\n var RuleConfig = function(tree, rulesModules) {\n this._eventNode = $('
');\n this._tree = tree;\n this._rulesModules = rulesModules;\n this._setUp();\n };\n\n /** @property {Object} The current competency. */\n RuleConfig.prototype._competency = null;\n /** @property {Node} The node we attach the events to. */\n RuleConfig.prototype._eventNode = null;\n /** @property {Array} Outcomes options. */\n RuleConfig.prototype._outcomesOption = null;\n /** @property {Dialogue} The dialogue. */\n RuleConfig.prototype._popup = null;\n /** @property {Promise} Resolved when the module is ready. */\n RuleConfig.prototype._ready = null;\n /** @property {Array} The rules. */\n RuleConfig.prototype._rules = null;\n /** @property {Array} The rules modules. */\n RuleConfig.prototype._rulesModules = null;\n /** @property {competencytree} The competency tree. */\n RuleConfig.prototype._tree = null;\n\n /**\n * After change.\n *\n * Triggered when a change occured.\n *\n * @method _afterChange\n * @protected\n */\n RuleConfig.prototype._afterChange = function() {\n if (!this._isValid()) {\n this._find('[data-action=\"save\"]').prop('disabled', true);\n } else {\n this._find('[data-action=\"save\"]').prop('disabled', false);\n }\n };\n\n /**\n * After change in rule's config.\n *\n * Triggered when a change occured in a specific rule config.\n *\n * @method _afterRuleConfigChange\n * @protected\n * @param {Event} e\n * @param {Rule} rule\n */\n RuleConfig.prototype._afterRuleConfigChange = function(e, rule) {\n if (rule != this._getRule()) {\n // This rule is not the current one any more, we can ignore.\n return;\n }\n this._afterChange();\n };\n\n /**\n * After render hook.\n *\n * @method _afterRender\n * @protected\n */\n RuleConfig.prototype._afterRender = function() {\n var self = this;\n\n self._find('[name=\"outcome\"]').on('change', function() {\n self._switchedOutcome();\n }).trigger('change');\n\n self._find('[name=\"rule\"]').on('change', function() {\n self._switchedRule();\n }).trigger('change');\n\n self._find('[data-action=\"save\"]').on('click', function() {\n self._trigger('save', self._getConfig());\n self.close();\n });\n\n self._find('[data-action=\"cancel\"]').on('click', function() {\n self.close();\n });\n };\n\n /**\n * Whether the current competency can be configured.\n *\n * @return {Boolean}\n * @method canBeConfigured\n */\n RuleConfig.prototype.canBeConfigured = function() {\n var can = false;\n $.each(this._rules, function(index, rule) {\n if (rule.canConfig()) {\n can = true;\n return;\n }\n });\n return can;\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n RuleConfig.prototype.close = function() {\n this._popup.close();\n this._popup = null;\n };\n\n /**\n * Opens the picker.\n *\n * @param {Number} competencyId The competency ID of the competency to work on.\n * @method display\n * @return {Promise}\n */\n RuleConfig.prototype.display = function() {\n var self = this;\n if (!self._competency) {\n return false;\n }\n return $.when(Str.get_string('competencyrule', 'tool_lp'), self._render())\n .then(function(title, render) {\n self._popup = new Dialogue(\n title,\n render[0],\n self._afterRender.bind(self)\n );\n return;\n }).fail(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @return {JQuery}\n * @method _find\n * @protected\n */\n RuleConfig.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Get the applicable outcome options.\n *\n * @return {Array}\n * @method _getApplicableOutcomesOptions\n * @protected\n */\n RuleConfig.prototype._getApplicableOutcomesOptions = function() {\n var self = this,\n options = [];\n\n $.each(self._outcomesOption, function(index, outcome) {\n options.push({\n code: outcome.code,\n name: outcome.name,\n selected: (outcome.code == self._competency.ruleoutcome) ? true : false,\n });\n });\n\n return options;\n };\n\n /**\n * Get the applicable rules options.\n *\n * @return {Array}\n * @method _getApplicableRulesOptions\n * @protected\n */\n RuleConfig.prototype._getApplicableRulesOptions = function() {\n var self = this,\n options = [];\n\n $.each(self._rules, function(index, rule) {\n if (!rule.canConfig()) {\n return;\n }\n options.push({\n name: self._getRuleName(rule.getType()),\n type: rule.getType(),\n selected: (rule.getType() == self._competency.ruletype) ? true : false,\n });\n });\n\n return options;\n };\n\n /**\n * Get the full config for the competency.\n *\n * @return {Object} Contains rule, ruleoutcome and ruleconfig.\n * @method _getConfig\n * @protected\n */\n RuleConfig.prototype._getConfig = function() {\n var rule = this._getRule();\n return {\n ruletype: rule ? rule.getType() : null,\n ruleconfig: rule ? rule.getConfig() : null,\n ruleoutcome: this._getOutcome()\n };\n };\n\n /**\n * Get the selected outcome code.\n *\n * @return {String}\n * @method _getOutcome\n * @protected\n */\n RuleConfig.prototype._getOutcome = function() {\n return this._find('[name=\"outcome\"]').val();\n };\n\n /**\n * Get the selected rule.\n *\n * @return {null|Rule}\n * @method _getRule\n * @protected\n */\n RuleConfig.prototype._getRule = function() {\n var result,\n type = this._find('[name=\"rule\"]').val();\n\n $.each(this._rules, function(index, rule) {\n if (rule.getType() == type) {\n result = rule;\n return;\n }\n });\n\n return result;\n };\n\n /**\n * Return the name of a rule.\n *\n * @param {String} type The type of a rule.\n * @return {String}\n * @method _getRuleName\n * @protected\n */\n RuleConfig.prototype._getRuleName = function(type) {\n var self = this,\n name;\n $.each(self._rulesModules, function(index, modInfo) {\n if (modInfo.type == type) {\n name = modInfo.name;\n return;\n }\n });\n return name;\n };\n\n /**\n * Initialise the outcomes.\n *\n * @return {Promise}\n * @method _initOutcomes\n * @protected\n */\n RuleConfig.prototype._initOutcomes = function() {\n var self = this;\n return Outcomes.getAll().then(function(outcomes) {\n self._outcomesOption = outcomes;\n return;\n });\n };\n\n /**\n * Initialise the rules.\n *\n * @return {Promise}\n * @method _initRules\n * @protected\n */\n RuleConfig.prototype._initRules = function() {\n var self = this,\n promises = [];\n $.each(self._rules, function(index, rule) {\n var promise = rule.init().then(function() {\n rule.setTargetCompetency(self._competency);\n rule.on('change', self._afterRuleConfigChange.bind(self));\n return;\n }, function() {\n // Upon failure remove the rule, and resolve the promise.\n self._rules.splice(index, 1);\n return $.when();\n });\n promises.push(promise);\n });\n\n return $.when.apply($.when, promises);\n };\n\n /**\n * Whether or not the current config is valid.\n *\n * @return {Boolean}\n * @method _isValid\n * @protected\n */\n RuleConfig.prototype._isValid = function() {\n var outcome = this._getOutcome(),\n rule = this._getRule();\n\n if (outcome == Outcomes.NONE) {\n return true;\n } else if (!rule) {\n return false;\n }\n\n return rule.isValid();\n };\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n RuleConfig.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Hook to executed before render.\n *\n * @method _preRender\n * @protected\n * @return {Promise}\n */\n RuleConfig.prototype._preRender = function() {\n // We need to have all the information about the rule plugins first.\n return this.ready();\n };\n\n /**\n * Returns a promise that is resolved when the module is ready.\n *\n * @return {Promise}\n * @method ready\n * @protected\n */\n RuleConfig.prototype.ready = function() {\n return this._ready.promise();\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @protected\n * @return {Promise}\n */\n RuleConfig.prototype._render = function() {\n var self = this;\n return this._preRender().then(function() {\n var config;\n\n if (!self.canBeConfigured()) {\n config = false;\n } else {\n config = {};\n config.outcomes = self._getApplicableOutcomesOptions();\n config.rules = self._getApplicableRulesOptions();\n }\n\n var context = {\n competencyshortname: self._competency.shortname,\n config: config\n };\n\n return Templates.render('tool_lp/competency_rule_config', context);\n });\n };\n\n /**\n * Set the target competency.\n *\n * @param {Number} competencyId The target competency Id.\n * @method setTargetCompetencyId\n */\n RuleConfig.prototype.setTargetCompetencyId = function(competencyId) {\n var self = this;\n self._competency = self._tree.getCompetency(competencyId);\n $.each(self._rules, function(index, rule) {\n rule.setTargetCompetency(self._competency);\n });\n };\n\n /**\n * Set up the instance.\n *\n * @method _setUp\n * @protected\n */\n RuleConfig.prototype._setUp = function() {\n var self = this,\n promises = [],\n modules = [];\n\n self._ready = $.Deferred();\n self._rules = [];\n\n $.each(self._rulesModules, function(index, rule) {\n modules.push(rule.amd);\n });\n\n // Load all the modules.\n require(modules, function() {\n $.each(arguments, function(index, Module) {\n // Instantiate the rule and listen to it.\n var rule = new Module(self._tree);\n self._rules.push(rule);\n });\n\n // Load all the option values.\n promises.push(self._initRules());\n promises.push(self._initOutcomes());\n\n // Ready when everything is done.\n $.when.apply($.when, promises).always(function() {\n self._ready.resolve();\n });\n });\n };\n\n /**\n * Called when the user switches outcome.\n *\n * @method _switchedOutcome\n * @protected\n */\n RuleConfig.prototype._switchedOutcome = function() {\n var self = this,\n type = self._getOutcome();\n\n if (type == Outcomes.NONE) {\n // Reset to defaults.\n self._find('[data-region=\"rule-type\"]').hide()\n .find('[name=\"rule\"]').val(-1);\n self._find('[data-region=\"rule-config\"]').empty().hide();\n self._afterChange();\n return;\n }\n\n self._find('[data-region=\"rule-type\"]').show();\n self._find('[data-region=\"rule-config\"]').show();\n self._afterChange();\n };\n\n /**\n * Called when the user switches rule.\n *\n * @method _switchedRule\n * @protected\n */\n RuleConfig.prototype._switchedRule = function() {\n var self = this,\n container = self._find('[data-region=\"rule-config\"]'),\n rule = self._getRule();\n\n if (!rule) {\n container.empty().hide();\n self._afterChange();\n return;\n }\n rule.injectTemplate(container).then(function() {\n container.show();\n return;\n }).always(function() {\n self._afterChange();\n }).catch(function() {\n container.empty().hide();\n });\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _trigger\n * @protected\n */\n RuleConfig.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n return /** @alias module:tool_lp/competencyruleconfig */ RuleConfig;\n\n});\n"],"file":"competencyruleconfig.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/competencytree.min.js.map b/admin/tool/lp/amd/build/competencytree.min.js.map index d579d0bb7bf..5d07f95700c 100644 --- a/admin/tool/lp/amd/build/competencytree.min.js.map +++ b/admin/tool/lp/amd/build/competencytree.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/competencytree.js"],"names":["define","ajax","notification","templates","Ariatree","CompOutcomes","$","competencies","competencyFrameworkId","competencyFrameworkShortName","treeSelector","currentNodeId","competencyFramworkCanManage","addChildren","parent","all","i","current","haschildren","children","length","parentid","id","push","loadCompetencies","searchtext","deferred","Deferred","render","done","loadinghtml","loadingjs","replaceNodeContents","promises","call","methodname","args","competencyframeworkid","result","competency","parseInt","context","shortname","canmanage","html","js","tree","node","find","selectItem","updateFocus","resolve","fail","reject","promise","rememberCurrent","evt","params","selected","attr","init","search","selector","competencyid","exception","on","eventname","handler","getChildren","each","index","getCompetencyFrameworkId","getCompetency","getCompetencyLevel","level","path","replace","split","hasChildren","hasRule","comp","ruleoutcome","OUTCOME_NONE","ruletype","reloadCompetencies","listCompetencies"],"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 .\n\n/**\n * Handle selection changes on the competency tree.\n *\n * @module tool_lp/competencyselect\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/ajax', 'core/notification', 'core/templates', 'tool_lp/tree', 'tool_lp/competency_outcomes', 'jquery'],\n function(ajax, notification, templates, Ariatree, CompOutcomes, $) {\n\n // Private variables and functions.\n /** @var {Object[]} competencies - Cached list of competencies */\n var competencies = {};\n\n /** @var {Number} competencyFrameworkId - The current framework id */\n var competencyFrameworkId = 0;\n\n /** @var {String} competencyFrameworkShortName - The current framework short name */\n var competencyFrameworkShortName = '';\n\n /** @var {String} treeSelector - The selector for the root of the tree. */\n var treeSelector = '';\n\n /** @var {String} currentNodeId - The data-id of the current node in the tree. */\n var currentNodeId = '';\n\n /** @var {Boolean} competencyFramworkCanManage - Can manage the competencies framework */\n var competencyFramworkCanManage = false;\n\n /**\n * Build a tree from the flat list of competencies.\n * @param {Object} parent The parent competency.\n * @param {Array} all The list of all competencies.\n */\n var addChildren = function(parent, all) {\n var i = 0;\n var current = false;\n parent.haschildren = false;\n parent.children = [];\n for (i = 0; i < all.length; i++) {\n current = all[i];\n if (current.parentid == parent.id) {\n parent.haschildren = true;\n parent.children.push(current);\n addChildren(current, all);\n }\n }\n };\n\n /**\n * Load the list of competencies via ajax. Competencies are filtered by the searchtext.\n * @param {String} searchtext The text to filter on.\n * @return {promise}\n */\n var loadCompetencies = function(searchtext) {\n var deferred = $.Deferred();\n\n templates.render('tool_lp/loading', {}).done(function(loadinghtml, loadingjs) {\n templates.replaceNodeContents($(treeSelector), loadinghtml, loadingjs);\n\n var promises = ajax.call([{\n methodname: 'core_competency_search_competencies',\n args: {\n searchtext: searchtext,\n competencyframeworkid: competencyFrameworkId\n }\n }]);\n promises[0].done(function(result) {\n competencies = {};\n var i = 0;\n for (i = 0; i < result.length; i++) {\n competencies[result[i].id] = result[i];\n }\n\n var children = [];\n var competency = false;\n for (i = 0; i < result.length; i++) {\n competency = result[i];\n if (parseInt(competency.parentid, 10) === 0) {\n children.push(competency);\n addChildren(competency, result);\n }\n }\n var context = {\n shortname: competencyFrameworkShortName,\n canmanage: competencyFramworkCanManage,\n competencies: children\n };\n templates.render('tool_lp/competencies_tree_root', context).done(function(html, js) {\n templates.replaceNodeContents($(treeSelector), $(html).html(), js);\n var tree = new Ariatree(treeSelector, false);\n\n if (currentNodeId) {\n var node = $(treeSelector).find('[data-id=' + currentNodeId + ']');\n if (node.length) {\n tree.selectItem(node);\n tree.updateFocus(node);\n }\n }\n deferred.resolve(competencies);\n }).fail(deferred.reject);\n }).fail(deferred.reject);\n });\n\n return deferred.promise();\n };\n\n /**\n * Whenever the current item in the tree is changed - remember the \"id\".\n * @param {Event} evt\n * @param {Object} params The parameters for the event (This is the selected node).\n */\n var rememberCurrent = function(evt, params) {\n var node = params.selected;\n currentNodeId = node.attr('data-id');\n };\n\n return /** @alias module:tool_lp/competencytree */ {\n // Public variables and functions.\n /**\n * Initialise the tree.\n *\n * @param {Number} id The competency framework id.\n * @param {String} shortname The framework shortname\n * @param {String} search The current search string\n * @param {String} selector The selector for the tree div\n * @param {Boolean} canmanage Can manage the competencies\n * @param {Number} competencyid The id of the competency to show first\n */\n init: function(id, shortname, search, selector, canmanage, competencyid) {\n competencyFrameworkId = id;\n competencyFrameworkShortName = shortname;\n competencyFramworkCanManage = canmanage;\n treeSelector = selector;\n loadCompetencies(search).fail(notification.exception);\n if (competencyid > 0) {\n currentNodeId = competencyid;\n }\n\n this.on('selectionchanged', rememberCurrent);\n },\n\n /**\n * Add an event handler for custom events emitted by the tree.\n *\n * @param {String} eventname The name of the event - only \"selectionchanged\" for now\n * @param {Function} handler The handler for the event.\n */\n on: function(eventname, handler) {\n // We can't use the tree on function directly\n // because the tree gets rebuilt whenever the search string changes,\n // instead we attach the listner to the root node of the tree which never\n // gets destroyed (same as \"on()\" code in the tree.js).\n $(treeSelector).on(eventname, handler);\n },\n\n /**\n * Get the children of a competency.\n *\n * @param {Number} id The competency ID.\n * @return {Array}\n * @method getChildren\n */\n getChildren: function(id) {\n var children = [];\n $.each(competencies, function(index, competency) {\n if (competency.parentid == id) {\n children.push(competency);\n }\n });\n return children;\n },\n\n /**\n * Get the competency framework id this model was initiliased with.\n *\n * @return {Number}\n */\n getCompetencyFrameworkId: function() {\n return competencyFrameworkId;\n },\n\n /**\n * Get a competency by id\n *\n * @param {Number} id The competency id\n * @return {Object}\n */\n getCompetency: function(id) {\n return competencies[id];\n },\n\n /**\n * Get the competency level.\n *\n * @param {Number} id The competency ID.\n * @return {Number}\n */\n getCompetencyLevel: function(id) {\n var competency = this.getCompetency(id),\n level = competency.path.replace(/^\\/|\\/$/g, '').split('/').length;\n return level;\n },\n\n /**\n * Whether a competency has children.\n *\n * @param {Number} id The competency ID.\n * @return {Boolean}\n * @method hasChildren\n */\n hasChildren: function(id) {\n return this.getChildren(id).length > 0;\n },\n\n /**\n * Does the competency have a rule?\n *\n * @param {Number} id The competency ID.\n * @return {Boolean}\n */\n hasRule: function(id) {\n var comp = this.getCompetency(id);\n if (comp) {\n return comp.ruleoutcome != CompOutcomes.OUTCOME_NONE\n && comp.ruletype;\n }\n return false;\n },\n\n /**\n * Reload all the page competencies framework competencies.\n * @method reloadCompetencies\n * @return {Promise}\n */\n reloadCompetencies: function() {\n return loadCompetencies('').fail(notification.exception);\n },\n\n /**\n * Get all competencies for this framework.\n *\n * @return {Object[]}\n */\n listCompetencies: function() {\n return competencies;\n },\n\n };\n });\n"],"file":"competencytree.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/competencytree.js"],"names":["define","ajax","notification","templates","Ariatree","CompOutcomes","$","competencies","competencyFrameworkId","competencyFrameworkShortName","treeSelector","currentNodeId","competencyFramworkCanManage","addChildren","parent","all","i","current","haschildren","children","length","parentid","id","push","loadCompetencies","searchtext","deferred","Deferred","render","done","loadinghtml","loadingjs","replaceNodeContents","promises","call","methodname","args","competencyframeworkid","result","competency","parseInt","context","shortname","canmanage","html","js","tree","node","find","selectItem","updateFocus","resolve","fail","reject","promise","rememberCurrent","evt","params","selected","attr","init","search","selector","competencyid","exception","on","eventname","handler","getChildren","each","index","getCompetencyFrameworkId","getCompetency","getCompetencyLevel","level","path","replace","split","hasChildren","hasRule","comp","ruleoutcome","OUTCOME_NONE","ruletype","reloadCompetencies","listCompetencies"],"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 .\n\n/**\n * Handle selection changes on the competency tree.\n *\n * @module tool_lp/competencyselect\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/ajax', 'core/notification', 'core/templates', 'tool_lp/tree', 'tool_lp/competency_outcomes', 'jquery'],\n function(ajax, notification, templates, Ariatree, CompOutcomes, $) {\n\n // Private variables and functions.\n /** @var {Object[]} competencies - Cached list of competencies */\n var competencies = {};\n\n /** @var {Number} competencyFrameworkId - The current framework id */\n var competencyFrameworkId = 0;\n\n /** @var {String} competencyFrameworkShortName - The current framework short name */\n var competencyFrameworkShortName = '';\n\n /** @var {String} treeSelector - The selector for the root of the tree. */\n var treeSelector = '';\n\n /** @var {String} currentNodeId - The data-id of the current node in the tree. */\n var currentNodeId = '';\n\n /** @var {Boolean} competencyFramworkCanManage - Can manage the competencies framework */\n var competencyFramworkCanManage = false;\n\n /**\n * Build a tree from the flat list of competencies.\n * @param {Object} parent The parent competency.\n * @param {Array} all The list of all competencies.\n */\n var addChildren = function(parent, all) {\n var i = 0;\n var current = false;\n parent.haschildren = false;\n parent.children = [];\n for (i = 0; i < all.length; i++) {\n current = all[i];\n if (current.parentid == parent.id) {\n parent.haschildren = true;\n parent.children.push(current);\n addChildren(current, all);\n }\n }\n };\n\n /**\n * Load the list of competencies via ajax. Competencies are filtered by the searchtext.\n * @param {String} searchtext The text to filter on.\n * @return {promise}\n */\n var loadCompetencies = function(searchtext) {\n var deferred = $.Deferred();\n\n templates.render('tool_lp/loading', {}).done(function(loadinghtml, loadingjs) {\n templates.replaceNodeContents($(treeSelector), loadinghtml, loadingjs);\n\n var promises = ajax.call([{\n methodname: 'core_competency_search_competencies',\n args: {\n searchtext: searchtext,\n competencyframeworkid: competencyFrameworkId\n }\n }]);\n promises[0].done(function(result) {\n competencies = {};\n var i = 0;\n for (i = 0; i < result.length; i++) {\n competencies[result[i].id] = result[i];\n }\n\n var children = [];\n var competency = false;\n for (i = 0; i < result.length; i++) {\n competency = result[i];\n if (parseInt(competency.parentid, 10) === 0) {\n children.push(competency);\n addChildren(competency, result);\n }\n }\n var context = {\n shortname: competencyFrameworkShortName,\n canmanage: competencyFramworkCanManage,\n competencies: children\n };\n templates.render('tool_lp/competencies_tree_root', context).done(function(html, js) {\n templates.replaceNodeContents($(treeSelector), $(html).html(), js);\n var tree = new Ariatree(treeSelector, false);\n\n if (currentNodeId) {\n var node = $(treeSelector).find('[data-id=' + currentNodeId + ']');\n if (node.length) {\n tree.selectItem(node);\n tree.updateFocus(node);\n }\n }\n deferred.resolve(competencies);\n }).fail(deferred.reject);\n }).fail(deferred.reject);\n });\n\n return deferred.promise();\n };\n\n /**\n * Whenever the current item in the tree is changed - remember the \"id\".\n * @param {Event} evt\n * @param {Object} params The parameters for the event (This is the selected node).\n */\n var rememberCurrent = function(evt, params) {\n var node = params.selected;\n currentNodeId = node.attr('data-id');\n };\n\n return /** @alias module:tool_lp/competencytree */ {\n // Public variables and functions.\n /**\n * Initialise the tree.\n *\n * @param {Number} id The competency framework id.\n * @param {String} shortname The framework shortname\n * @param {String} search The current search string\n * @param {String} selector The selector for the tree div\n * @param {Boolean} canmanage Can manage the competencies\n * @param {Number} competencyid The id of the competency to show first\n */\n init: function(id, shortname, search, selector, canmanage, competencyid) {\n competencyFrameworkId = id;\n competencyFrameworkShortName = shortname;\n competencyFramworkCanManage = canmanage;\n treeSelector = selector;\n loadCompetencies(search).fail(notification.exception);\n if (competencyid > 0) {\n currentNodeId = competencyid;\n }\n\n this.on('selectionchanged', rememberCurrent);\n },\n\n /**\n * Add an event handler for custom events emitted by the tree.\n *\n * @param {String} eventname The name of the event - only \"selectionchanged\" for now\n * @param {Function} handler The handler for the event.\n */\n on: function(eventname, handler) {\n // We can't use the tree on function directly\n // because the tree gets rebuilt whenever the search string changes,\n // instead we attach the listner to the root node of the tree which never\n // gets destroyed (same as \"on()\" code in the tree.js).\n $(treeSelector).on(eventname, handler);\n },\n\n /**\n * Get the children of a competency.\n *\n * @param {Number} id The competency ID.\n * @return {Array}\n * @method getChildren\n */\n getChildren: function(id) {\n var children = [];\n $.each(competencies, function(index, competency) {\n if (competency.parentid == id) {\n children.push(competency);\n }\n });\n return children;\n },\n\n /**\n * Get the competency framework id this model was initiliased with.\n *\n * @return {Number}\n */\n getCompetencyFrameworkId: function() {\n return competencyFrameworkId;\n },\n\n /**\n * Get a competency by id\n *\n * @param {Number} id The competency id\n * @return {Object}\n */\n getCompetency: function(id) {\n return competencies[id];\n },\n\n /**\n * Get the competency level.\n *\n * @param {Number} id The competency ID.\n * @return {Number}\n */\n getCompetencyLevel: function(id) {\n var competency = this.getCompetency(id),\n level = competency.path.replace(/^\\/|\\/$/g, '').split('/').length;\n return level;\n },\n\n /**\n * Whether a competency has children.\n *\n * @param {Number} id The competency ID.\n * @return {Boolean}\n * @method hasChildren\n */\n hasChildren: function(id) {\n return this.getChildren(id).length > 0;\n },\n\n /**\n * Does the competency have a rule?\n *\n * @param {Number} id The competency ID.\n * @return {Boolean}\n */\n hasRule: function(id) {\n var comp = this.getCompetency(id);\n if (comp) {\n return comp.ruleoutcome != CompOutcomes.OUTCOME_NONE\n && comp.ruletype;\n }\n return false;\n },\n\n /**\n * Reload all the page competencies framework competencies.\n * @method reloadCompetencies\n * @return {Promise}\n */\n reloadCompetencies: function() {\n return loadCompetencies('').fail(notification.exception);\n },\n\n /**\n * Get all competencies for this framework.\n *\n * @return {Object[]}\n */\n listCompetencies: function() {\n return competencies;\n },\n\n };\n });\n"],"file":"competencytree.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/course_competency_settings.min.js.map b/admin/tool/lp/amd/build/course_competency_settings.min.js.map index 9ab4d543df0..c28f3761c0d 100644 --- a/admin/tool/lp/amd/build/course_competency_settings.min.js.map +++ b/admin/tool/lp/amd/build/course_competency_settings.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/course_competency_settings.js"],"names":["define","$","notification","Dialogue","str","ajax","templates","Pending","settingsMod","selector","on","configureSettings","bind","prototype","_dialogue","e","pendingPromise","courseid","target","closest","data","currentValue","preventDefault","when","get_string","render","settings","pushratingstouserplans","then","title","templateResult","addListeners","resolve","catch","exception","save","_find","saveSettings","cancel","cancelChanges","close","find","newValue","val","courseId","call","methodname","args","refreshCourseCompetenciesPage","moduleid","context","html","js","replaceNode"],"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 .\n\n/**\n * Change the course competency settings in a popup.\n *\n * @module tool_lp/configurecoursecompetencysettings\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/notification',\n 'tool_lp/dialogue',\n 'core/str',\n 'core/ajax',\n 'core/templates',\n 'core/pending'\n ],\n function($, notification, Dialogue, str, ajax, templates, Pending) {\n\n /**\n * Constructor\n *\n * @param {String} selector - selector for the links to open the dialogue.\n */\n var settingsMod = function(selector) {\n $(selector).on('click', this.configureSettings.bind(this));\n };\n\n /** @type {Dialogue} Reference to the dialogue that we opened. */\n settingsMod.prototype._dialogue = null;\n\n /**\n * Open the configure settings dialogue.\n *\n * @param {Event} e\n * @method configureSettings\n */\n settingsMod.prototype.configureSettings = function(e) {\n var pendingPromise = new Pending();\n var courseid = $(e.target).closest('a').data('courseid');\n var currentValue = $(e.target).closest('a').data('pushratingstouserplans');\n var context = {\n courseid: courseid,\n settings: {pushratingstouserplans: currentValue}\n };\n e.preventDefault();\n\n $.when(\n str.get_string('configurecoursecompetencysettings', 'tool_lp'),\n templates.render('tool_lp/course_competency_settings', context),\n )\n .then(function(title, templateResult) {\n this._dialogue = new Dialogue(\n title,\n templateResult[0],\n this.addListeners.bind(this)\n );\n\n return this._dialogue;\n }.bind(this))\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n };\n\n /**\n * Add the save listener to the form.\n *\n * @method addSaveListener\n */\n settingsMod.prototype.addListeners = function() {\n var save = this._find('[data-action=\"save\"]');\n save.on('click', this.saveSettings.bind(this));\n var cancel = this._find('[data-action=\"cancel\"]');\n cancel.on('click', this.cancelChanges.bind(this));\n };\n\n /**\n * Cancel the changes.\n *\n * @param {Event} e\n * @method cancelChanges\n */\n settingsMod.prototype.cancelChanges = function(e) {\n e.preventDefault();\n this._dialogue.close();\n };\n\n /**\n * Cancel the changes.\n *\n * @param {String} selector\n * @return {JQuery}\n */\n settingsMod.prototype._find = function(selector) {\n return $('[data-region=\"coursecompetencysettings\"]').find(selector);\n };\n\n /**\n * Save the settings.\n *\n * @param {Event} e\n * @method saveSettings\n */\n settingsMod.prototype.saveSettings = function(e) {\n var pendingPromise = new Pending();\n e.preventDefault();\n\n var newValue = this._find('input[name=\"pushratingstouserplans\"]:checked').val();\n var courseId = this._find('input[name=\"courseid\"]').val();\n var settings = {pushratingstouserplans: newValue};\n\n ajax.call([\n {methodname: 'core_competency_update_course_competency_settings',\n args: {courseid: courseId, settings: settings}}\n ])[0]\n .then(function() {\n return this.refreshCourseCompetenciesPage();\n }.bind(this))\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n\n };\n\n /**\n * Refresh the course competencies page.\n *\n * @param {Event} e\n * @method saveSettings\n */\n settingsMod.prototype.refreshCourseCompetenciesPage = function() {\n var courseId = this._find('input[name=\"courseid\"]').val();\n var pendingPromise = new Pending();\n\n ajax.call([\n {methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: courseId, moduleid: 0}}\n ])[0]\n .then(function(context) {\n return templates.render('tool_lp/course_competencies_page', context);\n })\n .then(function(html, js) {\n templates.replaceNode($('[data-region=\"coursecompetenciespage\"]'), html, js);\n this._dialogue.close();\n\n return;\n }.bind(this))\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n };\n\n return /** @alias module:tool_lp/configurecoursecompetencysettings */ settingsMod;\n});\n"],"file":"course_competency_settings.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/course_competency_settings.js"],"names":["define","$","notification","Dialogue","str","ajax","templates","Pending","settingsMod","selector","on","configureSettings","bind","prototype","_dialogue","e","pendingPromise","courseid","target","closest","data","currentValue","preventDefault","when","get_string","render","settings","pushratingstouserplans","then","title","templateResult","addListeners","resolve","catch","exception","save","_find","saveSettings","cancel","cancelChanges","close","find","newValue","val","courseId","call","methodname","args","refreshCourseCompetenciesPage","moduleid","context","html","js","replaceNode"],"mappings":"AAsBAA,OAAM,sCAAC,CAAC,QAAD,CACC,mBADD,CAEC,kBAFD,CAGC,UAHD,CAIC,WAJD,CAKC,gBALD,CAMC,cAND,CAAD,CAQC,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAoCC,CAApC,CAAyCC,CAAzC,CAA+CC,CAA/C,CAA0DC,CAA1D,CAAmE,CAOtE,GAAIC,CAAAA,CAAW,CAAG,SAASC,CAAT,CAAmB,CACjCR,CAAC,CAACQ,CAAD,CAAD,CAAYC,EAAZ,CAAe,OAAf,CAAwB,KAAKC,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAxB,CACH,CAFD,CAKAJ,CAAW,CAACK,SAAZ,CAAsBC,SAAtB,CAAkC,IAAlC,CAQAN,CAAW,CAACK,SAAZ,CAAsBF,iBAAtB,CAA0C,SAASI,CAAT,CAAY,IAC9CC,CAAAA,CAAc,CAAG,GAAIT,CAAAA,CADyB,CAE9CU,CAAQ,CAAGhB,CAAC,CAACc,CAAC,CAACG,MAAH,CAAD,CAAYC,OAAZ,CAAoB,GAApB,EAAyBC,IAAzB,CAA8B,UAA9B,CAFmC,CAG9CC,CAAY,CAAGpB,CAAC,CAACc,CAAC,CAACG,MAAH,CAAD,CAAYC,OAAZ,CAAoB,GAApB,EAAyBC,IAAzB,CAA8B,wBAA9B,CAH+B,CAQlDL,CAAC,CAACO,cAAF,GAEArB,CAAC,CAACsB,IAAF,CACInB,CAAG,CAACoB,UAAJ,CAAe,mCAAf,CAAoD,SAApD,CADJ,CAEIlB,CAAS,CAACmB,MAAV,CAAiB,oCAAjB,CARU,CACVR,QAAQ,CAAEA,CADA,CAEVS,QAAQ,CAAE,CAACC,sBAAsB,CAAEN,CAAzB,CAFA,CAQV,CAFJ,EAICO,IAJD,CAIM,SAASC,CAAT,CAAgBC,CAAhB,CAAgC,CAClC,KAAKhB,SAAL,CAAiB,GAAIX,CAAAA,CAAJ,CACb0B,CADa,CAEbC,CAAc,CAAC,CAAD,CAFD,CAGb,KAAKC,YAAL,CAAkBnB,IAAlB,CAAuB,IAAvB,CAHa,CAAjB,CAMA,MAAO,MAAKE,SACf,CARK,CAQJF,IARI,CAQC,IARD,CAJN,EAaCgB,IAbD,CAaMZ,CAAc,CAACgB,OAbrB,EAcCC,KAdD,CAcO/B,CAAY,CAACgC,SAdpB,CAeH,CAzBD,CAgCA1B,CAAW,CAACK,SAAZ,CAAsBkB,YAAtB,CAAqC,UAAW,CAC5C,GAAII,CAAAA,CAAI,CAAG,KAAKC,KAAL,CAAW,wBAAX,CAAX,CACAD,CAAI,CAACzB,EAAL,CAAQ,OAAR,CAAiB,KAAK2B,YAAL,CAAkBzB,IAAlB,CAAuB,IAAvB,CAAjB,EACA,GAAI0B,CAAAA,CAAM,CAAG,KAAKF,KAAL,CAAW,0BAAX,CAAb,CACAE,CAAM,CAAC5B,EAAP,CAAU,OAAV,CAAmB,KAAK6B,aAAL,CAAmB3B,IAAnB,CAAwB,IAAxB,CAAnB,CACH,CALD,CAaAJ,CAAW,CAACK,SAAZ,CAAsB0B,aAAtB,CAAsC,SAASxB,CAAT,CAAY,CAC9CA,CAAC,CAACO,cAAF,GACA,KAAKR,SAAL,CAAe0B,KAAf,EACH,CAHD,CAWAhC,CAAW,CAACK,SAAZ,CAAsBuB,KAAtB,CAA8B,SAAS3B,CAAT,CAAmB,CAC7C,MAAOR,CAAAA,CAAC,CAAC,4CAAD,CAAD,CAA8CwC,IAA9C,CAAmDhC,CAAnD,CACV,CAFD,CAUAD,CAAW,CAACK,SAAZ,CAAsBwB,YAAtB,CAAqC,SAAStB,CAAT,CAAY,CAC7C,GAAIC,CAAAA,CAAc,CAAG,GAAIT,CAAAA,CAAzB,CACAQ,CAAC,CAACO,cAAF,GAF6C,GAIzCoB,CAAAA,CAAQ,CAAG,KAAKN,KAAL,CAAW,gDAAX,EAA2DO,GAA3D,EAJ8B,CAKzCC,CAAQ,CAAG,KAAKR,KAAL,CAAW,0BAAX,EAAqCO,GAArC,EAL8B,CAQ7CtC,CAAI,CAACwC,IAAL,CAAU,CACN,CAACC,UAAU,CAAE,mDAAb,CACEC,IAAI,CAAE,CAAC9B,QAAQ,CAAE2B,CAAX,CAAqBlB,QAAQ,CAJ1B,CAACC,sBAAsB,CAAEe,CAAzB,CAIH,CADR,CADM,CAAV,EAGG,CAHH,EAICd,IAJD,CAIM,UAAW,CACb,MAAO,MAAKoB,6BAAL,EACV,CAFK,CAEJpC,IAFI,CAEC,IAFD,CAJN,EAOCgB,IAPD,CAOMZ,CAAc,CAACgB,OAPrB,EAQCC,KARD,CAQO/B,CAAY,CAACgC,SARpB,CAUH,CAlBD,CA0BA1B,CAAW,CAACK,SAAZ,CAAsBmC,6BAAtB,CAAsD,UAAW,IACzDJ,CAAAA,CAAQ,CAAG,KAAKR,KAAL,CAAW,0BAAX,EAAqCO,GAArC,EAD8C,CAEzD3B,CAAc,CAAG,GAAIT,CAAAA,CAFoC,CAI7DF,CAAI,CAACwC,IAAL,CAAU,CACN,CAACC,UAAU,CAAE,2CAAb,CACEC,IAAI,CAAE,CAAC9B,QAAQ,CAAE2B,CAAX,CAAqBK,QAAQ,CAAE,CAA/B,CADR,CADM,CAAV,EAGG,CAHH,EAICrB,IAJD,CAIM,SAASsB,CAAT,CAAkB,CACpB,MAAO5C,CAAAA,CAAS,CAACmB,MAAV,CAAiB,kCAAjB,CAAqDyB,CAArD,CACV,CAND,EAOCtB,IAPD,CAOM,SAASuB,CAAT,CAAeC,CAAf,CAAmB,CACrB9C,CAAS,CAAC+C,WAAV,CAAsBpD,CAAC,CAAC,0CAAD,CAAvB,CAAmEkD,CAAnE,CAAyEC,CAAzE,EACA,KAAKtC,SAAL,CAAe0B,KAAf,EAGH,CALK,CAKJ5B,IALI,CAKC,IALD,CAPN,EAaCgB,IAbD,CAaMZ,CAAc,CAACgB,OAbrB,EAcCC,KAdD,CAcO/B,CAAY,CAACgC,SAdpB,CAeH,CAnBD,CAqBA,MAAsE1B,CAAAA,CACzE,CA9IK,CAAN","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 .\n\n/**\n * Change the course competency settings in a popup.\n *\n * @module tool_lp/configurecoursecompetencysettings\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/notification',\n 'tool_lp/dialogue',\n 'core/str',\n 'core/ajax',\n 'core/templates',\n 'core/pending'\n ],\n function($, notification, Dialogue, str, ajax, templates, Pending) {\n\n /**\n * Constructor\n *\n * @param {String} selector - selector for the links to open the dialogue.\n */\n var settingsMod = function(selector) {\n $(selector).on('click', this.configureSettings.bind(this));\n };\n\n /** @property {Dialogue} Reference to the dialogue that we opened. */\n settingsMod.prototype._dialogue = null;\n\n /**\n * Open the configure settings dialogue.\n *\n * @param {Event} e\n * @method configureSettings\n */\n settingsMod.prototype.configureSettings = function(e) {\n var pendingPromise = new Pending();\n var courseid = $(e.target).closest('a').data('courseid');\n var currentValue = $(e.target).closest('a').data('pushratingstouserplans');\n var context = {\n courseid: courseid,\n settings: {pushratingstouserplans: currentValue}\n };\n e.preventDefault();\n\n $.when(\n str.get_string('configurecoursecompetencysettings', 'tool_lp'),\n templates.render('tool_lp/course_competency_settings', context),\n )\n .then(function(title, templateResult) {\n this._dialogue = new Dialogue(\n title,\n templateResult[0],\n this.addListeners.bind(this)\n );\n\n return this._dialogue;\n }.bind(this))\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n };\n\n /**\n * Add the save listener to the form.\n *\n * @method addSaveListener\n */\n settingsMod.prototype.addListeners = function() {\n var save = this._find('[data-action=\"save\"]');\n save.on('click', this.saveSettings.bind(this));\n var cancel = this._find('[data-action=\"cancel\"]');\n cancel.on('click', this.cancelChanges.bind(this));\n };\n\n /**\n * Cancel the changes.\n *\n * @param {Event} e\n * @method cancelChanges\n */\n settingsMod.prototype.cancelChanges = function(e) {\n e.preventDefault();\n this._dialogue.close();\n };\n\n /**\n * Cancel the changes.\n *\n * @param {String} selector\n * @return {JQuery}\n */\n settingsMod.prototype._find = function(selector) {\n return $('[data-region=\"coursecompetencysettings\"]').find(selector);\n };\n\n /**\n * Save the settings.\n *\n * @param {Event} e\n * @method saveSettings\n */\n settingsMod.prototype.saveSettings = function(e) {\n var pendingPromise = new Pending();\n e.preventDefault();\n\n var newValue = this._find('input[name=\"pushratingstouserplans\"]:checked').val();\n var courseId = this._find('input[name=\"courseid\"]').val();\n var settings = {pushratingstouserplans: newValue};\n\n ajax.call([\n {methodname: 'core_competency_update_course_competency_settings',\n args: {courseid: courseId, settings: settings}}\n ])[0]\n .then(function() {\n return this.refreshCourseCompetenciesPage();\n }.bind(this))\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n\n };\n\n /**\n * Refresh the course competencies page.\n *\n * @param {Event} e\n * @method saveSettings\n */\n settingsMod.prototype.refreshCourseCompetenciesPage = function() {\n var courseId = this._find('input[name=\"courseid\"]').val();\n var pendingPromise = new Pending();\n\n ajax.call([\n {methodname: 'tool_lp_data_for_course_competencies_page',\n args: {courseid: courseId, moduleid: 0}}\n ])[0]\n .then(function(context) {\n return templates.render('tool_lp/course_competencies_page', context);\n })\n .then(function(html, js) {\n templates.replaceNode($('[data-region=\"coursecompetenciespage\"]'), html, js);\n this._dialogue.close();\n\n return;\n }.bind(this))\n .then(pendingPromise.resolve)\n .catch(notification.exception);\n };\n\n return /** @alias module:tool_lp/configurecoursecompetencysettings */ settingsMod;\n});\n"],"file":"course_competency_settings.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/dialogue.min.js.map b/admin/tool/lp/amd/build/dialogue.min.js.map index 881dda158e6..410139a4b1d 100644 --- a/admin/tool/lp/amd/build/dialogue.min.js.map +++ b/admin/tool/lp/amd/build/dialogue.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/dialogue.js"],"names":["define","Y","dialogue","title","content","afterShow","afterHide","wide","M","util","js_pending","yuiDialogue","parent","use","width","core","headerContent","bodyContent","draggable","visible","center","modal","before","after","e","newVal","soon","centerDialogue","js_complete","show","prototype","close","hide","destroy","getContent","bodyNode","getDOMNode"],"mappings":"AAwBAA,OAAM,oBAAC,CAAC,UAAD,CAAD,CAAe,SAASC,CAAT,CAAY,CAY7B,GAAIC,CAAAA,CAAQ,CAAG,SAASC,CAAT,CAAgBC,CAAhB,CAAyBC,CAAzB,CAAoCC,CAApC,CAA+CC,CAA/C,CAAqD,CAChEC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,2BAAlB,EAEA,KAAKC,WAAL,CAAmB,IAAnB,CACA,GAAIC,CAAAA,CAAM,CAAG,IAAb,CAGA,GAAmB,WAAf,QAAOL,CAAAA,CAAX,CAAgC,CAC5BA,CAAI,GACP,CAEDN,CAAC,CAACY,GAAF,CAAM,0BAAN,CAAkC,QAAlC,CAA4C,UAAW,CACnD,GAAIC,CAAAA,CAAK,CAAG,OAAZ,CACA,GAAIP,CAAJ,CAAU,CACNO,CAAK,CAAG,OACX,CAEDF,CAAM,CAACD,WAAP,CAAqB,GAAIH,CAAAA,CAAC,CAACO,IAAF,CAAOb,QAAX,CAAoB,CACrCc,aAAa,CAAEb,CADsB,CAErCc,WAAW,CAAEb,CAFwB,CAGrCc,SAAS,GAH4B,CAIrCC,OAAO,GAJ8B,CAKrCC,MAAM,GAL+B,CAMrCC,KAAK,GANgC,CAOrCP,KAAK,CAAEA,CAP8B,CAApB,CAArB,CAUAF,CAAM,CAACD,WAAP,CAAmBW,MAAnB,CAA0B,eAA1B,CAA2C,UAAW,CAClDd,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,uCAAlB,CACH,CAFD,EAIAE,CAAM,CAACD,WAAP,CAAmBY,KAAnB,CAAyB,eAAzB,CAA0C,SAASC,CAAT,CAAY,CAClD,GAAIA,CAAC,CAACC,MAAN,CAAc,CAGV,GAA0B,WAArB,QAAOpB,CAAAA,CAAZ,CAAwC,CACpCJ,CAAC,CAACyB,IAAF,CAAO,UAAW,CACdrB,CAAS,CAACO,CAAD,CAAT,CACAA,CAAM,CAACD,WAAP,CAAmBgB,cAAnB,GACAnB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CAJD,CAKH,CAND,IAMO,CACHpB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CACJ,CAZD,IAYO,CACH,GAA0B,WAArB,QAAOtB,CAAAA,CAAZ,CAAwC,CACpCL,CAAC,CAACyB,IAAF,CAAO,UAAW,CACdpB,CAAS,CAACM,CAAD,CAAT,CACAJ,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CAHD,CAIH,CALD,IAKO,CACHpB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CACJ,CACJ,CAvBD,EAyBAhB,CAAM,CAACD,WAAP,CAAmBkB,IAAnB,GACArB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,2BAAnB,CACH,CA/CD,CAgDH,CA3DD,CAgEA1B,CAAQ,CAAC4B,SAAT,CAAmBC,KAAnB,CAA2B,UAAW,CAClC,KAAKpB,WAAL,CAAiBqB,IAAjB,GACA,KAAKrB,WAAL,CAAiBsB,OAAjB,EACH,CAHD,CASA/B,CAAQ,CAAC4B,SAAT,CAAmBI,UAAnB,CAAgC,UAAW,CACvC,MAAO,MAAKvB,WAAL,CAAiBwB,QAAjB,CAA0BC,UAA1B,EACV,CAFD,CAIA,MAA6ClC,CAAAA,CAChD,CA1FK,CAAN","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 .\n\n/**\n * Wrapper for the YUI M.core.notification class. Allows us to\n * use the YUI version in AMD code until it is replaced.\n *\n * @module tool_lp/dialogue\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/yui'], function(Y) {\n\n // Private variables and functions.\n /**\n * Constructor\n *\n * @param {String} title Title for the window.\n * @param {String} content The content for the window.\n * @param {function} afterShow Callback executed after the window is opened.\n * @param {function} afterHide Callback executed after the window is closed.\n * @param {Boolean} wide Specify we want an extra wide dialogue (the size is standard, but wider than the default).\n */\n var dialogue = function(title, content, afterShow, afterHide, wide) {\n M.util.js_pending('tool_lp/dialogue:dialogue');\n\n this.yuiDialogue = null;\n var parent = this;\n\n // Default for wide is false.\n if (typeof wide == 'undefined') {\n wide = false;\n }\n\n Y.use('moodle-core-notification', 'timers', function() {\n var width = '480px';\n if (wide) {\n width = '800px';\n }\n\n parent.yuiDialogue = new M.core.dialogue({\n headerContent: title,\n bodyContent: content,\n draggable: true,\n visible: false,\n center: true,\n modal: true,\n width: width\n });\n\n parent.yuiDialogue.before('visibleChange', function() {\n M.util.js_pending('tool_lp/dialogue:before:visibleChange');\n });\n\n parent.yuiDialogue.after('visibleChange', function(e) {\n if (e.newVal) {\n // Delay the callback call to the next tick, otherwise it can happen that it is\n // executed before the dialogue constructor returns.\n if ((typeof afterShow !== 'undefined')) {\n Y.soon(function() {\n afterShow(parent);\n parent.yuiDialogue.centerDialogue();\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n });\n } else {\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n }\n } else {\n if ((typeof afterHide !== 'undefined')) {\n Y.soon(function() {\n afterHide(parent);\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n });\n } else {\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n }\n }\n });\n\n parent.yuiDialogue.show();\n M.util.js_complete('tool_lp/dialogue:dialogue');\n });\n };\n\n /**\n * Close this window.\n */\n dialogue.prototype.close = function() {\n this.yuiDialogue.hide();\n this.yuiDialogue.destroy();\n };\n\n /**\n * Get content.\n * @return {node}\n */\n dialogue.prototype.getContent = function() {\n return this.yuiDialogue.bodyNode.getDOMNode();\n };\n\n return /** @alias module:tool_lp/dialogue */ dialogue;\n});\n"],"file":"dialogue.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/dialogue.js"],"names":["define","Y","dialogue","title","content","afterShow","afterHide","wide","M","util","js_pending","yuiDialogue","parent","use","width","core","headerContent","bodyContent","draggable","visible","center","modal","before","after","e","newVal","soon","centerDialogue","js_complete","show","prototype","close","hide","destroy","getContent","bodyNode","getDOMNode"],"mappings":"AAuBAA,OAAM,oBAAC,CAAC,UAAD,CAAD,CAAe,SAASC,CAAT,CAAY,CAY7B,GAAIC,CAAAA,CAAQ,CAAG,SAASC,CAAT,CAAgBC,CAAhB,CAAyBC,CAAzB,CAAoCC,CAApC,CAA+CC,CAA/C,CAAqD,CAChEC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,2BAAlB,EAEA,KAAKC,WAAL,CAAmB,IAAnB,CACA,GAAIC,CAAAA,CAAM,CAAG,IAAb,CAGA,GAAmB,WAAf,QAAOL,CAAAA,CAAX,CAAgC,CAC5BA,CAAI,GACP,CAEDN,CAAC,CAACY,GAAF,CAAM,0BAAN,CAAkC,QAAlC,CAA4C,UAAW,CACnD,GAAIC,CAAAA,CAAK,CAAG,OAAZ,CACA,GAAIP,CAAJ,CAAU,CACNO,CAAK,CAAG,OACX,CAEDF,CAAM,CAACD,WAAP,CAAqB,GAAIH,CAAAA,CAAC,CAACO,IAAF,CAAOb,QAAX,CAAoB,CACrCc,aAAa,CAAEb,CADsB,CAErCc,WAAW,CAAEb,CAFwB,CAGrCc,SAAS,GAH4B,CAIrCC,OAAO,GAJ8B,CAKrCC,MAAM,GAL+B,CAMrCC,KAAK,GANgC,CAOrCP,KAAK,CAAEA,CAP8B,CAApB,CAArB,CAUAF,CAAM,CAACD,WAAP,CAAmBW,MAAnB,CAA0B,eAA1B,CAA2C,UAAW,CAClDd,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,uCAAlB,CACH,CAFD,EAIAE,CAAM,CAACD,WAAP,CAAmBY,KAAnB,CAAyB,eAAzB,CAA0C,SAASC,CAAT,CAAY,CAClD,GAAIA,CAAC,CAACC,MAAN,CAAc,CAGV,GAA0B,WAArB,QAAOpB,CAAAA,CAAZ,CAAwC,CACpCJ,CAAC,CAACyB,IAAF,CAAO,UAAW,CACdrB,CAAS,CAACO,CAAD,CAAT,CACAA,CAAM,CAACD,WAAP,CAAmBgB,cAAnB,GACAnB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CAJD,CAKH,CAND,IAMO,CACHpB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CACJ,CAZD,IAYO,CACH,GAA0B,WAArB,QAAOtB,CAAAA,CAAZ,CAAwC,CACpCL,CAAC,CAACyB,IAAF,CAAO,UAAW,CACdpB,CAAS,CAACM,CAAD,CAAT,CACAJ,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CAHD,CAIH,CALD,IAKO,CACHpB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,uCAAnB,CACH,CACJ,CACJ,CAvBD,EAyBAhB,CAAM,CAACD,WAAP,CAAmBkB,IAAnB,GACArB,CAAC,CAACC,IAAF,CAAOmB,WAAP,CAAmB,2BAAnB,CACH,CA/CD,CAgDH,CA3DD,CAgEA1B,CAAQ,CAAC4B,SAAT,CAAmBC,KAAnB,CAA2B,UAAW,CAClC,KAAKpB,WAAL,CAAiBqB,IAAjB,GACA,KAAKrB,WAAL,CAAiBsB,OAAjB,EACH,CAHD,CASA/B,CAAQ,CAAC4B,SAAT,CAAmBI,UAAnB,CAAgC,UAAW,CACvC,MAAO,MAAKvB,WAAL,CAAiBwB,QAAjB,CAA0BC,UAA1B,EACV,CAFD,CAIA,MAA6ClC,CAAAA,CAChD,CA1FK,CAAN","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 .\n\n/**\n * Wrapper for the YUI M.core.notification class. Allows us to\n * use the YUI version in AMD code until it is replaced.\n *\n * @module tool_lp/dialogue\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/yui'], function(Y) {\n\n // Private variables and functions.\n /**\n * Constructor\n *\n * @param {String} title Title for the window.\n * @param {String} content The content for the window.\n * @param {function} afterShow Callback executed after the window is opened.\n * @param {function} afterHide Callback executed after the window is closed.\n * @param {Boolean} wide Specify we want an extra wide dialogue (the size is standard, but wider than the default).\n */\n var dialogue = function(title, content, afterShow, afterHide, wide) {\n M.util.js_pending('tool_lp/dialogue:dialogue');\n\n this.yuiDialogue = null;\n var parent = this;\n\n // Default for wide is false.\n if (typeof wide == 'undefined') {\n wide = false;\n }\n\n Y.use('moodle-core-notification', 'timers', function() {\n var width = '480px';\n if (wide) {\n width = '800px';\n }\n\n parent.yuiDialogue = new M.core.dialogue({\n headerContent: title,\n bodyContent: content,\n draggable: true,\n visible: false,\n center: true,\n modal: true,\n width: width\n });\n\n parent.yuiDialogue.before('visibleChange', function() {\n M.util.js_pending('tool_lp/dialogue:before:visibleChange');\n });\n\n parent.yuiDialogue.after('visibleChange', function(e) {\n if (e.newVal) {\n // Delay the callback call to the next tick, otherwise it can happen that it is\n // executed before the dialogue constructor returns.\n if ((typeof afterShow !== 'undefined')) {\n Y.soon(function() {\n afterShow(parent);\n parent.yuiDialogue.centerDialogue();\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n });\n } else {\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n }\n } else {\n if ((typeof afterHide !== 'undefined')) {\n Y.soon(function() {\n afterHide(parent);\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n });\n } else {\n M.util.js_complete('tool_lp/dialogue:before:visibleChange');\n }\n }\n });\n\n parent.yuiDialogue.show();\n M.util.js_complete('tool_lp/dialogue:dialogue');\n });\n };\n\n /**\n * Close this window.\n */\n dialogue.prototype.close = function() {\n this.yuiDialogue.hide();\n this.yuiDialogue.destroy();\n };\n\n /**\n * Get content.\n * @return {node}\n */\n dialogue.prototype.getContent = function() {\n return this.yuiDialogue.bodyNode.getDOMNode();\n };\n\n return /** @alias module:tool_lp/dialogue */ dialogue;\n});\n"],"file":"dialogue.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/dragdrop-reorder.min.js.map b/admin/tool/lp/amd/build/dragdrop-reorder.min.js.map index dd6b103aa80..ebcf3d87791 100644 --- a/admin/tool/lp/amd/build/dragdrop-reorder.min.js.map +++ b/admin/tool/lp/amd/build/dragdrop-reorder.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/dragdrop-reorder.js"],"names":["define","str","Y","dragDropInstance","proxyCallback","e","dragNode","drag","get","dropNode","drop","callback","getDOMNode","dragdrop","group","dragHandleText","sameNodeText","parentNodeText","sameNodeClass","parentNodeClass","dragHandleInsertClass","get_strings","key","component","done","use","destroy","M","tool_lp","dragdrop_reorder","bind"],"mappings":"AAuBAA,OAAM,4BAAC,CAAC,UAAD,CAAa,UAAb,CAAD,CAA2B,SAASC,CAAT,CAAcC,CAAd,CAAiB,IAQ1CC,CAAAA,CAAgB,CAAG,IARuB,CAe1CC,CAAa,CAAG,SAASC,CAAT,CAAY,IACxBC,CAAAA,CAAQ,CAAGD,CAAC,CAACE,IAAF,CAAOC,GAAP,CAAW,MAAX,CADa,CAExBC,CAAQ,CAAGJ,CAAC,CAACK,IAAF,CAAOF,GAAP,CAAW,MAAX,CAFa,CAG5B,KAAKG,QAAL,CAAcL,CAAQ,CAACM,UAAT,EAAd,CAAqCH,CAAQ,CAACG,UAAT,EAArC,CACH,CAnB6C,CAqB9C,MAAqD,CAcjDC,QAAQ,CAAE,kBAASC,CAAT,CACSC,CADT,CAESC,CAFT,CAGSC,CAHT,CAISC,CAJT,CAKSC,CALT,CAMSC,CANT,CAOST,CAPT,CAOmB,CAGzBV,CAAG,CAACoB,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,qBAAN,CAA6BC,SAAS,CAAE,QAAxC,CADY,CAEZ,CAACD,GAAG,CAAE,aAAN,CAAqBC,SAAS,CAAE,QAAhC,CAFY,CAGZ,CAACD,GAAG,CAAE,WAAN,CAAmBC,SAAS,CAAE,QAA9B,CAHY,CAAhB,EAIGC,IAJH,CAIQ,UAAW,CACftB,CAAC,CAACuB,GAAF,CAAM,iCAAN,CAAyC,UAAW,CAKhD,GAAItB,CAAJ,CAAsB,CAClBA,CAAgB,CAACuB,OAAjB,EACH,CACDvB,CAAgB,CAAGwB,CAAC,CAACC,OAAF,CAAUC,gBAAV,CAA2B,CAC1Cf,KAAK,CAAEA,CADmC,CAE1CC,cAAc,CAAEA,CAF0B,CAG1CC,YAAY,CAAEA,CAH4B,CAI1CC,cAAc,CAAEA,CAJ0B,CAK1CC,aAAa,CAAEA,CAL2B,CAM1CC,eAAe,CAAEA,CANyB,CAO1CC,qBAAqB,CAAEA,CAPmB,CAQ1CT,QAAQ,CAAET,CAAC,CAAC4B,IAAF,CAAO1B,CAAP,CAdA,CACVO,QAAQ,CAAEA,CADA,CAcA,CARgC,CAA3B,CAUtB,CAlBD,CAmBH,CAxBD,CAyBH,CAjDgD,CAoDxD,CAzEK,CAAN","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 .\n\n/**\n * Drag and drop reorder via HTML5.\n *\n * @module tool_lp/dragdrop-reorder\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/str', 'core/yui'], function(str, Y) {\n // Private variables and functions.\n\n /**\n * Store the current instance of the core drag drop.\n *\n * @property dragDropInstance M.tool_lp.dragdrop_reorder\n */\n var dragDropInstance = null;\n\n /**\n * Translate the drophit event from YUI\n * into simple drag and drop nodes.\n * @param {Y.Event} e The yui drop event.\n */\n var proxyCallback = function(e) {\n var dragNode = e.drag.get('node');\n var dropNode = e.drop.get('node');\n this.callback(dragNode.getDOMNode(), dropNode.getDOMNode());\n };\n\n return /** @alias module:tool_lp/dragdrop-reorder */ {\n // Public variables and functions.\n /**\n * Create an instance of M.tool_lp.dragdrop\n *\n * @param {String} group Unique string to identify this interaction.\n * @param {String} dragHandleText Alt text for the drag handle.\n * @param {String} sameNodeText Used in keyboard drag drop for the list of items target.\n * @param {String} parentNodeText Used in keyboard drag drop for the parent target.\n * @param {String} sameNodeClass class used to find the each of the list of items.\n * @param {String} parentNodeClass class used to find the container for the list of items.\n * @param {String} dragHandleInsertClass class used to find the location to insert the drag handles.\n * @param {function} callback Drop hit handler.\n */\n dragdrop: function(group,\n dragHandleText,\n sameNodeText,\n parentNodeText,\n sameNodeClass,\n parentNodeClass,\n dragHandleInsertClass,\n callback) {\n // Here we are wrapping YUI. This allows us to start transitioning, but\n // wait for a good alternative without having inconsistent UIs.\n str.get_strings([\n {key: 'emptydragdropregion', component: 'moodle'},\n {key: 'movecontent', component: 'moodle'},\n {key: 'tocontent', component: 'moodle'},\n ]).done(function() {\n Y.use('moodle-tool_lp-dragdrop-reorder', function() {\n\n var context = {\n callback: callback\n };\n if (dragDropInstance) {\n dragDropInstance.destroy();\n }\n dragDropInstance = M.tool_lp.dragdrop_reorder({\n group: group,\n dragHandleText: dragHandleText,\n sameNodeText: sameNodeText,\n parentNodeText: parentNodeText,\n sameNodeClass: sameNodeClass,\n parentNodeClass: parentNodeClass,\n dragHandleInsertClass: dragHandleInsertClass,\n callback: Y.bind(proxyCallback, context)\n });\n });\n });\n }\n\n };\n});\n"],"file":"dragdrop-reorder.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/dragdrop-reorder.js"],"names":["define","str","Y","dragDropInstance","proxyCallback","e","dragNode","drag","get","dropNode","drop","callback","getDOMNode","dragdrop","group","dragHandleText","sameNodeText","parentNodeText","sameNodeClass","parentNodeClass","dragHandleInsertClass","get_strings","key","component","done","use","destroy","M","tool_lp","dragdrop_reorder","bind"],"mappings":"AAsBAA,OAAM,4BAAC,CAAC,UAAD,CAAa,UAAb,CAAD,CAA2B,SAASC,CAAT,CAAcC,CAAd,CAAiB,IAQ1CC,CAAAA,CAAgB,CAAG,IARuB,CAe1CC,CAAa,CAAG,SAASC,CAAT,CAAY,IACxBC,CAAAA,CAAQ,CAAGD,CAAC,CAACE,IAAF,CAAOC,GAAP,CAAW,MAAX,CADa,CAExBC,CAAQ,CAAGJ,CAAC,CAACK,IAAF,CAAOF,GAAP,CAAW,MAAX,CAFa,CAG5B,KAAKG,QAAL,CAAcL,CAAQ,CAACM,UAAT,EAAd,CAAqCH,CAAQ,CAACG,UAAT,EAArC,CACH,CAnB6C,CAqB9C,MAAqD,CAcjDC,QAAQ,CAAE,kBAASC,CAAT,CACSC,CADT,CAESC,CAFT,CAGSC,CAHT,CAISC,CAJT,CAKSC,CALT,CAMSC,CANT,CAOST,CAPT,CAOmB,CAGzBV,CAAG,CAACoB,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,qBAAN,CAA6BC,SAAS,CAAE,QAAxC,CADY,CAEZ,CAACD,GAAG,CAAE,aAAN,CAAqBC,SAAS,CAAE,QAAhC,CAFY,CAGZ,CAACD,GAAG,CAAE,WAAN,CAAmBC,SAAS,CAAE,QAA9B,CAHY,CAAhB,EAIGC,IAJH,CAIQ,UAAW,CACftB,CAAC,CAACuB,GAAF,CAAM,iCAAN,CAAyC,UAAW,CAKhD,GAAItB,CAAJ,CAAsB,CAClBA,CAAgB,CAACuB,OAAjB,EACH,CACDvB,CAAgB,CAAGwB,CAAC,CAACC,OAAF,CAAUC,gBAAV,CAA2B,CAC1Cf,KAAK,CAAEA,CADmC,CAE1CC,cAAc,CAAEA,CAF0B,CAG1CC,YAAY,CAAEA,CAH4B,CAI1CC,cAAc,CAAEA,CAJ0B,CAK1CC,aAAa,CAAEA,CAL2B,CAM1CC,eAAe,CAAEA,CANyB,CAO1CC,qBAAqB,CAAEA,CAPmB,CAQ1CT,QAAQ,CAAET,CAAC,CAAC4B,IAAF,CAAO1B,CAAP,CAdA,CACVO,QAAQ,CAAEA,CADA,CAcA,CARgC,CAA3B,CAUtB,CAlBD,CAmBH,CAxBD,CAyBH,CAjDgD,CAoDxD,CAzEK,CAAN","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 .\n\n/**\n * Drag and drop reorder via HTML5.\n *\n * @module tool_lp/dragdrop-reorder\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/str', 'core/yui'], function(str, Y) {\n // Private variables and functions.\n\n /**\n * Store the current instance of the core drag drop.\n *\n * @property dragDropInstance M.tool_lp.dragdrop_reorder\n */\n var dragDropInstance = null;\n\n /**\n * Translate the drophit event from YUI\n * into simple drag and drop nodes.\n * @param {Y.Event} e The yui drop event.\n */\n var proxyCallback = function(e) {\n var dragNode = e.drag.get('node');\n var dropNode = e.drop.get('node');\n this.callback(dragNode.getDOMNode(), dropNode.getDOMNode());\n };\n\n return /** @alias module:tool_lp/dragdrop-reorder */ {\n // Public variables and functions.\n /**\n * Create an instance of M.tool_lp.dragdrop\n *\n * @param {String} group Unique string to identify this interaction.\n * @param {String} dragHandleText Alt text for the drag handle.\n * @param {String} sameNodeText Used in keyboard drag drop for the list of items target.\n * @param {String} parentNodeText Used in keyboard drag drop for the parent target.\n * @param {String} sameNodeClass class used to find the each of the list of items.\n * @param {String} parentNodeClass class used to find the container for the list of items.\n * @param {String} dragHandleInsertClass class used to find the location to insert the drag handles.\n * @param {function} callback Drop hit handler.\n */\n dragdrop: function(group,\n dragHandleText,\n sameNodeText,\n parentNodeText,\n sameNodeClass,\n parentNodeClass,\n dragHandleInsertClass,\n callback) {\n // Here we are wrapping YUI. This allows us to start transitioning, but\n // wait for a good alternative without having inconsistent UIs.\n str.get_strings([\n {key: 'emptydragdropregion', component: 'moodle'},\n {key: 'movecontent', component: 'moodle'},\n {key: 'tocontent', component: 'moodle'},\n ]).done(function() {\n Y.use('moodle-tool_lp-dragdrop-reorder', function() {\n\n var context = {\n callback: callback\n };\n if (dragDropInstance) {\n dragDropInstance.destroy();\n }\n dragDropInstance = M.tool_lp.dragdrop_reorder({\n group: group,\n dragHandleText: dragHandleText,\n sameNodeText: sameNodeText,\n parentNodeText: parentNodeText,\n sameNodeClass: sameNodeClass,\n parentNodeClass: parentNodeClass,\n dragHandleInsertClass: dragHandleInsertClass,\n callback: Y.bind(proxyCallback, context)\n });\n });\n });\n }\n\n };\n});\n"],"file":"dragdrop-reorder.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/event_base.min.js.map b/admin/tool/lp/amd/build/event_base.min.js.map index 2ca46e091a7..d587f301884 100644 --- a/admin/tool/lp/amd/build/event_base.min.js.map +++ b/admin/tool/lp/amd/build/event_base.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/event_base.js"],"names":["define","$","Base","_eventNode","prototype","on","type","handler","_trigger","data","trigger"],"mappings":"AAuBAA,OAAM,sBAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAK3B,GAAIC,CAAAA,CAAI,CAAG,UAAW,CAClB,KAAKC,UAAL,CAAkBF,CAAC,CAAC,aAAD,CACtB,CAFD,CAKAC,CAAI,CAACE,SAAL,CAAeD,UAAf,CAA4B,IAA5B,CASAD,CAAI,CAACE,SAAL,CAAeC,EAAf,CAAoB,SAASC,CAAT,CAAeC,CAAf,CAAwB,CACxC,KAAKJ,UAAL,CAAgBE,EAAhB,CAAmBC,CAAnB,CAAyBC,CAAzB,CACH,CAFD,CAWAL,CAAI,CAACE,SAAL,CAAeI,QAAf,CAA0B,SAASF,CAAT,CAAeG,CAAf,CAAqB,CAC3C,KAAKN,UAAL,CAAgBO,OAAhB,CAAwBJ,CAAxB,CAA8B,CAACG,CAAD,CAA9B,CACH,CAFD,CAIA,MAA+CP,CAAAA,CAClD,CAnCK,CAAN","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 .\n\n/**\n * Event base javascript module.\n *\n * @module tool_lp/event_base\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'], function($) {\n\n /**\n * Base class.\n */\n var Base = function() {\n this._eventNode = $('
');\n };\n\n /** @type {Node} The node we attach the events to. */\n Base.prototype._eventNode = null;\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n Base.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _trigger\n */\n Base.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n return /** @alias module:tool_lp/event_base */ Base;\n});\n"],"file":"event_base.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/event_base.js"],"names":["define","$","Base","_eventNode","prototype","on","type","handler","_trigger","data","trigger"],"mappings":"AAsBAA,OAAM,sBAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAK3B,GAAIC,CAAAA,CAAI,CAAG,UAAW,CAClB,KAAKC,UAAL,CAAkBF,CAAC,CAAC,aAAD,CACtB,CAFD,CAKAC,CAAI,CAACE,SAAL,CAAeD,UAAf,CAA4B,IAA5B,CASAD,CAAI,CAACE,SAAL,CAAeC,EAAf,CAAoB,SAASC,CAAT,CAAeC,CAAf,CAAwB,CACxC,KAAKJ,UAAL,CAAgBE,EAAhB,CAAmBC,CAAnB,CAAyBC,CAAzB,CACH,CAFD,CAWAL,CAAI,CAACE,SAAL,CAAeI,QAAf,CAA0B,SAASF,CAAT,CAAeG,CAAf,CAAqB,CAC3C,KAAKN,UAAL,CAAgBO,OAAhB,CAAwBJ,CAAxB,CAA8B,CAACG,CAAD,CAA9B,CACH,CAFD,CAIA,MAA+CP,CAAAA,CAClD,CAnCK,CAAN","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 .\n\n/**\n * Event base javascript module.\n *\n * @module tool_lp/event_base\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'], function($) {\n\n /**\n * Base class.\n */\n var Base = function() {\n this._eventNode = $('
');\n };\n\n /** @property {Node} The node we attach the events to. */\n Base.prototype._eventNode = null;\n\n /**\n * Register an event listener.\n *\n * @param {String} type The event type.\n * @param {Function} handler The event listener.\n * @method on\n */\n Base.prototype.on = function(type, handler) {\n this._eventNode.on(type, handler);\n };\n\n /**\n * Trigger an event.\n *\n * @param {String} type The type of event.\n * @param {Object} data The data to pass to the listeners.\n * @method _trigger\n */\n Base.prototype._trigger = function(type, data) {\n this._eventNode.trigger(type, [data]);\n };\n\n return /** @alias module:tool_lp/event_base */ Base;\n});\n"],"file":"event_base.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/evidence_delete.min.js.map b/admin/tool/lp/amd/build/evidence_delete.min.js.map index 4a11ed20a94..9462d66fa0c 100644 --- a/admin/tool/lp/amd/build/evidence_delete.min.js.map +++ b/admin/tool/lp/amd/build/evidence_delete.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/evidence_delete.js"],"names":["define","$","Notification","Ajax","Str","Log","selectors","register","triggerSelector","containerSelector","delegate","e","parent","currentTarget","parents","length","error","evidenceId","data","preventDefault","stopPropagation","get_strings","key","component","done","strings","confirm","promise","call","methodname","args","id","then","remove","fail","exception"],"mappings":"AAuBAA,OAAM,2BAAC,CAAC,QAAD,CACC,mBADD,CAEC,WAFD,CAGC,UAHD,CAIC,UAJD,CAAD,CAKE,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAgCC,CAAhC,CAAqCC,CAArC,CAA0C,IAE1CC,CAAAA,CAAS,CAAG,EAF8B,CA4D9C,MAAoD,CAShDC,QAAQ,CA3DG,QAAXA,CAAAA,QAAW,CAASC,CAAT,CAA0BC,CAA1B,CAA6C,CACxD,GAA0C,WAAtC,QAAOH,CAAAA,CAAS,CAACE,CAAD,CAApB,CAAuD,CACnD,MACH,CAEDF,CAAS,CAACE,CAAD,CAAT,CAA6BP,CAAC,CAAC,MAAD,CAAD,CAAUS,QAAV,CAAmBF,CAAnB,CAAoC,OAApC,CAA6C,SAASG,CAAT,CAAY,CAClF,GAAIC,CAAAA,CAAM,CAAGX,CAAC,CAACU,CAAC,CAACE,aAAH,CAAD,CAAmBC,OAAnB,CAA2BL,CAA3B,CAAb,CACA,GAAI,CAACG,CAAM,CAACG,MAAR,EAAkC,CAAhB,CAAAH,CAAM,CAACG,MAA7B,CAAyC,CACrCV,CAAG,CAACW,KAAJ,CAAU,iDAAV,EACA,MACH,CACD,GAAIC,CAAAA,CAAU,CAAGL,CAAM,CAACM,IAAP,CAAY,IAAZ,CAAjB,CACA,GAAI,CAACD,CAAL,CAAiB,CACbZ,CAAG,CAACW,KAAJ,CAAU,4BAAV,EACA,MACH,CAEDL,CAAC,CAACQ,cAAF,GACAR,CAAC,CAACS,eAAF,GAEAhB,CAAG,CAACiB,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,YAAN,CAAoBC,SAAS,CAAE,QAA/B,CAFY,CAGZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGC,IALH,CAKQ,SAASC,CAAT,CAAkB,CACtBvB,CAAY,CAACwB,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACP,GAAIE,CAAAA,CAAO,CAAGxB,CAAI,CAACyB,IAAL,CAAU,CAAC,CACrBC,UAAU,CAAE,iCADS,CAErBC,IAAI,CAAE,CACFC,EAAE,CAAEd,CADF,CAFe,CAAD,CAAV,CAAd,CAMAU,CAAO,CAAC,CAAD,CAAP,CAAWK,IAAX,CAAgB,UAAW,CACvBpB,CAAM,CAACqB,MAAP,EAEH,CAHD,EAGGC,IAHH,CAGQhC,CAAY,CAACiC,SAHrB,CAIH,CAhBL,CAkBH,CAxBD,EAwBGD,IAxBH,CAwBQhC,CAAY,CAACiC,SAxBrB,CA2BH,CA1C4B,CA2ChC,CAEmD,CAYvD,CA7EK,CAAN","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 .\n\n/**\n * Evidence delete.\n *\n * @package tool_lp\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/str',\n 'core/log'],\n function($, Notification, Ajax, Str, Log) {\n\n var selectors = {};\n\n /**\n * Register an event listener.\n *\n * @param {String} triggerSelector The node on which the click will happen.\n * @param {String} containerSelector The parent node that will be removed and contains the evidence ID.\n */\n var register = function(triggerSelector, containerSelector) {\n if (typeof selectors[triggerSelector] !== 'undefined') {\n return;\n }\n\n selectors[triggerSelector] = $('body').delegate(triggerSelector, 'click', function(e) {\n var parent = $(e.currentTarget).parents(containerSelector);\n if (!parent.length || parent.length > 1) {\n Log.error('None or too many evidence container were found.');\n return;\n }\n var evidenceId = parent.data('id');\n if (!evidenceId) {\n Log.error('Evidence ID was not found.');\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n Str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'areyousure', component: 'moodle'},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n Notification.confirm(\n strings[0], // Confirm.\n strings[1], // Are you sure?\n strings[2], // Delete.\n strings[3], // Cancel.\n function() {\n var promise = Ajax.call([{\n methodname: 'core_competency_delete_evidence',\n args: {\n id: evidenceId\n }\n }]);\n promise[0].then(function() {\n parent.remove();\n return;\n }).fail(Notification.exception);\n }\n );\n }).fail(Notification.exception);\n\n\n });\n };\n\n return /** @alias module:tool_lp/evidence_delete */ {\n\n /**\n * Register an event listener.\n *\n * @param {String} triggerSelector The node on which the click will happen.\n * @param {String} containerSelector The parent node that will be removed and contains the evidence ID.\n * @return {Void}\n */\n register: register\n };\n\n});\n"],"file":"evidence_delete.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/evidence_delete.js"],"names":["define","$","Notification","Ajax","Str","Log","selectors","register","triggerSelector","containerSelector","delegate","e","parent","currentTarget","parents","length","error","evidenceId","data","preventDefault","stopPropagation","get_strings","key","component","done","strings","confirm","promise","call","methodname","args","id","then","remove","fail","exception"],"mappings":"AAsBAA,OAAM,2BAAC,CAAC,QAAD,CACC,mBADD,CAEC,WAFD,CAGC,UAHD,CAIC,UAJD,CAAD,CAKE,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAgCC,CAAhC,CAAqCC,CAArC,CAA0C,IAE1CC,CAAAA,CAAS,CAAG,EAF8B,CA4D9C,MAAoD,CAShDC,QAAQ,CA3DG,QAAXA,CAAAA,QAAW,CAASC,CAAT,CAA0BC,CAA1B,CAA6C,CACxD,GAA0C,WAAtC,QAAOH,CAAAA,CAAS,CAACE,CAAD,CAApB,CAAuD,CACnD,MACH,CAEDF,CAAS,CAACE,CAAD,CAAT,CAA6BP,CAAC,CAAC,MAAD,CAAD,CAAUS,QAAV,CAAmBF,CAAnB,CAAoC,OAApC,CAA6C,SAASG,CAAT,CAAY,CAClF,GAAIC,CAAAA,CAAM,CAAGX,CAAC,CAACU,CAAC,CAACE,aAAH,CAAD,CAAmBC,OAAnB,CAA2BL,CAA3B,CAAb,CACA,GAAI,CAACG,CAAM,CAACG,MAAR,EAAkC,CAAhB,CAAAH,CAAM,CAACG,MAA7B,CAAyC,CACrCV,CAAG,CAACW,KAAJ,CAAU,iDAAV,EACA,MACH,CACD,GAAIC,CAAAA,CAAU,CAAGL,CAAM,CAACM,IAAP,CAAY,IAAZ,CAAjB,CACA,GAAI,CAACD,CAAL,CAAiB,CACbZ,CAAG,CAACW,KAAJ,CAAU,4BAAV,EACA,MACH,CAEDL,CAAC,CAACQ,cAAF,GACAR,CAAC,CAACS,eAAF,GAEAhB,CAAG,CAACiB,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,YAAN,CAAoBC,SAAS,CAAE,QAA/B,CAFY,CAGZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGC,IALH,CAKQ,SAASC,CAAT,CAAkB,CACtBvB,CAAY,CAACwB,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACP,GAAIE,CAAAA,CAAO,CAAGxB,CAAI,CAACyB,IAAL,CAAU,CAAC,CACrBC,UAAU,CAAE,iCADS,CAErBC,IAAI,CAAE,CACFC,EAAE,CAAEd,CADF,CAFe,CAAD,CAAV,CAAd,CAMAU,CAAO,CAAC,CAAD,CAAP,CAAWK,IAAX,CAAgB,UAAW,CACvBpB,CAAM,CAACqB,MAAP,EAEH,CAHD,EAGGC,IAHH,CAGQhC,CAAY,CAACiC,SAHrB,CAIH,CAhBL,CAkBH,CAxBD,EAwBGD,IAxBH,CAwBQhC,CAAY,CAACiC,SAxBrB,CA2BH,CA1C4B,CA2ChC,CAEmD,CAYvD,CA7EK,CAAN","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 .\n\n/**\n * Evidence delete.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/str',\n 'core/log'],\n function($, Notification, Ajax, Str, Log) {\n\n var selectors = {};\n\n /**\n * Register an event listener.\n *\n * @param {String} triggerSelector The node on which the click will happen.\n * @param {String} containerSelector The parent node that will be removed and contains the evidence ID.\n */\n var register = function(triggerSelector, containerSelector) {\n if (typeof selectors[triggerSelector] !== 'undefined') {\n return;\n }\n\n selectors[triggerSelector] = $('body').delegate(triggerSelector, 'click', function(e) {\n var parent = $(e.currentTarget).parents(containerSelector);\n if (!parent.length || parent.length > 1) {\n Log.error('None or too many evidence container were found.');\n return;\n }\n var evidenceId = parent.data('id');\n if (!evidenceId) {\n Log.error('Evidence ID was not found.');\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n Str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'areyousure', component: 'moodle'},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n Notification.confirm(\n strings[0], // Confirm.\n strings[1], // Are you sure?\n strings[2], // Delete.\n strings[3], // Cancel.\n function() {\n var promise = Ajax.call([{\n methodname: 'core_competency_delete_evidence',\n args: {\n id: evidenceId\n }\n }]);\n promise[0].then(function() {\n parent.remove();\n return;\n }).fail(Notification.exception);\n }\n );\n }).fail(Notification.exception);\n\n\n });\n };\n\n return /** @alias module:tool_lp/evidence_delete */ {\n\n /**\n * Register an event listener.\n *\n * @param {String} triggerSelector The node on which the click will happen.\n * @param {String} containerSelector The parent node that will be removed and contains the evidence ID.\n * @return {Void}\n */\n register: register\n };\n\n});\n"],"file":"evidence_delete.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/form-cohort-selector.min.js.map b/admin/tool/lp/amd/build/form-cohort-selector.min.js.map index a2807432a0c..9a9b295409d 100644 --- a/admin/tool/lp/amd/build/form-cohort-selector.min.js.map +++ b/admin/tool/lp/amd/build/form-cohort-selector.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form-cohort-selector.js"],"names":["define","$","Ajax","Templates","processResults","selector","results","cohorts","each","index","cohort","push","value","id","label","_label","transport","query","success","failure","promise","contextid","parseInt","data","includes","call","methodname","args","context","then","promises","i","render","when","apply","arguments","catch"],"mappings":"AAyBAA,OAAM,gCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,gBAAxB,CAAD,CAA4C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA6B,CAE3E,MAAyD,CAErDC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAO,CAAG,EAAd,CACAN,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAwB,CACpCH,CAAO,CAACI,IAAR,CAAa,CACTC,KAAK,CAAEF,CAAM,CAACG,EADL,CAETC,KAAK,CAAEJ,CAAM,CAACK,MAFL,CAAb,CAIH,CALD,EAMA,MAAOR,CAAAA,CACV,CAXoD,CAarDS,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,CACnD,GAAIC,CAAAA,CAAJ,CACIC,CAAS,CAAGC,QAAQ,CAACrB,CAAC,CAACI,CAAD,CAAD,CAAYkB,IAAZ,CAAiB,WAAjB,CAAD,CAAgC,EAAhC,CADxB,CAEIC,CAAQ,CAAGvB,CAAC,CAACI,CAAD,CAAD,CAAYkB,IAAZ,CAAiB,UAAjB,CAFf,CAIAH,CAAO,CAAGlB,CAAI,CAACuB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,wBADK,CAEjBC,IAAI,CAAE,CACFV,KAAK,CAAEA,CADL,CAEFW,OAAO,CAAE,CAACP,SAAS,CAAEA,CAAZ,CAFP,CAGFG,QAAQ,CAAEA,CAHR,CAFW,CAAD,CAAV,CAAV,CAQAJ,CAAO,CAAC,CAAD,CAAP,CAAWS,IAAX,CAAgB,SAASvB,CAAT,CAAkB,CAC9B,GAAIwB,CAAAA,CAAQ,CAAG,EAAf,CACIC,CAAC,CAAG,CADR,CAIA9B,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,OAAf,CAAwB,SAASE,CAAT,CAAgBC,CAAhB,CAAwB,CAC5CoB,CAAQ,CAACnB,IAAT,CAAcR,CAAS,CAAC6B,MAAV,CAAiB,yCAAjB,CAA4DtB,CAA5D,CAAd,CACH,CAFD,EAKA,MAAOT,CAAAA,CAAC,CAACgC,IAAF,CAAOC,KAAP,CAAajC,CAAC,CAACgC,IAAf,CAAqBH,CAArB,EAA+BD,IAA/B,CAAoC,UAAW,CAClD,GAAIF,CAAAA,CAAI,CAAGQ,SAAX,CACAlC,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,OAAf,CAAwB,SAASE,CAAT,CAAgBC,CAAhB,CAAwB,CAC5CA,CAAM,CAACK,MAAP,CAAgBY,CAAI,CAACI,CAAD,CAApB,CACAA,CAAC,EACJ,CAHD,EAIAb,CAAO,CAACZ,CAAO,CAACC,OAAT,CAEV,CARM,CAUV,CApBD,EAoBG6B,KApBH,CAoBSjB,CApBT,CAqBH,CA/CoD,CAmD5D,CArDK,CAAN","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 .\n\n/**\n * Cohort selector module.\n *\n * @module tool_lp/form-cohort-selector\n * @class form-cohort-selector\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {\n\n return /** @alias module:tool_lp/form-cohort-selector */ {\n\n processResults: function(selector, results) {\n var cohorts = [];\n $.each(results, function(index, cohort) {\n cohorts.push({\n value: cohort.id,\n label: cohort._label\n });\n });\n return cohorts;\n },\n\n transport: function(selector, query, success, failure) {\n var promise,\n contextid = parseInt($(selector).data('contextid'), 10),\n includes = $(selector).data('includes');\n\n promise = Ajax.call([{\n methodname: 'tool_lp_search_cohorts',\n args: {\n query: query,\n context: {contextid: contextid},\n includes: includes\n }\n }]);\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n // Render the label.\n $.each(results.cohorts, function(index, cohort) {\n promises.push(Templates.render('tool_lp/form-cohort-selector-suggestion', cohort));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results.cohorts, function(index, cohort) {\n cohort._label = args[i];\n i++;\n });\n success(results.cohorts);\n return;\n });\n\n }).catch(failure);\n }\n\n };\n\n});\n"],"file":"form-cohort-selector.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/form-cohort-selector.js"],"names":["define","$","Ajax","Templates","processResults","selector","results","cohorts","each","index","cohort","push","value","id","label","_label","transport","query","success","failure","promise","contextid","parseInt","data","includes","call","methodname","args","context","then","promises","i","render","when","apply","arguments","catch"],"mappings":"AAwBAA,OAAM,gCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,gBAAxB,CAAD,CAA4C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA6B,CAE3E,MAAyD,CAErDC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAO,CAAG,EAAd,CACAN,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAwB,CACpCH,CAAO,CAACI,IAAR,CAAa,CACTC,KAAK,CAAEF,CAAM,CAACG,EADL,CAETC,KAAK,CAAEJ,CAAM,CAACK,MAFL,CAAb,CAIH,CALD,EAMA,MAAOR,CAAAA,CACV,CAXoD,CAarDS,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,CACnD,GAAIC,CAAAA,CAAJ,CACIC,CAAS,CAAGC,QAAQ,CAACrB,CAAC,CAACI,CAAD,CAAD,CAAYkB,IAAZ,CAAiB,WAAjB,CAAD,CAAgC,EAAhC,CADxB,CAEIC,CAAQ,CAAGvB,CAAC,CAACI,CAAD,CAAD,CAAYkB,IAAZ,CAAiB,UAAjB,CAFf,CAIAH,CAAO,CAAGlB,CAAI,CAACuB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,wBADK,CAEjBC,IAAI,CAAE,CACFV,KAAK,CAAEA,CADL,CAEFW,OAAO,CAAE,CAACP,SAAS,CAAEA,CAAZ,CAFP,CAGFG,QAAQ,CAAEA,CAHR,CAFW,CAAD,CAAV,CAAV,CAQAJ,CAAO,CAAC,CAAD,CAAP,CAAWS,IAAX,CAAgB,SAASvB,CAAT,CAAkB,CAC9B,GAAIwB,CAAAA,CAAQ,CAAG,EAAf,CACIC,CAAC,CAAG,CADR,CAIA9B,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,OAAf,CAAwB,SAASE,CAAT,CAAgBC,CAAhB,CAAwB,CAC5CoB,CAAQ,CAACnB,IAAT,CAAcR,CAAS,CAAC6B,MAAV,CAAiB,yCAAjB,CAA4DtB,CAA5D,CAAd,CACH,CAFD,EAKA,MAAOT,CAAAA,CAAC,CAACgC,IAAF,CAAOC,KAAP,CAAajC,CAAC,CAACgC,IAAf,CAAqBH,CAArB,EAA+BD,IAA/B,CAAoC,UAAW,CAClD,GAAIF,CAAAA,CAAI,CAAGQ,SAAX,CACAlC,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,OAAf,CAAwB,SAASE,CAAT,CAAgBC,CAAhB,CAAwB,CAC5CA,CAAM,CAACK,MAAP,CAAgBY,CAAI,CAACI,CAAD,CAApB,CACAA,CAAC,EACJ,CAHD,EAIAb,CAAO,CAACZ,CAAO,CAACC,OAAT,CAEV,CARM,CAUV,CApBD,EAoBG6B,KApBH,CAoBSjB,CApBT,CAqBH,CA/CoD,CAmD5D,CArDK,CAAN","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 .\n\n/**\n * Cohort selector module.\n *\n * @module tool_lp/form-cohort-selector\n * @class form-cohort-selector\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {\n\n return /** @alias module:tool_lp/form-cohort-selector */ {\n\n processResults: function(selector, results) {\n var cohorts = [];\n $.each(results, function(index, cohort) {\n cohorts.push({\n value: cohort.id,\n label: cohort._label\n });\n });\n return cohorts;\n },\n\n transport: function(selector, query, success, failure) {\n var promise,\n contextid = parseInt($(selector).data('contextid'), 10),\n includes = $(selector).data('includes');\n\n promise = Ajax.call([{\n methodname: 'tool_lp_search_cohorts',\n args: {\n query: query,\n context: {contextid: contextid},\n includes: includes\n }\n }]);\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n // Render the label.\n $.each(results.cohorts, function(index, cohort) {\n promises.push(Templates.render('tool_lp/form-cohort-selector-suggestion', cohort));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results.cohorts, function(index, cohort) {\n cohort._label = args[i];\n i++;\n });\n success(results.cohorts);\n return;\n });\n\n }).catch(failure);\n }\n\n };\n\n});\n"],"file":"form-cohort-selector.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/form-user-selector.min.js.map b/admin/tool/lp/amd/build/form-user-selector.min.js.map index ea192dda709..c2b8b874430 100644 --- a/admin/tool/lp/amd/build/form-user-selector.min.js.map +++ b/admin/tool/lp/amd/build/form-user-selector.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form-user-selector.js"],"names":["define","$","Ajax","Templates","processResults","selector","results","users","each","index","user","push","value","id","label","_label","transport","query","success","failure","promise","capability","data","call","methodname","args","then","promises","i","ctx","identity","k","hasidentity","join","render","when","apply","arguments","catch"],"mappings":"AAyBAA,OAAM,8BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,gBAAxB,CAAD,CAA4C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA6B,CAE3E,MAAuD,CAEnDC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAK,CAAG,EAAZ,CACAN,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCH,CAAK,CAACI,IAAN,CAAW,CACPC,KAAK,CAAEF,CAAI,CAACG,EADL,CAEPC,KAAK,CAAEJ,CAAI,CAACK,MAFL,CAAX,CAIH,CALD,EAMA,MAAOR,CAAAA,CACV,CAXkD,CAanDS,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,IAC/CC,CAAAA,CAD+C,CAE/CC,CAAU,CAAGpB,CAAC,CAACI,CAAD,CAAD,CAAYiB,IAAZ,CAAiB,YAAjB,CAFkC,CAGnD,GAA0B,WAAtB,QAAOD,CAAAA,CAAX,CAAuC,CACnCA,CAAU,CAAG,EAChB,CAEDD,CAAO,CAAGlB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,sBADK,CAEjBC,IAAI,CAAE,CACFR,KAAK,CAAEA,CADL,CAEFI,UAAU,CAAEA,CAFV,CAFW,CAAD,CAAV,CAAV,CAQAD,CAAO,CAAC,CAAD,CAAP,CAAWM,IAAX,CAAgB,SAASpB,CAAT,CAAkB,CAC9B,GAAIqB,CAAAA,CAAQ,CAAG,EAAf,CACIC,CAAC,CAAG,CADR,CAIA3B,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,KAAf,CAAsB,SAASE,CAAT,CAAgBC,CAAhB,CAAsB,CACxC,GAAImB,CAAAA,CAAG,CAAGnB,CAAV,CACIoB,CAAQ,CAAG,EADf,CAEA7B,CAAC,CAACO,IAAF,CAAO,CAAC,UAAD,CAAa,OAAb,CAAsB,QAAtB,CAAgC,QAAhC,CAA0C,YAA1C,CAAwD,aAAxD,CAAP,CAA+E,SAASoB,CAAT,CAAYG,CAAZ,CAAe,CAC1F,GAAuB,WAAnB,QAAOrB,CAAAA,CAAI,CAACqB,CAAD,CAAX,EAA8C,EAAZ,GAAArB,CAAI,CAACqB,CAAD,CAA1C,CAAsD,CAClDF,CAAG,CAACG,WAAJ,IACAF,CAAQ,CAACnB,IAAT,CAAcD,CAAI,CAACqB,CAAD,CAAlB,CACH,CACJ,CALD,EAMAF,CAAG,CAACC,QAAJ,CAAeA,CAAQ,CAACG,IAAT,CAAc,IAAd,CAAf,CACAN,CAAQ,CAAChB,IAAT,CAAcR,CAAS,CAAC+B,MAAV,CAAiB,uCAAjB,CAA0DL,CAA1D,CAAd,CACH,CAXD,EAcA,MAAO5B,CAAAA,CAAC,CAACkC,IAAF,CAAOC,KAAP,CAAanC,CAAC,CAACkC,IAAf,CAAqBR,CAArB,EAA+BD,IAA/B,CAAoC,UAAW,CAClD,GAAID,CAAAA,CAAI,CAAGY,SAAX,CACApC,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,KAAf,CAAsB,SAASE,CAAT,CAAgBC,CAAhB,CAAsB,CACxCA,CAAI,CAACK,MAAL,CAAcU,CAAI,CAACG,CAAD,CAAlB,CACAA,CAAC,EACJ,CAHD,EAIAV,CAAO,CAACZ,CAAO,CAACC,KAAT,CAEV,CARM,CAUV,CA7BD,EA6BG+B,KA7BH,CA6BSnB,CA7BT,CA8BH,CA1DkD,CA8D1D,CAhEK,CAAN","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 .\n\n/**\n * User selector module.\n *\n * @module tool_lp/form-user-selector\n * @class form-user-selector\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {\n\n return /** @alias module:tool_lp/form-user-selector */ {\n\n processResults: function(selector, results) {\n var users = [];\n $.each(results, function(index, user) {\n users.push({\n value: user.id,\n label: user._label\n });\n });\n return users;\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n var capability = $(selector).data('capability');\n if (typeof capability === \"undefined\") {\n capability = '';\n }\n\n promise = Ajax.call([{\n methodname: 'tool_lp_search_users',\n args: {\n query: query,\n capability: capability\n }\n }]);\n\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n // Render the label.\n $.each(results.users, function(index, user) {\n var ctx = user,\n identity = [];\n $.each(['idnumber', 'email', 'phone1', 'phone2', 'department', 'institution'], function(i, k) {\n if (typeof user[k] !== 'undefined' && user[k] !== '') {\n ctx.hasidentity = true;\n identity.push(user[k]);\n }\n });\n ctx.identity = identity.join(', ');\n promises.push(Templates.render('tool_lp/form-user-selector-suggestion', ctx));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results.users, function(index, user) {\n user._label = args[i];\n i++;\n });\n success(results.users);\n return;\n });\n\n }).catch(failure);\n }\n\n };\n\n});\n"],"file":"form-user-selector.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/form-user-selector.js"],"names":["define","$","Ajax","Templates","processResults","selector","results","users","each","index","user","push","value","id","label","_label","transport","query","success","failure","promise","capability","data","call","methodname","args","then","promises","i","ctx","identity","k","hasidentity","join","render","when","apply","arguments","catch"],"mappings":"AAwBAA,OAAM,8BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,gBAAxB,CAAD,CAA4C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA6B,CAE3E,MAAuD,CAEnDC,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAK,CAAG,EAAZ,CACAN,CAAC,CAACO,IAAF,CAAOF,CAAP,CAAgB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAClCH,CAAK,CAACI,IAAN,CAAW,CACPC,KAAK,CAAEF,CAAI,CAACG,EADL,CAEPC,KAAK,CAAEJ,CAAI,CAACK,MAFL,CAAX,CAIH,CALD,EAMA,MAAOR,CAAAA,CACV,CAXkD,CAanDS,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAmCC,CAAnC,CAA4C,IAC/CC,CAAAA,CAD+C,CAE/CC,CAAU,CAAGpB,CAAC,CAACI,CAAD,CAAD,CAAYiB,IAAZ,CAAiB,YAAjB,CAFkC,CAGnD,GAA0B,WAAtB,QAAOD,CAAAA,CAAX,CAAuC,CACnCA,CAAU,CAAG,EAChB,CAEDD,CAAO,CAAGlB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,sBADK,CAEjBC,IAAI,CAAE,CACFR,KAAK,CAAEA,CADL,CAEFI,UAAU,CAAEA,CAFV,CAFW,CAAD,CAAV,CAAV,CAQAD,CAAO,CAAC,CAAD,CAAP,CAAWM,IAAX,CAAgB,SAASpB,CAAT,CAAkB,CAC9B,GAAIqB,CAAAA,CAAQ,CAAG,EAAf,CACIC,CAAC,CAAG,CADR,CAIA3B,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,KAAf,CAAsB,SAASE,CAAT,CAAgBC,CAAhB,CAAsB,CACxC,GAAImB,CAAAA,CAAG,CAAGnB,CAAV,CACIoB,CAAQ,CAAG,EADf,CAEA7B,CAAC,CAACO,IAAF,CAAO,CAAC,UAAD,CAAa,OAAb,CAAsB,QAAtB,CAAgC,QAAhC,CAA0C,YAA1C,CAAwD,aAAxD,CAAP,CAA+E,SAASoB,CAAT,CAAYG,CAAZ,CAAe,CAC1F,GAAuB,WAAnB,QAAOrB,CAAAA,CAAI,CAACqB,CAAD,CAAX,EAA8C,EAAZ,GAAArB,CAAI,CAACqB,CAAD,CAA1C,CAAsD,CAClDF,CAAG,CAACG,WAAJ,IACAF,CAAQ,CAACnB,IAAT,CAAcD,CAAI,CAACqB,CAAD,CAAlB,CACH,CACJ,CALD,EAMAF,CAAG,CAACC,QAAJ,CAAeA,CAAQ,CAACG,IAAT,CAAc,IAAd,CAAf,CACAN,CAAQ,CAAChB,IAAT,CAAcR,CAAS,CAAC+B,MAAV,CAAiB,uCAAjB,CAA0DL,CAA1D,CAAd,CACH,CAXD,EAcA,MAAO5B,CAAAA,CAAC,CAACkC,IAAF,CAAOC,KAAP,CAAanC,CAAC,CAACkC,IAAf,CAAqBR,CAArB,EAA+BD,IAA/B,CAAoC,UAAW,CAClD,GAAID,CAAAA,CAAI,CAAGY,SAAX,CACApC,CAAC,CAACO,IAAF,CAAOF,CAAO,CAACC,KAAf,CAAsB,SAASE,CAAT,CAAgBC,CAAhB,CAAsB,CACxCA,CAAI,CAACK,MAAL,CAAcU,CAAI,CAACG,CAAD,CAAlB,CACAA,CAAC,EACJ,CAHD,EAIAV,CAAO,CAACZ,CAAO,CAACC,KAAT,CAEV,CARM,CAUV,CA7BD,EA6BG+B,KA7BH,CA6BSnB,CA7BT,CA8BH,CA1DkD,CA8D1D,CAhEK,CAAN","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 .\n\n/**\n * User selector module.\n *\n * @module tool_lp/form-user-selector\n * @class form-user-selector\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates'], function($, Ajax, Templates) {\n\n return /** @alias module:tool_lp/form-user-selector */ {\n\n processResults: function(selector, results) {\n var users = [];\n $.each(results, function(index, user) {\n users.push({\n value: user.id,\n label: user._label\n });\n });\n return users;\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n var capability = $(selector).data('capability');\n if (typeof capability === \"undefined\") {\n capability = '';\n }\n\n promise = Ajax.call([{\n methodname: 'tool_lp_search_users',\n args: {\n query: query,\n capability: capability\n }\n }]);\n\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n // Render the label.\n $.each(results.users, function(index, user) {\n var ctx = user,\n identity = [];\n $.each(['idnumber', 'email', 'phone1', 'phone2', 'department', 'institution'], function(i, k) {\n if (typeof user[k] !== 'undefined' && user[k] !== '') {\n ctx.hasidentity = true;\n identity.push(user[k]);\n }\n });\n ctx.identity = identity.join(', ');\n promises.push(Templates.render('tool_lp/form-user-selector-suggestion', ctx));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results.users, function(index, user) {\n user._label = args[i];\n i++;\n });\n success(results.users);\n return;\n });\n\n }).catch(failure);\n }\n\n };\n\n});\n"],"file":"form-user-selector.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/form_competency_element.min.js.map b/admin/tool/lp/amd/build/form_competency_element.min.js.map index 76617071a60..b64d19a68f3 100644 --- a/admin/tool/lp/amd/build/form_competency_element.min.js.map +++ b/admin/tool/lp/amd/build/form_competency_element.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form_competency_element.js"],"names":["define","$","Picker","Ajax","Notification","Templates","pickerInstance","pageContextId","renderCompetencies","currentCompetencies","val","requests","i","split","length","methodname","args","id","when","apply","call","then","competencies","arguments","render","html","js","replaceNode","fail","exception","unpickCompetenciesHandler","e","newCompetencies","toRemove","currentTarget","data","join","pickCompetenciesHandler","on","before","compIds","competencyIds","concat","value","setDisallowedCompetencyIDs","display","init","contextId"],"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 .\n\n/**\n * Badge select competency actions\n *\n * @module tool_lp/form_competency_element\n * @package tool_lp\n * @copyright 2019 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'tool_lp/competencypicker', 'core/ajax', 'core/notification', 'core/templates'],\n function($, Picker, Ajax, Notification, Templates) {\n\n var pickerInstance = null;\n\n var pageContextId = 1;\n\n /**\n * Re-render the list of selected competencies.\n *\n * @method renderCompetencies\n * @return {boolean}\n */\n var renderCompetencies = function() {\n var currentCompetencies = $('[data-action=\"competencies\"]').val();\n var requests = [];\n var i = 0;\n\n if (currentCompetencies != '') {\n currentCompetencies = currentCompetencies.split(',');\n for (i = 0; i < currentCompetencies.length; i++) {\n requests[requests.length] = {\n methodname: 'core_competency_read_competency',\n args: {id: currentCompetencies[i]}\n };\n }\n }\n\n $.when.apply($, Ajax.call(requests, false)).then(function() {\n var i = 0,\n competencies = [];\n\n for (i = 0; i < arguments.length; i++) {\n competencies[i] = arguments[i];\n }\n var context = {\n competencies: competencies\n };\n\n return Templates.render('tool_lp/form_competency_list', context);\n }).then(function(html, js) {\n Templates.replaceNode($('[data-region=\"competencies\"]'), html, js);\n return true;\n }).fail(Notification.exception);\n\n return true;\n };\n\n /**\n * Deselect a competency\n *\n * @method unpickCompetenciesHandler\n * @param {Event} e\n * @return {boolean}\n */\n var unpickCompetenciesHandler = function(e) {\n var currentCompetencies = $('[data-action=\"competencies\"]').val().split(','),\n newCompetencies = [],\n i,\n toRemove = $(e.currentTarget).data('id');\n\n for (i = 0; i < currentCompetencies.length; i++) {\n if (currentCompetencies[i] != toRemove) {\n newCompetencies[newCompetencies.length] = currentCompetencies[i];\n }\n }\n\n $('[data-action=\"competencies\"]').val(newCompetencies.join(','));\n\n return renderCompetencies();\n };\n\n /**\n * Open a competencies popup to relate competencies.\n *\n * @method pickCompetenciesHandler\n */\n var pickCompetenciesHandler = function() {\n var currentCompetencies = $('[data-action=\"competencies\"]').val().split(',');\n\n if (!pickerInstance) {\n pickerInstance = new Picker(pageContextId, false, 'parents', true);\n pickerInstance.on('save', function(e, data) {\n var before = $('[data-action=\"competencies\"]').val();\n var compIds = data.competencyIds;\n if (before != '') {\n compIds = compIds.concat(before.split(','));\n }\n var value = compIds.join(',');\n\n $('[data-action=\"competencies\"]').val(value);\n\n return renderCompetencies();\n });\n }\n\n pickerInstance.setDisallowedCompetencyIDs(currentCompetencies);\n pickerInstance.display();\n };\n\n return /** @alias module:tool_lp/form_competency_element */ {\n /**\n * Listen for clicks on the competency picker and push the changes to the form element.\n *\n * @method init\n * @param {Integer} contextId\n */\n init: function(contextId) {\n pageContextId = contextId;\n renderCompetencies();\n $('[data-action=\"select-competencies\"]').on('click', pickCompetenciesHandler);\n $('body').on('click', '[data-action=\"deselect-competency\"]', unpickCompetenciesHandler);\n }\n };\n});\n"],"file":"form_competency_element.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/form_competency_element.js"],"names":["define","$","Picker","Ajax","Notification","Templates","pickerInstance","pageContextId","renderCompetencies","currentCompetencies","val","requests","i","split","length","methodname","args","id","when","apply","call","then","competencies","arguments","render","html","js","replaceNode","fail","exception","unpickCompetenciesHandler","e","newCompetencies","toRemove","currentTarget","data","join","pickCompetenciesHandler","on","before","compIds","competencyIds","concat","value","setDisallowedCompetencyIDs","display","init","contextId"],"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 .\n\n/**\n * Badge select competency actions\n *\n * @module tool_lp/form_competency_element\n * @copyright 2019 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'tool_lp/competencypicker', 'core/ajax', 'core/notification', 'core/templates'],\n function($, Picker, Ajax, Notification, Templates) {\n\n var pickerInstance = null;\n\n var pageContextId = 1;\n\n /**\n * Re-render the list of selected competencies.\n *\n * @method renderCompetencies\n * @return {boolean}\n */\n var renderCompetencies = function() {\n var currentCompetencies = $('[data-action=\"competencies\"]').val();\n var requests = [];\n var i = 0;\n\n if (currentCompetencies != '') {\n currentCompetencies = currentCompetencies.split(',');\n for (i = 0; i < currentCompetencies.length; i++) {\n requests[requests.length] = {\n methodname: 'core_competency_read_competency',\n args: {id: currentCompetencies[i]}\n };\n }\n }\n\n $.when.apply($, Ajax.call(requests, false)).then(function() {\n var i = 0,\n competencies = [];\n\n for (i = 0; i < arguments.length; i++) {\n competencies[i] = arguments[i];\n }\n var context = {\n competencies: competencies\n };\n\n return Templates.render('tool_lp/form_competency_list', context);\n }).then(function(html, js) {\n Templates.replaceNode($('[data-region=\"competencies\"]'), html, js);\n return true;\n }).fail(Notification.exception);\n\n return true;\n };\n\n /**\n * Deselect a competency\n *\n * @method unpickCompetenciesHandler\n * @param {Event} e\n * @return {boolean}\n */\n var unpickCompetenciesHandler = function(e) {\n var currentCompetencies = $('[data-action=\"competencies\"]').val().split(','),\n newCompetencies = [],\n i,\n toRemove = $(e.currentTarget).data('id');\n\n for (i = 0; i < currentCompetencies.length; i++) {\n if (currentCompetencies[i] != toRemove) {\n newCompetencies[newCompetencies.length] = currentCompetencies[i];\n }\n }\n\n $('[data-action=\"competencies\"]').val(newCompetencies.join(','));\n\n return renderCompetencies();\n };\n\n /**\n * Open a competencies popup to relate competencies.\n *\n * @method pickCompetenciesHandler\n */\n var pickCompetenciesHandler = function() {\n var currentCompetencies = $('[data-action=\"competencies\"]').val().split(',');\n\n if (!pickerInstance) {\n pickerInstance = new Picker(pageContextId, false, 'parents', true);\n pickerInstance.on('save', function(e, data) {\n var before = $('[data-action=\"competencies\"]').val();\n var compIds = data.competencyIds;\n if (before != '') {\n compIds = compIds.concat(before.split(','));\n }\n var value = compIds.join(',');\n\n $('[data-action=\"competencies\"]').val(value);\n\n return renderCompetencies();\n });\n }\n\n pickerInstance.setDisallowedCompetencyIDs(currentCompetencies);\n pickerInstance.display();\n };\n\n return /** @alias module:tool_lp/form_competency_element */ {\n /**\n * Listen for clicks on the competency picker and push the changes to the form element.\n *\n * @method init\n * @param {Integer} contextId\n */\n init: function(contextId) {\n pageContextId = contextId;\n renderCompetencies();\n $('[data-action=\"select-competencies\"]').on('click', pickCompetenciesHandler);\n $('body').on('click', '[data-action=\"deselect-competency\"]', unpickCompetenciesHandler);\n }\n };\n});\n"],"file":"form_competency_element.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/frameworkactions.min.js.map b/admin/tool/lp/amd/build/frameworkactions.min.js.map index eab5c15ad30..a661f254c5a 100644 --- a/admin/tool/lp/amd/build/frameworkactions.min.js.map +++ b/admin/tool/lp/amd/build/frameworkactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/frameworkactions.js"],"names":["define","$","templates","ajax","notification","str","pagecontextid","frameworkid","updatePage","newhtml","newjs","replaceWith","runTemplateJS","reloadList","context","render","done","fail","exception","doDuplicate","e","preventDefault","attr","requests","call","methodname","args","id","pagecontext","contextid","doDelete","success","req","framework","get_strings","key","component","param","shortname","strings","alert","confirmDelete","confirm","deleteHandler","duplicateHandler","init"],"mappings":"AAuBAA,OAAM,4BAAC,CAAC,QAAD,CAAW,gBAAX,CAA6B,WAA7B,CAA0C,mBAA1C,CAA+D,UAA/D,CAAD,CAA6E,SAASC,CAAT,CAAYC,CAAZ,CAAuBC,CAAvB,CAA6BC,CAA7B,CAA2CC,CAA3C,CAAgD,IAI3HC,CAAAA,CAAa,CAAG,CAJ2G,CAO3HC,CAAW,CAAG,CAP6G,CAe3HC,CAAU,CAAG,SAASC,CAAT,CAAkBC,CAAlB,CAAyB,CACtCT,CAAC,CAAC,sCAAD,CAAD,CAAwCU,WAAxC,CAAoDF,CAApD,EACAP,CAAS,CAACU,aAAV,CAAwBF,CAAxB,CACH,CAlB8H,CAyB3HG,CAAU,CAAG,SAASC,CAAT,CAAkB,CAC/BZ,CAAS,CAACa,MAAV,CAAiB,2CAAjB,CAA8DD,CAA9D,EACKE,IADL,CACUR,CADV,EAEKS,IAFL,CAEUb,CAAY,CAACc,SAFvB,CAGH,CA7B8H,CAoC3HC,CAAW,CAAG,SAASC,CAAT,CAAY,CAC1BA,CAAC,CAACC,cAAF,GAEAd,CAAW,CAAGN,CAAC,CAAC,IAAD,CAAD,CAAQqB,IAAR,CAAa,kBAAb,CAAd,CAGA,GAAIC,CAAAA,CAAQ,CAAGpB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,gDADU,CAEtBC,IAAI,CAAE,CAACC,EAAE,CAAEpB,CAAL,CAFgB,CAAD,CAGtB,CACCkB,UAAU,CAAE,oDADb,CAECC,IAAI,CAAE,CACFE,WAAW,CAAE,CACTC,SAAS,CAAEvB,CADF,CADX,CAFP,CAHsB,CAAV,CAAf,CAWAiB,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBH,CAAjB,EAA6BI,IAA7B,CAAkCb,CAAY,CAACc,SAA/C,CACH,CAtD8H,CA0D3HY,CAAQ,CAAG,UAAW,CAGtB,GAAIP,CAAAA,CAAQ,CAAGpB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,6CADU,CAEtBC,IAAI,CAAE,CAACC,EAAE,CAAEpB,CAAL,CAFgB,CAAD,CAGtB,CACCkB,UAAU,CAAE,oDADb,CAECC,IAAI,CAAE,CACFE,WAAW,CAAE,CACTC,SAAS,CAAEvB,CADF,CADX,CAFP,CAHsB,CAAV,CAAf,CAWAiB,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiB,SAASe,CAAT,CAAkB,CAC/B,GAAI,KAAAA,CAAJ,CAAuB,CACnB,GAAIC,CAAAA,CAAG,CAAG7B,CAAI,CAACqB,IAAL,CAAU,CAAC,CACjBC,UAAU,CAAE,2CADK,CAEjBC,IAAI,CAAE,CAACC,EAAE,CAAEpB,CAAL,CAFW,CAAD,CAAV,CAAV,CAIAyB,CAAG,CAAC,CAAD,CAAH,CAAOhB,IAAP,CAAY,SAASiB,CAAT,CAAoB,CAC5B5B,CAAG,CAAC6B,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,0BAAN,CAAkCC,SAAS,CAAE,SAA7C,CAAwDC,KAAK,CAAEJ,CAAS,CAACK,SAAzE,CADY,CAEZ,CAACH,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAFY,CAAhB,EAGGpB,IAHH,CAGQ,SAASuB,CAAT,CAAkB,CACtBnC,CAAY,CAACoC,KAAb,CACI,IADJ,CAEID,CAAO,CAAC,CAAD,CAFX,CAIH,CARD,EAQGtB,IARH,CAQQb,CAAY,CAACc,SARrB,CASH,CAVD,CAWH,CACJ,CAlBD,EAkBGD,IAlBH,CAkBQb,CAAY,CAACc,SAlBrB,EAmBAK,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiBH,CAAjB,EAA6BI,IAA7B,CAAkCb,CAAY,CAACc,SAA/C,CACH,CA5F8H,CAkG3HuB,CAAa,CAAG,SAASrB,CAAT,CAAY,CAC5BA,CAAC,CAACC,cAAF,GAEA,GAAIM,CAAAA,CAAE,CAAG1B,CAAC,CAAC,IAAD,CAAD,CAAQqB,IAAR,CAAa,kBAAb,CAAT,CACAf,CAAW,CAAGoB,CAAd,CAEA,GAAIJ,CAAAA,CAAQ,CAAGpB,CAAI,CAACqB,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,2CADU,CAEtBC,IAAI,CAAE,CAACC,EAAE,CAAEpB,CAAL,CAFgB,CAAD,CAAV,CAAf,CAKAgB,CAAQ,CAAC,CAAD,CAAR,CAAYP,IAAZ,CAAiB,SAASiB,CAAT,CAAoB,CACjC5B,CAAG,CAAC6B,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,2BAAN,CAAmCC,SAAS,CAAE,SAA9C,CAAyDC,KAAK,CAAEJ,CAAS,CAACK,SAA1E,CAFY,CAGZ,CAACH,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGpB,IALH,CAKQ,SAASuB,CAAT,CAAkB,CACtBnC,CAAY,CAACsC,OAAb,CACIH,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKIT,CALJ,CAOH,CAbD,EAaGb,IAbH,CAaQb,CAAY,CAACc,SAbrB,CAcH,CAfD,EAeGD,IAfH,CAeQb,CAAY,CAACc,SAfrB,CAiBH,CA9H8H,CAiI/H,MAAqD,CAQjDyB,aAAa,CAAEF,CARkC,CAejDG,gBAAgB,CAAEzB,CAf+B,CAsBjD0B,IAAI,CAAE,cAAShB,CAAT,CAAoB,CACtBvB,CAAa,CAAGuB,CACnB,CAxBgD,CA0BxD,CA3JK,CAAN","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 .\n\n/**\n * Competency frameworks actions via ajax.\n *\n * @module tool_lp/frameworkactions\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str'], function($, templates, ajax, notification, str) {\n // Private variables and functions.\n\n /** @var {Number} pagecontextid The id of the context */\n var pagecontextid = 0;\n\n /** @var {Number} frameworkid The id of the framework */\n var frameworkid = 0;\n\n /**\n * Callback to replace the dom element with the rendered template.\n *\n * @param {String} newhtml The new html to insert.\n * @param {String} newjs The new js to run.\n */\n var updatePage = function(newhtml, newjs) {\n $('[data-region=\"managecompetencies\"]').replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n };\n\n /**\n * Callback to render the page template again and update the page.\n *\n * @param {Object} context The context for the template.\n */\n var reloadList = function(context) {\n templates.render('tool_lp/manage_competency_frameworks_page', context)\n .done(updatePage)\n .fail(notification.exception);\n };\n\n /**\n * Duplicate a framework and reload the page.\n * @method doDuplicate\n * @param {Event} e\n */\n var doDuplicate = function(e) {\n e.preventDefault();\n\n frameworkid = $(this).attr('data-frameworkid');\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_duplicate_competency_framework',\n args: {id: frameworkid}\n }, {\n methodname: 'tool_lp_data_for_competency_frameworks_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[1].done(reloadList).fail(notification.exception);\n };\n /**\n * Delete a framework and reload the page.\n */\n var doDelete = function() {\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_delete_competency_framework',\n args: {id: frameworkid}\n }, {\n methodname: 'tool_lp_data_for_competency_frameworks_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[0].done(function(success) {\n if (success === false) {\n var req = ajax.call([{\n methodname: 'core_competency_read_competency_framework',\n args: {id: frameworkid}\n }]);\n req[0].done(function(framework) {\n str.get_strings([\n {key: 'frameworkcannotbedeleted', component: 'tool_lp', param: framework.shortname},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.alert(\n null,\n strings[0]\n );\n }).fail(notification.exception);\n });\n }\n }).fail(notification.exception);\n requests[1].done(reloadList).fail(notification.exception);\n };\n\n /**\n * Handler for \"Delete competency framework\" actions.\n * @param {Event} e\n */\n var confirmDelete = function(e) {\n e.preventDefault();\n\n var id = $(this).attr('data-frameworkid');\n frameworkid = id;\n\n var requests = ajax.call([{\n methodname: 'core_competency_read_competency_framework',\n args: {id: frameworkid}\n }]);\n\n requests[0].done(function(framework) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deletecompetencyframework', component: 'tool_lp', param: framework.shortname},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete competency framework X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doDelete\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n\n return /** @alias module:tool_lp/frameworkactions */ {\n // Public variables and functions.\n\n /**\n * Expose the event handler for delete.\n * @method deleteHandler\n * @param {Event} e\n */\n deleteHandler: confirmDelete,\n\n /**\n * Expose the event handler for duplicate.\n * @method duplicateHandler\n * @param {Event} e\n */\n duplicateHandler: doDuplicate,\n\n /**\n * Initialise the module.\n * @method init\n * @param {Number} contextid The context id of the page.\n */\n init: function(contextid) {\n pagecontextid = contextid;\n }\n };\n});\n"],"file":"frameworkactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/frameworkactions.js"],"names":["define","$","templates","ajax","notification","str","pagecontextid","frameworkid","updatePage","newhtml","newjs","replaceWith","runTemplateJS","reloadList","context","render","done","fail","exception","doDuplicate","e","preventDefault","attr","requests","call","methodname","args","id","pagecontext","contextid","doDelete","success","req","framework","get_strings","key","component","param","shortname","strings","alert","confirmDelete","confirm","deleteHandler","duplicateHandler","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 .\n\n/**\n * Competency frameworks actions via ajax.\n *\n * @module tool_lp/frameworkactions\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str'], function($, templates, ajax, notification, str) {\n // Private variables and functions.\n\n /** @var {Number} pagecontextid The id of the context */\n var pagecontextid = 0;\n\n /** @var {Number} frameworkid The id of the framework */\n var frameworkid = 0;\n\n /**\n * Callback to replace the dom element with the rendered template.\n *\n * @param {String} newhtml The new html to insert.\n * @param {String} newjs The new js to run.\n */\n var updatePage = function(newhtml, newjs) {\n $('[data-region=\"managecompetencies\"]').replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n };\n\n /**\n * Callback to render the page template again and update the page.\n *\n * @param {Object} context The context for the template.\n */\n var reloadList = function(context) {\n templates.render('tool_lp/manage_competency_frameworks_page', context)\n .done(updatePage)\n .fail(notification.exception);\n };\n\n /**\n * Duplicate a framework and reload the page.\n * @method doDuplicate\n * @param {Event} e\n */\n var doDuplicate = function(e) {\n e.preventDefault();\n\n frameworkid = $(this).attr('data-frameworkid');\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_duplicate_competency_framework',\n args: {id: frameworkid}\n }, {\n methodname: 'tool_lp_data_for_competency_frameworks_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[1].done(reloadList).fail(notification.exception);\n };\n /**\n * Delete a framework and reload the page.\n */\n var doDelete = function() {\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_delete_competency_framework',\n args: {id: frameworkid}\n }, {\n methodname: 'tool_lp_data_for_competency_frameworks_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[0].done(function(success) {\n if (success === false) {\n var req = ajax.call([{\n methodname: 'core_competency_read_competency_framework',\n args: {id: frameworkid}\n }]);\n req[0].done(function(framework) {\n str.get_strings([\n {key: 'frameworkcannotbedeleted', component: 'tool_lp', param: framework.shortname},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.alert(\n null,\n strings[0]\n );\n }).fail(notification.exception);\n });\n }\n }).fail(notification.exception);\n requests[1].done(reloadList).fail(notification.exception);\n };\n\n /**\n * Handler for \"Delete competency framework\" actions.\n * @param {Event} e\n */\n var confirmDelete = function(e) {\n e.preventDefault();\n\n var id = $(this).attr('data-frameworkid');\n frameworkid = id;\n\n var requests = ajax.call([{\n methodname: 'core_competency_read_competency_framework',\n args: {id: frameworkid}\n }]);\n\n requests[0].done(function(framework) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deletecompetencyframework', component: 'tool_lp', param: framework.shortname},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete competency framework X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doDelete\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n\n return /** @alias module:tool_lp/frameworkactions */ {\n // Public variables and functions.\n\n /**\n * Expose the event handler for delete.\n * @method deleteHandler\n * @param {Event} e\n */\n deleteHandler: confirmDelete,\n\n /**\n * Expose the event handler for duplicate.\n * @method duplicateHandler\n * @param {Event} e\n */\n duplicateHandler: doDuplicate,\n\n /**\n * Initialise the module.\n * @method init\n * @param {Number} contextid The context id of the page.\n */\n init: function(contextid) {\n pagecontextid = contextid;\n }\n };\n});\n"],"file":"frameworkactions.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/frameworks_datasource.min.js.map b/admin/tool/lp/amd/build/frameworks_datasource.min.js.map index 96501a33fed..0f8494d193c 100644 --- a/admin/tool/lp/amd/build/frameworks_datasource.min.js.map +++ b/admin/tool/lp/amd/build/frameworks_datasource.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/frameworks_datasource.js"],"names":["define","$","Ajax","Notification","list","contextId","options","args","context","contextid","extend","call","methodname","processResults","selector","results","each","index","data","push","value","id","label","shortname","idnumber","transport","query","callback","el","onlyVisible","Error","onlyvisible","then","catch","exception"],"mappings":"AAyBAA,OAAM,iCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,mBAAxB,CAAD,CAA+C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgC,CAEjF,MAAiE,CAS7DC,IAAI,CAAE,cAASC,CAAT,CAAoBC,CAApB,CAA6B,CAC/B,GAAIC,CAAAA,CAAI,CAAG,CACHC,OAAO,CAAE,CACLC,SAAS,CAAEJ,CADN,CADN,CAAX,CAMAJ,CAAC,CAACS,MAAF,CAASH,CAAT,CAAkC,WAAnB,QAAOD,CAAAA,CAAP,CAAiC,EAAjC,CAAsCA,CAArD,EACA,MAAOJ,CAAAA,CAAI,CAACS,IAAL,CAAU,CAAC,CACdC,UAAU,CAAE,4CADE,CAEdL,IAAI,CAAEA,CAFQ,CAAD,CAAV,EAGH,CAHG,CAIV,CArB4D,CA8B7DM,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIT,CAAAA,CAAO,CAAG,EAAd,CACAL,CAAC,CAACe,IAAF,CAAOD,CAAP,CAAgB,SAASE,CAAT,CAAgBC,CAAhB,CAAsB,CAClCZ,CAAO,CAACa,IAAR,CAAa,CACTC,KAAK,CAAEF,CAAI,CAACG,EADH,CAETC,KAAK,CAAEJ,CAAI,CAACK,SAAL,CAAiB,GAAjB,CAAuBL,CAAI,CAACM,QAF1B,CAAb,CAIH,CALD,EAMA,MAAOlB,CAAAA,CACV,CAvC4D,CAiD7DmB,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAoC,CAC3C,GAAIC,CAAAA,CAAE,CAAG3B,CAAC,CAACa,CAAD,CAAV,CACIT,CAAS,CAAGuB,CAAE,CAACV,IAAH,CAAQ,WAAR,CADhB,CAEIW,CAAW,CAAGD,CAAE,CAACV,IAAH,CAAQ,aAAR,CAFlB,CAIA,GAAI,CAACb,CAAL,CAAgB,CACZ,KAAM,IAAIyB,CAAAA,KAAJ,CAAU,+CAAiDhB,CAA3D,CACT,CACD,KAAKV,IAAL,CAAUC,CAAV,CAAqB,CACjBqB,KAAK,CAAEA,CADU,CAEjBK,WAAW,CAAEF,CAFI,CAArB,EAGGG,IAHH,CAGQL,CAHR,EAGkBM,KAHlB,CAGwB9B,CAAY,CAAC+B,SAHrC,CAIH,CA7D4D,CAgEpE,CAlEK,CAAN","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 .\n\n/**\n * Frameworks datasource.\n *\n * This module is compatible with core/form-autocomplete.\n *\n * @package tool_lpmigrate\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {\n\n return /** @alias module:tool_lpmigrate/frameworks_datasource */ {\n\n /**\n * List frameworks.\n *\n * @param {Number} contextId The context ID.\n * @param {Object} options Additional parameters to pass to the external function.\n * @return {Promise}\n */\n list: function(contextId, options) {\n var args = {\n context: {\n contextid: contextId\n }\n };\n\n $.extend(args, typeof options === 'undefined' ? {} : options);\n return Ajax.call([{\n methodname: 'core_competency_list_competency_frameworks',\n args: args\n }])[0];\n },\n\n /**\n * Process the results for auto complete elements.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {Array} results An array or results.\n * @return {Array} New array of results.\n */\n processResults: function(selector, results) {\n var options = [];\n $.each(results, function(index, data) {\n options.push({\n value: data.id,\n label: data.shortname + ' ' + data.idnumber\n });\n });\n return options;\n },\n\n /**\n * Source of data for Ajax element.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {String} query The query string.\n * @param {Function} callback A callback function receiving an array of results.\n */\n /* eslint-disable promise/no-callback-in-promise */\n transport: function(selector, query, callback) {\n var el = $(selector),\n contextId = el.data('contextid'),\n onlyVisible = el.data('onlyvisible');\n\n if (!contextId) {\n throw new Error('The attribute data-contextid is required on ' + selector);\n }\n this.list(contextId, {\n query: query,\n onlyvisible: onlyVisible,\n }).then(callback).catch(Notification.exception);\n }\n };\n\n});\n"],"file":"frameworks_datasource.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/frameworks_datasource.js"],"names":["define","$","Ajax","Notification","list","contextId","options","args","context","contextid","extend","call","methodname","processResults","selector","results","each","index","data","push","value","id","label","shortname","idnumber","transport","query","callback","el","onlyVisible","Error","onlyvisible","then","catch","exception"],"mappings":"AAwBAA,OAAM,iCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,mBAAxB,CAAD,CAA+C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgC,CAEjF,MAAiE,CAS7DC,IAAI,CAAE,cAASC,CAAT,CAAoBC,CAApB,CAA6B,CAC/B,GAAIC,CAAAA,CAAI,CAAG,CACHC,OAAO,CAAE,CACLC,SAAS,CAAEJ,CADN,CADN,CAAX,CAMAJ,CAAC,CAACS,MAAF,CAASH,CAAT,CAAkC,WAAnB,QAAOD,CAAAA,CAAP,CAAiC,EAAjC,CAAsCA,CAArD,EACA,MAAOJ,CAAAA,CAAI,CAACS,IAAL,CAAU,CAAC,CACdC,UAAU,CAAE,4CADE,CAEdL,IAAI,CAAEA,CAFQ,CAAD,CAAV,EAGH,CAHG,CAIV,CArB4D,CA8B7DM,cAAc,CAAE,wBAASC,CAAT,CAAmBC,CAAnB,CAA4B,CACxC,GAAIT,CAAAA,CAAO,CAAG,EAAd,CACAL,CAAC,CAACe,IAAF,CAAOD,CAAP,CAAgB,SAASE,CAAT,CAAgBC,CAAhB,CAAsB,CAClCZ,CAAO,CAACa,IAAR,CAAa,CACTC,KAAK,CAAEF,CAAI,CAACG,EADH,CAETC,KAAK,CAAEJ,CAAI,CAACK,SAAL,CAAiB,GAAjB,CAAuBL,CAAI,CAACM,QAF1B,CAAb,CAIH,CALD,EAMA,MAAOlB,CAAAA,CACV,CAvC4D,CAiD7DmB,SAAS,CAAE,mBAASX,CAAT,CAAmBY,CAAnB,CAA0BC,CAA1B,CAAoC,CAC3C,GAAIC,CAAAA,CAAE,CAAG3B,CAAC,CAACa,CAAD,CAAV,CACIT,CAAS,CAAGuB,CAAE,CAACV,IAAH,CAAQ,WAAR,CADhB,CAEIW,CAAW,CAAGD,CAAE,CAACV,IAAH,CAAQ,aAAR,CAFlB,CAIA,GAAI,CAACb,CAAL,CAAgB,CACZ,KAAM,IAAIyB,CAAAA,KAAJ,CAAU,+CAAiDhB,CAA3D,CACT,CACD,KAAKV,IAAL,CAAUC,CAAV,CAAqB,CACjBqB,KAAK,CAAEA,CADU,CAEjBK,WAAW,CAAEF,CAFI,CAArB,EAGGG,IAHH,CAGQL,CAHR,EAGkBM,KAHlB,CAGwB9B,CAAY,CAAC+B,SAHrC,CAIH,CA7D4D,CAgEpE,CAlEK,CAAN","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 .\n\n/**\n * Frameworks datasource.\n *\n * This module is compatible with core/form-autocomplete.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {\n\n return /** @alias module:tool_lpmigrate/frameworks_datasource */ {\n\n /**\n * List frameworks.\n *\n * @param {Number} contextId The context ID.\n * @param {Object} options Additional parameters to pass to the external function.\n * @return {Promise}\n */\n list: function(contextId, options) {\n var args = {\n context: {\n contextid: contextId\n }\n };\n\n $.extend(args, typeof options === 'undefined' ? {} : options);\n return Ajax.call([{\n methodname: 'core_competency_list_competency_frameworks',\n args: args\n }])[0];\n },\n\n /**\n * Process the results for auto complete elements.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {Array} results An array or results.\n * @return {Array} New array of results.\n */\n processResults: function(selector, results) {\n var options = [];\n $.each(results, function(index, data) {\n options.push({\n value: data.id,\n label: data.shortname + ' ' + data.idnumber\n });\n });\n return options;\n },\n\n /**\n * Source of data for Ajax element.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {String} query The query string.\n * @param {Function} callback A callback function receiving an array of results.\n */\n /* eslint-disable promise/no-callback-in-promise */\n transport: function(selector, query, callback) {\n var el = $(selector),\n contextId = el.data('contextid'),\n onlyVisible = el.data('onlyvisible');\n\n if (!contextId) {\n throw new Error('The attribute data-contextid is required on ' + selector);\n }\n this.list(contextId, {\n query: query,\n onlyvisible: onlyVisible,\n }).then(callback).catch(Notification.exception);\n }\n };\n\n});\n"],"file":"frameworks_datasource.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/grade_dialogue.min.js.map b/admin/tool/lp/amd/build/grade_dialogue.min.js.map index 472ffa87bdc..5e0daf22261 100644 --- a/admin/tool/lp/amd/build/grade_dialogue.min.js.map +++ b/admin/tool/lp/amd/build/grade_dialogue.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/grade_dialogue.js"],"names":["define","$","Notification","Templates","Dialogue","EventBase","Str","Grade","ratingOptions","prototype","constructor","apply","_ratingOptions","Object","create","_popup","_afterRender","btnRate","_find","lstRating","txtComment","click","e","preventDefault","_trigger","close","bind","change","node","val","prop","display","M","util","js_pending","when","get_string","_render","then","title","templateResult","js_complete","catch","exception","selector","getContent","find","context","cangrade","_canGrade","ratings","render"],"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 .\n\n/**\n * Grade dialogue.\n *\n * @package tool_lp\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/templates',\n 'tool_lp/dialogue',\n 'tool_lp/event_base',\n 'core/str'],\n function($, Notification, Templates, Dialogue, EventBase, Str) {\n\n /**\n * Grade dialogue class.\n * @param {Array} ratingOptions\n */\n var Grade = function(ratingOptions) {\n EventBase.prototype.constructor.apply(this, []);\n this._ratingOptions = ratingOptions;\n };\n Grade.prototype = Object.create(EventBase.prototype);\n\n /** @type {Dialogue} The dialogue. */\n Grade.prototype._popup = null;\n /** @type {Array} Array of objects containing, 'value', 'name' and optionally 'selected'. */\n Grade.prototype._ratingOptions = null;\n\n /**\n * After render hook.\n *\n * @method _afterRender\n * @protected\n */\n Grade.prototype._afterRender = function() {\n var btnRate = this._find('[data-action=\"rate\"]'),\n lstRating = this._find('[name=\"rating\"]'),\n txtComment = this._find('[name=\"comment\"]');\n\n this._find('[data-action=\"cancel\"]').click(function(e) {\n e.preventDefault();\n this._trigger('cancelled');\n this.close();\n }.bind(this));\n\n lstRating.change(function() {\n var node = $(this);\n if (!node.val()) {\n btnRate.prop('disabled', true);\n } else {\n btnRate.prop('disabled', false);\n }\n }).change();\n\n btnRate.click(function(e) {\n e.preventDefault();\n var val = lstRating.val();\n if (!val) {\n return;\n }\n this._trigger('rated', {\n 'rating': val,\n 'note': txtComment.val()\n });\n this.close();\n }.bind(this));\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n Grade.prototype.close = function() {\n this._popup.close();\n this._popup = null;\n };\n\n /**\n * Opens the picker.\n *\n * @param {Number} competencyId The competency ID of the competency to work on.\n * @method display\n * @return {Promise}\n */\n Grade.prototype.display = function() {\n M.util.js_pending('tool_lp/grade_dialogue:display');\n return $.when(\n Str.get_string('rate', 'tool_lp'),\n this._render()\n )\n .then(function(title, templateResult) {\n this._popup = new Dialogue(\n title,\n templateResult[0],\n function() {\n this._afterRender();\n M.util.js_complete('tool_lp/grade_dialogue:display');\n }.bind(this)\n );\n\n return this._popup;\n }.bind(this))\n .catch(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @method _find\n * @returns {node} The node\n * @protected\n */\n Grade.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @protected\n * @return {Promise}\n */\n Grade.prototype._render = function() {\n var context = {\n cangrade: this._canGrade,\n ratings: this._ratingOptions\n };\n return Templates.render('tool_lp/competency_grader', context);\n };\n\n return /** @alias module:tool_lp/grade_dialogue */ Grade;\n\n});\n"],"file":"grade_dialogue.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/grade_dialogue.js"],"names":["define","$","Notification","Templates","Dialogue","EventBase","Str","Grade","ratingOptions","prototype","constructor","apply","_ratingOptions","Object","create","_popup","_afterRender","btnRate","_find","lstRating","txtComment","click","e","preventDefault","_trigger","close","bind","change","node","val","prop","display","M","util","js_pending","when","get_string","_render","then","title","templateResult","js_complete","catch","exception","selector","getContent","find","context","cangrade","_canGrade","ratings","render"],"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 .\n\n/**\n * Grade dialogue.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/templates',\n 'tool_lp/dialogue',\n 'tool_lp/event_base',\n 'core/str'],\n function($, Notification, Templates, Dialogue, EventBase, Str) {\n\n /**\n * Grade dialogue class.\n * @param {Array} ratingOptions\n */\n var Grade = function(ratingOptions) {\n EventBase.prototype.constructor.apply(this, []);\n this._ratingOptions = ratingOptions;\n };\n Grade.prototype = Object.create(EventBase.prototype);\n\n /** @property {Dialogue} The dialogue. */\n Grade.prototype._popup = null;\n /** @property {Array} Array of objects containing, 'value', 'name' and optionally 'selected'. */\n Grade.prototype._ratingOptions = null;\n\n /**\n * After render hook.\n *\n * @method _afterRender\n * @protected\n */\n Grade.prototype._afterRender = function() {\n var btnRate = this._find('[data-action=\"rate\"]'),\n lstRating = this._find('[name=\"rating\"]'),\n txtComment = this._find('[name=\"comment\"]');\n\n this._find('[data-action=\"cancel\"]').click(function(e) {\n e.preventDefault();\n this._trigger('cancelled');\n this.close();\n }.bind(this));\n\n lstRating.change(function() {\n var node = $(this);\n if (!node.val()) {\n btnRate.prop('disabled', true);\n } else {\n btnRate.prop('disabled', false);\n }\n }).change();\n\n btnRate.click(function(e) {\n e.preventDefault();\n var val = lstRating.val();\n if (!val) {\n return;\n }\n this._trigger('rated', {\n 'rating': val,\n 'note': txtComment.val()\n });\n this.close();\n }.bind(this));\n };\n\n /**\n * Close the dialogue.\n *\n * @method close\n */\n Grade.prototype.close = function() {\n this._popup.close();\n this._popup = null;\n };\n\n /**\n * Opens the picker.\n *\n * @param {Number} competencyId The competency ID of the competency to work on.\n * @method display\n * @return {Promise}\n */\n Grade.prototype.display = function() {\n M.util.js_pending('tool_lp/grade_dialogue:display');\n return $.when(\n Str.get_string('rate', 'tool_lp'),\n this._render()\n )\n .then(function(title, templateResult) {\n this._popup = new Dialogue(\n title,\n templateResult[0],\n function() {\n this._afterRender();\n M.util.js_complete('tool_lp/grade_dialogue:display');\n }.bind(this)\n );\n\n return this._popup;\n }.bind(this))\n .catch(Notification.exception);\n };\n\n /**\n * Find a node in the dialogue.\n *\n * @param {String} selector\n * @method _find\n * @returns {node} The node\n * @protected\n */\n Grade.prototype._find = function(selector) {\n return $(this._popup.getContent()).find(selector);\n };\n\n /**\n * Render the dialogue.\n *\n * @method _render\n * @protected\n * @return {Promise}\n */\n Grade.prototype._render = function() {\n var context = {\n cangrade: this._canGrade,\n ratings: this._ratingOptions\n };\n return Templates.render('tool_lp/competency_grader', context);\n };\n\n return /** @alias module:tool_lp/grade_dialogue */ Grade;\n\n});\n"],"file":"grade_dialogue.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/grade_user_competency_inline.min.js.map b/admin/tool/lp/amd/build/grade_user_competency_inline.min.js.map index 4cc60b609df..781e3f2be52 100644 --- a/admin/tool/lp/amd/build/grade_user_competency_inline.min.js.map +++ b/admin/tool/lp/amd/build/grade_user_competency_inline.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/grade_user_competency_inline.js"],"names":["define","$","notification","ajax","log","GradeDialogue","EventBase","ScaleValues","InlineEditor","selector","scaleId","competencyId","userId","planId","courseId","chooseStr","prototype","constructor","apply","trigger","length","Error","_scaleId","_competencyId","_userId","_planId","_courseId","_chooseStr","_setUp","click","e","preventDefault","_dialogue","display","bind","_methodName","_args","competencyid","planid","courseid","userid","Object","create","options","self","M","util","js_pending","promise","get_values","then","scalevalues","push","value","name","i","optionConfig","id","dialogue","on","data","args","grade","rating","note","call","methodname","done","evidence","_trigger","fail","exception","js_complete"],"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 .\n\n/**\n * Module to enable inline editing of a comptency grade.\n *\n * @package tool_lp\n * @copyright 2015 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/log',\n 'tool_lp/grade_dialogue',\n 'tool_lp/event_base',\n 'tool_lp/scalevalues',\n ], function($, notification, ajax, log, GradeDialogue, EventBase, ScaleValues) {\n\n /**\n * InlineEditor\n *\n * @param {String} selector The selector to trigger the grading.\n * @param {Number} scaleId The id of the scale for this competency.\n * @param {Number} competencyId The id of the competency.\n * @param {Number} userId The id of the user.\n * @param {Number} planId The id of the plan.\n * @param {Number} courseId The id of the course.\n * @param {String} chooseStr Language string for choose a rating.\n */\n var InlineEditor = function(selector, scaleId, competencyId, userId, planId, courseId, chooseStr) {\n EventBase.prototype.constructor.apply(this, []);\n\n var trigger = $(selector);\n if (!trigger.length) {\n throw new Error('Could not find the trigger');\n }\n\n this._scaleId = scaleId;\n this._competencyId = competencyId;\n this._userId = userId;\n this._planId = planId;\n this._courseId = courseId;\n this._chooseStr = chooseStr;\n this._setUp();\n\n trigger.click(function(e) {\n e.preventDefault();\n this._dialogue.display();\n }.bind(this));\n\n if (this._planId) {\n this._methodName = 'core_competency_grade_competency_in_plan';\n this._args = {\n competencyid: this._competencyId,\n planid: this._planId\n };\n } else if (this._courseId) {\n this._methodName = 'core_competency_grade_competency_in_course';\n this._args = {\n competencyid: this._competencyId,\n courseid: this._courseId,\n userid: this._userId\n };\n } else {\n this._methodName = 'core_competency_grade_competency';\n this._args = {\n userid: this._userId,\n competencyid: this._competencyId\n };\n }\n };\n InlineEditor.prototype = Object.create(EventBase.prototype);\n\n /**\n * Setup.\n *\n * @method _setUp\n */\n InlineEditor.prototype._setUp = function() {\n var options = [],\n self = this;\n\n M.util.js_pending('tool_lp/grade_user_competency_inline:_setUp');\n var promise = ScaleValues.get_values(self._scaleId);\n promise.then(function(scalevalues) {\n options.push({\n value: '',\n name: self._chooseStr\n });\n\n for (var i = 0; i < scalevalues.length; i++) {\n var optionConfig = scalevalues[i];\n options.push({\n value: optionConfig.id,\n name: optionConfig.name\n });\n }\n\n return options;\n })\n .then(function(options) {\n return new GradeDialogue(options);\n })\n .then(function(dialogue) {\n dialogue.on('rated', function(e, data) {\n var args = self._args;\n args.grade = data.rating;\n args.note = data.note;\n ajax.call([{\n methodname: self._methodName,\n args: args,\n done: function(evidence) {\n self._trigger('competencyupdated', {args: args, evidence: evidence});\n },\n fail: notification.exception\n }]);\n });\n\n return dialogue;\n })\n .then(function(dialogue) {\n self._dialogue = dialogue;\n\n M.util.js_complete('tool_lp/grade_user_competency_inline:_setUp');\n return;\n })\n .fail(notification.exception);\n };\n\n /** @type {Number} The scale id for this competency. */\n InlineEditor.prototype._scaleId = null;\n /** @type {Number} The id of the competency. */\n InlineEditor.prototype._competencyId = null;\n /** @type {Number} The id of the user. */\n InlineEditor.prototype._userId = null;\n /** @type {Number} The id of the plan. */\n InlineEditor.prototype._planId = null;\n /** @type {Number} The id of the course. */\n InlineEditor.prototype._courseId = null;\n /** @type {String} The text for Choose rating. */\n InlineEditor.prototype._chooseStr = null;\n /** @type {GradeDialogue} The grading dialogue. */\n InlineEditor.prototype._dialogue = null;\n\n return /** @alias module:tool_lp/grade_user_competency_inline */ InlineEditor;\n\n});\n"],"file":"grade_user_competency_inline.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/grade_user_competency_inline.js"],"names":["define","$","notification","ajax","log","GradeDialogue","EventBase","ScaleValues","InlineEditor","selector","scaleId","competencyId","userId","planId","courseId","chooseStr","prototype","constructor","apply","trigger","length","Error","_scaleId","_competencyId","_userId","_planId","_courseId","_chooseStr","_setUp","click","e","preventDefault","_dialogue","display","bind","_methodName","_args","competencyid","planid","courseid","userid","Object","create","options","self","M","util","js_pending","promise","get_values","then","scalevalues","push","value","name","i","optionConfig","id","dialogue","on","data","args","grade","rating","note","call","methodname","done","evidence","_trigger","fail","exception","js_complete"],"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 .\n\n/**\n * Module to enable inline editing of a comptency grade.\n *\n * @copyright 2015 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n 'core/notification',\n 'core/ajax',\n 'core/log',\n 'tool_lp/grade_dialogue',\n 'tool_lp/event_base',\n 'tool_lp/scalevalues',\n ], function($, notification, ajax, log, GradeDialogue, EventBase, ScaleValues) {\n\n /**\n * InlineEditor\n *\n * @param {String} selector The selector to trigger the grading.\n * @param {Number} scaleId The id of the scale for this competency.\n * @param {Number} competencyId The id of the competency.\n * @param {Number} userId The id of the user.\n * @param {Number} planId The id of the plan.\n * @param {Number} courseId The id of the course.\n * @param {String} chooseStr Language string for choose a rating.\n */\n var InlineEditor = function(selector, scaleId, competencyId, userId, planId, courseId, chooseStr) {\n EventBase.prototype.constructor.apply(this, []);\n\n var trigger = $(selector);\n if (!trigger.length) {\n throw new Error('Could not find the trigger');\n }\n\n this._scaleId = scaleId;\n this._competencyId = competencyId;\n this._userId = userId;\n this._planId = planId;\n this._courseId = courseId;\n this._chooseStr = chooseStr;\n this._setUp();\n\n trigger.click(function(e) {\n e.preventDefault();\n this._dialogue.display();\n }.bind(this));\n\n if (this._planId) {\n this._methodName = 'core_competency_grade_competency_in_plan';\n this._args = {\n competencyid: this._competencyId,\n planid: this._planId\n };\n } else if (this._courseId) {\n this._methodName = 'core_competency_grade_competency_in_course';\n this._args = {\n competencyid: this._competencyId,\n courseid: this._courseId,\n userid: this._userId\n };\n } else {\n this._methodName = 'core_competency_grade_competency';\n this._args = {\n userid: this._userId,\n competencyid: this._competencyId\n };\n }\n };\n InlineEditor.prototype = Object.create(EventBase.prototype);\n\n /**\n * Setup.\n *\n * @method _setUp\n */\n InlineEditor.prototype._setUp = function() {\n var options = [],\n self = this;\n\n M.util.js_pending('tool_lp/grade_user_competency_inline:_setUp');\n var promise = ScaleValues.get_values(self._scaleId);\n promise.then(function(scalevalues) {\n options.push({\n value: '',\n name: self._chooseStr\n });\n\n for (var i = 0; i < scalevalues.length; i++) {\n var optionConfig = scalevalues[i];\n options.push({\n value: optionConfig.id,\n name: optionConfig.name\n });\n }\n\n return options;\n })\n .then(function(options) {\n return new GradeDialogue(options);\n })\n .then(function(dialogue) {\n dialogue.on('rated', function(e, data) {\n var args = self._args;\n args.grade = data.rating;\n args.note = data.note;\n ajax.call([{\n methodname: self._methodName,\n args: args,\n done: function(evidence) {\n self._trigger('competencyupdated', {args: args, evidence: evidence});\n },\n fail: notification.exception\n }]);\n });\n\n return dialogue;\n })\n .then(function(dialogue) {\n self._dialogue = dialogue;\n\n M.util.js_complete('tool_lp/grade_user_competency_inline:_setUp');\n return;\n })\n .fail(notification.exception);\n };\n\n /** @property {Number} The scale id for this competency. */\n InlineEditor.prototype._scaleId = null;\n /** @property {Number} The id of the competency. */\n InlineEditor.prototype._competencyId = null;\n /** @property {Number} The id of the user. */\n InlineEditor.prototype._userId = null;\n /** @property {Number} The id of the plan. */\n InlineEditor.prototype._planId = null;\n /** @property {Number} The id of the course. */\n InlineEditor.prototype._courseId = null;\n /** @property {String} The text for Choose rating. */\n InlineEditor.prototype._chooseStr = null;\n /** @property {GradeDialogue} The grading dialogue. */\n InlineEditor.prototype._dialogue = null;\n\n return /** @alias module:tool_lp/grade_user_competency_inline */ InlineEditor;\n\n});\n"],"file":"grade_user_competency_inline.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/menubar.min.js.map b/admin/tool/lp/amd/build/menubar.min.js.map index 6c52abb42fa..a04852bcc1c 100644 --- a/admin/tool/lp/amd/build/menubar.min.js.map +++ b/admin/tool/lp/amd/build/menubar.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/menubar.js"],"names":["define","$","documentClickHandlerRegistered","menuActive","closeAllSubMenus","attr","Menubar","menuRoot","handlers","rootMenus","children","subMenus","subMenuItems","allItems","add","activeItem","isChildOpen","keys","tab","enter","esc","space","left","up","right","down","addAriaAttributes","addEventListeners","prototype","openSubMenu","menu","setOpenDirection","currentThis","document","click","mouseenter","addClass","mouseout","removeClass","e","handleClick","keydown","handleKeyDown","focus","handleFocus","blur","handleBlur","item","stopPropagation","parentUL","parent","is","first","find","not","anchor","clickEvent","Event","target","eventHandled","each","selector","handler","length","callable","proxy","isDefaultPrevented","window","location","href","parentItems","parentsUntil","filter","itemUL","pos","offset","isRTL","body","hasClass","heightmenuRoot","outerHeight","widthmenuRoot","outerWidth","subMenuContainer","css","menuRealWidth","menuRealHeight","margintop","marginright","marginleft","top","scrollTop","height","width","altKey","ctrlKey","keyCode","moveToPrevious","moveToNext","moveUp","moveDown","menuItems","menuNum","menuIndex","index","newItem","childMenu","next","parentMenus","rootItem","last","prev","parentLI","startChr","newItemUL","match","curNdx","titleChr","eq","html","charAt","toLowerCase","enhance","element","data","closeAll"],"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 .\n\n/**\n * Aria menubar functionality. Enhances a simple nested list structure into a full aria widget.\n * Based on the open ajax example: http://oaa-accessibility.org/example/26/\n *\n * @module tool_lp/menubar\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'], function($) {\n\n /** @property {boolean} Flag to indicate if we have already registered a click event handler for the document. */\n var documentClickHandlerRegistered = false;\n\n /** @property {boolean} Flag to indicate whether there's an active, open menu. */\n var menuActive = false;\n\n /**\n * Close all open submenus anywhere in the page (there should only ever be one open at a time).\n *\n * @method closeAllSubMenus\n */\n var closeAllSubMenus = function() {\n $('.tool-lp-menu .tool-lp-sub-menu').attr('aria-hidden', 'true');\n // Every menu's closed at this point, so set the menu active flag to false.\n menuActive = false;\n };\n\n /**\n * Constructor\n *\n * @param {$} menuRoot Jquery collection matching the root of the menu.\n * @param {Function[]} handlers, called when a menu item is chosen.\n */\n var Menubar = function(menuRoot, handlers) {\n // Setup private class variables.\n this.menuRoot = menuRoot;\n this.handlers = handlers;\n this.rootMenus = this.menuRoot.children('li');\n this.subMenus = this.rootMenus.children('ul');\n this.subMenuItems = this.subMenus.children('li');\n this.allItems = this.rootMenus.add(this.subMenuItems);\n this.activeItem = null;\n this.isChildOpen = false;\n\n this.keys = {\n tab: 9,\n enter: 13,\n esc: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40\n };\n\n this.addAriaAttributes();\n // Add the event listeners.\n this.addEventListeners();\n };\n\n /**\n * Open a submenu, first it closes all other sub-menus and sets the open direction.\n * @method openSubMenu\n * @param {Node} menu\n */\n Menubar.prototype.openSubMenu = function(menu) {\n this.setOpenDirection();\n closeAllSubMenus();\n menu.attr('aria-hidden', 'false');\n // Set menu active flag to true when a menu is opened.\n menuActive = true;\n };\n\n\n /**\n * Bind the event listeners to the DOM\n * @method addEventListeners\n */\n Menubar.prototype.addEventListeners = function() {\n var currentThis = this;\n\n // When clicking outside the menubar.\n if (documentClickHandlerRegistered === false) {\n $(document).click(function() {\n // Check if a menu is opened.\n if (menuActive) {\n // Close menu.\n closeAllSubMenus();\n }\n });\n // Set this flag to true so that we won't need to add a document click handler for the other Menubar instances.\n documentClickHandlerRegistered = true;\n }\n\n // Hovers.\n this.subMenuItems.mouseenter(function() {\n $(this).addClass('menu-hover');\n return true;\n });\n\n this.subMenuItems.mouseout(function() {\n $(this).removeClass('menu-hover');\n return true;\n });\n\n // Mouse listeners.\n this.allItems.click(function(e) {\n return currentThis.handleClick($(this), e);\n });\n\n // Key listeners.\n this.allItems.keydown(function(e) {\n return currentThis.handleKeyDown($(this), e);\n });\n\n this.allItems.focus(function() {\n return currentThis.handleFocus($(this));\n });\n\n this.allItems.blur(function() {\n return currentThis.handleBlur($(this));\n });\n };\n\n /**\n * Process click events for the top menus.\n *\n * @method handleClick\n * @param {Object} item is the jquery object of the item firing the event\n * @param {Event} e is the associated event object\n * @return {boolean} Returns false\n */\n Menubar.prototype.handleClick = function(item, e) {\n e.stopPropagation();\n\n var parentUL = item.parent();\n\n if (parentUL.is('.tool-lp-menu')) {\n // Toggle the child menu open/closed.\n if (item.children('ul').first().attr('aria-hidden') == 'true') {\n this.openSubMenu(item.children('ul').first());\n } else {\n item.children('ul').first().attr('aria-hidden', 'true');\n }\n } else {\n // Remove hover and focus styling.\n this.allItems.removeClass('menu-hover menu-focus');\n\n // Clear the active item.\n this.activeItem = null;\n\n // Close the menu.\n this.menuRoot.find('ul').not('.root-level').attr('aria-hidden', 'true');\n // Follow any link, or call the click handlers.\n var anchor = item.find('a').first();\n var clickEvent = new $.Event('click');\n clickEvent.target = anchor;\n var eventHandled = false;\n if (this.handlers) {\n $.each(this.handlers, function(selector, handler) {\n if (eventHandled) {\n return;\n }\n if (item.find(selector).length > 0) {\n var callable = $.proxy(handler, anchor);\n // False means stop propogatting events.\n eventHandled = (callable(clickEvent) === false) || clickEvent.isDefaultPrevented();\n }\n });\n }\n // If we didn't find a handler, and the HREF is # that probably means that\n // we are handling it from somewhere else. Let's just do nothing in that case.\n if (!eventHandled && anchor.attr('href') !== '#') {\n window.location.href = anchor.attr('href');\n }\n }\n return false;\n };\n\n /*\n * Process focus events for the menu.\n *\n * @method handleFocus\n * @param {Object} item is the jquery object of the item firing the event\n * @return boolean Returns false\n */\n Menubar.prototype.handleFocus = function(item) {\n\n // If activeItem is null, we are getting focus from outside the menu. Store\n // the item that triggered the event.\n if (this.activeItem === null) {\n this.activeItem = item;\n } else if (item[0] != this.activeItem[0]) {\n return true;\n }\n\n // Get the set of jquery objects for all the parent items of the active item.\n var parentItems = this.activeItem.parentsUntil('ul.tool-lp-menu').filter('li');\n\n // Remove focus styling from all other menu items.\n this.allItems.removeClass('menu-focus');\n\n // Add focus styling to the active item.\n this.activeItem.addClass('menu-focus');\n\n // Add focus styling to all parent items.\n parentItems.addClass('menu-focus');\n\n // If the bChildOpen flag has been set, open the active item's child menu (if applicable).\n if (this.isChildOpen === true) {\n\n var itemUL = item.parent();\n\n // If the itemUL is a root-level menu and item is a parent item,\n // show the child menu.\n if (itemUL.is('.tool-lp-menu') && (item.attr('aria-haspopup') == 'true')) {\n this.openSubMenu(item.children('ul').first());\n }\n }\n\n return true;\n };\n\n /*\n * Process blur events for the menu.\n *\n * @method handleBlur\n * @param {Object} item is the jquery object of the item firing the event\n * @return boolean Returns false\n */\n Menubar.prototype.handleBlur = function(item) {\n item.removeClass('menu-focus');\n\n return true;\n };\n\n /*\n * Determine if the menu should open to the left, or the right,\n * based on the screen size and menu position.\n * @method setOpenDirection\n */\n Menubar.prototype.setOpenDirection = function() {\n var pos = this.menuRoot.offset();\n var isRTL = $(document.body).hasClass('dir-rtl');\n var openLeft = true;\n var heightmenuRoot = this.rootMenus.outerHeight();\n var widthmenuRoot = this.rootMenus.outerWidth();\n // Sometimes the menuMinWidth is not enough to figure out if menu exceeds the window width.\n // So we have to calculate the real menu width.\n var subMenuContainer = this.rootMenus.find('ul.tool-lp-sub-menu');\n\n // Reset margins.\n subMenuContainer.css('margin-right', '');\n subMenuContainer.css('margin-left', '');\n subMenuContainer.css('margin-top', '');\n\n subMenuContainer.attr('aria-hidden', false);\n var menuRealWidth = subMenuContainer.outerWidth(),\n menuRealHeight = subMenuContainer.outerHeight();\n\n var margintop = null,\n marginright = null,\n marginleft = null;\n var top = pos.top - $(window).scrollTop();\n // Top is the same for RTL and LTR.\n if (top + menuRealHeight > $(window).height()) {\n margintop = menuRealHeight + heightmenuRoot;\n subMenuContainer.css('margin-top', '-' + margintop + 'px');\n }\n\n if (isRTL) {\n if (pos.left - menuRealWidth < 0) {\n marginright = menuRealWidth - widthmenuRoot;\n subMenuContainer.css('margin-right', '-' + marginright + 'px');\n }\n } else {\n if (pos.left + menuRealWidth > $(window).width()) {\n marginleft = menuRealWidth - widthmenuRoot;\n subMenuContainer.css('margin-left', '-' + marginleft + 'px');\n }\n }\n\n if (openLeft) {\n this.menuRoot.addClass('tool-lp-menu-open-left');\n } else {\n this.menuRoot.removeClass('tool-lp-menu-open-left');\n }\n\n };\n\n /*\n * Process keyDown events for the menu.\n *\n * @method handleKeyDown\n * @param {Object} item is the jquery object of the item firing the event\n * @param {Event} e is the associated event object\n * @return boolean Returns false if consuming the event\n */\n Menubar.prototype.handleKeyDown = function(item, e) {\n\n if (e.altKey || e.ctrlKey) {\n // Modifier key pressed: Do not process.\n return true;\n }\n\n switch (e.keyCode) {\n case this.keys.tab: {\n\n // Hide all menu items and update their aria attributes.\n this.menuRoot.find('ul').attr('aria-hidden', 'true');\n\n // Remove focus styling from all menu items.\n this.allItems.removeClass('menu-focus');\n\n this.activeItem = null;\n\n this.isChildOpen = false;\n\n break;\n }\n case this.keys.esc: {\n var itemUL = item.parent();\n\n if (itemUL.is('.tool-lp-menu')) {\n // Hide the child menu and update the aria attributes.\n item.children('ul').first().attr('aria-hidden', 'true');\n } else {\n\n // Move up one level.\n this.activeItem = itemUL.parent();\n\n // Reset the isChildOpen flag.\n this.isChildOpen = false;\n\n // Set focus on the new item.\n this.activeItem.focus();\n\n // Hide the active menu and update the aria attributes.\n itemUL.attr('aria-hidden', 'true');\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.enter:\n case this.keys.space: {\n // Trigger click handler.\n return this.handleClick(item, e);\n }\n\n case this.keys.left: {\n\n this.activeItem = this.moveToPrevious(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n case this.keys.right: {\n\n this.activeItem = this.moveToNext(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n case this.keys.up: {\n\n this.activeItem = this.moveUp(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n case this.keys.down: {\n\n this.activeItem = this.moveDown(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n }\n\n return true;\n\n };\n\n\n /**\n * Move to the next menu level.\n * This will be either the next root-level menu or the child of a menu parent. If\n * at the root level and the active item is the last in the menu, this function will loop\n * to the first menu item.\n *\n * If the menu is a horizontal menu, the first child element of the newly selected menu will\n * be selected\n *\n * @method moveToNext\n * @param {Object} item is the active menu item\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveToNext = function(item) {\n // Item's containing menu.\n var itemUL = item.parent();\n\n // The items in the currently active menu.\n var menuItems = itemUL.children('li');\n\n // The number of items in the active menu.\n var menuNum = menuItems.length;\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n var childMenu = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level move to next sibling. This will require closing\n // the current child menu and opening the new one.\n\n if (menuIndex < menuNum - 1) {\n // Not the last root menu.\n newItem = item.next();\n } else { // Wrap to first item.\n newItem = menuItems.first();\n }\n\n // Close the current child menu (if applicable).\n if (item.attr('aria-haspopup') == 'true') {\n\n childMenu = item.children('ul').first();\n\n if (childMenu.attr('aria-hidden') == 'false') {\n // Update the child menu's aria-hidden attribute.\n childMenu.attr('aria-hidden', 'true');\n this.isChildOpen = true;\n }\n }\n\n // Remove the focus styling from the current menu.\n item.removeClass('menu-focus');\n\n // Open the new child menu (if applicable).\n if ((newItem.attr('aria-haspopup') === 'true') && (this.isChildOpen === true)) {\n\n childMenu = newItem.children('ul').first();\n\n // Update the child's aria-hidden attribute.\n this.openSubMenu(childMenu);\n }\n } else {\n // This is not the root level. If there is a child menu to be moved into, do that;\n // otherwise, move to the next root-level menu if there is one.\n if (item.attr('aria-haspopup') == 'true') {\n\n childMenu = item.children('ul').first();\n\n newItem = childMenu.children('li').first();\n\n // Show the child menu and update its aria attributes.\n this.openSubMenu(childMenu);\n } else {\n // At deepest level, move to the next root-level menu.\n\n var parentMenus = null;\n var rootItem = null;\n\n // Get list of all parent menus for item, up to the root level.\n parentMenus = item.parentsUntil('ul.tool-lp-menu').filter('ul').not('.tool-lp-menu');\n\n // Hide the current menu and update its aria attributes accordingly.\n parentMenus.attr('aria-hidden', 'true');\n\n // Remove the focus styling from the active menu.\n parentMenus.find('li').removeClass('menu-focus');\n parentMenus.last().parent().removeClass('menu-focus');\n\n // The containing root for the menu.\n rootItem = parentMenus.last().parent();\n\n menuIndex = this.rootMenus.index(rootItem);\n\n // If this is not the last root menu item, move to the next one.\n if (menuIndex < this.rootMenus.length - 1) {\n newItem = rootItem.next();\n } else {\n // Loop.\n newItem = this.rootMenus.first();\n }\n\n // Add the focus styling to the new menu.\n newItem.addClass('menu-focus');\n\n if (newItem.attr('aria-haspopup') == 'true') {\n childMenu = newItem.children('ul').first();\n\n newItem = childMenu.children('li').first();\n\n // Show the child menu and update it's aria attributes.\n this.openSubMenu(childMenu);\n this.isChildOpen = true;\n }\n }\n }\n\n return newItem;\n };\n\n /**\n * Member function to move to the previous menu level.\n * This will be either the previous root-level menu or the child of a menu parent. If\n * at the root level and the active item is the first in the menu, this function will loop\n * to the last menu item.\n *\n * If the menu is a horizontal menu, the first child element of the newly selected menu will\n * be selected\n *\n * @method moveToPrevious\n * @param {Object} item is the active menu item\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveToPrevious = function(item) {\n // Item's containing menu.\n var itemUL = item.parent();\n // The items in the currently active menu.\n var menuItems = itemUL.children('li');\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n var childMenu = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level move to previous sibling. This will require closing\n // the current child menu and opening the new one.\n\n if (menuIndex > 0) {\n // Not the first root menu.\n newItem = item.prev();\n } else {\n // Wrap to last item.\n newItem = menuItems.last();\n }\n\n // Close the current child menu (if applicable).\n if (item.attr('aria-haspopup') == 'true') {\n childMenu = item.children('ul').first();\n\n if (childMenu.attr('aria-hidden') == 'false') {\n // Update the child menu's aria-hidden attribute.\n childMenu.attr('aria-hidden', 'true');\n this.isChildOpen = true;\n }\n }\n\n // Remove the focus styling from the current menu.\n item.removeClass('menu-focus');\n\n // Open the new child menu (if applicable).\n if ((newItem.attr('aria-haspopup') === 'true') && (this.isChildOpen === true)) {\n\n childMenu = newItem.children('ul').first();\n\n // Update the child's aria-hidden attribute.\n this.openSubMenu(childMenu);\n\n }\n } else {\n // This is not the root level. If there is a parent menu that is not the\n // root menu, move up one level; otherwise, move to first item of the previous\n // root menu.\n\n var parentLI = itemUL.parent();\n var parentUL = parentLI.parent();\n\n // If this is a vertical menu or is not the first child menu\n // of the root-level menu, move up one level.\n if (!parentUL.is('.tool-lp-menu')) {\n\n newItem = itemUL.parent();\n\n // Hide the active menu and update aria-hidden.\n itemUL.attr('aria-hidden', 'true');\n\n // Remove the focus highlight from the item.\n item.removeClass('menu-focus');\n\n } else {\n // Move to previous root-level menu.\n\n // Hide the current menu and update the aria attributes accordingly.\n itemUL.attr('aria-hidden', 'true');\n\n // Remove the focus styling from the active menu.\n item.removeClass('menu-focus');\n parentLI.removeClass('menu-focus');\n\n menuIndex = this.rootMenus.index(parentLI);\n\n if (menuIndex > 0) {\n // Move to the previous root-level menu.\n newItem = parentLI.prev();\n } else {\n // Loop to last root-level menu.\n newItem = this.rootMenus.last();\n }\n\n // Add the focus styling to the new menu.\n newItem.addClass('menu-focus');\n\n if (newItem.attr('aria-haspopup') == 'true') {\n childMenu = newItem.children('ul').first();\n\n // Show the child menu and update it's aria attributes.\n this.openSubMenu(childMenu);\n this.isChildOpen = true;\n\n newItem = childMenu.children('li').first();\n }\n }\n }\n\n return newItem;\n };\n\n /**\n * Member function to select the next item in a menu.\n * If the active item is the last in the menu, this function will loop to the\n * first menu item.\n *\n * @method moveDown\n * @param {Object} item is the active menu item\n * @param {String} startChr is the character to attempt to match against the beginning of the\n * menu item titles. If found, focus moves to the next menu item beginning with that character.\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveDown = function(item, startChr) {\n // Item's containing menu.\n var itemUL = item.parent();\n // The items in the currently active menu.\n var menuItems = itemUL.children('li').not('.separator');\n // The number of items in the active menu.\n var menuNum = menuItems.length;\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n var newItemUL = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level menu.\n\n if (item.attr('aria-haspopup') != 'true') {\n // No child menu to move to.\n return item;\n }\n\n // Move to the first item in the child menu.\n newItemUL = item.children('ul').first();\n newItem = newItemUL.children('li').first();\n\n // Make sure the child menu is visible.\n this.openSubMenu(newItemUL);\n\n return newItem;\n }\n\n // If $item is not the last item in its menu, move to the next item. If startChr is specified, move\n // to the next item with a title that begins with that character.\n if (startChr) {\n var match = false;\n var curNdx = menuIndex + 1;\n\n // Check if the active item was the last one on the list.\n if (curNdx == menuNum) {\n curNdx = 0;\n }\n\n // Iterate through the menu items (starting from the current item and wrapping) until a match is found\n // or the loop returns to the current menu item.\n while (curNdx != menuIndex) {\n\n var titleChr = menuItems.eq(curNdx).html().charAt(0);\n\n if (titleChr.toLowerCase() == startChr) {\n match = true;\n break;\n }\n\n curNdx = curNdx + 1;\n\n if (curNdx == menuNum) {\n // Reached the end of the list, start again at the beginning.\n curNdx = 0;\n }\n }\n\n if (match === true) {\n newItem = menuItems.eq(curNdx);\n\n // Remove the focus styling from the current item.\n item.removeClass('menu-focus');\n\n return newItem;\n } else {\n return item;\n }\n } else {\n if (menuIndex < menuNum - 1) {\n newItem = menuItems.eq(menuIndex + 1);\n } else {\n newItem = menuItems.first();\n }\n }\n\n // Remove the focus styling from the current item.\n item.removeClass('menu-focus');\n\n return newItem;\n };\n\n /**\n * Function moveUp() is a member function to select the previous item in a menu.\n * If the active item is the first in the menu, this function will loop to the\n * last menu item.\n *\n * @method moveUp\n * @param {Object} item is the active menu item\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveUp = function(item) {\n // Item's containing menu.\n var itemUL = item.parent();\n // The items in the currently active menu.\n var menuItems = itemUL.children('li').not('.separator');\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level menu.\n // Nothing to do.\n return item;\n }\n\n // If item is not the first item in its menu, move to the previous item.\n if (menuIndex > 0) {\n newItem = menuItems.eq(menuIndex - 1);\n } else {\n // Loop to top of menu.\n newItem = menuItems.last();\n }\n\n // Remove the focus styling from the current item.\n item.removeClass('menu-focus');\n\n return newItem;\n };\n\n /**\n * Enhance the dom with aria attributes.\n * @method addAriaAttributes\n */\n Menubar.prototype.addAriaAttributes = function() {\n this.menuRoot.attr('role', 'menubar');\n this.rootMenus.attr('role', 'menuitem');\n this.rootMenus.attr('tabindex', '0');\n this.rootMenus.attr('aria-haspopup', 'true');\n this.subMenus.attr('role', 'menu');\n this.subMenus.attr('aria-hidden', 'true');\n this.subMenuItems.attr('role', 'menuitem');\n this.subMenuItems.attr('tabindex', '-1');\n\n // For CSS styling and effects.\n this.menuRoot.addClass('tool-lp-menu');\n this.allItems.addClass('tool-lp-menu-item');\n this.rootMenus.addClass('tool-lp-root-menu');\n this.subMenus.addClass('tool-lp-sub-menu');\n this.subMenuItems.addClass('dropdown-item');\n };\n\n return /** @alias module:tool_lp/menubar */ {\n /**\n * Create a menu bar object for every node matching the selector.\n *\n * The expected DOM structure is shown below.\n *
    <- This is the target of the selector parameter.\n *
  • <- This is repeated for each top level menu.\n * Text <- This is the text for the top level menu.\n *
      <- This is a list of the entries in this top level menu.\n *
    • <- This is repeated for each menu entry.\n * Choice 1 <- The anchor for the menu.\n *
    • \n *
    \n *
  • \n *
\n *\n * @method enhance\n * @param {String} selector - The selector for the outer most menu node.\n * @param {Function} handler - Javascript handler for when a menu item was chosen. If the\n * handler returns true (or does not exist), the\n * menu will look for an anchor with a link to follow.\n * For example, if the menu entry has a \"data-action\" attribute\n * and we want to call a javascript function when that entry is chosen,\n * we could pass a list of handlers like this:\n * { \"[data-action='add']\" : callAddFunction }\n */\n enhance: function(selector, handler) {\n $(selector).each(function(index, element) {\n var menuRoot = $(element);\n // Don't enhance the same menu twice.\n if (menuRoot.data(\"menubarEnhanced\") !== true) {\n (new Menubar(menuRoot, handler));\n menuRoot.data(\"menubarEnhanced\", true);\n }\n });\n },\n\n /**\n * Handy function to close all open menus anywhere on the page.\n * @method closeAll\n */\n closeAll: closeAllSubMenus\n };\n});\n"],"file":"menubar.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/menubar.js"],"names":["define","$","documentClickHandlerRegistered","menuActive","closeAllSubMenus","attr","Menubar","menuRoot","handlers","rootMenus","children","subMenus","subMenuItems","allItems","add","activeItem","isChildOpen","keys","tab","enter","esc","space","left","up","right","down","addAriaAttributes","addEventListeners","prototype","openSubMenu","menu","setOpenDirection","currentThis","document","click","mouseenter","addClass","mouseout","removeClass","e","handleClick","keydown","handleKeyDown","focus","handleFocus","blur","handleBlur","item","stopPropagation","parentUL","parent","is","first","find","not","anchor","clickEvent","Event","target","eventHandled","each","selector","handler","length","callable","proxy","isDefaultPrevented","window","location","href","parentItems","parentsUntil","filter","itemUL","pos","offset","isRTL","body","hasClass","heightmenuRoot","outerHeight","widthmenuRoot","outerWidth","subMenuContainer","css","menuRealWidth","menuRealHeight","margintop","marginright","marginleft","top","scrollTop","height","width","altKey","ctrlKey","keyCode","moveToPrevious","moveToNext","moveUp","moveDown","menuItems","menuNum","menuIndex","index","newItem","childMenu","next","parentMenus","rootItem","last","prev","parentLI","startChr","newItemUL","match","curNdx","titleChr","eq","html","charAt","toLowerCase","enhance","element","data","closeAll"],"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 .\n\n/**\n * Aria menubar functionality. Enhances a simple nested list structure into a full aria widget.\n * Based on the open ajax example: http://oaa-accessibility.org/example/26/\n *\n * @module tool_lp/menubar\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'], function($) {\n\n /** @property {boolean} Flag to indicate if we have already registered a click event handler for the document. */\n var documentClickHandlerRegistered = false;\n\n /** @property {boolean} Flag to indicate whether there's an active, open menu. */\n var menuActive = false;\n\n /**\n * Close all open submenus anywhere in the page (there should only ever be one open at a time).\n *\n * @method closeAllSubMenus\n */\n var closeAllSubMenus = function() {\n $('.tool-lp-menu .tool-lp-sub-menu').attr('aria-hidden', 'true');\n // Every menu's closed at this point, so set the menu active flag to false.\n menuActive = false;\n };\n\n /**\n * Constructor\n *\n * @param {$} menuRoot Jquery collection matching the root of the menu.\n * @param {Function[]} handlers, called when a menu item is chosen.\n */\n var Menubar = function(menuRoot, handlers) {\n // Setup private class variables.\n this.menuRoot = menuRoot;\n this.handlers = handlers;\n this.rootMenus = this.menuRoot.children('li');\n this.subMenus = this.rootMenus.children('ul');\n this.subMenuItems = this.subMenus.children('li');\n this.allItems = this.rootMenus.add(this.subMenuItems);\n this.activeItem = null;\n this.isChildOpen = false;\n\n this.keys = {\n tab: 9,\n enter: 13,\n esc: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40\n };\n\n this.addAriaAttributes();\n // Add the event listeners.\n this.addEventListeners();\n };\n\n /**\n * Open a submenu, first it closes all other sub-menus and sets the open direction.\n * @method openSubMenu\n * @param {Node} menu\n */\n Menubar.prototype.openSubMenu = function(menu) {\n this.setOpenDirection();\n closeAllSubMenus();\n menu.attr('aria-hidden', 'false');\n // Set menu active flag to true when a menu is opened.\n menuActive = true;\n };\n\n\n /**\n * Bind the event listeners to the DOM\n * @method addEventListeners\n */\n Menubar.prototype.addEventListeners = function() {\n var currentThis = this;\n\n // When clicking outside the menubar.\n if (documentClickHandlerRegistered === false) {\n $(document).click(function() {\n // Check if a menu is opened.\n if (menuActive) {\n // Close menu.\n closeAllSubMenus();\n }\n });\n // Set this flag to true so that we won't need to add a document click handler for the other Menubar instances.\n documentClickHandlerRegistered = true;\n }\n\n // Hovers.\n this.subMenuItems.mouseenter(function() {\n $(this).addClass('menu-hover');\n return true;\n });\n\n this.subMenuItems.mouseout(function() {\n $(this).removeClass('menu-hover');\n return true;\n });\n\n // Mouse listeners.\n this.allItems.click(function(e) {\n return currentThis.handleClick($(this), e);\n });\n\n // Key listeners.\n this.allItems.keydown(function(e) {\n return currentThis.handleKeyDown($(this), e);\n });\n\n this.allItems.focus(function() {\n return currentThis.handleFocus($(this));\n });\n\n this.allItems.blur(function() {\n return currentThis.handleBlur($(this));\n });\n };\n\n /**\n * Process click events for the top menus.\n *\n * @method handleClick\n * @param {Object} item is the jquery object of the item firing the event\n * @param {Event} e is the associated event object\n * @return {boolean} Returns false\n */\n Menubar.prototype.handleClick = function(item, e) {\n e.stopPropagation();\n\n var parentUL = item.parent();\n\n if (parentUL.is('.tool-lp-menu')) {\n // Toggle the child menu open/closed.\n if (item.children('ul').first().attr('aria-hidden') == 'true') {\n this.openSubMenu(item.children('ul').first());\n } else {\n item.children('ul').first().attr('aria-hidden', 'true');\n }\n } else {\n // Remove hover and focus styling.\n this.allItems.removeClass('menu-hover menu-focus');\n\n // Clear the active item.\n this.activeItem = null;\n\n // Close the menu.\n this.menuRoot.find('ul').not('.root-level').attr('aria-hidden', 'true');\n // Follow any link, or call the click handlers.\n var anchor = item.find('a').first();\n var clickEvent = new $.Event('click');\n clickEvent.target = anchor;\n var eventHandled = false;\n if (this.handlers) {\n $.each(this.handlers, function(selector, handler) {\n if (eventHandled) {\n return;\n }\n if (item.find(selector).length > 0) {\n var callable = $.proxy(handler, anchor);\n // False means stop propogatting events.\n eventHandled = (callable(clickEvent) === false) || clickEvent.isDefaultPrevented();\n }\n });\n }\n // If we didn't find a handler, and the HREF is # that probably means that\n // we are handling it from somewhere else. Let's just do nothing in that case.\n if (!eventHandled && anchor.attr('href') !== '#') {\n window.location.href = anchor.attr('href');\n }\n }\n return false;\n };\n\n /*\n * Process focus events for the menu.\n *\n * @method handleFocus\n * @param {Object} item is the jquery object of the item firing the event\n * @return boolean Returns false\n */\n Menubar.prototype.handleFocus = function(item) {\n\n // If activeItem is null, we are getting focus from outside the menu. Store\n // the item that triggered the event.\n if (this.activeItem === null) {\n this.activeItem = item;\n } else if (item[0] != this.activeItem[0]) {\n return true;\n }\n\n // Get the set of jquery objects for all the parent items of the active item.\n var parentItems = this.activeItem.parentsUntil('ul.tool-lp-menu').filter('li');\n\n // Remove focus styling from all other menu items.\n this.allItems.removeClass('menu-focus');\n\n // Add focus styling to the active item.\n this.activeItem.addClass('menu-focus');\n\n // Add focus styling to all parent items.\n parentItems.addClass('menu-focus');\n\n // If the bChildOpen flag has been set, open the active item's child menu (if applicable).\n if (this.isChildOpen === true) {\n\n var itemUL = item.parent();\n\n // If the itemUL is a root-level menu and item is a parent item,\n // show the child menu.\n if (itemUL.is('.tool-lp-menu') && (item.attr('aria-haspopup') == 'true')) {\n this.openSubMenu(item.children('ul').first());\n }\n }\n\n return true;\n };\n\n /*\n * Process blur events for the menu.\n *\n * @method handleBlur\n * @param {Object} item is the jquery object of the item firing the event\n * @return boolean Returns false\n */\n Menubar.prototype.handleBlur = function(item) {\n item.removeClass('menu-focus');\n\n return true;\n };\n\n /*\n * Determine if the menu should open to the left, or the right,\n * based on the screen size and menu position.\n * @method setOpenDirection\n */\n Menubar.prototype.setOpenDirection = function() {\n var pos = this.menuRoot.offset();\n var isRTL = $(document.body).hasClass('dir-rtl');\n var openLeft = true;\n var heightmenuRoot = this.rootMenus.outerHeight();\n var widthmenuRoot = this.rootMenus.outerWidth();\n // Sometimes the menuMinWidth is not enough to figure out if menu exceeds the window width.\n // So we have to calculate the real menu width.\n var subMenuContainer = this.rootMenus.find('ul.tool-lp-sub-menu');\n\n // Reset margins.\n subMenuContainer.css('margin-right', '');\n subMenuContainer.css('margin-left', '');\n subMenuContainer.css('margin-top', '');\n\n subMenuContainer.attr('aria-hidden', false);\n var menuRealWidth = subMenuContainer.outerWidth(),\n menuRealHeight = subMenuContainer.outerHeight();\n\n var margintop = null,\n marginright = null,\n marginleft = null;\n var top = pos.top - $(window).scrollTop();\n // Top is the same for RTL and LTR.\n if (top + menuRealHeight > $(window).height()) {\n margintop = menuRealHeight + heightmenuRoot;\n subMenuContainer.css('margin-top', '-' + margintop + 'px');\n }\n\n if (isRTL) {\n if (pos.left - menuRealWidth < 0) {\n marginright = menuRealWidth - widthmenuRoot;\n subMenuContainer.css('margin-right', '-' + marginright + 'px');\n }\n } else {\n if (pos.left + menuRealWidth > $(window).width()) {\n marginleft = menuRealWidth - widthmenuRoot;\n subMenuContainer.css('margin-left', '-' + marginleft + 'px');\n }\n }\n\n if (openLeft) {\n this.menuRoot.addClass('tool-lp-menu-open-left');\n } else {\n this.menuRoot.removeClass('tool-lp-menu-open-left');\n }\n\n };\n\n /*\n * Process keyDown events for the menu.\n *\n * @method handleKeyDown\n * @param {Object} item is the jquery object of the item firing the event\n * @param {Event} e is the associated event object\n * @return boolean Returns false if consuming the event\n */\n Menubar.prototype.handleKeyDown = function(item, e) {\n\n if (e.altKey || e.ctrlKey) {\n // Modifier key pressed: Do not process.\n return true;\n }\n\n switch (e.keyCode) {\n case this.keys.tab: {\n\n // Hide all menu items and update their aria attributes.\n this.menuRoot.find('ul').attr('aria-hidden', 'true');\n\n // Remove focus styling from all menu items.\n this.allItems.removeClass('menu-focus');\n\n this.activeItem = null;\n\n this.isChildOpen = false;\n\n break;\n }\n case this.keys.esc: {\n var itemUL = item.parent();\n\n if (itemUL.is('.tool-lp-menu')) {\n // Hide the child menu and update the aria attributes.\n item.children('ul').first().attr('aria-hidden', 'true');\n } else {\n\n // Move up one level.\n this.activeItem = itemUL.parent();\n\n // Reset the isChildOpen flag.\n this.isChildOpen = false;\n\n // Set focus on the new item.\n this.activeItem.focus();\n\n // Hide the active menu and update the aria attributes.\n itemUL.attr('aria-hidden', 'true');\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.enter:\n case this.keys.space: {\n // Trigger click handler.\n return this.handleClick(item, e);\n }\n\n case this.keys.left: {\n\n this.activeItem = this.moveToPrevious(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n case this.keys.right: {\n\n this.activeItem = this.moveToNext(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n case this.keys.up: {\n\n this.activeItem = this.moveUp(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n case this.keys.down: {\n\n this.activeItem = this.moveDown(item);\n\n this.activeItem.focus();\n\n e.stopPropagation();\n return false;\n }\n }\n\n return true;\n\n };\n\n\n /**\n * Move to the next menu level.\n * This will be either the next root-level menu or the child of a menu parent. If\n * at the root level and the active item is the last in the menu, this function will loop\n * to the first menu item.\n *\n * If the menu is a horizontal menu, the first child element of the newly selected menu will\n * be selected\n *\n * @method moveToNext\n * @param {Object} item is the active menu item\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveToNext = function(item) {\n // Item's containing menu.\n var itemUL = item.parent();\n\n // The items in the currently active menu.\n var menuItems = itemUL.children('li');\n\n // The number of items in the active menu.\n var menuNum = menuItems.length;\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n var childMenu = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level move to next sibling. This will require closing\n // the current child menu and opening the new one.\n\n if (menuIndex < menuNum - 1) {\n // Not the last root menu.\n newItem = item.next();\n } else { // Wrap to first item.\n newItem = menuItems.first();\n }\n\n // Close the current child menu (if applicable).\n if (item.attr('aria-haspopup') == 'true') {\n\n childMenu = item.children('ul').first();\n\n if (childMenu.attr('aria-hidden') == 'false') {\n // Update the child menu's aria-hidden attribute.\n childMenu.attr('aria-hidden', 'true');\n this.isChildOpen = true;\n }\n }\n\n // Remove the focus styling from the current menu.\n item.removeClass('menu-focus');\n\n // Open the new child menu (if applicable).\n if ((newItem.attr('aria-haspopup') === 'true') && (this.isChildOpen === true)) {\n\n childMenu = newItem.children('ul').first();\n\n // Update the child's aria-hidden attribute.\n this.openSubMenu(childMenu);\n }\n } else {\n // This is not the root level. If there is a child menu to be moved into, do that;\n // otherwise, move to the next root-level menu if there is one.\n if (item.attr('aria-haspopup') == 'true') {\n\n childMenu = item.children('ul').first();\n\n newItem = childMenu.children('li').first();\n\n // Show the child menu and update its aria attributes.\n this.openSubMenu(childMenu);\n } else {\n // At deepest level, move to the next root-level menu.\n\n var parentMenus = null;\n var rootItem = null;\n\n // Get list of all parent menus for item, up to the root level.\n parentMenus = item.parentsUntil('ul.tool-lp-menu').filter('ul').not('.tool-lp-menu');\n\n // Hide the current menu and update its aria attributes accordingly.\n parentMenus.attr('aria-hidden', 'true');\n\n // Remove the focus styling from the active menu.\n parentMenus.find('li').removeClass('menu-focus');\n parentMenus.last().parent().removeClass('menu-focus');\n\n // The containing root for the menu.\n rootItem = parentMenus.last().parent();\n\n menuIndex = this.rootMenus.index(rootItem);\n\n // If this is not the last root menu item, move to the next one.\n if (menuIndex < this.rootMenus.length - 1) {\n newItem = rootItem.next();\n } else {\n // Loop.\n newItem = this.rootMenus.first();\n }\n\n // Add the focus styling to the new menu.\n newItem.addClass('menu-focus');\n\n if (newItem.attr('aria-haspopup') == 'true') {\n childMenu = newItem.children('ul').first();\n\n newItem = childMenu.children('li').first();\n\n // Show the child menu and update it's aria attributes.\n this.openSubMenu(childMenu);\n this.isChildOpen = true;\n }\n }\n }\n\n return newItem;\n };\n\n /**\n * Member function to move to the previous menu level.\n * This will be either the previous root-level menu or the child of a menu parent. If\n * at the root level and the active item is the first in the menu, this function will loop\n * to the last menu item.\n *\n * If the menu is a horizontal menu, the first child element of the newly selected menu will\n * be selected\n *\n * @method moveToPrevious\n * @param {Object} item is the active menu item\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveToPrevious = function(item) {\n // Item's containing menu.\n var itemUL = item.parent();\n // The items in the currently active menu.\n var menuItems = itemUL.children('li');\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n var childMenu = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level move to previous sibling. This will require closing\n // the current child menu and opening the new one.\n\n if (menuIndex > 0) {\n // Not the first root menu.\n newItem = item.prev();\n } else {\n // Wrap to last item.\n newItem = menuItems.last();\n }\n\n // Close the current child menu (if applicable).\n if (item.attr('aria-haspopup') == 'true') {\n childMenu = item.children('ul').first();\n\n if (childMenu.attr('aria-hidden') == 'false') {\n // Update the child menu's aria-hidden attribute.\n childMenu.attr('aria-hidden', 'true');\n this.isChildOpen = true;\n }\n }\n\n // Remove the focus styling from the current menu.\n item.removeClass('menu-focus');\n\n // Open the new child menu (if applicable).\n if ((newItem.attr('aria-haspopup') === 'true') && (this.isChildOpen === true)) {\n\n childMenu = newItem.children('ul').first();\n\n // Update the child's aria-hidden attribute.\n this.openSubMenu(childMenu);\n\n }\n } else {\n // This is not the root level. If there is a parent menu that is not the\n // root menu, move up one level; otherwise, move to first item of the previous\n // root menu.\n\n var parentLI = itemUL.parent();\n var parentUL = parentLI.parent();\n\n // If this is a vertical menu or is not the first child menu\n // of the root-level menu, move up one level.\n if (!parentUL.is('.tool-lp-menu')) {\n\n newItem = itemUL.parent();\n\n // Hide the active menu and update aria-hidden.\n itemUL.attr('aria-hidden', 'true');\n\n // Remove the focus highlight from the item.\n item.removeClass('menu-focus');\n\n } else {\n // Move to previous root-level menu.\n\n // Hide the current menu and update the aria attributes accordingly.\n itemUL.attr('aria-hidden', 'true');\n\n // Remove the focus styling from the active menu.\n item.removeClass('menu-focus');\n parentLI.removeClass('menu-focus');\n\n menuIndex = this.rootMenus.index(parentLI);\n\n if (menuIndex > 0) {\n // Move to the previous root-level menu.\n newItem = parentLI.prev();\n } else {\n // Loop to last root-level menu.\n newItem = this.rootMenus.last();\n }\n\n // Add the focus styling to the new menu.\n newItem.addClass('menu-focus');\n\n if (newItem.attr('aria-haspopup') == 'true') {\n childMenu = newItem.children('ul').first();\n\n // Show the child menu and update it's aria attributes.\n this.openSubMenu(childMenu);\n this.isChildOpen = true;\n\n newItem = childMenu.children('li').first();\n }\n }\n }\n\n return newItem;\n };\n\n /**\n * Member function to select the next item in a menu.\n * If the active item is the last in the menu, this function will loop to the\n * first menu item.\n *\n * @method moveDown\n * @param {Object} item is the active menu item\n * @param {String} startChr is the character to attempt to match against the beginning of the\n * menu item titles. If found, focus moves to the next menu item beginning with that character.\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveDown = function(item, startChr) {\n // Item's containing menu.\n var itemUL = item.parent();\n // The items in the currently active menu.\n var menuItems = itemUL.children('li').not('.separator');\n // The number of items in the active menu.\n var menuNum = menuItems.length;\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n var newItemUL = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level menu.\n\n if (item.attr('aria-haspopup') != 'true') {\n // No child menu to move to.\n return item;\n }\n\n // Move to the first item in the child menu.\n newItemUL = item.children('ul').first();\n newItem = newItemUL.children('li').first();\n\n // Make sure the child menu is visible.\n this.openSubMenu(newItemUL);\n\n return newItem;\n }\n\n // If $item is not the last item in its menu, move to the next item. If startChr is specified, move\n // to the next item with a title that begins with that character.\n if (startChr) {\n var match = false;\n var curNdx = menuIndex + 1;\n\n // Check if the active item was the last one on the list.\n if (curNdx == menuNum) {\n curNdx = 0;\n }\n\n // Iterate through the menu items (starting from the current item and wrapping) until a match is found\n // or the loop returns to the current menu item.\n while (curNdx != menuIndex) {\n\n var titleChr = menuItems.eq(curNdx).html().charAt(0);\n\n if (titleChr.toLowerCase() == startChr) {\n match = true;\n break;\n }\n\n curNdx = curNdx + 1;\n\n if (curNdx == menuNum) {\n // Reached the end of the list, start again at the beginning.\n curNdx = 0;\n }\n }\n\n if (match === true) {\n newItem = menuItems.eq(curNdx);\n\n // Remove the focus styling from the current item.\n item.removeClass('menu-focus');\n\n return newItem;\n } else {\n return item;\n }\n } else {\n if (menuIndex < menuNum - 1) {\n newItem = menuItems.eq(menuIndex + 1);\n } else {\n newItem = menuItems.first();\n }\n }\n\n // Remove the focus styling from the current item.\n item.removeClass('menu-focus');\n\n return newItem;\n };\n\n /**\n * Function moveUp() is a member function to select the previous item in a menu.\n * If the active item is the first in the menu, this function will loop to the\n * last menu item.\n *\n * @method moveUp\n * @param {Object} item is the active menu item\n * @return {Object} Returns the item to move to. Returns item is no move is possible\n */\n Menubar.prototype.moveUp = function(item) {\n // Item's containing menu.\n var itemUL = item.parent();\n // The items in the currently active menu.\n var menuItems = itemUL.children('li').not('.separator');\n // The items index in its menu.\n var menuIndex = menuItems.index(item);\n var newItem = null;\n\n if (itemUL.is('.tool-lp-menu')) {\n // This is the root level menu.\n // Nothing to do.\n return item;\n }\n\n // If item is not the first item in its menu, move to the previous item.\n if (menuIndex > 0) {\n newItem = menuItems.eq(menuIndex - 1);\n } else {\n // Loop to top of menu.\n newItem = menuItems.last();\n }\n\n // Remove the focus styling from the current item.\n item.removeClass('menu-focus');\n\n return newItem;\n };\n\n /**\n * Enhance the dom with aria attributes.\n * @method addAriaAttributes\n */\n Menubar.prototype.addAriaAttributes = function() {\n this.menuRoot.attr('role', 'menubar');\n this.rootMenus.attr('role', 'menuitem');\n this.rootMenus.attr('tabindex', '0');\n this.rootMenus.attr('aria-haspopup', 'true');\n this.subMenus.attr('role', 'menu');\n this.subMenus.attr('aria-hidden', 'true');\n this.subMenuItems.attr('role', 'menuitem');\n this.subMenuItems.attr('tabindex', '-1');\n\n // For CSS styling and effects.\n this.menuRoot.addClass('tool-lp-menu');\n this.allItems.addClass('tool-lp-menu-item');\n this.rootMenus.addClass('tool-lp-root-menu');\n this.subMenus.addClass('tool-lp-sub-menu');\n this.subMenuItems.addClass('dropdown-item');\n };\n\n return /** @alias module:tool_lp/menubar */ {\n /**\n * Create a menu bar object for every node matching the selector.\n *\n * The expected DOM structure is shown below.\n *
    <- This is the target of the selector parameter.\n *
  • <- This is repeated for each top level menu.\n * Text <- This is the text for the top level menu.\n *
      <- This is a list of the entries in this top level menu.\n *
    • <- This is repeated for each menu entry.\n * Choice 1 <- The anchor for the menu.\n *
    • \n *
    \n *
  • \n *
\n *\n * @method enhance\n * @param {String} selector - The selector for the outer most menu node.\n * @param {Function} handler - Javascript handler for when a menu item was chosen. If the\n * handler returns true (or does not exist), the\n * menu will look for an anchor with a link to follow.\n * For example, if the menu entry has a \"data-action\" attribute\n * and we want to call a javascript function when that entry is chosen,\n * we could pass a list of handlers like this:\n * { \"[data-action='add']\" : callAddFunction }\n */\n enhance: function(selector, handler) {\n $(selector).each(function(index, element) {\n var menuRoot = $(element);\n // Don't enhance the same menu twice.\n if (menuRoot.data(\"menubarEnhanced\") !== true) {\n (new Menubar(menuRoot, handler));\n menuRoot.data(\"menubarEnhanced\", true);\n }\n });\n },\n\n /**\n * Handy function to close all open menus anywhere on the page.\n * @method closeAll\n */\n closeAll: closeAllSubMenus\n };\n});\n"],"file":"menubar.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/module_navigation.min.js.map b/admin/tool/lp/amd/build/module_navigation.min.js.map index 000ae636627..4d18c8cc7fd 100644 --- a/admin/tool/lp/amd/build/module_navigation.min.js.map +++ b/admin/tool/lp/amd/build/module_navigation.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/module_navigation.js"],"names":["define","$","ModuleNavigation","moduleSelector","baseUrl","courseId","moduleId","_baseUrl","_moduleId","_courseId","on","_moduleChanged","bind","prototype","e","newModuleId","target","val","queryStr","document","location"],"mappings":"AAuBAA,OAAM,6BAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAU3B,GAAIC,CAAAA,CAAgB,CAAG,SAASC,CAAT,CAAyBC,CAAzB,CAAkCC,CAAlC,CAA4CC,CAA5C,CAAsD,CACzE,KAAKC,QAAL,CAAgBH,CAAhB,CACA,KAAKI,SAAL,CAAiBF,CAAjB,CACA,KAAKG,SAAL,CAAiBJ,CAAjB,CAEAJ,CAAC,CAACE,CAAD,CAAD,CAAkBO,EAAlB,CAAqB,QAArB,CAA+B,KAAKC,cAAL,CAAoBC,IAApB,CAAyB,IAAzB,CAA/B,CACH,CAND,CAcAV,CAAgB,CAACW,SAAjB,CAA2BF,cAA3B,CAA4C,SAASG,CAAT,CAAY,IAChDC,CAAAA,CAAW,CAAGd,CAAC,CAACa,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EADkC,CAEhDC,CAAQ,CAAG,QAAUH,CAAV,CAAwB,YAAxB,CAAuC,KAAKN,SAFP,CAGpDU,QAAQ,CAACC,QAAT,CAAoB,KAAKb,QAAL,CAAgBW,CACvC,CAJD,CAOAhB,CAAgB,CAACW,SAAjB,CAA2BJ,SAA3B,CAAuC,IAAvC,CAEAP,CAAgB,CAACW,SAAjB,CAA2BL,SAA3B,CAAuC,IAAvC,CAEAN,CAAgB,CAACW,SAAjB,CAA2BN,QAA3B,CAAsC,IAAtC,CAEA,MAAsDL,CAAAA,CACzD,CAtCK,CAAN","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 .\n\n/**\n * Module to navigation between users in a course.\n *\n * @package tool_lp\n * @copyright 2019 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * ModuleNavigation\n *\n * @param {String} moduleSelector The selector of the module element.\n * @param {String} baseUrl The base url for the page (no params).\n * @param {Number} courseId The course id\n * @param {Number} moduleId The activity module (filter)\n */\n var ModuleNavigation = function(moduleSelector, baseUrl, courseId, moduleId) {\n this._baseUrl = baseUrl;\n this._moduleId = moduleId;\n this._courseId = courseId;\n\n $(moduleSelector).on('change', this._moduleChanged.bind(this));\n };\n\n /**\n * The module was changed in the select list.\n *\n * @method _moduleChanged\n * @param {Event} e the event\n */\n ModuleNavigation.prototype._moduleChanged = function(e) {\n var newModuleId = $(e.target).val();\n var queryStr = '?mod=' + newModuleId + '&courseid=' + this._courseId;\n document.location = this._baseUrl + queryStr;\n };\n\n /** @type {Number} The id of the course. */\n ModuleNavigation.prototype._courseId = null;\n /** @type {Number} The id of the module. */\n ModuleNavigation.prototype._moduleId = null;\n /** @type {String} Plugin base url. */\n ModuleNavigation.prototype._baseUrl = null;\n\n return /** @alias module:tool_lp/module_navigation */ ModuleNavigation;\n});\n"],"file":"module_navigation.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/module_navigation.js"],"names":["define","$","ModuleNavigation","moduleSelector","baseUrl","courseId","moduleId","_baseUrl","_moduleId","_courseId","on","_moduleChanged","bind","prototype","e","newModuleId","target","val","queryStr","document","location"],"mappings":"AAsBAA,OAAM,6BAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAU3B,GAAIC,CAAAA,CAAgB,CAAG,SAASC,CAAT,CAAyBC,CAAzB,CAAkCC,CAAlC,CAA4CC,CAA5C,CAAsD,CACzE,KAAKC,QAAL,CAAgBH,CAAhB,CACA,KAAKI,SAAL,CAAiBF,CAAjB,CACA,KAAKG,SAAL,CAAiBJ,CAAjB,CAEAJ,CAAC,CAACE,CAAD,CAAD,CAAkBO,EAAlB,CAAqB,QAArB,CAA+B,KAAKC,cAAL,CAAoBC,IAApB,CAAyB,IAAzB,CAA/B,CACH,CAND,CAcAV,CAAgB,CAACW,SAAjB,CAA2BF,cAA3B,CAA4C,SAASG,CAAT,CAAY,IAChDC,CAAAA,CAAW,CAAGd,CAAC,CAACa,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EADkC,CAEhDC,CAAQ,CAAG,QAAUH,CAAV,CAAwB,YAAxB,CAAuC,KAAKN,SAFP,CAGpDU,QAAQ,CAACC,QAAT,CAAoB,KAAKb,QAAL,CAAgBW,CACvC,CAJD,CAOAhB,CAAgB,CAACW,SAAjB,CAA2BJ,SAA3B,CAAuC,IAAvC,CAEAP,CAAgB,CAACW,SAAjB,CAA2BL,SAA3B,CAAuC,IAAvC,CAEAN,CAAgB,CAACW,SAAjB,CAA2BN,QAA3B,CAAsC,IAAtC,CAEA,MAAsDL,CAAAA,CACzD,CAtCK,CAAN","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 .\n\n/**\n * Module to navigation between users in a course.\n *\n * @copyright 2019 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * ModuleNavigation\n *\n * @param {String} moduleSelector The selector of the module element.\n * @param {String} baseUrl The base url for the page (no params).\n * @param {Number} courseId The course id\n * @param {Number} moduleId The activity module (filter)\n */\n var ModuleNavigation = function(moduleSelector, baseUrl, courseId, moduleId) {\n this._baseUrl = baseUrl;\n this._moduleId = moduleId;\n this._courseId = courseId;\n\n $(moduleSelector).on('change', this._moduleChanged.bind(this));\n };\n\n /**\n * The module was changed in the select list.\n *\n * @method _moduleChanged\n * @param {Event} e the event\n */\n ModuleNavigation.prototype._moduleChanged = function(e) {\n var newModuleId = $(e.target).val();\n var queryStr = '?mod=' + newModuleId + '&courseid=' + this._courseId;\n document.location = this._baseUrl + queryStr;\n };\n\n /** @property {Number} The id of the course. */\n ModuleNavigation.prototype._courseId = null;\n /** @property {Number} The id of the module. */\n ModuleNavigation.prototype._moduleId = null;\n /** @property {String} Plugin base url. */\n ModuleNavigation.prototype._baseUrl = null;\n\n return /** @alias module:tool_lp/module_navigation */ ModuleNavigation;\n});\n"],"file":"module_navigation.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/parentcompetency_form.min.js.map b/admin/tool/lp/amd/build/parentcompetency_form.min.js.map index 7939dd2054f..df3600bea00 100644 --- a/admin/tool/lp/amd/build/parentcompetency_form.min.js.map +++ b/admin/tool/lp/amd/build/parentcompetency_form.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/parentcompetency_form.js"],"names":["define","$","ajax","Str","Picker","Templates","Notification","ParentCompetencyForm","buttonSelector","inputHiddenSelector","staticElementSelector","frameworkId","pageContextId","registerEvents","prototype","setParent","data","self","competencyId","call","methodname","args","id","done","competency","html","shortname","val","fail","exception","get_string","then","rootframework","on","e","preventDefault","picker","_render","_preRender","context","competencies","_competencies","framework","_getFramework","_frameworkId","frameworks","_frameworks","search","_searchText","singleFramework","_singleFramework","render","display","init","inputSelector"],"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 .\n\n/**\n * Handle selecting parent competency in competency form.\n *\n * @module tool_lp/parentcompetency_form\n * @package tool_lp\n * @copyright 2015 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'tool_lp/competencypicker', 'core/templates', 'core/notification'],\n function($, ajax, Str, Picker, Templates, Notification) {\n\n /**\n * Parent Competency Form object.\n * @param {String} buttonSelector The parent competency button selector.\n * @param {String} inputHiddenSelector The hidden input field selector.\n * @param {String} staticElementSelector The static element displaying the parent competency.\n * @param {Number} frameworkId The competency framework ID.\n * @param {Number} pageContextId The page context ID.\n */\n var ParentCompetencyForm = function(buttonSelector,\n inputHiddenSelector,\n staticElementSelector,\n frameworkId,\n pageContextId) {\n this.buttonSelector = buttonSelector;\n this.inputHiddenSelector = inputHiddenSelector;\n this.staticElementSelector = staticElementSelector;\n this.frameworkId = frameworkId;\n this.pageContextId = pageContextId;\n\n // Register the events.\n this.registerEvents();\n };\n\n /** @var {String} The parent competency button selector. */\n ParentCompetencyForm.prototype.buttonSelector = null;\n /** @var {String} The hidden input field selector. */\n ParentCompetencyForm.prototype.inputHiddenSelector = null;\n /** @var {String} The static element displaying the parent competency. */\n ParentCompetencyForm.prototype.staticElementSelector = null;\n /** @var {Number} The competency framework ID. */\n ParentCompetencyForm.prototype.frameworkId = null;\n /** @var {Number} The page context ID. */\n ParentCompetencyForm.prototype.pageContextId = null;\n\n /**\n * Set the parent competency in the competency form.\n *\n * @param {Object} data Data containing selected competency.\n * @method setParent\n */\n ParentCompetencyForm.prototype.setParent = function(data) {\n var self = this;\n\n if (data.competencyId !== 0) {\n ajax.call([\n {methodname: 'core_competency_read_competency', args: {\n id: data.competencyId\n }}\n ])[0].done(function(competency) {\n $(self.staticElementSelector).html(competency.shortname);\n $(self.inputHiddenSelector).val(competency.id);\n }).fail(Notification.exception);\n } else {\n // Root of competency framework selected.\n Str.get_string('competencyframeworkroot', 'tool_lp').then(function(rootframework) {\n $(self.staticElementSelector).html(rootframework);\n $(self.inputHiddenSelector).val(data.competencyId);\n return;\n }).fail(Notification.exception);\n }\n };\n\n /**\n * Register the events of parent competency button click.\n *\n * @method registerEvents\n */\n ParentCompetencyForm.prototype.registerEvents = function() {\n var self = this;\n\n // Event on edit parent button.\n $(self.buttonSelector).on('click', function(e) {\n e.preventDefault();\n\n var picker = new Picker(self.pageContextId, self.frameworkId, 'self', false);\n\n // Override the render method to make framework selectable.\n picker._render = function() {\n var self = this;\n return self._preRender().then(function() {\n var context = {\n competencies: self._competencies,\n framework: self._getFramework(self._frameworkId),\n frameworks: self._frameworks,\n search: self._searchText,\n singleFramework: self._singleFramework,\n };\n\n return Templates.render('tool_lp/competency_picker_competencyform', context);\n });\n };\n\n // On selected competency.\n picker.on('save', function(e, data) {\n self.setParent(data);\n });\n\n picker.display();\n });\n };\n\n return {\n\n /**\n * Main initialisation.\n * @param {String} buttonSelector The parent competency button selector.\n * @param {String} inputSelector The hidden input field selector.\n * @param {String} staticElementSelector The static element displaying the parent competency.\n * @param {Number} frameworkId The competency framework ID.\n * @param {Number} pageContextId The page context ID.\n * @method init\n */\n init: function(buttonSelector,\n inputSelector,\n staticElementSelector,\n frameworkId,\n pageContextId) {\n // Create instance.\n new ParentCompetencyForm(buttonSelector,\n inputSelector,\n staticElementSelector,\n frameworkId,\n pageContextId);\n }\n };\n});\n"],"file":"parentcompetency_form.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/parentcompetency_form.js"],"names":["define","$","ajax","Str","Picker","Templates","Notification","ParentCompetencyForm","buttonSelector","inputHiddenSelector","staticElementSelector","frameworkId","pageContextId","registerEvents","prototype","setParent","data","self","competencyId","call","methodname","args","id","done","competency","html","shortname","val","fail","exception","get_string","then","rootframework","on","e","preventDefault","picker","_render","_preRender","context","competencies","_competencies","framework","_getFramework","_frameworkId","frameworks","_frameworks","search","_searchText","singleFramework","_singleFramework","render","display","init","inputSelector"],"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 .\n\n/**\n * Handle selecting parent competency in competency form.\n *\n * @module tool_lp/parentcompetency_form\n * @copyright 2015 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'tool_lp/competencypicker', 'core/templates', 'core/notification'],\n function($, ajax, Str, Picker, Templates, Notification) {\n\n /**\n * Parent Competency Form object.\n * @param {String} buttonSelector The parent competency button selector.\n * @param {String} inputHiddenSelector The hidden input field selector.\n * @param {String} staticElementSelector The static element displaying the parent competency.\n * @param {Number} frameworkId The competency framework ID.\n * @param {Number} pageContextId The page context ID.\n */\n var ParentCompetencyForm = function(buttonSelector,\n inputHiddenSelector,\n staticElementSelector,\n frameworkId,\n pageContextId) {\n this.buttonSelector = buttonSelector;\n this.inputHiddenSelector = inputHiddenSelector;\n this.staticElementSelector = staticElementSelector;\n this.frameworkId = frameworkId;\n this.pageContextId = pageContextId;\n\n // Register the events.\n this.registerEvents();\n };\n\n /** @var {String} The parent competency button selector. */\n ParentCompetencyForm.prototype.buttonSelector = null;\n /** @var {String} The hidden input field selector. */\n ParentCompetencyForm.prototype.inputHiddenSelector = null;\n /** @var {String} The static element displaying the parent competency. */\n ParentCompetencyForm.prototype.staticElementSelector = null;\n /** @var {Number} The competency framework ID. */\n ParentCompetencyForm.prototype.frameworkId = null;\n /** @var {Number} The page context ID. */\n ParentCompetencyForm.prototype.pageContextId = null;\n\n /**\n * Set the parent competency in the competency form.\n *\n * @param {Object} data Data containing selected competency.\n * @method setParent\n */\n ParentCompetencyForm.prototype.setParent = function(data) {\n var self = this;\n\n if (data.competencyId !== 0) {\n ajax.call([\n {methodname: 'core_competency_read_competency', args: {\n id: data.competencyId\n }}\n ])[0].done(function(competency) {\n $(self.staticElementSelector).html(competency.shortname);\n $(self.inputHiddenSelector).val(competency.id);\n }).fail(Notification.exception);\n } else {\n // Root of competency framework selected.\n Str.get_string('competencyframeworkroot', 'tool_lp').then(function(rootframework) {\n $(self.staticElementSelector).html(rootframework);\n $(self.inputHiddenSelector).val(data.competencyId);\n return;\n }).fail(Notification.exception);\n }\n };\n\n /**\n * Register the events of parent competency button click.\n *\n * @method registerEvents\n */\n ParentCompetencyForm.prototype.registerEvents = function() {\n var self = this;\n\n // Event on edit parent button.\n $(self.buttonSelector).on('click', function(e) {\n e.preventDefault();\n\n var picker = new Picker(self.pageContextId, self.frameworkId, 'self', false);\n\n // Override the render method to make framework selectable.\n picker._render = function() {\n var self = this;\n return self._preRender().then(function() {\n var context = {\n competencies: self._competencies,\n framework: self._getFramework(self._frameworkId),\n frameworks: self._frameworks,\n search: self._searchText,\n singleFramework: self._singleFramework,\n };\n\n return Templates.render('tool_lp/competency_picker_competencyform', context);\n });\n };\n\n // On selected competency.\n picker.on('save', function(e, data) {\n self.setParent(data);\n });\n\n picker.display();\n });\n };\n\n return {\n\n /**\n * Main initialisation.\n * @param {String} buttonSelector The parent competency button selector.\n * @param {String} inputSelector The hidden input field selector.\n * @param {String} staticElementSelector The static element displaying the parent competency.\n * @param {Number} frameworkId The competency framework ID.\n * @param {Number} pageContextId The page context ID.\n * @method init\n */\n init: function(buttonSelector,\n inputSelector,\n staticElementSelector,\n frameworkId,\n pageContextId) {\n // Create instance.\n new ParentCompetencyForm(buttonSelector,\n inputSelector,\n staticElementSelector,\n frameworkId,\n pageContextId);\n }\n };\n});\n"],"file":"parentcompetency_form.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/planactions.min.js.map b/admin/tool/lp/amd/build/planactions.min.js.map index 5fcba7c5e34..5d24458ce4f 100644 --- a/admin/tool/lp/amd/build/planactions.min.js.map +++ b/admin/tool/lp/amd/build/planactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/planactions.js"],"names":["define","$","templates","ajax","notification","str","Menubar","Dialogue","PlanActions","type","_type","_region","_planNode","_template","_contextMethod","TypeError","prototype","_getContextArgs","planData","self","args","planid","id","userid","refresh","selector","_findPlanData","_callAndRefresh","_renderView","context","render","then","newhtml","newjs","replaceWith","runTemplateJS","calls","callKey","Math","floor","random","M","util","js_pending","push","methodname","when","apply","call","arguments","length","fail","exception","always","js_complete","_doDelete","deletePlan","requests","done","plan","get_strings","key","component","param","name","strings","confirm","_doReopenPlan","reopenPlan","_doCompletePlan","completePlan","_doUnlinkPlan","unlinkPlan","_doRequestReview","requestReview","_doCancelReviewRequest","cancelReviewRequest","_doStartReview","startReview","_doStopReview","stopReview","_doApprove","approve","_doUnapprove","unapprove","_showLinkedCoursesHandler","e","preventDefault","competencyid","target","data","courses","html","get_string","linkedcourses","_eventHandler","method","node","parent","parentsUntil","Error","enhanceMenubar","enhance","bind","registerEvents","wrapper","find","click"],"mappings":"AAuBAA,OAAM,uBAAC,CAAC,QAAD,CACC,gBADD,CAEC,WAFD,CAGC,mBAHD,CAIC,UAJD,CAKC,iBALD,CAMC,kBAND,CAAD,CAOE,SAASC,CAAT,CAAYC,CAAZ,CAAuBC,CAAvB,CAA6BC,CAA7B,CAA2CC,CAA3C,CAAgDC,CAAhD,CAAyDC,CAAzD,CAAmE,CASvE,GAAIC,CAAAA,CAAW,CAAG,SAASC,CAAT,CAAe,CAC7B,KAAKC,KAAL,CAAaD,CAAb,CAEA,GAAa,MAAT,GAAAA,CAAJ,CAAqB,CAEjB,KAAKE,OAAL,CAAe,6BAAf,CACA,KAAKC,SAAL,CAAiB,6BAAjB,CACA,KAAKC,SAAL,CAAiB,mBAAjB,CACA,KAAKC,cAAL,CAAsB,4BAEzB,CAPD,IAOO,IAAa,OAAT,GAAAL,CAAJ,CAAsB,CAEzB,KAAKE,OAAL,CAAe,yBAAf,CACA,KAAKC,SAAL,CAAiB,6BAAjB,CACA,KAAKC,SAAL,CAAiB,oBAAjB,CACA,KAAKC,cAAL,CAAsB,6BAEzB,CAPM,IAOA,CACH,KAAM,IAAIC,CAAAA,SAAJ,CAAc,kBAAd,CACT,CACJ,CApBD,CAuBAP,CAAW,CAACQ,SAAZ,CAAsBF,cAAtB,CAAuC,IAAvC,CAEAN,CAAW,CAACQ,SAAZ,CAAsBJ,SAAtB,CAAkC,IAAlC,CAEAJ,CAAW,CAACQ,SAAZ,CAAsBL,OAAtB,CAAgC,IAAhC,CAEAH,CAAW,CAACQ,SAAZ,CAAsBH,SAAtB,CAAkC,IAAlC,CAEAL,CAAW,CAACQ,SAAZ,CAAsBN,KAAtB,CAA8B,IAA9B,CAQAF,CAAW,CAACQ,SAAZ,CAAsBC,eAAtB,CAAwC,SAASC,CAAT,CAAmB,CACvD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIC,CAAI,CAAG,EADX,CAGA,GAAmB,MAAf,GAAAD,CAAI,CAACT,KAAT,CAA2B,CACvBU,CAAI,CAAG,CACHC,MAAM,CAAEH,CAAQ,CAACI,EADd,CAIV,CALD,IAKO,IAAmB,OAAf,GAAAH,CAAI,CAACT,KAAT,CAA4B,CAC/BU,CAAI,CAAG,CACHG,MAAM,CAAEL,CAAQ,CAACK,MADd,CAGV,CAED,MAAOH,CAAAA,CACV,CAhBD,CAyBAZ,CAAW,CAACQ,SAAZ,CAAsBQ,OAAtB,CAAgC,SAASC,CAAT,CAAmB,CAC/C,GAAIP,CAAAA,CAAQ,CAAG,KAAKQ,aAAL,CAAmBzB,CAAC,CAACwB,CAAD,CAApB,CAAf,CACA,KAAKE,eAAL,CAAqB,EAArB,CAAyBT,CAAzB,CACH,CAHD,CAWAV,CAAW,CAACQ,SAAZ,CAAsBY,WAAtB,CAAoC,SAASC,CAAT,CAAkB,CAClD,GAAIV,CAAAA,CAAI,CAAG,IAAX,CACA,MAAOjB,CAAAA,CAAS,CAAC4B,MAAV,CAAiBX,CAAI,CAACN,SAAtB,CAAiCgB,CAAjC,EACFE,IADE,CACG,SAASC,CAAT,CAAkBC,CAAlB,CAAyB,CAC3BhC,CAAC,CAACkB,CAAI,CAACR,OAAN,CAAD,CAAgBuB,WAAhB,CAA4BF,CAA5B,EACA9B,CAAS,CAACiC,aAAV,CAAwBF,CAAxB,CAEH,CALE,CAMV,CARD,CAiBAzB,CAAW,CAACQ,SAAZ,CAAsBW,eAAtB,CAAwC,SAASS,CAAT,CAAgBlB,CAAhB,CAA0B,CAG9D,GAAImB,CAAAA,CAAO,CAAG,uCAAyCC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,GAAgBF,IAAI,CAACC,KAAL,CAAW,GAAX,CAA3B,CAAvD,CACAE,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkBN,CAAlB,EAEA,GAAIlB,CAAAA,CAAI,CAAG,IAAX,CACAiB,CAAK,CAACQ,IAAN,CAAW,CACPC,UAAU,CAAE1B,CAAI,CAACL,cADV,CAEPM,IAAI,CAAED,CAAI,CAACF,eAAL,CAAqBC,CAArB,CAFC,CAAX,EAMA,MAAOjB,CAAAA,CAAC,CAAC6C,IAAF,CAAOC,KAAP,CAAa9C,CAAb,CAAgBE,CAAI,CAAC6C,IAAL,CAAUZ,CAAV,CAAhB,EACFL,IADE,CACG,UAAW,CACb,MAAOZ,CAAAA,CAAI,CAACS,WAAL,CAAiBqB,SAAS,CAACA,SAAS,CAACC,MAAV,CAAmB,CAApB,CAA1B,CACV,CAHE,EAIFC,IAJE,CAIG/C,CAAY,CAACgD,SAJhB,EAKFC,MALE,CAKK,UAAW,CACf,MAAOZ,CAAAA,CAAC,CAACC,IAAF,CAAOY,WAAP,CAAmBjB,CAAnB,CACV,CAPE,CAQV,CArBD,CA4BA7B,CAAW,CAACQ,SAAZ,CAAsBuC,SAAtB,CAAkC,SAASrC,CAAT,CAAmB,CACjD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIiB,CAAK,CAAG,CAAC,CACLS,UAAU,CAAE,6BADP,CAELzB,IAAI,CAAE,CAACE,EAAE,CAAEJ,CAAQ,CAACI,EAAd,CAFD,CAAD,CADZ,CAKAH,CAAI,CAACQ,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CAPD,CAcAV,CAAW,CAACQ,SAAZ,CAAsBwC,UAAtB,CAAmC,SAAStC,CAAT,CAAmB,CAClD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIsC,CADJ,CAGAA,CAAQ,CAAGtD,CAAI,CAAC6C,IAAL,CAAU,CAAC,CAClBH,UAAU,CAAE,2BADM,CAElBzB,IAAI,CAAE,CAACE,EAAE,CAAEJ,CAAQ,CAACI,EAAd,CAFY,CAAD,CAAV,CAAX,CAKAmC,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASC,CAAT,CAAe,CAC5BtD,CAAG,CAACuD,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,YAAN,CAAoBC,SAAS,CAAE,SAA/B,CAA0CC,KAAK,CAAEJ,CAAI,CAACK,IAAtD,CAFY,CAGZ,CAACH,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGJ,IALH,CAKQ,SAASO,CAAT,CAAkB,CACtB7D,CAAY,CAAC8D,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACP9C,CAAI,CAACoC,SAAL,CAAerC,CAAf,CACH,CAPL,CASH,CAfD,EAeGiC,IAfH,CAeQ/C,CAAY,CAACgD,SAfrB,CAgBH,CAjBD,EAiBGD,IAjBH,CAiBQ/C,CAAY,CAACgD,SAjBrB,CAmBH,CA5BD,CAmCA5C,CAAW,CAACQ,SAAZ,CAAsBmD,aAAtB,CAAsC,SAASjD,CAAT,CAAmB,CACrD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIiB,CAAK,CAAG,CAAC,CACLS,UAAU,CAAE,6BADP,CAELzB,IAAI,CAAE,CAACC,MAAM,CAAEH,CAAQ,CAACI,EAAlB,CAFD,CAAD,CADZ,CAKAH,CAAI,CAACQ,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CAPD,CAcAV,CAAW,CAACQ,SAAZ,CAAsBoD,UAAtB,CAAmC,SAASlD,CAAT,CAAmB,CAClD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIsC,CAAQ,CAAGtD,CAAI,CAAC6C,IAAL,CAAU,CAAC,CAClBH,UAAU,CAAE,2BADM,CAElBzB,IAAI,CAAE,CAACE,EAAE,CAAEJ,CAAQ,CAACI,EAAd,CAFY,CAAD,CAAV,CADf,CAMAmC,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASC,CAAT,CAAe,CAC5BtD,CAAG,CAACuD,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,mBAAN,CAA2BC,SAAS,CAAE,SAAtC,CAAiDC,KAAK,CAAEJ,CAAI,CAACK,IAA7D,CAFY,CAGZ,CAACH,GAAG,CAAE,YAAN,CAAoBC,SAAS,CAAE,SAA/B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGJ,IALH,CAKQ,SAASO,CAAT,CAAkB,CACtB7D,CAAY,CAAC8D,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACP9C,CAAI,CAACgD,aAAL,CAAmBjD,CAAnB,CACH,CAPL,CASH,CAfD,EAeGiC,IAfH,CAeQ/C,CAAY,CAACgD,SAfrB,CAgBH,CAjBD,EAiBGD,IAjBH,CAiBQ/C,CAAY,CAACgD,SAjBrB,CAmBH,CA1BD,CAiCA5C,CAAW,CAACQ,SAAZ,CAAsBqD,eAAtB,CAAwC,SAASnD,CAAT,CAAmB,CACvD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIiB,CAAK,CAAG,CAAC,CACLS,UAAU,CAAE,+BADP,CAELzB,IAAI,CAAE,CAACC,MAAM,CAAEH,CAAQ,CAACI,EAAlB,CAFD,CAAD,CADZ,CAKAH,CAAI,CAACQ,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CAPD,CAcAV,CAAW,CAACQ,SAAZ,CAAsBsD,YAAtB,CAAqC,SAASpD,CAAT,CAAmB,CACpD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIsC,CAAQ,CAAGtD,CAAI,CAAC6C,IAAL,CAAU,CAAC,CAClBH,UAAU,CAAE,2BADM,CAElBzB,IAAI,CAAE,CAACE,EAAE,CAAEJ,CAAQ,CAACI,EAAd,CAFY,CAAD,CAAV,CADf,CAMAmC,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASC,CAAT,CAAe,CAC5BtD,CAAG,CAACuD,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,qBAAN,CAA6BC,SAAS,CAAE,SAAxC,CAAmDC,KAAK,CAAEJ,CAAI,CAACK,IAA/D,CAFY,CAGZ,CAACH,GAAG,CAAE,cAAN,CAAsBC,SAAS,CAAE,SAAjC,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGJ,IALH,CAKQ,SAASO,CAAT,CAAkB,CACtB7D,CAAY,CAAC8D,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACP9C,CAAI,CAACkD,eAAL,CAAqBnD,CAArB,CACH,CAPL,CASH,CAfD,EAeGiC,IAfH,CAeQ/C,CAAY,CAACgD,SAfrB,CAgBH,CAjBD,EAiBGD,IAjBH,CAiBQ/C,CAAY,CAACgD,SAjBrB,CAkBH,CAzBD,CAgCA5C,CAAW,CAACQ,SAAZ,CAAsBuD,aAAtB,CAAsC,SAASrD,CAAT,CAAmB,CACrD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIiB,CAAK,CAAG,CAAC,CACLS,UAAU,CAAE,2CADP,CAELzB,IAAI,CAAE,CAACC,MAAM,CAAEH,CAAQ,CAACI,EAAlB,CAFD,CAAD,CADZ,CAKAH,CAAI,CAACQ,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CAPD,CAcAV,CAAW,CAACQ,SAAZ,CAAsBwD,UAAtB,CAAmC,SAAStD,CAAT,CAAmB,CAClD,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIsC,CAAQ,CAAGtD,CAAI,CAAC6C,IAAL,CAAU,CAAC,CAClBH,UAAU,CAAE,2BADM,CAElBzB,IAAI,CAAE,CAACE,EAAE,CAAEJ,CAAQ,CAACI,EAAd,CAFY,CAAD,CAAV,CADf,CAMAmC,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASC,CAAT,CAAe,CAC5BtD,CAAG,CAACuD,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,2BAAN,CAAmCC,SAAS,CAAE,SAA9C,CAAyDC,KAAK,CAAEJ,CAAI,CAACK,IAArE,CAFY,CAGZ,CAACH,GAAG,CAAE,oBAAN,CAA4BC,SAAS,CAAE,SAAvC,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGJ,IALH,CAKQ,SAASO,CAAT,CAAkB,CACtB7D,CAAY,CAAC8D,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACP9C,CAAI,CAACoD,aAAL,CAAmBrD,CAAnB,CACH,CAPL,CASH,CAfD,EAeGiC,IAfH,CAeQ/C,CAAY,CAACgD,SAfrB,CAgBH,CAjBD,EAiBGD,IAjBH,CAiBQ/C,CAAY,CAACgD,SAjBrB,CAkBH,CAzBD,CAiCA5C,CAAW,CAACQ,SAAZ,CAAsByD,gBAAtB,CAAyC,SAASvD,CAAT,CAAmB,CACxD,GAAIkB,CAAAA,CAAK,CAAG,CAAC,CACTS,UAAU,CAAE,qCADH,CAETzB,IAAI,CAAE,CACFE,EAAE,CAAEJ,CAAQ,CAACI,EADX,CAFG,CAAD,CAAZ,CAMA,KAAKK,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CARD,CAgBAV,CAAW,CAACQ,SAAZ,CAAsB0D,aAAtB,CAAsC,SAASxD,CAAT,CAAmB,CACrD,KAAKuD,gBAAL,CAAsBvD,CAAtB,CACH,CAFD,CAUAV,CAAW,CAACQ,SAAZ,CAAsB2D,sBAAtB,CAA+C,SAASzD,CAAT,CAAmB,CAC9D,GAAIkB,CAAAA,CAAK,CAAG,CAAC,CACTS,UAAU,CAAE,4CADH,CAETzB,IAAI,CAAE,CACFE,EAAE,CAAEJ,CAAQ,CAACI,EADX,CAFG,CAAD,CAAZ,CAMA,KAAKK,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CARD,CAgBAV,CAAW,CAACQ,SAAZ,CAAsB4D,mBAAtB,CAA4C,SAAS1D,CAAT,CAAmB,CAC3D,KAAKyD,sBAAL,CAA4BzD,CAA5B,CACH,CAFD,CAUAV,CAAW,CAACQ,SAAZ,CAAsB6D,cAAtB,CAAuC,SAAS3D,CAAT,CAAmB,CACtD,GAAIkB,CAAAA,CAAK,CAAG,CAAC,CACTS,UAAU,CAAE,mCADH,CAETzB,IAAI,CAAE,CACFE,EAAE,CAAEJ,CAAQ,CAACI,EADX,CAFG,CAAD,CAAZ,CAMA,KAAKK,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CARD,CAgBAV,CAAW,CAACQ,SAAZ,CAAsB8D,WAAtB,CAAoC,SAAS5D,CAAT,CAAmB,CACnD,KAAK2D,cAAL,CAAoB3D,CAApB,CACH,CAFD,CAUAV,CAAW,CAACQ,SAAZ,CAAsB+D,aAAtB,CAAsC,SAAS7D,CAAT,CAAmB,CACrD,GAAIkB,CAAAA,CAAK,CAAG,CAAC,CACTS,UAAU,CAAE,kCADH,CAETzB,IAAI,CAAE,CACFE,EAAE,CAAEJ,CAAQ,CAACI,EADX,CAFG,CAAD,CAAZ,CAMA,KAAKK,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CARD,CAgBAV,CAAW,CAACQ,SAAZ,CAAsBgE,UAAtB,CAAmC,SAAS9D,CAAT,CAAmB,CAClD,KAAK6D,aAAL,CAAmB7D,CAAnB,CACH,CAFD,CAUAV,CAAW,CAACQ,SAAZ,CAAsBiE,UAAtB,CAAmC,SAAS/D,CAAT,CAAmB,CAClD,GAAIkB,CAAAA,CAAK,CAAG,CAAC,CACTS,UAAU,CAAE,8BADH,CAETzB,IAAI,CAAE,CACFE,EAAE,CAAEJ,CAAQ,CAACI,EADX,CAFG,CAAD,CAAZ,CAMA,KAAKK,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CARD,CAgBAV,CAAW,CAACQ,SAAZ,CAAsBkE,OAAtB,CAAgC,SAAShE,CAAT,CAAmB,CAC/C,KAAK+D,UAAL,CAAgB/D,CAAhB,CACH,CAFD,CAUAV,CAAW,CAACQ,SAAZ,CAAsBmE,YAAtB,CAAqC,SAASjE,CAAT,CAAmB,CACpD,GAAIkB,CAAAA,CAAK,CAAG,CAAC,CACTS,UAAU,CAAE,gCADH,CAETzB,IAAI,CAAE,CACFE,EAAE,CAAEJ,CAAQ,CAACI,EADX,CAFG,CAAD,CAAZ,CAMA,KAAKK,eAAL,CAAqBS,CAArB,CAA4BlB,CAA5B,CACH,CARD,CAgBAV,CAAW,CAACQ,SAAZ,CAAsBoE,SAAtB,CAAkC,SAASlE,CAAT,CAAmB,CACjD,KAAKiE,YAAL,CAAkBjE,CAAlB,CACH,CAFD,CASAV,CAAW,CAACQ,SAAZ,CAAsBqE,yBAAtB,CAAkD,SAASC,CAAT,CAAY,CAC1DA,CAAC,CAACC,cAAF,GAD0D,GAGtDC,CAAAA,CAAY,CAAGvF,CAAC,CAACqF,CAAC,CAACG,MAAH,CAAD,CAAYC,IAAZ,CAAiB,IAAjB,CAHuC,CAItDjC,CAAQ,CAAGtD,CAAI,CAAC6C,IAAL,CAAU,CAAC,CACtBH,UAAU,CAAE,uCADU,CAEtBzB,IAAI,CAAE,CAACE,EAAE,CAAEkE,CAAL,CAFgB,CAAD,CAAV,CAJ2C,CAS1D/B,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASiC,CAAT,CAAkB,CAI/BzF,CAAS,CAAC4B,MAAV,CAAiB,gCAAjB,CAHc,CACV6D,OAAO,CAAEA,CADC,CAGd,EAA4DjC,IAA5D,CAAiE,SAASkC,CAAT,CAAe,CAC5EvF,CAAG,CAACwF,UAAJ,CAAe,eAAf,CAAgC,SAAhC,EAA2CnC,IAA3C,CAAgD,SAASoC,CAAT,CAAwB,CACpE,GAAIvF,CAAAA,CAAJ,CACIuF,CADJ,CAEIF,CAFJ,CAIH,CALD,EAKGzC,IALH,CAKQ/C,CAAY,CAACgD,SALrB,CAMH,CAPD,EAOGD,IAPH,CAOQ/C,CAAY,CAACgD,SAPrB,CAQH,CAZD,EAYGD,IAZH,CAYQ/C,CAAY,CAACgD,SAZrB,CAaH,CAtBD,CA+BA5C,CAAW,CAACQ,SAAZ,CAAsB+E,aAAtB,CAAsC,SAASC,CAAT,CAAiBV,CAAjB,CAAoB,CACtDA,CAAC,CAACC,cAAF,GACA,GAAIG,CAAAA,CAAI,CAAG,KAAKhE,aAAL,CAAmBzB,CAAC,CAACqF,CAAC,CAACG,MAAH,CAApB,CAAX,CACA,KAAKO,CAAL,EAAaN,CAAb,CACH,CAJD,CAYAlF,CAAW,CAACQ,SAAZ,CAAsBU,aAAtB,CAAsC,SAASuE,CAAT,CAAe,CACjD,GAAIC,CAAAA,CAAM,CAAGD,CAAI,CAACE,YAAL,CAAkBlG,CAAC,CAAC,KAAKU,OAAN,CAAD,CAAgBuF,MAAhB,EAAlB,CAA4C,KAAKtF,SAAjD,CAAb,CACI8E,CADJ,CAGA,GAAqB,CAAjB,EAAAQ,CAAM,CAAChD,MAAX,CAAwB,CACpB,KAAM,IAAIkD,CAAAA,KAAJ,CAAU,gCAAV,CACT,CAEDV,CAAI,CAAGQ,CAAM,CAACR,IAAP,EAAP,CACA,GAAoB,WAAhB,QAAOA,CAAAA,CAAP,EAAkD,WAAnB,QAAOA,CAAAA,CAAI,CAACpE,EAA/C,CAAmE,CAC/D,KAAM,IAAI8E,CAAAA,KAAJ,CAAU,+BAAV,CACT,CAED,MAAOV,CAAAA,CACV,CAdD,CAqBAlF,CAAW,CAACQ,SAAZ,CAAsBqF,cAAtB,CAAuC,SAAS5E,CAAT,CAAmB,CACtDnB,CAAO,CAACgG,OAAR,CAAgB7E,CAAhB,CAA0B,CACtB,8BAA+B,KAAKsE,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CADT,CAEtB,gCAAiC,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,cAA9B,CAFX,CAGtB,8BAA+B,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CAHT,CAItB,8BAA+B,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CAJT,CAKtB,sCAAuC,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,eAA9B,CALjB,CAMtB,6CAA8C,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,qBAA9B,CANxB,CAOtB,oCAAqC,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,aAA9B,CAPf,CAQtB,mCAAoC,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CARd,CAStB,+BAAgC,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,SAA9B,CATV,CAUtB,iCAAkC,KAAKR,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,WAA9B,CAVZ,CAA1B,CAYH,CAbD,CAqBA/F,CAAW,CAACQ,SAAZ,CAAsBwF,cAAtB,CAAuC,UAAW,CAC9C,GAAIC,CAAAA,CAAO,CAAGxG,CAAC,CAAC,KAAKU,OAAN,CAAf,CAEA8F,CAAO,CAACC,IAAR,CAAa,+BAAb,EAA4CC,KAA5C,CAAkD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CAAlD,EACAE,CAAO,CAACC,IAAR,CAAa,iCAAb,EAA8CC,KAA9C,CAAoD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,cAA9B,CAApD,EACAE,CAAO,CAACC,IAAR,CAAa,+BAAb,EAA4CC,KAA5C,CAAkD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CAAlD,EACAE,CAAO,CAACC,IAAR,CAAa,+BAAb,EAA4CC,KAA5C,CAAkD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CAAlD,EAEAE,CAAO,CAACC,IAAR,CAAa,uCAAb,EAAoDC,KAApD,CAA0D,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,eAA9B,CAA1D,EACAE,CAAO,CAACC,IAAR,CAAa,8CAAb,EAA2DC,KAA3D,CAAiE,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,qBAA9B,CAAjE,EACAE,CAAO,CAACC,IAAR,CAAa,qCAAb,EAAkDC,KAAlD,CAAwD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,aAA9B,CAAxD,EACAE,CAAO,CAACC,IAAR,CAAa,oCAAb,EAAiDC,KAAjD,CAAuD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,YAA9B,CAAvD,EACAE,CAAO,CAACC,IAAR,CAAa,gCAAb,EAA6CC,KAA7C,CAAmD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,SAA9B,CAAnD,EACAE,CAAO,CAACC,IAAR,CAAa,kCAAb,EAA+CC,KAA/C,CAAqD,KAAKZ,aAAL,CAAmBQ,IAAnB,CAAwB,IAAxB,CAA8B,WAA9B,CAArD,EAEAE,CAAO,CAACC,IAAR,CAAa,qCAAb,EAAkDC,KAAlD,CAAwD,KAAKtB,yBAAL,CAA+BkB,IAA/B,CAAoC,IAApC,CAAxD,CACH,CAhBD,CAkBA,MAAO/F,CAAAA,CACV,CAxkBK,CAAN","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 .\n\n/**\n * Plan actions via ajax.\n *\n * @module tool_lp/planactions\n * @package tool_lp\n * @copyright 2015 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/templates',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'tool_lp/menubar',\n 'tool_lp/dialogue'],\n function($, templates, ajax, notification, str, Menubar, Dialogue) {\n\n /**\n * PlanActions class.\n *\n * Note that presently this cannot be instantiated more than once per page.\n *\n * @param {String} type The type of page we're in.\n */\n var PlanActions = function(type) {\n this._type = type;\n\n if (type === 'plan') {\n // This is the page to view one plan.\n this._region = '[data-region=\"plan-page\"]';\n this._planNode = '[data-region=\"plan-page\"]';\n this._template = 'tool_lp/plan_page';\n this._contextMethod = 'tool_lp_data_for_plan_page';\n\n } else if (type === 'plans') {\n // This is the page to view a list of plans.\n this._region = '[data-region=\"plans\"]';\n this._planNode = '[data-region=\"plan-node\"]';\n this._template = 'tool_lp/plans_page';\n this._contextMethod = 'tool_lp_data_for_plans_page';\n\n } else {\n throw new TypeError('Unexpected type.');\n }\n };\n\n /** @type {String} Ajax method to fetch the page data from. */\n PlanActions.prototype._contextMethod = null;\n /** @type {String} Selector to find the node describing the plan. */\n PlanActions.prototype._planNode = null;\n /** @type {String} Selector mapping to the region to update. Usually similar to wrapper. */\n PlanActions.prototype._region = null;\n /** @type {String} Name of the template used to render the region. */\n PlanActions.prototype._template = null;\n /** @type {String} Type of page/region we're in. */\n PlanActions.prototype._type = null;\n\n /**\n * Resolve the arguments to refresh the region.\n *\n * @param {Object} planData Plan data from plan node.\n * @return {Object} List of arguments.\n */\n PlanActions.prototype._getContextArgs = function(planData) {\n var self = this,\n args = {};\n\n if (self._type === 'plan') {\n args = {\n planid: planData.id\n };\n\n } else if (self._type === 'plans') {\n args = {\n userid: planData.userid\n };\n }\n\n return args;\n };\n\n /**\n * Refresh the plan view.\n *\n * This is useful when you only want to refresh the view.\n *\n * @param {String} selector The node to search the plan data from.\n */\n PlanActions.prototype.refresh = function(selector) {\n var planData = this._findPlanData($(selector));\n this._callAndRefresh([], planData);\n };\n\n /**\n * Callback to render the region template.\n *\n * @param {Object} context The context for the template.\n * @return {Promise}\n */\n PlanActions.prototype._renderView = function(context) {\n var self = this;\n return templates.render(self._template, context)\n .then(function(newhtml, newjs) {\n $(self._region).replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n return;\n });\n };\n\n /**\n * Call multiple ajax methods, and refresh.\n *\n * @param {Array} calls List of Ajax calls.\n * @param {Object} planData Plan data from plan node.\n * @return {Promise}\n */\n PlanActions.prototype._callAndRefresh = function(calls, planData) {\n // Because this function causes a refresh, we must track the JS completion from start to finish to prevent\n // stale reference issues in Behat.\n var callKey = 'tool_lp/planactions:_callAndRefresh-' + Math.floor(Math.random() * Math.floor(1000));\n M.util.js_pending(callKey);\n\n var self = this;\n calls.push({\n methodname: self._contextMethod,\n args: self._getContextArgs(planData)\n });\n\n // Apply all the promises, and refresh when the last one is resolved.\n return $.when.apply($, ajax.call(calls))\n .then(function() {\n return self._renderView(arguments[arguments.length - 1]);\n })\n .fail(notification.exception)\n .always(function() {\n return M.util.js_complete(callKey);\n });\n };\n\n /**\n * Delete a plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doDelete = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_delete_plan',\n args: {id: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Delete a plan.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.deletePlan = function(planData) {\n var self = this,\n requests;\n\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deleteplan', component: 'tool_lp', param: plan.name},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete plan X?\n strings[2], // Delete.\n strings[3], // Cancel.\n function() {\n self._doDelete(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Reopen plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doReopenPlan = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_reopen_plan',\n args: {planid: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Reopen a plan.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.reopenPlan = function(planData) {\n var self = this,\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'reopenplanconfirm', component: 'tool_lp', param: plan.name},\n {key: 'reopenplan', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Reopen plan X?\n strings[2], // Reopen.\n strings[3], // Cancel.\n function() {\n self._doReopenPlan(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Complete plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doCompletePlan = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_complete_plan',\n args: {planid: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Complete a plan process.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.completePlan = function(planData) {\n var self = this,\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'completeplanconfirm', component: 'tool_lp', param: plan.name},\n {key: 'completeplan', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Complete plan X?\n strings[2], // Complete.\n strings[3], // Cancel.\n function() {\n self._doCompletePlan(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Unlink plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doUnlinkPlan = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_unlink_plan_from_template',\n args: {planid: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Unlink a plan process.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.unlinkPlan = function(planData) {\n var self = this,\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'unlinkplantemplateconfirm', component: 'tool_lp', param: plan.name},\n {key: 'unlinkplantemplate', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Unlink plan X?\n strings[2], // Unlink.\n strings[3], // Cancel.\n function() {\n self._doUnlinkPlan(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Request review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doRequestReview\n */\n PlanActions.prototype._doRequestReview = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_request_review',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Request review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method requestReview\n */\n PlanActions.prototype.requestReview = function(planData) {\n this._doRequestReview(planData);\n };\n\n /**\n * Cancel review request of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doCancelReviewRequest\n */\n PlanActions.prototype._doCancelReviewRequest = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_cancel_review_request',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Cancel review request of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method cancelReviewRequest\n */\n PlanActions.prototype.cancelReviewRequest = function(planData) {\n this._doCancelReviewRequest(planData);\n };\n\n /**\n * Start review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doStartReview\n */\n PlanActions.prototype._doStartReview = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_start_review',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Start review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method startReview\n */\n PlanActions.prototype.startReview = function(planData) {\n this._doStartReview(planData);\n };\n\n /**\n * Stop review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doStopReview\n */\n PlanActions.prototype._doStopReview = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_stop_review',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Stop review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method stopReview\n */\n PlanActions.prototype.stopReview = function(planData) {\n this._doStopReview(planData);\n };\n\n /**\n * Approve a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doApprove\n */\n PlanActions.prototype._doApprove = function(planData) {\n var calls = [{\n methodname: 'core_competency_approve_plan',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Approve a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method approve\n */\n PlanActions.prototype.approve = function(planData) {\n this._doApprove(planData);\n };\n\n /**\n * Unapprove a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doUnapprove\n */\n PlanActions.prototype._doUnapprove = function(planData) {\n var calls = [{\n methodname: 'core_competency_unapprove_plan',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Unapprove a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method unapprove\n */\n PlanActions.prototype.unapprove = function(planData) {\n this._doUnapprove(planData);\n };\n\n /**\n * Display list of linked courses on a modal dialogue.\n *\n * @param {Event} e The event.\n */\n PlanActions.prototype._showLinkedCoursesHandler = function(e) {\n e.preventDefault();\n\n var competencyid = $(e.target).data('id');\n var requests = ajax.call([{\n methodname: 'tool_lp_list_courses_using_competency',\n args: {id: competencyid}\n }]);\n\n requests[0].done(function(courses) {\n var context = {\n courses: courses\n };\n templates.render('tool_lp/linked_courses_summary', context).done(function(html) {\n str.get_string('linkedcourses', 'tool_lp').done(function(linkedcourses) {\n new Dialogue(\n linkedcourses, // Title.\n html // The linked courses.\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Plan event handler.\n *\n * @param {String} method The method to call.\n * @param {Event} e The event.\n * @method _eventHandler\n */\n PlanActions.prototype._eventHandler = function(method, e) {\n e.preventDefault();\n var data = this._findPlanData($(e.target));\n this[method](data);\n };\n\n /**\n * Find the plan data from the plan node.\n *\n * @param {Node} node The node to search from.\n * @return {Object} Plan data.\n */\n PlanActions.prototype._findPlanData = function(node) {\n var parent = node.parentsUntil($(this._region).parent(), this._planNode),\n data;\n\n if (parent.length != 1) {\n throw new Error('The plan node was not located.');\n }\n\n data = parent.data();\n if (typeof data === 'undefined' || typeof data.id === 'undefined') {\n throw new Error('Plan data could not be found.');\n }\n\n return data;\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n PlanActions.prototype.enhanceMenubar = function(selector) {\n Menubar.enhance(selector, {\n '[data-action=\"plan-delete\"]': this._eventHandler.bind(this, 'deletePlan'),\n '[data-action=\"plan-complete\"]': this._eventHandler.bind(this, 'completePlan'),\n '[data-action=\"plan-reopen\"]': this._eventHandler.bind(this, 'reopenPlan'),\n '[data-action=\"plan-unlink\"]': this._eventHandler.bind(this, 'unlinkPlan'),\n '[data-action=\"plan-request-review\"]': this._eventHandler.bind(this, 'requestReview'),\n '[data-action=\"plan-cancel-review-request\"]': this._eventHandler.bind(this, 'cancelReviewRequest'),\n '[data-action=\"plan-start-review\"]': this._eventHandler.bind(this, 'startReview'),\n '[data-action=\"plan-stop-review\"]': this._eventHandler.bind(this, 'stopReview'),\n '[data-action=\"plan-approve\"]': this._eventHandler.bind(this, 'approve'),\n '[data-action=\"plan-unapprove\"]': this._eventHandler.bind(this, 'unapprove'),\n });\n };\n\n /**\n * Register the events in the region.\n *\n * At this stage this cannot be used with enhanceMenubar or multiple handlers\n * will be added to the same node.\n */\n PlanActions.prototype.registerEvents = function() {\n var wrapper = $(this._region);\n\n wrapper.find('[data-action=\"plan-delete\"]').click(this._eventHandler.bind(this, 'deletePlan'));\n wrapper.find('[data-action=\"plan-complete\"]').click(this._eventHandler.bind(this, 'completePlan'));\n wrapper.find('[data-action=\"plan-reopen\"]').click(this._eventHandler.bind(this, 'reopenPlan'));\n wrapper.find('[data-action=\"plan-unlink\"]').click(this._eventHandler.bind(this, 'unlinkPlan'));\n\n wrapper.find('[data-action=\"plan-request-review\"]').click(this._eventHandler.bind(this, 'requestReview'));\n wrapper.find('[data-action=\"plan-cancel-review-request\"]').click(this._eventHandler.bind(this, 'cancelReviewRequest'));\n wrapper.find('[data-action=\"plan-start-review\"]').click(this._eventHandler.bind(this, 'startReview'));\n wrapper.find('[data-action=\"plan-stop-review\"]').click(this._eventHandler.bind(this, 'stopReview'));\n wrapper.find('[data-action=\"plan-approve\"]').click(this._eventHandler.bind(this, 'approve'));\n wrapper.find('[data-action=\"plan-unapprove\"]').click(this._eventHandler.bind(this, 'unapprove'));\n\n wrapper.find('[data-action=\"find-courses-link\"]').click(this._showLinkedCoursesHandler.bind(this));\n };\n\n return PlanActions;\n});\n"],"file":"planactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/planactions.js"],"names":["define","$","templates","ajax","notification","str","Menubar","Dialogue","PlanActions","type","_type","_region","_planNode","_template","_contextMethod","TypeError","prototype","_getContextArgs","planData","self","args","planid","id","userid","refresh","selector","_findPlanData","_callAndRefresh","_renderView","context","render","then","newhtml","newjs","replaceWith","runTemplateJS","calls","callKey","Math","floor","random","M","util","js_pending","push","methodname","when","apply","call","arguments","length","fail","exception","always","js_complete","_doDelete","deletePlan","requests","done","plan","get_strings","key","component","param","name","strings","confirm","_doReopenPlan","reopenPlan","_doCompletePlan","completePlan","_doUnlinkPlan","unlinkPlan","_doRequestReview","requestReview","_doCancelReviewRequest","cancelReviewRequest","_doStartReview","startReview","_doStopReview","stopReview","_doApprove","approve","_doUnapprove","unapprove","_showLinkedCoursesHandler","e","preventDefault","competencyid","target","data","courses","html","get_string","linkedcourses","_eventHandler","method","node","parent","parentsUntil","Error","enhanceMenubar","enhance","bind","registerEvents","wrapper","find","click"],"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 .\n\n/**\n * Plan actions via ajax.\n *\n * @module tool_lp/planactions\n * @copyright 2015 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/templates',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'tool_lp/menubar',\n 'tool_lp/dialogue'],\n function($, templates, ajax, notification, str, Menubar, Dialogue) {\n\n /**\n * PlanActions class.\n *\n * Note that presently this cannot be instantiated more than once per page.\n *\n * @param {String} type The type of page we're in.\n */\n var PlanActions = function(type) {\n this._type = type;\n\n if (type === 'plan') {\n // This is the page to view one plan.\n this._region = '[data-region=\"plan-page\"]';\n this._planNode = '[data-region=\"plan-page\"]';\n this._template = 'tool_lp/plan_page';\n this._contextMethod = 'tool_lp_data_for_plan_page';\n\n } else if (type === 'plans') {\n // This is the page to view a list of plans.\n this._region = '[data-region=\"plans\"]';\n this._planNode = '[data-region=\"plan-node\"]';\n this._template = 'tool_lp/plans_page';\n this._contextMethod = 'tool_lp_data_for_plans_page';\n\n } else {\n throw new TypeError('Unexpected type.');\n }\n };\n\n /** @property {String} Ajax method to fetch the page data from. */\n PlanActions.prototype._contextMethod = null;\n /** @property {String} Selector to find the node describing the plan. */\n PlanActions.prototype._planNode = null;\n /** @property {String} Selector mapping to the region to update. Usually similar to wrapper. */\n PlanActions.prototype._region = null;\n /** @property {String} Name of the template used to render the region. */\n PlanActions.prototype._template = null;\n /** @property {String} Type of page/region we're in. */\n PlanActions.prototype._type = null;\n\n /**\n * Resolve the arguments to refresh the region.\n *\n * @param {Object} planData Plan data from plan node.\n * @return {Object} List of arguments.\n */\n PlanActions.prototype._getContextArgs = function(planData) {\n var self = this,\n args = {};\n\n if (self._type === 'plan') {\n args = {\n planid: planData.id\n };\n\n } else if (self._type === 'plans') {\n args = {\n userid: planData.userid\n };\n }\n\n return args;\n };\n\n /**\n * Refresh the plan view.\n *\n * This is useful when you only want to refresh the view.\n *\n * @param {String} selector The node to search the plan data from.\n */\n PlanActions.prototype.refresh = function(selector) {\n var planData = this._findPlanData($(selector));\n this._callAndRefresh([], planData);\n };\n\n /**\n * Callback to render the region template.\n *\n * @param {Object} context The context for the template.\n * @return {Promise}\n */\n PlanActions.prototype._renderView = function(context) {\n var self = this;\n return templates.render(self._template, context)\n .then(function(newhtml, newjs) {\n $(self._region).replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n return;\n });\n };\n\n /**\n * Call multiple ajax methods, and refresh.\n *\n * @param {Array} calls List of Ajax calls.\n * @param {Object} planData Plan data from plan node.\n * @return {Promise}\n */\n PlanActions.prototype._callAndRefresh = function(calls, planData) {\n // Because this function causes a refresh, we must track the JS completion from start to finish to prevent\n // stale reference issues in Behat.\n var callKey = 'tool_lp/planactions:_callAndRefresh-' + Math.floor(Math.random() * Math.floor(1000));\n M.util.js_pending(callKey);\n\n var self = this;\n calls.push({\n methodname: self._contextMethod,\n args: self._getContextArgs(planData)\n });\n\n // Apply all the promises, and refresh when the last one is resolved.\n return $.when.apply($, ajax.call(calls))\n .then(function() {\n return self._renderView(arguments[arguments.length - 1]);\n })\n .fail(notification.exception)\n .always(function() {\n return M.util.js_complete(callKey);\n });\n };\n\n /**\n * Delete a plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doDelete = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_delete_plan',\n args: {id: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Delete a plan.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.deletePlan = function(planData) {\n var self = this,\n requests;\n\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deleteplan', component: 'tool_lp', param: plan.name},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete plan X?\n strings[2], // Delete.\n strings[3], // Cancel.\n function() {\n self._doDelete(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Reopen plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doReopenPlan = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_reopen_plan',\n args: {planid: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Reopen a plan.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.reopenPlan = function(planData) {\n var self = this,\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'reopenplanconfirm', component: 'tool_lp', param: plan.name},\n {key: 'reopenplan', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Reopen plan X?\n strings[2], // Reopen.\n strings[3], // Cancel.\n function() {\n self._doReopenPlan(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Complete plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doCompletePlan = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_complete_plan',\n args: {planid: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Complete a plan process.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.completePlan = function(planData) {\n var self = this,\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'completeplanconfirm', component: 'tool_lp', param: plan.name},\n {key: 'completeplan', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Complete plan X?\n strings[2], // Complete.\n strings[3], // Cancel.\n function() {\n self._doCompletePlan(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Unlink plan and reload the region.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype._doUnlinkPlan = function(planData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_unlink_plan_from_template',\n args: {planid: planData.id}\n }];\n self._callAndRefresh(calls, planData);\n };\n\n /**\n * Unlink a plan process.\n *\n * @param {Object} planData Plan data from plan node.\n */\n PlanActions.prototype.unlinkPlan = function(planData) {\n var self = this,\n requests = ajax.call([{\n methodname: 'core_competency_read_plan',\n args: {id: planData.id}\n }]);\n\n requests[0].done(function(plan) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'unlinkplantemplateconfirm', component: 'tool_lp', param: plan.name},\n {key: 'unlinkplantemplate', component: 'tool_lp'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Unlink plan X?\n strings[2], // Unlink.\n strings[3], // Cancel.\n function() {\n self._doUnlinkPlan(planData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Request review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doRequestReview\n */\n PlanActions.prototype._doRequestReview = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_request_review',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Request review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method requestReview\n */\n PlanActions.prototype.requestReview = function(planData) {\n this._doRequestReview(planData);\n };\n\n /**\n * Cancel review request of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doCancelReviewRequest\n */\n PlanActions.prototype._doCancelReviewRequest = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_cancel_review_request',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Cancel review request of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method cancelReviewRequest\n */\n PlanActions.prototype.cancelReviewRequest = function(planData) {\n this._doCancelReviewRequest(planData);\n };\n\n /**\n * Start review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doStartReview\n */\n PlanActions.prototype._doStartReview = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_start_review',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Start review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method startReview\n */\n PlanActions.prototype.startReview = function(planData) {\n this._doStartReview(planData);\n };\n\n /**\n * Stop review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doStopReview\n */\n PlanActions.prototype._doStopReview = function(planData) {\n var calls = [{\n methodname: 'core_competency_plan_stop_review',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Stop review of a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method stopReview\n */\n PlanActions.prototype.stopReview = function(planData) {\n this._doStopReview(planData);\n };\n\n /**\n * Approve a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doApprove\n */\n PlanActions.prototype._doApprove = function(planData) {\n var calls = [{\n methodname: 'core_competency_approve_plan',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Approve a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method approve\n */\n PlanActions.prototype.approve = function(planData) {\n this._doApprove(planData);\n };\n\n /**\n * Unapprove a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method _doUnapprove\n */\n PlanActions.prototype._doUnapprove = function(planData) {\n var calls = [{\n methodname: 'core_competency_unapprove_plan',\n args: {\n id: planData.id\n }\n }];\n this._callAndRefresh(calls, planData);\n };\n\n /**\n * Unapprove a plan.\n *\n * @param {Object} planData Plan data from plan node.\n * @method unapprove\n */\n PlanActions.prototype.unapprove = function(planData) {\n this._doUnapprove(planData);\n };\n\n /**\n * Display list of linked courses on a modal dialogue.\n *\n * @param {Event} e The event.\n */\n PlanActions.prototype._showLinkedCoursesHandler = function(e) {\n e.preventDefault();\n\n var competencyid = $(e.target).data('id');\n var requests = ajax.call([{\n methodname: 'tool_lp_list_courses_using_competency',\n args: {id: competencyid}\n }]);\n\n requests[0].done(function(courses) {\n var context = {\n courses: courses\n };\n templates.render('tool_lp/linked_courses_summary', context).done(function(html) {\n str.get_string('linkedcourses', 'tool_lp').done(function(linkedcourses) {\n new Dialogue(\n linkedcourses, // Title.\n html // The linked courses.\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Plan event handler.\n *\n * @param {String} method The method to call.\n * @param {Event} e The event.\n * @method _eventHandler\n */\n PlanActions.prototype._eventHandler = function(method, e) {\n e.preventDefault();\n var data = this._findPlanData($(e.target));\n this[method](data);\n };\n\n /**\n * Find the plan data from the plan node.\n *\n * @param {Node} node The node to search from.\n * @return {Object} Plan data.\n */\n PlanActions.prototype._findPlanData = function(node) {\n var parent = node.parentsUntil($(this._region).parent(), this._planNode),\n data;\n\n if (parent.length != 1) {\n throw new Error('The plan node was not located.');\n }\n\n data = parent.data();\n if (typeof data === 'undefined' || typeof data.id === 'undefined') {\n throw new Error('Plan data could not be found.');\n }\n\n return data;\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n PlanActions.prototype.enhanceMenubar = function(selector) {\n Menubar.enhance(selector, {\n '[data-action=\"plan-delete\"]': this._eventHandler.bind(this, 'deletePlan'),\n '[data-action=\"plan-complete\"]': this._eventHandler.bind(this, 'completePlan'),\n '[data-action=\"plan-reopen\"]': this._eventHandler.bind(this, 'reopenPlan'),\n '[data-action=\"plan-unlink\"]': this._eventHandler.bind(this, 'unlinkPlan'),\n '[data-action=\"plan-request-review\"]': this._eventHandler.bind(this, 'requestReview'),\n '[data-action=\"plan-cancel-review-request\"]': this._eventHandler.bind(this, 'cancelReviewRequest'),\n '[data-action=\"plan-start-review\"]': this._eventHandler.bind(this, 'startReview'),\n '[data-action=\"plan-stop-review\"]': this._eventHandler.bind(this, 'stopReview'),\n '[data-action=\"plan-approve\"]': this._eventHandler.bind(this, 'approve'),\n '[data-action=\"plan-unapprove\"]': this._eventHandler.bind(this, 'unapprove'),\n });\n };\n\n /**\n * Register the events in the region.\n *\n * At this stage this cannot be used with enhanceMenubar or multiple handlers\n * will be added to the same node.\n */\n PlanActions.prototype.registerEvents = function() {\n var wrapper = $(this._region);\n\n wrapper.find('[data-action=\"plan-delete\"]').click(this._eventHandler.bind(this, 'deletePlan'));\n wrapper.find('[data-action=\"plan-complete\"]').click(this._eventHandler.bind(this, 'completePlan'));\n wrapper.find('[data-action=\"plan-reopen\"]').click(this._eventHandler.bind(this, 'reopenPlan'));\n wrapper.find('[data-action=\"plan-unlink\"]').click(this._eventHandler.bind(this, 'unlinkPlan'));\n\n wrapper.find('[data-action=\"plan-request-review\"]').click(this._eventHandler.bind(this, 'requestReview'));\n wrapper.find('[data-action=\"plan-cancel-review-request\"]').click(this._eventHandler.bind(this, 'cancelReviewRequest'));\n wrapper.find('[data-action=\"plan-start-review\"]').click(this._eventHandler.bind(this, 'startReview'));\n wrapper.find('[data-action=\"plan-stop-review\"]').click(this._eventHandler.bind(this, 'stopReview'));\n wrapper.find('[data-action=\"plan-approve\"]').click(this._eventHandler.bind(this, 'approve'));\n wrapper.find('[data-action=\"plan-unapprove\"]').click(this._eventHandler.bind(this, 'unapprove'));\n\n wrapper.find('[data-action=\"find-courses-link\"]').click(this._showLinkedCoursesHandler.bind(this));\n };\n\n return PlanActions;\n});\n"],"file":"planactions.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/scaleconfig.min.js.map b/admin/tool/lp/amd/build/scaleconfig.min.js.map index e5cae053216..73df75a279d 100644 --- a/admin/tool/lp/amd/build/scaleconfig.min.js.map +++ b/admin/tool/lp/amd/build/scaleconfig.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/scaleconfig.js"],"names":["define","$","notification","templates","ajax","Dialogue","ModScaleValues","ScaleConfig","selectSelector","inputSelector","triggerSelector","originalscaleid","val","on","scaleChangeHandler","bind","change","click","showConfig","prototype","scalevalues","scaleid","popup","self","scalename","find","text","getScaleValues","done","context","scales","render","html","initScaleConfig","fail","exception","retrieveOriginalScaleConfig","jsonstring","scaleconfiguration","parseJSON","scaledetail","shift","body","getContent","currentconfig","forEach","value","scaledefault","id","attr","proficient","setScaleConfig","close","data","is","push","datastring","JSON","stringify","get_values","then","values","e","target","prop","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 .\n\n/**\n * Handle opening a dialogue to configure scale data.\n *\n * @module tool_lp/scaleconfig\n * @package tool_lp\n * @copyright 2015 Adrian Greeve \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/notification', 'core/templates', 'core/ajax', 'tool_lp/dialogue', 'tool_lp/scalevalues'],\n function($, notification, templates, ajax, Dialogue, ModScaleValues) {\n\n /**\n * Scale config object.\n * @param {String} selectSelector The select box selector.\n * @param {String} inputSelector The hidden input field selector.\n * @param {String} triggerSelector The trigger selector.\n */\n var ScaleConfig = function(selectSelector, inputSelector, triggerSelector) {\n this.selectSelector = selectSelector;\n this.inputSelector = inputSelector;\n this.triggerSelector = triggerSelector;\n\n // Get the current scale ID.\n this.originalscaleid = $(selectSelector).val();\n $(selectSelector).on('change', this.scaleChangeHandler.bind(this)).change();\n $(triggerSelector).click(this.showConfig.bind(this));\n };\n\n /** @var {String} The select box selector. */\n ScaleConfig.prototype.selectSelector = null;\n /** @var {String} The hidden field selector. */\n ScaleConfig.prototype.inputSelector = null;\n /** @var {String} The trigger selector. */\n ScaleConfig.prototype.triggerSelector = null;\n /** @var {Array} scalevalues ID and name of the scales. */\n ScaleConfig.prototype.scalevalues = null;\n /** @var {Number) originalscaleid Original scale ID when the page loads. */\n ScaleConfig.prototype.originalscaleid = 0;\n /** @var {Number} scaleid Current scale ID. */\n ScaleConfig.prototype.scaleid = 0;\n /** @var {Dialogue} Reference to the popup. */\n ScaleConfig.prototype.popup = null;\n\n /**\n * Displays the scale configuration dialogue.\n *\n * @method showConfig\n */\n ScaleConfig.prototype.showConfig = function() {\n var self = this;\n\n this.scaleid = $(this.selectSelector).val();\n if (this.scaleid <= 0) {\n // This should not happen.\n return;\n }\n\n var scalename = $(this.selectSelector).find(\"option:selected\").text();\n this.getScaleValues(this.scaleid).done(function() {\n\n var context = {\n scalename: scalename,\n scales: self.scalevalues\n };\n\n // Dish up the form.\n templates.render('tool_lp/scale_configuration_page', context)\n .done(function(html) {\n new Dialogue(\n scalename,\n html,\n self.initScaleConfig.bind(self)\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Gets the original scale configuration if it was set.\n *\n * @method retrieveOriginalScaleConfig\n * @return {Object|String} scale configuration or empty string.\n */\n ScaleConfig.prototype.retrieveOriginalScaleConfig = function() {\n var jsonstring = $(this.inputSelector).val();\n if (jsonstring !== '') {\n var scaleconfiguration = $.parseJSON(jsonstring);\n // The first object should contain the scale ID for the configuration.\n var scaledetail = scaleconfiguration.shift();\n // Check that this scale id matches the one from the page before returning the configuration.\n if (scaledetail.scaleid === this.originalscaleid) {\n return scaleconfiguration;\n }\n }\n return '';\n };\n\n /**\n * Initialises the scale configuration dialogue.\n *\n * @method initScaleConfig\n * @param {Dialogue} popup Dialogue object to initialise.\n */\n ScaleConfig.prototype.initScaleConfig = function(popup) {\n this.popup = popup;\n var body = $(popup.getContent());\n if (this.originalscaleid === this.scaleid) {\n // Set up the popup to show the current configuration.\n var currentconfig = this.retrieveOriginalScaleConfig();\n // Set up the form only if there is configuration settings to set.\n if (currentconfig !== '') {\n currentconfig.forEach(function(value) {\n if (value.scaledefault === 1) {\n body.find('[data-field=\"tool_lp_scale_default_' + value.id + '\"]').attr('checked', true);\n }\n if (value.proficient === 1) {\n body.find('[data-field=\"tool_lp_scale_proficient_' + value.id + '\"]').attr('checked', true);\n }\n });\n }\n }\n body.on('click', '[data-action=\"close\"]', function() {\n this.setScaleConfig();\n popup.close();\n }.bind(this));\n body.on('click', '[data-action=\"cancel\"]', function() {\n popup.close();\n });\n };\n\n /**\n * Set the scale configuration back into a JSON string in the hidden element.\n *\n * @method setScaleConfig\n */\n ScaleConfig.prototype.setScaleConfig = function() {\n var body = $(this.popup.getContent());\n // Get the data.\n var data = [{scaleid: this.scaleid}];\n this.scalevalues.forEach(function(value) {\n var scaledefault = 0;\n var proficient = 0;\n if (body.find('[data-field=\"tool_lp_scale_default_' + value.id + '\"]').is(':checked')) {\n scaledefault = 1;\n }\n if (body.find('[data-field=\"tool_lp_scale_proficient_' + value.id + '\"]').is(':checked')) {\n proficient = 1;\n }\n\n if (!scaledefault && !proficient) {\n return;\n }\n\n data.push({\n id: value.id,\n scaledefault: scaledefault,\n proficient: proficient\n });\n });\n var datastring = JSON.stringify(data);\n // Send to the hidden field on the form.\n $(this.inputSelector).val(datastring);\n // Once the configuration has been saved then the original scale ID is set to the current scale ID.\n this.originalscaleid = this.scaleid;\n };\n\n /**\n * Get the scale values for the selected scale.\n *\n * @method getScaleValues\n * @param {Number} scaleid The scale ID of the selected scale.\n * @return {Promise} A deffered object with the scale values.\n */\n ScaleConfig.prototype.getScaleValues = function(scaleid) {\n return ModScaleValues.get_values(scaleid).then(function(values) {\n this.scalevalues = values;\n return values;\n }.bind(this));\n };\n\n /**\n * Triggered when a scale is selected.\n *\n * @name scaleChangeHandler\n * @param {Event} e\n * @function\n */\n ScaleConfig.prototype.scaleChangeHandler = function(e) {\n if ($(e.target).val() <= 0) {\n $(this.triggerSelector).prop('disabled', true);\n } else {\n $(this.triggerSelector).prop('disabled', false);\n }\n\n };\n\n return {\n\n /**\n * Main initialisation.\n *\n * @param {String} selectSelector The select box selector.\n * @param {String} inputSelector The hidden input field selector.\n * @param {String} triggerSelector The trigger selector.\n * @return {ScaleConfig} A new instance of ScaleConfig.\n * @method init\n */\n init: function(selectSelector, inputSelector, triggerSelector) {\n return new ScaleConfig(selectSelector, inputSelector, triggerSelector);\n }\n };\n});\n"],"file":"scaleconfig.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/scaleconfig.js"],"names":["define","$","notification","templates","ajax","Dialogue","ModScaleValues","ScaleConfig","selectSelector","inputSelector","triggerSelector","originalscaleid","val","on","scaleChangeHandler","bind","change","click","showConfig","prototype","scalevalues","scaleid","popup","self","scalename","find","text","getScaleValues","done","context","scales","render","html","initScaleConfig","fail","exception","retrieveOriginalScaleConfig","jsonstring","scaleconfiguration","parseJSON","scaledetail","shift","body","getContent","currentconfig","forEach","value","scaledefault","id","attr","proficient","setScaleConfig","close","data","is","push","datastring","JSON","stringify","get_values","then","values","e","target","prop","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 .\n\n/**\n * Handle opening a dialogue to configure scale data.\n *\n * @module tool_lp/scaleconfig\n * @copyright 2015 Adrian Greeve \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/notification', 'core/templates', 'core/ajax', 'tool_lp/dialogue', 'tool_lp/scalevalues'],\n function($, notification, templates, ajax, Dialogue, ModScaleValues) {\n\n /**\n * Scale config object.\n * @param {String} selectSelector The select box selector.\n * @param {String} inputSelector The hidden input field selector.\n * @param {String} triggerSelector The trigger selector.\n */\n var ScaleConfig = function(selectSelector, inputSelector, triggerSelector) {\n this.selectSelector = selectSelector;\n this.inputSelector = inputSelector;\n this.triggerSelector = triggerSelector;\n\n // Get the current scale ID.\n this.originalscaleid = $(selectSelector).val();\n $(selectSelector).on('change', this.scaleChangeHandler.bind(this)).change();\n $(triggerSelector).click(this.showConfig.bind(this));\n };\n\n /** @var {String} The select box selector. */\n ScaleConfig.prototype.selectSelector = null;\n /** @var {String} The hidden field selector. */\n ScaleConfig.prototype.inputSelector = null;\n /** @var {String} The trigger selector. */\n ScaleConfig.prototype.triggerSelector = null;\n /** @var {Array} scalevalues ID and name of the scales. */\n ScaleConfig.prototype.scalevalues = null;\n /** @var {Number) originalscaleid Original scale ID when the page loads. */\n ScaleConfig.prototype.originalscaleid = 0;\n /** @var {Number} scaleid Current scale ID. */\n ScaleConfig.prototype.scaleid = 0;\n /** @var {Dialogue} Reference to the popup. */\n ScaleConfig.prototype.popup = null;\n\n /**\n * Displays the scale configuration dialogue.\n *\n * @method showConfig\n */\n ScaleConfig.prototype.showConfig = function() {\n var self = this;\n\n this.scaleid = $(this.selectSelector).val();\n if (this.scaleid <= 0) {\n // This should not happen.\n return;\n }\n\n var scalename = $(this.selectSelector).find(\"option:selected\").text();\n this.getScaleValues(this.scaleid).done(function() {\n\n var context = {\n scalename: scalename,\n scales: self.scalevalues\n };\n\n // Dish up the form.\n templates.render('tool_lp/scale_configuration_page', context)\n .done(function(html) {\n new Dialogue(\n scalename,\n html,\n self.initScaleConfig.bind(self)\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Gets the original scale configuration if it was set.\n *\n * @method retrieveOriginalScaleConfig\n * @return {Object|String} scale configuration or empty string.\n */\n ScaleConfig.prototype.retrieveOriginalScaleConfig = function() {\n var jsonstring = $(this.inputSelector).val();\n if (jsonstring !== '') {\n var scaleconfiguration = $.parseJSON(jsonstring);\n // The first object should contain the scale ID for the configuration.\n var scaledetail = scaleconfiguration.shift();\n // Check that this scale id matches the one from the page before returning the configuration.\n if (scaledetail.scaleid === this.originalscaleid) {\n return scaleconfiguration;\n }\n }\n return '';\n };\n\n /**\n * Initialises the scale configuration dialogue.\n *\n * @method initScaleConfig\n * @param {Dialogue} popup Dialogue object to initialise.\n */\n ScaleConfig.prototype.initScaleConfig = function(popup) {\n this.popup = popup;\n var body = $(popup.getContent());\n if (this.originalscaleid === this.scaleid) {\n // Set up the popup to show the current configuration.\n var currentconfig = this.retrieveOriginalScaleConfig();\n // Set up the form only if there is configuration settings to set.\n if (currentconfig !== '') {\n currentconfig.forEach(function(value) {\n if (value.scaledefault === 1) {\n body.find('[data-field=\"tool_lp_scale_default_' + value.id + '\"]').attr('checked', true);\n }\n if (value.proficient === 1) {\n body.find('[data-field=\"tool_lp_scale_proficient_' + value.id + '\"]').attr('checked', true);\n }\n });\n }\n }\n body.on('click', '[data-action=\"close\"]', function() {\n this.setScaleConfig();\n popup.close();\n }.bind(this));\n body.on('click', '[data-action=\"cancel\"]', function() {\n popup.close();\n });\n };\n\n /**\n * Set the scale configuration back into a JSON string in the hidden element.\n *\n * @method setScaleConfig\n */\n ScaleConfig.prototype.setScaleConfig = function() {\n var body = $(this.popup.getContent());\n // Get the data.\n var data = [{scaleid: this.scaleid}];\n this.scalevalues.forEach(function(value) {\n var scaledefault = 0;\n var proficient = 0;\n if (body.find('[data-field=\"tool_lp_scale_default_' + value.id + '\"]').is(':checked')) {\n scaledefault = 1;\n }\n if (body.find('[data-field=\"tool_lp_scale_proficient_' + value.id + '\"]').is(':checked')) {\n proficient = 1;\n }\n\n if (!scaledefault && !proficient) {\n return;\n }\n\n data.push({\n id: value.id,\n scaledefault: scaledefault,\n proficient: proficient\n });\n });\n var datastring = JSON.stringify(data);\n // Send to the hidden field on the form.\n $(this.inputSelector).val(datastring);\n // Once the configuration has been saved then the original scale ID is set to the current scale ID.\n this.originalscaleid = this.scaleid;\n };\n\n /**\n * Get the scale values for the selected scale.\n *\n * @method getScaleValues\n * @param {Number} scaleid The scale ID of the selected scale.\n * @return {Promise} A deffered object with the scale values.\n */\n ScaleConfig.prototype.getScaleValues = function(scaleid) {\n return ModScaleValues.get_values(scaleid).then(function(values) {\n this.scalevalues = values;\n return values;\n }.bind(this));\n };\n\n /**\n * Triggered when a scale is selected.\n *\n * @name scaleChangeHandler\n * @param {Event} e\n * @function\n */\n ScaleConfig.prototype.scaleChangeHandler = function(e) {\n if ($(e.target).val() <= 0) {\n $(this.triggerSelector).prop('disabled', true);\n } else {\n $(this.triggerSelector).prop('disabled', false);\n }\n\n };\n\n return {\n\n /**\n * Main initialisation.\n *\n * @param {String} selectSelector The select box selector.\n * @param {String} inputSelector The hidden input field selector.\n * @param {String} triggerSelector The trigger selector.\n * @return {ScaleConfig} A new instance of ScaleConfig.\n * @method init\n */\n init: function(selectSelector, inputSelector, triggerSelector) {\n return new ScaleConfig(selectSelector, inputSelector, triggerSelector);\n }\n };\n});\n"],"file":"scaleconfig.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/scalevalues.min.js.map b/admin/tool/lp/amd/build/scalevalues.min.js.map index 687f3317634..1911e3eea84 100644 --- a/admin/tool/lp/amd/build/scalevalues.min.js.map +++ b/admin/tool/lp/amd/build/scalevalues.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/scalevalues.js"],"names":["define","$","ajax","localCache","get_values","scaleid","deferred","Deferred","call","methodname","args","done","scaleinfo","resolve","fail","reject","promise"],"mappings":"AAsBAA,OAAM,uBAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAC9C,GAAIC,CAAAA,CAAU,CAAG,EAAjB,CAEA,MAAgD,CAU5CC,UAAU,CAAE,oBAASC,CAAT,CAAkB,CAE1B,GAAIC,CAAAA,CAAQ,CAAGL,CAAC,CAACM,QAAF,EAAf,CAEA,GAAmC,WAA/B,QAAOJ,CAAAA,CAAU,CAACE,CAAD,CAArB,CAAgD,CAC5CH,CAAI,CAACM,IAAL,CAAU,CAAC,CACPC,UAAU,CAAE,kCADL,CAEPC,IAAI,CAAE,CAACL,OAAO,CAAEA,CAAV,CAFC,CAGPM,IAAI,CAAE,cAASC,CAAT,CAAoB,CACtBT,CAAU,CAACE,CAAD,CAAV,CAAsBO,CAAtB,CACAN,CAAQ,CAACO,OAAT,CAAiBD,CAAjB,CACH,CANM,CAOPE,IAAI,CAAGR,CAAQ,CAACS,MAPT,CAAD,CAAV,CASH,CAVD,IAUO,CACHT,CAAQ,CAACO,OAAT,CAAiBV,CAAU,CAACE,CAAD,CAA3B,CACH,CAED,MAAOC,CAAAA,CAAQ,CAACU,OAAT,EACV,CA7B2C,CA+BnD,CAlCK,CAAN","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 .\n\n/**\n * Module to get the scale values.\n *\n * @package tool_lp\n * @copyright 2016 Serge Gauthier\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax'], function($, ajax) {\n var localCache = [];\n\n return /** @alias module:tool_lp/scalevalues */ {\n\n /**\n * Return a promise object that will be resolved into a string eventually (maybe immediately).\n *\n * @method get_values\n * @param {Number} scaleid The scale id\n * @return [] {Promise}\n */\n // eslint-disable-next-line camelcase\n get_values: function(scaleid) {\n\n var deferred = $.Deferred();\n\n if (typeof localCache[scaleid] === 'undefined') {\n ajax.call([{\n methodname: 'core_competency_get_scale_values',\n args: {scaleid: scaleid},\n done: function(scaleinfo) {\n localCache[scaleid] = scaleinfo;\n deferred.resolve(scaleinfo);\n },\n fail: (deferred.reject)\n }]);\n } else {\n deferred.resolve(localCache[scaleid]);\n }\n\n return deferred.promise();\n }\n };\n});\n"],"file":"scalevalues.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/scalevalues.js"],"names":["define","$","ajax","localCache","get_values","scaleid","deferred","Deferred","call","methodname","args","done","scaleinfo","resolve","fail","reject","promise"],"mappings":"AAqBAA,OAAM,uBAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAC9C,GAAIC,CAAAA,CAAU,CAAG,EAAjB,CAEA,MAAgD,CAU5CC,UAAU,CAAE,oBAASC,CAAT,CAAkB,CAE1B,GAAIC,CAAAA,CAAQ,CAAGL,CAAC,CAACM,QAAF,EAAf,CAEA,GAAmC,WAA/B,QAAOJ,CAAAA,CAAU,CAACE,CAAD,CAArB,CAAgD,CAC5CH,CAAI,CAACM,IAAL,CAAU,CAAC,CACPC,UAAU,CAAE,kCADL,CAEPC,IAAI,CAAE,CAACL,OAAO,CAAEA,CAAV,CAFC,CAGPM,IAAI,CAAE,cAASC,CAAT,CAAoB,CACtBT,CAAU,CAACE,CAAD,CAAV,CAAsBO,CAAtB,CACAN,CAAQ,CAACO,OAAT,CAAiBD,CAAjB,CACH,CANM,CAOPE,IAAI,CAAGR,CAAQ,CAACS,MAPT,CAAD,CAAV,CASH,CAVD,IAUO,CACHT,CAAQ,CAACO,OAAT,CAAiBV,CAAU,CAACE,CAAD,CAA3B,CACH,CAED,MAAOC,CAAAA,CAAQ,CAACU,OAAT,EACV,CA7B2C,CA+BnD,CAlCK,CAAN","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 .\n\n/**\n * Module to get the scale values.\n *\n * @copyright 2016 Serge Gauthier\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax'], function($, ajax) {\n var localCache = [];\n\n return /** @alias module:tool_lp/scalevalues */ {\n\n /**\n * Return a promise object that will be resolved into a string eventually (maybe immediately).\n *\n * @method get_values\n * @param {Number} scaleid The scale id\n * @return [] {Promise}\n */\n // eslint-disable-next-line camelcase\n get_values: function(scaleid) {\n\n var deferred = $.Deferred();\n\n if (typeof localCache[scaleid] === 'undefined') {\n ajax.call([{\n methodname: 'core_competency_get_scale_values',\n args: {scaleid: scaleid},\n done: function(scaleinfo) {\n localCache[scaleid] = scaleinfo;\n deferred.resolve(scaleinfo);\n },\n fail: (deferred.reject)\n }]);\n } else {\n deferred.resolve(localCache[scaleid]);\n }\n\n return deferred.promise();\n }\n };\n});\n"],"file":"scalevalues.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/templateactions.min.js.map b/admin/tool/lp/amd/build/templateactions.min.js.map index e44ab4f9728..cbcfd077d8d 100644 --- a/admin/tool/lp/amd/build/templateactions.min.js.map +++ b/admin/tool/lp/amd/build/templateactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/templateactions.js"],"names":["define","$","templates","ajax","notification","str","Actionselector","pagecontextid","templateid","deleteplans","updatePage","newhtml","newjs","replaceWith","runTemplateJS","reloadList","context","render","done","fail","exception","doDelete","requests","call","methodname","args","id","pagecontext","contextid","doDuplicate","e","preventDefault","attr","confirmDelete","template","templatehasrelateddata","get_strings","key","component","param","shortname","strings","actions","actionselector","display","on","data","action","confirm","deleteHandler","duplicateHandler","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 .\n\n/**\n * Handle actions on learning plan templates via ajax.\n *\n * @module tool_lp/templateactions\n * @package tool_lp\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str', 'tool_lp/actionselector'],\n function($, templates, ajax, notification, str, Actionselector) {\n // Private variables and functions.\n\n /** @var {Number} pagecontextid The id of the context */\n var pagecontextid = 0;\n\n /** @var {Number} templateid The id of the template */\n var templateid = 0;\n\n /** @var {Boolean} Action to apply to plans when deleting a template */\n var deleteplans = true;\n\n /**\n * Callback to replace the dom element with the rendered template.\n *\n * @method updatePage\n * @param {String} newhtml The new html to insert.\n * @param {String} newjs The new js to run.\n */\n var updatePage = function(newhtml, newjs) {\n $('[data-region=\"managetemplates\"]').replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n };\n\n /**\n * Callback to render the page template again and update the page.\n *\n * @method reloadList\n * @param {Object} context The context for the template.\n */\n var reloadList = function(context) {\n templates.render('tool_lp/manage_templates_page', context)\n .done(updatePage)\n .fail(notification.exception);\n };\n\n /**\n * Delete a template and reload the page.\n * @method doDelete\n */\n var doDelete = function() {\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_delete_template',\n args: {id: templateid,\n deleteplans: deleteplans}\n }, {\n methodname: 'tool_lp_data_for_templates_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[1].done(reloadList).fail(notification.exception);\n };\n\n /**\n * Duplicate a template and reload the page.\n * @method doDuplicate\n * @param {Event} e\n */\n var doDuplicate = function(e) {\n e.preventDefault();\n\n templateid = $(this).attr('data-templateid');\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_duplicate_template',\n args: {id: templateid}\n }, {\n methodname: 'tool_lp_data_for_templates_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[1].done(reloadList).fail(notification.exception);\n };\n\n /**\n * Handler for \"Delete learning plan template\" actions.\n * @method confirmDelete\n * @param {Event} e\n */\n var confirmDelete = function(e) {\n e.preventDefault();\n\n var id = $(this).attr('data-templateid');\n templateid = id;\n deleteplans = true;\n\n var requests = ajax.call([{\n methodname: 'core_competency_read_template',\n args: {id: templateid}\n }, {\n methodname: 'core_competency_template_has_related_data',\n args: {id: templateid}\n }]);\n\n requests[0].done(function(template) {\n requests[1].done(function(templatehasrelateddata) {\n if (templatehasrelateddata) {\n str.get_strings([\n {key: 'deletetemplate', component: 'tool_lp', param: template.shortname},\n {key: 'deletetemplatewithplans', component: 'tool_lp'},\n {key: 'deleteplans', component: 'tool_lp'},\n {key: 'unlinkplanstemplate', component: 'tool_lp'},\n {key: 'confirm', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n var actions = [{'text': strings[2], 'value': 'delete'},\n {'text': strings[3], 'value': 'unlink'}];\n var actionselector = new Actionselector(\n strings[0], // Title.\n strings[1], // Message\n actions, // Radio button options.\n strings[4], // Confirm.\n strings[5]); // Cancel.\n actionselector.display();\n actionselector.on('save', function(e, data) {\n if (data.action != 'delete') {\n deleteplans = false;\n }\n doDelete();\n });\n }).fail(notification.exception);\n } else {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deletetemplate', component: 'tool_lp', param: template.shortname},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete learning plan template X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doDelete\n );\n }).fail(notification.exception);\n }\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n return /** @alias module:tool_lp/templateactions */ {\n // Public variables and functions.\n /**\n * Expose the event handler for the delete.\n * @method deleteHandler\n * @param {Event} e\n */\n deleteHandler: confirmDelete,\n\n /**\n * Expose the event handler for the duplicate.\n * @method duplicateHandler\n * @param {Event} e\n */\n duplicateHandler: doDuplicate,\n\n /**\n * Initialise the module.\n * @method init\n * @param {Number} contextid The context id of the page.\n */\n init: function(contextid) {\n pagecontextid = contextid;\n }\n };\n});\n"],"file":"templateactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/templateactions.js"],"names":["define","$","templates","ajax","notification","str","Actionselector","pagecontextid","templateid","deleteplans","updatePage","newhtml","newjs","replaceWith","runTemplateJS","reloadList","context","render","done","fail","exception","doDelete","requests","call","methodname","args","id","pagecontext","contextid","doDuplicate","e","preventDefault","attr","confirmDelete","template","templatehasrelateddata","get_strings","key","component","param","shortname","strings","actions","actionselector","display","on","data","action","confirm","deleteHandler","duplicateHandler","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 .\n\n/**\n * Handle actions on learning plan templates via ajax.\n *\n * @module tool_lp/templateactions\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/templates', 'core/ajax', 'core/notification', 'core/str', 'tool_lp/actionselector'],\n function($, templates, ajax, notification, str, Actionselector) {\n // Private variables and functions.\n\n /** @var {Number} pagecontextid The id of the context */\n var pagecontextid = 0;\n\n /** @var {Number} templateid The id of the template */\n var templateid = 0;\n\n /** @var {Boolean} Action to apply to plans when deleting a template */\n var deleteplans = true;\n\n /**\n * Callback to replace the dom element with the rendered template.\n *\n * @method updatePage\n * @param {String} newhtml The new html to insert.\n * @param {String} newjs The new js to run.\n */\n var updatePage = function(newhtml, newjs) {\n $('[data-region=\"managetemplates\"]').replaceWith(newhtml);\n templates.runTemplateJS(newjs);\n };\n\n /**\n * Callback to render the page template again and update the page.\n *\n * @method reloadList\n * @param {Object} context The context for the template.\n */\n var reloadList = function(context) {\n templates.render('tool_lp/manage_templates_page', context)\n .done(updatePage)\n .fail(notification.exception);\n };\n\n /**\n * Delete a template and reload the page.\n * @method doDelete\n */\n var doDelete = function() {\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_delete_template',\n args: {id: templateid,\n deleteplans: deleteplans}\n }, {\n methodname: 'tool_lp_data_for_templates_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[1].done(reloadList).fail(notification.exception);\n };\n\n /**\n * Duplicate a template and reload the page.\n * @method doDuplicate\n * @param {Event} e\n */\n var doDuplicate = function(e) {\n e.preventDefault();\n\n templateid = $(this).attr('data-templateid');\n\n // We are chaining ajax requests here.\n var requests = ajax.call([{\n methodname: 'core_competency_duplicate_template',\n args: {id: templateid}\n }, {\n methodname: 'tool_lp_data_for_templates_manage_page',\n args: {\n pagecontext: {\n contextid: pagecontextid\n }\n }\n }]);\n requests[1].done(reloadList).fail(notification.exception);\n };\n\n /**\n * Handler for \"Delete learning plan template\" actions.\n * @method confirmDelete\n * @param {Event} e\n */\n var confirmDelete = function(e) {\n e.preventDefault();\n\n var id = $(this).attr('data-templateid');\n templateid = id;\n deleteplans = true;\n\n var requests = ajax.call([{\n methodname: 'core_competency_read_template',\n args: {id: templateid}\n }, {\n methodname: 'core_competency_template_has_related_data',\n args: {id: templateid}\n }]);\n\n requests[0].done(function(template) {\n requests[1].done(function(templatehasrelateddata) {\n if (templatehasrelateddata) {\n str.get_strings([\n {key: 'deletetemplate', component: 'tool_lp', param: template.shortname},\n {key: 'deletetemplatewithplans', component: 'tool_lp'},\n {key: 'deleteplans', component: 'tool_lp'},\n {key: 'unlinkplanstemplate', component: 'tool_lp'},\n {key: 'confirm', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n var actions = [{'text': strings[2], 'value': 'delete'},\n {'text': strings[3], 'value': 'unlink'}];\n var actionselector = new Actionselector(\n strings[0], // Title.\n strings[1], // Message\n actions, // Radio button options.\n strings[4], // Confirm.\n strings[5]); // Cancel.\n actionselector.display();\n actionselector.on('save', function(e, data) {\n if (data.action != 'delete') {\n deleteplans = false;\n }\n doDelete();\n });\n }).fail(notification.exception);\n } else {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deletetemplate', component: 'tool_lp', param: template.shortname},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete learning plan template X?\n strings[2], // Delete.\n strings[3], // Cancel.\n doDelete\n );\n }).fail(notification.exception);\n }\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n return /** @alias module:tool_lp/templateactions */ {\n // Public variables and functions.\n /**\n * Expose the event handler for the delete.\n * @method deleteHandler\n * @param {Event} e\n */\n deleteHandler: confirmDelete,\n\n /**\n * Expose the event handler for the duplicate.\n * @method duplicateHandler\n * @param {Event} e\n */\n duplicateHandler: doDuplicate,\n\n /**\n * Initialise the module.\n * @method init\n * @param {Number} contextid The context id of the page.\n */\n init: function(contextid) {\n pagecontextid = contextid;\n }\n };\n});\n"],"file":"templateactions.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/tree.min.js.map b/admin/tool/lp/amd/build/tree.min.js.map index 0d9d004b322..70eeb50519d 100644 --- a/admin/tool/lp/amd/build/tree.min.js.map +++ b/admin/tool/lp/amd/build/tree.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tree.js"],"names":["define","$","url","log","expandedImage","imageUrl","collapsedImage","Tree","selector","multiSelect","treeRoot","items","find","expandAll","length","parents","attr","visibleItems","activeItem","lastActiveItem","keys","tab","enter","space","pageup","pagedown","end","home","left","up","right","down","eight","asterisk","init","bindEventHandlers","prototype","prepend","clone","thisObj","each","collapseGroup","expandGroup","first","item","group","children","show","hide","toggleGroup","triggerChange","allSelected","filter","trigger","selected","multiSelectItem","lastIndex","index","currentIndex","oneItem","get","selectItem","walk","parent","toggleItem","current","updateFocus","handleKeyDown","e","newItem","hasKeyModifier","shiftKey","ctrlKey","metaKey","altKey","keyCode","focus","stopPropagation","last","has","itemUL","itemParent","is","prev","eq","next","handleKeyPress","chr","String","fromCharCode","which","match","itemIndex","itemCount","currentItem","titleChr","text","charAt","toLowerCase","on","eventname","handler","warning","handleDblClick","handleExpandCollapseClick","handleClick","handleBlur","handleFocus","dblclick","click","keydown","keypress","blur"],"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 .\n\n/**\n * Implement an accessible aria tree widget, from a nested unordered list.\n * Based on http://oaa-accessibility.org/example/41/\n *\n * To respond to selection changed events - use tree.on(\"selectionchanged\", handler).\n * The handler will receive an array of nodes, which are the list items that are currently\n * selected. (Or a single node if multiselect is disabled).\n *\n * @module tool_lp/tree\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/url', 'core/log'], function($, url, log) {\n // Private variables and functions.\n /** @var {String} expandedImage The html for an expanded tree node twistie. */\n var expandedImage = $('\"\"');\n /** @var {String} collapsedImage The html for a collapsed tree node twistie. */\n var collapsedImage = $('\"\"');\n\n /**\n * Constructor\n *\n * @param {String} selector\n * @param {Boolean} multiSelect\n */\n var Tree = function(selector, multiSelect) {\n this.treeRoot = $(selector);\n this.multiSelect = (typeof multiSelect === 'undefined' || multiSelect === true);\n\n this.items = this.treeRoot.find('li');\n this.expandAll = this.items.length < 20;\n this.parents = this.treeRoot.find('li:has(ul)');\n\n if (multiSelect) {\n this.treeRoot.attr('aria-multiselectable', 'true');\n }\n\n this.items.attr('aria-selected', 'false');\n\n this.visibleItems = null;\n this.activeItem = null;\n this.lastActiveItem = null;\n\n this.keys = {\n tab: 9,\n enter: 13,\n space: 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n eight: 56,\n asterisk: 106\n };\n\n this.init();\n\n this.bindEventHandlers();\n };\n // Public variables and functions.\n\n /**\n * Init this tree\n * @method init\n */\n Tree.prototype.init = function() {\n this.parents.attr('aria-expanded', 'true');\n this.parents.prepend(expandedImage.clone());\n\n this.items.attr('role', 'tree-item');\n this.items.attr('tabindex', '-1');\n this.parents.attr('role', 'group');\n this.treeRoot.attr('role', 'tree');\n\n this.visibleItems = this.treeRoot.find('li');\n\n var thisObj = this;\n if (!this.expandAll) {\n this.parents.each(function() {\n thisObj.collapseGroup($(this));\n });\n this.expandGroup(this.parents.first());\n }\n };\n\n /**\n * Expand a collapsed group.\n *\n * @method expandGroup\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.expandGroup = function(item) {\n // Find the first child ul node.\n var group = item.children('ul');\n\n // Expand the group.\n group.show().attr('aria-hidden', 'false');\n\n item.attr('aria-expanded', 'true');\n\n item.children('img').attr('src', expandedImage.attr('src'));\n\n // Update the list of visible items.\n this.visibleItems = this.treeRoot.find('li:visible');\n };\n\n /**\n * Collapse an expanded group.\n *\n * @method collapseGroup\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.collapseGroup = function(item) {\n var group = item.children('ul');\n\n // Collapse the group.\n group.hide().attr('aria-hidden', 'true');\n\n item.attr('aria-expanded', 'false');\n\n item.children('img').attr('src', collapsedImage.attr('src'));\n\n // Update the list of visible items.\n this.visibleItems = this.treeRoot.find('li:visible');\n };\n\n /**\n * Expand or collapse a group.\n *\n * @method toggleGroup\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.toggleGroup = function(item) {\n if (item.attr('aria-expanded') == 'true') {\n this.collapseGroup(item);\n } else {\n this.expandGroup(item);\n }\n };\n\n /**\n * Whenever the currently selected node has changed, trigger an event using this function.\n *\n * @method triggerChange\n */\n Tree.prototype.triggerChange = function() {\n var allSelected = this.items.filter('[aria-selected=true]');\n if (!this.multiSelect) {\n allSelected = allSelected.first();\n }\n this.treeRoot.trigger('selectionchanged', {selected: allSelected});\n };\n\n /**\n * Select all the items between the last focused item and this currently focused item.\n *\n * @method multiSelectItem\n * @param {Object} item is the jquery id of the newly selected item.\n */\n Tree.prototype.multiSelectItem = function(item) {\n if (!this.multiSelect) {\n this.items.attr('aria-selected', 'false');\n } else if (this.lastActiveItem !== null) {\n var lastIndex = this.visibleItems.index(this.lastActiveItem);\n var currentIndex = this.visibleItems.index(this.activeItem);\n var oneItem = null;\n\n while (lastIndex < currentIndex) {\n oneItem = $(this.visibleItems.get(lastIndex));\n oneItem.attr('aria-selected', 'true');\n lastIndex++;\n }\n while (lastIndex > currentIndex) {\n oneItem = $(this.visibleItems.get(lastIndex));\n oneItem.attr('aria-selected', 'true');\n lastIndex--;\n }\n }\n\n item.attr('aria-selected', 'true');\n this.triggerChange();\n };\n\n /**\n * Select a single item. Make sure all the parents are expanded. De-select all other items.\n *\n * @method selectItem\n * @param {Object} item is the jquery id of the newly selected item.\n */\n Tree.prototype.selectItem = function(item) {\n // Expand all nodes up the tree.\n var walk = item.parent();\n while (walk.attr('role') != 'tree') {\n walk = walk.parent();\n if (walk.attr('aria-expanded') == 'false') {\n this.expandGroup(walk);\n }\n walk = walk.parent();\n }\n this.items.attr('aria-selected', 'false');\n item.attr('aria-selected', 'true');\n this.triggerChange();\n };\n\n /**\n * Toggle the selected state for an item back and forth.\n *\n * @method toggleItem\n * @param {Object} item is the jquery id of the item to toggle.\n */\n Tree.prototype.toggleItem = function(item) {\n if (!this.multiSelect) {\n this.selectItem(item);\n return;\n }\n\n var current = item.attr('aria-selected');\n if (current === 'true') {\n current = 'false';\n } else {\n current = 'true';\n }\n item.attr('aria-selected', current);\n this.triggerChange();\n };\n\n /**\n * Set the focus to this item.\n *\n * @method updateFocus\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.updateFocus = function(item) {\n this.lastActiveItem = this.activeItem;\n this.activeItem = item;\n // Expand all nodes up the tree.\n var walk = item.parent();\n while (walk.attr('role') != 'tree') {\n walk = walk.parent();\n if (walk.attr('aria-expanded') == 'false') {\n this.expandGroup(walk);\n }\n walk = walk.parent();\n }\n this.items.attr('tabindex', '-1');\n item.attr('tabindex', 0);\n };\n\n /**\n * Handle a key down event - ie navigate the tree.\n *\n * @method handleKeyDown\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n // This function should be simplified. In the meantime..\n // eslint-disable-next-line complexity\n Tree.prototype.handleKeyDown = function(item, e) {\n var currentIndex = this.visibleItems.index(item);\n var newItem = null;\n var hasKeyModifier = e.shiftKey || e.ctrlKey || e.metaKey || e.altKey;\n var thisObj = this;\n\n switch (e.keyCode) {\n case this.keys.home: {\n // Jump to first item in tree.\n newItem = this.parents.first();\n newItem.focus();\n if (e.shiftKey) {\n this.multiSelectItem(newItem);\n } else if (!hasKeyModifier) {\n this.selectItem(newItem);\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.end: {\n // Jump to last visible item.\n newItem = this.visibleItems.last();\n newItem.focus();\n if (e.shiftKey) {\n this.multiSelectItem(newItem);\n } else if (!hasKeyModifier) {\n this.selectItem(newItem);\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.enter:\n case this.keys.space: {\n\n if (e.shiftKey) {\n this.multiSelectItem(item);\n } else if (e.metaKey || e.ctrlKey) {\n this.toggleItem(item);\n } else {\n this.selectItem(item);\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.left: {\n if (item.has('ul') && item.attr('aria-expanded') == 'true') {\n this.collapseGroup(item);\n } else {\n // Move up to the parent.\n var itemUL = item.parent();\n var itemParent = itemUL.parent();\n if (itemParent.is('li')) {\n itemParent.focus();\n if (e.shiftKey) {\n this.multiSelectItem(itemParent);\n } else if (!hasKeyModifier) {\n this.selectItem(itemParent);\n }\n }\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.right: {\n if (item.has('ul') && item.attr('aria-expanded') == 'false') {\n this.expandGroup(item);\n } else {\n // Move to the first item in the child group.\n newItem = item.children('ul').children('li').first();\n if (newItem.length > 0) {\n newItem.focus();\n if (e.shiftKey) {\n this.multiSelectItem(newItem);\n } else if (!hasKeyModifier) {\n this.selectItem(newItem);\n }\n }\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.up: {\n\n if (currentIndex > 0) {\n var prev = this.visibleItems.eq(currentIndex - 1);\n prev.focus();\n if (e.shiftKey) {\n this.multiSelectItem(prev);\n } else if (!hasKeyModifier) {\n this.selectItem(prev);\n }\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.down: {\n\n if (currentIndex < this.visibleItems.length - 1) {\n var next = this.visibleItems.eq(currentIndex + 1);\n next.focus();\n if (e.shiftKey) {\n this.multiSelectItem(next);\n } else if (!hasKeyModifier) {\n this.selectItem(next);\n }\n }\n e.stopPropagation();\n return false;\n }\n case this.keys.asterisk: {\n // Expand all groups.\n this.parents.each(function() {\n thisObj.expandGroup($(this));\n });\n\n e.stopPropagation();\n return false;\n }\n case this.keys.eight: {\n if (e.shiftKey) {\n // Expand all groups.\n this.parents.each(function() {\n thisObj.expandGroup($(this));\n });\n\n e.stopPropagation();\n }\n\n return false;\n }\n }\n\n return true;\n };\n\n /**\n * Handle a key press event - ie navigate the tree.\n *\n * @method handleKeyPress\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleKeyPress = function(item, e) {\n if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n // Do nothing.\n return true;\n }\n\n switch (e.keyCode) {\n case this.keys.tab: {\n return true;\n }\n case this.keys.enter:\n case this.keys.home:\n case this.keys.end:\n case this.keys.left:\n case this.keys.right:\n case this.keys.up:\n case this.keys.down: {\n e.stopPropagation();\n return false;\n }\n default : {\n var chr = String.fromCharCode(e.which);\n var match = false;\n var itemIndex = this.visibleItems.index(item);\n var itemCount = this.visibleItems.length;\n var currentIndex = itemIndex + 1;\n\n // Check if the active item was the last one on the list.\n if (currentIndex == itemCount) {\n currentIndex = 0;\n }\n\n // Iterate through the menu items (starting from the current item and wrapping) until a match is found\n // or the loop returns to the current menu item.\n while (currentIndex != itemIndex) {\n\n var currentItem = this.visibleItems.eq(currentIndex);\n var titleChr = currentItem.text().charAt(0);\n\n if (currentItem.has('ul')) {\n titleChr = currentItem.find('span').text().charAt(0);\n }\n\n if (titleChr.toLowerCase() == chr) {\n match = true;\n break;\n }\n\n currentIndex = currentIndex + 1;\n if (currentIndex == itemCount) {\n // Reached the end of the list, start again at the beginning.\n currentIndex = 0;\n }\n }\n\n if (match === true) {\n this.updateFocus(this.visibleItems.eq(currentIndex));\n }\n e.stopPropagation();\n return false;\n }\n }\n\n // eslint-disable-next-line no-unreachable\n return true;\n };\n\n /**\n * Attach an event listener to the tree.\n *\n * @method on\n * @param {String} eventname This is the name of the event to listen for. Only 'selectionchanged' is supported for now.\n * @param {Function} handler The function to call when the event is triggered.\n */\n Tree.prototype.on = function(eventname, handler) {\n if (eventname !== 'selectionchanged') {\n log.warning('Invalid custom event name for tree. Only \"selectionchanged\" is supported.');\n } else {\n this.treeRoot.on(eventname, handler);\n }\n };\n\n /**\n * Handle a double click (expand/collapse).\n *\n * @method handleDblClick\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleDblClick = function(item, e) {\n\n if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n // Do nothing.\n return true;\n }\n\n // Apply the focus markup.\n this.updateFocus(item);\n\n // Expand or collapse the group.\n this.toggleGroup(item);\n\n e.stopPropagation();\n return false;\n };\n\n /**\n * Handle a click (select).\n *\n * @method handleExpandCollapseClick\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleExpandCollapseClick = function(item, e) {\n\n // Do not shift the focus.\n this.toggleGroup(item);\n e.stopPropagation();\n return false;\n };\n\n\n /**\n * Handle a click (select).\n *\n * @method handleClick\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleClick = function(item, e) {\n\n if (e.shiftKey) {\n this.multiSelectItem(item);\n } else if (e.metaKey || e.ctrlKey) {\n this.toggleItem(item);\n } else {\n this.selectItem(item);\n }\n this.updateFocus(item);\n e.stopPropagation();\n return false;\n };\n\n /**\n * Handle a blur event\n *\n * @method handleBlur\n * @param {Object} item item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleBlur = function() {\n return true;\n };\n\n /**\n * Handle a focus event\n *\n * @method handleFocus\n * @param {Object} item item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleFocus = function(item) {\n\n this.updateFocus(item);\n\n return true;\n };\n\n /**\n * Bind the event listeners we require.\n *\n * @method bindEventHandlers\n */\n Tree.prototype.bindEventHandlers = function() {\n var thisObj = this;\n\n // Bind a dblclick handler to the parent items.\n this.parents.dblclick(function(e) {\n return thisObj.handleDblClick($(this), e);\n });\n\n // Bind a click handler.\n this.items.click(function(e) {\n return thisObj.handleClick($(this), e);\n });\n\n // Bind a toggle handler to the expand/collapse icons.\n this.items.children('img').click(function(e) {\n return thisObj.handleExpandCollapseClick($(this).parent(), e);\n });\n\n // Bind a keydown handler.\n this.items.keydown(function(e) {\n return thisObj.handleKeyDown($(this), e);\n });\n\n // Bind a keypress handler.\n this.items.keypress(function(e) {\n return thisObj.handleKeyPress($(this), e);\n });\n\n // Bind a focus handler.\n this.items.focus(function(e) {\n return thisObj.handleFocus($(this), e);\n });\n\n // Bind a blur handler.\n this.items.blur(function(e) {\n return thisObj.handleBlur($(this), e);\n });\n\n };\n\n return /** @alias module:tool_lp/tree */ Tree;\n});\n"],"file":"tree.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/tree.js"],"names":["define","$","url","log","expandedImage","imageUrl","collapsedImage","Tree","selector","multiSelect","treeRoot","items","find","expandAll","length","parents","attr","visibleItems","activeItem","lastActiveItem","keys","tab","enter","space","pageup","pagedown","end","home","left","up","right","down","eight","asterisk","init","bindEventHandlers","prototype","prepend","clone","thisObj","each","collapseGroup","expandGroup","first","item","group","children","show","hide","toggleGroup","triggerChange","allSelected","filter","trigger","selected","multiSelectItem","lastIndex","index","currentIndex","oneItem","get","selectItem","walk","parent","toggleItem","current","updateFocus","handleKeyDown","e","newItem","hasKeyModifier","shiftKey","ctrlKey","metaKey","altKey","keyCode","focus","stopPropagation","last","has","itemUL","itemParent","is","prev","eq","next","handleKeyPress","chr","String","fromCharCode","which","match","itemIndex","itemCount","currentItem","titleChr","text","charAt","toLowerCase","on","eventname","handler","warning","handleDblClick","handleExpandCollapseClick","handleClick","handleBlur","handleFocus","dblclick","click","keydown","keypress","blur"],"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 .\n\n/**\n * Implement an accessible aria tree widget, from a nested unordered list.\n * Based on http://oaa-accessibility.org/example/41/\n *\n * To respond to selection changed events - use tree.on(\"selectionchanged\", handler).\n * The handler will receive an array of nodes, which are the list items that are currently\n * selected. (Or a single node if multiselect is disabled).\n *\n * @module tool_lp/tree\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/url', 'core/log'], function($, url, log) {\n // Private variables and functions.\n /** @var {String} expandedImage The html for an expanded tree node twistie. */\n var expandedImage = $('\"\"');\n /** @var {String} collapsedImage The html for a collapsed tree node twistie. */\n var collapsedImage = $('\"\"');\n\n /**\n * Constructor\n *\n * @param {String} selector\n * @param {Boolean} multiSelect\n */\n var Tree = function(selector, multiSelect) {\n this.treeRoot = $(selector);\n this.multiSelect = (typeof multiSelect === 'undefined' || multiSelect === true);\n\n this.items = this.treeRoot.find('li');\n this.expandAll = this.items.length < 20;\n this.parents = this.treeRoot.find('li:has(ul)');\n\n if (multiSelect) {\n this.treeRoot.attr('aria-multiselectable', 'true');\n }\n\n this.items.attr('aria-selected', 'false');\n\n this.visibleItems = null;\n this.activeItem = null;\n this.lastActiveItem = null;\n\n this.keys = {\n tab: 9,\n enter: 13,\n space: 32,\n pageup: 33,\n pagedown: 34,\n end: 35,\n home: 36,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n eight: 56,\n asterisk: 106\n };\n\n this.init();\n\n this.bindEventHandlers();\n };\n // Public variables and functions.\n\n /**\n * Init this tree\n * @method init\n */\n Tree.prototype.init = function() {\n this.parents.attr('aria-expanded', 'true');\n this.parents.prepend(expandedImage.clone());\n\n this.items.attr('role', 'tree-item');\n this.items.attr('tabindex', '-1');\n this.parents.attr('role', 'group');\n this.treeRoot.attr('role', 'tree');\n\n this.visibleItems = this.treeRoot.find('li');\n\n var thisObj = this;\n if (!this.expandAll) {\n this.parents.each(function() {\n thisObj.collapseGroup($(this));\n });\n this.expandGroup(this.parents.first());\n }\n };\n\n /**\n * Expand a collapsed group.\n *\n * @method expandGroup\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.expandGroup = function(item) {\n // Find the first child ul node.\n var group = item.children('ul');\n\n // Expand the group.\n group.show().attr('aria-hidden', 'false');\n\n item.attr('aria-expanded', 'true');\n\n item.children('img').attr('src', expandedImage.attr('src'));\n\n // Update the list of visible items.\n this.visibleItems = this.treeRoot.find('li:visible');\n };\n\n /**\n * Collapse an expanded group.\n *\n * @method collapseGroup\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.collapseGroup = function(item) {\n var group = item.children('ul');\n\n // Collapse the group.\n group.hide().attr('aria-hidden', 'true');\n\n item.attr('aria-expanded', 'false');\n\n item.children('img').attr('src', collapsedImage.attr('src'));\n\n // Update the list of visible items.\n this.visibleItems = this.treeRoot.find('li:visible');\n };\n\n /**\n * Expand or collapse a group.\n *\n * @method toggleGroup\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.toggleGroup = function(item) {\n if (item.attr('aria-expanded') == 'true') {\n this.collapseGroup(item);\n } else {\n this.expandGroup(item);\n }\n };\n\n /**\n * Whenever the currently selected node has changed, trigger an event using this function.\n *\n * @method triggerChange\n */\n Tree.prototype.triggerChange = function() {\n var allSelected = this.items.filter('[aria-selected=true]');\n if (!this.multiSelect) {\n allSelected = allSelected.first();\n }\n this.treeRoot.trigger('selectionchanged', {selected: allSelected});\n };\n\n /**\n * Select all the items between the last focused item and this currently focused item.\n *\n * @method multiSelectItem\n * @param {Object} item is the jquery id of the newly selected item.\n */\n Tree.prototype.multiSelectItem = function(item) {\n if (!this.multiSelect) {\n this.items.attr('aria-selected', 'false');\n } else if (this.lastActiveItem !== null) {\n var lastIndex = this.visibleItems.index(this.lastActiveItem);\n var currentIndex = this.visibleItems.index(this.activeItem);\n var oneItem = null;\n\n while (lastIndex < currentIndex) {\n oneItem = $(this.visibleItems.get(lastIndex));\n oneItem.attr('aria-selected', 'true');\n lastIndex++;\n }\n while (lastIndex > currentIndex) {\n oneItem = $(this.visibleItems.get(lastIndex));\n oneItem.attr('aria-selected', 'true');\n lastIndex--;\n }\n }\n\n item.attr('aria-selected', 'true');\n this.triggerChange();\n };\n\n /**\n * Select a single item. Make sure all the parents are expanded. De-select all other items.\n *\n * @method selectItem\n * @param {Object} item is the jquery id of the newly selected item.\n */\n Tree.prototype.selectItem = function(item) {\n // Expand all nodes up the tree.\n var walk = item.parent();\n while (walk.attr('role') != 'tree') {\n walk = walk.parent();\n if (walk.attr('aria-expanded') == 'false') {\n this.expandGroup(walk);\n }\n walk = walk.parent();\n }\n this.items.attr('aria-selected', 'false');\n item.attr('aria-selected', 'true');\n this.triggerChange();\n };\n\n /**\n * Toggle the selected state for an item back and forth.\n *\n * @method toggleItem\n * @param {Object} item is the jquery id of the item to toggle.\n */\n Tree.prototype.toggleItem = function(item) {\n if (!this.multiSelect) {\n this.selectItem(item);\n return;\n }\n\n var current = item.attr('aria-selected');\n if (current === 'true') {\n current = 'false';\n } else {\n current = 'true';\n }\n item.attr('aria-selected', current);\n this.triggerChange();\n };\n\n /**\n * Set the focus to this item.\n *\n * @method updateFocus\n * @param {Object} item is the jquery id of the parent item of the group\n */\n Tree.prototype.updateFocus = function(item) {\n this.lastActiveItem = this.activeItem;\n this.activeItem = item;\n // Expand all nodes up the tree.\n var walk = item.parent();\n while (walk.attr('role') != 'tree') {\n walk = walk.parent();\n if (walk.attr('aria-expanded') == 'false') {\n this.expandGroup(walk);\n }\n walk = walk.parent();\n }\n this.items.attr('tabindex', '-1');\n item.attr('tabindex', 0);\n };\n\n /**\n * Handle a key down event - ie navigate the tree.\n *\n * @method handleKeyDown\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n // This function should be simplified. In the meantime..\n // eslint-disable-next-line complexity\n Tree.prototype.handleKeyDown = function(item, e) {\n var currentIndex = this.visibleItems.index(item);\n var newItem = null;\n var hasKeyModifier = e.shiftKey || e.ctrlKey || e.metaKey || e.altKey;\n var thisObj = this;\n\n switch (e.keyCode) {\n case this.keys.home: {\n // Jump to first item in tree.\n newItem = this.parents.first();\n newItem.focus();\n if (e.shiftKey) {\n this.multiSelectItem(newItem);\n } else if (!hasKeyModifier) {\n this.selectItem(newItem);\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.end: {\n // Jump to last visible item.\n newItem = this.visibleItems.last();\n newItem.focus();\n if (e.shiftKey) {\n this.multiSelectItem(newItem);\n } else if (!hasKeyModifier) {\n this.selectItem(newItem);\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.enter:\n case this.keys.space: {\n\n if (e.shiftKey) {\n this.multiSelectItem(item);\n } else if (e.metaKey || e.ctrlKey) {\n this.toggleItem(item);\n } else {\n this.selectItem(item);\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.left: {\n if (item.has('ul') && item.attr('aria-expanded') == 'true') {\n this.collapseGroup(item);\n } else {\n // Move up to the parent.\n var itemUL = item.parent();\n var itemParent = itemUL.parent();\n if (itemParent.is('li')) {\n itemParent.focus();\n if (e.shiftKey) {\n this.multiSelectItem(itemParent);\n } else if (!hasKeyModifier) {\n this.selectItem(itemParent);\n }\n }\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.right: {\n if (item.has('ul') && item.attr('aria-expanded') == 'false') {\n this.expandGroup(item);\n } else {\n // Move to the first item in the child group.\n newItem = item.children('ul').children('li').first();\n if (newItem.length > 0) {\n newItem.focus();\n if (e.shiftKey) {\n this.multiSelectItem(newItem);\n } else if (!hasKeyModifier) {\n this.selectItem(newItem);\n }\n }\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.up: {\n\n if (currentIndex > 0) {\n var prev = this.visibleItems.eq(currentIndex - 1);\n prev.focus();\n if (e.shiftKey) {\n this.multiSelectItem(prev);\n } else if (!hasKeyModifier) {\n this.selectItem(prev);\n }\n }\n\n e.stopPropagation();\n return false;\n }\n case this.keys.down: {\n\n if (currentIndex < this.visibleItems.length - 1) {\n var next = this.visibleItems.eq(currentIndex + 1);\n next.focus();\n if (e.shiftKey) {\n this.multiSelectItem(next);\n } else if (!hasKeyModifier) {\n this.selectItem(next);\n }\n }\n e.stopPropagation();\n return false;\n }\n case this.keys.asterisk: {\n // Expand all groups.\n this.parents.each(function() {\n thisObj.expandGroup($(this));\n });\n\n e.stopPropagation();\n return false;\n }\n case this.keys.eight: {\n if (e.shiftKey) {\n // Expand all groups.\n this.parents.each(function() {\n thisObj.expandGroup($(this));\n });\n\n e.stopPropagation();\n }\n\n return false;\n }\n }\n\n return true;\n };\n\n /**\n * Handle a key press event - ie navigate the tree.\n *\n * @method handleKeyPress\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleKeyPress = function(item, e) {\n if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n // Do nothing.\n return true;\n }\n\n switch (e.keyCode) {\n case this.keys.tab: {\n return true;\n }\n case this.keys.enter:\n case this.keys.home:\n case this.keys.end:\n case this.keys.left:\n case this.keys.right:\n case this.keys.up:\n case this.keys.down: {\n e.stopPropagation();\n return false;\n }\n default : {\n var chr = String.fromCharCode(e.which);\n var match = false;\n var itemIndex = this.visibleItems.index(item);\n var itemCount = this.visibleItems.length;\n var currentIndex = itemIndex + 1;\n\n // Check if the active item was the last one on the list.\n if (currentIndex == itemCount) {\n currentIndex = 0;\n }\n\n // Iterate through the menu items (starting from the current item and wrapping) until a match is found\n // or the loop returns to the current menu item.\n while (currentIndex != itemIndex) {\n\n var currentItem = this.visibleItems.eq(currentIndex);\n var titleChr = currentItem.text().charAt(0);\n\n if (currentItem.has('ul')) {\n titleChr = currentItem.find('span').text().charAt(0);\n }\n\n if (titleChr.toLowerCase() == chr) {\n match = true;\n break;\n }\n\n currentIndex = currentIndex + 1;\n if (currentIndex == itemCount) {\n // Reached the end of the list, start again at the beginning.\n currentIndex = 0;\n }\n }\n\n if (match === true) {\n this.updateFocus(this.visibleItems.eq(currentIndex));\n }\n e.stopPropagation();\n return false;\n }\n }\n\n // eslint-disable-next-line no-unreachable\n return true;\n };\n\n /**\n * Attach an event listener to the tree.\n *\n * @method on\n * @param {String} eventname This is the name of the event to listen for. Only 'selectionchanged' is supported for now.\n * @param {Function} handler The function to call when the event is triggered.\n */\n Tree.prototype.on = function(eventname, handler) {\n if (eventname !== 'selectionchanged') {\n log.warning('Invalid custom event name for tree. Only \"selectionchanged\" is supported.');\n } else {\n this.treeRoot.on(eventname, handler);\n }\n };\n\n /**\n * Handle a double click (expand/collapse).\n *\n * @method handleDblClick\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleDblClick = function(item, e) {\n\n if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n // Do nothing.\n return true;\n }\n\n // Apply the focus markup.\n this.updateFocus(item);\n\n // Expand or collapse the group.\n this.toggleGroup(item);\n\n e.stopPropagation();\n return false;\n };\n\n /**\n * Handle a click (select).\n *\n * @method handleExpandCollapseClick\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleExpandCollapseClick = function(item, e) {\n\n // Do not shift the focus.\n this.toggleGroup(item);\n e.stopPropagation();\n return false;\n };\n\n\n /**\n * Handle a click (select).\n *\n * @method handleClick\n * @param {Object} item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleClick = function(item, e) {\n\n if (e.shiftKey) {\n this.multiSelectItem(item);\n } else if (e.metaKey || e.ctrlKey) {\n this.toggleItem(item);\n } else {\n this.selectItem(item);\n }\n this.updateFocus(item);\n e.stopPropagation();\n return false;\n };\n\n /**\n * Handle a blur event\n *\n * @method handleBlur\n * @param {Object} item item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleBlur = function() {\n return true;\n };\n\n /**\n * Handle a focus event\n *\n * @method handleFocus\n * @param {Object} item item is the jquery id of the parent item of the group\n * @param {Event} e The event.\n * @return {Boolean}\n */\n Tree.prototype.handleFocus = function(item) {\n\n this.updateFocus(item);\n\n return true;\n };\n\n /**\n * Bind the event listeners we require.\n *\n * @method bindEventHandlers\n */\n Tree.prototype.bindEventHandlers = function() {\n var thisObj = this;\n\n // Bind a dblclick handler to the parent items.\n this.parents.dblclick(function(e) {\n return thisObj.handleDblClick($(this), e);\n });\n\n // Bind a click handler.\n this.items.click(function(e) {\n return thisObj.handleClick($(this), e);\n });\n\n // Bind a toggle handler to the expand/collapse icons.\n this.items.children('img').click(function(e) {\n return thisObj.handleExpandCollapseClick($(this).parent(), e);\n });\n\n // Bind a keydown handler.\n this.items.keydown(function(e) {\n return thisObj.handleKeyDown($(this), e);\n });\n\n // Bind a keypress handler.\n this.items.keypress(function(e) {\n return thisObj.handleKeyPress($(this), e);\n });\n\n // Bind a focus handler.\n this.items.focus(function(e) {\n return thisObj.handleFocus($(this), e);\n });\n\n // Bind a blur handler.\n this.items.blur(function(e) {\n return thisObj.handleBlur($(this), e);\n });\n\n };\n\n return /** @alias module:tool_lp/tree */ Tree;\n});\n"],"file":"tree.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/user_competency_course_navigation.min.js.map b/admin/tool/lp/amd/build/user_competency_course_navigation.min.js.map index 2ad4133b7e4..053fc4c27ee 100644 --- a/admin/tool/lp/amd/build/user_competency_course_navigation.min.js.map +++ b/admin/tool/lp/amd/build/user_competency_course_navigation.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/user_competency_course_navigation.js"],"names":["define","$","UserCompetencyCourseNavigation","userSelector","competencySelector","baseUrl","userId","competencyId","courseId","_baseUrl","_userId","_competencyId","_courseId","on","_userChanged","bind","_competencyChanged","prototype","e","newUserId","target","val","queryStr","document","location","newCompetencyId","_ignoreFirstCompetency"],"mappings":"AAuBAA,OAAM,6CAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAY3B,GAAIC,CAAAA,CAA8B,CAAG,SAASC,CAAT,CAAuBC,CAAvB,CAA2CC,CAA3C,CAAoDC,CAApD,CAA4DC,CAA5D,CAA0EC,CAA1E,CAAoF,CACrH,KAAKC,QAAL,CAAgBJ,CAAhB,CACA,KAAKK,OAAL,CAAeJ,CAAM,CAAG,EAAxB,CACA,KAAKK,aAAL,CAAqBJ,CAAY,CAAG,EAApC,CACA,KAAKK,SAAL,CAAiBJ,CAAjB,CAEAP,CAAC,CAACE,CAAD,CAAD,CAAgBU,EAAhB,CAAmB,QAAnB,CAA6B,KAAKC,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAA7B,EACAd,CAAC,CAACG,CAAD,CAAD,CAAsBS,EAAtB,CAAyB,QAAzB,CAAmC,KAAKG,kBAAL,CAAwBD,IAAxB,CAA6B,IAA7B,CAAnC,CACH,CARD,CAgBAb,CAA8B,CAACe,SAA/B,CAAyCH,YAAzC,CAAwD,SAASI,CAAT,CAAY,IAC5DC,CAAAA,CAAS,CAAGlB,CAAC,CAACiB,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EADgD,CAE5DC,CAAQ,CAAG,WAAaH,CAAb,CAAyB,YAAzB,CAAwC,KAAKP,SAA7C,CAAyD,gBAAzD,CAA4E,KAAKD,aAFhC,CAGhEY,QAAQ,CAACC,QAAT,CAAoB,KAAKf,QAAL,CAAgBa,CACvC,CAJD,CAYApB,CAA8B,CAACe,SAA/B,CAAyCD,kBAAzC,CAA8D,SAASE,CAAT,CAAY,IAClEO,CAAAA,CAAe,CAAGxB,CAAC,CAACiB,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EADgD,CAElEC,CAAQ,CAAG,WAAa,KAAKZ,OAAlB,CAA4B,YAA5B,CAA2C,KAAKE,SAAhD,CAA4D,gBAA5D,CAA+Ea,CAFxB,CAGtEF,QAAQ,CAACC,QAAT,CAAoB,KAAKf,QAAL,CAAgBa,CACvC,CAJD,CAOApB,CAA8B,CAACe,SAA/B,CAAyCN,aAAzC,CAAyD,IAAzD,CAEAT,CAA8B,CAACe,SAA/B,CAAyCP,OAAzC,CAAmD,IAAnD,CAEAR,CAA8B,CAACe,SAA/B,CAAyCL,SAAzC,CAAqD,IAArD,CAEAV,CAA8B,CAACe,SAA/B,CAAyCR,QAAzC,CAAoD,IAApD,CAEAP,CAA8B,CAACe,SAA/B,CAAyCS,sBAAzC,CAAkE,IAAlE,CAEA,MAAsExB,CAAAA,CAEzE,CA3DK,CAAN","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 .\n\n/**\n * Module to enable inline editing of a comptency grade.\n *\n * @package tool_lp\n * @copyright 2015 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * UserCompetencyCourseNavigation\n *\n * @param {String} userSelector The selector of the user element.\n * @param {String} competencySelector The selector of the competency element.\n * @param {String} baseUrl The base url for the page (no params).\n * @param {Number} userId The user id\n * @param {Number} competencyId The competency id\n * @param {Number} courseId The course id\n */\n var UserCompetencyCourseNavigation = function(userSelector, competencySelector, baseUrl, userId, competencyId, courseId) {\n this._baseUrl = baseUrl;\n this._userId = userId + '';\n this._competencyId = competencyId + '';\n this._courseId = courseId;\n\n $(userSelector).on('change', this._userChanged.bind(this));\n $(competencySelector).on('change', this._competencyChanged.bind(this));\n };\n\n /**\n * The user was changed in the select list.\n *\n * @method _userChanged\n * @param {Event} e\n */\n UserCompetencyCourseNavigation.prototype._userChanged = function(e) {\n var newUserId = $(e.target).val();\n var queryStr = '?userid=' + newUserId + '&courseid=' + this._courseId + '&competencyid=' + this._competencyId;\n document.location = this._baseUrl + queryStr;\n };\n\n /**\n * The competency was changed in the select list.\n *\n * @method _competencyChanged\n * @param {Event} e\n */\n UserCompetencyCourseNavigation.prototype._competencyChanged = function(e) {\n var newCompetencyId = $(e.target).val();\n var queryStr = '?userid=' + this._userId + '&courseid=' + this._courseId + '&competencyid=' + newCompetencyId;\n document.location = this._baseUrl + queryStr;\n };\n\n /** @type {Number} The id of the competency. */\n UserCompetencyCourseNavigation.prototype._competencyId = null;\n /** @type {Number} The id of the user. */\n UserCompetencyCourseNavigation.prototype._userId = null;\n /** @type {Number} The id of the course. */\n UserCompetencyCourseNavigation.prototype._courseId = null;\n /** @type {String} Plugin base url. */\n UserCompetencyCourseNavigation.prototype._baseUrl = null;\n /** @type {Boolean} Ignore the first change event for competencies. */\n UserCompetencyCourseNavigation.prototype._ignoreFirstCompetency = null;\n\n return /** @alias module:tool_lp/user_competency_course_navigation */ UserCompetencyCourseNavigation;\n\n});\n"],"file":"user_competency_course_navigation.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/user_competency_course_navigation.js"],"names":["define","$","UserCompetencyCourseNavigation","userSelector","competencySelector","baseUrl","userId","competencyId","courseId","_baseUrl","_userId","_competencyId","_courseId","on","_userChanged","bind","_competencyChanged","prototype","e","newUserId","target","val","queryStr","document","location","newCompetencyId","_ignoreFirstCompetency"],"mappings":"AAsBAA,OAAM,6CAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAY3B,GAAIC,CAAAA,CAA8B,CAAG,SAASC,CAAT,CAAuBC,CAAvB,CAA2CC,CAA3C,CAAoDC,CAApD,CAA4DC,CAA5D,CAA0EC,CAA1E,CAAoF,CACrH,KAAKC,QAAL,CAAgBJ,CAAhB,CACA,KAAKK,OAAL,CAAeJ,CAAM,CAAG,EAAxB,CACA,KAAKK,aAAL,CAAqBJ,CAAY,CAAG,EAApC,CACA,KAAKK,SAAL,CAAiBJ,CAAjB,CAEAP,CAAC,CAACE,CAAD,CAAD,CAAgBU,EAAhB,CAAmB,QAAnB,CAA6B,KAAKC,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAA7B,EACAd,CAAC,CAACG,CAAD,CAAD,CAAsBS,EAAtB,CAAyB,QAAzB,CAAmC,KAAKG,kBAAL,CAAwBD,IAAxB,CAA6B,IAA7B,CAAnC,CACH,CARD,CAgBAb,CAA8B,CAACe,SAA/B,CAAyCH,YAAzC,CAAwD,SAASI,CAAT,CAAY,IAC5DC,CAAAA,CAAS,CAAGlB,CAAC,CAACiB,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EADgD,CAE5DC,CAAQ,CAAG,WAAaH,CAAb,CAAyB,YAAzB,CAAwC,KAAKP,SAA7C,CAAyD,gBAAzD,CAA4E,KAAKD,aAFhC,CAGhEY,QAAQ,CAACC,QAAT,CAAoB,KAAKf,QAAL,CAAgBa,CACvC,CAJD,CAYApB,CAA8B,CAACe,SAA/B,CAAyCD,kBAAzC,CAA8D,SAASE,CAAT,CAAY,IAClEO,CAAAA,CAAe,CAAGxB,CAAC,CAACiB,CAAC,CAACE,MAAH,CAAD,CAAYC,GAAZ,EADgD,CAElEC,CAAQ,CAAG,WAAa,KAAKZ,OAAlB,CAA4B,YAA5B,CAA2C,KAAKE,SAAhD,CAA4D,gBAA5D,CAA+Ea,CAFxB,CAGtEF,QAAQ,CAACC,QAAT,CAAoB,KAAKf,QAAL,CAAgBa,CACvC,CAJD,CAOApB,CAA8B,CAACe,SAA/B,CAAyCN,aAAzC,CAAyD,IAAzD,CAEAT,CAA8B,CAACe,SAA/B,CAAyCP,OAAzC,CAAmD,IAAnD,CAEAR,CAA8B,CAACe,SAA/B,CAAyCL,SAAzC,CAAqD,IAArD,CAEAV,CAA8B,CAACe,SAA/B,CAAyCR,QAAzC,CAAoD,IAApD,CAEAP,CAA8B,CAACe,SAA/B,CAAyCS,sBAAzC,CAAkE,IAAlE,CAEA,MAAsExB,CAAAA,CAEzE,CA3DK,CAAN","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 .\n\n/**\n * Module to enable inline editing of a comptency grade.\n *\n * @copyright 2015 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n\n /**\n * UserCompetencyCourseNavigation\n *\n * @param {String} userSelector The selector of the user element.\n * @param {String} competencySelector The selector of the competency element.\n * @param {String} baseUrl The base url for the page (no params).\n * @param {Number} userId The user id\n * @param {Number} competencyId The competency id\n * @param {Number} courseId The course id\n */\n var UserCompetencyCourseNavigation = function(userSelector, competencySelector, baseUrl, userId, competencyId, courseId) {\n this._baseUrl = baseUrl;\n this._userId = userId + '';\n this._competencyId = competencyId + '';\n this._courseId = courseId;\n\n $(userSelector).on('change', this._userChanged.bind(this));\n $(competencySelector).on('change', this._competencyChanged.bind(this));\n };\n\n /**\n * The user was changed in the select list.\n *\n * @method _userChanged\n * @param {Event} e\n */\n UserCompetencyCourseNavigation.prototype._userChanged = function(e) {\n var newUserId = $(e.target).val();\n var queryStr = '?userid=' + newUserId + '&courseid=' + this._courseId + '&competencyid=' + this._competencyId;\n document.location = this._baseUrl + queryStr;\n };\n\n /**\n * The competency was changed in the select list.\n *\n * @method _competencyChanged\n * @param {Event} e\n */\n UserCompetencyCourseNavigation.prototype._competencyChanged = function(e) {\n var newCompetencyId = $(e.target).val();\n var queryStr = '?userid=' + this._userId + '&courseid=' + this._courseId + '&competencyid=' + newCompetencyId;\n document.location = this._baseUrl + queryStr;\n };\n\n /** @property {Number} The id of the competency. */\n UserCompetencyCourseNavigation.prototype._competencyId = null;\n /** @property {Number} The id of the user. */\n UserCompetencyCourseNavigation.prototype._userId = null;\n /** @property {Number} The id of the course. */\n UserCompetencyCourseNavigation.prototype._courseId = null;\n /** @property {String} Plugin base url. */\n UserCompetencyCourseNavigation.prototype._baseUrl = null;\n /** @property {Boolean} Ignore the first change event for competencies. */\n UserCompetencyCourseNavigation.prototype._ignoreFirstCompetency = null;\n\n return /** @alias module:tool_lp/user_competency_course_navigation */ UserCompetencyCourseNavigation;\n\n});\n"],"file":"user_competency_course_navigation.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/user_competency_info.min.js.map b/admin/tool/lp/amd/build/user_competency_info.min.js.map index af6f8b4d125..cdbbc9541d1 100644 --- a/admin/tool/lp/amd/build/user_competency_info.min.js.map +++ b/admin/tool/lp/amd/build/user_competency_info.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/user_competency_info.js"],"names":["define","$","notification","ajax","templates","Info","rootElement","competencyId","userId","planId","courseId","displayuser","_rootElement","_competencyId","_userId","_planId","_courseId","_valid","_displayuser","_methodName","_args","competencyid","planid","_templateName","userid","courseid","prototype","reload","self","promises","call","methodname","args","done","context","render","html","js","replaceNode","fail","exception"],"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 .\n\n/**\n * Module to refresh a user competency summary in a page.\n *\n * @package tool_lp\n * @copyright 2015 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function($, notification, ajax, templates) {\n\n /**\n * Info\n *\n * @param {JQuery} rootElement Selector to replace when the information needs updating.\n * @param {Number} competencyId The id of the competency.\n * @param {Number} userId The id of the user.\n * @param {Number} planId The id of the plan.\n * @param {Number} courseId The id of the course.\n * @param {Boolean} displayuser If we should display the user info.\n */\n var Info = function(rootElement, competencyId, userId, planId, courseId, displayuser) {\n this._rootElement = rootElement;\n this._competencyId = competencyId;\n this._userId = userId;\n this._planId = planId;\n this._courseId = courseId;\n this._valid = true;\n this._displayuser = (typeof displayuser !== 'undefined') ? displayuser : false;\n\n if (this._planId) {\n this._methodName = 'tool_lp_data_for_user_competency_summary_in_plan';\n this._args = {competencyid: this._competencyId, planid: this._planId};\n this._templateName = 'tool_lp/user_competency_summary_in_plan';\n } else if (this._courseId) {\n this._methodName = 'tool_lp_data_for_user_competency_summary_in_course';\n this._args = {userid: this._userId, competencyid: this._competencyId, courseid: this._courseId};\n this._templateName = 'tool_lp/user_competency_summary_in_course';\n } else {\n this._methodName = 'tool_lp_data_for_user_competency_summary';\n this._args = {userid: this._userId, competencyid: this._competencyId};\n this._templateName = 'tool_lp/user_competency_summary';\n }\n };\n\n /**\n * Reload the info for this user competency.\n *\n * @method reload\n */\n Info.prototype.reload = function() {\n var self = this,\n promises = [];\n\n if (!this._valid) {\n return;\n }\n\n promises = ajax.call([{\n methodname: this._methodName,\n args: this._args\n }]);\n\n promises[0].done(function(context) {\n // Check if we should also the user info.\n if (self._displayuser) {\n context.displayuser = true;\n }\n templates.render(self._templateName, context).done(function(html, js) {\n templates.replaceNode(self._rootElement, html, js);\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /** @type {JQuery} The root element to replace in the DOM. */\n Info.prototype._rootElement = null;\n /** @type {Number} The id of the course. */\n Info.prototype._courseId = null;\n /** @type {Boolean} Is this module valid? */\n Info.prototype._valid = null;\n /** @type {Number} The id of the plan. */\n Info.prototype._planId = null;\n /** @type {Number} The id of the competency. */\n Info.prototype._competencyId = null;\n /** @type {Number} The id of the user. */\n Info.prototype._userId = null;\n /** @type {String} The method name to load the data. */\n Info.prototype._methodName = null;\n /** @type {Object} The arguments to load the data. */\n Info.prototype._args = null;\n /** @type {String} The template to reload the fragment. */\n Info.prototype._templateName = null;\n /** @type {Boolean} If we should display the user info? */\n Info.prototype._displayuser = false;\n\n return /** @alias module:tool_lp/user_competency_info */ Info;\n\n});\n"],"file":"user_competency_info.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/user_competency_info.js"],"names":["define","$","notification","ajax","templates","Info","rootElement","competencyId","userId","planId","courseId","displayuser","_rootElement","_competencyId","_userId","_planId","_courseId","_valid","_displayuser","_methodName","_args","competencyid","planid","_templateName","userid","courseid","prototype","reload","self","promises","call","methodname","args","done","context","render","html","js","replaceNode","fail","exception"],"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 .\n\n/**\n * Module to refresh a user competency summary in a page.\n *\n * @copyright 2015 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function($, notification, ajax, templates) {\n\n /**\n * Info\n *\n * @param {JQuery} rootElement Selector to replace when the information needs updating.\n * @param {Number} competencyId The id of the competency.\n * @param {Number} userId The id of the user.\n * @param {Number} planId The id of the plan.\n * @param {Number} courseId The id of the course.\n * @param {Boolean} displayuser If we should display the user info.\n */\n var Info = function(rootElement, competencyId, userId, planId, courseId, displayuser) {\n this._rootElement = rootElement;\n this._competencyId = competencyId;\n this._userId = userId;\n this._planId = planId;\n this._courseId = courseId;\n this._valid = true;\n this._displayuser = (typeof displayuser !== 'undefined') ? displayuser : false;\n\n if (this._planId) {\n this._methodName = 'tool_lp_data_for_user_competency_summary_in_plan';\n this._args = {competencyid: this._competencyId, planid: this._planId};\n this._templateName = 'tool_lp/user_competency_summary_in_plan';\n } else if (this._courseId) {\n this._methodName = 'tool_lp_data_for_user_competency_summary_in_course';\n this._args = {userid: this._userId, competencyid: this._competencyId, courseid: this._courseId};\n this._templateName = 'tool_lp/user_competency_summary_in_course';\n } else {\n this._methodName = 'tool_lp_data_for_user_competency_summary';\n this._args = {userid: this._userId, competencyid: this._competencyId};\n this._templateName = 'tool_lp/user_competency_summary';\n }\n };\n\n /**\n * Reload the info for this user competency.\n *\n * @method reload\n */\n Info.prototype.reload = function() {\n var self = this,\n promises = [];\n\n if (!this._valid) {\n return;\n }\n\n promises = ajax.call([{\n methodname: this._methodName,\n args: this._args\n }]);\n\n promises[0].done(function(context) {\n // Check if we should also the user info.\n if (self._displayuser) {\n context.displayuser = true;\n }\n templates.render(self._templateName, context).done(function(html, js) {\n templates.replaceNode(self._rootElement, html, js);\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /** @property {JQuery} The root element to replace in the DOM. */\n Info.prototype._rootElement = null;\n /** @property {Number} The id of the course. */\n Info.prototype._courseId = null;\n /** @property {Boolean} Is this module valid? */\n Info.prototype._valid = null;\n /** @property {Number} The id of the plan. */\n Info.prototype._planId = null;\n /** @property {Number} The id of the competency. */\n Info.prototype._competencyId = null;\n /** @property {Number} The id of the user. */\n Info.prototype._userId = null;\n /** @property {String} The method name to load the data. */\n Info.prototype._methodName = null;\n /** @property {Object} The arguments to load the data. */\n Info.prototype._args = null;\n /** @property {String} The template to reload the fragment. */\n Info.prototype._templateName = null;\n /** @property {Boolean} If we should display the user info? */\n Info.prototype._displayuser = false;\n\n return /** @alias module:tool_lp/user_competency_info */ Info;\n\n});\n"],"file":"user_competency_info.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/user_competency_plan_popup.min.js.map b/admin/tool/lp/amd/build/user_competency_plan_popup.min.js.map index 88d6b17bf57..dadaf4cc3ba 100644 --- a/admin/tool/lp/amd/build/user_competency_plan_popup.min.js.map +++ b/admin/tool/lp/amd/build/user_competency_plan_popup.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/user_competency_plan_popup.js"],"names":["define","$","notification","str","ajax","templates","Dialogue","UserCompetencyPopup","regionSelector","userCompetencySelector","planId","_regionSelector","_userCompetencySelector","_planId","on","_handleClick","bind","prototype","e","preventDefault","tr","target","closest","competencyId","data","userId","requests","call","methodname","args","competencyid","planid","done","_contextLoaded","fail","exception","then","result","eventMethodName","plan","iscompleted","userid","catch","context","self","render","html","js","get_string","title","runTemplateJS","_refresh","_pageContextLoaded","replaceNode"],"mappings":"AAuBAA,OAAM,sCAAC,CAAC,QAAD,CAAW,mBAAX,CAAgC,UAAhC,CAA4C,WAA5C,CAAyD,gBAAzD,CAA2E,kBAA3E,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAA+BC,CAA/B,CAAqCC,CAArC,CAAgDC,CAAhD,CAA0D,CAS7D,GAAIC,CAAAA,CAAmB,CAAG,SAASC,CAAT,CAAyBC,CAAzB,CAAiDC,CAAjD,CAAyD,CAC/E,KAAKC,eAAL,CAAuBH,CAAvB,CACA,KAAKI,uBAAL,CAA+BH,CAA/B,CACA,KAAKI,OAAL,CAAeH,CAAf,CAEAT,CAAC,CAAC,KAAKU,eAAN,CAAD,CAAwBG,EAAxB,CAA2B,OAA3B,CAAoC,KAAKF,uBAAzC,CAAkE,KAAKG,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAAlE,CACH,CAND,CAcAT,CAAmB,CAACU,SAApB,CAA8BF,YAA9B,CAA6C,SAASG,CAAT,CAAY,CACrDA,CAAC,CAACC,cAAF,GADqD,GAEjDC,CAAAA,CAAE,CAAGnB,CAAC,CAACiB,CAAC,CAACG,MAAH,CAAD,CAAYC,OAAZ,CAAoB,IAApB,CAF4C,CAGjDC,CAAY,CAAGtB,CAAC,CAACmB,CAAD,CAAD,CAAMI,IAAN,CAAW,cAAX,CAHkC,CAIjDC,CAAM,CAAGxB,CAAC,CAACmB,CAAD,CAAD,CAAMI,IAAN,CAAW,QAAX,CAJwC,CAKjDd,CAAM,CAAG,KAAKG,OALmC,CAOjDa,CAAQ,CAAGtB,CAAI,CAACuB,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,kDADU,CAEtBC,IAAI,CAAE,CAACC,YAAY,CAAEP,CAAf,CAA6BQ,MAAM,CAAErB,CAArC,CAFgB,CAGtBsB,IAAI,CAAE,KAAKC,cAAL,CAAoBjB,IAApB,CAAyB,IAAzB,CAHgB,CAItBkB,IAAI,CAAEhC,CAAY,CAACiC,SAJG,CAAD,CAAV,CAPsC,CAcrDT,CAAQ,CAAC,CAAD,CAAR,CAAYU,IAAZ,CAAiB,SAASC,CAAT,CAAiB,CAC9B,GAAIC,CAAAA,CAAe,CAAG,gDAAtB,CAEA,GAAID,CAAM,CAACE,IAAP,CAAYC,WAAhB,CAA6B,CACzBF,CAAe,CAAG,6CACrB,CACD,MAAOlC,CAAAA,CAAI,CAACuB,IAAL,CAAU,CAAC,CACdC,UAAU,CAAEU,CADE,CAEdT,IAAI,CAAE,CAACC,YAAY,CAAEP,CAAf,CAA6BkB,MAAM,CAAEhB,CAArC,CAA6CM,MAAM,CAAErB,CAArD,CAFQ,CAAD,CAAV,EAGH,CAHG,CAIV,CAVD,EAUGgC,KAVH,CAUSxC,CAAY,CAACiC,SAVtB,CAWH,CAzBD,CAiCA5B,CAAmB,CAACU,SAApB,CAA8BgB,cAA9B,CAA+C,SAASU,CAAT,CAAkB,CAC7D,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACAvC,CAAS,CAACwC,MAAV,CAAiB,yCAAjB,CAA4DF,CAA5D,EAAqEX,IAArE,CAA0E,SAASc,CAAT,CAAeC,CAAf,CAAmB,CACzF5C,CAAG,CAAC6C,UAAJ,CAAe,uBAAf,CAAwC,mBAAxC,EAA6DhB,IAA7D,CAAkE,SAASiB,CAAT,CAAgB,CAC7E,GAAI3C,CAAAA,CAAJ,CAAa2C,CAAb,CAAoBH,CAApB,CAA0BzC,CAAS,CAAC6C,aAAV,CAAwBlC,IAAxB,CAA6BX,CAA7B,CAAwC0C,CAAxC,CAA1B,CAAuEH,CAAI,CAACO,QAAL,CAAcnC,IAAd,CAAmB4B,CAAnB,CAAvE,IACJ,CAFD,EAEGV,IAFH,CAEQhC,CAAY,CAACiC,SAFrB,CAGH,CAJD,EAIGD,IAJH,CAIQhC,CAAY,CAACiC,SAJrB,CAKH,CAPD,CAcA5B,CAAmB,CAACU,SAApB,CAA8BkC,QAA9B,CAAyC,UAAW,CAChD,GAAIzC,CAAAA,CAAM,CAAG,KAAKG,OAAlB,CAEAT,CAAI,CAACuB,IAAL,CAAU,CAAC,CACPC,UAAU,CAAE,4BADL,CAEPC,IAAI,CAAE,CAACE,MAAM,CAAErB,CAAT,CAFC,CAGPsB,IAAI,CAAE,KAAKoB,kBAAL,CAAwBpC,IAAxB,CAA6B,IAA7B,CAHC,CAIPkB,IAAI,CAAEhC,CAAY,CAACiC,SAJZ,CAAD,CAAV,CAMH,CATD,CAiBA5B,CAAmB,CAACU,SAApB,CAA8BmC,kBAA9B,CAAmD,SAAST,CAAT,CAAkB,CACjE,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACAvC,CAAS,CAACwC,MAAV,CAAiB,mBAAjB,CAAsCF,CAAtC,EAA+CX,IAA/C,CAAoD,SAASc,CAAT,CAAeC,CAAf,CAAmB,CACnE1C,CAAS,CAACgD,WAAV,CAAsBT,CAAI,CAACjC,eAA3B,CAA4CmC,CAA5C,CAAkDC,CAAlD,CACH,CAFD,EAEGb,IAFH,CAEQhC,CAAY,CAACiC,SAFrB,CAGH,CALD,CAQA5B,CAAmB,CAACU,SAApB,CAA8BN,eAA9B,CAAgD,IAAhD,CAEAJ,CAAmB,CAACU,SAApB,CAA8BL,uBAA9B,CAAwD,IAAxD,CAEAL,CAAmB,CAACU,SAApB,CAA8BJ,OAA9B,CAAwC,IAAxC,CAEA,MAA+DN,CAAAA,CAElE,CAxGK,CAAN","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 .\n\n/**\n * Module to open user competency plan in popup\n *\n * @package report_competency\n * @copyright 2016 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/notification', 'core/str', 'core/ajax', 'core/templates', 'tool_lp/dialogue'],\n function($, notification, str, ajax, templates, Dialogue) {\n\n /**\n * UserCompetencyPopup\n *\n * @param {String} regionSelector The regionSelector\n * @param {String} userCompetencySelector The userCompetencySelector\n * @param {Number} planId The plan ID\n */\n var UserCompetencyPopup = function(regionSelector, userCompetencySelector, planId) {\n this._regionSelector = regionSelector;\n this._userCompetencySelector = userCompetencySelector;\n this._planId = planId;\n\n $(this._regionSelector).on('click', this._userCompetencySelector, this._handleClick.bind(this));\n };\n\n /**\n * Get the data from the closest TR and open the popup.\n *\n * @method _handleClick\n * @param {Event} e\n */\n UserCompetencyPopup.prototype._handleClick = function(e) {\n e.preventDefault();\n var tr = $(e.target).closest('tr');\n var competencyId = $(tr).data('competencyid');\n var userId = $(tr).data('userid');\n var planId = this._planId;\n\n var requests = ajax.call([{\n methodname: 'tool_lp_data_for_user_competency_summary_in_plan',\n args: {competencyid: competencyId, planid: planId},\n done: this._contextLoaded.bind(this),\n fail: notification.exception\n }]);\n // Log the user competency viewed in plan event.\n requests[0].then(function(result) {\n var eventMethodName = 'core_competency_user_competency_viewed_in_plan';\n // Trigger core_competency_user_competency_plan_viewed event instead if plan is already completed.\n if (result.plan.iscompleted) {\n eventMethodName = 'core_competency_user_competency_plan_viewed';\n }\n return ajax.call([{\n methodname: eventMethodName,\n args: {competencyid: competencyId, userid: userId, planid: planId}\n }])[0];\n }).catch(notification.exception);\n };\n\n /**\n * We loaded the context, now render the template.\n *\n * @method _contextLoaded\n * @param {Object} context\n */\n UserCompetencyPopup.prototype._contextLoaded = function(context) {\n var self = this;\n templates.render('tool_lp/user_competency_summary_in_plan', context).done(function(html, js) {\n str.get_string('usercompetencysummary', 'report_competency').done(function(title) {\n (new Dialogue(title, html, templates.runTemplateJS.bind(templates, js), self._refresh.bind(self), true));\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Refresh the page.\n *\n * @method _refresh\n */\n UserCompetencyPopup.prototype._refresh = function() {\n var planId = this._planId;\n\n ajax.call([{\n methodname: 'tool_lp_data_for_plan_page',\n args: {planid: planId},\n done: this._pageContextLoaded.bind(this),\n fail: notification.exception\n }]);\n };\n\n /**\n * We loaded the context, now render the template.\n *\n * @method _pageContextLoaded\n * @param {Object} context\n */\n UserCompetencyPopup.prototype._pageContextLoaded = function(context) {\n var self = this;\n templates.render('tool_lp/plan_page', context).done(function(html, js) {\n templates.replaceNode(self._regionSelector, html, js);\n }).fail(notification.exception);\n };\n\n /** @type {String} The selector for the region with the user competencies */\n UserCompetencyPopup.prototype._regionSelector = null;\n /** @type {String} The selector for the region with a single user competencies */\n UserCompetencyPopup.prototype._userCompetencySelector = null;\n /** @type {Number} The plan Id */\n UserCompetencyPopup.prototype._planId = null;\n\n return /** @alias module:tool_lp/user_competency_plan_popup */ UserCompetencyPopup;\n\n});\n"],"file":"user_competency_plan_popup.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/user_competency_plan_popup.js"],"names":["define","$","notification","str","ajax","templates","Dialogue","UserCompetencyPopup","regionSelector","userCompetencySelector","planId","_regionSelector","_userCompetencySelector","_planId","on","_handleClick","bind","prototype","e","preventDefault","tr","target","closest","competencyId","data","userId","requests","call","methodname","args","competencyid","planid","done","_contextLoaded","fail","exception","then","result","eventMethodName","plan","iscompleted","userid","catch","context","self","render","html","js","get_string","title","runTemplateJS","_refresh","_pageContextLoaded","replaceNode"],"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 .\n\n/**\n * Module to open user competency plan in popup\n *\n * @copyright 2016 Issam Taboubi \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/notification', 'core/str', 'core/ajax', 'core/templates', 'tool_lp/dialogue'],\n function($, notification, str, ajax, templates, Dialogue) {\n\n /**\n * UserCompetencyPopup\n *\n * @param {String} regionSelector The regionSelector\n * @param {String} userCompetencySelector The userCompetencySelector\n * @param {Number} planId The plan ID\n */\n var UserCompetencyPopup = function(regionSelector, userCompetencySelector, planId) {\n this._regionSelector = regionSelector;\n this._userCompetencySelector = userCompetencySelector;\n this._planId = planId;\n\n $(this._regionSelector).on('click', this._userCompetencySelector, this._handleClick.bind(this));\n };\n\n /**\n * Get the data from the closest TR and open the popup.\n *\n * @method _handleClick\n * @param {Event} e\n */\n UserCompetencyPopup.prototype._handleClick = function(e) {\n e.preventDefault();\n var tr = $(e.target).closest('tr');\n var competencyId = $(tr).data('competencyid');\n var userId = $(tr).data('userid');\n var planId = this._planId;\n\n var requests = ajax.call([{\n methodname: 'tool_lp_data_for_user_competency_summary_in_plan',\n args: {competencyid: competencyId, planid: planId},\n done: this._contextLoaded.bind(this),\n fail: notification.exception\n }]);\n // Log the user competency viewed in plan event.\n requests[0].then(function(result) {\n var eventMethodName = 'core_competency_user_competency_viewed_in_plan';\n // Trigger core_competency_user_competency_plan_viewed event instead if plan is already completed.\n if (result.plan.iscompleted) {\n eventMethodName = 'core_competency_user_competency_plan_viewed';\n }\n return ajax.call([{\n methodname: eventMethodName,\n args: {competencyid: competencyId, userid: userId, planid: planId}\n }])[0];\n }).catch(notification.exception);\n };\n\n /**\n * We loaded the context, now render the template.\n *\n * @method _contextLoaded\n * @param {Object} context\n */\n UserCompetencyPopup.prototype._contextLoaded = function(context) {\n var self = this;\n templates.render('tool_lp/user_competency_summary_in_plan', context).done(function(html, js) {\n str.get_string('usercompetencysummary', 'report_competency').done(function(title) {\n (new Dialogue(title, html, templates.runTemplateJS.bind(templates, js), self._refresh.bind(self), true));\n }).fail(notification.exception);\n }).fail(notification.exception);\n };\n\n /**\n * Refresh the page.\n *\n * @method _refresh\n */\n UserCompetencyPopup.prototype._refresh = function() {\n var planId = this._planId;\n\n ajax.call([{\n methodname: 'tool_lp_data_for_plan_page',\n args: {planid: planId},\n done: this._pageContextLoaded.bind(this),\n fail: notification.exception\n }]);\n };\n\n /**\n * We loaded the context, now render the template.\n *\n * @method _pageContextLoaded\n * @param {Object} context\n */\n UserCompetencyPopup.prototype._pageContextLoaded = function(context) {\n var self = this;\n templates.render('tool_lp/plan_page', context).done(function(html, js) {\n templates.replaceNode(self._regionSelector, html, js);\n }).fail(notification.exception);\n };\n\n /** @property {String} The selector for the region with the user competencies */\n UserCompetencyPopup.prototype._regionSelector = null;\n /** @property {String} The selector for the region with a single user competencies */\n UserCompetencyPopup.prototype._userCompetencySelector = null;\n /** @property {Number} The plan Id */\n UserCompetencyPopup.prototype._planId = null;\n\n return /** @alias module:tool_lp/user_competency_plan_popup */ UserCompetencyPopup;\n\n});\n"],"file":"user_competency_plan_popup.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/user_competency_workflow.min.js.map b/admin/tool/lp/amd/build/user_competency_workflow.min.js.map index afc0a4c44b2..52dfc5dc575 100644 --- a/admin/tool/lp/amd/build/user_competency_workflow.min.js.map +++ b/admin/tool/lp/amd/build/user_competency_workflow.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/user_competency_workflow.js"],"names":["define","$","Templates","Ajax","Notification","Str","Menubar","EventBase","UserCompetencyWorkflow","prototype","constructor","apply","Object","create","_nodeSelector","_cancelReviewRequest","data","call","methodname","args","userid","competencyid","then","_trigger","bind","catch","cancelReviewRequest","_cancelReviewRequestHandler","e","preventDefault","_findUserCompetencyData","target","_requestReview","requestReview","_requestReviewHandler","_startReview","startReview","_startReviewHandler","_stopReview","stopReview","_stopReviewHandler","enhanceMenubar","selector","enhance","node","parent","parents","length","Error","registerEvents","wrapper","find","click"],"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 .\n\n/**\n * User competency workflow.\n *\n * @module tool_lp/user_competency_workflow\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/templates',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'tool_lp/menubar',\n 'tool_lp/event_base'],\n function($, Templates, Ajax, Notification, Str, Menubar, EventBase) {\n\n /**\n * UserCompetencyWorkflow class.\n *\n * @param {String} selector The node containing the buttons to switch mode.\n */\n var UserCompetencyWorkflow = function() {\n EventBase.prototype.constructor.apply(this, []);\n };\n UserCompetencyWorkflow.prototype = Object.create(EventBase.prototype);\n\n /** @type {String} The selector to find the user competency data. */\n UserCompetencyWorkflow.prototype._nodeSelector = '[data-node=\"user-competency\"]';\n\n /**\n * Cancel a review request and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _cancelReviewRequest\n */\n UserCompetencyWorkflow.prototype._cancelReviewRequest = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_cancel_review_request',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n\n Ajax.call([call])[0].then(function() {\n this._trigger('review-request-cancelled', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Cancel a review request an refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method cancelReviewRequest\n */\n UserCompetencyWorkflow.prototype.cancelReviewRequest = function(data) {\n this._cancelReviewRequest(data);\n };\n\n /**\n * Cancel a review request handler.\n *\n * @param {Event} e The event.\n * @method _cancelReviewRequestHandler\n */\n UserCompetencyWorkflow.prototype._cancelReviewRequestHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.cancelReviewRequest(data);\n };\n\n /**\n * Request a review and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _requestReview\n */\n UserCompetencyWorkflow.prototype._requestReview = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_request_review',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n\n Ajax.call([call])[0].then(function() {\n this._trigger('review-requested', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Request a review.\n *\n * @param {Object} data The user competency data.\n * @method requestReview\n */\n UserCompetencyWorkflow.prototype.requestReview = function(data) {\n this._requestReview(data);\n };\n\n /**\n * Request a review handler.\n *\n * @param {Event} e The event.\n * @method _requestReviewHandler\n */\n UserCompetencyWorkflow.prototype._requestReviewHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.requestReview(data);\n };\n\n /**\n * Start a review and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _startReview\n */\n UserCompetencyWorkflow.prototype._startReview = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_start_review',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n Ajax.call([call])[0].then(function() {\n this._trigger('review-started', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Start a review.\n *\n * @param {Object} data The user competency data.\n * @method startReview\n */\n UserCompetencyWorkflow.prototype.startReview = function(data) {\n this._startReview(data);\n };\n\n /**\n * Start a review handler.\n *\n * @param {Event} e The event.\n * @method _startReviewHandler\n */\n UserCompetencyWorkflow.prototype._startReviewHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.startReview(data);\n };\n\n /**\n * Stop a review and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _stopReview\n */\n UserCompetencyWorkflow.prototype._stopReview = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_stop_review',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n\n Ajax.call([call])[0].then(function() {\n this._trigger('review-stopped', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Stop a review.\n *\n * @param {Object} data The user competency data.\n * @method stopReview\n */\n UserCompetencyWorkflow.prototype.stopReview = function(data) {\n this._stopReview(data);\n };\n\n /**\n * Stop a review handler.\n *\n * @param {Event} e The event.\n * @method _stopReviewHandler\n */\n UserCompetencyWorkflow.prototype._stopReviewHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.stopReview(data);\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {\n Menubar.enhance(selector, {\n '[data-action=\"request-review\"]': this._requestReviewHandler.bind(this),\n '[data-action=\"cancel-review-request\"]': this._cancelReviewRequestHandler.bind(this),\n });\n };\n\n /**\n * Find the user competency data from a node.\n *\n * @param {Node} node The node to search from.\n * @return {Object} User competency data.\n */\n UserCompetencyWorkflow.prototype._findUserCompetencyData = function(node) {\n var parent = node.parents(this._nodeSelector),\n data;\n\n if (parent.length != 1) {\n throw new Error('The evidence node was not located.');\n }\n\n data = parent.data();\n if (typeof data === 'undefined' || typeof data.userid === 'undefined' || typeof data.competencyid === 'undefined') {\n throw new Error('User competency data could not be found.');\n }\n\n return data;\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {\n Menubar.enhance(selector, {\n '[data-action=\"request-review\"]': this._requestReviewHandler.bind(this),\n '[data-action=\"cancel-review-request\"]': this._cancelReviewRequestHandler.bind(this),\n '[data-action=\"start-review\"]': this._startReviewHandler.bind(this),\n '[data-action=\"stop-review\"]': this._stopReviewHandler.bind(this),\n });\n };\n\n /**\n * Register the events in the region.\n *\n * @param {String} selector The base selector to search nodes in and attach events.\n */\n UserCompetencyWorkflow.prototype.registerEvents = function(selector) {\n var wrapper = $(selector);\n\n wrapper.find('[data-action=\"request-review\"]').click(this._requestReviewHandler.bind(this));\n wrapper.find('[data-action=\"cancel-review-request\"]').click(this._cancelReviewRequestHandler.bind(this));\n wrapper.find('[data-action=\"start-review\"]').click(this._startReviewHandler.bind(this));\n wrapper.find('[data-action=\"stop-review\"]').click(this._stopReviewHandler.bind(this));\n };\n\n return /** @alias module:tool_lp/user_competency_actions */ UserCompetencyWorkflow;\n});\n"],"file":"user_competency_workflow.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/user_competency_workflow.js"],"names":["define","$","Templates","Ajax","Notification","Str","Menubar","EventBase","UserCompetencyWorkflow","prototype","constructor","apply","Object","create","_nodeSelector","_cancelReviewRequest","data","call","methodname","args","userid","competencyid","then","_trigger","bind","catch","cancelReviewRequest","_cancelReviewRequestHandler","e","preventDefault","_findUserCompetencyData","target","_requestReview","requestReview","_requestReviewHandler","_startReview","startReview","_startReviewHandler","_stopReview","stopReview","_stopReviewHandler","enhanceMenubar","selector","enhance","node","parent","parents","length","Error","registerEvents","wrapper","find","click"],"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 .\n\n/**\n * User competency workflow.\n *\n * @module tool_lp/user_competency_workflow\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/templates',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'tool_lp/menubar',\n 'tool_lp/event_base'],\n function($, Templates, Ajax, Notification, Str, Menubar, EventBase) {\n\n /**\n * UserCompetencyWorkflow class.\n *\n * @param {String} selector The node containing the buttons to switch mode.\n */\n var UserCompetencyWorkflow = function() {\n EventBase.prototype.constructor.apply(this, []);\n };\n UserCompetencyWorkflow.prototype = Object.create(EventBase.prototype);\n\n /** @property {String} The selector to find the user competency data. */\n UserCompetencyWorkflow.prototype._nodeSelector = '[data-node=\"user-competency\"]';\n\n /**\n * Cancel a review request and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _cancelReviewRequest\n */\n UserCompetencyWorkflow.prototype._cancelReviewRequest = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_cancel_review_request',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n\n Ajax.call([call])[0].then(function() {\n this._trigger('review-request-cancelled', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Cancel a review request an refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method cancelReviewRequest\n */\n UserCompetencyWorkflow.prototype.cancelReviewRequest = function(data) {\n this._cancelReviewRequest(data);\n };\n\n /**\n * Cancel a review request handler.\n *\n * @param {Event} e The event.\n * @method _cancelReviewRequestHandler\n */\n UserCompetencyWorkflow.prototype._cancelReviewRequestHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.cancelReviewRequest(data);\n };\n\n /**\n * Request a review and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _requestReview\n */\n UserCompetencyWorkflow.prototype._requestReview = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_request_review',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n\n Ajax.call([call])[0].then(function() {\n this._trigger('review-requested', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Request a review.\n *\n * @param {Object} data The user competency data.\n * @method requestReview\n */\n UserCompetencyWorkflow.prototype.requestReview = function(data) {\n this._requestReview(data);\n };\n\n /**\n * Request a review handler.\n *\n * @param {Event} e The event.\n * @method _requestReviewHandler\n */\n UserCompetencyWorkflow.prototype._requestReviewHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.requestReview(data);\n };\n\n /**\n * Start a review and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _startReview\n */\n UserCompetencyWorkflow.prototype._startReview = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_start_review',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n Ajax.call([call])[0].then(function() {\n this._trigger('review-started', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Start a review.\n *\n * @param {Object} data The user competency data.\n * @method startReview\n */\n UserCompetencyWorkflow.prototype.startReview = function(data) {\n this._startReview(data);\n };\n\n /**\n * Start a review handler.\n *\n * @param {Event} e The event.\n * @method _startReviewHandler\n */\n UserCompetencyWorkflow.prototype._startReviewHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.startReview(data);\n };\n\n /**\n * Stop a review and refresh the view.\n *\n * @param {Object} data The user competency data.\n * @method _stopReview\n */\n UserCompetencyWorkflow.prototype._stopReview = function(data) {\n var call = {\n methodname: 'core_competency_user_competency_stop_review',\n args: {\n userid: data.userid,\n competencyid: data.competencyid\n }\n };\n\n Ajax.call([call])[0].then(function() {\n this._trigger('review-stopped', data);\n this._trigger('status-changed', data);\n }.bind(this)).catch(function() {\n this._trigger('error-occured', data);\n }.bind(this));\n };\n\n /**\n * Stop a review.\n *\n * @param {Object} data The user competency data.\n * @method stopReview\n */\n UserCompetencyWorkflow.prototype.stopReview = function(data) {\n this._stopReview(data);\n };\n\n /**\n * Stop a review handler.\n *\n * @param {Event} e The event.\n * @method _stopReviewHandler\n */\n UserCompetencyWorkflow.prototype._stopReviewHandler = function(e) {\n e.preventDefault();\n var data = this._findUserCompetencyData($(e.target));\n this.stopReview(data);\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {\n Menubar.enhance(selector, {\n '[data-action=\"request-review\"]': this._requestReviewHandler.bind(this),\n '[data-action=\"cancel-review-request\"]': this._cancelReviewRequestHandler.bind(this),\n });\n };\n\n /**\n * Find the user competency data from a node.\n *\n * @param {Node} node The node to search from.\n * @return {Object} User competency data.\n */\n UserCompetencyWorkflow.prototype._findUserCompetencyData = function(node) {\n var parent = node.parents(this._nodeSelector),\n data;\n\n if (parent.length != 1) {\n throw new Error('The evidence node was not located.');\n }\n\n data = parent.data();\n if (typeof data === 'undefined' || typeof data.userid === 'undefined' || typeof data.competencyid === 'undefined') {\n throw new Error('User competency data could not be found.');\n }\n\n return data;\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {\n Menubar.enhance(selector, {\n '[data-action=\"request-review\"]': this._requestReviewHandler.bind(this),\n '[data-action=\"cancel-review-request\"]': this._cancelReviewRequestHandler.bind(this),\n '[data-action=\"start-review\"]': this._startReviewHandler.bind(this),\n '[data-action=\"stop-review\"]': this._stopReviewHandler.bind(this),\n });\n };\n\n /**\n * Register the events in the region.\n *\n * @param {String} selector The base selector to search nodes in and attach events.\n */\n UserCompetencyWorkflow.prototype.registerEvents = function(selector) {\n var wrapper = $(selector);\n\n wrapper.find('[data-action=\"request-review\"]').click(this._requestReviewHandler.bind(this));\n wrapper.find('[data-action=\"cancel-review-request\"]').click(this._cancelReviewRequestHandler.bind(this));\n wrapper.find('[data-action=\"start-review\"]').click(this._startReviewHandler.bind(this));\n wrapper.find('[data-action=\"stop-review\"]').click(this._stopReviewHandler.bind(this));\n };\n\n return /** @alias module:tool_lp/user_competency_actions */ UserCompetencyWorkflow;\n});\n"],"file":"user_competency_workflow.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/build/user_evidence_actions.min.js.map b/admin/tool/lp/amd/build/user_evidence_actions.min.js.map index 47d584ccef2..7a2d437981c 100644 --- a/admin/tool/lp/amd/build/user_evidence_actions.min.js.map +++ b/admin/tool/lp/amd/build/user_evidence_actions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/user_evidence_actions.js"],"names":["define","$","templates","ajax","notification","str","Menubar","PickerUserPlans","UserEvidenceActions","type","_type","_region","_evidenceNode","_template","_contextMethod","TypeError","prototype","_getContextArgs","evidenceData","self","args","id","userid","_renderView","context","render","then","newhtml","newjs","replaceNode","_callAndRefresh","calls","push","methodname","when","apply","call","arguments","length","fail","exception","_doDelete","deleteEvidence","requests","done","evidence","get_strings","key","component","param","name","strings","confirm","_deleteEvidenceHandler","e","preventDefault","data","_findEvidenceData","target","_doCreateUserEvidenceCompetency","competencyIds","each","index","competencyId","userevidenceid","competencyid","createUserEvidenceCompetency","picker","on","requestReview","display","_createUserEvidenceCompetencyHandler","_doDeleteUserEvidenceCompetency","deleteUserEvidenceCompetency","_deleteUserEvidenceCompetencyHandler","currentTarget","_doReviewUserEvidenceCompetencies","reviewUserEvidenceCompetencies","_reviewUserEvidenceCompetenciesHandler","node","parent","parentsUntil","Error","enhanceMenubar","selector","enhance","bind","registerEvents","wrapper","find","click"],"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 .\n\n/**\n * User evidence actions.\n *\n * @module tool_lp/user_evidence_actions\n * @package tool_lp\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/templates',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'tool_lp/menubar',\n 'tool_lp/competencypicker_user_plans'],\n function($, templates, ajax, notification, str, Menubar, PickerUserPlans) {\n\n /**\n * UserEvidenceActions class.\n *\n * Note that presently this cannot be instantiated more than once per page.\n *\n * @param {String} type The type of page we're in.\n */\n var UserEvidenceActions = function(type) {\n this._type = type;\n\n if (type === 'evidence') {\n // This is the page to view one evidence.\n this._region = '[data-region=\"user-evidence-page\"]';\n this._evidenceNode = '[data-region=\"user-evidence-page\"]';\n this._template = 'tool_lp/user_evidence_page';\n this._contextMethod = 'tool_lp_data_for_user_evidence_page';\n\n } else if (type === 'list') {\n // This is the page to view a list of evidence.\n this._region = '[data-region=\"user-evidence-list\"]';\n this._evidenceNode = '[data-region=\"user-evidence-node\"]';\n this._template = 'tool_lp/user_evidence_list_page';\n this._contextMethod = 'tool_lp_data_for_user_evidence_list_page';\n\n } else {\n throw new TypeError('Unexpected type.');\n }\n };\n\n /** @type {String} Ajax method to fetch the page data from. */\n UserEvidenceActions.prototype._contextMethod = null;\n /** @type {String} Selector to find the node describing the evidence. */\n UserEvidenceActions.prototype._evidenceNode = null;\n /** @type {String} Selector mapping to the region to update. Usually similar to wrapper. */\n UserEvidenceActions.prototype._region = null;\n /** @type {String} Name of the template used to render the region. */\n UserEvidenceActions.prototype._template = null;\n /** @type {String} Type of page/region we're in. */\n UserEvidenceActions.prototype._type = null;\n\n /**\n * Resolve the arguments to refresh the region.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @return {Object} List of arguments.\n */\n UserEvidenceActions.prototype._getContextArgs = function(evidenceData) {\n var self = this,\n args = {};\n\n if (self._type === 'evidence') {\n args = {\n id: evidenceData.id\n };\n\n } else if (self._type === 'list') {\n args = {\n userid: evidenceData.userid\n };\n }\n\n return args;\n };\n\n /**\n * Callback to render the region template.\n *\n * @param {Object} context The context for the template.\n * @return {Promise}\n */\n UserEvidenceActions.prototype._renderView = function(context) {\n var self = this;\n return templates.render(self._template, context)\n .then(function(newhtml, newjs) {\n templates.replaceNode($(self._region), newhtml, newjs);\n return;\n });\n };\n\n /**\n * Call multiple ajax methods, and refresh.\n *\n * @param {Array} calls List of Ajax calls.\n * @param {Object} evidenceData Evidence data from evidence node.\n * @return {Promise}\n */\n UserEvidenceActions.prototype._callAndRefresh = function(calls, evidenceData) {\n var self = this;\n calls.push({\n methodname: self._contextMethod,\n args: self._getContextArgs(evidenceData)\n });\n\n // Apply all the promises, and refresh when the last one is resolved.\n return $.when.apply($.when, ajax.call(calls))\n .then(function() {\n return self._renderView(arguments[arguments.length - 1]);\n })\n .fail(notification.exception);\n };\n\n /**\n * Delete a plan and reload the region.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype._doDelete = function(evidenceData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_delete_user_evidence',\n args: {id: evidenceData.id}\n }];\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Delete a plan.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype.deleteEvidence = function(evidenceData) {\n var self = this,\n requests;\n\n requests = ajax.call([{\n methodname: 'core_competency_read_user_evidence',\n args: {id: evidenceData.id}\n }]);\n\n requests[0].done(function(evidence) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deleteuserevidence', component: 'tool_lp', param: evidence.name},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete evidence X?\n strings[2], // Delete.\n strings[3], // Cancel.\n function() {\n self._doDelete(evidenceData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Delete evidence handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._deleteEvidenceHandler = function(e) {\n e.preventDefault();\n var data = this._findEvidenceData($(e.target));\n this.deleteEvidence(data);\n };\n\n /**\n * Link a competency and reload.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @param {Number} competencyIds The competency IDs.\n * @param {Boolean} requestReview Send competencies to review.\n */\n UserEvidenceActions.prototype._doCreateUserEvidenceCompetency = function(evidenceData, competencyIds) {\n var self = this,\n calls = [];\n\n $.each(competencyIds, function(index, competencyId) {\n calls.push({\n methodname: 'core_competency_create_user_evidence_competency',\n args: {\n userevidenceid: evidenceData.id,\n competencyid: competencyId,\n }\n });\n });\n\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Create a user evidence competency.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype.createUserEvidenceCompetency = function(evidenceData) {\n var self = this,\n picker = new PickerUserPlans(evidenceData.userid);\n\n picker.on('save', function(e, data) {\n var competencyIds = data.competencyIds;\n self._doCreateUserEvidenceCompetency(evidenceData, competencyIds, data.requestReview);\n });\n\n picker.display();\n };\n\n /**\n * Create user evidence competency handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._createUserEvidenceCompetencyHandler = function(e) {\n e.preventDefault();\n var data = this._findEvidenceData($(e.target));\n this.createUserEvidenceCompetency(data);\n };\n\n /**\n * Remove a linked competency and reload.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @param {Number} competencyId The competency ID.\n */\n UserEvidenceActions.prototype._doDeleteUserEvidenceCompetency = function(evidenceData, competencyId) {\n var self = this,\n calls = [];\n\n calls.push({\n methodname: 'core_competency_delete_user_evidence_competency',\n args: {\n userevidenceid: evidenceData.id,\n competencyid: competencyId,\n }\n });\n\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Delete a user evidence competency.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @param {Number} competencyId The competency ID.\n */\n UserEvidenceActions.prototype.deleteUserEvidenceCompetency = function(evidenceData, competencyId) {\n this._doDeleteUserEvidenceCompetency(evidenceData, competencyId);\n };\n\n /**\n * Delete user evidence competency handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._deleteUserEvidenceCompetencyHandler = function(e) {\n var data = this._findEvidenceData($(e.currentTarget)),\n competencyId = $(e.currentTarget).data('id');\n e.preventDefault();\n this.deleteUserEvidenceCompetency(data, competencyId);\n };\n\n /**\n * Send request review for user evidence competencies and reload the region.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype._doReviewUserEvidenceCompetencies = function(evidenceData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_request_review_of_user_evidence_linked_competencies',\n args: {id: evidenceData.id}\n }];\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Send request review for user evidence competencies.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype.reviewUserEvidenceCompetencies = function(evidenceData) {\n var self = this,\n requests;\n\n requests = ajax.call([{\n methodname: 'core_competency_read_user_evidence',\n args: {id: evidenceData.id}\n }]);\n\n requests[0].done(function(evidence) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'sendallcompetenciestoreview', component: 'tool_lp', param: evidence.name},\n {key: 'confirm', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Send all competencies in review for X?\n strings[2], // Confirm.\n strings[3], // Cancel.\n function() {\n self._doReviewUserEvidenceCompetencies(evidenceData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Send request review for user evidence competencies handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._reviewUserEvidenceCompetenciesHandler = function(e) {\n e.preventDefault();\n var data = this._findEvidenceData($(e.target));\n this.reviewUserEvidenceCompetencies(data);\n };\n\n /**\n * Find the evidence data from the evidence node.\n *\n * @param {Node} node The node to search from.\n * @return {Object} Evidence data.\n */\n UserEvidenceActions.prototype._findEvidenceData = function(node) {\n var parent = node.parentsUntil($(this._region).parent(), this._evidenceNode),\n data;\n\n if (parent.length != 1) {\n throw new Error('The evidence node was not located.');\n }\n\n data = parent.data();\n if (typeof data === 'undefined' || typeof data.id === 'undefined') {\n throw new Error('Evidence data could not be found.');\n }\n\n return data;\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n UserEvidenceActions.prototype.enhanceMenubar = function(selector) {\n var self = this;\n Menubar.enhance(selector, {\n '[data-action=\"user-evidence-delete\"]': self._deleteEvidenceHandler.bind(self),\n '[data-action=\"link-competency\"]': self._createUserEvidenceCompetencyHandler.bind(self),\n '[data-action=\"send-competencies-review\"]': self._reviewUserEvidenceCompetenciesHandler.bind(self),\n });\n };\n\n /**\n * Register the events in the region.\n *\n * At this stage this cannot be used with enhanceMenubar or multiple handlers\n * will be added to the same node.\n */\n UserEvidenceActions.prototype.registerEvents = function() {\n var wrapper = $(this._region),\n self = this;\n\n wrapper.find('[data-action=\"user-evidence-delete\"]').click(self._deleteEvidenceHandler.bind(self));\n wrapper.find('[data-action=\"link-competency\"]').click(self._createUserEvidenceCompetencyHandler.bind(self));\n wrapper.find('[data-action=\"delete-competency-link\"]').click(self._deleteUserEvidenceCompetencyHandler.bind(self));\n wrapper.find('[data-action=\"send-competencies-review\"]').click(self._reviewUserEvidenceCompetenciesHandler.bind(self));\n };\n\n return /** @alias module:tool_lp/user_evidence_actions */ UserEvidenceActions;\n});\n"],"file":"user_evidence_actions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/user_evidence_actions.js"],"names":["define","$","templates","ajax","notification","str","Menubar","PickerUserPlans","UserEvidenceActions","type","_type","_region","_evidenceNode","_template","_contextMethod","TypeError","prototype","_getContextArgs","evidenceData","self","args","id","userid","_renderView","context","render","then","newhtml","newjs","replaceNode","_callAndRefresh","calls","push","methodname","when","apply","call","arguments","length","fail","exception","_doDelete","deleteEvidence","requests","done","evidence","get_strings","key","component","param","name","strings","confirm","_deleteEvidenceHandler","e","preventDefault","data","_findEvidenceData","target","_doCreateUserEvidenceCompetency","competencyIds","each","index","competencyId","userevidenceid","competencyid","createUserEvidenceCompetency","picker","on","requestReview","display","_createUserEvidenceCompetencyHandler","_doDeleteUserEvidenceCompetency","deleteUserEvidenceCompetency","_deleteUserEvidenceCompetencyHandler","currentTarget","_doReviewUserEvidenceCompetencies","reviewUserEvidenceCompetencies","_reviewUserEvidenceCompetenciesHandler","node","parent","parentsUntil","Error","enhanceMenubar","selector","enhance","bind","registerEvents","wrapper","find","click"],"mappings":"AAsBAA,OAAM,iCAAC,CAAC,QAAD,CACC,gBADD,CAEC,WAFD,CAGC,mBAHD,CAIC,UAJD,CAKC,iBALD,CAMC,qCAND,CAAD,CAOE,SAASC,CAAT,CAAYC,CAAZ,CAAuBC,CAAvB,CAA6BC,CAA7B,CAA2CC,CAA3C,CAAgDC,CAAhD,CAAyDC,CAAzD,CAA0E,CAS9E,GAAIC,CAAAA,CAAmB,CAAG,SAASC,CAAT,CAAe,CACrC,KAAKC,KAAL,CAAaD,CAAb,CAEA,GAAa,UAAT,GAAAA,CAAJ,CAAyB,CAErB,KAAKE,OAAL,CAAe,sCAAf,CACA,KAAKC,aAAL,CAAqB,sCAArB,CACA,KAAKC,SAAL,CAAiB,4BAAjB,CACA,KAAKC,cAAL,CAAsB,qCAEzB,CAPD,IAOO,IAAa,MAAT,GAAAL,CAAJ,CAAqB,CAExB,KAAKE,OAAL,CAAe,sCAAf,CACA,KAAKC,aAAL,CAAqB,sCAArB,CACA,KAAKC,SAAL,CAAiB,iCAAjB,CACA,KAAKC,cAAL,CAAsB,0CAEzB,CAPM,IAOA,CACH,KAAM,IAAIC,CAAAA,SAAJ,CAAc,kBAAd,CACT,CACJ,CApBD,CAuBAP,CAAmB,CAACQ,SAApB,CAA8BF,cAA9B,CAA+C,IAA/C,CAEAN,CAAmB,CAACQ,SAApB,CAA8BJ,aAA9B,CAA8C,IAA9C,CAEAJ,CAAmB,CAACQ,SAApB,CAA8BL,OAA9B,CAAwC,IAAxC,CAEAH,CAAmB,CAACQ,SAApB,CAA8BH,SAA9B,CAA0C,IAA1C,CAEAL,CAAmB,CAACQ,SAApB,CAA8BN,KAA9B,CAAsC,IAAtC,CAQAF,CAAmB,CAACQ,SAApB,CAA8BC,eAA9B,CAAgD,SAASC,CAAT,CAAuB,CACnE,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIC,CAAI,CAAG,EADX,CAGA,GAAmB,UAAf,GAAAD,CAAI,CAACT,KAAT,CAA+B,CAC3BU,CAAI,CAAG,CACHC,EAAE,CAAEH,CAAY,CAACG,EADd,CAIV,CALD,IAKO,IAAmB,MAAf,GAAAF,CAAI,CAACT,KAAT,CAA2B,CAC9BU,CAAI,CAAG,CACHE,MAAM,CAAEJ,CAAY,CAACI,MADlB,CAGV,CAED,MAAOF,CAAAA,CACV,CAhBD,CAwBAZ,CAAmB,CAACQ,SAApB,CAA8BO,WAA9B,CAA4C,SAASC,CAAT,CAAkB,CAC1D,GAAIL,CAAAA,CAAI,CAAG,IAAX,CACA,MAAOjB,CAAAA,CAAS,CAACuB,MAAV,CAAiBN,CAAI,CAACN,SAAtB,CAAiCW,CAAjC,EACFE,IADE,CACG,SAASC,CAAT,CAAkBC,CAAlB,CAAyB,CAC3B1B,CAAS,CAAC2B,WAAV,CAAsB5B,CAAC,CAACkB,CAAI,CAACR,OAAN,CAAvB,CAAuCgB,CAAvC,CAAgDC,CAAhD,CAEH,CAJE,CAKV,CAPD,CAgBApB,CAAmB,CAACQ,SAApB,CAA8Bc,eAA9B,CAAgD,SAASC,CAAT,CAAgBb,CAAhB,CAA8B,CAC1E,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACAY,CAAK,CAACC,IAAN,CAAW,CACPC,UAAU,CAAEd,CAAI,CAACL,cADV,CAEPM,IAAI,CAAED,CAAI,CAACF,eAAL,CAAqBC,CAArB,CAFC,CAAX,EAMA,MAAOjB,CAAAA,CAAC,CAACiC,IAAF,CAAOC,KAAP,CAAalC,CAAC,CAACiC,IAAf,CAAqB/B,CAAI,CAACiC,IAAL,CAAUL,CAAV,CAArB,EACFL,IADE,CACG,UAAW,CACb,MAAOP,CAAAA,CAAI,CAACI,WAAL,CAAiBc,SAAS,CAACA,SAAS,CAACC,MAAV,CAAmB,CAApB,CAA1B,CACV,CAHE,EAIFC,IAJE,CAIGnC,CAAY,CAACoC,SAJhB,CAKV,CAbD,CAoBAhC,CAAmB,CAACQ,SAApB,CAA8ByB,SAA9B,CAA0C,SAASvB,CAAT,CAAuB,CAC7D,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIY,CAAK,CAAG,CAAC,CACLE,UAAU,CAAE,sCADP,CAELb,IAAI,CAAE,CAACC,EAAE,CAAEH,CAAY,CAACG,EAAlB,CAFD,CAAD,CADZ,CAKAF,CAAI,CAACW,eAAL,CAAqBC,CAArB,CAA4Bb,CAA5B,CACH,CAPD,CAcAV,CAAmB,CAACQ,SAApB,CAA8B0B,cAA9B,CAA+C,SAASxB,CAAT,CAAuB,CAClE,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIwB,CADJ,CAGAA,CAAQ,CAAGxC,CAAI,CAACiC,IAAL,CAAU,CAAC,CAClBH,UAAU,CAAE,oCADM,CAElBb,IAAI,CAAE,CAACC,EAAE,CAAEH,CAAY,CAACG,EAAlB,CAFY,CAAD,CAAV,CAAX,CAKAsB,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASC,CAAT,CAAmB,CAChCxC,CAAG,CAACyC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,oBAAN,CAA4BC,SAAS,CAAE,SAAvC,CAAkDC,KAAK,CAAEJ,CAAQ,CAACK,IAAlE,CAFY,CAGZ,CAACH,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGJ,IALH,CAKQ,SAASO,CAAT,CAAkB,CACtB/C,CAAY,CAACgD,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACPhC,CAAI,CAACsB,SAAL,CAAevB,CAAf,CACH,CAPL,CASH,CAfD,EAeGqB,IAfH,CAeQnC,CAAY,CAACoC,SAfrB,CAgBH,CAjBD,EAiBGD,IAjBH,CAiBQnC,CAAY,CAACoC,SAjBrB,CAmBH,CA5BD,CAmCAhC,CAAmB,CAACQ,SAApB,CAA8BqC,sBAA9B,CAAuD,SAASC,CAAT,CAAY,CAC/DA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAI,CAAG,KAAKC,iBAAL,CAAuBxD,CAAC,CAACqD,CAAC,CAACI,MAAH,CAAxB,CAAX,CACA,KAAKhB,cAAL,CAAoBc,CAApB,CACH,CAJD,CAaAhD,CAAmB,CAACQ,SAApB,CAA8B2C,+BAA9B,CAAgE,SAASzC,CAAT,CAAuB0C,CAAvB,CAAsC,CAClG,GAAIzC,CAAAA,CAAI,CAAG,IAAX,CACIY,CAAK,CAAG,EADZ,CAGA9B,CAAC,CAAC4D,IAAF,CAAOD,CAAP,CAAsB,SAASE,CAAT,CAAgBC,CAAhB,CAA8B,CAChDhC,CAAK,CAACC,IAAN,CAAW,CACPC,UAAU,CAAE,iDADL,CAEPb,IAAI,CAAE,CACF4C,cAAc,CAAE9C,CAAY,CAACG,EAD3B,CAEF4C,YAAY,CAAEF,CAFZ,CAFC,CAAX,CAOH,CARD,EAUA5C,CAAI,CAACW,eAAL,CAAqBC,CAArB,CAA4Bb,CAA5B,CACH,CAfD,CAsBAV,CAAmB,CAACQ,SAApB,CAA8BkD,4BAA9B,CAA6D,SAAShD,CAAT,CAAuB,CAChF,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIgD,CAAM,CAAG,GAAI5D,CAAAA,CAAJ,CAAoBW,CAAY,CAACI,MAAjC,CADb,CAGA6C,CAAM,CAACC,EAAP,CAAU,MAAV,CAAkB,SAASd,CAAT,CAAYE,CAAZ,CAAkB,CAChC,GAAII,CAAAA,CAAa,CAAGJ,CAAI,CAACI,aAAzB,CACAzC,CAAI,CAACwC,+BAAL,CAAqCzC,CAArC,CAAmD0C,CAAnD,CAAkEJ,CAAI,CAACa,aAAvE,CACH,CAHD,EAKAF,CAAM,CAACG,OAAP,EACH,CAVD,CAiBA9D,CAAmB,CAACQ,SAApB,CAA8BuD,oCAA9B,CAAqE,SAASjB,CAAT,CAAY,CAC7EA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAI,CAAG,KAAKC,iBAAL,CAAuBxD,CAAC,CAACqD,CAAC,CAACI,MAAH,CAAxB,CAAX,CACA,KAAKQ,4BAAL,CAAkCV,CAAlC,CACH,CAJD,CAYAhD,CAAmB,CAACQ,SAApB,CAA8BwD,+BAA9B,CAAgE,SAAStD,CAAT,CAAuB6C,CAAvB,CAAqC,CACjG,GAAI5C,CAAAA,CAAI,CAAG,IAAX,CACIY,CAAK,CAAG,EADZ,CAGAA,CAAK,CAACC,IAAN,CAAW,CACPC,UAAU,CAAE,iDADL,CAEPb,IAAI,CAAE,CACF4C,cAAc,CAAE9C,CAAY,CAACG,EAD3B,CAEF4C,YAAY,CAAEF,CAFZ,CAFC,CAAX,EAQA5C,CAAI,CAACW,eAAL,CAAqBC,CAArB,CAA4Bb,CAA5B,CACH,CAbD,CAqBAV,CAAmB,CAACQ,SAApB,CAA8ByD,4BAA9B,CAA6D,SAASvD,CAAT,CAAuB6C,CAAvB,CAAqC,CAC9F,KAAKS,+BAAL,CAAqCtD,CAArC,CAAmD6C,CAAnD,CACH,CAFD,CASAvD,CAAmB,CAACQ,SAApB,CAA8B0D,oCAA9B,CAAqE,SAASpB,CAAT,CAAY,CAC7E,GAAIE,CAAAA,CAAI,CAAG,KAAKC,iBAAL,CAAuBxD,CAAC,CAACqD,CAAC,CAACqB,aAAH,CAAxB,CAAX,CACIZ,CAAY,CAAG9D,CAAC,CAACqD,CAAC,CAACqB,aAAH,CAAD,CAAmBnB,IAAnB,CAAwB,IAAxB,CADnB,CAEAF,CAAC,CAACC,cAAF,GACA,KAAKkB,4BAAL,CAAkCjB,CAAlC,CAAwCO,CAAxC,CACH,CALD,CAYAvD,CAAmB,CAACQ,SAApB,CAA8B4D,iCAA9B,CAAkE,SAAS1D,CAAT,CAAuB,CACrF,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIY,CAAK,CAAG,CAAC,CACLE,UAAU,CAAE,qEADP,CAELb,IAAI,CAAE,CAACC,EAAE,CAAEH,CAAY,CAACG,EAAlB,CAFD,CAAD,CADZ,CAKAF,CAAI,CAACW,eAAL,CAAqBC,CAArB,CAA4Bb,CAA5B,CACH,CAPD,CAcAV,CAAmB,CAACQ,SAApB,CAA8B6D,8BAA9B,CAA+D,SAAS3D,CAAT,CAAuB,CAClF,GAAIC,CAAAA,CAAI,CAAG,IAAX,CACIwB,CADJ,CAGAA,CAAQ,CAAGxC,CAAI,CAACiC,IAAL,CAAU,CAAC,CAClBH,UAAU,CAAE,oCADM,CAElBb,IAAI,CAAE,CAACC,EAAE,CAAEH,CAAY,CAACG,EAAlB,CAFY,CAAD,CAAV,CAAX,CAKAsB,CAAQ,CAAC,CAAD,CAAR,CAAYC,IAAZ,CAAiB,SAASC,CAAT,CAAmB,CAChCxC,CAAG,CAACyC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CADY,CAEZ,CAACD,GAAG,CAAE,6BAAN,CAAqCC,SAAS,CAAE,SAAhD,CAA2DC,KAAK,CAAEJ,CAAQ,CAACK,IAA3E,CAFY,CAGZ,CAACH,GAAG,CAAE,SAAN,CAAiBC,SAAS,CAAE,QAA5B,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,QAA3B,CAJY,CAAhB,EAKGJ,IALH,CAKQ,SAASO,CAAT,CAAkB,CACtB/C,CAAY,CAACgD,OAAb,CACID,CAAO,CAAC,CAAD,CADX,CAEIA,CAAO,CAAC,CAAD,CAFX,CAGIA,CAAO,CAAC,CAAD,CAHX,CAIIA,CAAO,CAAC,CAAD,CAJX,CAKI,UAAW,CACPhC,CAAI,CAACyD,iCAAL,CAAuC1D,CAAvC,CACH,CAPL,CASH,CAfD,EAeGqB,IAfH,CAeQnC,CAAY,CAACoC,SAfrB,CAgBH,CAjBD,EAiBGD,IAjBH,CAiBQnC,CAAY,CAACoC,SAjBrB,CAmBH,CA5BD,CAmCAhC,CAAmB,CAACQ,SAApB,CAA8B8D,sCAA9B,CAAuE,SAASxB,CAAT,CAAY,CAC/EA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAI,CAAG,KAAKC,iBAAL,CAAuBxD,CAAC,CAACqD,CAAC,CAACI,MAAH,CAAxB,CAAX,CACA,KAAKmB,8BAAL,CAAoCrB,CAApC,CACH,CAJD,CAYAhD,CAAmB,CAACQ,SAApB,CAA8ByC,iBAA9B,CAAkD,SAASsB,CAAT,CAAe,CAC7D,GAAIC,CAAAA,CAAM,CAAGD,CAAI,CAACE,YAAL,CAAkBhF,CAAC,CAAC,KAAKU,OAAN,CAAD,CAAgBqE,MAAhB,EAAlB,CAA4C,KAAKpE,aAAjD,CAAb,CACI4C,CADJ,CAGA,GAAqB,CAAjB,EAAAwB,CAAM,CAAC1C,MAAX,CAAwB,CACpB,KAAM,IAAI4C,CAAAA,KAAJ,CAAU,oCAAV,CACT,CAED1B,CAAI,CAAGwB,CAAM,CAACxB,IAAP,EAAP,CACA,GAAoB,WAAhB,QAAOA,CAAAA,CAAP,EAAkD,WAAnB,QAAOA,CAAAA,CAAI,CAACnC,EAA/C,CAAmE,CAC/D,KAAM,IAAI6D,CAAAA,KAAJ,CAAU,mCAAV,CACT,CAED,MAAO1B,CAAAA,CACV,CAdD,CAqBAhD,CAAmB,CAACQ,SAApB,CAA8BmE,cAA9B,CAA+C,SAASC,CAAT,CAAmB,CAC9D,GAAIjE,CAAAA,CAAI,CAAG,IAAX,CACAb,CAAO,CAAC+E,OAAR,CAAgBD,CAAhB,CAA0B,CACtB,uCAAwCjE,CAAI,CAACkC,sBAAL,CAA4BiC,IAA5B,CAAiCnE,CAAjC,CADlB,CAEtB,kCAAmCA,CAAI,CAACoD,oCAAL,CAA0Ce,IAA1C,CAA+CnE,CAA/C,CAFb,CAGtB,2CAA4CA,CAAI,CAAC2D,sCAAL,CAA4CQ,IAA5C,CAAiDnE,CAAjD,CAHtB,CAA1B,CAKH,CAPD,CAeAX,CAAmB,CAACQ,SAApB,CAA8BuE,cAA9B,CAA+C,UAAW,CACtD,GAAIC,CAAAA,CAAO,CAAGvF,CAAC,CAAC,KAAKU,OAAN,CAAf,CACIQ,CAAI,CAAG,IADX,CAGAqE,CAAO,CAACC,IAAR,CAAa,wCAAb,EAAqDC,KAArD,CAA2DvE,CAAI,CAACkC,sBAAL,CAA4BiC,IAA5B,CAAiCnE,CAAjC,CAA3D,EACAqE,CAAO,CAACC,IAAR,CAAa,mCAAb,EAAgDC,KAAhD,CAAsDvE,CAAI,CAACoD,oCAAL,CAA0Ce,IAA1C,CAA+CnE,CAA/C,CAAtD,EACAqE,CAAO,CAACC,IAAR,CAAa,0CAAb,EAAuDC,KAAvD,CAA6DvE,CAAI,CAACuD,oCAAL,CAA0CY,IAA1C,CAA+CnE,CAA/C,CAA7D,EACAqE,CAAO,CAACC,IAAR,CAAa,4CAAb,EAAyDC,KAAzD,CAA+DvE,CAAI,CAAC2D,sCAAL,CAA4CQ,IAA5C,CAAiDnE,CAAjD,CAA/D,CACH,CARD,CAUA,MAA0DX,CAAAA,CAC7D,CA1XK,CAAN","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 .\n\n/**\n * User evidence actions.\n *\n * @module tool_lp/user_evidence_actions\n * @copyright 2015 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n 'core/templates',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'tool_lp/menubar',\n 'tool_lp/competencypicker_user_plans'],\n function($, templates, ajax, notification, str, Menubar, PickerUserPlans) {\n\n /**\n * UserEvidenceActions class.\n *\n * Note that presently this cannot be instantiated more than once per page.\n *\n * @param {String} type The type of page we're in.\n */\n var UserEvidenceActions = function(type) {\n this._type = type;\n\n if (type === 'evidence') {\n // This is the page to view one evidence.\n this._region = '[data-region=\"user-evidence-page\"]';\n this._evidenceNode = '[data-region=\"user-evidence-page\"]';\n this._template = 'tool_lp/user_evidence_page';\n this._contextMethod = 'tool_lp_data_for_user_evidence_page';\n\n } else if (type === 'list') {\n // This is the page to view a list of evidence.\n this._region = '[data-region=\"user-evidence-list\"]';\n this._evidenceNode = '[data-region=\"user-evidence-node\"]';\n this._template = 'tool_lp/user_evidence_list_page';\n this._contextMethod = 'tool_lp_data_for_user_evidence_list_page';\n\n } else {\n throw new TypeError('Unexpected type.');\n }\n };\n\n /** @property {String} Ajax method to fetch the page data from. */\n UserEvidenceActions.prototype._contextMethod = null;\n /** @property {String} Selector to find the node describing the evidence. */\n UserEvidenceActions.prototype._evidenceNode = null;\n /** @property {String} Selector mapping to the region to update. Usually similar to wrapper. */\n UserEvidenceActions.prototype._region = null;\n /** @property {String} Name of the template used to render the region. */\n UserEvidenceActions.prototype._template = null;\n /** @property {String} Type of page/region we're in. */\n UserEvidenceActions.prototype._type = null;\n\n /**\n * Resolve the arguments to refresh the region.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @return {Object} List of arguments.\n */\n UserEvidenceActions.prototype._getContextArgs = function(evidenceData) {\n var self = this,\n args = {};\n\n if (self._type === 'evidence') {\n args = {\n id: evidenceData.id\n };\n\n } else if (self._type === 'list') {\n args = {\n userid: evidenceData.userid\n };\n }\n\n return args;\n };\n\n /**\n * Callback to render the region template.\n *\n * @param {Object} context The context for the template.\n * @return {Promise}\n */\n UserEvidenceActions.prototype._renderView = function(context) {\n var self = this;\n return templates.render(self._template, context)\n .then(function(newhtml, newjs) {\n templates.replaceNode($(self._region), newhtml, newjs);\n return;\n });\n };\n\n /**\n * Call multiple ajax methods, and refresh.\n *\n * @param {Array} calls List of Ajax calls.\n * @param {Object} evidenceData Evidence data from evidence node.\n * @return {Promise}\n */\n UserEvidenceActions.prototype._callAndRefresh = function(calls, evidenceData) {\n var self = this;\n calls.push({\n methodname: self._contextMethod,\n args: self._getContextArgs(evidenceData)\n });\n\n // Apply all the promises, and refresh when the last one is resolved.\n return $.when.apply($.when, ajax.call(calls))\n .then(function() {\n return self._renderView(arguments[arguments.length - 1]);\n })\n .fail(notification.exception);\n };\n\n /**\n * Delete a plan and reload the region.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype._doDelete = function(evidenceData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_delete_user_evidence',\n args: {id: evidenceData.id}\n }];\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Delete a plan.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype.deleteEvidence = function(evidenceData) {\n var self = this,\n requests;\n\n requests = ajax.call([{\n methodname: 'core_competency_read_user_evidence',\n args: {id: evidenceData.id}\n }]);\n\n requests[0].done(function(evidence) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'deleteuserevidence', component: 'tool_lp', param: evidence.name},\n {key: 'delete', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Delete evidence X?\n strings[2], // Delete.\n strings[3], // Cancel.\n function() {\n self._doDelete(evidenceData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Delete evidence handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._deleteEvidenceHandler = function(e) {\n e.preventDefault();\n var data = this._findEvidenceData($(e.target));\n this.deleteEvidence(data);\n };\n\n /**\n * Link a competency and reload.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @param {Number} competencyIds The competency IDs.\n * @param {Boolean} requestReview Send competencies to review.\n */\n UserEvidenceActions.prototype._doCreateUserEvidenceCompetency = function(evidenceData, competencyIds) {\n var self = this,\n calls = [];\n\n $.each(competencyIds, function(index, competencyId) {\n calls.push({\n methodname: 'core_competency_create_user_evidence_competency',\n args: {\n userevidenceid: evidenceData.id,\n competencyid: competencyId,\n }\n });\n });\n\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Create a user evidence competency.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype.createUserEvidenceCompetency = function(evidenceData) {\n var self = this,\n picker = new PickerUserPlans(evidenceData.userid);\n\n picker.on('save', function(e, data) {\n var competencyIds = data.competencyIds;\n self._doCreateUserEvidenceCompetency(evidenceData, competencyIds, data.requestReview);\n });\n\n picker.display();\n };\n\n /**\n * Create user evidence competency handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._createUserEvidenceCompetencyHandler = function(e) {\n e.preventDefault();\n var data = this._findEvidenceData($(e.target));\n this.createUserEvidenceCompetency(data);\n };\n\n /**\n * Remove a linked competency and reload.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @param {Number} competencyId The competency ID.\n */\n UserEvidenceActions.prototype._doDeleteUserEvidenceCompetency = function(evidenceData, competencyId) {\n var self = this,\n calls = [];\n\n calls.push({\n methodname: 'core_competency_delete_user_evidence_competency',\n args: {\n userevidenceid: evidenceData.id,\n competencyid: competencyId,\n }\n });\n\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Delete a user evidence competency.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n * @param {Number} competencyId The competency ID.\n */\n UserEvidenceActions.prototype.deleteUserEvidenceCompetency = function(evidenceData, competencyId) {\n this._doDeleteUserEvidenceCompetency(evidenceData, competencyId);\n };\n\n /**\n * Delete user evidence competency handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._deleteUserEvidenceCompetencyHandler = function(e) {\n var data = this._findEvidenceData($(e.currentTarget)),\n competencyId = $(e.currentTarget).data('id');\n e.preventDefault();\n this.deleteUserEvidenceCompetency(data, competencyId);\n };\n\n /**\n * Send request review for user evidence competencies and reload the region.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype._doReviewUserEvidenceCompetencies = function(evidenceData) {\n var self = this,\n calls = [{\n methodname: 'core_competency_request_review_of_user_evidence_linked_competencies',\n args: {id: evidenceData.id}\n }];\n self._callAndRefresh(calls, evidenceData);\n };\n\n /**\n * Send request review for user evidence competencies.\n *\n * @param {Object} evidenceData Evidence data from evidence node.\n */\n UserEvidenceActions.prototype.reviewUserEvidenceCompetencies = function(evidenceData) {\n var self = this,\n requests;\n\n requests = ajax.call([{\n methodname: 'core_competency_read_user_evidence',\n args: {id: evidenceData.id}\n }]);\n\n requests[0].done(function(evidence) {\n str.get_strings([\n {key: 'confirm', component: 'moodle'},\n {key: 'sendallcompetenciestoreview', component: 'tool_lp', param: evidence.name},\n {key: 'confirm', component: 'moodle'},\n {key: 'cancel', component: 'moodle'}\n ]).done(function(strings) {\n notification.confirm(\n strings[0], // Confirm.\n strings[1], // Send all competencies in review for X?\n strings[2], // Confirm.\n strings[3], // Cancel.\n function() {\n self._doReviewUserEvidenceCompetencies(evidenceData);\n }\n );\n }).fail(notification.exception);\n }).fail(notification.exception);\n\n };\n\n /**\n * Send request review for user evidence competencies handler.\n *\n * @param {Event} e The event.\n */\n UserEvidenceActions.prototype._reviewUserEvidenceCompetenciesHandler = function(e) {\n e.preventDefault();\n var data = this._findEvidenceData($(e.target));\n this.reviewUserEvidenceCompetencies(data);\n };\n\n /**\n * Find the evidence data from the evidence node.\n *\n * @param {Node} node The node to search from.\n * @return {Object} Evidence data.\n */\n UserEvidenceActions.prototype._findEvidenceData = function(node) {\n var parent = node.parentsUntil($(this._region).parent(), this._evidenceNode),\n data;\n\n if (parent.length != 1) {\n throw new Error('The evidence node was not located.');\n }\n\n data = parent.data();\n if (typeof data === 'undefined' || typeof data.id === 'undefined') {\n throw new Error('Evidence data could not be found.');\n }\n\n return data;\n };\n\n /**\n * Enhance a menu bar.\n *\n * @param {String} selector Menubar selector.\n */\n UserEvidenceActions.prototype.enhanceMenubar = function(selector) {\n var self = this;\n Menubar.enhance(selector, {\n '[data-action=\"user-evidence-delete\"]': self._deleteEvidenceHandler.bind(self),\n '[data-action=\"link-competency\"]': self._createUserEvidenceCompetencyHandler.bind(self),\n '[data-action=\"send-competencies-review\"]': self._reviewUserEvidenceCompetenciesHandler.bind(self),\n });\n };\n\n /**\n * Register the events in the region.\n *\n * At this stage this cannot be used with enhanceMenubar or multiple handlers\n * will be added to the same node.\n */\n UserEvidenceActions.prototype.registerEvents = function() {\n var wrapper = $(this._region),\n self = this;\n\n wrapper.find('[data-action=\"user-evidence-delete\"]').click(self._deleteEvidenceHandler.bind(self));\n wrapper.find('[data-action=\"link-competency\"]').click(self._createUserEvidenceCompetencyHandler.bind(self));\n wrapper.find('[data-action=\"delete-competency-link\"]').click(self._deleteUserEvidenceCompetencyHandler.bind(self));\n wrapper.find('[data-action=\"send-competencies-review\"]').click(self._reviewUserEvidenceCompetenciesHandler.bind(self));\n };\n\n return /** @alias module:tool_lp/user_evidence_actions */ UserEvidenceActions;\n});\n"],"file":"user_evidence_actions.min.js"} \ No newline at end of file diff --git a/admin/tool/lp/amd/src/actionselector.js b/admin/tool/lp/amd/src/actionselector.js index 380e05af76f..03abcb5c416 100644 --- a/admin/tool/lp/amd/src/actionselector.js +++ b/admin/tool/lp/amd/src/actionselector.js @@ -20,7 +20,6 @@ * This will receive the information to display in popup. * The actions have the format [{'text': sometext, 'value' : somevalue}]. * - * @package tool_lp * @copyright 2016 Serge Gauthier - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -56,19 +55,19 @@ define(['jquery', ActionSelector.prototype = Object.create(EventBase.prototype); - /** @type {String} The value that was selected. */ + /** @property {String} The value that was selected. */ ActionSelector.prototype._selectedValue = null; - /** @type {Dialogue} The reference to the dialogue. */ + /** @property {Dialogue} The reference to the dialogue. */ ActionSelector.prototype._popup = null; - /** @type {String} The title of popup. */ + /** @property {String} The title of popup. */ ActionSelector.prototype._title = null; - /** @type {String} The message in popup. */ + /** @property {String} The message in popup. */ ActionSelector.prototype._message = null; - /** @type {object} The information for radion buttons. */ + /** @property {object} The information for radion buttons. */ ActionSelector.prototype._actions = null; - /** @type {String} The text for confirm button. */ + /** @property {String} The text for confirm button. */ ActionSelector.prototype._confirm = null; - /** @type {String} The text for cancel button. */ + /** @property {String} The text for cancel button. */ ActionSelector.prototype._cancel = null; /** diff --git a/admin/tool/lp/amd/src/competencies.js b/admin/tool/lp/amd/src/competencies.js index 82052a4b406..4b758e5d885 100644 --- a/admin/tool/lp/amd/src/competencies.js +++ b/admin/tool/lp/amd/src/competencies.js @@ -17,7 +17,6 @@ * Handle add/remove competency links. * * @module tool_lp/competencies - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/competency_outcomes.js b/admin/tool/lp/amd/src/competency_outcomes.js index 829b892bff9..5471649de5d 100644 --- a/admin/tool/lp/amd/src/competency_outcomes.js +++ b/admin/tool/lp/amd/src/competency_outcomes.js @@ -16,7 +16,6 @@ /** * Competency rule config. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/competency_plan_navigation.js b/admin/tool/lp/amd/src/competency_plan_navigation.js index 3a3e505f4d4..5d2b4cf9d53 100644 --- a/admin/tool/lp/amd/src/competency_plan_navigation.js +++ b/admin/tool/lp/amd/src/competency_plan_navigation.js @@ -16,7 +16,6 @@ /** * Event click on selecting competency in the competency autocomplete. * - * @package tool_lp * @copyright 2016 Issam Taboubi * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -58,15 +57,15 @@ define(['jquery'], function($) { document.location = this._baseUrl + queryStr; }; - /** @type {Number} The id of the competency. */ + /** @property {Number} The id of the competency. */ CompetencyPlanNavigation.prototype._competencyId = null; - /** @type {Number} The id of the user. */ + /** @property {Number} The id of the user. */ CompetencyPlanNavigation.prototype._userId = null; - /** @type {Number} The id of the plan. */ + /** @property {Number} The id of the plan. */ CompetencyPlanNavigation.prototype._planId = null; - /** @type {String} Plugin base url. */ + /** @property {String} Plugin base url. */ CompetencyPlanNavigation.prototype._baseUrl = null; - /** @type {Boolean} Ignore the first change event for competencies. */ + /** @property {Boolean} Ignore the first change event for competencies. */ CompetencyPlanNavigation.prototype._ignoreFirstCompetency = null; return /** @alias module:tool_lp/competency_plan_navigation */ CompetencyPlanNavigation; diff --git a/admin/tool/lp/amd/src/competency_rule.js b/admin/tool/lp/amd/src/competency_rule.js index e631bc24d99..f918c14b9ac 100644 --- a/admin/tool/lp/amd/src/competency_rule.js +++ b/admin/tool/lp/amd/src/competency_rule.js @@ -16,7 +16,6 @@ /** * Competency rule base module. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -40,13 +39,13 @@ define(['jquery'], function($) { this._tree = tree; }; - /** @type {Object} The current competency. */ + /** @property {Object} The current competency. */ Rule.prototype._competency = null; - /** @type {Node} The node we attach the events to. */ + /** @property {Node} The node we attach the events to. */ Rule.prototype._eventNode = null; - /** @type {Promise} Resolved when the object is ready. */ + /** @property {Promise} Resolved when the object is ready. */ Rule.prototype._ready = null; - /** @type {Tree} The competency tree. */ + /** @property {Tree} The competency tree. */ Rule.prototype._tree = null; /** diff --git a/admin/tool/lp/amd/src/competency_rule_all.js b/admin/tool/lp/amd/src/competency_rule_all.js index db46330a503..b7acadbb371 100644 --- a/admin/tool/lp/amd/src/competency_rule_all.js +++ b/admin/tool/lp/amd/src/competency_rule_all.js @@ -16,7 +16,6 @@ /** * Competency rule all module. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/competency_rule_points.js b/admin/tool/lp/amd/src/competency_rule_points.js index 542cf0901aa..87d7e0b517e 100644 --- a/admin/tool/lp/amd/src/competency_rule_points.js +++ b/admin/tool/lp/amd/src/competency_rule_points.js @@ -16,7 +16,6 @@ /** * Competency rule points module. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -36,9 +35,9 @@ define(['jquery', }; Rule.prototype = Object.create(RuleBase.prototype); - /** @type {Node} Reference to the container in which the template was included. */ + /** @property {Node} Reference to the container in which the template was included. */ Rule.prototype._container = null; - /** @type {Boolean} Whether or not the template was included. */ + /** @property {Boolean} Whether or not the template was included. */ Rule.prototype._templateLoaded = false; /** diff --git a/admin/tool/lp/amd/src/competencyactions.js b/admin/tool/lp/amd/src/competencyactions.js index 78a7cd38114..50cfd9e9604 100644 --- a/admin/tool/lp/amd/src/competencyactions.js +++ b/admin/tool/lp/amd/src/competencyactions.js @@ -17,7 +17,6 @@ * Handle selection changes and actions on the competency tree. * * @module tool_lp/competencyactions - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -49,17 +48,17 @@ define(['jquery', var moveTarget = null; /** @var {Number} pageContextId The page context ID. */ var pageContextId; - /** @type {Object} Picker instance. */ + /** @var {Object} Picker instance. */ var pickerInstance; - /** @type {Object} Rule config instance. */ + /** @var {Object} Rule config instance. */ var ruleConfigInstance; - /** @type {Object} The competency we're picking a relation to. */ + /** @var {Object} The competency we're picking a relation to. */ var relatedTarget; - /** @type {Object} Taxonomy constants indexed per level. */ + /** @var {Object} Taxonomy constants indexed per level. */ var taxonomiesConstants; - /** @type {Array} The rules modules. Values are object containing type, namd and amd. */ + /** @var {Array} The rules modules. Values are object containing type, namd and amd. */ var rulesModules; - /** @type {Number} the selected competency ID. */ + /** @var {Number} the selected competency ID. */ var selectedCompetencyId = null; /** diff --git a/admin/tool/lp/amd/src/competencydialogue.js b/admin/tool/lp/amd/src/competencydialogue.js index 012d70b46fc..3159f339f51 100644 --- a/admin/tool/lp/amd/src/competencydialogue.js +++ b/admin/tool/lp/amd/src/competencydialogue.js @@ -17,7 +17,6 @@ * Display Competency in dialogue box. * * @module tool_lp/Competencydialogue - * @package tool_lp * @copyright 2015 Issam Taboubi * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/competencypicker.js b/admin/tool/lp/amd/src/competencypicker.js index c3cb0b161f9..e21043cc0ef 100644 --- a/admin/tool/lp/amd/src/competencypicker.js +++ b/admin/tool/lp/amd/src/competencypicker.js @@ -20,7 +20,6 @@ * This will receive a object with either a single 'competencyId', or an array in 'competencyIds' * depending on the value of multiSelect. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -58,31 +57,31 @@ define(['jquery', } }; - /** @type {Array} The competencies fetched. */ + /** @property {Array} The competencies fetched. */ Picker.prototype._competencies = null; - /** @type {Array} The competencies that cannot be picked. */ + /** @property {Array} The competencies that cannot be picked. */ Picker.prototype._disallowedCompetencyIDs = null; - /** @type {Node} The node we attach the events to. */ + /** @property {Node} The node we attach the events to. */ Picker.prototype._eventNode = null; - /** @type {Array} The list of frameworks fetched. */ + /** @property {Array} The list of frameworks fetched. */ Picker.prototype._frameworks = null; - /** @type {Number} The current framework ID. */ + /** @property {Number} The current framework ID. */ Picker.prototype._frameworkId = null; - /** @type {Number} The page context ID. */ + /** @property {Number} The page context ID. */ Picker.prototype._pageContextId = null; - /** @type {Number} Relevant contexts inclusion. */ + /** @property {Number} Relevant contexts inclusion. */ Picker.prototype._pageContextIncludes = null; - /** @type {Dialogue} The reference to the dialogue. */ + /** @property {Dialogue} The reference to the dialogue. */ Picker.prototype._popup = null; - /** @type {String} The string we filter the competencies with. */ + /** @property {String} The string we filter the competencies with. */ Picker.prototype._searchText = ''; - /** @type {Object} The competency that was selected. */ + /** @property {Object} The competency that was selected. */ Picker.prototype._selectedCompetencies = null; - /** @type {Boolean} Whether we can browse frameworks or not. */ + /** @property {Boolean} Whether we can browse frameworks or not. */ Picker.prototype._singleFramework = false; - /** @type {Boolean} Do we allow multi select? */ + /** @property {Boolean} Do we allow multi select? */ Picker.prototype._multiSelect = true; - /** @type {Boolean} Do we allow to display hidden framework? */ + /** @property {Boolean} Do we allow to display hidden framework? */ Picker.prototype._onlyVisible = true; /** diff --git a/admin/tool/lp/amd/src/competencypicker_user_plans.js b/admin/tool/lp/amd/src/competencypicker_user_plans.js index e621f32eebc..cbda90f5b7f 100644 --- a/admin/tool/lp/amd/src/competencypicker_user_plans.js +++ b/admin/tool/lp/amd/src/competencypicker_user_plans.js @@ -21,7 +21,6 @@ * This will receive a object with either a single 'competencyId', or an array in 'competencyIds' * depending on the value of multiSelect. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -55,13 +54,13 @@ define(['jquery', }; Picker.prototype = Object.create(PickerBase.prototype); - /** @type {Array} The list of plans fetched. */ + /** @property {Array} The list of plans fetched. */ Picker.prototype._plans = null; - /** @type {Number} The current plan ID. */ + /** @property {Number} The current plan ID. */ Picker.prototype._planId = null; - /** @type {Boolean} Whether we can browse plans or not. */ + /** @property {Boolean} Whether we can browse plans or not. */ Picker.prototype._singlePlan = false; - /** @type {Number} The user the plans belongs to. */ + /** @property {Number} The user the plans belongs to. */ Picker.prototype._userId = null; /** diff --git a/admin/tool/lp/amd/src/competencyruleconfig.js b/admin/tool/lp/amd/src/competencyruleconfig.js index b0e3db621b2..fb27c0edf92 100644 --- a/admin/tool/lp/amd/src/competencyruleconfig.js +++ b/admin/tool/lp/amd/src/competencyruleconfig.js @@ -16,7 +16,6 @@ /** * Competency rule config. * - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -48,21 +47,21 @@ define(['jquery', this._setUp(); }; - /** @type {Object} The current competency. */ + /** @property {Object} The current competency. */ RuleConfig.prototype._competency = null; - /** @type {Node} The node we attach the events to. */ + /** @property {Node} The node we attach the events to. */ RuleConfig.prototype._eventNode = null; - /** @type {Array} Outcomes options. */ + /** @property {Array} Outcomes options. */ RuleConfig.prototype._outcomesOption = null; - /** @type {Dialogue} The dialogue. */ + /** @property {Dialogue} The dialogue. */ RuleConfig.prototype._popup = null; - /** @type {Promise} Resolved when the module is ready. */ + /** @property {Promise} Resolved when the module is ready. */ RuleConfig.prototype._ready = null; - /** @type {Array} The rules. */ + /** @property {Array} The rules. */ RuleConfig.prototype._rules = null; - /** @type {Array} The rules modules. */ + /** @property {Array} The rules modules. */ RuleConfig.prototype._rulesModules = null; - /** @type {competencytree} The competency tree. */ + /** @property {competencytree} The competency tree. */ RuleConfig.prototype._tree = null; /** diff --git a/admin/tool/lp/amd/src/competencytree.js b/admin/tool/lp/amd/src/competencytree.js index 01007e1a3ef..9718ae4451c 100644 --- a/admin/tool/lp/amd/src/competencytree.js +++ b/admin/tool/lp/amd/src/competencytree.js @@ -17,7 +17,6 @@ * Handle selection changes on the competency tree. * * @module tool_lp/competencyselect - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/course_competency_settings.js b/admin/tool/lp/amd/src/course_competency_settings.js index fd497d2cf37..6241bd0c117 100644 --- a/admin/tool/lp/amd/src/course_competency_settings.js +++ b/admin/tool/lp/amd/src/course_competency_settings.js @@ -17,7 +17,6 @@ * Change the course competency settings in a popup. * * @module tool_lp/configurecoursecompetencysettings - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -40,7 +39,7 @@ define(['jquery', $(selector).on('click', this.configureSettings.bind(this)); }; - /** @type {Dialogue} Reference to the dialogue that we opened. */ + /** @property {Dialogue} Reference to the dialogue that we opened. */ settingsMod.prototype._dialogue = null; /** diff --git a/admin/tool/lp/amd/src/dialogue.js b/admin/tool/lp/amd/src/dialogue.js index b96e262beff..1b5db04685c 100644 --- a/admin/tool/lp/amd/src/dialogue.js +++ b/admin/tool/lp/amd/src/dialogue.js @@ -18,7 +18,6 @@ * use the YUI version in AMD code until it is replaced. * * @module tool_lp/dialogue - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/dragdrop-reorder.js b/admin/tool/lp/amd/src/dragdrop-reorder.js index 367cb00887b..9359cd94c11 100644 --- a/admin/tool/lp/amd/src/dragdrop-reorder.js +++ b/admin/tool/lp/amd/src/dragdrop-reorder.js @@ -17,7 +17,6 @@ * Drag and drop reorder via HTML5. * * @module tool_lp/dragdrop-reorder - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/event_base.js b/admin/tool/lp/amd/src/event_base.js index fe8433ccf38..c72d46951b4 100644 --- a/admin/tool/lp/amd/src/event_base.js +++ b/admin/tool/lp/amd/src/event_base.js @@ -17,7 +17,6 @@ * Event base javascript module. * * @module tool_lp/event_base - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -30,7 +29,7 @@ define(['jquery'], function($) { this._eventNode = $('
'); }; - /** @type {Node} The node we attach the events to. */ + /** @property {Node} The node we attach the events to. */ Base.prototype._eventNode = null; /** diff --git a/admin/tool/lp/amd/src/evidence_delete.js b/admin/tool/lp/amd/src/evidence_delete.js index e695e122a2b..f680b28e5fa 100644 --- a/admin/tool/lp/amd/src/evidence_delete.js +++ b/admin/tool/lp/amd/src/evidence_delete.js @@ -16,7 +16,6 @@ /** * Evidence delete. * - * @package tool_lp * @copyright 2016 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/form-cohort-selector.js b/admin/tool/lp/amd/src/form-cohort-selector.js index 281c492cc30..772f3134c83 100644 --- a/admin/tool/lp/amd/src/form-cohort-selector.js +++ b/admin/tool/lp/amd/src/form-cohort-selector.js @@ -18,7 +18,6 @@ * * @module tool_lp/form-cohort-selector * @class form-cohort-selector - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/form-user-selector.js b/admin/tool/lp/amd/src/form-user-selector.js index 3d1e6139ee1..9fcf1a14a14 100644 --- a/admin/tool/lp/amd/src/form-user-selector.js +++ b/admin/tool/lp/amd/src/form-user-selector.js @@ -18,7 +18,6 @@ * * @module tool_lp/form-user-selector * @class form-user-selector - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/form_competency_element.js b/admin/tool/lp/amd/src/form_competency_element.js index d2c813b1873..81d0c39680e 100644 --- a/admin/tool/lp/amd/src/form_competency_element.js +++ b/admin/tool/lp/amd/src/form_competency_element.js @@ -17,7 +17,6 @@ * Badge select competency actions * * @module tool_lp/form_competency_element - * @package tool_lp * @copyright 2019 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/frameworkactions.js b/admin/tool/lp/amd/src/frameworkactions.js index cb9685f52a8..064002751cb 100644 --- a/admin/tool/lp/amd/src/frameworkactions.js +++ b/admin/tool/lp/amd/src/frameworkactions.js @@ -17,7 +17,6 @@ * Competency frameworks actions via ajax. * * @module tool_lp/frameworkactions - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/frameworks_datasource.js b/admin/tool/lp/amd/src/frameworks_datasource.js index c46d0050a9b..65d060f4c19 100644 --- a/admin/tool/lp/amd/src/frameworks_datasource.js +++ b/admin/tool/lp/amd/src/frameworks_datasource.js @@ -18,7 +18,6 @@ * * This module is compatible with core/form-autocomplete. * - * @package tool_lpmigrate * @copyright 2016 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/grade_dialogue.js b/admin/tool/lp/amd/src/grade_dialogue.js index 3b92add7580..9020612af49 100644 --- a/admin/tool/lp/amd/src/grade_dialogue.js +++ b/admin/tool/lp/amd/src/grade_dialogue.js @@ -16,7 +16,6 @@ /** * Grade dialogue. * - * @package tool_lp * @copyright 2016 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -39,9 +38,9 @@ define(['jquery', }; Grade.prototype = Object.create(EventBase.prototype); - /** @type {Dialogue} The dialogue. */ + /** @property {Dialogue} The dialogue. */ Grade.prototype._popup = null; - /** @type {Array} Array of objects containing, 'value', 'name' and optionally 'selected'. */ + /** @property {Array} Array of objects containing, 'value', 'name' and optionally 'selected'. */ Grade.prototype._ratingOptions = null; /** diff --git a/admin/tool/lp/amd/src/grade_user_competency_inline.js b/admin/tool/lp/amd/src/grade_user_competency_inline.js index 9b32017c3b1..b3ac64becd3 100644 --- a/admin/tool/lp/amd/src/grade_user_competency_inline.js +++ b/admin/tool/lp/amd/src/grade_user_competency_inline.js @@ -16,7 +16,6 @@ /** * Module to enable inline editing of a comptency grade. * - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -141,19 +140,19 @@ define(['jquery', .fail(notification.exception); }; - /** @type {Number} The scale id for this competency. */ + /** @property {Number} The scale id for this competency. */ InlineEditor.prototype._scaleId = null; - /** @type {Number} The id of the competency. */ + /** @property {Number} The id of the competency. */ InlineEditor.prototype._competencyId = null; - /** @type {Number} The id of the user. */ + /** @property {Number} The id of the user. */ InlineEditor.prototype._userId = null; - /** @type {Number} The id of the plan. */ + /** @property {Number} The id of the plan. */ InlineEditor.prototype._planId = null; - /** @type {Number} The id of the course. */ + /** @property {Number} The id of the course. */ InlineEditor.prototype._courseId = null; - /** @type {String} The text for Choose rating. */ + /** @property {String} The text for Choose rating. */ InlineEditor.prototype._chooseStr = null; - /** @type {GradeDialogue} The grading dialogue. */ + /** @property {GradeDialogue} The grading dialogue. */ InlineEditor.prototype._dialogue = null; return /** @alias module:tool_lp/grade_user_competency_inline */ InlineEditor; diff --git a/admin/tool/lp/amd/src/menubar.js b/admin/tool/lp/amd/src/menubar.js index 4673e3dea89..6b0c0e07037 100644 --- a/admin/tool/lp/amd/src/menubar.js +++ b/admin/tool/lp/amd/src/menubar.js @@ -18,7 +18,6 @@ * Based on the open ajax example: http://oaa-accessibility.org/example/26/ * * @module tool_lp/menubar - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/module_navigation.js b/admin/tool/lp/amd/src/module_navigation.js index d08a55095f3..288568320f6 100644 --- a/admin/tool/lp/amd/src/module_navigation.js +++ b/admin/tool/lp/amd/src/module_navigation.js @@ -16,7 +16,6 @@ /** * Module to navigation between users in a course. * - * @package tool_lp * @copyright 2019 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -51,11 +50,11 @@ define(['jquery'], function($) { document.location = this._baseUrl + queryStr; }; - /** @type {Number} The id of the course. */ + /** @property {Number} The id of the course. */ ModuleNavigation.prototype._courseId = null; - /** @type {Number} The id of the module. */ + /** @property {Number} The id of the module. */ ModuleNavigation.prototype._moduleId = null; - /** @type {String} Plugin base url. */ + /** @property {String} Plugin base url. */ ModuleNavigation.prototype._baseUrl = null; return /** @alias module:tool_lp/module_navigation */ ModuleNavigation; diff --git a/admin/tool/lp/amd/src/parentcompetency_form.js b/admin/tool/lp/amd/src/parentcompetency_form.js index c42aece359f..4234ec9bed3 100644 --- a/admin/tool/lp/amd/src/parentcompetency_form.js +++ b/admin/tool/lp/amd/src/parentcompetency_form.js @@ -17,7 +17,6 @@ * Handle selecting parent competency in competency form. * * @module tool_lp/parentcompetency_form - * @package tool_lp * @copyright 2015 Issam Taboubi * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/planactions.js b/admin/tool/lp/amd/src/planactions.js index d4320c3e94d..ab4fea0a06b 100644 --- a/admin/tool/lp/amd/src/planactions.js +++ b/admin/tool/lp/amd/src/planactions.js @@ -17,7 +17,6 @@ * Plan actions via ajax. * * @module tool_lp/planactions - * @package tool_lp * @copyright 2015 David Monllao * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -59,15 +58,15 @@ define(['jquery', } }; - /** @type {String} Ajax method to fetch the page data from. */ + /** @property {String} Ajax method to fetch the page data from. */ PlanActions.prototype._contextMethod = null; - /** @type {String} Selector to find the node describing the plan. */ + /** @property {String} Selector to find the node describing the plan. */ PlanActions.prototype._planNode = null; - /** @type {String} Selector mapping to the region to update. Usually similar to wrapper. */ + /** @property {String} Selector mapping to the region to update. Usually similar to wrapper. */ PlanActions.prototype._region = null; - /** @type {String} Name of the template used to render the region. */ + /** @property {String} Name of the template used to render the region. */ PlanActions.prototype._template = null; - /** @type {String} Type of page/region we're in. */ + /** @property {String} Type of page/region we're in. */ PlanActions.prototype._type = null; /** diff --git a/admin/tool/lp/amd/src/scaleconfig.js b/admin/tool/lp/amd/src/scaleconfig.js index 67c41eefac1..1e01581be82 100644 --- a/admin/tool/lp/amd/src/scaleconfig.js +++ b/admin/tool/lp/amd/src/scaleconfig.js @@ -17,7 +17,6 @@ * Handle opening a dialogue to configure scale data. * * @module tool_lp/scaleconfig - * @package tool_lp * @copyright 2015 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/scalevalues.js b/admin/tool/lp/amd/src/scalevalues.js index 46011f82c84..cc4fbc72fba 100644 --- a/admin/tool/lp/amd/src/scalevalues.js +++ b/admin/tool/lp/amd/src/scalevalues.js @@ -16,7 +16,6 @@ /** * Module to get the scale values. * - * @package tool_lp * @copyright 2016 Serge Gauthier * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/templateactions.js b/admin/tool/lp/amd/src/templateactions.js index 02fb4c54b4f..759c848e932 100644 --- a/admin/tool/lp/amd/src/templateactions.js +++ b/admin/tool/lp/amd/src/templateactions.js @@ -17,7 +17,6 @@ * Handle actions on learning plan templates via ajax. * * @module tool_lp/templateactions - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/tree.js b/admin/tool/lp/amd/src/tree.js index 8d784f2a9fd..c0d8501ee59 100644 --- a/admin/tool/lp/amd/src/tree.js +++ b/admin/tool/lp/amd/src/tree.js @@ -22,7 +22,6 @@ * selected. (Or a single node if multiselect is disabled). * * @module tool_lp/tree - * @package core * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/lp/amd/src/user_competency_course_navigation.js b/admin/tool/lp/amd/src/user_competency_course_navigation.js index a560da7fc33..97056b34686 100644 --- a/admin/tool/lp/amd/src/user_competency_course_navigation.js +++ b/admin/tool/lp/amd/src/user_competency_course_navigation.js @@ -16,7 +16,6 @@ /** * Module to enable inline editing of a comptency grade. * - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -67,15 +66,15 @@ define(['jquery'], function($) { document.location = this._baseUrl + queryStr; }; - /** @type {Number} The id of the competency. */ + /** @property {Number} The id of the competency. */ UserCompetencyCourseNavigation.prototype._competencyId = null; - /** @type {Number} The id of the user. */ + /** @property {Number} The id of the user. */ UserCompetencyCourseNavigation.prototype._userId = null; - /** @type {Number} The id of the course. */ + /** @property {Number} The id of the course. */ UserCompetencyCourseNavigation.prototype._courseId = null; - /** @type {String} Plugin base url. */ + /** @property {String} Plugin base url. */ UserCompetencyCourseNavigation.prototype._baseUrl = null; - /** @type {Boolean} Ignore the first change event for competencies. */ + /** @property {Boolean} Ignore the first change event for competencies. */ UserCompetencyCourseNavigation.prototype._ignoreFirstCompetency = null; return /** @alias module:tool_lp/user_competency_course_navigation */ UserCompetencyCourseNavigation; diff --git a/admin/tool/lp/amd/src/user_competency_info.js b/admin/tool/lp/amd/src/user_competency_info.js index 0e6df71dca1..9cfccca2316 100644 --- a/admin/tool/lp/amd/src/user_competency_info.js +++ b/admin/tool/lp/amd/src/user_competency_info.js @@ -16,7 +16,6 @@ /** * Module to refresh a user competency summary in a page. * - * @package tool_lp * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -86,25 +85,25 @@ define(['jquery', 'core/notification', 'core/ajax', 'core/templates'], function( }).fail(notification.exception); }; - /** @type {JQuery} The root element to replace in the DOM. */ + /** @property {JQuery} The root element to replace in the DOM. */ Info.prototype._rootElement = null; - /** @type {Number} The id of the course. */ + /** @property {Number} The id of the course. */ Info.prototype._courseId = null; - /** @type {Boolean} Is this module valid? */ + /** @property {Boolean} Is this module valid? */ Info.prototype._valid = null; - /** @type {Number} The id of the plan. */ + /** @property {Number} The id of the plan. */ Info.prototype._planId = null; - /** @type {Number} The id of the competency. */ + /** @property {Number} The id of the competency. */ Info.prototype._competencyId = null; - /** @type {Number} The id of the user. */ + /** @property {Number} The id of the user. */ Info.prototype._userId = null; - /** @type {String} The method name to load the data. */ + /** @property {String} The method name to load the data. */ Info.prototype._methodName = null; - /** @type {Object} The arguments to load the data. */ + /** @property {Object} The arguments to load the data. */ Info.prototype._args = null; - /** @type {String} The template to reload the fragment. */ + /** @property {String} The template to reload the fragment. */ Info.prototype._templateName = null; - /** @type {Boolean} If we should display the user info? */ + /** @property {Boolean} If we should display the user info? */ Info.prototype._displayuser = false; return /** @alias module:tool_lp/user_competency_info */ Info; diff --git a/admin/tool/lp/amd/src/user_competency_plan_popup.js b/admin/tool/lp/amd/src/user_competency_plan_popup.js index e7aff466753..a5428f2f6e9 100644 --- a/admin/tool/lp/amd/src/user_competency_plan_popup.js +++ b/admin/tool/lp/amd/src/user_competency_plan_popup.js @@ -16,7 +16,6 @@ /** * Module to open user competency plan in popup * - * @package report_competency * @copyright 2016 Issam Taboubi * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -116,11 +115,11 @@ define(['jquery', 'core/notification', 'core/str', 'core/ajax', 'core/templates' }).fail(notification.exception); }; - /** @type {String} The selector for the region with the user competencies */ + /** @property {String} The selector for the region with the user competencies */ UserCompetencyPopup.prototype._regionSelector = null; - /** @type {String} The selector for the region with a single user competencies */ + /** @property {String} The selector for the region with a single user competencies */ UserCompetencyPopup.prototype._userCompetencySelector = null; - /** @type {Number} The plan Id */ + /** @property {Number} The plan Id */ UserCompetencyPopup.prototype._planId = null; return /** @alias module:tool_lp/user_competency_plan_popup */ UserCompetencyPopup; diff --git a/admin/tool/lp/amd/src/user_competency_workflow.js b/admin/tool/lp/amd/src/user_competency_workflow.js index d6d6b71c45a..b8824e3f364 100644 --- a/admin/tool/lp/amd/src/user_competency_workflow.js +++ b/admin/tool/lp/amd/src/user_competency_workflow.js @@ -17,7 +17,6 @@ * User competency workflow. * * @module tool_lp/user_competency_workflow - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -40,7 +39,7 @@ define(['jquery', }; UserCompetencyWorkflow.prototype = Object.create(EventBase.prototype); - /** @type {String} The selector to find the user competency data. */ + /** @property {String} The selector to find the user competency data. */ UserCompetencyWorkflow.prototype._nodeSelector = '[data-node="user-competency"]'; /** diff --git a/admin/tool/lp/amd/src/user_evidence_actions.js b/admin/tool/lp/amd/src/user_evidence_actions.js index 1c37728af10..7bb30c3e56b 100644 --- a/admin/tool/lp/amd/src/user_evidence_actions.js +++ b/admin/tool/lp/amd/src/user_evidence_actions.js @@ -17,7 +17,6 @@ * User evidence actions. * * @module tool_lp/user_evidence_actions - * @package tool_lp * @copyright 2015 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -59,15 +58,15 @@ define(['jquery', } }; - /** @type {String} Ajax method to fetch the page data from. */ + /** @property {String} Ajax method to fetch the page data from. */ UserEvidenceActions.prototype._contextMethod = null; - /** @type {String} Selector to find the node describing the evidence. */ + /** @property {String} Selector to find the node describing the evidence. */ UserEvidenceActions.prototype._evidenceNode = null; - /** @type {String} Selector mapping to the region to update. Usually similar to wrapper. */ + /** @property {String} Selector mapping to the region to update. Usually similar to wrapper. */ UserEvidenceActions.prototype._region = null; - /** @type {String} Name of the template used to render the region. */ + /** @property {String} Name of the template used to render the region. */ UserEvidenceActions.prototype._template = null; - /** @type {String} Type of page/region we're in. */ + /** @property {String} Type of page/region we're in. */ UserEvidenceActions.prototype._type = null; /** diff --git a/admin/tool/moodlenet/amd/build/instance_form.min.js.map b/admin/tool/moodlenet/amd/build/instance_form.min.js.map index 61f257ee405..0faff890d64 100644 --- a/admin/tool/moodlenet/amd/build/instance_form.min.js.map +++ b/admin/tool/moodlenet/amd/build/instance_form.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/instance_form.js"],"names":["define","Validator","Selectors","LoadingIcon","Templates","Notification","$","registerListenerEvents","page","addEventListener","e","target","matches","action","submit","input","querySelector","overlay","region","spinner","validationArea","document","classList","remove","addIconToContainerWithPromise","validation","then","result","resolve","add","innerText","message","setTimeout","window","location","domain","catch","chooserNavigateToMnet","showMoodleNet","footerData","carousel","modal","innerHTML","spinnerPromise","addIconToContainer","transitionPromiseResolver","transitionPromise","Promise","when","replaceNodeContents","customcarouseltemplate","exception","one","setFooter","render","chooserNavigateFromMnet","customfootertemplate","footerClickListener","closest","preventDefault","getBody","find","moodleNet","closeOption"],"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 .\n\n/**\n * Our basic form manager for when a user either enters\n * their profile url or just wants to browse.\n *\n * This file is a mishmash of JS functions we need for both the standalone (M3.7, M3.8)\n * plugin & Moodle 3.9 functions. The 3.9 Functions have a base understanding that certain\n * things exist i.e. directory structures for templates. When this feature goes 3.9+ only\n * The goal is that we can quickly gut all AMD modules into bare JS files and use ES6 guidelines.\n * Till then this will have to do.\n *\n * @module tool_moodlenet/instance_form\n * @package tool_moodlenet\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['tool_moodlenet/validator',\n 'tool_moodlenet/selectors',\n 'core/loadingicon',\n 'core/templates',\n 'core/notification',\n 'jquery'],\n function(Validator,\n Selectors,\n LoadingIcon,\n Templates,\n Notification,\n $) {\n\n /**\n * Add the event listeners to our form.\n *\n * @method registerListenerEvents\n * @param {HTMLElement} page The whole page element for our form area\n */\n var registerListenerEvents = function registerListenerEvents(page) {\n page.addEventListener('click', function(e) {\n\n // Our fake submit button / browse button.\n if (e.target.matches(Selectors.action.submit)) {\n var input = page.querySelector('[data-var=\"mnet-link\"]');\n var overlay = page.querySelector(Selectors.region.spinner);\n var validationArea = document.querySelector(Selectors.region.validationArea);\n\n overlay.classList.remove('d-none');\n var spinner = LoadingIcon.addIconToContainerWithPromise(overlay);\n Validator.validation(input)\n .then(function(result) {\n spinner.resolve();\n overlay.classList.add('d-none');\n if (result.result) {\n input.classList.remove('is-invalid'); // Just in case the class has been applied already.\n input.classList.add('is-valid');\n validationArea.innerText = result.message;\n validationArea.classList.remove('text-danger');\n validationArea.classList.add('text-success');\n // Give the user some time to see their input is valid.\n setTimeout(function() {\n window.location = result.domain;\n }, 1000);\n } else {\n input.classList.add('is-invalid');\n validationArea.innerText = result.message;\n validationArea.classList.add('text-danger');\n }\n return;\n }).catch();\n }\n });\n };\n\n /**\n * Given a user wishes to see the MoodleNet profile url form transition them there.\n *\n * @method chooserNavigateToMnet\n * @param {HTMLElement} showMoodleNet The chooser's area for ment\n * @param {Object} footerData Our footer object to render out\n * @param {jQuery} carousel Our carousel instance to manage\n * @param {jQuery} modal Our modal instance to manage\n */\n var chooserNavigateToMnet = function(showMoodleNet, footerData, carousel, modal) {\n showMoodleNet.innerHTML = '';\n\n // Add a spinner.\n var spinnerPromise = LoadingIcon.addIconToContainer(showMoodleNet);\n\n // Used later...\n var transitionPromiseResolver = null;\n var transitionPromise = new Promise(resolve => {\n transitionPromiseResolver = resolve;\n });\n\n $.when(\n spinnerPromise,\n transitionPromise\n ).then(function() {\n Templates.replaceNodeContents(showMoodleNet, footerData.customcarouseltemplate, '');\n return;\n }).catch(Notification.exception);\n\n // We apply our handlers in here to minimise plugin dependency in the Chooser.\n registerListenerEvents(showMoodleNet);\n\n // Move to the next slide, and resolve the transition promise when it's done.\n carousel.one('slid.bs.carousel', function() {\n transitionPromiseResolver();\n });\n // Trigger the transition between 'pages'.\n carousel.carousel(2);\n // eslint-disable-next-line max-len\n modal.setFooter(Templates.render('tool_moodlenet/chooser_footer_close_mnet', {}));\n };\n\n /**\n * Given a user no longer wishes to see the MoodleNet profile url form transition them from there.\n *\n * @method chooserNavigateFromMnet\n * @param {jQuery} carousel Our carousel instance to manage\n * @param {jQuery} modal Our modal instance to manage\n * @param {Object} footerData Our footer object to render out\n */\n var chooserNavigateFromMnet = function(carousel, modal, footerData) {\n // Trigger the transition between 'pages'.\n carousel.carousel(0);\n modal.setFooter(footerData.customfootertemplate);\n };\n\n /**\n * Create the custom listener that would handle anything in the footer.\n *\n * @param {Event} e The event being triggered.\n * @param {Object} footerData The data generated from the exporter.\n * @param {Object} modal The chooser modal.\n */\n var footerClickListener = function(e, footerData, modal) {\n if (e.target.matches(Selectors.action.showMoodleNet) || e.target.closest(Selectors.action.showMoodleNet)) {\n e.preventDefault();\n const carousel = $(modal.getBody()[0].querySelector(Selectors.region.carousel));\n const showMoodleNet = carousel.find(Selectors.region.moodleNet)[0];\n\n chooserNavigateToMnet(showMoodleNet, footerData, carousel, modal);\n }\n // From the help screen go back to the module overview.\n if (e.target.matches(Selectors.action.closeOption)) {\n const carousel = $(modal.getBody()[0].querySelector(Selectors.region.carousel));\n\n chooserNavigateFromMnet(carousel, modal, footerData);\n }\n };\n\n return {\n footerClickListener: footerClickListener\n };\n});\n"],"file":"instance_form.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/instance_form.js"],"names":["define","Validator","Selectors","LoadingIcon","Templates","Notification","$","registerListenerEvents","page","addEventListener","e","target","matches","action","submit","input","querySelector","overlay","region","spinner","validationArea","document","classList","remove","addIconToContainerWithPromise","validation","then","result","resolve","add","innerText","message","setTimeout","window","location","domain","catch","chooserNavigateToMnet","showMoodleNet","footerData","carousel","modal","innerHTML","spinnerPromise","addIconToContainer","transitionPromiseResolver","transitionPromise","Promise","when","replaceNodeContents","customcarouseltemplate","exception","one","setFooter","render","chooserNavigateFromMnet","customfootertemplate","footerClickListener","closest","preventDefault","getBody","find","moodleNet","closeOption"],"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 .\n\n/**\n * Our basic form manager for when a user either enters\n * their profile url or just wants to browse.\n *\n * This file is a mishmash of JS functions we need for both the standalone (M3.7, M3.8)\n * plugin & Moodle 3.9 functions. The 3.9 Functions have a base understanding that certain\n * things exist i.e. directory structures for templates. When this feature goes 3.9+ only\n * The goal is that we can quickly gut all AMD modules into bare JS files and use ES6 guidelines.\n * Till then this will have to do.\n *\n * @module tool_moodlenet/instance_form\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['tool_moodlenet/validator',\n 'tool_moodlenet/selectors',\n 'core/loadingicon',\n 'core/templates',\n 'core/notification',\n 'jquery'],\n function(Validator,\n Selectors,\n LoadingIcon,\n Templates,\n Notification,\n $) {\n\n /**\n * Add the event listeners to our form.\n *\n * @method registerListenerEvents\n * @param {HTMLElement} page The whole page element for our form area\n */\n var registerListenerEvents = function registerListenerEvents(page) {\n page.addEventListener('click', function(e) {\n\n // Our fake submit button / browse button.\n if (e.target.matches(Selectors.action.submit)) {\n var input = page.querySelector('[data-var=\"mnet-link\"]');\n var overlay = page.querySelector(Selectors.region.spinner);\n var validationArea = document.querySelector(Selectors.region.validationArea);\n\n overlay.classList.remove('d-none');\n var spinner = LoadingIcon.addIconToContainerWithPromise(overlay);\n Validator.validation(input)\n .then(function(result) {\n spinner.resolve();\n overlay.classList.add('d-none');\n if (result.result) {\n input.classList.remove('is-invalid'); // Just in case the class has been applied already.\n input.classList.add('is-valid');\n validationArea.innerText = result.message;\n validationArea.classList.remove('text-danger');\n validationArea.classList.add('text-success');\n // Give the user some time to see their input is valid.\n setTimeout(function() {\n window.location = result.domain;\n }, 1000);\n } else {\n input.classList.add('is-invalid');\n validationArea.innerText = result.message;\n validationArea.classList.add('text-danger');\n }\n return;\n }).catch();\n }\n });\n };\n\n /**\n * Given a user wishes to see the MoodleNet profile url form transition them there.\n *\n * @method chooserNavigateToMnet\n * @param {HTMLElement} showMoodleNet The chooser's area for ment\n * @param {Object} footerData Our footer object to render out\n * @param {jQuery} carousel Our carousel instance to manage\n * @param {jQuery} modal Our modal instance to manage\n */\n var chooserNavigateToMnet = function(showMoodleNet, footerData, carousel, modal) {\n showMoodleNet.innerHTML = '';\n\n // Add a spinner.\n var spinnerPromise = LoadingIcon.addIconToContainer(showMoodleNet);\n\n // Used later...\n var transitionPromiseResolver = null;\n var transitionPromise = new Promise(resolve => {\n transitionPromiseResolver = resolve;\n });\n\n $.when(\n spinnerPromise,\n transitionPromise\n ).then(function() {\n Templates.replaceNodeContents(showMoodleNet, footerData.customcarouseltemplate, '');\n return;\n }).catch(Notification.exception);\n\n // We apply our handlers in here to minimise plugin dependency in the Chooser.\n registerListenerEvents(showMoodleNet);\n\n // Move to the next slide, and resolve the transition promise when it's done.\n carousel.one('slid.bs.carousel', function() {\n transitionPromiseResolver();\n });\n // Trigger the transition between 'pages'.\n carousel.carousel(2);\n // eslint-disable-next-line max-len\n modal.setFooter(Templates.render('tool_moodlenet/chooser_footer_close_mnet', {}));\n };\n\n /**\n * Given a user no longer wishes to see the MoodleNet profile url form transition them from there.\n *\n * @method chooserNavigateFromMnet\n * @param {jQuery} carousel Our carousel instance to manage\n * @param {jQuery} modal Our modal instance to manage\n * @param {Object} footerData Our footer object to render out\n */\n var chooserNavigateFromMnet = function(carousel, modal, footerData) {\n // Trigger the transition between 'pages'.\n carousel.carousel(0);\n modal.setFooter(footerData.customfootertemplate);\n };\n\n /**\n * Create the custom listener that would handle anything in the footer.\n *\n * @param {Event} e The event being triggered.\n * @param {Object} footerData The data generated from the exporter.\n * @param {Object} modal The chooser modal.\n */\n var footerClickListener = function(e, footerData, modal) {\n if (e.target.matches(Selectors.action.showMoodleNet) || e.target.closest(Selectors.action.showMoodleNet)) {\n e.preventDefault();\n const carousel = $(modal.getBody()[0].querySelector(Selectors.region.carousel));\n const showMoodleNet = carousel.find(Selectors.region.moodleNet)[0];\n\n chooserNavigateToMnet(showMoodleNet, footerData, carousel, modal);\n }\n // From the help screen go back to the module overview.\n if (e.target.matches(Selectors.action.closeOption)) {\n const carousel = $(modal.getBody()[0].querySelector(Selectors.region.carousel));\n\n chooserNavigateFromMnet(carousel, modal, footerData);\n }\n };\n\n return {\n footerClickListener: footerClickListener\n };\n});\n"],"file":"instance_form.min.js"} \ No newline at end of file diff --git a/admin/tool/moodlenet/amd/build/select_page.min.js.map b/admin/tool/moodlenet/amd/build/select_page.min.js.map index 49e47572829..a170f8b0a08 100644 --- a/admin/tool/moodlenet/amd/build/select_page.min.js.map +++ b/admin/tool/moodlenet/amd/build/select_page.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/select_page.js"],"names":["define","Ajax","Templates","Selectors","Notification","importId","renderNoCourses","areaReplace","renderPix","then","img","temp","document","createElement","innerHTML","trim","render","nocoursesimg","firstChild","src","html","js","replaceNodeContents","classList","add","renderCourses","courses","remove","searchCourses","inputValue","page","searchIcon","querySelector","region","clearIcon","parentElement","call","methodname","args","searchvalue","result","length","forEach","course","viewurl","catch","exception","registerListenerEvents","input","searchInput","courseArea","addEventListener","value","debounce","addCourses","func","wait","immediate","timeout","context","arguments","callNow","clearTimeout","setTimeout","later","apply","init","importIdString","selectPage"],"mappings":"AAwBAA,OAAM,8BAAC,CACH,WADG,CAEH,gBAFG,CAGH,0BAHG,CAIH,mBAJG,CAAD,CAKH,SACCC,CADD,CAECC,CAFD,CAGCC,CAHD,CAICC,CAJD,CAKD,IAIMC,CAAAA,CAJN,CAyBMC,CAAe,CAAG,SAASC,CAAT,CAAsB,CACxC,MAAOL,CAAAA,CAAS,CAACM,SAAV,CAAoB,SAApB,CAA+B,gBAA/B,EAAiDC,IAAjD,CAAsD,SAASC,CAAT,CAAc,CACvE,MAAOA,CAAAA,CACV,CAFM,EAEJD,IAFI,CAEC,SAASC,CAAT,CAAc,CAClB,GAAIC,CAAAA,CAAI,CAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAX,CACAF,CAAI,CAACG,SAAL,CAAiBJ,CAAG,CAACK,IAAJ,EAAjB,CACA,MAAOb,CAAAA,CAAS,CAACc,MAAV,CAAiB,wBAAjB,CAA2C,CAC9CC,YAAY,CAAEN,CAAI,CAACO,UAAL,CAAgBC,GADgB,CAA3C,CAGV,CARM,EAQJV,IARI,CAQC,SAASW,CAAT,CAAeC,CAAf,CAAmB,CACvBnB,CAAS,CAACoB,mBAAV,CAA8Bf,CAA9B,CAA2Ca,CAA3C,CAAiDC,CAAjD,EACAd,CAAW,CAACgB,SAAZ,CAAsBC,GAAtB,CAA0B,SAA1B,EACAjB,CAAW,CAACgB,SAAZ,CAAsBC,GAAtB,CAA0B,MAA1B,CAEH,CAbM,CAcV,CAxCH,CAiDMC,CAAa,CAAG,SAASlB,CAAT,CAAsBmB,CAAtB,CAA+B,CAC/C,MAAOxB,CAAAA,CAAS,CAACc,MAAV,CAAiB,2BAAjB,CAA8C,CACjDU,OAAO,CAAEA,CADwC,CAA9C,EAEJjB,IAFI,CAEC,SAASW,CAAT,CAAeC,CAAf,CAAmB,CACvBnB,CAAS,CAACoB,mBAAV,CAA8Bf,CAA9B,CAA2Ca,CAA3C,CAAiDC,CAAjD,EACAd,CAAW,CAACgB,SAAZ,CAAsBI,MAAtB,CAA6B,SAA7B,EACApB,CAAW,CAACgB,SAAZ,CAAsBI,MAAtB,CAA6B,MAA7B,CAEH,CAPM,CAQV,CA1DH,CAoEMC,CAAa,CAAG,SAASC,CAAT,CAAqBC,CAArB,CAA2BvB,CAA3B,CAAwC,IACpDwB,CAAAA,CAAU,CAAGD,CAAI,CAACE,aAAL,CAAmB7B,CAAS,CAAC8B,MAAV,CAAiBF,UAApC,CADuC,CAEpDG,CAAS,CAAGJ,CAAI,CAACE,aAAL,CAAmB7B,CAAS,CAAC8B,MAAV,CAAiBC,SAApC,CAFwC,CAIxD,GAAmB,EAAf,GAAAL,CAAJ,CAAuB,CACnBE,CAAU,CAACR,SAAX,CAAqBC,GAArB,CAAyB,QAAzB,EACAU,CAAS,CAACC,aAAV,CAAwBZ,SAAxB,CAAkCI,MAAlC,CAAyC,QAAzC,CACH,CAHD,IAGO,CACHI,CAAU,CAACR,SAAX,CAAqBI,MAArB,CAA4B,QAA5B,EACAO,CAAS,CAACC,aAAV,CAAwBZ,SAAxB,CAAkCC,GAAlC,CAAsC,QAAtC,CACH,CAIDvB,CAAI,CAACmC,IAAL,CAAU,CAAC,CACPC,UAAU,CAAE,+BADL,CAEPC,IAAI,CALG,CACPC,WAAW,CAAEV,CADN,CAGA,CAAD,CAAV,EAGI,CAHJ,EAGOpB,IAHP,CAGY,SAAS+B,CAAT,CAAiB,CACzB,GAA8B,CAA1B,GAAAA,CAAM,CAACd,OAAP,CAAee,MAAnB,CAAiC,CAC7B,MAAOnC,CAAAA,CAAe,CAACC,CAAD,CACzB,CAFD,IAEO,CAEHiC,CAAM,CAACd,OAAP,CAAegB,OAAf,CAAuB,SAASC,CAAT,CAAiB,CACpCA,CAAM,CAACC,OAAP,EAAkB,OAASvC,CAC9B,CAFD,EAGA,MAAOoB,CAAAA,CAAa,CAAClB,CAAD,CAAciC,CAAM,CAACd,OAArB,CACvB,CACJ,CAbD,EAaGmB,KAbH,CAaSzC,CAAY,CAAC0C,SAbtB,CAcH,CAhGH,CAwGMC,CAAsB,CAAG,SAASjB,CAAT,CAAe,IACpCkB,CAAAA,CAAK,CAAGlB,CAAI,CAACE,aAAL,CAAmB7B,CAAS,CAAC8B,MAAV,CAAiBgB,WAApC,CAD4B,CAEpCC,CAAU,CAAGpB,CAAI,CAACE,aAAL,CAAmB7B,CAAS,CAAC8B,MAAV,CAAiBP,OAApC,CAFuB,CAGpCQ,CAAS,CAAGJ,CAAI,CAACE,aAAL,CAAmB7B,CAAS,CAAC8B,MAAV,CAAiBC,SAApC,CAHwB,CAIxCA,CAAS,CAACiB,gBAAV,CAA2B,OAA3B,CAAoC,UAAW,CAC3CH,CAAK,CAACI,KAAN,CAAc,EAAd,CACAxB,CAAa,CAAC,EAAD,CAAKE,CAAL,CAAWoB,CAAX,CAChB,CAHD,EAKAF,CAAK,CAACG,gBAAN,CAAuB,OAAvB,CAAgCE,CAAQ,CAAC,UAAW,CAChDzB,CAAa,CAACoB,CAAK,CAACI,KAAP,CAActB,CAAd,CAAoBoB,CAApB,CAChB,CAFuC,CAErC,GAFqC,CAAxC,CAGH,CApHH,CA4HMI,CAAU,CAAG,SAASxB,CAAT,CAAe,CAC5B,GAAIoB,CAAAA,CAAU,CAAGpB,CAAI,CAACE,aAAL,CAAmB7B,CAAS,CAAC8B,MAAV,CAAiBP,OAApC,CAAjB,CACAE,CAAa,CAAC,EAAD,CAAKE,CAAL,CAAWoB,CAAX,CAChB,CA/HH,CA6IMG,CAAQ,CAAG,SAASE,CAAT,CAAeC,CAAf,CAAqBC,CAArB,CAAgC,CAC3C,GAAIC,CAAAA,CAAJ,CACA,MAAO,WAAW,IACVC,CAAAA,CAAO,CAAG,IADA,CAEVrB,CAAI,CAAGsB,SAFG,CASVC,CAAO,CAAGJ,CAAS,EAAI,CAACC,CATd,CAUdI,YAAY,CAACJ,CAAD,CAAZ,CACAA,CAAO,CAAGK,UAAU,CARR,QAARC,CAAAA,KAAQ,EAAW,CACnBN,CAAO,CAAG,IAAV,CACA,GAAI,CAACD,CAAL,CAAgB,CACZF,CAAI,CAACU,KAAL,CAAWN,CAAX,CAAoBrB,CAApB,CACH,CACJ,CAGmB,CAAQkB,CAAR,CAApB,CACA,GAAIK,CAAJ,CAAa,CACTN,CAAI,CAACU,KAAL,CAAWN,CAAX,CAAoBrB,CAApB,CACH,CACJ,CACJ,CA/JH,CAgKE,MAAO,CACH4B,IAAI,CArJG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAyB,CAChC9D,CAAQ,CAAG8D,CAAX,CACA,GAAIrC,CAAAA,CAAI,CAAGlB,QAAQ,CAACoB,aAAT,CAAuB7B,CAAS,CAAC8B,MAAV,CAAiBmC,UAAxC,CAAX,CACArB,CAAsB,CAACjB,CAAD,CAAtB,CACAwB,CAAU,CAACxB,CAAD,CACb,CA+IM,CAGV,CA7KK,CAAN","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 .\n\n/**\n * When returning to Moodle let the user select which course to add the resource to.\n *\n * @module tool_moodlenet/select_page\n * @package tool_moodlenet\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine([\n 'core/ajax',\n 'core/templates',\n 'tool_moodlenet/selectors',\n 'core/notification'\n], function(\n Ajax,\n Templates,\n Selectors,\n Notification\n) {\n /**\n * @var {string} The id corresponding to the import.\n */\n var importId;\n\n /**\n * Set up the page.\n *\n * @method init\n * @param {string} importIdString the string ID of the import.\n */\n var init = function(importIdString) {\n importId = importIdString;\n var page = document.querySelector(Selectors.region.selectPage);\n registerListenerEvents(page);\n addCourses(page);\n };\n\n /**\n * Renders the 'no-courses' template.\n *\n * @param {HTMLElement} areaReplace the DOM node to replace.\n * @returns {Promise}\n */\n var renderNoCourses = function(areaReplace) {\n return Templates.renderPix('courses', 'tool_moodlenet').then(function(img) {\n return img;\n }).then(function(img) {\n var temp = document.createElement('div');\n temp.innerHTML = img.trim();\n return Templates.render('core_course/no-courses', {\n nocoursesimg: temp.firstChild.src\n });\n }).then(function(html, js) {\n Templates.replaceNodeContents(areaReplace, html, js);\n areaReplace.classList.add('mx-auto');\n areaReplace.classList.add('w-25');\n return;\n });\n };\n\n /**\n * Render the course cards for those supplied courses.\n *\n * @param {HTMLElement} areaReplace the DOM node to replace.\n * @param {Array} courses the courses to render.\n * @returns {Promise}\n */\n var renderCourses = function(areaReplace, courses) {\n return Templates.render('tool_moodlenet/view-cards', {\n courses: courses\n }).then(function(html, js) {\n Templates.replaceNodeContents(areaReplace, html, js);\n areaReplace.classList.remove('mx-auto');\n areaReplace.classList.remove('w-25');\n return;\n });\n };\n\n /**\n * For a given input, the page & what to replace fetch courses and manage icons too.\n *\n * @method searchCourses\n * @param {string} inputValue What to search for\n * @param {HTMLElement} page The whole page element for our page\n * @param {HTMLElement} areaReplace The Element to replace the contents of\n */\n var searchCourses = function(inputValue, page, areaReplace) {\n var searchIcon = page.querySelector(Selectors.region.searchIcon);\n var clearIcon = page.querySelector(Selectors.region.clearIcon);\n\n if (inputValue !== '') {\n searchIcon.classList.add('d-none');\n clearIcon.parentElement.classList.remove('d-none');\n } else {\n searchIcon.classList.remove('d-none');\n clearIcon.parentElement.classList.add('d-none');\n }\n var args = {\n searchvalue: inputValue,\n };\n Ajax.call([{\n methodname: 'tool_moodlenet_search_courses',\n args: args\n }])[0].then(function(result) {\n if (result.courses.length === 0) {\n return renderNoCourses(areaReplace);\n } else {\n // Add the importId to the course link\n result.courses.forEach(function(course) {\n course.viewurl += '&id=' + importId;\n });\n return renderCourses(areaReplace, result.courses);\n }\n }).catch(Notification.exception);\n };\n\n /**\n * Add the event listeners to our page.\n *\n * @method registerListenerEvents\n * @param {HTMLElement} page The whole page element for our page\n */\n var registerListenerEvents = function(page) {\n var input = page.querySelector(Selectors.region.searchInput);\n var courseArea = page.querySelector(Selectors.region.courses);\n var clearIcon = page.querySelector(Selectors.region.clearIcon);\n clearIcon.addEventListener('click', function() {\n input.value = '';\n searchCourses('', page, courseArea);\n });\n\n input.addEventListener('input', debounce(function() {\n searchCourses(input.value, page, courseArea);\n }, 300));\n };\n\n /**\n * Fetch the courses to show the user. We use the same WS structure & template as the search for consistency.\n *\n * @method addCourses\n * @param {HTMLElement} page The whole page element for our course page\n */\n var addCourses = function(page) {\n var courseArea = page.querySelector(Selectors.region.courses);\n searchCourses('', page, courseArea);\n };\n\n /**\n * Define our own debounce function as Moodle 3.7 does not have it.\n *\n * @method debounce\n * @from underscore.js\n * @copyright 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * @licence MIT\n * @param {function} func The function we want to keep calling\n * @param {number} wait Our timeout\n * @param {boolean} immediate Do we want to apply the function immediately\n * @return {function}\n */\n var debounce = function(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this;\n var args = arguments;\n var later = function() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n };\n return {\n init: init,\n };\n});\n"],"file":"select_page.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/select_page.js"],"names":["define","Ajax","Templates","Selectors","Notification","importId","renderNoCourses","areaReplace","renderPix","then","img","temp","document","createElement","innerHTML","trim","render","nocoursesimg","firstChild","src","html","js","replaceNodeContents","classList","add","renderCourses","courses","remove","searchCourses","inputValue","page","searchIcon","querySelector","region","clearIcon","parentElement","call","methodname","args","searchvalue","result","length","forEach","course","viewurl","catch","exception","registerListenerEvents","input","searchInput","courseArea","addEventListener","value","debounce","addCourses","func","wait","immediate","timeout","context","arguments","callNow","clearTimeout","setTimeout","later","apply","init","importIdString","selectPage"],"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 .\n\n/**\n * When returning to Moodle let the user select which course to add the resource to.\n *\n * @module tool_moodlenet/select_page\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine([\n 'core/ajax',\n 'core/templates',\n 'tool_moodlenet/selectors',\n 'core/notification'\n], function(\n Ajax,\n Templates,\n Selectors,\n Notification\n) {\n /**\n * @var {string} The id corresponding to the import.\n */\n var importId;\n\n /**\n * Set up the page.\n *\n * @method init\n * @param {string} importIdString the string ID of the import.\n */\n var init = function(importIdString) {\n importId = importIdString;\n var page = document.querySelector(Selectors.region.selectPage);\n registerListenerEvents(page);\n addCourses(page);\n };\n\n /**\n * Renders the 'no-courses' template.\n *\n * @param {HTMLElement} areaReplace the DOM node to replace.\n * @returns {Promise}\n */\n var renderNoCourses = function(areaReplace) {\n return Templates.renderPix('courses', 'tool_moodlenet').then(function(img) {\n return img;\n }).then(function(img) {\n var temp = document.createElement('div');\n temp.innerHTML = img.trim();\n return Templates.render('core_course/no-courses', {\n nocoursesimg: temp.firstChild.src\n });\n }).then(function(html, js) {\n Templates.replaceNodeContents(areaReplace, html, js);\n areaReplace.classList.add('mx-auto');\n areaReplace.classList.add('w-25');\n return;\n });\n };\n\n /**\n * Render the course cards for those supplied courses.\n *\n * @param {HTMLElement} areaReplace the DOM node to replace.\n * @param {Array} courses the courses to render.\n * @returns {Promise}\n */\n var renderCourses = function(areaReplace, courses) {\n return Templates.render('tool_moodlenet/view-cards', {\n courses: courses\n }).then(function(html, js) {\n Templates.replaceNodeContents(areaReplace, html, js);\n areaReplace.classList.remove('mx-auto');\n areaReplace.classList.remove('w-25');\n return;\n });\n };\n\n /**\n * For a given input, the page & what to replace fetch courses and manage icons too.\n *\n * @method searchCourses\n * @param {string} inputValue What to search for\n * @param {HTMLElement} page The whole page element for our page\n * @param {HTMLElement} areaReplace The Element to replace the contents of\n */\n var searchCourses = function(inputValue, page, areaReplace) {\n var searchIcon = page.querySelector(Selectors.region.searchIcon);\n var clearIcon = page.querySelector(Selectors.region.clearIcon);\n\n if (inputValue !== '') {\n searchIcon.classList.add('d-none');\n clearIcon.parentElement.classList.remove('d-none');\n } else {\n searchIcon.classList.remove('d-none');\n clearIcon.parentElement.classList.add('d-none');\n }\n var args = {\n searchvalue: inputValue,\n };\n Ajax.call([{\n methodname: 'tool_moodlenet_search_courses',\n args: args\n }])[0].then(function(result) {\n if (result.courses.length === 0) {\n return renderNoCourses(areaReplace);\n } else {\n // Add the importId to the course link\n result.courses.forEach(function(course) {\n course.viewurl += '&id=' + importId;\n });\n return renderCourses(areaReplace, result.courses);\n }\n }).catch(Notification.exception);\n };\n\n /**\n * Add the event listeners to our page.\n *\n * @method registerListenerEvents\n * @param {HTMLElement} page The whole page element for our page\n */\n var registerListenerEvents = function(page) {\n var input = page.querySelector(Selectors.region.searchInput);\n var courseArea = page.querySelector(Selectors.region.courses);\n var clearIcon = page.querySelector(Selectors.region.clearIcon);\n clearIcon.addEventListener('click', function() {\n input.value = '';\n searchCourses('', page, courseArea);\n });\n\n input.addEventListener('input', debounce(function() {\n searchCourses(input.value, page, courseArea);\n }, 300));\n };\n\n /**\n * Fetch the courses to show the user. We use the same WS structure & template as the search for consistency.\n *\n * @method addCourses\n * @param {HTMLElement} page The whole page element for our course page\n */\n var addCourses = function(page) {\n var courseArea = page.querySelector(Selectors.region.courses);\n searchCourses('', page, courseArea);\n };\n\n /**\n * Define our own debounce function as Moodle 3.7 does not have it.\n *\n * @method debounce\n * @from underscore.js\n * @copyright 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * @licence MIT\n * @param {function} func The function we want to keep calling\n * @param {number} wait Our timeout\n * @param {boolean} immediate Do we want to apply the function immediately\n * @return {function}\n */\n var debounce = function(func, wait, immediate) {\n var timeout;\n return function() {\n var context = this;\n var args = arguments;\n var later = function() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n };\n return {\n init: init,\n };\n});\n"],"file":"select_page.min.js"} \ No newline at end of file diff --git a/admin/tool/moodlenet/amd/build/selectors.min.js.map b/admin/tool/moodlenet/amd/build/selectors.min.js.map index 8ef6f4bba46..045ac3b471f 100644 --- a/admin/tool/moodlenet/amd/build/selectors.min.js.map +++ b/admin/tool/moodlenet/amd/build/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/selectors.js"],"names":["define","action","browse","submit","showMoodleNet","closeOption","region","clearIcon","courses","instancePage","searchInput","searchIcon","selectPage","spinner","validationArea","carousel","moodleNet"],"mappings":"AAuBAA,OAAM,4BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,MAAM,CAAE,CACJC,MAAM,CAAE,0BADJ,CAEJC,MAAM,CAAE,0BAFJ,CAGJC,aAAa,CAAE,kCAHX,CAIJC,WAAW,CAAE,gDAJT,CADL,CAOHC,MAAM,CAAE,CACJC,SAAS,CAAE,8BADP,CAEJC,OAAO,CAAE,gCAFL,CAGJC,YAAY,CAAE,8BAHV,CAIJC,WAAW,CAAE,gCAJT,CAKJC,UAAU,CAAE,+BALR,CAMJC,UAAU,CAAE,qCANR,CAOJC,OAAO,CAAE,2BAPL,CAQJC,cAAc,CAAE,mCARZ,CASJC,QAAQ,CAAE,4BATN,CAUJC,SAAS,CAAE,kCAVP,CAPL,CAoBV,CArBK,CAAN","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 .\n\n/**\n * Define all of the selectors we will be using within MoodleNet plugin.\n *\n * @module tool_moodlenet/selectors\n * @package tool_moodlenet\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n action: {\n browse: '[data-action=\"browse\"]',\n submit: '[data-action=\"submit\"]',\n showMoodleNet: '[data-action=\"show-moodlenet\"]',\n closeOption: '[data-action=\"close-chooser-option-summary\"]',\n },\n region: {\n clearIcon: '[data-region=\"clear-icon\"]',\n courses: '[data-region=\"mnet-courses\"]',\n instancePage: '[data-region=\"moodle-net\"]',\n searchInput: '[data-region=\"search-input\"]',\n searchIcon: '[data-region=\"search-icon\"]',\n selectPage: '[data-region=\"moodle-net-select\"]',\n spinner: '[data-region=\"spinner\"]',\n validationArea: '[data-region=\"validation-area\"]',\n carousel: '[data-region=\"carousel\"]',\n moodleNet: '[data-region=\"pluginCarousel\"]',\n },\n };\n});\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/selectors.js"],"names":["define","action","browse","submit","showMoodleNet","closeOption","region","clearIcon","courses","instancePage","searchInput","searchIcon","selectPage","spinner","validationArea","carousel","moodleNet"],"mappings":"AAsBAA,OAAM,4BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,MAAM,CAAE,CACJC,MAAM,CAAE,0BADJ,CAEJC,MAAM,CAAE,0BAFJ,CAGJC,aAAa,CAAE,kCAHX,CAIJC,WAAW,CAAE,gDAJT,CADL,CAOHC,MAAM,CAAE,CACJC,SAAS,CAAE,8BADP,CAEJC,OAAO,CAAE,gCAFL,CAGJC,YAAY,CAAE,8BAHV,CAIJC,WAAW,CAAE,gCAJT,CAKJC,UAAU,CAAE,+BALR,CAMJC,UAAU,CAAE,qCANR,CAOJC,OAAO,CAAE,2BAPL,CAQJC,cAAc,CAAE,mCARZ,CASJC,QAAQ,CAAE,4BATN,CAUJC,SAAS,CAAE,kCAVP,CAPL,CAoBV,CArBK,CAAN","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 .\n\n/**\n * Define all of the selectors we will be using within MoodleNet plugin.\n *\n * @module tool_moodlenet/selectors\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n action: {\n browse: '[data-action=\"browse\"]',\n submit: '[data-action=\"submit\"]',\n showMoodleNet: '[data-action=\"show-moodlenet\"]',\n closeOption: '[data-action=\"close-chooser-option-summary\"]',\n },\n region: {\n clearIcon: '[data-region=\"clear-icon\"]',\n courses: '[data-region=\"mnet-courses\"]',\n instancePage: '[data-region=\"moodle-net\"]',\n searchInput: '[data-region=\"search-input\"]',\n searchIcon: '[data-region=\"search-icon\"]',\n selectPage: '[data-region=\"moodle-net-select\"]',\n spinner: '[data-region=\"spinner\"]',\n validationArea: '[data-region=\"validation-area\"]',\n carousel: '[data-region=\"carousel\"]',\n moodleNet: '[data-region=\"pluginCarousel\"]',\n },\n };\n});\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/admin/tool/moodlenet/amd/build/validator.min.js.map b/admin/tool/moodlenet/amd/build/validator.min.js.map index 34c0c5b8fe0..e0ccd035c88 100644 --- a/admin/tool/moodlenet/amd/build/validator.min.js.map +++ b/admin/tool/moodlenet/amd/build/validator.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/validator.js"],"names":["define","$","Ajax","Str","Notification","validation","inputElement","inputValue","value","includes","when","get_string","then","strings","Promise","reject","catch","result","message","fail","exception","call","methodname","args","profileurl","course","dataset","courseid","section","sectionid"],"mappings":"AAuBAA,OAAM,4BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CAAD,CAA2D,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqC,CAgClG,MAAO,CACHC,UAAU,CAzBG,SAAoBC,CAApB,CAAkC,CAC/C,GAAIC,CAAAA,CAAU,CAAGD,CAAY,CAACE,KAA9B,CAGA,GAAmB,EAAf,GAAAD,CAAU,EAAW,CAACA,CAAU,CAACE,QAAX,CAAoB,GAApB,CAA1B,CAAoD,CAEhDR,CAAC,CAACS,IAAF,CAAOP,CAAG,CAACQ,UAAJ,CAAe,wBAAf,CAAyC,gBAAzC,CAAP,EAAmEC,IAAnE,CAAwE,SAASC,CAAT,CAAkB,CACtF,MAAOC,CAAAA,OAAO,CAACC,MAAR,GAAiBC,KAAjB,CAAuB,UAAW,CACrC,MAAO,CAACC,MAAM,GAAP,CAAgBC,OAAO,CAAEL,CAAO,CAAC,CAAD,CAAhC,CACV,CAFM,CAGV,CAJD,EAIGM,IAJH,CAIQf,CAAY,CAACgB,SAJrB,CAKH,CAED,MAAOlB,CAAAA,CAAI,CAACmB,IAAL,CAAU,CAAC,CACdC,UAAU,CAAE,iCADE,CAEdC,IAAI,CAAE,CACFC,UAAU,CAAEjB,CADV,CAEFkB,MAAM,CAAEnB,CAAY,CAACoB,OAAb,CAAqBC,QAF3B,CAGFC,OAAO,CAAEtB,CAAY,CAACoB,OAAb,CAAqBG,SAH5B,CAFQ,CAAD,CAAV,EAOH,CAPG,EAOAjB,IAPA,CAOK,SAASK,CAAT,CAAiB,CACzB,MAAOA,CAAAA,CACV,CATM,EASJD,KATI,EAUV,CACM,CAGV,CAnCK,CAAN","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 .\n\n/**\n * Our validator that splits the user's input then fires off to a webservice\n *\n * @module tool_moodlenet/validator\n * @package tool_moodlenet\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification'], function($, Ajax, Str, Notification) {\n /**\n * Handle form validation\n *\n * @method validation\n * @param {HTMLElement} inputElement The element the user entered text into.\n * @return {Promise} Was the users' entry a valid profile URL?\n */\n var validation = function validation(inputElement) {\n var inputValue = inputElement.value;\n\n // They didn't submit anything or they gave us a simple string that we can't do anything with.\n if (inputValue === \"\" || !inputValue.includes(\"@\")) {\n // Create a promise and immediately reject it.\n $.when(Str.get_string('profilevalidationerror', 'tool_moodlenet')).then(function(strings) {\n return Promise.reject().catch(function() {\n return {result: false, message: strings[0]};\n });\n }).fail(Notification.exception);\n }\n\n return Ajax.call([{\n methodname: 'tool_moodlenet_verify_webfinger',\n args: {\n profileurl: inputValue,\n course: inputElement.dataset.courseid,\n section: inputElement.dataset.sectionid\n }\n }])[0].then(function(result) {\n return result;\n }).catch();\n };\n return {\n validation: validation,\n };\n});\n"],"file":"validator.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/validator.js"],"names":["define","$","Ajax","Str","Notification","validation","inputElement","inputValue","value","includes","when","get_string","then","strings","Promise","reject","catch","result","message","fail","exception","call","methodname","args","profileurl","course","dataset","courseid","section","sectionid"],"mappings":"AAsBAA,OAAM,4BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CAAD,CAA2D,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqC,CAgClG,MAAO,CACHC,UAAU,CAzBG,SAAoBC,CAApB,CAAkC,CAC/C,GAAIC,CAAAA,CAAU,CAAGD,CAAY,CAACE,KAA9B,CAGA,GAAmB,EAAf,GAAAD,CAAU,EAAW,CAACA,CAAU,CAACE,QAAX,CAAoB,GAApB,CAA1B,CAAoD,CAEhDR,CAAC,CAACS,IAAF,CAAOP,CAAG,CAACQ,UAAJ,CAAe,wBAAf,CAAyC,gBAAzC,CAAP,EAAmEC,IAAnE,CAAwE,SAASC,CAAT,CAAkB,CACtF,MAAOC,CAAAA,OAAO,CAACC,MAAR,GAAiBC,KAAjB,CAAuB,UAAW,CACrC,MAAO,CAACC,MAAM,GAAP,CAAgBC,OAAO,CAAEL,CAAO,CAAC,CAAD,CAAhC,CACV,CAFM,CAGV,CAJD,EAIGM,IAJH,CAIQf,CAAY,CAACgB,SAJrB,CAKH,CAED,MAAOlB,CAAAA,CAAI,CAACmB,IAAL,CAAU,CAAC,CACdC,UAAU,CAAE,iCADE,CAEdC,IAAI,CAAE,CACFC,UAAU,CAAEjB,CADV,CAEFkB,MAAM,CAAEnB,CAAY,CAACoB,OAAb,CAAqBC,QAF3B,CAGFC,OAAO,CAAEtB,CAAY,CAACoB,OAAb,CAAqBG,SAH5B,CAFQ,CAAD,CAAV,EAOH,CAPG,EAOAjB,IAPA,CAOK,SAASK,CAAT,CAAiB,CACzB,MAAOA,CAAAA,CACV,CATM,EASJD,KATI,EAUV,CACM,CAGV,CAnCK,CAAN","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 .\n\n/**\n * Our validator that splits the user's input then fires off to a webservice\n *\n * @module tool_moodlenet/validator\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification'], function($, Ajax, Str, Notification) {\n /**\n * Handle form validation\n *\n * @method validation\n * @param {HTMLElement} inputElement The element the user entered text into.\n * @return {Promise} Was the users' entry a valid profile URL?\n */\n var validation = function validation(inputElement) {\n var inputValue = inputElement.value;\n\n // They didn't submit anything or they gave us a simple string that we can't do anything with.\n if (inputValue === \"\" || !inputValue.includes(\"@\")) {\n // Create a promise and immediately reject it.\n $.when(Str.get_string('profilevalidationerror', 'tool_moodlenet')).then(function(strings) {\n return Promise.reject().catch(function() {\n return {result: false, message: strings[0]};\n });\n }).fail(Notification.exception);\n }\n\n return Ajax.call([{\n methodname: 'tool_moodlenet_verify_webfinger',\n args: {\n profileurl: inputValue,\n course: inputElement.dataset.courseid,\n section: inputElement.dataset.sectionid\n }\n }])[0].then(function(result) {\n return result;\n }).catch();\n };\n return {\n validation: validation,\n };\n});\n"],"file":"validator.min.js"} \ No newline at end of file diff --git a/admin/tool/moodlenet/amd/src/instance_form.js b/admin/tool/moodlenet/amd/src/instance_form.js index cc0580e56de..59ab4e921c7 100644 --- a/admin/tool/moodlenet/amd/src/instance_form.js +++ b/admin/tool/moodlenet/amd/src/instance_form.js @@ -24,7 +24,6 @@ * Till then this will have to do. * * @module tool_moodlenet/instance_form - * @package tool_moodlenet * @copyright 2020 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/moodlenet/amd/src/select_page.js b/admin/tool/moodlenet/amd/src/select_page.js index d9a1dc4ef20..92fafd80ead 100644 --- a/admin/tool/moodlenet/amd/src/select_page.js +++ b/admin/tool/moodlenet/amd/src/select_page.js @@ -17,7 +17,6 @@ * When returning to Moodle let the user select which course to add the resource to. * * @module tool_moodlenet/select_page - * @package tool_moodlenet * @copyright 2020 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/moodlenet/amd/src/selectors.js b/admin/tool/moodlenet/amd/src/selectors.js index 5feb0f39d20..63e3e9064e1 100644 --- a/admin/tool/moodlenet/amd/src/selectors.js +++ b/admin/tool/moodlenet/amd/src/selectors.js @@ -17,7 +17,6 @@ * Define all of the selectors we will be using within MoodleNet plugin. * * @module tool_moodlenet/selectors - * @package tool_moodlenet * @copyright 2020 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/moodlenet/amd/src/validator.js b/admin/tool/moodlenet/amd/src/validator.js index 704bd6710ac..d4098b0d95a 100644 --- a/admin/tool/moodlenet/amd/src/validator.js +++ b/admin/tool/moodlenet/amd/src/validator.js @@ -17,7 +17,6 @@ * Our validator that splits the user's input then fires off to a webservice * * @module tool_moodlenet/validator - * @package tool_moodlenet * @copyright 2020 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/policy/amd/build/acceptances_filter.min.js.map b/admin/tool/policy/amd/build/acceptances_filter.min.js.map index 85eb1b08e40..9d3a54d842f 100644 --- a/admin/tool/policy/amd/build/acceptances_filter.min.js.map +++ b/admin/tool/policy/amd/build/acceptances_filter.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/acceptances_filter.js"],"names":["define","$","Autocomplete","Str","Notification","SELECTORS","UNIFIED_FILTERS","init","M","util","js_pending","get_strings","key","component","done","langstrings","placeholder","noSelectionString","enhance","then","js_complete","fail","exception","last","val","on","current","listoffilters","textfilters","updatedselectedfilters","each","index","catoption","catandoption","split","length","push","category","option","updatefilters","concat","join","form","submit","getForm","closest"],"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 .\n\n/**\n * Unified filter page JS module for the course participants page.\n *\n * @module tool_policy/acceptances_filter\n * @package tool_policy\n * @copyright 2017 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/form-autocomplete', 'core/str', 'core/notification'],\n function($, Autocomplete, Str, Notification) {\n\n /**\n * Selectors.\n *\n * @access private\n * @type {{UNIFIED_FILTERS: string}}\n */\n var SELECTORS = {\n UNIFIED_FILTERS: '#unified-filters'\n };\n\n /**\n * Init function.\n *\n * @method init\n * @private\n */\n var init = function() {\n var stringkeys = [{\n key: 'filterplaceholder',\n component: 'tool_policy'\n }, {\n key: 'nofiltersapplied',\n component: 'tool_policy'\n }];\n\n M.util.js_pending('acceptances_filter_datasource');\n Str.get_strings(stringkeys).done(function(langstrings) {\n var placeholder = langstrings[0];\n var noSelectionString = langstrings[1];\n Autocomplete.enhance(SELECTORS.UNIFIED_FILTERS, true, 'tool_policy/acceptances_filter_datasource', placeholder,\n false, true, noSelectionString, true)\n .then(function() {\n M.util.js_complete('acceptances_filter_datasource');\n\n return;\n })\n .fail(Notification.exception);\n }).fail(Notification.exception);\n\n var last = $(SELECTORS.UNIFIED_FILTERS).val();\n $(SELECTORS.UNIFIED_FILTERS).on('change', function() {\n var current = $(this).val();\n var listoffilters = [];\n var textfilters = [];\n var updatedselectedfilters = false;\n\n $.each(current, function(index, catoption) {\n var catandoption = catoption.split(':', 2);\n if (catandoption.length !== 2) {\n textfilters.push(catoption);\n return true; // Text search filter.\n }\n\n var category = catandoption[0];\n var option = catandoption[1];\n\n // The last option (eg. 'Teacher') out of a category (eg. 'Role') in this loop is the one that was last\n // selected, so we want to use that if there are multiple options from the same category. Eg. The user\n // may have chosen to filter by the 'Student' role, then wanted to filter by the 'Teacher' role - the\n // last option in the category to be selected (in this case 'Teacher') will come last, so will overwrite\n // 'Student' (after this if). We want to let the JS know that the filters have been updated.\n if (typeof listoffilters[category] !== 'undefined') {\n updatedselectedfilters = true;\n }\n\n listoffilters[category] = option;\n return true;\n });\n\n // Check if we have something to remove from the list of filters.\n if (updatedselectedfilters) {\n // Go through and put the list into something we can use to update the list of filters.\n var updatefilters = [];\n for (var category in listoffilters) {\n updatefilters.push(category + \":\" + listoffilters[category]);\n }\n updatefilters = updatefilters.concat(textfilters);\n $(this).val(updatefilters);\n }\n\n // Prevent form from submitting unnecessarily, eg. on blur when no filter is selected.\n if (last.join(',') != current.join(',')) {\n this.form.submit();\n }\n });\n };\n\n /**\n * Return the unified user filter form.\n *\n * @method getForm\n * @return {DOMElement}\n */\n var getForm = function() {\n return $(SELECTORS.UNIFIED_FILTERS).closest('form');\n };\n\n return /** @alias module:core/form-autocomplete */ {\n /**\n * Initialise the unified user filter.\n *\n * @method init\n */\n init: function() {\n init();\n },\n\n /**\n * Return the unified user filter form.\n *\n * @method getForm\n * @return {DOMElement}\n */\n getForm: function() {\n return getForm();\n }\n };\n });\n"],"file":"acceptances_filter.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/acceptances_filter.js"],"names":["define","$","Autocomplete","Str","Notification","SELECTORS","UNIFIED_FILTERS","init","M","util","js_pending","get_strings","key","component","done","langstrings","placeholder","noSelectionString","enhance","then","js_complete","fail","exception","last","val","on","current","listoffilters","textfilters","updatedselectedfilters","each","index","catoption","catandoption","split","length","push","category","option","updatefilters","concat","join","form","submit","getForm","closest"],"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 .\n\n/**\n * Unified filter page JS module for the course participants page.\n *\n * @module tool_policy/acceptances_filter\n * @copyright 2017 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/form-autocomplete', 'core/str', 'core/notification'],\n function($, Autocomplete, Str, Notification) {\n\n /**\n * Selectors.\n *\n * @access private\n * @type {{UNIFIED_FILTERS: string}}\n */\n var SELECTORS = {\n UNIFIED_FILTERS: '#unified-filters'\n };\n\n /**\n * Init function.\n *\n * @method init\n * @private\n */\n var init = function() {\n var stringkeys = [{\n key: 'filterplaceholder',\n component: 'tool_policy'\n }, {\n key: 'nofiltersapplied',\n component: 'tool_policy'\n }];\n\n M.util.js_pending('acceptances_filter_datasource');\n Str.get_strings(stringkeys).done(function(langstrings) {\n var placeholder = langstrings[0];\n var noSelectionString = langstrings[1];\n Autocomplete.enhance(SELECTORS.UNIFIED_FILTERS, true, 'tool_policy/acceptances_filter_datasource', placeholder,\n false, true, noSelectionString, true)\n .then(function() {\n M.util.js_complete('acceptances_filter_datasource');\n\n return;\n })\n .fail(Notification.exception);\n }).fail(Notification.exception);\n\n var last = $(SELECTORS.UNIFIED_FILTERS).val();\n $(SELECTORS.UNIFIED_FILTERS).on('change', function() {\n var current = $(this).val();\n var listoffilters = [];\n var textfilters = [];\n var updatedselectedfilters = false;\n\n $.each(current, function(index, catoption) {\n var catandoption = catoption.split(':', 2);\n if (catandoption.length !== 2) {\n textfilters.push(catoption);\n return true; // Text search filter.\n }\n\n var category = catandoption[0];\n var option = catandoption[1];\n\n // The last option (eg. 'Teacher') out of a category (eg. 'Role') in this loop is the one that was last\n // selected, so we want to use that if there are multiple options from the same category. Eg. The user\n // may have chosen to filter by the 'Student' role, then wanted to filter by the 'Teacher' role - the\n // last option in the category to be selected (in this case 'Teacher') will come last, so will overwrite\n // 'Student' (after this if). We want to let the JS know that the filters have been updated.\n if (typeof listoffilters[category] !== 'undefined') {\n updatedselectedfilters = true;\n }\n\n listoffilters[category] = option;\n return true;\n });\n\n // Check if we have something to remove from the list of filters.\n if (updatedselectedfilters) {\n // Go through and put the list into something we can use to update the list of filters.\n var updatefilters = [];\n for (var category in listoffilters) {\n updatefilters.push(category + \":\" + listoffilters[category]);\n }\n updatefilters = updatefilters.concat(textfilters);\n $(this).val(updatefilters);\n }\n\n // Prevent form from submitting unnecessarily, eg. on blur when no filter is selected.\n if (last.join(',') != current.join(',')) {\n this.form.submit();\n }\n });\n };\n\n /**\n * Return the unified user filter form.\n *\n * @method getForm\n * @return {DOMElement}\n */\n var getForm = function() {\n return $(SELECTORS.UNIFIED_FILTERS).closest('form');\n };\n\n return /** @alias module:core/form-autocomplete */ {\n /**\n * Initialise the unified user filter.\n *\n * @method init\n */\n init: function() {\n init();\n },\n\n /**\n * Return the unified user filter form.\n *\n * @method getForm\n * @return {DOMElement}\n */\n getForm: function() {\n return getForm();\n }\n };\n });\n"],"file":"acceptances_filter.min.js"} \ No newline at end of file diff --git a/admin/tool/policy/amd/build/acceptances_filter_datasource.min.js.map b/admin/tool/policy/amd/build/acceptances_filter_datasource.min.js.map index 4d246bc3c17..3132f75f920 100644 --- a/admin/tool/policy/amd/build/acceptances_filter_datasource.min.js.map +++ b/admin/tool/policy/amd/build/acceptances_filter_datasource.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/acceptances_filter_datasource.js"],"names":["define","$","Ajax","Notification","list","selector","query","filteredOptions","el","originalOptions","data","selectedFilters","val","each","index","option","trim","label","toLocaleLowerCase","indexOf","inArray","value","push","deferred","Deferred","resolve","promise","processResults","results","options","transport","callback","then","catch","exception"],"mappings":"AAyBAA,OAAM,6CAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,mBAAxB,CAAD,CAA+C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgC,CAEjF,MAAsE,CAQlEC,IAAI,CAAE,cAASC,CAAT,CAAmBC,CAAnB,CAA0B,IACxBC,CAAAA,CAAe,CAAG,EADM,CAGxBC,CAAE,CAAGP,CAAC,CAACI,CAAD,CAHkB,CAIxBI,CAAe,CAAGR,CAAC,CAACI,CAAD,CAAD,CAAYK,IAAZ,CAAiB,qBAAjB,CAJM,CAKxBC,CAAe,CAAGH,CAAE,CAACI,GAAH,EALM,CAM5BX,CAAC,CAACY,IAAF,CAAOJ,CAAP,CAAwB,SAASK,CAAT,CAAgBC,CAAhB,CAAwB,CAE5C,GAAqB,EAAjB,GAAAT,CAAK,CAACU,IAAN,IAA+F,CAAC,CAAzE,GAAAD,CAAM,CAACE,KAAP,CAAaC,iBAAb,GAAiCC,OAAjC,CAAyCb,CAAK,CAACY,iBAAN,EAAzC,CAA3B,CAAuG,CACnG,QACH,CAED,GAA+C,CAAC,CAA5C,CAAAjB,CAAC,CAACmB,OAAF,CAAUL,CAAM,CAACM,KAAjB,CAAwBV,CAAxB,CAAJ,CAAmD,CAC/C,QACH,CAEDJ,CAAe,CAACe,IAAhB,CAAqBP,CAArB,EACA,QACH,CAZD,EAcA,GAAIQ,CAAAA,CAAQ,CAAG,GAAItB,CAAAA,CAAC,CAACuB,QAArB,CACAD,CAAQ,CAACE,OAAT,CAAiBlB,CAAjB,EAEA,MAAOgB,CAAAA,CAAQ,CAACG,OAAT,EACV,CAhCiE,CAyClEC,cAAc,CAAE,wBAAStB,CAAT,CAAmBuB,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAO,CAAG,EAAd,CACA5B,CAAC,CAACY,IAAF,CAAOe,CAAP,CAAgB,SAASd,CAAT,CAAgBJ,CAAhB,CAAsB,CAClCmB,CAAO,CAACP,IAAR,CAAa,CACTD,KAAK,CAAEX,CAAI,CAACW,KADH,CAETJ,KAAK,CAAEP,CAAI,CAACO,KAFH,CAAb,CAIH,CALD,EAMA,MAAOY,CAAAA,CACV,CAlDiE,CA4DlEC,SAAS,CAAE,mBAASzB,CAAT,CAAmBC,CAAnB,CAA0ByB,CAA1B,CAAoC,CAC3C,KAAK3B,IAAL,CAAUC,CAAV,CAAoBC,CAApB,EAA2B0B,IAA3B,CAAgCD,CAAhC,EAA0CE,KAA1C,CAAgD9B,CAAY,CAAC+B,SAA7D,CACH,CA9DiE,CAiEzE,CAnEK,CAAN","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 .\n\n/**\n * Datasource for the tool_policy/acceptances_filter.\n *\n * This module is compatible with core/form-autocomplete.\n *\n * @package tool_policy\n * @copyright 2017 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {\n\n return /** @alias module:tool_policy/acceptances_filter_datasource */ {\n /**\n * List filter options.\n *\n * @param {String} selector The select element selector.\n * @param {String} query The query string.\n * @return {Promise}\n */\n list: function(selector, query) {\n var filteredOptions = [];\n\n var el = $(selector);\n var originalOptions = $(selector).data('originaloptionsjson');\n var selectedFilters = el.val();\n $.each(originalOptions, function(index, option) {\n // Skip option if it does not contain the query string.\n if (query.trim() !== '' && option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) === -1) {\n return true;\n }\n // Skip filters that have already been selected.\n if ($.inArray(option.value, selectedFilters) > -1) {\n return true;\n }\n\n filteredOptions.push(option);\n return true;\n });\n\n var deferred = new $.Deferred();\n deferred.resolve(filteredOptions);\n\n return deferred.promise();\n },\n\n /**\n * Process the results for auto complete elements.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {Array} results An array or results.\n * @return {Array} New array of results.\n */\n processResults: function(selector, results) {\n var options = [];\n $.each(results, function(index, data) {\n options.push({\n value: data.value,\n label: data.label\n });\n });\n return options;\n },\n\n /**\n * Source of data for Ajax element.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {String} query The query string.\n * @param {Function} callback A callback function receiving an array of results.\n */\n /* eslint-disable promise/no-callback-in-promise */\n transport: function(selector, query, callback) {\n this.list(selector, query).then(callback).catch(Notification.exception);\n }\n };\n\n});\n"],"file":"acceptances_filter_datasource.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/acceptances_filter_datasource.js"],"names":["define","$","Ajax","Notification","list","selector","query","filteredOptions","el","originalOptions","data","selectedFilters","val","each","index","option","trim","label","toLocaleLowerCase","indexOf","inArray","value","push","deferred","Deferred","resolve","promise","processResults","results","options","transport","callback","then","catch","exception"],"mappings":"AAwBAA,OAAM,6CAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,mBAAxB,CAAD,CAA+C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgC,CAEjF,MAAsE,CAQlEC,IAAI,CAAE,cAASC,CAAT,CAAmBC,CAAnB,CAA0B,IACxBC,CAAAA,CAAe,CAAG,EADM,CAGxBC,CAAE,CAAGP,CAAC,CAACI,CAAD,CAHkB,CAIxBI,CAAe,CAAGR,CAAC,CAACI,CAAD,CAAD,CAAYK,IAAZ,CAAiB,qBAAjB,CAJM,CAKxBC,CAAe,CAAGH,CAAE,CAACI,GAAH,EALM,CAM5BX,CAAC,CAACY,IAAF,CAAOJ,CAAP,CAAwB,SAASK,CAAT,CAAgBC,CAAhB,CAAwB,CAE5C,GAAqB,EAAjB,GAAAT,CAAK,CAACU,IAAN,IAA+F,CAAC,CAAzE,GAAAD,CAAM,CAACE,KAAP,CAAaC,iBAAb,GAAiCC,OAAjC,CAAyCb,CAAK,CAACY,iBAAN,EAAzC,CAA3B,CAAuG,CACnG,QACH,CAED,GAA+C,CAAC,CAA5C,CAAAjB,CAAC,CAACmB,OAAF,CAAUL,CAAM,CAACM,KAAjB,CAAwBV,CAAxB,CAAJ,CAAmD,CAC/C,QACH,CAEDJ,CAAe,CAACe,IAAhB,CAAqBP,CAArB,EACA,QACH,CAZD,EAcA,GAAIQ,CAAAA,CAAQ,CAAG,GAAItB,CAAAA,CAAC,CAACuB,QAArB,CACAD,CAAQ,CAACE,OAAT,CAAiBlB,CAAjB,EAEA,MAAOgB,CAAAA,CAAQ,CAACG,OAAT,EACV,CAhCiE,CAyClEC,cAAc,CAAE,wBAAStB,CAAT,CAAmBuB,CAAnB,CAA4B,CACxC,GAAIC,CAAAA,CAAO,CAAG,EAAd,CACA5B,CAAC,CAACY,IAAF,CAAOe,CAAP,CAAgB,SAASd,CAAT,CAAgBJ,CAAhB,CAAsB,CAClCmB,CAAO,CAACP,IAAR,CAAa,CACTD,KAAK,CAAEX,CAAI,CAACW,KADH,CAETJ,KAAK,CAAEP,CAAI,CAACO,KAFH,CAAb,CAIH,CALD,EAMA,MAAOY,CAAAA,CACV,CAlDiE,CA4DlEC,SAAS,CAAE,mBAASzB,CAAT,CAAmBC,CAAnB,CAA0ByB,CAA1B,CAAoC,CAC3C,KAAK3B,IAAL,CAAUC,CAAV,CAAoBC,CAApB,EAA2B0B,IAA3B,CAAgCD,CAAhC,EAA0CE,KAA1C,CAAgD9B,CAAY,CAAC+B,SAA7D,CACH,CA9DiE,CAiEzE,CAnEK,CAAN","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 .\n\n/**\n * Datasource for the tool_policy/acceptances_filter.\n *\n * This module is compatible with core/form-autocomplete.\n *\n * @copyright 2017 Jun Pataleta\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {\n\n return /** @alias module:tool_policy/acceptances_filter_datasource */ {\n /**\n * List filter options.\n *\n * @param {String} selector The select element selector.\n * @param {String} query The query string.\n * @return {Promise}\n */\n list: function(selector, query) {\n var filteredOptions = [];\n\n var el = $(selector);\n var originalOptions = $(selector).data('originaloptionsjson');\n var selectedFilters = el.val();\n $.each(originalOptions, function(index, option) {\n // Skip option if it does not contain the query string.\n if (query.trim() !== '' && option.label.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) === -1) {\n return true;\n }\n // Skip filters that have already been selected.\n if ($.inArray(option.value, selectedFilters) > -1) {\n return true;\n }\n\n filteredOptions.push(option);\n return true;\n });\n\n var deferred = new $.Deferred();\n deferred.resolve(filteredOptions);\n\n return deferred.promise();\n },\n\n /**\n * Process the results for auto complete elements.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {Array} results An array or results.\n * @return {Array} New array of results.\n */\n processResults: function(selector, results) {\n var options = [];\n $.each(results, function(index, data) {\n options.push({\n value: data.value,\n label: data.label\n });\n });\n return options;\n },\n\n /**\n * Source of data for Ajax element.\n *\n * @param {String} selector The selector of the auto complete element.\n * @param {String} query The query string.\n * @param {Function} callback A callback function receiving an array of results.\n */\n /* eslint-disable promise/no-callback-in-promise */\n transport: function(selector, query, callback) {\n this.list(selector, query).then(callback).catch(Notification.exception);\n }\n };\n\n});\n"],"file":"acceptances_filter_datasource.min.js"} \ No newline at end of file diff --git a/admin/tool/policy/amd/build/acceptmodal.min.js.map b/admin/tool/policy/amd/build/acceptmodal.min.js.map index 705150e6848..64600978a76 100644 --- a/admin/tool/policy/amd/build/acceptmodal.min.js.map +++ b/admin/tool/policy/amd/build/acceptmodal.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/acceptmodal.js"],"names":["define","$","Str","ModalFactory","ModalEvents","Notification","Fragment","Ajax","Y","AcceptOnBehalf","contextid","init","prototype","modal","currentTrigger","triggers","SINGLE","BULK","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","type","types","SAVE_CANCEL","body","done","setupFormModal","catch","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","getBody","save","submitForm","submitFormAjax","show","jsonformdata","JSON","stringify","loadFragment","requests","call","methodname","args","data","validationerrors","close","submit","document","location","reload","use","M","core_formchangechecker","reset_form_dirty_state","focus","getInstance"],"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 .\n\n/**\n * Add policy consent modal to the page\n *\n * @module tool_policy/acceptmodal\n * @class AcceptOnBehalf\n * @package tool_policy\n * @copyright 2018 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/notification', 'core/fragment',\n 'core/ajax', 'core/yui'],\n function($, Str, ModalFactory, ModalEvents, Notification, Fragment, Ajax, Y) {\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 ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: title,\n body: ''\n }).done(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 Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\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"],"file":"acceptmodal.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/acceptmodal.js"],"names":["define","$","Str","ModalFactory","ModalEvents","Notification","Fragment","Ajax","Y","AcceptOnBehalf","contextid","init","prototype","modal","currentTrigger","triggers","SINGLE","BULK","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","type","types","SAVE_CANCEL","body","done","setupFormModal","catch","setLarge","setSaveButtonText","getRoot","hidden","destroy","setBody","getBody","save","submitForm","submitFormAjax","show","jsonformdata","JSON","stringify","loadFragment","requests","call","methodname","args","data","validationerrors","close","submit","document","location","reload","use","M","core_formchangechecker","reset_form_dirty_state","focus","getInstance"],"mappings":"AAuBAA,OAAM,2BAAC,CAAC,QAAD,CAAW,UAAX,CAAuB,oBAAvB,CAA6C,mBAA7C,CAAkE,mBAAlE,CAAuF,eAAvF,CACC,WADD,CACc,UADd,CAAD,CAEF,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+BC,CAA/B,CAA4CC,CAA5C,CAA0DC,CAA1D,CAAoEC,CAApE,CAA0EC,CAA1E,CAA6E,CAEzE,aASA,GAAIC,CAAAA,CAAc,CAAG,SAASC,CAAT,CAAoB,CACrC,KAAKA,SAAL,CAAiBA,CAAjB,CACA,KAAKC,IAAL,EACH,CAHD,CASAF,CAAc,CAACG,SAAf,CAAyBC,KAAzB,CAAiC,IAAjC,CAMAJ,CAAc,CAACG,SAAf,CAAyBF,SAAzB,CAAqC,CAAC,CAAtC,CAMAD,CAAc,CAACG,SAAf,CAAyBE,cAAzB,CAA0C,IAA1C,CAMAL,CAAc,CAACG,SAAf,CAAyBG,QAAzB,CAAoC,CAChCC,MAAM,CAAE,4BADwB,CAEhCC,IAAI,CAAE,gCAF0B,CAApC,CAUAR,CAAc,CAACG,SAAf,CAAyBD,IAAzB,CAAgC,UAAW,CAEvCV,CAAC,CAAC,KAAKc,QAAL,CAAcC,MAAf,CAAD,CAAwBE,EAAxB,CAA2B,OAA3B,CAAoC,SAASC,CAAT,CAAY,CAC5CA,CAAC,CAACC,cAAF,GACA,KAAKN,cAAL,CAAsBb,CAAC,CAACkB,CAAC,CAACE,aAAH,CAAvB,CACA,GAAIC,CAAAA,CAAI,CAAGrB,CAAC,CAACkB,CAAC,CAACE,aAAH,CAAD,CAAmBE,IAAnB,CAAwB,MAAxB,CAAX,CACIC,CAAQ,CAAGF,CAAI,CAACG,KAAL,CAAWH,CAAI,CAACI,OAAL,CAAa,GAAb,EAAoB,CAA/B,CADf,CAEA,KAAKC,aAAL,CAAmBH,CAAnB,CACH,CANmC,CAMlCI,IANkC,CAM7B,IAN6B,CAApC,EASA3B,CAAC,CAAC,KAAKc,QAAL,CAAcE,IAAf,CAAD,CAAsBC,EAAtB,CAAyB,OAAzB,CAAkC,SAASC,CAAT,CAAY,CAC1CA,CAAC,CAACC,cAAF,GACA,KAAKN,cAAL,CAAsBb,CAAC,CAACkB,CAAC,CAACE,aAAH,CAAvB,CACA,GAAIQ,CAAAA,CAAI,CAAG5B,CAAC,CAACkB,CAAC,CAACE,aAAH,CAAD,CAAmBS,OAAnB,CAA2B,MAA3B,CAAX,CACA,GAAID,CAAI,CAACE,IAAL,CAAU,kDAAV,EAA4DC,MAAhE,CAAwE,CACpE,GAAIR,CAAAA,CAAQ,CAAGK,CAAI,CAACI,SAAL,EAAf,CACA,KAAKN,aAAL,CAAmBH,CAAnB,CACH,CAHD,IAGO,CACHtB,CAAG,CAACgC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,QAAN,CADY,CAEZ,CAACA,GAAG,CAAE,uBAAN,CAA+BC,SAAS,CAAE,aAA1C,CAFY,CAGZ,CAACD,GAAG,CAAE,IAAN,CAHY,CAAhB,EAIGE,IAJH,CAIQ,SAASC,CAAT,CAAkB,CACtBjC,CAAY,CAACkC,KAAb,CAAmBD,CAAO,CAAC,CAAD,CAA1B,CAA+BA,CAAO,CAAC,CAAD,CAAtC,CAA2CA,CAAO,CAAC,CAAD,CAAlD,CAEH,CAPD,EAOGE,IAPH,CAOQnC,CAAY,CAACoC,SAPrB,CAQH,CACJ,CAjBiC,CAiBhCb,IAjBgC,CAiB3B,IAjB2B,CAAlC,CAkBH,CA7BD,CAoCAnB,CAAc,CAACG,SAAf,CAAyBe,aAAzB,CAAyC,SAASH,CAAT,CAAmB,CAGxD,OAFIkB,CAAAA,CAEJ,CADIC,CAAM,CAAGnB,CAAQ,CAACoB,KAAT,CAAe,GAAf,CACb,CAASC,CAAC,CAAG,CAAb,CACQC,CADR,CAAgBD,CAAC,CAAGF,CAAM,CAACX,MAA3B,CAAmCa,CAAC,EAApC,CAAwC,CAChCC,CADgC,CACzBH,CAAM,CAACE,CAAD,CAAN,CAAUD,KAAV,CAAgB,GAAhB,CADyB,CAEpC,GAAe,QAAX,EAAAE,CAAI,CAAC,CAAD,CAAR,CAAyB,CACrBJ,CAAM,CAAGI,CAAI,CAAC,CAAD,CAChB,CACJ,CAED5C,CAAG,CAACgC,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,uBAAN,CAA+BC,SAAS,CAAE,aAA1C,CADY,CAEZ,CAACD,GAAG,CAAE,mBAAN,CAA2BC,SAAS,CAAE,aAAtC,CAFY,CAGZ,CAACD,GAAG,CAAE,uBAAN,CAA+BC,SAAS,CAAE,aAA1C,CAHY,CAIZ,CAACD,GAAG,CAAE,kBAAN,CAA0BC,SAAS,CAAE,aAArC,CAJY,CAKZ,CAACD,GAAG,CAAE,wBAAN,CAAgCC,SAAS,CAAE,aAA3C,CALY,CAMZ,CAACD,GAAG,CAAE,kBAAN,CAA0BC,SAAS,CAAE,aAArC,CANY,CAAhB,EAOGC,IAPH,CAOQ,SAASC,CAAT,CAAkB,IAClBS,CAAAA,CADkB,CAElBC,CAFkB,CAGtB,GAAc,QAAV,EAAAN,CAAJ,CAAwB,CACpBK,CAAK,CAAGT,CAAO,CAAC,CAAD,CAAf,CACAU,CAAQ,CAAGV,CAAO,CAAC,CAAD,CACrB,CAHD,IAGO,IAAc,QAAV,EAAAI,CAAJ,CAAwB,CAC3BK,CAAK,CAAGT,CAAO,CAAC,CAAD,CAAf,CACAU,CAAQ,CAAGV,CAAO,CAAC,CAAD,CACrB,CAHM,IAGA,IAAc,SAAV,EAAAI,CAAJ,CAAyB,CAC5BK,CAAK,CAAGT,CAAO,CAAC,CAAD,CAAf,CACAU,CAAQ,CAAGV,CAAO,CAAC,CAAD,CACrB,CAED,MAAOnC,CAAAA,CAAY,CAAC8C,MAAb,CAAoB,CACvBC,IAAI,CAAE/C,CAAY,CAACgD,KAAb,CAAmBC,WADF,CAEvBL,KAAK,CAAEA,CAFgB,CAGvBM,IAAI,CAAE,EAHiB,CAApB,EAIJC,IAJI,CAIC,SAASzC,CAAT,CAAgB,CACpB,KAAKA,KAAL,CAAaA,CAAb,CACA,KAAK0C,cAAL,CAAoB/B,CAApB,CAA8BwB,CAA9B,CACH,CAHO,CAGNpB,IAHM,CAGD,IAHC,CAJD,CAQV,CAtBO,CAsBNA,IAtBM,CAsBD,IAtBC,CAPR,EA8BK4B,KA9BL,CA8BWnD,CAAY,CAACoC,SA9BxB,CA+BH,CAzCD,CAiDAhC,CAAc,CAACG,SAAf,CAAyB2C,cAAzB,CAA0C,SAAS/B,CAAT,CAAmBwB,CAAnB,CAA6B,CACnE,GAAInC,CAAAA,CAAK,CAAG,KAAKA,KAAjB,CAEAA,CAAK,CAAC4C,QAAN,GAEA5C,CAAK,CAAC6C,iBAAN,CAAwBV,CAAxB,EAGAnC,CAAK,CAAC8C,OAAN,GAAgBzC,EAAhB,CAAmBd,CAAW,CAACwD,MAA/B,CAAuC,KAAKC,OAAL,CAAajC,IAAb,CAAkB,IAAlB,CAAvC,EAEAf,CAAK,CAACiD,OAAN,CAAc,KAAKC,OAAL,CAAavC,CAAb,CAAd,EAIAX,CAAK,CAAC8C,OAAN,GAAgBzC,EAAhB,CAAmBd,CAAW,CAAC4D,IAA/B,CAAqC,KAAKC,UAAL,CAAgBrC,IAAhB,CAAqB,IAArB,CAArC,EAEAf,CAAK,CAAC8C,OAAN,GAAgBzC,EAAhB,CAAmB,QAAnB,CAA6B,MAA7B,CAAqC,KAAKgD,cAAL,CAAoBtC,IAApB,CAAyB,IAAzB,CAArC,EAEAf,CAAK,CAACsD,IAAN,EACH,CAnBD,CA6BA1D,CAAc,CAACG,SAAf,CAAyBmD,OAAzB,CAAmC,SAASvC,CAAT,CAAmB,CAClD,GAAwB,WAApB,QAAOA,CAAAA,CAAX,CAAqC,CACjCA,CAAQ,CAAG,EACd,CAED,GAAImB,CAAAA,CAAM,CAAG,CAACyB,YAAY,CAAEC,IAAI,CAACC,SAAL,CAAe9C,CAAf,CAAf,CAAb,CACA,MAAOlB,CAAAA,CAAQ,CAACiE,YAAT,CAAsB,aAAtB,CAAqC,kBAArC,CAAyD,KAAK7D,SAA9D,CAAyEiC,CAAzE,CACV,CAPD,CAgBAlC,CAAc,CAACG,SAAf,CAAyBsD,cAAzB,CAA0C,SAAS/C,CAAT,CAAY,CAElDA,CAAC,CAACC,cAAF,GAFkD,GAK9CI,CAAAA,CAAQ,CAAG,KAAKX,KAAL,CAAW8C,OAAX,GAAqB5B,IAArB,CAA0B,MAA1B,EAAkCE,SAAlC,EALmC,CAO9CuC,CAAQ,CAAGjE,CAAI,CAACkE,IAAL,CAAU,CAAC,CACtBC,UAAU,CAAE,qCADU,CAEtBC,IAAI,CAAE,CAACP,YAAY,CAAEC,IAAI,CAACC,SAAL,CAAe9C,CAAf,CAAf,CAFgB,CAAD,CAAV,CAPmC,CAWlDgD,CAAQ,CAAC,CAAD,CAAR,CAAYlB,IAAZ,CAAiB,SAASsB,CAAT,CAAe,CAC5B,GAAIA,CAAI,CAACC,gBAAT,CAA2B,CACvB,KAAKhE,KAAL,CAAWiD,OAAX,CAAmB,KAAKC,OAAL,CAAavC,CAAb,CAAnB,CACH,CAFD,IAEO,CACH,KAAKsD,KAAL,EACH,CACJ,CANgB,CAMflD,IANe,CAMV,IANU,CAAjB,EAMcY,IANd,CAMmBnC,CAAY,CAACoC,SANhC,CAOH,CAlBD,CA2BAhC,CAAc,CAACG,SAAf,CAAyBqD,UAAzB,CAAsC,SAAS9C,CAAT,CAAY,CAC9CA,CAAC,CAACC,cAAF,GACA,KAAKP,KAAL,CAAW8C,OAAX,GAAqB5B,IAArB,CAA0B,MAA1B,EAAkCgD,MAAlC,EACH,CAHD,CAQAtE,CAAc,CAACG,SAAf,CAAyBkE,KAAzB,CAAiC,UAAW,CACxC,KAAKjB,OAAL,GACAmB,QAAQ,CAACC,QAAT,CAAkBC,MAAlB,EACH,CAHD,CAQAzE,CAAc,CAACG,SAAf,CAAyBiD,OAAzB,CAAmC,UAAW,CAC1CrD,CAAC,CAAC2E,GAAF,CAAM,+BAAN,CAAuC,UAAW,CAC9CC,CAAC,CAACC,sBAAF,CAAyBC,sBAAzB,EACH,CAFD,EAGA,KAAKzE,KAAL,CAAWgD,OAAX,GACA,KAAK/C,cAAL,CAAoByE,KAApB,EACH,CAND,CAQA,MAAoD,CAShDC,WAAW,CAAE,qBAAS9E,CAAT,CAAoB,CAC7B,MAAO,IAAID,CAAAA,CAAJ,CAAmBC,CAAnB,CACV,CAX+C,CAavD,CApPC,CAAN","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 .\n\n/**\n * Add policy consent modal to the page\n *\n * @module tool_policy/acceptmodal\n * @class AcceptOnBehalf\n * @copyright 2018 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/notification', 'core/fragment',\n 'core/ajax', 'core/yui'],\n function($, Str, ModalFactory, ModalEvents, Notification, Fragment, Ajax, Y) {\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 ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n title: title,\n body: ''\n }).done(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 Y.use('moodle-core-formchangechecker', function() {\n M.core_formchangechecker.reset_form_dirty_state();\n });\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"],"file":"acceptmodal.min.js"} \ No newline at end of file diff --git a/admin/tool/policy/amd/build/managedocsactions.min.js.map b/admin/tool/policy/amd/build/managedocsactions.min.js.map index 171cecce05b..0c08443570d 100644 --- a/admin/tool/policy/amd/build/managedocsactions.min.js.map +++ b/admin/tool/policy/amd/build/managedocsactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/managedocsactions.js"],"names":["define","$","Log","Config","Str","ModalFactory","ModalEvents","ACTION","LINKS","MAKE_CURRENT","INACTIVATE","DELETE","ManageDocsActions","base","initEvents","prototype","self","on","e","stopPropagation","link","currentTarget","promise","strings","is","get_strings","key","component","param","name","closest","attr","revision","error","preventDefault","then","strs","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","save","window","location","href","sesskey","hidden","destroy","show","catch","init","baseid","document","getElementById","length","Error"],"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 .\n\n/**\n * Adds support for confirmation via JS modal for some management actions at the Manage policies page.\n *\n * @module tool_policy/managedocsactions\n * @package tool_policy\n * @copyright 2018 David Mudrák \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/log',\n 'core/config',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'\n], function($, Log, Config, Str, ModalFactory, ModalEvents) {\n\n \"use strict\";\n\n /**\n * List of action selectors.\n *\n * @property {string} LINKS - Selector for all action links\n * @property {string} MAKE_CURRENT\n */\n var ACTION = {\n LINKS: '[data-action]',\n MAKE_CURRENT: '[data-action=\"makecurrent\"]',\n INACTIVATE: '[data-action=\"inactivate\"]',\n DELETE: '[data-action=\"delete\"]'\n };\n\n /**\n * @constructor\n * @param {Element} base - Management area wrapping element\n */\n function ManageDocsActions(base) {\n this.base = base;\n\n this.initEvents();\n }\n\n /**\n * Register event listeners.\n */\n ManageDocsActions.prototype.initEvents = function() {\n var self = this;\n\n self.base.on('click', ACTION.LINKS, function(e) {\n e.stopPropagation();\n\n var link = $(e.currentTarget);\n var promise;\n var strings;\n\n if (link.is(ACTION.MAKE_CURRENT)) {\n promise = Str.get_strings([\n {key: 'activating', component: 'tool_policy'},\n {key: 'activateconfirm', component: 'tool_policy', param: {\n name: link.closest('[data-policy-name]').attr('data-policy-name'),\n revision: link.closest('[data-policy-revision]').attr('data-policy-revision')\n }},\n {key: 'activateconfirmyes', component: 'tool_policy'}\n ]);\n\n } else if (link.is(ACTION.INACTIVATE)) {\n promise = Str.get_strings([\n {key: 'inactivating', component: 'tool_policy'},\n {key: 'inactivatingconfirm', component: 'tool_policy', param: {\n name: link.closest('[data-policy-name]').attr('data-policy-name'),\n revision: link.closest('[data-policy-revision]').attr('data-policy-revision')\n }},\n {key: 'inactivatingconfirmyes', component: 'tool_policy'}\n ]);\n\n } else if (link.is(ACTION.DELETE)) {\n promise = Str.get_strings([\n {key: 'deleting', component: 'tool_policy'},\n {key: 'deleteconfirm', component: 'tool_policy', param: {\n name: link.closest('[data-policy-name]').attr('data-policy-name'),\n revision: link.closest('[data-policy-revision]').attr('data-policy-revision')\n }},\n {key: 'delete', component: 'core'}\n ]);\n\n } else {\n Log.error('unknown action type detected', 'tool_policy/managedocsactions');\n return;\n }\n\n e.preventDefault();\n\n promise.then(function(strs) {\n strings = strs;\n return ModalFactory.create({\n title: strings[0],\n body: strings[1],\n type: ModalFactory.types.SAVE_CANCEL\n });\n\n }).then(function(modal) {\n modal.setSaveButtonText(strings[2]);\n modal.getRoot().on(ModalEvents.save, function() {\n window.location.href = link.attr('href') + '&sesskey=' + Config.sesskey + '&confirm=1';\n });\n\n modal.getRoot().on(ModalEvents.hidden, function() {\n modal.destroy();\n });\n\n modal.show();\n return true;\n\n }).catch(function(e) {\n Log.error(e);\n return false;\n });\n });\n };\n\n return {\n /**\n * Factory method returning instance of the ManageDocsActions\n *\n * @param {String} baseid - ID of the management area wrapping element\n * @return {ManageDocsActions}\n */\n init: function(baseid) {\n var base = $(document.getElementById(baseid));\n\n if (base.length) {\n return new ManageDocsActions(base);\n\n } else {\n throw new Error(\"managedocsactions: Invalid base element identifier\");\n }\n }\n };\n});\n"],"file":"managedocsactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/managedocsactions.js"],"names":["define","$","Log","Config","Str","ModalFactory","ModalEvents","ACTION","LINKS","MAKE_CURRENT","INACTIVATE","DELETE","ManageDocsActions","base","initEvents","prototype","self","on","e","stopPropagation","link","currentTarget","promise","strings","is","get_strings","key","component","param","name","closest","attr","revision","error","preventDefault","then","strs","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","save","window","location","href","sesskey","hidden","destroy","show","catch","init","baseid","document","getElementById","length","Error"],"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 .\n\n/**\n * Adds support for confirmation via JS modal for some management actions at the Manage policies page.\n *\n * @module tool_policy/managedocsactions\n * @copyright 2018 David Mudrák \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/log',\n 'core/config',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events'\n], function($, Log, Config, Str, ModalFactory, ModalEvents) {\n\n \"use strict\";\n\n /**\n * List of action selectors.\n *\n * @property {string} LINKS - Selector for all action links\n * @property {string} MAKE_CURRENT\n */\n var ACTION = {\n LINKS: '[data-action]',\n MAKE_CURRENT: '[data-action=\"makecurrent\"]',\n INACTIVATE: '[data-action=\"inactivate\"]',\n DELETE: '[data-action=\"delete\"]'\n };\n\n /**\n * @constructor\n * @param {Element} base - Management area wrapping element\n */\n function ManageDocsActions(base) {\n this.base = base;\n\n this.initEvents();\n }\n\n /**\n * Register event listeners.\n */\n ManageDocsActions.prototype.initEvents = function() {\n var self = this;\n\n self.base.on('click', ACTION.LINKS, function(e) {\n e.stopPropagation();\n\n var link = $(e.currentTarget);\n var promise;\n var strings;\n\n if (link.is(ACTION.MAKE_CURRENT)) {\n promise = Str.get_strings([\n {key: 'activating', component: 'tool_policy'},\n {key: 'activateconfirm', component: 'tool_policy', param: {\n name: link.closest('[data-policy-name]').attr('data-policy-name'),\n revision: link.closest('[data-policy-revision]').attr('data-policy-revision')\n }},\n {key: 'activateconfirmyes', component: 'tool_policy'}\n ]);\n\n } else if (link.is(ACTION.INACTIVATE)) {\n promise = Str.get_strings([\n {key: 'inactivating', component: 'tool_policy'},\n {key: 'inactivatingconfirm', component: 'tool_policy', param: {\n name: link.closest('[data-policy-name]').attr('data-policy-name'),\n revision: link.closest('[data-policy-revision]').attr('data-policy-revision')\n }},\n {key: 'inactivatingconfirmyes', component: 'tool_policy'}\n ]);\n\n } else if (link.is(ACTION.DELETE)) {\n promise = Str.get_strings([\n {key: 'deleting', component: 'tool_policy'},\n {key: 'deleteconfirm', component: 'tool_policy', param: {\n name: link.closest('[data-policy-name]').attr('data-policy-name'),\n revision: link.closest('[data-policy-revision]').attr('data-policy-revision')\n }},\n {key: 'delete', component: 'core'}\n ]);\n\n } else {\n Log.error('unknown action type detected', 'tool_policy/managedocsactions');\n return;\n }\n\n e.preventDefault();\n\n promise.then(function(strs) {\n strings = strs;\n return ModalFactory.create({\n title: strings[0],\n body: strings[1],\n type: ModalFactory.types.SAVE_CANCEL\n });\n\n }).then(function(modal) {\n modal.setSaveButtonText(strings[2]);\n modal.getRoot().on(ModalEvents.save, function() {\n window.location.href = link.attr('href') + '&sesskey=' + Config.sesskey + '&confirm=1';\n });\n\n modal.getRoot().on(ModalEvents.hidden, function() {\n modal.destroy();\n });\n\n modal.show();\n return true;\n\n }).catch(function(e) {\n Log.error(e);\n return false;\n });\n });\n };\n\n return {\n /**\n * Factory method returning instance of the ManageDocsActions\n *\n * @param {String} baseid - ID of the management area wrapping element\n * @return {ManageDocsActions}\n */\n init: function(baseid) {\n var base = $(document.getElementById(baseid));\n\n if (base.length) {\n return new ManageDocsActions(base);\n\n } else {\n throw new Error(\"managedocsactions: Invalid base element identifier\");\n }\n }\n };\n});\n"],"file":"managedocsactions.min.js"} \ No newline at end of file diff --git a/admin/tool/policy/amd/build/policyactions.min.js.map b/admin/tool/policy/amd/build/policyactions.min.js.map index 0b8ba40f77c..7c9a1e2b698 100644 --- a/admin/tool/policy/amd/build/policyactions.min.js.map +++ b/admin/tool/policy/amd/build/policyactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/policyactions.js"],"names":["define","$","Ajax","Notification","ModalFactory","ModalEvents","PolicyActions","root","registerEvents","prototype","on","e","preventDefault","versionid","data","behalfid","modalTitle","Deferred","modalBody","modal","create","title","body","large","then","getRoot","hidden","destroy","show","catch","exception","promises","call","methodname","args","when","result","policy","resolve","name","content","Error","warnings","message","hide","addNotification","type"],"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 .\n\n/**\n * Policy actions.\n *\n * @module tool_policy/policyactions\n * @package tool_policy\n * @copyright 2018 Sara Arjona (sara@moodle.com)\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, ModalFactory, ModalEvents) {\n\n /**\n * PolicyActions class.\n */\n var PolicyActions = function(root) {\n this.registerEvents(root);\n };\n\n /**\n * Register event listeners.\n */\n PolicyActions.prototype.registerEvents = function(root) {\n root.on(\"click\", function(e) {\n e.preventDefault();\n\n var versionid = $(this).data('versionid');\n var behalfid = $(this).data('behalfid');\n\n var params = {\n 'versionid': versionid,\n 'behalfid': behalfid\n };\n\n var request = {\n methodname: 'tool_policy_get_policy_version',\n args: params\n };\n\n var modalTitle = $.Deferred();\n var modalBody = $.Deferred();\n\n var modal = ModalFactory.create({\n title: modalTitle,\n body: modalBody,\n large: true\n })\n .then(function(modal) {\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n })\n .then(function(modal) {\n modal.show();\n\n return modal;\n })\n .catch(Notification.exception);\n\n // Make the request now that the modal is configured.\n var promises = Ajax.call([request]);\n $.when(promises[0]).then(function(data) {\n if (data.result.policy) {\n modalTitle.resolve(data.result.policy.name);\n modalBody.resolve(data.result.policy.content);\n\n return data;\n } else {\n throw new Error(data.warnings[0].message);\n }\n }).catch(function(message) {\n modal.then(function(modal) {\n modal.hide();\n modal.destroy();\n\n return modal;\n })\n .catch(Notification.exception);\n\n return Notification.addNotification({\n message: message,\n type: 'error'\n });\n });\n });\n\n };\n\n return /** @alias module:tool_policy/policyactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the actions helper.\n *\n * @method init\n * @return {PolicyActions}\n */\n 'init': function(root) {\n root = $(root);\n return new PolicyActions(root);\n }\n };\n});\n"],"file":"policyactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/policyactions.js"],"names":["define","$","Ajax","Notification","ModalFactory","ModalEvents","PolicyActions","root","registerEvents","prototype","on","e","preventDefault","versionid","data","behalfid","modalTitle","Deferred","modalBody","modal","create","title","body","large","then","getRoot","hidden","destroy","show","catch","exception","promises","call","methodname","args","when","result","policy","resolve","name","content","Error","warnings","message","hide","addNotification","type"],"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 .\n\n/**\n * Policy actions.\n *\n * @module tool_policy/policyactions\n * @copyright 2018 Sara Arjona (sara@moodle.com)\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, ModalFactory, ModalEvents) {\n\n /**\n * PolicyActions class.\n */\n var PolicyActions = function(root) {\n this.registerEvents(root);\n };\n\n /**\n * Register event listeners.\n */\n PolicyActions.prototype.registerEvents = function(root) {\n root.on(\"click\", function(e) {\n e.preventDefault();\n\n var versionid = $(this).data('versionid');\n var behalfid = $(this).data('behalfid');\n\n var params = {\n 'versionid': versionid,\n 'behalfid': behalfid\n };\n\n var request = {\n methodname: 'tool_policy_get_policy_version',\n args: params\n };\n\n var modalTitle = $.Deferred();\n var modalBody = $.Deferred();\n\n var modal = ModalFactory.create({\n title: modalTitle,\n body: modalBody,\n large: true\n })\n .then(function(modal) {\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n return modal;\n })\n .then(function(modal) {\n modal.show();\n\n return modal;\n })\n .catch(Notification.exception);\n\n // Make the request now that the modal is configured.\n var promises = Ajax.call([request]);\n $.when(promises[0]).then(function(data) {\n if (data.result.policy) {\n modalTitle.resolve(data.result.policy.name);\n modalBody.resolve(data.result.policy.content);\n\n return data;\n } else {\n throw new Error(data.warnings[0].message);\n }\n }).catch(function(message) {\n modal.then(function(modal) {\n modal.hide();\n modal.destroy();\n\n return modal;\n })\n .catch(Notification.exception);\n\n return Notification.addNotification({\n message: message,\n type: 'error'\n });\n });\n });\n\n };\n\n return /** @alias module:tool_policy/policyactions */ {\n // Public variables and functions.\n\n /**\n * Initialise the actions helper.\n *\n * @method init\n * @return {PolicyActions}\n */\n 'init': function(root) {\n root = $(root);\n return new PolicyActions(root);\n }\n };\n});\n"],"file":"policyactions.min.js"} \ No newline at end of file diff --git a/admin/tool/policy/amd/src/acceptances_filter.js b/admin/tool/policy/amd/src/acceptances_filter.js index b02c64b4b2c..65de016b52b 100644 --- a/admin/tool/policy/amd/src/acceptances_filter.js +++ b/admin/tool/policy/amd/src/acceptances_filter.js @@ -17,7 +17,6 @@ * Unified filter page JS module for the course participants page. * * @module tool_policy/acceptances_filter - * @package tool_policy * @copyright 2017 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/policy/amd/src/acceptances_filter_datasource.js b/admin/tool/policy/amd/src/acceptances_filter_datasource.js index 94ad9d95b1c..f4cd8928393 100644 --- a/admin/tool/policy/amd/src/acceptances_filter_datasource.js +++ b/admin/tool/policy/amd/src/acceptances_filter_datasource.js @@ -18,7 +18,6 @@ * * This module is compatible with core/form-autocomplete. * - * @package tool_policy * @copyright 2017 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/policy/amd/src/acceptmodal.js b/admin/tool/policy/amd/src/acceptmodal.js index ce123463561..254ac1abc02 100644 --- a/admin/tool/policy/amd/src/acceptmodal.js +++ b/admin/tool/policy/amd/src/acceptmodal.js @@ -18,7 +18,6 @@ * * @module tool_policy/acceptmodal * @class AcceptOnBehalf - * @package tool_policy * @copyright 2018 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/policy/amd/src/managedocsactions.js b/admin/tool/policy/amd/src/managedocsactions.js index 972299d1fb4..162905f892f 100644 --- a/admin/tool/policy/amd/src/managedocsactions.js +++ b/admin/tool/policy/amd/src/managedocsactions.js @@ -17,7 +17,6 @@ * Adds support for confirmation via JS modal for some management actions at the Manage policies page. * * @module tool_policy/managedocsactions - * @package tool_policy * @copyright 2018 David Mudrák * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/policy/amd/src/policyactions.js b/admin/tool/policy/amd/src/policyactions.js index d8cd0f2bd91..eead0a81470 100644 --- a/admin/tool/policy/amd/src/policyactions.js +++ b/admin/tool/policy/amd/src/policyactions.js @@ -17,7 +17,6 @@ * Policy actions. * * @module tool_policy/policyactions - * @package tool_policy * @copyright 2018 Sara Arjona (sara@moodle.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/templatelibrary/amd/build/display.min.js.map b/admin/tool/templatelibrary/amd/build/display.min.js.map index abaf4bd984d..636d5d0692c 100644 --- a/admin/tool/templatelibrary/amd/build/display.min.js.map +++ b/admin/tool/templatelibrary/amd/build/display.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/display.js"],"names":["define","$","ajax","log","notification","templates","config","str","findDocsSection","templateSource","templateName","marker","i","sections","match","length","section","start","indexOf","offset","substr","templateLoaded","source","originalSource","get_string","done","s","text","fail","exception","docs","example","context","rawJSON","trim","parseJSON","e","debug","render","html","js","replaceNodeContents","loadTemplate","parts","split","component","shift","name","join","promises","call","methodname","args","template","themename","theme","includecomments","when","apply","on","templatename","data","preventDefault"],"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 .\n\n/**\n * This module adds ajax display functions to the template library page.\n *\n * @module tool_templatelibrary/display\n * @package tool_templatelibrary\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates', 'core/config', 'core/str'],\n function($, ajax, log, notification, templates, config, str) {\n\n /**\n * Search through a template for a template docs comment.\n *\n * @param {String} templateSource The raw template\n * @param {String} templateName The name of the template used to search for docs tag\n * @return {String|boolean} the correct comment or false\n */\n var findDocsSection = function(templateSource, templateName) {\n\n if (!templateSource) {\n return false;\n }\n // Find the comment section marked with @template component/template.\n var marker = \"@template \" + templateName,\n i = 0,\n sections = [];\n\n sections = templateSource.match(/{{!([\\s\\S]*?)}}/g);\n\n // If no sections match - show the entire file.\n if (sections !== null) {\n for (i = 0; i < sections.length; i++) {\n var section = sections[i];\n var start = section.indexOf(marker);\n if (start !== -1) {\n // Remove {{! and }} from start and end.\n var offset = start + marker.length + 1;\n section = section.substr(offset, section.length - 2 - offset);\n return section;\n }\n }\n }\n // No matching comment.\n return false;\n };\n\n /**\n * Handle a template loaded response.\n *\n * @param {String} templateName The template name\n * @param {String} source The template source\n * @param {String} originalSource The original template source (not theme overridden)\n */\n var templateLoaded = function(templateName, source, originalSource) {\n str.get_string('templateselected', 'tool_templatelibrary', templateName).done(function(s) {\n $('[data-region=\"displaytemplateheader\"]').text(s);\n }).fail(notification.exception);\n\n // Find the comment section marked with @template component/template.\n var docs = findDocsSection(source, templateName);\n\n if (docs === false) {\n // Docs was not in theme template, try original.\n docs = findDocsSection(originalSource, templateName);\n }\n\n // If we found a docs section, limit the template library to showing this section.\n if (docs) {\n source = docs;\n }\n\n $('[data-region=\"displaytemplatesource\"]').text(source);\n\n // Now search the text for a json example.\n\n var example = source.match(/Example context \\(json\\):([\\s\\S]*)/);\n var context = false;\n if (example) {\n var rawJSON = example[1].trim();\n try {\n context = $.parseJSON(rawJSON);\n } catch (e) {\n log.debug('Could not parse json example context for template.');\n log.debug(e);\n }\n }\n if (context) {\n templates.render(templateName, context).done(function(html, js) {\n templates.replaceNodeContents($('[data-region=\"displaytemplateexample\"]'), html, js);\n }).fail(notification.exception);\n } else {\n str.get_string('templatehasnoexample', 'tool_templatelibrary').done(function(s) {\n $('[data-region=\"displaytemplateexample\"]').text(s);\n }).fail(notification.exception);\n }\n };\n\n /**\n * Load the a template source from Moodle.\n *\n * @param {String} templateName\n */\n var loadTemplate = function(templateName) {\n var parts = templateName.split('/');\n var component = parts.shift();\n var name = parts.join('/');\n\n var promises = ajax.call([{\n methodname: 'core_output_load_template',\n args: {\n component: component,\n template: name,\n themename: config.theme,\n includecomments: true\n }\n }, {\n methodname: 'tool_templatelibrary_load_canonical_template',\n args: {\n component: component,\n template: name\n }\n }], true, false);\n\n // When returns a new promise that is resolved when all the passed in promises are resolved.\n // The arguments to the done become the values of each resolved promise.\n $.when.apply($, promises)\n .done(function(source, originalSource) {\n templateLoaded(templateName, source, originalSource);\n })\n .fail(notification.exception);\n };\n\n // Add the event listeners.\n $('[data-region=\"list-templates\"]').on('click', '[data-templatename]', function(e) {\n var templatename = $(this).data('templatename');\n e.preventDefault();\n loadTemplate(templatename);\n });\n\n // This module does not expose anything.\n return {};\n});\n"],"file":"display.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/display.js"],"names":["define","$","ajax","log","notification","templates","config","str","findDocsSection","templateSource","templateName","marker","i","sections","match","length","section","start","indexOf","offset","substr","templateLoaded","source","originalSource","get_string","done","s","text","fail","exception","docs","example","context","rawJSON","trim","parseJSON","e","debug","render","html","js","replaceNodeContents","loadTemplate","parts","split","component","shift","name","join","promises","call","methodname","args","template","themename","theme","includecomments","when","apply","on","templatename","data","preventDefault"],"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 .\n\n/**\n * This module adds ajax display functions to the template library page.\n *\n * @module tool_templatelibrary/display\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates', 'core/config', 'core/str'],\n function($, ajax, log, notification, templates, config, str) {\n\n /**\n * Search through a template for a template docs comment.\n *\n * @param {String} templateSource The raw template\n * @param {String} templateName The name of the template used to search for docs tag\n * @return {String|boolean} the correct comment or false\n */\n var findDocsSection = function(templateSource, templateName) {\n\n if (!templateSource) {\n return false;\n }\n // Find the comment section marked with @template component/template.\n var marker = \"@template \" + templateName,\n i = 0,\n sections = [];\n\n sections = templateSource.match(/{{!([\\s\\S]*?)}}/g);\n\n // If no sections match - show the entire file.\n if (sections !== null) {\n for (i = 0; i < sections.length; i++) {\n var section = sections[i];\n var start = section.indexOf(marker);\n if (start !== -1) {\n // Remove {{! and }} from start and end.\n var offset = start + marker.length + 1;\n section = section.substr(offset, section.length - 2 - offset);\n return section;\n }\n }\n }\n // No matching comment.\n return false;\n };\n\n /**\n * Handle a template loaded response.\n *\n * @param {String} templateName The template name\n * @param {String} source The template source\n * @param {String} originalSource The original template source (not theme overridden)\n */\n var templateLoaded = function(templateName, source, originalSource) {\n str.get_string('templateselected', 'tool_templatelibrary', templateName).done(function(s) {\n $('[data-region=\"displaytemplateheader\"]').text(s);\n }).fail(notification.exception);\n\n // Find the comment section marked with @template component/template.\n var docs = findDocsSection(source, templateName);\n\n if (docs === false) {\n // Docs was not in theme template, try original.\n docs = findDocsSection(originalSource, templateName);\n }\n\n // If we found a docs section, limit the template library to showing this section.\n if (docs) {\n source = docs;\n }\n\n $('[data-region=\"displaytemplatesource\"]').text(source);\n\n // Now search the text for a json example.\n\n var example = source.match(/Example context \\(json\\):([\\s\\S]*)/);\n var context = false;\n if (example) {\n var rawJSON = example[1].trim();\n try {\n context = $.parseJSON(rawJSON);\n } catch (e) {\n log.debug('Could not parse json example context for template.');\n log.debug(e);\n }\n }\n if (context) {\n templates.render(templateName, context).done(function(html, js) {\n templates.replaceNodeContents($('[data-region=\"displaytemplateexample\"]'), html, js);\n }).fail(notification.exception);\n } else {\n str.get_string('templatehasnoexample', 'tool_templatelibrary').done(function(s) {\n $('[data-region=\"displaytemplateexample\"]').text(s);\n }).fail(notification.exception);\n }\n };\n\n /**\n * Load the a template source from Moodle.\n *\n * @param {String} templateName\n */\n var loadTemplate = function(templateName) {\n var parts = templateName.split('/');\n var component = parts.shift();\n var name = parts.join('/');\n\n var promises = ajax.call([{\n methodname: 'core_output_load_template',\n args: {\n component: component,\n template: name,\n themename: config.theme,\n includecomments: true\n }\n }, {\n methodname: 'tool_templatelibrary_load_canonical_template',\n args: {\n component: component,\n template: name\n }\n }], true, false);\n\n // When returns a new promise that is resolved when all the passed in promises are resolved.\n // The arguments to the done become the values of each resolved promise.\n $.when.apply($, promises)\n .done(function(source, originalSource) {\n templateLoaded(templateName, source, originalSource);\n })\n .fail(notification.exception);\n };\n\n // Add the event listeners.\n $('[data-region=\"list-templates\"]').on('click', '[data-templatename]', function(e) {\n var templatename = $(this).data('templatename');\n e.preventDefault();\n loadTemplate(templatename);\n });\n\n // This module does not expose anything.\n return {};\n});\n"],"file":"display.min.js"} \ No newline at end of file diff --git a/admin/tool/templatelibrary/amd/build/search.min.js.map b/admin/tool/templatelibrary/amd/build/search.min.js.map index c16fd851e1d..7d606eaf503 100644 --- a/admin/tool/templatelibrary/amd/build/search.min.js.map +++ b/admin/tool/templatelibrary/amd/build/search.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/search.js"],"names":["define","$","ajax","log","notification","templates","config","reloadListTemplate","templateList","render","done","result","js","replaceNode","fail","exception","refreshSearch","themename","componentStr","val","searchStr","removeClass","addClass","call","methodname","args","component","search","throttle","queueRefresh","callback","delay","window","clearTimeout","setTimeout","changeHandler","bind","theme","on"],"mappings":"AAuBAA,OAAM,+BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CAAyD,gBAAzD,CAA2E,aAA3E,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqCC,CAArC,CAAgDC,CAAhD,CAAwD,IAQvDC,CAAAA,CAAkB,CAAG,SAASC,CAAT,CAAuB,CAC5CH,CAAS,CAACI,MAAV,CAAiB,qCAAjB,CAAwD,CAACJ,SAAS,CAAEG,CAAZ,CAAxD,EACKE,IADL,CACU,SAASC,CAAT,CAAiBC,CAAjB,CAAqB,CACvBP,CAAS,CAACQ,WAAV,CAAsBZ,CAAC,CAAC,iCAAD,CAAvB,CAA0DU,CAA1D,CAAkEC,CAAlE,CACH,CAHL,EAGOE,IAHP,CAGYV,CAAY,CAACW,SAHzB,CAIH,CAb0D,CAqBvDC,CAAa,CAAG,SAASC,CAAT,CAAoB,IAChCC,CAAAA,CAAY,CAAGjB,CAAC,CAAC,4BAAD,CAAD,CAA8BkB,GAA9B,EADiB,CAEhCC,CAAS,CAAGnB,CAAC,CAAC,0DAAD,CAAD,CAA0DkB,GAA1D,EAFoB,CAIpC,GAAkB,EAAd,GAAAC,CAAJ,CAAsB,CAClBnB,CAAC,CAAC,gEAAD,CAAD,CAAgEoB,WAAhE,CAA4E,QAA5E,CACH,CAFD,IAEO,CACHpB,CAAC,CAAC,gEAAD,CAAD,CAAgEqB,QAAhE,CAAyE,QAAzE,CACH,CAGDpB,CAAI,CAACqB,IAAL,CAAU,CACN,CAACC,UAAU,CAAE,qCAAb,CACEC,IAAI,CAAE,CAACC,SAAS,CAAER,CAAZ,CAA0BS,MAAM,CAAEP,CAAlC,CAA6CH,SAAS,CAAEA,CAAxD,CADR,CAEEP,IAAI,CAAEH,CAFR,CAGEO,IAAI,CAAEV,CAAY,CAACW,SAHrB,CADM,CAAV,OAMH,CAtC0D,CAwCvDa,CAAQ,CAAG,IAxC4C,CAkDvDC,CAAY,CAAG,SAASC,CAAT,CAAmBC,CAAnB,CAA0B,CACzC,GAAiB,IAAb,GAAAH,CAAJ,CAAuB,CACnBI,MAAM,CAACC,YAAP,CAAoBL,CAApB,CACH,CAEDA,CAAQ,CAAGI,MAAM,CAACE,UAAP,CAAkB,UAAW,CACpCJ,CAAQ,GACRF,CAAQ,CAAG,IACd,CAHU,CAGRG,CAHQ,CAId,CA3D0D,CA6DvDI,CAAa,CAAG,UAAW,CAC3BN,CAAY,CAACb,CAAa,CAACoB,IAAd,CAAmB,IAAnB,CAAyB9B,CAAM,CAAC+B,KAAhC,CAAD,CAAyC,GAAzC,CACf,CA/D0D,CAiE3DpC,CAAC,CAAC,kCAAD,CAAD,CAAoCqC,EAApC,CAAuC,QAAvC,CAAiD,4BAAjD,CAA6EH,CAA7E,EACAlC,CAAC,CAAC,kCAAD,CAAD,CAAoCqC,EAApC,CAAuC,OAAvC,CAAgD,yBAAhD,CAAyEH,CAAzE,EACAlC,CAAC,CAAC,+BAAD,CAAD,CAAiCqC,EAAjC,CAAoC,OAApC,CAA6C,UAAW,CACpDrC,CAAC,CAAC,yBAAD,CAAD,CAA2BkB,GAA3B,CAA+B,EAA/B,EACAH,CAAa,CAACV,CAAM,CAAC+B,KAAR,CAAb,CACApC,CAAC,CAAC,IAAD,CAAD,CAAQqB,QAAR,CAAiB,QAAjB,CACH,CAJD,EAMAN,CAAa,CAACV,CAAM,CAAC+B,KAAR,CAAb,CACA,MAAO,EACV,CA5EK,CAAN","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 .\n\n/**\n * This module adds ajax search functions to the template library page.\n *\n * @module tool_templatelibrary/search\n * @package tool_templatelibrary\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates', 'core/config'],\n function($, ajax, log, notification, templates, config) {\n\n /**\n * The ajax call has returned with a new list of templates.\n *\n * @method reloadListTemplate\n * @param {String[]} templateList List of template ids.\n */\n var reloadListTemplate = function(templateList) {\n templates.render('tool_templatelibrary/search_results', {templates: templateList})\n .done(function(result, js) {\n templates.replaceNode($('[data-region=\"searchresults\"]'), result, js);\n }).fail(notification.exception);\n };\n\n /**\n * Get the current values for the form inputs and refresh the list of matching templates.\n *\n * @method refreshSearch\n * @param {String} themename The naeme of the theme.\n */\n var refreshSearch = function(themename) {\n var componentStr = $('[data-field=\"component\"]').val();\n var searchStr = $('[data-region=\"list-templates\"] [data-region=\"input\"]').val();\n\n if (searchStr !== '') {\n $('[data-region=\"list-templates\"] [data-action=\"clearsearch\"]').removeClass('d-none');\n } else {\n $('[data-region=\"list-templates\"] [data-action=\"clearsearch\"]').addClass('d-none');\n }\n\n // Trigger the search.\n ajax.call([\n {methodname: 'tool_templatelibrary_list_templates',\n args: {component: componentStr, search: searchStr, themename: themename},\n done: reloadListTemplate,\n fail: notification.exception}\n ], true, false);\n };\n\n var throttle = null;\n\n /**\n * Call the specified function after a delay. If this function is called again before the function is executed,\n * the function will only be executed once.\n *\n * @method queueRefresh\n * @param {function} callback\n * @param {Number} delay The time in milliseconds to delay.\n */\n var queueRefresh = function(callback, delay) {\n if (throttle !== null) {\n window.clearTimeout(throttle);\n }\n\n throttle = window.setTimeout(function() {\n callback();\n throttle = null;\n }, delay);\n };\n\n var changeHandler = function() {\n queueRefresh(refreshSearch.bind(this, config.theme), 400);\n };\n // Add change handlers to refresh the list.\n $('[data-region=\"list-templates\"]').on('change', '[data-field=\"component\"]', changeHandler);\n $('[data-region=\"list-templates\"]').on('input', '[data-region=\"input\"]', changeHandler);\n $('[data-action=\"clearsearch\"]').on('click', function() {\n $('[data-region=\"input\"]').val('');\n refreshSearch(config.theme);\n $(this).addClass('d-none');\n });\n\n refreshSearch(config.theme);\n return {};\n});\n"],"file":"search.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/search.js"],"names":["define","$","ajax","log","notification","templates","config","reloadListTemplate","templateList","render","done","result","js","replaceNode","fail","exception","refreshSearch","themename","componentStr","val","searchStr","removeClass","addClass","call","methodname","args","component","search","throttle","queueRefresh","callback","delay","window","clearTimeout","setTimeout","changeHandler","bind","theme","on"],"mappings":"AAsBAA,OAAM,+BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CAAyD,gBAAzD,CAA2E,aAA3E,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqCC,CAArC,CAAgDC,CAAhD,CAAwD,IAQvDC,CAAAA,CAAkB,CAAG,SAASC,CAAT,CAAuB,CAC5CH,CAAS,CAACI,MAAV,CAAiB,qCAAjB,CAAwD,CAACJ,SAAS,CAAEG,CAAZ,CAAxD,EACKE,IADL,CACU,SAASC,CAAT,CAAiBC,CAAjB,CAAqB,CACvBP,CAAS,CAACQ,WAAV,CAAsBZ,CAAC,CAAC,iCAAD,CAAvB,CAA0DU,CAA1D,CAAkEC,CAAlE,CACH,CAHL,EAGOE,IAHP,CAGYV,CAAY,CAACW,SAHzB,CAIH,CAb0D,CAqBvDC,CAAa,CAAG,SAASC,CAAT,CAAoB,IAChCC,CAAAA,CAAY,CAAGjB,CAAC,CAAC,4BAAD,CAAD,CAA8BkB,GAA9B,EADiB,CAEhCC,CAAS,CAAGnB,CAAC,CAAC,0DAAD,CAAD,CAA0DkB,GAA1D,EAFoB,CAIpC,GAAkB,EAAd,GAAAC,CAAJ,CAAsB,CAClBnB,CAAC,CAAC,gEAAD,CAAD,CAAgEoB,WAAhE,CAA4E,QAA5E,CACH,CAFD,IAEO,CACHpB,CAAC,CAAC,gEAAD,CAAD,CAAgEqB,QAAhE,CAAyE,QAAzE,CACH,CAGDpB,CAAI,CAACqB,IAAL,CAAU,CACN,CAACC,UAAU,CAAE,qCAAb,CACEC,IAAI,CAAE,CAACC,SAAS,CAAER,CAAZ,CAA0BS,MAAM,CAAEP,CAAlC,CAA6CH,SAAS,CAAEA,CAAxD,CADR,CAEEP,IAAI,CAAEH,CAFR,CAGEO,IAAI,CAAEV,CAAY,CAACW,SAHrB,CADM,CAAV,OAMH,CAtC0D,CAwCvDa,CAAQ,CAAG,IAxC4C,CAkDvDC,CAAY,CAAG,SAASC,CAAT,CAAmBC,CAAnB,CAA0B,CACzC,GAAiB,IAAb,GAAAH,CAAJ,CAAuB,CACnBI,MAAM,CAACC,YAAP,CAAoBL,CAApB,CACH,CAEDA,CAAQ,CAAGI,MAAM,CAACE,UAAP,CAAkB,UAAW,CACpCJ,CAAQ,GACRF,CAAQ,CAAG,IACd,CAHU,CAGRG,CAHQ,CAId,CA3D0D,CA6DvDI,CAAa,CAAG,UAAW,CAC3BN,CAAY,CAACb,CAAa,CAACoB,IAAd,CAAmB,IAAnB,CAAyB9B,CAAM,CAAC+B,KAAhC,CAAD,CAAyC,GAAzC,CACf,CA/D0D,CAiE3DpC,CAAC,CAAC,kCAAD,CAAD,CAAoCqC,EAApC,CAAuC,QAAvC,CAAiD,4BAAjD,CAA6EH,CAA7E,EACAlC,CAAC,CAAC,kCAAD,CAAD,CAAoCqC,EAApC,CAAuC,OAAvC,CAAgD,yBAAhD,CAAyEH,CAAzE,EACAlC,CAAC,CAAC,+BAAD,CAAD,CAAiCqC,EAAjC,CAAoC,OAApC,CAA6C,UAAW,CACpDrC,CAAC,CAAC,yBAAD,CAAD,CAA2BkB,GAA3B,CAA+B,EAA/B,EACAH,CAAa,CAACV,CAAM,CAAC+B,KAAR,CAAb,CACApC,CAAC,CAAC,IAAD,CAAD,CAAQqB,QAAR,CAAiB,QAAjB,CACH,CAJD,EAMAN,CAAa,CAACV,CAAM,CAAC+B,KAAR,CAAb,CACA,MAAO,EACV,CA5EK,CAAN","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 .\n\n/**\n * This module adds ajax search functions to the template library page.\n *\n * @module tool_templatelibrary/search\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates', 'core/config'],\n function($, ajax, log, notification, templates, config) {\n\n /**\n * The ajax call has returned with a new list of templates.\n *\n * @method reloadListTemplate\n * @param {String[]} templateList List of template ids.\n */\n var reloadListTemplate = function(templateList) {\n templates.render('tool_templatelibrary/search_results', {templates: templateList})\n .done(function(result, js) {\n templates.replaceNode($('[data-region=\"searchresults\"]'), result, js);\n }).fail(notification.exception);\n };\n\n /**\n * Get the current values for the form inputs and refresh the list of matching templates.\n *\n * @method refreshSearch\n * @param {String} themename The naeme of the theme.\n */\n var refreshSearch = function(themename) {\n var componentStr = $('[data-field=\"component\"]').val();\n var searchStr = $('[data-region=\"list-templates\"] [data-region=\"input\"]').val();\n\n if (searchStr !== '') {\n $('[data-region=\"list-templates\"] [data-action=\"clearsearch\"]').removeClass('d-none');\n } else {\n $('[data-region=\"list-templates\"] [data-action=\"clearsearch\"]').addClass('d-none');\n }\n\n // Trigger the search.\n ajax.call([\n {methodname: 'tool_templatelibrary_list_templates',\n args: {component: componentStr, search: searchStr, themename: themename},\n done: reloadListTemplate,\n fail: notification.exception}\n ], true, false);\n };\n\n var throttle = null;\n\n /**\n * Call the specified function after a delay. If this function is called again before the function is executed,\n * the function will only be executed once.\n *\n * @method queueRefresh\n * @param {function} callback\n * @param {Number} delay The time in milliseconds to delay.\n */\n var queueRefresh = function(callback, delay) {\n if (throttle !== null) {\n window.clearTimeout(throttle);\n }\n\n throttle = window.setTimeout(function() {\n callback();\n throttle = null;\n }, delay);\n };\n\n var changeHandler = function() {\n queueRefresh(refreshSearch.bind(this, config.theme), 400);\n };\n // Add change handlers to refresh the list.\n $('[data-region=\"list-templates\"]').on('change', '[data-field=\"component\"]', changeHandler);\n $('[data-region=\"list-templates\"]').on('input', '[data-region=\"input\"]', changeHandler);\n $('[data-action=\"clearsearch\"]').on('click', function() {\n $('[data-region=\"input\"]').val('');\n refreshSearch(config.theme);\n $(this).addClass('d-none');\n });\n\n refreshSearch(config.theme);\n return {};\n});\n"],"file":"search.min.js"} \ No newline at end of file diff --git a/admin/tool/templatelibrary/amd/src/display.js b/admin/tool/templatelibrary/amd/src/display.js index 222e4bdd44b..d6f0fe3682b 100644 --- a/admin/tool/templatelibrary/amd/src/display.js +++ b/admin/tool/templatelibrary/amd/src/display.js @@ -17,7 +17,6 @@ * This module adds ajax display functions to the template library page. * * @module tool_templatelibrary/display - * @package tool_templatelibrary * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/templatelibrary/amd/src/search.js b/admin/tool/templatelibrary/amd/src/search.js index 1865457d91c..a67e5f6a14c 100644 --- a/admin/tool/templatelibrary/amd/src/search.js +++ b/admin/tool/templatelibrary/amd/src/search.js @@ -17,7 +17,6 @@ * This module adds ajax search functions to the template library page. * * @module tool_templatelibrary/search - * @package tool_templatelibrary * @copyright 2015 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/usertours/amd/build/filter_cssselector.min.js.map b/admin/tool/usertours/amd/build/filter_cssselector.min.js.map index 9ea27cad215..f570cef73cf 100644 --- a/admin/tool/usertours/amd/build/filter_cssselector.min.js.map +++ b/admin/tool/usertours/amd/build/filter_cssselector.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/filter_cssselector.js"],"names":["filterMatches","tourConfig","filterValues","filtervalues","cssselector","document","querySelector"],"mappings":"yKA+B6B,QAAhBA,CAAAA,aAAgB,CAASC,CAAT,CAAqB,CAC9C,GAAIC,CAAAA,CAAY,CAAGD,CAAU,CAACE,YAAX,CAAwBC,WAA3C,CACA,GAAIF,CAAY,CAAC,CAAD,CAAhB,CAAqB,CACjB,MAAO,CAAC,CAACG,QAAQ,CAACC,aAAT,CAAuBJ,CAAY,CAAC,CAAD,CAAnC,CACZ,CAED,QACH,C","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 .\n\n/**\n * CSS selector client side filter.\n *\n * @module tool_usertours/filter_cssselector\n * @class filter_cssselector\n * @package tool_usertours\n * @copyright 2020 The Open University\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Checks whether the configured CSS selector exists on this page.\n *\n * @param {array} tourConfig The tour configuration.\n * @returns {boolean}\n */\nexport const filterMatches = function(tourConfig) {\n let filterValues = tourConfig.filtervalues.cssselector;\n if (filterValues[0]) {\n return !!document.querySelector(filterValues[0]);\n }\n // If there is no CSS selector configured, this page matches.\n return true;\n};\n"],"file":"filter_cssselector.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/filter_cssselector.js"],"names":["filterMatches","tourConfig","filterValues","filtervalues","cssselector","document","querySelector"],"mappings":"yKA8B6B,QAAhBA,CAAAA,aAAgB,CAASC,CAAT,CAAqB,CAC9C,GAAIC,CAAAA,CAAY,CAAGD,CAAU,CAACE,YAAX,CAAwBC,WAA3C,CACA,GAAIF,CAAY,CAAC,CAAD,CAAhB,CAAqB,CACjB,MAAO,CAAC,CAACG,QAAQ,CAACC,aAAT,CAAuBJ,CAAY,CAAC,CAAD,CAAnC,CACZ,CAED,QACH,C","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 .\n\n/**\n * CSS selector client side filter.\n *\n * @module tool_usertours/filter_cssselector\n * @class filter_cssselector\n * @copyright 2020 The Open University\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Checks whether the configured CSS selector exists on this page.\n *\n * @param {array} tourConfig The tour configuration.\n * @returns {boolean}\n */\nexport const filterMatches = function(tourConfig) {\n let filterValues = tourConfig.filtervalues.cssselector;\n if (filterValues[0]) {\n return !!document.querySelector(filterValues[0]);\n }\n // If there is no CSS selector configured, this page matches.\n return true;\n};\n"],"file":"filter_cssselector.min.js"} \ No newline at end of file diff --git a/admin/tool/usertours/amd/build/managesteps.min.js.map b/admin/tool/usertours/amd/build/managesteps.min.js.map index 84e5f29afe1..44dc09e4f63 100644 --- a/admin/tool/usertours/amd/build/managesteps.min.js.map +++ b/admin/tool/usertours/amd/build/managesteps.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/managesteps.js"],"names":["define","$","str","notification","manager","removeStep","e","preventDefault","targetUrl","currentTarget","attr","get_strings","key","component","then","s","confirm","window","location","catch","setup","delegate"],"mappings":"AAQAA,OAAM,8BACN,CAAC,QAAD,CAAW,UAAX,CAAuB,mBAAvB,CADM,CAEN,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+B,CAC3B,GAAIC,CAAAA,CAAO,CAAG,CAOVC,UAAU,CAAE,oBAASC,CAAT,CAAY,CACpBA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAS,CAAGP,CAAC,CAACK,CAAC,CAACG,aAAH,CAAD,CAAmBC,IAAnB,CAAwB,MAAxB,CAAhB,CACAR,CAAG,CAACS,WAAJ,CAAgB,CACZ,CACIC,GAAG,CAAS,yBADhB,CAEIC,SAAS,CAAG,gBAFhB,CADY,CAKZ,CACID,GAAG,CAAS,4BADhB,CAEIC,SAAS,CAAG,gBAFhB,CALY,CASZ,CACID,GAAG,CAAS,KADhB,CAEIC,SAAS,CAAG,QAFhB,CATY,CAaZ,CACID,GAAG,CAAS,IADhB,CAEIC,SAAS,CAAG,QAFhB,CAbY,CAAhB,EAkBCC,IAlBD,CAkBM,SAASC,CAAT,CAAY,CACdZ,CAAY,CAACa,OAAb,CAAqBD,CAAC,CAAC,CAAD,CAAtB,CAA2BA,CAAC,CAAC,CAAD,CAA5B,CAAiCA,CAAC,CAAC,CAAD,CAAlC,CAAuCA,CAAC,CAAC,CAAD,CAAxC,CAA6C,UAAW,CACpDE,MAAM,CAACC,QAAP,CAAkBV,CACrB,CAFD,CAKH,CAxBD,EAyBCW,KAzBD,EA0BH,CApCS,CA2CVC,KAAK,CAAE,gBAAW,CAEdnB,CAAC,CAAC,MAAD,CAAD,CAAUoB,QAAV,CAAmB,0BAAnB,CAA6C,OAA7C,CAAsDjB,CAAO,CAACC,UAA9D,CACH,CA9CS,CAAd,CAiDA,MAAuD,CAMnDe,KAAK,CAAEhB,CAAO,CAACgB,KANoC,CAQ1D,CA5DK,CAAN","sourcesContent":["/**\n * Step management code.\n *\n * @module tool_usertours/managesteps\n * @class managesteps\n * @package tool_usertours\n * @copyright 2016 Andrew Nicols \n */\ndefine(\n['jquery', 'core/str', 'core/notification'],\nfunction($, str, notification) {\n var manager = {\n /**\n * Confirm removal of the specified step.\n *\n * @method removeStep\n * @param {EventFacade} e The EventFacade\n */\n removeStep: function(e) {\n e.preventDefault();\n var targetUrl = $(e.currentTarget).attr('href');\n str.get_strings([\n {\n key: 'confirmstepremovaltitle',\n component: 'tool_usertours'\n },\n {\n key: 'confirmstepremovalquestion',\n component: 'tool_usertours'\n },\n {\n key: 'yes',\n component: 'moodle'\n },\n {\n key: 'no',\n component: 'moodle'\n }\n ])\n .then(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location = targetUrl;\n });\n\n return;\n })\n .catch();\n },\n\n /**\n * Setup the step management UI.\n *\n * @method setup\n */\n setup: function() {\n\n $('body').delegate('[data-action=\"delete\"]', 'click', manager.removeStep);\n }\n };\n\n return /** @alias module:tool_usertours/managesteps */ {\n /**\n * Setup the step management UI.\n *\n * @method setup\n */\n setup: manager.setup\n };\n});\n"],"file":"managesteps.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/managesteps.js"],"names":["define","$","str","notification","manager","removeStep","e","preventDefault","targetUrl","currentTarget","attr","get_strings","key","component","then","s","confirm","window","location","catch","setup","delegate"],"mappings":"AAOAA,OAAM,8BACN,CAAC,QAAD,CAAW,UAAX,CAAuB,mBAAvB,CADM,CAEN,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+B,CAC3B,GAAIC,CAAAA,CAAO,CAAG,CAOVC,UAAU,CAAE,oBAASC,CAAT,CAAY,CACpBA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAS,CAAGP,CAAC,CAACK,CAAC,CAACG,aAAH,CAAD,CAAmBC,IAAnB,CAAwB,MAAxB,CAAhB,CACAR,CAAG,CAACS,WAAJ,CAAgB,CACZ,CACIC,GAAG,CAAS,yBADhB,CAEIC,SAAS,CAAG,gBAFhB,CADY,CAKZ,CACID,GAAG,CAAS,4BADhB,CAEIC,SAAS,CAAG,gBAFhB,CALY,CASZ,CACID,GAAG,CAAS,KADhB,CAEIC,SAAS,CAAG,QAFhB,CATY,CAaZ,CACID,GAAG,CAAS,IADhB,CAEIC,SAAS,CAAG,QAFhB,CAbY,CAAhB,EAkBCC,IAlBD,CAkBM,SAASC,CAAT,CAAY,CACdZ,CAAY,CAACa,OAAb,CAAqBD,CAAC,CAAC,CAAD,CAAtB,CAA2BA,CAAC,CAAC,CAAD,CAA5B,CAAiCA,CAAC,CAAC,CAAD,CAAlC,CAAuCA,CAAC,CAAC,CAAD,CAAxC,CAA6C,UAAW,CACpDE,MAAM,CAACC,QAAP,CAAkBV,CACrB,CAFD,CAKH,CAxBD,EAyBCW,KAzBD,EA0BH,CApCS,CA2CVC,KAAK,CAAE,gBAAW,CAEdnB,CAAC,CAAC,MAAD,CAAD,CAAUoB,QAAV,CAAmB,0BAAnB,CAA6C,OAA7C,CAAsDjB,CAAO,CAACC,UAA9D,CACH,CA9CS,CAAd,CAiDA,MAAuD,CAMnDe,KAAK,CAAEhB,CAAO,CAACgB,KANoC,CAQ1D,CA5DK,CAAN","sourcesContent":["/**\n * Step management code.\n *\n * @module tool_usertours/managesteps\n * @class managesteps\n * @copyright 2016 Andrew Nicols \n */\ndefine(\n['jquery', 'core/str', 'core/notification'],\nfunction($, str, notification) {\n var manager = {\n /**\n * Confirm removal of the specified step.\n *\n * @method removeStep\n * @param {EventFacade} e The EventFacade\n */\n removeStep: function(e) {\n e.preventDefault();\n var targetUrl = $(e.currentTarget).attr('href');\n str.get_strings([\n {\n key: 'confirmstepremovaltitle',\n component: 'tool_usertours'\n },\n {\n key: 'confirmstepremovalquestion',\n component: 'tool_usertours'\n },\n {\n key: 'yes',\n component: 'moodle'\n },\n {\n key: 'no',\n component: 'moodle'\n }\n ])\n .then(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location = targetUrl;\n });\n\n return;\n })\n .catch();\n },\n\n /**\n * Setup the step management UI.\n *\n * @method setup\n */\n setup: function() {\n\n $('body').delegate('[data-action=\"delete\"]', 'click', manager.removeStep);\n }\n };\n\n return /** @alias module:tool_usertours/managesteps */ {\n /**\n * Setup the step management UI.\n *\n * @method setup\n */\n setup: manager.setup\n };\n});\n"],"file":"managesteps.min.js"} \ No newline at end of file diff --git a/admin/tool/usertours/amd/build/managetours.min.js.map b/admin/tool/usertours/amd/build/managetours.min.js.map index 6fa4688c4c8..6d38641cf92 100644 --- a/admin/tool/usertours/amd/build/managetours.min.js.map +++ b/admin/tool/usertours/amd/build/managetours.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/managetours.js"],"names":["define","$","ajax","str","notification","manager","removeTour","e","preventDefault","targetUrl","currentTarget","attr","get_strings","key","component","then","s","confirm","window","location","catch","setup","delegate"],"mappings":"AAQAA,OAAM,8BACN,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CADM,CAEN,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqC,CACjC,GAAIC,CAAAA,CAAO,CAAG,CAOVC,UAAU,CAAE,oBAASC,CAAT,CAAY,CACpBA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAS,CAAGR,CAAC,CAACM,CAAC,CAACG,aAAH,CAAD,CAAmBC,IAAnB,CAAwB,MAAxB,CAAhB,CACAR,CAAG,CAACS,WAAJ,CAAgB,CACZ,CACIC,GAAG,CAAS,yBADhB,CAEIC,SAAS,CAAG,gBAFhB,CADY,CAKZ,CACID,GAAG,CAAS,4BADhB,CAEIC,SAAS,CAAG,gBAFhB,CALY,CASZ,CACID,GAAG,CAAS,KADhB,CAEIC,SAAS,CAAG,QAFhB,CATY,CAaZ,CACID,GAAG,CAAS,IADhB,CAEIC,SAAS,CAAG,QAFhB,CAbY,CAAhB,EAkBCC,IAlBD,CAkBM,SAASC,CAAT,CAAY,CACdZ,CAAY,CAACa,OAAb,CAAqBD,CAAC,CAAC,CAAD,CAAtB,CAA2BA,CAAC,CAAC,CAAD,CAA5B,CAAiCA,CAAC,CAAC,CAAD,CAAlC,CAAuCA,CAAC,CAAC,CAAD,CAAxC,CAA6C,UAAW,CACpDE,MAAM,CAACC,QAAP,CAAkBV,CACrB,CAFD,CAKH,CAxBD,EAyBCW,KAzBD,EA0BH,CApCS,CA2CVC,KAAK,CAAE,gBAAW,CACdpB,CAAC,CAAC,MAAD,CAAD,CAAUqB,QAAV,CAAmB,0BAAnB,CAA6C,OAA7C,CAAsDjB,CAAO,CAACC,UAA9D,CACH,CA7CS,CAAd,CAgDA,MAAuD,CAMnDe,KAAK,CAAEhB,CAAO,CAACgB,KANoC,CAQ1D,CA3DK,CAAN","sourcesContent":["/**\n * Tour management code.\n *\n * @module tool_usertours/managetours\n * @class managetours\n * @package tool_usertours\n * @copyright 2016 Andrew Nicols \n */\ndefine(\n['jquery', 'core/ajax', 'core/str', 'core/notification'],\nfunction($, ajax, str, notification) {\n var manager = {\n /**\n * Confirm removal of the specified tour.\n *\n * @method removeTour\n * @param {EventFacade} e The EventFacade\n */\n removeTour: function(e) {\n e.preventDefault();\n var targetUrl = $(e.currentTarget).attr('href');\n str.get_strings([\n {\n key: 'confirmtourremovaltitle',\n component: 'tool_usertours'\n },\n {\n key: 'confirmtourremovalquestion',\n component: 'tool_usertours'\n },\n {\n key: 'yes',\n component: 'moodle'\n },\n {\n key: 'no',\n component: 'moodle'\n }\n ])\n .then(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location = targetUrl;\n });\n\n return;\n })\n .catch();\n },\n\n /**\n * Setup the tour management UI.\n *\n * @method setup\n */\n setup: function() {\n $('body').delegate('[data-action=\"delete\"]', 'click', manager.removeTour);\n }\n };\n\n return /** @alias module:tool_usertours/managetours */ {\n /**\n * Setup the tour management UI.\n *\n * @method setup\n */\n setup: manager.setup\n };\n});\n"],"file":"managetours.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/managetours.js"],"names":["define","$","ajax","str","notification","manager","removeTour","e","preventDefault","targetUrl","currentTarget","attr","get_strings","key","component","then","s","confirm","window","location","catch","setup","delegate"],"mappings":"AAOAA,OAAM,8BACN,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CADM,CAEN,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqC,CACjC,GAAIC,CAAAA,CAAO,CAAG,CAOVC,UAAU,CAAE,oBAASC,CAAT,CAAY,CACpBA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAS,CAAGR,CAAC,CAACM,CAAC,CAACG,aAAH,CAAD,CAAmBC,IAAnB,CAAwB,MAAxB,CAAhB,CACAR,CAAG,CAACS,WAAJ,CAAgB,CACZ,CACIC,GAAG,CAAS,yBADhB,CAEIC,SAAS,CAAG,gBAFhB,CADY,CAKZ,CACID,GAAG,CAAS,4BADhB,CAEIC,SAAS,CAAG,gBAFhB,CALY,CASZ,CACID,GAAG,CAAS,KADhB,CAEIC,SAAS,CAAG,QAFhB,CATY,CAaZ,CACID,GAAG,CAAS,IADhB,CAEIC,SAAS,CAAG,QAFhB,CAbY,CAAhB,EAkBCC,IAlBD,CAkBM,SAASC,CAAT,CAAY,CACdZ,CAAY,CAACa,OAAb,CAAqBD,CAAC,CAAC,CAAD,CAAtB,CAA2BA,CAAC,CAAC,CAAD,CAA5B,CAAiCA,CAAC,CAAC,CAAD,CAAlC,CAAuCA,CAAC,CAAC,CAAD,CAAxC,CAA6C,UAAW,CACpDE,MAAM,CAACC,QAAP,CAAkBV,CACrB,CAFD,CAKH,CAxBD,EAyBCW,KAzBD,EA0BH,CApCS,CA2CVC,KAAK,CAAE,gBAAW,CACdpB,CAAC,CAAC,MAAD,CAAD,CAAUqB,QAAV,CAAmB,0BAAnB,CAA6C,OAA7C,CAAsDjB,CAAO,CAACC,UAA9D,CACH,CA7CS,CAAd,CAgDA,MAAuD,CAMnDe,KAAK,CAAEhB,CAAO,CAACgB,KANoC,CAQ1D,CA3DK,CAAN","sourcesContent":["/**\n * Tour management code.\n *\n * @module tool_usertours/managetours\n * @class managetours\n * @copyright 2016 Andrew Nicols \n */\ndefine(\n['jquery', 'core/ajax', 'core/str', 'core/notification'],\nfunction($, ajax, str, notification) {\n var manager = {\n /**\n * Confirm removal of the specified tour.\n *\n * @method removeTour\n * @param {EventFacade} e The EventFacade\n */\n removeTour: function(e) {\n e.preventDefault();\n var targetUrl = $(e.currentTarget).attr('href');\n str.get_strings([\n {\n key: 'confirmtourremovaltitle',\n component: 'tool_usertours'\n },\n {\n key: 'confirmtourremovalquestion',\n component: 'tool_usertours'\n },\n {\n key: 'yes',\n component: 'moodle'\n },\n {\n key: 'no',\n component: 'moodle'\n }\n ])\n .then(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location = targetUrl;\n });\n\n return;\n })\n .catch();\n },\n\n /**\n * Setup the tour management UI.\n *\n * @method setup\n */\n setup: function() {\n $('body').delegate('[data-action=\"delete\"]', 'click', manager.removeTour);\n }\n };\n\n return /** @alias module:tool_usertours/managetours */ {\n /**\n * Setup the tour management UI.\n *\n * @method setup\n */\n setup: manager.setup\n };\n});\n"],"file":"managetours.min.js"} \ No newline at end of file diff --git a/admin/tool/usertours/amd/build/usertours.min.js.map b/admin/tool/usertours/amd/build/usertours.min.js.map index c5cca213d1f..da8f0a0ed1b 100644 --- a/admin/tool/usertours/amd/build/usertours.min.js.map +++ b/admin/tool/usertours/amd/build/usertours.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/usertours.js"],"names":["define","ajax","BootstrapTour","$","templates","str","log","notification","usertours","tourId","currentTour","init","tourDetails","filters","requirements","req","length","require","matchingTour","key","tour","i","filter","arguments","filterMatches","startTour","fetchTour","addResetLink","on","e","preventDefault","resetTourState","M","util","js_pending","when","call","methodname","args","tourid","context","cfg","contextid","pageurl","window","location","href","render","then","response","template","hasOwnProperty","startBootstrapTour","tourconfig","always","js_complete","fail","exception","ele","html","js","appendNodeContents","tourConfig","onEnd","endTour","eventHandlers","afterEnd","markTourComplete","afterRender","markStepShown","tourName","name","steps","map","step","element","target","reflex","moveOnClick","content","body","stepConfig","getStepConfig","getCurrentStepNumber","stepid","stepindex","error"],"mappings":"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","sourcesContent":["/**\n * User tour control library.\n *\n * @module tool_usertours/usertours\n * @class usertours\n * @package tool_usertours\n * @copyright 2016 Andrew Nicols \n */\ndefine(\n['core/ajax', 'tool_usertours/tour', 'jquery', 'core/templates', 'core/str', 'core/log', 'core/notification'],\nfunction(ajax, BootstrapTour, $, templates, str, log, notification) {\n var usertours = {\n tourId: null,\n\n currentTour: null,\n\n /**\n * Initialise the user tour for the current page.\n *\n * @method init\n * @param {Array} tourDetails The matching tours for this page.\n * @param {Array} filters The names of all client side filters.\n */\n init: function(tourDetails, filters) {\n let requirements = [];\n for (var req = 0; req < filters.length; req++) {\n requirements[req] = 'tool_usertours/filter_' + filters[req];\n }\n require(requirements, function() {\n // Run the client side filters to find the first matching tour.\n let matchingTour = null;\n for (let key in tourDetails) {\n let tour = tourDetails[key];\n for (let i = 0; i < filters.length; i++) {\n let filter = arguments[i];\n if (filter.filterMatches(tour)) {\n matchingTour = tour;\n } else {\n // If any filter doesn't match, move on to the next tour.\n matchingTour = null;\n break;\n }\n }\n // If all filters matched then use this tour.\n if (matchingTour) {\n break;\n }\n }\n\n if (matchingTour === null) {\n return;\n }\n\n // Only one tour per page is allowed.\n usertours.tourId = matchingTour.tourId;\n\n let startTour = matchingTour.startTour;\n if (typeof startTour === 'undefined') {\n startTour = true;\n }\n\n if (startTour) {\n // Fetch the tour configuration.\n usertours.fetchTour(usertours.tourId);\n }\n\n usertours.addResetLink();\n // Watch for the reset link.\n $('body').on('click', '[data-action=\"tool_usertours/resetpagetour\"]', function(e) {\n e.preventDefault();\n usertours.resetTourState(usertours.tourId);\n });\n });\n },\n\n /**\n * Fetch the configuration specified tour, and start the tour when it has been fetched.\n *\n * @method fetchTour\n * @param {Number} tourId The ID of the tour to start.\n */\n fetchTour: function(tourId) {\n M.util.js_pending('admin_usertour_fetchTour' + tourId);\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_fetch_and_start_tour',\n args: {\n tourid: tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n }\n }\n ])[0],\n templates.render('tool_usertours/tourstep', {})\n )\n .then(function(response, template) {\n // If we don't have any tour config (because it doesn't need showing for the current user), return early.\n if (!response.hasOwnProperty('tourconfig')) {\n return;\n }\n\n return usertours.startBootstrapTour(tourId, template[0], response.tourconfig);\n })\n .always(function() {\n M.util.js_complete('admin_usertour_fetchTour' + tourId);\n\n return;\n })\n .fail(notification.exception);\n },\n\n /**\n * Add a reset link to the page.\n *\n * @method addResetLink\n */\n addResetLink: function() {\n var ele;\n M.util.js_pending('admin_usertour_addResetLink');\n\n // Append the link to the most suitable place on the page\n // with fallback to legacy selectors and finally the body\n // if there is no better place.\n if ($('.tool_usertours-resettourcontainer').length) {\n ele = $('.tool_usertours-resettourcontainer');\n } else if ($('.logininfo').length) {\n ele = $('.logininfo');\n } else if ($('footer').length) {\n ele = $('footer');\n } else {\n ele = $('body');\n }\n templates.render('tool_usertours/resettour', {})\n .then(function(html, js) {\n templates.appendNodeContents(ele, html, js);\n\n return;\n })\n .always(function() {\n M.util.js_complete('admin_usertour_addResetLink');\n\n return;\n })\n .fail();\n },\n\n /**\n * Start the specified tour.\n *\n * @method startBootstrapTour\n * @param {Number} tourId The ID of the tour to start.\n * @param {String} template The template to use.\n * @param {Object} tourConfig The tour configuration.\n * @return {Object}\n */\n startBootstrapTour: function(tourId, template, tourConfig) {\n if (usertours.currentTour) {\n // End the current tour, but disable end tour handler.\n tourConfig.onEnd = null;\n usertours.currentTour.endTour();\n delete usertours.currentTour;\n }\n\n // Normalize for the new library.\n tourConfig.eventHandlers = {\n afterEnd: [usertours.markTourComplete],\n afterRender: [usertours.markStepShown],\n };\n\n // Sort out the tour name.\n tourConfig.tourName = tourConfig.name;\n delete tourConfig.name;\n\n // Add the template to the configuration.\n // This enables translations of the buttons.\n tourConfig.template = template;\n\n tourConfig.steps = tourConfig.steps.map(function(step) {\n if (typeof step.element !== 'undefined') {\n step.target = step.element;\n delete step.element;\n }\n\n if (typeof step.reflex !== 'undefined') {\n step.moveOnClick = !!step.reflex;\n delete step.reflex;\n }\n\n if (typeof step.content !== 'undefined') {\n step.body = step.content;\n delete step.content;\n }\n\n return step;\n });\n\n usertours.currentTour = new BootstrapTour(tourConfig);\n return usertours.currentTour.startTour();\n },\n\n /**\n * Mark the specified step as being shownd by the user.\n *\n * @method markStepShown\n */\n markStepShown: function() {\n var stepConfig = this.getStepConfig(this.getCurrentStepNumber());\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_step_shown',\n args: {\n tourid: usertours.tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n stepid: stepConfig.stepid,\n stepindex: this.getCurrentStepNumber(),\n }\n }\n ])[0]\n ).fail(log.error);\n },\n\n /**\n * Mark the specified tour as being completed by the user.\n *\n * @method markTourComplete\n */\n markTourComplete: function() {\n var stepConfig = this.getStepConfig(this.getCurrentStepNumber());\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_complete_tour',\n args: {\n tourid: usertours.tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n stepid: stepConfig.stepid,\n stepindex: this.getCurrentStepNumber(),\n }\n }\n ])[0]\n ).fail(log.error);\n },\n\n /**\n * Reset the state, and restart the the tour on the current page.\n *\n * @method resetTourState\n * @param {Number} tourId The ID of the tour to start.\n */\n resetTourState: function(tourId) {\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_reset_tour',\n args: {\n tourid: tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n }\n }\n ])[0]\n ).then(function(response) {\n if (response.startTour) {\n usertours.fetchTour(response.startTour);\n }\n return;\n }).fail(notification.exception);\n }\n };\n\n return /** @alias module:tool_usertours/usertours */ {\n /**\n * Initialise the user tour for the current page.\n *\n * @method init\n * @param {Number} tourId The ID of the tour to start.\n * @param {Bool} startTour Attempt to start the tour now.\n */\n init: usertours.init,\n\n /**\n * Reset the state, and restart the the tour on the current page.\n *\n * @method resetTourState\n * @param {Number} tourId The ID of the tour to restart.\n */\n resetTourState: usertours.resetTourState\n };\n});\n"],"file":"usertours.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/usertours.js"],"names":["define","ajax","BootstrapTour","$","templates","str","log","notification","usertours","tourId","currentTour","init","tourDetails","filters","requirements","req","length","require","matchingTour","key","tour","i","filter","arguments","filterMatches","startTour","fetchTour","addResetLink","on","e","preventDefault","resetTourState","M","util","js_pending","when","call","methodname","args","tourid","context","cfg","contextid","pageurl","window","location","href","render","then","response","template","hasOwnProperty","startBootstrapTour","tourconfig","always","js_complete","fail","exception","ele","html","js","appendNodeContents","tourConfig","onEnd","endTour","eventHandlers","afterEnd","markTourComplete","afterRender","markStepShown","tourName","name","steps","map","step","element","target","reflex","moveOnClick","content","body","stepConfig","getStepConfig","getCurrentStepNumber","stepid","stepindex","error"],"mappings":"AAOAA,OAAM,4BACN,CAAC,WAAD,CAAc,qBAAd,CAAqC,QAArC,CAA+C,gBAA/C,CAAiE,UAAjE,CAA6E,UAA7E,CAAyF,mBAAzF,CADM,CAEN,SAASC,CAAT,CAAeC,CAAf,CAA8BC,CAA9B,CAAiCC,CAAjC,CAA4CC,CAA5C,CAAiDC,CAAjD,CAAsDC,CAAtD,CAAoE,CAChE,GAAIC,CAAAA,CAAS,CAAG,CACZC,MAAM,CAAE,IADI,CAGZC,WAAW,CAAE,IAHD,CAYZC,IAAI,CAAE,cAASC,CAAT,CAAsBC,CAAtB,CAA+B,CAEjC,OADIC,CAAAA,CAAY,CAAG,EACnB,CAASC,CAAG,CAAG,CAAf,CAAkBA,CAAG,CAAGF,CAAO,CAACG,MAAhC,CAAwCD,CAAG,EAA3C,CAA+C,CAC3CD,CAAY,CAACC,CAAD,CAAZ,CAAoB,yBAA2BF,CAAO,CAACE,CAAD,CACzD,CACDE,OAAO,CAACH,CAAD,CAAe,UAAW,CAE7B,GAAII,CAAAA,CAAY,CAAG,IAAnB,CACA,IAAK,GAAIC,CAAAA,CAAT,GAAgBP,CAAAA,CAAhB,CAA6B,CAEzB,OADIQ,CAAAA,CAAI,CAAGR,CAAW,CAACO,CAAD,CACtB,CAASE,CAAC,CAAG,CAAb,CACQC,CADR,CAAgBD,CAAC,CAAGR,CAAO,CAACG,MAA5B,CAAoCK,CAAC,EAArC,CAAyC,CACjCC,CADiC,CACxBC,SAAS,CAACF,CAAD,CADe,CAErC,GAAIC,CAAM,CAACE,aAAP,CAAqBJ,CAArB,CAAJ,CAAgC,CAC5BF,CAAY,CAAGE,CAClB,CAFD,IAEO,CAEHF,CAAY,CAAG,IAAf,CACA,KACH,CACJ,CAED,GAAIA,CAAJ,CAAkB,CACd,KACH,CACJ,CAED,GAAqB,IAAjB,GAAAA,CAAJ,CAA2B,CACvB,MACH,CAGDV,CAAS,CAACC,MAAV,CAAmBS,CAAY,CAACT,MAAhC,CAEA,GAAIgB,CAAAA,CAAS,CAAGP,CAAY,CAACO,SAA7B,CACA,GAAyB,WAArB,QAAOA,CAAAA,CAAX,CAAsC,CAClCA,CAAS,GACZ,CAED,GAAIA,CAAJ,CAAe,CAEXjB,CAAS,CAACkB,SAAV,CAAoBlB,CAAS,CAACC,MAA9B,CACH,CAEDD,CAAS,CAACmB,YAAV,GAEAxB,CAAC,CAAC,MAAD,CAAD,CAAUyB,EAAV,CAAa,OAAb,CAAsB,gDAAtB,CAAsE,SAASC,CAAT,CAAY,CAC9EA,CAAC,CAACC,cAAF,GACAtB,CAAS,CAACuB,cAAV,CAAyBvB,CAAS,CAACC,MAAnC,CACH,CAHD,CAIH,CA5CM,CA6CV,CA9DW,CAsEZiB,SAAS,CAAE,mBAASjB,CAAT,CAAiB,CACxBuB,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,2BAA6BzB,CAA/C,EACAN,CAAC,CAACgC,IAAF,CACIlC,CAAI,CAACmC,IAAL,CAAU,CACN,CACIC,UAAU,CAAE,qCADhB,CAEIC,IAAI,CAAE,CACFC,MAAM,CAAM9B,CADV,CAEF+B,OAAO,CAAKR,CAAC,CAACS,GAAF,CAAMC,SAFhB,CAGFC,OAAO,CAAKC,MAAM,CAACC,QAAP,CAAgBC,IAH1B,CAFV,CADM,CAAV,EASG,CATH,CADJ,CAWI1C,CAAS,CAAC2C,MAAV,CAAiB,yBAAjB,CAA4C,EAA5C,CAXJ,EAaCC,IAbD,CAaM,SAASC,CAAT,CAAmBC,CAAnB,CAA6B,CAE/B,GAAI,CAACD,CAAQ,CAACE,cAAT,CAAwB,YAAxB,CAAL,CAA4C,CACxC,MACH,CAED,MAAO3C,CAAAA,CAAS,CAAC4C,kBAAV,CAA6B3C,CAA7B,CAAqCyC,CAAQ,CAAC,CAAD,CAA7C,CAAkDD,CAAQ,CAACI,UAA3D,CACV,CApBD,EAqBCC,MArBD,CAqBQ,UAAW,CACftB,CAAC,CAACC,IAAF,CAAOsB,WAAP,CAAmB,2BAA6B9C,CAAhD,CAGH,CAzBD,EA0BC+C,IA1BD,CA0BMjD,CAAY,CAACkD,SA1BnB,CA2BH,CAnGW,CA0GZ9B,YAAY,CAAE,uBAAW,CACrB,GAAI+B,CAAAA,CAAJ,CACA1B,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,6BAAlB,EAKA,GAAI/B,CAAC,CAAC,oCAAD,CAAD,CAAwCa,MAA5C,CAAoD,CAChD0C,CAAG,CAAGvD,CAAC,CAAC,oCAAD,CACV,CAFD,IAEO,IAAIA,CAAC,CAAC,YAAD,CAAD,CAAgBa,MAApB,CAA4B,CAC/B0C,CAAG,CAAGvD,CAAC,CAAC,YAAD,CACV,CAFM,IAEA,IAAIA,CAAC,CAAC,QAAD,CAAD,CAAYa,MAAhB,CAAwB,CAC3B0C,CAAG,CAAGvD,CAAC,CAAC,QAAD,CACV,CAFM,IAEA,CACHuD,CAAG,CAAGvD,CAAC,CAAC,MAAD,CACV,CACDC,CAAS,CAAC2C,MAAV,CAAiB,0BAAjB,CAA6C,EAA7C,EACCC,IADD,CACM,SAASW,CAAT,CAAeC,CAAf,CAAmB,CACrBxD,CAAS,CAACyD,kBAAV,CAA6BH,CAA7B,CAAkCC,CAAlC,CAAwCC,CAAxC,CAGH,CALD,EAMCN,MAND,CAMQ,UAAW,CACftB,CAAC,CAACC,IAAF,CAAOsB,WAAP,CAAmB,6BAAnB,CAGH,CAVD,EAWCC,IAXD,EAYH,CAtIW,CAiJZJ,kBAAkB,CAAE,4BAAS3C,CAAT,CAAiByC,CAAjB,CAA2BY,CAA3B,CAAuC,CACvD,GAAItD,CAAS,CAACE,WAAd,CAA2B,CAEvBoD,CAAU,CAACC,KAAX,CAAmB,IAAnB,CACAvD,CAAS,CAACE,WAAV,CAAsBsD,OAAtB,GACA,MAAOxD,CAAAA,CAAS,CAACE,WACpB,CAGDoD,CAAU,CAACG,aAAX,CAA2B,CACvBC,QAAQ,CAAE,CAAC1D,CAAS,CAAC2D,gBAAX,CADa,CAEvBC,WAAW,CAAE,CAAC5D,CAAS,CAAC6D,aAAX,CAFU,CAA3B,CAMAP,CAAU,CAACQ,QAAX,CAAsBR,CAAU,CAACS,IAAjC,CACA,MAAOT,CAAAA,CAAU,CAACS,IAAlB,CAIAT,CAAU,CAACZ,QAAX,CAAsBA,CAAtB,CAEAY,CAAU,CAACU,KAAX,CAAmBV,CAAU,CAACU,KAAX,CAAiBC,GAAjB,CAAqB,SAASC,CAAT,CAAe,CACnD,GAA4B,WAAxB,QAAOA,CAAAA,CAAI,CAACC,OAAhB,CAAyC,CACrCD,CAAI,CAACE,MAAL,CAAcF,CAAI,CAACC,OAAnB,CACA,MAAOD,CAAAA,CAAI,CAACC,OACf,CAED,GAA2B,WAAvB,QAAOD,CAAAA,CAAI,CAACG,MAAhB,CAAwC,CACpCH,CAAI,CAACI,WAAL,CAAmB,CAAC,CAACJ,CAAI,CAACG,MAA1B,CACA,MAAOH,CAAAA,CAAI,CAACG,MACf,CAED,GAA4B,WAAxB,QAAOH,CAAAA,CAAI,CAACK,OAAhB,CAAyC,CACrCL,CAAI,CAACM,IAAL,CAAYN,CAAI,CAACK,OAAjB,CACA,MAAOL,CAAAA,CAAI,CAACK,OACf,CAED,MAAOL,CAAAA,CACV,CAjBkB,CAAnB,CAmBAlE,CAAS,CAACE,WAAV,CAAwB,GAAIR,CAAAA,CAAJ,CAAkB4D,CAAlB,CAAxB,CACA,MAAOtD,CAAAA,CAAS,CAACE,WAAV,CAAsBe,SAAtB,EACV,CA5LW,CAmMZ4C,aAAa,CAAE,wBAAW,CACtB,GAAIY,CAAAA,CAAU,CAAG,KAAKC,aAAL,CAAmB,KAAKC,oBAAL,EAAnB,CAAjB,CACAhF,CAAC,CAACgC,IAAF,CACIlC,CAAI,CAACmC,IAAL,CAAU,CACN,CACIC,UAAU,CAAE,2BADhB,CAEIC,IAAI,CAAE,CACFC,MAAM,CAAM/B,CAAS,CAACC,MADpB,CAEF+B,OAAO,CAAKR,CAAC,CAACS,GAAF,CAAMC,SAFhB,CAGFC,OAAO,CAAKC,MAAM,CAACC,QAAP,CAAgBC,IAH1B,CAIFsC,MAAM,CAAMH,CAAU,CAACG,MAJrB,CAKFC,SAAS,CAAG,KAAKF,oBAAL,EALV,CAFV,CADM,CAAV,EAWG,CAXH,CADJ,EAaE3B,IAbF,CAaOlD,CAAG,CAACgF,KAbX,CAcH,CAnNW,CA0NZnB,gBAAgB,CAAE,2BAAW,CACzB,GAAIc,CAAAA,CAAU,CAAG,KAAKC,aAAL,CAAmB,KAAKC,oBAAL,EAAnB,CAAjB,CACAhF,CAAC,CAACgC,IAAF,CACIlC,CAAI,CAACmC,IAAL,CAAU,CACN,CACIC,UAAU,CAAE,8BADhB,CAEIC,IAAI,CAAE,CACFC,MAAM,CAAM/B,CAAS,CAACC,MADpB,CAEF+B,OAAO,CAAKR,CAAC,CAACS,GAAF,CAAMC,SAFhB,CAGFC,OAAO,CAAKC,MAAM,CAACC,QAAP,CAAgBC,IAH1B,CAIFsC,MAAM,CAAMH,CAAU,CAACG,MAJrB,CAKFC,SAAS,CAAG,KAAKF,oBAAL,EALV,CAFV,CADM,CAAV,EAWG,CAXH,CADJ,EAaE3B,IAbF,CAaOlD,CAAG,CAACgF,KAbX,CAcH,CA1OW,CAkPZvD,cAAc,CAAE,wBAAStB,CAAT,CAAiB,CAC7BN,CAAC,CAACgC,IAAF,CACIlC,CAAI,CAACmC,IAAL,CAAU,CACN,CACIC,UAAU,CAAE,2BADhB,CAEIC,IAAI,CAAE,CACFC,MAAM,CAAM9B,CADV,CAEF+B,OAAO,CAAKR,CAAC,CAACS,GAAF,CAAMC,SAFhB,CAGFC,OAAO,CAAKC,MAAM,CAACC,QAAP,CAAgBC,IAH1B,CAFV,CADM,CAAV,EASG,CATH,CADJ,EAWEE,IAXF,CAWO,SAASC,CAAT,CAAmB,CACtB,GAAIA,CAAQ,CAACxB,SAAb,CAAwB,CACpBjB,CAAS,CAACkB,SAAV,CAAoBuB,CAAQ,CAACxB,SAA7B,CACH,CAEJ,CAhBD,EAgBG+B,IAhBH,CAgBQjD,CAAY,CAACkD,SAhBrB,CAiBH,CApQW,CAAhB,CAuQA,MAAqD,CAQjD9C,IAAI,CAAEH,CAAS,CAACG,IARiC,CAgBjDoB,cAAc,CAAEvB,CAAS,CAACuB,cAhBuB,CAkBxD,CA5RK,CAAN","sourcesContent":["/**\n * User tour control library.\n *\n * @module tool_usertours/usertours\n * @class usertours\n * @copyright 2016 Andrew Nicols \n */\ndefine(\n['core/ajax', 'tool_usertours/tour', 'jquery', 'core/templates', 'core/str', 'core/log', 'core/notification'],\nfunction(ajax, BootstrapTour, $, templates, str, log, notification) {\n var usertours = {\n tourId: null,\n\n currentTour: null,\n\n /**\n * Initialise the user tour for the current page.\n *\n * @method init\n * @param {Array} tourDetails The matching tours for this page.\n * @param {Array} filters The names of all client side filters.\n */\n init: function(tourDetails, filters) {\n let requirements = [];\n for (var req = 0; req < filters.length; req++) {\n requirements[req] = 'tool_usertours/filter_' + filters[req];\n }\n require(requirements, function() {\n // Run the client side filters to find the first matching tour.\n let matchingTour = null;\n for (let key in tourDetails) {\n let tour = tourDetails[key];\n for (let i = 0; i < filters.length; i++) {\n let filter = arguments[i];\n if (filter.filterMatches(tour)) {\n matchingTour = tour;\n } else {\n // If any filter doesn't match, move on to the next tour.\n matchingTour = null;\n break;\n }\n }\n // If all filters matched then use this tour.\n if (matchingTour) {\n break;\n }\n }\n\n if (matchingTour === null) {\n return;\n }\n\n // Only one tour per page is allowed.\n usertours.tourId = matchingTour.tourId;\n\n let startTour = matchingTour.startTour;\n if (typeof startTour === 'undefined') {\n startTour = true;\n }\n\n if (startTour) {\n // Fetch the tour configuration.\n usertours.fetchTour(usertours.tourId);\n }\n\n usertours.addResetLink();\n // Watch for the reset link.\n $('body').on('click', '[data-action=\"tool_usertours/resetpagetour\"]', function(e) {\n e.preventDefault();\n usertours.resetTourState(usertours.tourId);\n });\n });\n },\n\n /**\n * Fetch the configuration specified tour, and start the tour when it has been fetched.\n *\n * @method fetchTour\n * @param {Number} tourId The ID of the tour to start.\n */\n fetchTour: function(tourId) {\n M.util.js_pending('admin_usertour_fetchTour' + tourId);\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_fetch_and_start_tour',\n args: {\n tourid: tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n }\n }\n ])[0],\n templates.render('tool_usertours/tourstep', {})\n )\n .then(function(response, template) {\n // If we don't have any tour config (because it doesn't need showing for the current user), return early.\n if (!response.hasOwnProperty('tourconfig')) {\n return;\n }\n\n return usertours.startBootstrapTour(tourId, template[0], response.tourconfig);\n })\n .always(function() {\n M.util.js_complete('admin_usertour_fetchTour' + tourId);\n\n return;\n })\n .fail(notification.exception);\n },\n\n /**\n * Add a reset link to the page.\n *\n * @method addResetLink\n */\n addResetLink: function() {\n var ele;\n M.util.js_pending('admin_usertour_addResetLink');\n\n // Append the link to the most suitable place on the page\n // with fallback to legacy selectors and finally the body\n // if there is no better place.\n if ($('.tool_usertours-resettourcontainer').length) {\n ele = $('.tool_usertours-resettourcontainer');\n } else if ($('.logininfo').length) {\n ele = $('.logininfo');\n } else if ($('footer').length) {\n ele = $('footer');\n } else {\n ele = $('body');\n }\n templates.render('tool_usertours/resettour', {})\n .then(function(html, js) {\n templates.appendNodeContents(ele, html, js);\n\n return;\n })\n .always(function() {\n M.util.js_complete('admin_usertour_addResetLink');\n\n return;\n })\n .fail();\n },\n\n /**\n * Start the specified tour.\n *\n * @method startBootstrapTour\n * @param {Number} tourId The ID of the tour to start.\n * @param {String} template The template to use.\n * @param {Object} tourConfig The tour configuration.\n * @return {Object}\n */\n startBootstrapTour: function(tourId, template, tourConfig) {\n if (usertours.currentTour) {\n // End the current tour, but disable end tour handler.\n tourConfig.onEnd = null;\n usertours.currentTour.endTour();\n delete usertours.currentTour;\n }\n\n // Normalize for the new library.\n tourConfig.eventHandlers = {\n afterEnd: [usertours.markTourComplete],\n afterRender: [usertours.markStepShown],\n };\n\n // Sort out the tour name.\n tourConfig.tourName = tourConfig.name;\n delete tourConfig.name;\n\n // Add the template to the configuration.\n // This enables translations of the buttons.\n tourConfig.template = template;\n\n tourConfig.steps = tourConfig.steps.map(function(step) {\n if (typeof step.element !== 'undefined') {\n step.target = step.element;\n delete step.element;\n }\n\n if (typeof step.reflex !== 'undefined') {\n step.moveOnClick = !!step.reflex;\n delete step.reflex;\n }\n\n if (typeof step.content !== 'undefined') {\n step.body = step.content;\n delete step.content;\n }\n\n return step;\n });\n\n usertours.currentTour = new BootstrapTour(tourConfig);\n return usertours.currentTour.startTour();\n },\n\n /**\n * Mark the specified step as being shownd by the user.\n *\n * @method markStepShown\n */\n markStepShown: function() {\n var stepConfig = this.getStepConfig(this.getCurrentStepNumber());\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_step_shown',\n args: {\n tourid: usertours.tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n stepid: stepConfig.stepid,\n stepindex: this.getCurrentStepNumber(),\n }\n }\n ])[0]\n ).fail(log.error);\n },\n\n /**\n * Mark the specified tour as being completed by the user.\n *\n * @method markTourComplete\n */\n markTourComplete: function() {\n var stepConfig = this.getStepConfig(this.getCurrentStepNumber());\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_complete_tour',\n args: {\n tourid: usertours.tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n stepid: stepConfig.stepid,\n stepindex: this.getCurrentStepNumber(),\n }\n }\n ])[0]\n ).fail(log.error);\n },\n\n /**\n * Reset the state, and restart the the tour on the current page.\n *\n * @method resetTourState\n * @param {Number} tourId The ID of the tour to start.\n */\n resetTourState: function(tourId) {\n $.when(\n ajax.call([\n {\n methodname: 'tool_usertours_reset_tour',\n args: {\n tourid: tourId,\n context: M.cfg.contextid,\n pageurl: window.location.href,\n }\n }\n ])[0]\n ).then(function(response) {\n if (response.startTour) {\n usertours.fetchTour(response.startTour);\n }\n return;\n }).fail(notification.exception);\n }\n };\n\n return /** @alias module:tool_usertours/usertours */ {\n /**\n * Initialise the user tour for the current page.\n *\n * @method init\n * @param {Number} tourId The ID of the tour to start.\n * @param {Bool} startTour Attempt to start the tour now.\n */\n init: usertours.init,\n\n /**\n * Reset the state, and restart the the tour on the current page.\n *\n * @method resetTourState\n * @param {Number} tourId The ID of the tour to restart.\n */\n resetTourState: usertours.resetTourState\n };\n});\n"],"file":"usertours.min.js"} \ No newline at end of file diff --git a/admin/tool/usertours/amd/src/filter_cssselector.js b/admin/tool/usertours/amd/src/filter_cssselector.js index 06e825c2655..469c2407a23 100644 --- a/admin/tool/usertours/amd/src/filter_cssselector.js +++ b/admin/tool/usertours/amd/src/filter_cssselector.js @@ -18,7 +18,6 @@ * * @module tool_usertours/filter_cssselector * @class filter_cssselector - * @package tool_usertours * @copyright 2020 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/admin/tool/usertours/amd/src/managesteps.js b/admin/tool/usertours/amd/src/managesteps.js index 420b89eea7b..665c95e889b 100644 --- a/admin/tool/usertours/amd/src/managesteps.js +++ b/admin/tool/usertours/amd/src/managesteps.js @@ -3,7 +3,6 @@ * * @module tool_usertours/managesteps * @class managesteps - * @package tool_usertours * @copyright 2016 Andrew Nicols */ define( diff --git a/admin/tool/usertours/amd/src/managetours.js b/admin/tool/usertours/amd/src/managetours.js index f6d3237abae..47812009a94 100644 --- a/admin/tool/usertours/amd/src/managetours.js +++ b/admin/tool/usertours/amd/src/managetours.js @@ -3,7 +3,6 @@ * * @module tool_usertours/managetours * @class managetours - * @package tool_usertours * @copyright 2016 Andrew Nicols */ define( diff --git a/admin/tool/usertours/amd/src/usertours.js b/admin/tool/usertours/amd/src/usertours.js index a79f7f23651..3c9629e6cfa 100644 --- a/admin/tool/usertours/amd/src/usertours.js +++ b/admin/tool/usertours/amd/src/usertours.js @@ -3,7 +3,6 @@ * * @module tool_usertours/usertours * @class usertours - * @package tool_usertours * @copyright 2016 Andrew Nicols */ define( diff --git a/backup/util/ui/amd/build/async_backup.min.js.map b/backup/util/ui/amd/build/async_backup.min.js.map index bfacf49ead8..b098d8bb6c1 100644 --- a/backup/util/ui/amd/build/async_backup.min.js.map +++ b/backup/util/ui/amd/build/async_backup.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/async_backup.js"],"names":["define","$","ajax","Str","notification","Templates","STATUS_FINISHED_ERR","STATUS_FINISHED_OK","Asyncbackup","checkdelayoriginal","checkdelay","checkdelaymultipler","backupid","contextid","restoreurl","typeid","backupintervalid","allbackupintervalid","allcopyintervalid","timeout","updateElement","type","percentage","percentagewidth","Math","round","elementbar","document","querySelectorAll","CSS","escape","percentagetext","toFixed","setAttribute","style","width","innerHTML","updateInterval","intervalid","callback","value","clearInterval","setInterval","updateBackupTableRow","statuscell","parent","tablerow","cellsiblings","siblings","timecell","timevalue","text","filenamecell","filename","call","methodname","args","done","response","context","time","size","filesize","fileurl","render","then","html","js","replaceNodeContents","fail","exception","Error","updateRestoreTableRow","coursecell","resourcename","updateCopyTableRow","restorecourse","closest","children","coursename","courselink","createElement","elementbarparent","operation","previousElementSibling","get_string","content","catch","appendChild","updateProgress","progress","elementstatus","elementdetail","elementbutton","stringRequests","status","classList","add","strProcessing","title","remove","strStatus","strStatusDetail","key","component","get_strings","strings","removeClass","last","addClass","strComplete","strDetail","strButton","param","attr","updateProgressAll","forEach","element","updateProgressCopy","restorecell","getBackupProgress","getAllBackupProgress","backupids","progressbars","find","not","each","push","id","substring","length","getAllCopyProgress","copyids","progressvars","dataset","restoreid","asyncBackupAllStatus","asyncCopyAllStatus","asyncBackupStatus","backup","restore","removeAttr"],"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 .\n\n/**\n * This module updates the UI during an asynchronous\n * backup or restore process.\n *\n * @module backup/util/async_backup\n * @package core\n * @copyright 2018 Matt Porritt \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.7\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification', 'core/templates'],\n function($, ajax, Str, notification, Templates) {\n\n /**\n * Module level constants.\n *\n * Using var instead of const as ES6 isn't fully supported yet.\n */\n var STATUS_EXECUTING = 800;\n var STATUS_FINISHED_ERR = 900;\n var STATUS_FINISHED_OK = 1000;\n\n /**\n * Module level variables.\n */\n var Asyncbackup = {};\n var checkdelayoriginal = 15000; // This is the default time to use.\n var checkdelay = 15000; // How often we should check for progress updates.\n var checkdelaymultipler = 1.5; // If a request fails this multiplier will be used to increase the checkdelay value\n var backupid; // The backup id to get the progress for.\n var contextid; // The course this backup progress is for.\n var restoreurl; // The URL to view course restores.\n var typeid; // The type of operation backup or restore.\n var backupintervalid; // The id of the setInterval function.\n var allbackupintervalid; // The id of the setInterval function.\n var allcopyintervalid; // The id of the setInterval function.\n var timeout = 2000; // Timeout for ajax requests.\n\n /**\n * Helper function to update UI components.\n *\n * @param {string} backupid The id to match elements on.\n * @param {string} type The type of operation, backup or restore.\n * @param {number} percentage The completion percentage to apply.\n */\n function updateElement(backupid, type, percentage) {\n var percentagewidth = Math.round(percentage) + '%';\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n var percentagetext = percentage.toFixed(2) + '%';\n\n // Set progress bar percentage indicators\n elementbar.setAttribute('aria-valuenow', percentagewidth);\n elementbar.style.width = percentagewidth;\n elementbar.innerHTML = percentagetext;\n }\n\n /**\n * Updates the interval we use to check for backup progress.\n *\n * @param {Number} intervalid The id of the interval\n * @param {Function} callback The function to use in setInterval\n * @param {Number} value The specified interval (in milliseconds)\n * @returns {Number}\n */\n function updateInterval(intervalid, callback, value) {\n clearInterval(intervalid);\n return setInterval(callback, value);\n }\n\n /**\n * Update backup table row when an async backup completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateBackupTableRow(backupid) {\n var statuscell = $('#' + backupid + '_bar').parent().parent();\n var tablerow = statuscell.parent();\n var cellsiblings = statuscell.siblings();\n var timecell = cellsiblings[1];\n var timevalue = $(timecell).text();\n var filenamecell = cellsiblings[0];\n var filename = $(filenamecell).text();\n\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_backup',\n args: {\n 'filename': filename,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n // We have the data now update the UI.\n var context = {\n filename: filename,\n time: timevalue,\n size: response.filesize,\n fileurl: response.fileurl,\n restoreurl: response.restoreurl\n };\n\n Templates.render('core/async_backup_progress_row', context).then(function(html, js) {\n Templates.replaceNodeContents(tablerow, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table row'));\n return;\n });\n });\n }\n\n /**\n * Update restore table row when an async restore completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateRestoreTableRow(backupid) {\n var statuscell = $('#' + backupid + '_bar').parent().parent();\n var tablerow = statuscell.parent();\n var cellsiblings = statuscell.siblings();\n var coursecell = cellsiblings[0];\n var timecell = cellsiblings[1];\n var timevalue = $(timecell).text();\n\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n // We have the data now update the UI.\n var resourcename = $(coursecell).text();\n var context = {\n resourcename: resourcename,\n restoreurl: response.restoreurl,\n time: timevalue\n };\n\n Templates.render('core/async_restore_progress_row', context).then(function(html, js) {\n Templates.replaceNodeContents(tablerow, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table row'));\n return;\n });\n });\n }\n\n /**\n * Update copy table row when an course copy completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateCopyTableRow(backupid) {\n var elementbar = document.querySelectorAll(\"[data-restoreid=\" + CSS.escape(backupid) + \"]\")[0];\n var restorecourse = elementbar.closest('tr').children[1];\n var coursename = restorecourse.innerHTML;\n var courselink = document.createElement('a');\n var elementbarparent = elementbar.closest('td');\n var operation = elementbarparent.previousElementSibling;\n\n // Replace the prgress bar.\n Str.get_string('complete').then(function(content) {\n operation.innerHTML = content;\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: complete'));\n return;\n });\n\n Templates.render('core/async_copy_complete_cell', {}).then(function(html, js) {\n Templates.replaceNodeContents(elementbarparent, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table cell'));\n return;\n });\n\n // Update the destination course name to a link to that course.\n ajax.call([{\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': 0\n },\n }])[0].done(function(response) {\n courselink.setAttribute('href', response.restoreurl);\n courselink.innerHTML = coursename;\n restorecourse.innerHTML = null;\n restorecourse.appendChild(courselink);\n\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to update table row'));\n return;\n });\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * the backup process.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgress(progress) {\n var percentage = progress.progress * 100;\n var type = 'backup';\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n var elementstatus = $('#' + backupid + '_status');\n var elementdetail = $('#' + backupid + '_detail');\n var elementbutton = $('#' + backupid + '_button');\n var stringRequests;\n\n if (progress.status == STATUS_EXECUTING) {\n // Process is in progress.\n // Add in progress class color to bar.\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, percentage);\n\n // Change heading.\n var strProcessing = 'async' + typeid + 'processing';\n Str.get_string(strProcessing, 'backup').then(function(title) {\n elementstatus.text(title);\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: backup ' + strProcessing));\n });\n\n } else if (progress.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar.\n elementbar.classList.add('bg-danger');\n\n // Remove in progress class color to bar.\n elementbar.classList.remove('bg-success');\n\n updateElement(backupid, type, 100);\n\n // Change heading and text.\n var strStatus = 'async' + typeid + 'error';\n var strStatusDetail = 'async' + typeid + 'errordetail';\n stringRequests = [\n {key: strStatus, component: 'backup'},\n {key: strStatusDetail, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementstatus.text(strings[0]);\n elementdetail.text(strings[1]);\n\n return;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n $('.backup_progress').children('span').removeClass('backup_stage_current');\n $('.backup_progress').children('span').last().addClass('backup_stage_current');\n\n // Stop checking when we either have an error or a completion.\n clearInterval(backupintervalid);\n\n } else if (progress.status == STATUS_FINISHED_OK) {\n // Process completed successfully.\n\n // Add in progress class color to bar\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, 100);\n\n // Change heading and text\n var strComplete = 'async' + typeid + 'complete';\n Str.get_string(strComplete, 'backup').then(function(title) {\n elementstatus.text(title);\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: backup ' + strComplete));\n });\n\n if (typeid == 'restore') {\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n var strDetail = 'async' + typeid + 'completedetail';\n var strButton = 'async' + typeid + 'completebutton';\n var stringRequests = [\n {key: strDetail, component: 'backup', param: response.restoreurl},\n {key: strButton, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementdetail.html(strings[0]);\n elementbutton.text(strings[1]);\n elementbutton.attr('href', response.restoreurl);\n\n return;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n });\n } else {\n var strDetail = 'async' + typeid + 'completedetail';\n var strButton = 'async' + typeid + 'completebutton';\n stringRequests = [\n {key: strDetail, component: 'backup', param: restoreurl},\n {key: strButton, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementdetail.html(strings[0]);\n elementbutton.text(strings[1]);\n elementbutton.attr('href', restoreurl);\n\n return;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n }\n\n $('.backup_progress').children('span').removeClass('backup_stage_current');\n $('.backup_progress').children('span').last().addClass('backup_stage_current');\n\n // Stop checking when we either have an error or a completion.\n clearInterval(backupintervalid);\n }\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * all the pending processes for backup and restore operations.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgressAll(progress) {\n progress.forEach(function(element) {\n var percentage = element.progress * 100;\n var backupid = element.backupid;\n var type = element.operation;\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n\n if (element.status == STATUS_EXECUTING) {\n // Process is in element.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, percentage);\n\n } else if (element.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar\n elementbar.classList.add('bg-danger');\n elementbar.classList.add('complete');\n\n // Remove in element class color to bar\n elementbar.classList.remove('bg-success');\n\n updateElement(backupid, type, 100);\n\n } else if (element.status == STATUS_FINISHED_OK) {\n // Process completed successfully.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n elementbar.classList.add('complete');\n\n updateElement(backupid, type, 100);\n\n // We have a successful backup. Update the UI with download and file details.\n if (type == 'backup') {\n updateBackupTableRow(backupid);\n } else {\n updateRestoreTableRow(backupid);\n }\n\n }\n\n });\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * all the pending processes for copy operations.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgressCopy(progress) {\n progress.forEach(function(element) {\n var percentage = element.progress * 100;\n var backupid = element.backupid;\n var type = element.operation;\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n\n if (type == 'restore') {\n let restorecell = elementbar.closest('tr').children[3];\n Str.get_string('restore').then(function(content) {\n restorecell.innerHTML = content;\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: restore'));\n });\n }\n\n if (element.status == STATUS_EXECUTING) {\n // Process is in element.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, percentage);\n\n } else if (element.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar\n elementbar.classList.add('bg-danger');\n elementbar.classList.add('complete');\n\n // Remove in element class color to bar\n elementbar.classList.remove('bg-success');\n\n updateElement(backupid, type, 100);\n\n } else if ((element.status == STATUS_FINISHED_OK) && (type == 'restore')) {\n // Process completed successfully.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n elementbar.classList.add('complete');\n\n updateElement(backupid, type, 100);\n\n // We have a successful copy. Update the UI link to copied course.\n updateCopyTableRow(backupid);\n }\n\n });\n }\n\n /**\n * Get the progress of the backup process via ajax.\n */\n function getBackupProgress() {\n ajax.call([{\n // Get the backup progress via webservice.\n methodname: 'core_backup_get_async_backup_progress',\n args: {\n 'backupids': [backupid],\n 'contextid': contextid\n },\n }], true, true, false, timeout)[0].done(function(response) {\n // We have the progress now update the UI.\n updateProgress(response[0]);\n checkdelay = checkdelayoriginal;\n backupintervalid = updateInterval(backupintervalid, getBackupProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n backupintervalid = updateInterval(backupintervalid, getBackupProgress, checkdelay);\n });\n }\n\n /**\n * Get the progress of all backup processes via ajax.\n */\n function getAllBackupProgress() {\n var backupids = [];\n var progressbars = $('.progress').find('.progress-bar').not('.complete');\n\n progressbars.each(function() {\n backupids.push((this.id).substring(0, 32));\n });\n\n if (backupids.length > 0) {\n ajax.call([{\n // Get the backup progress via webservice.\n methodname: 'core_backup_get_async_backup_progress',\n args: {\n 'backupids': backupids,\n 'contextid': contextid\n },\n }], true, true, false, timeout)[0].done(function(response) {\n updateProgressAll(response);\n checkdelay = checkdelayoriginal;\n allbackupintervalid = updateInterval(allbackupintervalid, getAllBackupProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n allbackupintervalid = updateInterval(allbackupintervalid, getAllBackupProgress, checkdelay);\n });\n } else {\n clearInterval(allbackupintervalid); // No more progress bars to update, stop checking.\n }\n }\n\n /**\n * Get the progress of all copy processes via ajax.\n */\n function getAllCopyProgress() {\n var copyids = [];\n var progressbars = $('.progress').find('.progress-bar[data-operation][data-backupid][data-restoreid]').not('.complete');\n\n progressbars.each(function() {\n let progressvars = {\n 'backupid': this.dataset.backupid,\n 'restoreid': this.dataset.restoreid,\n 'operation': this.dataset.operation,\n };\n copyids.push(progressvars);\n });\n\n if (copyids.length > 0) {\n ajax.call([{\n // Get the copy progress via webservice.\n methodname: 'core_backup_get_copy_progress',\n args: {\n 'copies': copyids\n },\n }], true, true, false, timeout)[0].done(function(response) {\n updateProgressCopy(response);\n checkdelay = checkdelayoriginal;\n allcopyintervalid = updateInterval(allcopyintervalid, getAllCopyProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n allcopyintervalid = updateInterval(allcopyintervalid, getAllCopyProgress, checkdelay);\n });\n } else {\n clearInterval(allcopyintervalid); // No more progress bars to update, stop checking.\n }\n }\n\n /**\n * Get status updates for all backups.\n *\n * @public\n * @param {number} context The context id.\n */\n Asyncbackup.asyncBackupAllStatus = function(context) {\n contextid = context;\n allbackupintervalid = setInterval(getAllBackupProgress, checkdelay);\n };\n\n /**\n * Get status updates for all course copies.\n *\n * @public\n */\n Asyncbackup.asyncCopyAllStatus = function() {\n allcopyintervalid = setInterval(getAllCopyProgress, checkdelay);\n };\n\n /**\n * Get status updates for backup.\n *\n * @public\n * @param {string} backup The backup record id.\n * @param {number} context The context id.\n * @param {string} restore The restore link.\n * @param {string} type The operation type (backup or restore).\n */\n Asyncbackup.asyncBackupStatus = function(backup, context, restore, type) {\n backupid = backup;\n contextid = context;\n restoreurl = restore;\n\n if (type == 'backup') {\n typeid = 'backup';\n } else {\n typeid = 'restore';\n }\n\n // Remove the links from the progress bar, no going back now.\n $('.backup_progress').children('a').removeAttr('href');\n\n // Periodically check for progress updates and update the UI as required.\n backupintervalid = setInterval(getBackupProgress, checkdelay);\n\n };\n\n return Asyncbackup;\n});\n"],"file":"async_backup.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/async_backup.js"],"names":["define","$","ajax","Str","notification","Templates","STATUS_FINISHED_ERR","STATUS_FINISHED_OK","Asyncbackup","checkdelayoriginal","checkdelay","checkdelaymultipler","backupid","contextid","restoreurl","typeid","backupintervalid","allbackupintervalid","allcopyintervalid","timeout","updateElement","type","percentage","percentagewidth","Math","round","elementbar","document","querySelectorAll","CSS","escape","percentagetext","toFixed","setAttribute","style","width","innerHTML","updateInterval","intervalid","callback","value","clearInterval","setInterval","updateBackupTableRow","statuscell","parent","tablerow","cellsiblings","siblings","timecell","timevalue","text","filenamecell","filename","call","methodname","args","done","response","context","time","size","filesize","fileurl","render","then","html","js","replaceNodeContents","fail","exception","Error","updateRestoreTableRow","coursecell","resourcename","updateCopyTableRow","restorecourse","closest","children","coursename","courselink","createElement","elementbarparent","operation","previousElementSibling","get_string","content","catch","appendChild","updateProgress","progress","elementstatus","elementdetail","elementbutton","stringRequests","status","classList","add","strProcessing","title","remove","strStatus","strStatusDetail","key","component","get_strings","strings","removeClass","last","addClass","strComplete","strDetail","strButton","param","attr","updateProgressAll","forEach","element","updateProgressCopy","restorecell","getBackupProgress","getAllBackupProgress","backupids","progressbars","find","not","each","push","id","substring","length","getAllCopyProgress","copyids","progressvars","dataset","restoreid","asyncBackupAllStatus","asyncCopyAllStatus","asyncBackupStatus","backup","restore","removeAttr"],"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 .\n\n/**\n * This module updates the UI during an asynchronous\n * backup or restore process.\n *\n * @module backup/util/async_backup\n * @copyright 2018 Matt Porritt \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.7\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification', 'core/templates'],\n function($, ajax, Str, notification, Templates) {\n\n /**\n * Module level constants.\n *\n * Using var instead of const as ES6 isn't fully supported yet.\n */\n var STATUS_EXECUTING = 800;\n var STATUS_FINISHED_ERR = 900;\n var STATUS_FINISHED_OK = 1000;\n\n /**\n * Module level variables.\n */\n var Asyncbackup = {};\n var checkdelayoriginal = 15000; // This is the default time to use.\n var checkdelay = 15000; // How often we should check for progress updates.\n var checkdelaymultipler = 1.5; // If a request fails this multiplier will be used to increase the checkdelay value\n var backupid; // The backup id to get the progress for.\n var contextid; // The course this backup progress is for.\n var restoreurl; // The URL to view course restores.\n var typeid; // The type of operation backup or restore.\n var backupintervalid; // The id of the setInterval function.\n var allbackupintervalid; // The id of the setInterval function.\n var allcopyintervalid; // The id of the setInterval function.\n var timeout = 2000; // Timeout for ajax requests.\n\n /**\n * Helper function to update UI components.\n *\n * @param {string} backupid The id to match elements on.\n * @param {string} type The type of operation, backup or restore.\n * @param {number} percentage The completion percentage to apply.\n */\n function updateElement(backupid, type, percentage) {\n var percentagewidth = Math.round(percentage) + '%';\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n var percentagetext = percentage.toFixed(2) + '%';\n\n // Set progress bar percentage indicators\n elementbar.setAttribute('aria-valuenow', percentagewidth);\n elementbar.style.width = percentagewidth;\n elementbar.innerHTML = percentagetext;\n }\n\n /**\n * Updates the interval we use to check for backup progress.\n *\n * @param {Number} intervalid The id of the interval\n * @param {Function} callback The function to use in setInterval\n * @param {Number} value The specified interval (in milliseconds)\n * @returns {Number}\n */\n function updateInterval(intervalid, callback, value) {\n clearInterval(intervalid);\n return setInterval(callback, value);\n }\n\n /**\n * Update backup table row when an async backup completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateBackupTableRow(backupid) {\n var statuscell = $('#' + backupid + '_bar').parent().parent();\n var tablerow = statuscell.parent();\n var cellsiblings = statuscell.siblings();\n var timecell = cellsiblings[1];\n var timevalue = $(timecell).text();\n var filenamecell = cellsiblings[0];\n var filename = $(filenamecell).text();\n\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_backup',\n args: {\n 'filename': filename,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n // We have the data now update the UI.\n var context = {\n filename: filename,\n time: timevalue,\n size: response.filesize,\n fileurl: response.fileurl,\n restoreurl: response.restoreurl\n };\n\n Templates.render('core/async_backup_progress_row', context).then(function(html, js) {\n Templates.replaceNodeContents(tablerow, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table row'));\n return;\n });\n });\n }\n\n /**\n * Update restore table row when an async restore completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateRestoreTableRow(backupid) {\n var statuscell = $('#' + backupid + '_bar').parent().parent();\n var tablerow = statuscell.parent();\n var cellsiblings = statuscell.siblings();\n var coursecell = cellsiblings[0];\n var timecell = cellsiblings[1];\n var timevalue = $(timecell).text();\n\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n // We have the data now update the UI.\n var resourcename = $(coursecell).text();\n var context = {\n resourcename: resourcename,\n restoreurl: response.restoreurl,\n time: timevalue\n };\n\n Templates.render('core/async_restore_progress_row', context).then(function(html, js) {\n Templates.replaceNodeContents(tablerow, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table row'));\n return;\n });\n });\n }\n\n /**\n * Update copy table row when an course copy completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateCopyTableRow(backupid) {\n var elementbar = document.querySelectorAll(\"[data-restoreid=\" + CSS.escape(backupid) + \"]\")[0];\n var restorecourse = elementbar.closest('tr').children[1];\n var coursename = restorecourse.innerHTML;\n var courselink = document.createElement('a');\n var elementbarparent = elementbar.closest('td');\n var operation = elementbarparent.previousElementSibling;\n\n // Replace the prgress bar.\n Str.get_string('complete').then(function(content) {\n operation.innerHTML = content;\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: complete'));\n return;\n });\n\n Templates.render('core/async_copy_complete_cell', {}).then(function(html, js) {\n Templates.replaceNodeContents(elementbarparent, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table cell'));\n return;\n });\n\n // Update the destination course name to a link to that course.\n ajax.call([{\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': 0\n },\n }])[0].done(function(response) {\n courselink.setAttribute('href', response.restoreurl);\n courselink.innerHTML = coursename;\n restorecourse.innerHTML = null;\n restorecourse.appendChild(courselink);\n\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to update table row'));\n return;\n });\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * the backup process.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgress(progress) {\n var percentage = progress.progress * 100;\n var type = 'backup';\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n var elementstatus = $('#' + backupid + '_status');\n var elementdetail = $('#' + backupid + '_detail');\n var elementbutton = $('#' + backupid + '_button');\n var stringRequests;\n\n if (progress.status == STATUS_EXECUTING) {\n // Process is in progress.\n // Add in progress class color to bar.\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, percentage);\n\n // Change heading.\n var strProcessing = 'async' + typeid + 'processing';\n Str.get_string(strProcessing, 'backup').then(function(title) {\n elementstatus.text(title);\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: backup ' + strProcessing));\n });\n\n } else if (progress.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar.\n elementbar.classList.add('bg-danger');\n\n // Remove in progress class color to bar.\n elementbar.classList.remove('bg-success');\n\n updateElement(backupid, type, 100);\n\n // Change heading and text.\n var strStatus = 'async' + typeid + 'error';\n var strStatusDetail = 'async' + typeid + 'errordetail';\n stringRequests = [\n {key: strStatus, component: 'backup'},\n {key: strStatusDetail, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementstatus.text(strings[0]);\n elementdetail.text(strings[1]);\n\n return;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n $('.backup_progress').children('span').removeClass('backup_stage_current');\n $('.backup_progress').children('span').last().addClass('backup_stage_current');\n\n // Stop checking when we either have an error or a completion.\n clearInterval(backupintervalid);\n\n } else if (progress.status == STATUS_FINISHED_OK) {\n // Process completed successfully.\n\n // Add in progress class color to bar\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, 100);\n\n // Change heading and text\n var strComplete = 'async' + typeid + 'complete';\n Str.get_string(strComplete, 'backup').then(function(title) {\n elementstatus.text(title);\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: backup ' + strComplete));\n });\n\n if (typeid == 'restore') {\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n var strDetail = 'async' + typeid + 'completedetail';\n var strButton = 'async' + typeid + 'completebutton';\n var stringRequests = [\n {key: strDetail, component: 'backup', param: response.restoreurl},\n {key: strButton, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementdetail.html(strings[0]);\n elementbutton.text(strings[1]);\n elementbutton.attr('href', response.restoreurl);\n\n return;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n });\n } else {\n var strDetail = 'async' + typeid + 'completedetail';\n var strButton = 'async' + typeid + 'completebutton';\n stringRequests = [\n {key: strDetail, component: 'backup', param: restoreurl},\n {key: strButton, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementdetail.html(strings[0]);\n elementbutton.text(strings[1]);\n elementbutton.attr('href', restoreurl);\n\n return;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n }\n\n $('.backup_progress').children('span').removeClass('backup_stage_current');\n $('.backup_progress').children('span').last().addClass('backup_stage_current');\n\n // Stop checking when we either have an error or a completion.\n clearInterval(backupintervalid);\n }\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * all the pending processes for backup and restore operations.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgressAll(progress) {\n progress.forEach(function(element) {\n var percentage = element.progress * 100;\n var backupid = element.backupid;\n var type = element.operation;\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n\n if (element.status == STATUS_EXECUTING) {\n // Process is in element.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, percentage);\n\n } else if (element.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar\n elementbar.classList.add('bg-danger');\n elementbar.classList.add('complete');\n\n // Remove in element class color to bar\n elementbar.classList.remove('bg-success');\n\n updateElement(backupid, type, 100);\n\n } else if (element.status == STATUS_FINISHED_OK) {\n // Process completed successfully.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n elementbar.classList.add('complete');\n\n updateElement(backupid, type, 100);\n\n // We have a successful backup. Update the UI with download and file details.\n if (type == 'backup') {\n updateBackupTableRow(backupid);\n } else {\n updateRestoreTableRow(backupid);\n }\n\n }\n\n });\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * all the pending processes for copy operations.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgressCopy(progress) {\n progress.forEach(function(element) {\n var percentage = element.progress * 100;\n var backupid = element.backupid;\n var type = element.operation;\n var elementbar = document.querySelectorAll(\"[data-\" + type + \"id=\" + CSS.escape(backupid) + \"]\")[0];\n\n if (type == 'restore') {\n let restorecell = elementbar.closest('tr').children[3];\n Str.get_string('restore').then(function(content) {\n restorecell.innerHTML = content;\n return;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: restore'));\n });\n }\n\n if (element.status == STATUS_EXECUTING) {\n // Process is in element.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n\n updateElement(backupid, type, percentage);\n\n } else if (element.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar\n elementbar.classList.add('bg-danger');\n elementbar.classList.add('complete');\n\n // Remove in element class color to bar\n elementbar.classList.remove('bg-success');\n\n updateElement(backupid, type, 100);\n\n } else if ((element.status == STATUS_FINISHED_OK) && (type == 'restore')) {\n // Process completed successfully.\n\n // Add in element class color to bar\n elementbar.classList.add('bg-success');\n elementbar.classList.add('complete');\n\n updateElement(backupid, type, 100);\n\n // We have a successful copy. Update the UI link to copied course.\n updateCopyTableRow(backupid);\n }\n\n });\n }\n\n /**\n * Get the progress of the backup process via ajax.\n */\n function getBackupProgress() {\n ajax.call([{\n // Get the backup progress via webservice.\n methodname: 'core_backup_get_async_backup_progress',\n args: {\n 'backupids': [backupid],\n 'contextid': contextid\n },\n }], true, true, false, timeout)[0].done(function(response) {\n // We have the progress now update the UI.\n updateProgress(response[0]);\n checkdelay = checkdelayoriginal;\n backupintervalid = updateInterval(backupintervalid, getBackupProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n backupintervalid = updateInterval(backupintervalid, getBackupProgress, checkdelay);\n });\n }\n\n /**\n * Get the progress of all backup processes via ajax.\n */\n function getAllBackupProgress() {\n var backupids = [];\n var progressbars = $('.progress').find('.progress-bar').not('.complete');\n\n progressbars.each(function() {\n backupids.push((this.id).substring(0, 32));\n });\n\n if (backupids.length > 0) {\n ajax.call([{\n // Get the backup progress via webservice.\n methodname: 'core_backup_get_async_backup_progress',\n args: {\n 'backupids': backupids,\n 'contextid': contextid\n },\n }], true, true, false, timeout)[0].done(function(response) {\n updateProgressAll(response);\n checkdelay = checkdelayoriginal;\n allbackupintervalid = updateInterval(allbackupintervalid, getAllBackupProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n allbackupintervalid = updateInterval(allbackupintervalid, getAllBackupProgress, checkdelay);\n });\n } else {\n clearInterval(allbackupintervalid); // No more progress bars to update, stop checking.\n }\n }\n\n /**\n * Get the progress of all copy processes via ajax.\n */\n function getAllCopyProgress() {\n var copyids = [];\n var progressbars = $('.progress').find('.progress-bar[data-operation][data-backupid][data-restoreid]').not('.complete');\n\n progressbars.each(function() {\n let progressvars = {\n 'backupid': this.dataset.backupid,\n 'restoreid': this.dataset.restoreid,\n 'operation': this.dataset.operation,\n };\n copyids.push(progressvars);\n });\n\n if (copyids.length > 0) {\n ajax.call([{\n // Get the copy progress via webservice.\n methodname: 'core_backup_get_copy_progress',\n args: {\n 'copies': copyids\n },\n }], true, true, false, timeout)[0].done(function(response) {\n updateProgressCopy(response);\n checkdelay = checkdelayoriginal;\n allcopyintervalid = updateInterval(allcopyintervalid, getAllCopyProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n allcopyintervalid = updateInterval(allcopyintervalid, getAllCopyProgress, checkdelay);\n });\n } else {\n clearInterval(allcopyintervalid); // No more progress bars to update, stop checking.\n }\n }\n\n /**\n * Get status updates for all backups.\n *\n * @public\n * @param {number} context The context id.\n */\n Asyncbackup.asyncBackupAllStatus = function(context) {\n contextid = context;\n allbackupintervalid = setInterval(getAllBackupProgress, checkdelay);\n };\n\n /**\n * Get status updates for all course copies.\n *\n * @public\n */\n Asyncbackup.asyncCopyAllStatus = function() {\n allcopyintervalid = setInterval(getAllCopyProgress, checkdelay);\n };\n\n /**\n * Get status updates for backup.\n *\n * @public\n * @param {string} backup The backup record id.\n * @param {number} context The context id.\n * @param {string} restore The restore link.\n * @param {string} type The operation type (backup or restore).\n */\n Asyncbackup.asyncBackupStatus = function(backup, context, restore, type) {\n backupid = backup;\n contextid = context;\n restoreurl = restore;\n\n if (type == 'backup') {\n typeid = 'backup';\n } else {\n typeid = 'restore';\n }\n\n // Remove the links from the progress bar, no going back now.\n $('.backup_progress').children('a').removeAttr('href');\n\n // Periodically check for progress updates and update the UI as required.\n backupintervalid = setInterval(getBackupProgress, checkdelay);\n\n };\n\n return Asyncbackup;\n});\n"],"file":"async_backup.min.js"} \ No newline at end of file diff --git a/backup/util/ui/amd/src/async_backup.js b/backup/util/ui/amd/src/async_backup.js index 4854dedc34b..9ec219cc31a 100644 --- a/backup/util/ui/amd/src/async_backup.js +++ b/backup/util/ui/amd/src/async_backup.js @@ -18,7 +18,6 @@ * backup or restore process. * * @module backup/util/async_backup - * @package core * @copyright 2018 Matt Porritt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.7 diff --git a/badges/amd/build/backpackactions.min.js.map b/badges/amd/build/backpackactions.min.js.map index 52bdc232cba..2076c3b9b31 100644 --- a/badges/amd/build/backpackactions.min.js.map +++ b/badges/amd/build/backpackactions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/backpackactions.js"],"names":["init","pendingPromise","Pending","root","selectors","elements","main","registerListenerEvents","resolve","on","actions","deletebackpack","e","preventDefault","link","currentTarget","buildModal","modal","displayModal","backpackurl","closest","attr","ModalFactory","types","SAVE_CANCEL","title","body","type","create","setSaveButtonText","getRoot","ModalEvents","save","window","location","href","Config","sesskey","hidden","destroy","show"],"mappings":"0QAwBA,OACA,OAEA,OACA,OACA,OACA,O,kXAOO,GAAMA,CAAAA,CAAI,CAAG,UAAM,IAChBC,CAAAA,CAAc,CAAG,GAAIC,UADL,CAGhBC,CAAI,CAAG,cAAEC,UAAUC,QAAV,CAAmBC,IAArB,CAHS,CAItBC,CAAsB,CAACJ,CAAD,CAAtB,CAEAF,CAAc,CAACO,OAAf,EACH,CAPM,C,YAeDD,CAAAA,CAAsB,CAAG,SAACJ,CAAD,CAAU,CAErCA,CAAI,CAACM,EAAL,CAAQ,OAAR,CAAiBL,UAAUM,OAAV,CAAkBC,cAAnC,4CAAmD,WAAMC,CAAN,2FAC/CA,CAAC,CAACC,cAAF,GAEMC,CAHyC,CAGlC,cAAEF,CAAC,CAACG,aAAJ,CAHkC,gBAI3BC,CAAAA,CAAU,CAACF,CAAD,CAJiB,QAIzCG,CAJyC,QAM/CC,CAAY,CAACD,CAAD,CAAQH,CAAR,CAAZ,CAN+C,wCAAnD,wDAQH,C,CAEKE,CAAU,4CAAG,WAAMF,CAAN,yFAETK,CAFS,CAEKL,CAAI,CAACM,OAAL,CAAahB,UAAUC,QAAV,CAAmBc,WAAhC,EAA6CE,IAA7C,CAAkD,kBAAlD,CAFL,MAIRC,SAJQ,gBAKE,iBAAU,qBAAV,CAAiC,aAAjC,CALF,mCAMC,iBAAU,4BAAV,CAAwC,aAAxC,CAAuDH,CAAvD,CAND,yBAOLG,UAAaC,KAAb,CAAmBC,WAPd,OAKXC,KALW,MAMXC,IANW,MAOXC,IAPW,qCAIKC,MAJL,2DAAH,uD,CAYVV,CAAY,4CAAG,WAAMD,CAAN,CAAaH,CAAb,wFACjBG,CADiB,gBACa,iBAAU,QAAV,CAAoB,MAApB,CADb,yBACXY,iBADW,iBAGjBZ,CAAK,CAACa,OAAN,GAAgBrB,EAAhB,CAAmBsB,UAAYC,IAA/B,CAAqC,UAAW,CAC5CC,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBrB,CAAI,CAACO,IAAL,CAAU,MAAV,EAAoB,WAApB,CAAkCe,UAAOC,OAAzC,CAAmD,YAC7E,CAFD,EAIApB,CAAK,CAACa,OAAN,GAAgBrB,EAAhB,CAAmBsB,UAAYO,MAA/B,CAAuC,UAAW,CAC9CrB,CAAK,CAACsB,OAAN,EACH,CAFD,EAIAtB,CAAK,CAACuB,IAAN,GAXiB,wCAAH,uD","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 .\n\n/**\n * Action methods related to backpacks.\n *\n * @module core_badges/backpackactions\n * @package core_badges\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport selectors from 'core_badges/selectors';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\nimport Config from 'core/config';\n\n/**\n * Set up the actions.\n *\n * @method init\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n\n const root = $(selectors.elements.main);\n registerListenerEvents(root);\n\n pendingPromise.resolve();\n};\n\n/**\n * Register backpack related event listeners.\n *\n * @method registerListenerEvents\n * @param {Object} root The root element.\n */\nconst registerListenerEvents = (root) => {\n\n root.on('click', selectors.actions.deletebackpack, async(e) => {\n e.preventDefault();\n\n const link = $(e.currentTarget);\n const modal = await buildModal(link);\n\n displayModal(modal, link);\n });\n};\n\nconst buildModal = async(link) => {\n\n const backpackurl = link.closest(selectors.elements.backpackurl).attr('data-backpackurl');\n\n return ModalFactory.create({\n title: await getString('delexternalbackpack', 'core_badges'),\n body: await getString('delexternalbackpackconfirm', 'core_badges', backpackurl),\n type: ModalFactory.types.SAVE_CANCEL,\n });\n\n};\n\nconst displayModal = async(modal, link) => {\n modal.setSaveButtonText(await getString('delete', 'core'));\n\n modal.getRoot().on(ModalEvents.save, function() {\n window.location.href = link.attr('href') + '&sesskey=' + Config.sesskey + '&confirm=1';\n });\n\n modal.getRoot().on(ModalEvents.hidden, function() {\n modal.destroy();\n });\n\n modal.show();\n};\n"],"file":"backpackactions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/backpackactions.js"],"names":["init","pendingPromise","Pending","root","selectors","elements","main","registerListenerEvents","resolve","on","actions","deletebackpack","e","preventDefault","link","currentTarget","buildModal","modal","displayModal","backpackurl","closest","attr","ModalFactory","types","SAVE_CANCEL","title","body","type","create","setSaveButtonText","getRoot","ModalEvents","save","window","location","href","Config","sesskey","hidden","destroy","show"],"mappings":"0QAuBA,OACA,OAEA,OACA,OACA,OACA,O,kXAOO,GAAMA,CAAAA,CAAI,CAAG,UAAM,IAChBC,CAAAA,CAAc,CAAG,GAAIC,UADL,CAGhBC,CAAI,CAAG,cAAEC,UAAUC,QAAV,CAAmBC,IAArB,CAHS,CAItBC,CAAsB,CAACJ,CAAD,CAAtB,CAEAF,CAAc,CAACO,OAAf,EACH,CAPM,C,YAeDD,CAAAA,CAAsB,CAAG,SAACJ,CAAD,CAAU,CAErCA,CAAI,CAACM,EAAL,CAAQ,OAAR,CAAiBL,UAAUM,OAAV,CAAkBC,cAAnC,4CAAmD,WAAMC,CAAN,2FAC/CA,CAAC,CAACC,cAAF,GAEMC,CAHyC,CAGlC,cAAEF,CAAC,CAACG,aAAJ,CAHkC,gBAI3BC,CAAAA,CAAU,CAACF,CAAD,CAJiB,QAIzCG,CAJyC,QAM/CC,CAAY,CAACD,CAAD,CAAQH,CAAR,CAAZ,CAN+C,wCAAnD,wDAQH,C,CAEKE,CAAU,4CAAG,WAAMF,CAAN,yFAETK,CAFS,CAEKL,CAAI,CAACM,OAAL,CAAahB,UAAUC,QAAV,CAAmBc,WAAhC,EAA6CE,IAA7C,CAAkD,kBAAlD,CAFL,MAIRC,SAJQ,gBAKE,iBAAU,qBAAV,CAAiC,aAAjC,CALF,mCAMC,iBAAU,4BAAV,CAAwC,aAAxC,CAAuDH,CAAvD,CAND,yBAOLG,UAAaC,KAAb,CAAmBC,WAPd,OAKXC,KALW,MAMXC,IANW,MAOXC,IAPW,qCAIKC,MAJL,2DAAH,uD,CAYVV,CAAY,4CAAG,WAAMD,CAAN,CAAaH,CAAb,wFACjBG,CADiB,gBACa,iBAAU,QAAV,CAAoB,MAApB,CADb,yBACXY,iBADW,iBAGjBZ,CAAK,CAACa,OAAN,GAAgBrB,EAAhB,CAAmBsB,UAAYC,IAA/B,CAAqC,UAAW,CAC5CC,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBrB,CAAI,CAACO,IAAL,CAAU,MAAV,EAAoB,WAApB,CAAkCe,UAAOC,OAAzC,CAAmD,YAC7E,CAFD,EAIApB,CAAK,CAACa,OAAN,GAAgBrB,EAAhB,CAAmBsB,UAAYO,MAA/B,CAAuC,UAAW,CAC9CrB,CAAK,CAACsB,OAAN,EACH,CAFD,EAIAtB,CAAK,CAACuB,IAAN,GAXiB,wCAAH,uD","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 .\n\n/**\n * Action methods related to backpacks.\n *\n * @module core_badges/backpackactions\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport selectors from 'core_badges/selectors';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\nimport Config from 'core/config';\n\n/**\n * Set up the actions.\n *\n * @method init\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n\n const root = $(selectors.elements.main);\n registerListenerEvents(root);\n\n pendingPromise.resolve();\n};\n\n/**\n * Register backpack related event listeners.\n *\n * @method registerListenerEvents\n * @param {Object} root The root element.\n */\nconst registerListenerEvents = (root) => {\n\n root.on('click', selectors.actions.deletebackpack, async(e) => {\n e.preventDefault();\n\n const link = $(e.currentTarget);\n const modal = await buildModal(link);\n\n displayModal(modal, link);\n });\n};\n\nconst buildModal = async(link) => {\n\n const backpackurl = link.closest(selectors.elements.backpackurl).attr('data-backpackurl');\n\n return ModalFactory.create({\n title: await getString('delexternalbackpack', 'core_badges'),\n body: await getString('delexternalbackpackconfirm', 'core_badges', backpackurl),\n type: ModalFactory.types.SAVE_CANCEL,\n });\n\n};\n\nconst displayModal = async(modal, link) => {\n modal.setSaveButtonText(await getString('delete', 'core'));\n\n modal.getRoot().on(ModalEvents.save, function() {\n window.location.href = link.attr('href') + '&sesskey=' + Config.sesskey + '&confirm=1';\n });\n\n modal.getRoot().on(ModalEvents.hidden, function() {\n modal.destroy();\n });\n\n modal.show();\n};\n"],"file":"backpackactions.min.js"} \ No newline at end of file diff --git a/badges/amd/build/selectors.min.js.map b/badges/amd/build/selectors.min.js.map index 856297c27e3..1683db8e3b4 100644 --- a/badges/amd/build/selectors.min.js.map +++ b/badges/amd/build/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/selectors.js"],"names":["actions","deletebackpack","getDataSelector","name","value","elements","clearsearch","main","backpackurl"],"mappings":"6IAoCe,CACXA,OAAO,CAAE,CACLC,cAAc,CANE,QAAlBC,CAAAA,eAAkB,CAACC,CAAD,CAAOC,CAAP,CAAiB,CACrC,sBAAgBD,CAAhB,eAAyBC,CAAzB,OACH,CAIuB,CAAgB,QAAhB,CAA0B,gBAA1B,CADX,CADE,CAIXC,QAAQ,CAAE,CACNC,WAAW,CAAE,iCADP,CAENC,IAAI,CAAE,eAFA,CAGNC,WAAW,CAAE,oBAHP,CAJC,C","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 .\n\n/**\n * Define all of the selectors we will be using on the backpack interface.\n *\n * @module core_badges/selectors\n * @package core_badges\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n *\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n actions: {\n deletebackpack: getDataSelector('action', 'deletebackpack'),\n },\n elements: {\n clearsearch: '.input-group-append .clear-icon',\n main: '#backpacklist',\n backpackurl: '[data-backpackurl]',\n },\n};\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/selectors.js"],"names":["actions","deletebackpack","getDataSelector","name","value","elements","clearsearch","main","backpackurl"],"mappings":"6IAmCe,CACXA,OAAO,CAAE,CACLC,cAAc,CANE,QAAlBC,CAAAA,eAAkB,CAACC,CAAD,CAAOC,CAAP,CAAiB,CACrC,sBAAgBD,CAAhB,eAAyBC,CAAzB,OACH,CAIuB,CAAgB,QAAhB,CAA0B,gBAA1B,CADX,CADE,CAIXC,QAAQ,CAAE,CACNC,WAAW,CAAE,iCADP,CAENC,IAAI,CAAE,eAFA,CAGNC,WAAW,CAAE,oBAHP,CAJC,C","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 .\n\n/**\n * Define all of the selectors we will be using on the backpack interface.\n *\n * @module core_badges/selectors\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n *\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n actions: {\n deletebackpack: getDataSelector('action', 'deletebackpack'),\n },\n elements: {\n clearsearch: '.input-group-append .clear-icon',\n main: '#backpacklist',\n backpackurl: '[data-backpackurl]',\n },\n};\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/badges/amd/src/backpackactions.js b/badges/amd/src/backpackactions.js index 5730b84bba1..7cb97d5cc7a 100644 --- a/badges/amd/src/backpackactions.js +++ b/badges/amd/src/backpackactions.js @@ -17,7 +17,6 @@ * Action methods related to backpacks. * * @module core_badges/backpackactions - * @package core_badges * @copyright 2020 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/badges/amd/src/selectors.js b/badges/amd/src/selectors.js index fea6dfba0cc..a8b66a3461a 100644 --- a/badges/amd/src/selectors.js +++ b/badges/amd/src/selectors.js @@ -17,7 +17,6 @@ * Define all of the selectors we will be using on the backpack interface. * * @module core_badges/selectors - * @package core_badges * @copyright 2020 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/myoverview/amd/build/main.min.js.map b/blocks/myoverview/amd/build/main.min.js.map index 215d532d074..6673d3c84dc 100644 --- a/blocks/myoverview/amd/build/main.min.js.map +++ b/blocks/myoverview/amd/build/main.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/main.js"],"names":["define","$","View","ViewNav","init","root"],"mappings":"AAuBAA,OAAM,yBACN,CACI,QADJ,CAEI,uBAFJ,CAGI,2BAHJ,CADM,CAMN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIE,CAcE,MAAO,CACHC,IAAI,CATG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAe,CACtBA,CAAI,CAAGJ,CAAC,CAACI,CAAD,CAAR,CAEAF,CAAO,CAACC,IAAR,CAAaC,CAAb,EAEAH,CAAI,CAACE,IAAL,CAAUC,CAAV,CACH,CAEM,CAGV,CA3BK,CAAN","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 .\n\n/**\n * Javascript to initialise the myoverview block.\n *\n * @package block_myoverview\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'block_myoverview/view',\n 'block_myoverview/view_nav'\n],\nfunction(\n $,\n View,\n ViewNav\n) {\n /**\n * Initialise all of the modules for the overview block.\n *\n * @param {object} root The root element for the overview block.\n */\n var init = function(root) {\n root = $(root);\n // Initialise the course navigation elements.\n ViewNav.init(root);\n // Initialise the courses view modules.\n View.init(root);\n };\n\n return {\n init: init\n };\n});\n"],"file":"main.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/main.js"],"names":["define","$","View","ViewNav","init","root"],"mappings":"AAsBAA,OAAM,yBACN,CACI,QADJ,CAEI,uBAFJ,CAGI,2BAHJ,CADM,CAMN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIE,CAcE,MAAO,CACHC,IAAI,CATG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAe,CACtBA,CAAI,CAAGJ,CAAC,CAACI,CAAD,CAAR,CAEAF,CAAO,CAACC,IAAR,CAAaC,CAAb,EAEAH,CAAI,CAACE,IAAL,CAAUC,CAAV,CACH,CAEM,CAGV,CA3BK,CAAN","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 .\n\n/**\n * Javascript to initialise the myoverview block.\n *\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'block_myoverview/view',\n 'block_myoverview/view_nav'\n],\nfunction(\n $,\n View,\n ViewNav\n) {\n /**\n * Initialise all of the modules for the overview block.\n *\n * @param {object} root The root element for the overview block.\n */\n var init = function(root) {\n root = $(root);\n // Initialise the course navigation elements.\n ViewNav.init(root);\n // Initialise the courses view modules.\n View.init(root);\n };\n\n return {\n init: init\n };\n});\n"],"file":"main.min.js"} \ No newline at end of file diff --git a/blocks/myoverview/amd/build/repository.min.js.map b/blocks/myoverview/amd/build/repository.min.js.map index 1ceb1883e79..b7cb20a0fc8 100644 --- a/blocks/myoverview/amd/build/repository.min.js.map +++ b/blocks/myoverview/amd/build/repository.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/repository.js"],"names":["define","Ajax","Notification","getEnrolledCoursesByTimeline","args","promise","call","methodname","setFavouriteCourses","updateUserPreferences","fail","exception"],"mappings":"AAsBAA,OAAM,+BAAC,CAAC,WAAD,CAAc,mBAAd,CAAD,CAAqC,SAASC,CAAT,CAAeC,CAAf,CAA6B,CAyEpE,MAAO,CACHC,4BAA4B,CA3DG,QAA/BA,CAAAA,4BAA+B,CAASC,CAAT,CAAe,IAO1CC,CAAAA,CAAO,CAAGJ,CAAI,CAACK,IAAL,CAAU,CALV,CACVC,UAAU,CAAE,6DADF,CAEVH,IAAI,CAAEA,CAFI,CAKU,CAAV,EAAqB,CAArB,CAPgC,CAS9C,MAAOC,CAAAA,CACV,CAgDM,CAEHG,mBAAmB,CAvCG,QAAtBA,CAAAA,mBAAsB,CAASJ,CAAT,CAAe,IAOjCC,CAAAA,CAAO,CAAGJ,CAAI,CAACK,IAAL,CAAU,CALV,CACVC,UAAU,CAAE,mCADF,CAEVH,IAAI,CAAEA,CAFI,CAKU,CAAV,EAAqB,CAArB,CAPuB,CASrC,MAAOC,CAAAA,CACV,CA2BM,CAGHI,qBAAqB,CAbG,QAAxBA,CAAAA,qBAAwB,CAASL,CAAT,CAAe,CAMvCH,CAAI,CAACK,IAAL,CAAU,CALI,CACVC,UAAU,CAAE,mCADF,CAEVH,IAAI,CAAEA,CAFI,CAKJ,CAAV,EAAqB,CAArB,EACKM,IADL,CACUR,CAAY,CAACS,SADvB,CAEH,CAEM,CAKV,CA9EK,CAAN","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 .\n\n/**\n * A javascript module to retrieve enrolled coruses from the server.\n *\n * @package block_myoverview\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/ajax', 'core/notification'], function(Ajax, Notification) {\n\n /**\n * Retrieve a list of enrolled courses.\n *\n * Valid args are:\n * string classification future, inprogress, past\n * int limit number of records to retreive\n * int Offset offset for pagination\n * int sort sort by lastaccess or name\n *\n * @method getEnrolledCoursesByTimeline\n * @param {object} args The request arguments\n * @return {promise} Resolved with an array of courses\n */\n var getEnrolledCoursesByTimeline = function(args) {\n\n var request = {\n methodname: 'core_course_get_enrolled_courses_by_timeline_classification',\n args: args\n };\n\n var promise = Ajax.call([request])[0];\n\n return promise;\n };\n\n /**\n * Set the favourite state on a list of courses.\n *\n * Valid args are:\n * Array courses list of course id numbers.\n *\n * @param {Object} args Arguments send to the webservice.\n * @return {Promise} Resolve with warnings.\n */\n var setFavouriteCourses = function(args) {\n\n var request = {\n methodname: 'core_course_set_favourite_courses',\n args: args\n };\n\n var promise = Ajax.call([request])[0];\n\n return promise;\n };\n\n /**\n * Update the user preferences.\n *\n * @param {Object} args Arguments send to the webservice.\n *\n * Sample args:\n * {\n * preferences: [\n * {\n * type: 'block_example_user_sort_preference'\n * value: 'title'\n * }\n * ]\n * }\n */\n var updateUserPreferences = function(args) {\n var request = {\n methodname: 'core_user_update_user_preferences',\n args: args\n };\n\n Ajax.call([request])[0]\n .fail(Notification.exception);\n };\n\n return {\n getEnrolledCoursesByTimeline: getEnrolledCoursesByTimeline,\n setFavouriteCourses: setFavouriteCourses,\n updateUserPreferences: updateUserPreferences\n };\n});\n"],"file":"repository.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/repository.js"],"names":["define","Ajax","Notification","getEnrolledCoursesByTimeline","args","promise","call","methodname","setFavouriteCourses","updateUserPreferences","fail","exception"],"mappings":"AAqBAA,OAAM,+BAAC,CAAC,WAAD,CAAc,mBAAd,CAAD,CAAqC,SAASC,CAAT,CAAeC,CAAf,CAA6B,CAyEpE,MAAO,CACHC,4BAA4B,CA3DG,QAA/BA,CAAAA,4BAA+B,CAASC,CAAT,CAAe,IAO1CC,CAAAA,CAAO,CAAGJ,CAAI,CAACK,IAAL,CAAU,CALV,CACVC,UAAU,CAAE,6DADF,CAEVH,IAAI,CAAEA,CAFI,CAKU,CAAV,EAAqB,CAArB,CAPgC,CAS9C,MAAOC,CAAAA,CACV,CAgDM,CAEHG,mBAAmB,CAvCG,QAAtBA,CAAAA,mBAAsB,CAASJ,CAAT,CAAe,IAOjCC,CAAAA,CAAO,CAAGJ,CAAI,CAACK,IAAL,CAAU,CALV,CACVC,UAAU,CAAE,mCADF,CAEVH,IAAI,CAAEA,CAFI,CAKU,CAAV,EAAqB,CAArB,CAPuB,CASrC,MAAOC,CAAAA,CACV,CA2BM,CAGHI,qBAAqB,CAbG,QAAxBA,CAAAA,qBAAwB,CAASL,CAAT,CAAe,CAMvCH,CAAI,CAACK,IAAL,CAAU,CALI,CACVC,UAAU,CAAE,mCADF,CAEVH,IAAI,CAAEA,CAFI,CAKJ,CAAV,EAAqB,CAArB,EACKM,IADL,CACUR,CAAY,CAACS,SADvB,CAEH,CAEM,CAKV,CA9EK,CAAN","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 .\n\n/**\n * A javascript module to retrieve enrolled coruses from the server.\n *\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/ajax', 'core/notification'], function(Ajax, Notification) {\n\n /**\n * Retrieve a list of enrolled courses.\n *\n * Valid args are:\n * string classification future, inprogress, past\n * int limit number of records to retreive\n * int Offset offset for pagination\n * int sort sort by lastaccess or name\n *\n * @method getEnrolledCoursesByTimeline\n * @param {object} args The request arguments\n * @return {promise} Resolved with an array of courses\n */\n var getEnrolledCoursesByTimeline = function(args) {\n\n var request = {\n methodname: 'core_course_get_enrolled_courses_by_timeline_classification',\n args: args\n };\n\n var promise = Ajax.call([request])[0];\n\n return promise;\n };\n\n /**\n * Set the favourite state on a list of courses.\n *\n * Valid args are:\n * Array courses list of course id numbers.\n *\n * @param {Object} args Arguments send to the webservice.\n * @return {Promise} Resolve with warnings.\n */\n var setFavouriteCourses = function(args) {\n\n var request = {\n methodname: 'core_course_set_favourite_courses',\n args: args\n };\n\n var promise = Ajax.call([request])[0];\n\n return promise;\n };\n\n /**\n * Update the user preferences.\n *\n * @param {Object} args Arguments send to the webservice.\n *\n * Sample args:\n * {\n * preferences: [\n * {\n * type: 'block_example_user_sort_preference'\n * value: 'title'\n * }\n * ]\n * }\n */\n var updateUserPreferences = function(args) {\n var request = {\n methodname: 'core_user_update_user_preferences',\n args: args\n };\n\n Ajax.call([request])[0]\n .fail(Notification.exception);\n };\n\n return {\n getEnrolledCoursesByTimeline: getEnrolledCoursesByTimeline,\n setFavouriteCourses: setFavouriteCourses,\n updateUserPreferences: updateUserPreferences\n };\n});\n"],"file":"repository.min.js"} \ No newline at end of file diff --git a/blocks/myoverview/amd/build/selectors.min.js.map b/blocks/myoverview/amd/build/selectors.min.js.map index d02ccf8698d..b0855112ff2 100644 --- a/blocks/myoverview/amd/build/selectors.min.js.map +++ b/blocks/myoverview/amd/build/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/selectors.js"],"names":["define","courseView","region","regionContent"],"mappings":"AAuBAA,OAAM,8BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,UAAU,CAAE,CACRC,MAAM,CAAE,gCADA,CAERC,aAAa,CAAE,uCAFP,CADT,CAMV,CAPK,CAAN","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 .\n\n/**\n * Javascript to initialise the selectors for the myoverview block.\n *\n * @package block_myoverview\n * @copyright 2018 Peter Dias \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine([], function() {\n return {\n courseView: {\n region: '[data-region=\"courses-view\"]',\n regionContent: '[data-region=\"course-view-content\"]'\n }\n };\n});\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/selectors.js"],"names":["define","courseView","region","regionContent"],"mappings":"AAsBAA,OAAM,8BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,UAAU,CAAE,CACRC,MAAM,CAAE,gCADA,CAERC,aAAa,CAAE,uCAFP,CADT,CAMV,CAPK,CAAN","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 .\n\n/**\n * Javascript to initialise the selectors for the myoverview block.\n *\n * @copyright 2018 Peter Dias \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine([], function() {\n return {\n courseView: {\n region: '[data-region=\"courses-view\"]',\n regionContent: '[data-region=\"course-view-content\"]'\n }\n };\n});\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/blocks/myoverview/amd/build/view.min.js.map b/blocks/myoverview/amd/build/view.min.js.map index e2389482f40..3c302447c5d 100644 --- a/blocks/myoverview/amd/build/view.min.js.map +++ b/blocks/myoverview/amd/build/view.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view.js"],"names":["define","$","Repository","PagedContentFactory","PubSub","CustomEvents","Notification","Templates","CourseEvents","Selectors","PagedContentEvents","Aria","SELECTORS","COURSE_REGION","ACTION_HIDE_COURSE","ACTION_SHOW_COURSE","ACTION_ADD_FAVOURITE","ACTION_REMOVE_FAVOURITE","FAVOURITE_ICON","ICON_IS_FAVOURITE","ICON_NOT_FAVOURITE","PAGED_CONTENT_CONTAINER","TEMPLATES","COURSES_CARDS","COURSES_LIST","COURSES_SUMMARY","NOCOURSES","GROUPINGS","GROUPING_ALLINCLUDINGHIDDEN","GROUPING_ALL","GROUPING_INPROGRESS","GROUPING_FUTURE","GROUPING_PAST","GROUPING_FAVOURITES","GROUPING_HIDDEN","NUMCOURSES_PERPAGE","loadedPages","courseOffset","lastPage","lastLimit","namespace","getFilterValues","root","courseRegion","find","courseView","region","display","attr","grouping","sort","displaycategories","customfieldname","customfieldvalue","DEFAULT_PAGED_CONTENT_CONFIG","ignoreControlWhileLoading","controlPlacementBottom","persistentLimitKey","getMyCourses","filters","limit","getEnrolledCoursesByTimeline","offset","classification","getFavouriteIconContainer","courseId","getPagedContentContainer","index","getCourseId","hideFavouriteIcon","iconContainer","isFavouriteIcon","addClass","hide","notFavourteIcon","removeClass","unhide","showFavouriteIcon","getAddFavouriteMenuItem","getRemoveFavouriteMenuItem","addToFavourites","removeAction","addAction","setCourseFavouriteState","then","success","publish","favourited","alert","catch","exception","removeFromFavourites","unfavorited","getHideCourseMenuItem","getShowCourseMenuItem","hideCourse","hideAction","showAction","setCourseHiddenState","hideElement","showCourse","status","updateUserPreferences","preferences","type","value","id","pagingBar","jumpto","parseInt","courseList","reducedCourse","courses","reduce","accumulator","current","push","newElement","slice","forEach","popElement","merge","length","pagedContentContainer","resetLastPageNumber","pagedContentPage","renderCourses","html","js","replaceNodeContents","page","remove","setFavouriteCourses","result","warnings","course","isfavourite","coursesData","currentTemplate","map","showcoursecategory","render","nocoursesimg","setLimit","registerPagedEventHandlers","event","SET_ITEMS_PER_PAGE_LIMIT","subscribe","bind","initializePagedContent","Math","random","pagingLimit","itemsPerPage","active","totalCourseCount","filter","pagingOption","config","extend","eventNamespace","pagedContentPromise","createWithLimit","pagesData","actions","promises","pageData","currentPage","pageNumber","allItemsLoaded","pagePromise","nextPageStart","pageCourses","currentPageLength","remainingCourses","nextoffset","registerEventListeners","events","activate","on","e","data","favourite","target","closest","originalEvent","preventDefault","init","reset"],"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 .\n\n/**\n * Manage the courses view for the overview block.\n *\n * @package block_myoverview\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'block_myoverview/repository',\n 'core/paged_content_factory',\n 'core/pubsub',\n 'core/custom_interaction_events',\n 'core/notification',\n 'core/templates',\n 'core_course/events',\n 'block_myoverview/selectors',\n 'core/paged_content_events',\n 'core/aria',\n],\nfunction(\n $,\n Repository,\n PagedContentFactory,\n PubSub,\n CustomEvents,\n Notification,\n Templates,\n CourseEvents,\n Selectors,\n PagedContentEvents,\n Aria\n) {\n\n var SELECTORS = {\n COURSE_REGION: '[data-region=\"course-view-content\"]',\n ACTION_HIDE_COURSE: '[data-action=\"hide-course\"]',\n ACTION_SHOW_COURSE: '[data-action=\"show-course\"]',\n ACTION_ADD_FAVOURITE: '[data-action=\"add-favourite\"]',\n ACTION_REMOVE_FAVOURITE: '[data-action=\"remove-favourite\"]',\n FAVOURITE_ICON: '[data-region=\"favourite-icon\"]',\n ICON_IS_FAVOURITE: '[data-region=\"is-favourite\"]',\n ICON_NOT_FAVOURITE: '[data-region=\"not-favourite\"]',\n PAGED_CONTENT_CONTAINER: '[data-region=\"page-container\"]'\n\n };\n\n var TEMPLATES = {\n COURSES_CARDS: 'block_myoverview/view-cards',\n COURSES_LIST: 'block_myoverview/view-list',\n COURSES_SUMMARY: 'block_myoverview/view-summary',\n NOCOURSES: 'core_course/no-courses'\n };\n\n var GROUPINGS = {\n GROUPING_ALLINCLUDINGHIDDEN: 'allincludinghidden',\n GROUPING_ALL: 'all',\n GROUPING_INPROGRESS: 'inprogress',\n GROUPING_FUTURE: 'future',\n GROUPING_PAST: 'past',\n GROUPING_FAVOURITES: 'favourites',\n GROUPING_HIDDEN: 'hidden'\n };\n\n var NUMCOURSES_PERPAGE = [12, 24, 48, 96, 0];\n\n var loadedPages = [];\n\n var courseOffset = 0;\n\n var lastPage = 0;\n\n var lastLimit = 0;\n\n var namespace = null;\n\n /**\n * Get filter values from DOM.\n *\n * @param {object} root The root element for the courses view.\n * @return {filters} Set filters.\n */\n var getFilterValues = function(root) {\n var courseRegion = root.find(Selectors.courseView.region);\n return {\n display: courseRegion.attr('data-display'),\n grouping: courseRegion.attr('data-grouping'),\n sort: courseRegion.attr('data-sort'),\n displaycategories: courseRegion.attr('data-displaycategories'),\n customfieldname: courseRegion.attr('data-customfieldname'),\n customfieldvalue: courseRegion.attr('data-customfieldvalue'),\n };\n };\n\n // We want the paged content controls below the paged content area.\n // and the controls should be ignored while data is loading.\n var DEFAULT_PAGED_CONTENT_CONFIG = {\n ignoreControlWhileLoading: true,\n controlPlacementBottom: true,\n persistentLimitKey: 'block_myoverview_user_paging_preference'\n };\n\n /**\n * Get enrolled courses from backend.\n *\n * @param {object} filters The filters for this view.\n * @param {int} limit The number of courses to show.\n * @return {promise} Resolved with an array of courses.\n */\n var getMyCourses = function(filters, limit) {\n\n return Repository.getEnrolledCoursesByTimeline({\n offset: courseOffset,\n limit: limit,\n classification: filters.grouping,\n sort: filters.sort,\n customfieldname: filters.customfieldname,\n customfieldvalue: filters.customfieldvalue\n });\n };\n\n /**\n * Get the container element for the favourite icon.\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n * @return {Object} The favourite icon container\n */\n var getFavouriteIconContainer = function(root, courseId) {\n return root.find(SELECTORS.FAVOURITE_ICON + '[data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Get the paged content container element.\n *\n * @param {Object} root The course overview container\n * @param {Number} index Rendered page index.\n * @return {Object} The rendered paged container.\n */\n var getPagedContentContainer = function(root, index) {\n return root.find('[data-region=\"paged-content-page\"][data-page=\"' + index + '\"]');\n };\n\n /**\n * Get the course id from a favourite element.\n *\n * @param {Object} root The favourite icon container element.\n * @return {Number} Course id.\n */\n var getCourseId = function(root) {\n return root.attr('data-course-id');\n };\n\n /**\n * Hide the favourite icon.\n *\n * @param {Object} root The favourite icon container element.\n * @param {Number} courseId Course id number.\n */\n var hideFavouriteIcon = function(root, courseId) {\n var iconContainer = getFavouriteIconContainer(root, courseId);\n\n var isFavouriteIcon = iconContainer.find(SELECTORS.ICON_IS_FAVOURITE);\n isFavouriteIcon.addClass('hidden');\n Aria.hide(isFavouriteIcon);\n\n var notFavourteIcon = iconContainer.find(SELECTORS.ICON_NOT_FAVOURITE);\n notFavourteIcon.removeClass('hidden');\n Aria.unhide(notFavourteIcon);\n };\n\n /**\n * Show the favourite icon.\n *\n * @param {Object} root The course overview container.\n * @param {Number} courseId Course id number.\n */\n var showFavouriteIcon = function(root, courseId) {\n var iconContainer = getFavouriteIconContainer(root, courseId);\n\n var isFavouriteIcon = iconContainer.find(SELECTORS.ICON_IS_FAVOURITE);\n isFavouriteIcon.removeClass('hidden');\n Aria.unhide(isFavouriteIcon);\n\n var notFavourteIcon = iconContainer.find(SELECTORS.ICON_NOT_FAVOURITE);\n notFavourteIcon.addClass('hidden');\n Aria.hide(notFavourteIcon);\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The add to favourite menu item.\n */\n var getAddFavouriteMenuItem = function(root, courseId) {\n return root.find('[data-action=\"add-favourite\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The remove from favourites menu item.\n */\n var getRemoveFavouriteMenuItem = function(root, courseId) {\n return root.find('[data-action=\"remove-favourite\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Add course to favourites\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var addToFavourites = function(root, courseId) {\n var removeAction = getRemoveFavouriteMenuItem(root, courseId);\n var addAction = getAddFavouriteMenuItem(root, courseId);\n\n setCourseFavouriteState(courseId, true).then(function(success) {\n if (success) {\n PubSub.publish(CourseEvents.favourited, courseId);\n removeAction.removeClass('hidden');\n addAction.addClass('hidden');\n showFavouriteIcon(root, courseId);\n } else {\n Notification.alert('Starring course failed', 'Could not change favourite state');\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Remove course from favourites\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var removeFromFavourites = function(root, courseId) {\n var removeAction = getRemoveFavouriteMenuItem(root, courseId);\n var addAction = getAddFavouriteMenuItem(root, courseId);\n\n setCourseFavouriteState(courseId, false).then(function(success) {\n if (success) {\n PubSub.publish(CourseEvents.unfavorited, courseId);\n removeAction.addClass('hidden');\n addAction.removeClass('hidden');\n hideFavouriteIcon(root, courseId);\n } else {\n Notification.alert('Starring course failed', 'Could not change favourite state');\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The hide course menu item.\n */\n var getHideCourseMenuItem = function(root, courseId) {\n return root.find('[data-action=\"hide-course\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The show course menu item.\n */\n var getShowCourseMenuItem = function(root, courseId) {\n return root.find('[data-action=\"show-course\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Hide course\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var hideCourse = function(root, courseId) {\n var hideAction = getHideCourseMenuItem(root, courseId);\n var showAction = getShowCourseMenuItem(root, courseId);\n var filters = getFilterValues(root);\n\n setCourseHiddenState(courseId, true);\n\n // Remove the course from this view as it is now hidden and thus not covered by this view anymore.\n // Do only if we are not in \"All\" view mode where really all courses are shown.\n if (filters.grouping != GROUPINGS.GROUPING_ALLINCLUDINGHIDDEN) {\n hideElement(root, courseId);\n }\n\n hideAction.addClass('hidden');\n showAction.removeClass('hidden');\n };\n\n /**\n * Show course\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var showCourse = function(root, courseId) {\n var hideAction = getHideCourseMenuItem(root, courseId);\n var showAction = getShowCourseMenuItem(root, courseId);\n var filters = getFilterValues(root);\n\n setCourseHiddenState(courseId, null);\n\n // Remove the course from this view as it is now shown again and thus not covered by this view anymore.\n // Do only if we are not in \"All\" view mode where really all courses are shown.\n if (filters.grouping != GROUPINGS.GROUPING_ALLINCLUDINGHIDDEN) {\n hideElement(root, courseId);\n }\n\n hideAction.removeClass('hidden');\n showAction.addClass('hidden');\n };\n\n /**\n * Set the courses hidden status and push to repository\n *\n * @param {Number} courseId Course id to favourite.\n * @param {Bool} status new hidden status.\n * @return {Promise} Repository promise.\n */\n var setCourseHiddenState = function(courseId, status) {\n\n // If the given status is not hidden, the preference has to be deleted with a null value.\n if (status === false) {\n status = null;\n }\n return Repository.updateUserPreferences({\n preferences: [\n {\n type: 'block_myoverview_hidden_course_' + courseId,\n value: status\n }\n ]\n });\n };\n\n /**\n * Reset the loadedPages dataset to take into account the hidden element\n *\n * @param {Object} root The course overview container\n * @param {Number} id The course id number\n */\n var hideElement = function(root, id) {\n var pagingBar = root.find('[data-region=\"paging-bar\"]');\n var jumpto = parseInt(pagingBar.attr('data-active-page-number'));\n\n // Get a reduced dataset for the current page.\n var courseList = loadedPages[jumpto];\n var reducedCourse = courseList.courses.reduce(function(accumulator, current) {\n if (id != current.id) {\n accumulator.push(current);\n }\n return accumulator;\n }, []);\n\n // Get the next page's data if loaded and pop the first element from it\n if (loadedPages[jumpto + 1] != undefined) {\n var newElement = loadedPages[jumpto + 1].courses.slice(0, 1);\n\n // Adjust the dataset for the reset of the pages that are loaded\n loadedPages.forEach(function(courseList, index) {\n if (index > jumpto) {\n var popElement = [];\n if (loadedPages[index + 1] != undefined) {\n popElement = loadedPages[index + 1].courses.slice(0, 1);\n }\n\n loadedPages[index].courses = $.merge(loadedPages[index].courses.slice(1), popElement);\n }\n });\n\n\n reducedCourse = $.merge(reducedCourse, newElement);\n }\n\n // Check if the next page is the last page and if it still has data associated to it\n if (lastPage == jumpto + 1 && loadedPages[jumpto + 1].courses.length == 0) {\n var pagedContentContainer = root.find('[data-region=\"paged-content-container\"]');\n PagedContentFactory.resetLastPageNumber($(pagedContentContainer).attr('id'), jumpto);\n }\n\n loadedPages[jumpto].courses = reducedCourse;\n\n // Reduce the course offset\n courseOffset--;\n\n // Render the paged content for the current\n var pagedContentPage = getPagedContentContainer(root, jumpto);\n renderCourses(root, loadedPages[jumpto]).then(function(html, js) {\n return Templates.replaceNodeContents(pagedContentPage, html, js);\n }).catch(Notification.exception);\n\n // Delete subsequent pages in order to trigger the callback\n loadedPages.forEach(function(courseList, index) {\n if (index > jumpto) {\n var page = getPagedContentContainer(root, index);\n page.remove();\n }\n });\n };\n\n /**\n * Set the courses favourite status and push to repository\n *\n * @param {Number} courseId Course id to favourite.\n * @param {Bool} status new favourite status.\n * @return {Promise} Repository promise.\n */\n var setCourseFavouriteState = function(courseId, status) {\n\n return Repository.setFavouriteCourses({\n courses: [\n {\n 'id': courseId,\n 'favourite': status\n }\n ]\n }).then(function(result) {\n if (result.warnings.length == 0) {\n loadedPages.forEach(function(courseList) {\n courseList.courses.forEach(function(course, index) {\n if (course.id == courseId) {\n courseList.courses[index].isfavourite = status;\n }\n });\n });\n return true;\n } else {\n return false;\n }\n }).catch(Notification.exception);\n };\n\n /**\n * Render the dashboard courses.\n *\n * @param {object} root The root element for the courses view.\n * @param {array} coursesData containing array of returned courses.\n * @return {promise} jQuery promise resolved after rendering is complete.\n */\n var renderCourses = function(root, coursesData) {\n\n var filters = getFilterValues(root);\n\n var currentTemplate = '';\n if (filters.display == 'card') {\n currentTemplate = TEMPLATES.COURSES_CARDS;\n } else if (filters.display == 'list') {\n currentTemplate = TEMPLATES.COURSES_LIST;\n } else {\n currentTemplate = TEMPLATES.COURSES_SUMMARY;\n }\n\n // Whether the course category should be displayed in the course item.\n coursesData.courses = coursesData.courses.map(function(course) {\n course.showcoursecategory = filters.displaycategories == 'on' ? true : false;\n return course;\n });\n\n if (coursesData.courses.length) {\n return Templates.render(currentTemplate, {\n courses: coursesData.courses,\n });\n } else {\n var nocoursesimg = root.find(Selectors.courseView.region).attr('data-nocoursesimg');\n return Templates.render(TEMPLATES.NOCOURSES, {\n nocoursesimg: nocoursesimg\n });\n }\n };\n\n /**\n * Return the callback to be passed to the subscribe event\n *\n * @param {Number} limit The paged limit that is passed through the event\n */\n var setLimit = function(limit) {\n this.find(Selectors.courseView.region).attr('data-paging', limit);\n };\n\n /**\n * Intialise the paged list and cards views on page load.\n * Returns an array of paged contents that we would like to handle here\n *\n * @param {object} root The root element for the courses view\n * @param {string} namespace The namespace for all the events attached\n */\n var registerPagedEventHandlers = function(root, namespace) {\n var event = namespace + PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;\n PubSub.subscribe(event, setLimit.bind(root));\n };\n\n /**\n * Intialise the courses list and cards views on page load.\n *\n * @param {object} root The root element for the courses view.\n * @param {object} content The content element for the courses view.\n */\n var initializePagedContent = function(root) {\n namespace = \"block_myoverview_\" + root.attr('id') + \"_\" + Math.random();\n\n var pagingLimit = parseInt(root.find(Selectors.courseView.region).attr('data-paging'), 10);\n var itemsPerPage = NUMCOURSES_PERPAGE.map(function(value) {\n var active = false;\n if (value == pagingLimit) {\n active = true;\n }\n\n return {\n value: value,\n active: active\n };\n });\n\n // Filter out all pagination options which are too large for the amount of courses user is enrolled in.\n var totalCourseCount = parseInt(root.find(Selectors.courseView.region).attr('data-totalcoursecount'), 10);\n itemsPerPage = itemsPerPage.filter(function(pagingOption) {\n return pagingOption.value < totalCourseCount || pagingOption.value === 0;\n });\n\n var filters = getFilterValues(root);\n var config = $.extend({}, DEFAULT_PAGED_CONTENT_CONFIG);\n config.eventNamespace = namespace;\n\n var pagedContentPromise = PagedContentFactory.createWithLimit(\n itemsPerPage,\n function(pagesData, actions) {\n var promises = [];\n\n pagesData.forEach(function(pageData) {\n var currentPage = pageData.pageNumber;\n var limit = (pageData.limit > 0) ? pageData.limit : 0;\n\n // Reset local variables if limits have changed\n if (lastLimit != limit) {\n loadedPages = [];\n courseOffset = 0;\n lastPage = 0;\n }\n\n if (lastPage == currentPage) {\n // If we are on the last page and have it's data then load it from cache\n actions.allItemsLoaded(lastPage);\n promises.push(renderCourses(root, loadedPages[currentPage]));\n return;\n }\n\n lastLimit = limit;\n\n // Get 2 pages worth of data as we will need it for the hidden functionality.\n if (loadedPages[currentPage + 1] == undefined) {\n if (loadedPages[currentPage] == undefined) {\n limit *= 2;\n }\n }\n\n var pagePromise = getMyCourses(\n filters,\n limit\n ).then(function(coursesData) {\n var courses = coursesData.courses;\n var nextPageStart = 0;\n var pageCourses = [];\n\n // If current page's data is loaded make sure we max it to page limit\n if (loadedPages[currentPage] != undefined) {\n pageCourses = loadedPages[currentPage].courses;\n var currentPageLength = pageCourses.length;\n if (currentPageLength < pageData.limit) {\n nextPageStart = pageData.limit - currentPageLength;\n pageCourses = $.merge(loadedPages[currentPage].courses, courses.slice(0, nextPageStart));\n }\n } else {\n // When the page limit is zero, there is only one page of courses, no start for next page.\n nextPageStart = pageData.limit || false;\n pageCourses = (pageData.limit > 0) ? courses.slice(0, pageData.limit) : courses;\n }\n\n // Finished setting up the current page\n loadedPages[currentPage] = {\n courses: pageCourses\n };\n\n // Set up the next page (if there is more than one page).\n var remainingCourses = nextPageStart !== false ? courses.slice(nextPageStart, courses.length) : [];\n if (remainingCourses.length) {\n loadedPages[currentPage + 1] = {\n courses: remainingCourses\n };\n }\n\n // Set the last page to either the current or next page\n if (loadedPages[currentPage].courses.length < pageData.limit || !remainingCourses.length) {\n lastPage = currentPage;\n actions.allItemsLoaded(currentPage);\n } else if (loadedPages[currentPage + 1] != undefined\n && loadedPages[currentPage + 1].courses.length < pageData.limit) {\n lastPage = currentPage + 1;\n }\n\n courseOffset = coursesData.nextoffset;\n return renderCourses(root, loadedPages[currentPage]);\n })\n .catch(Notification.exception);\n\n promises.push(pagePromise);\n });\n\n return promises;\n },\n config\n );\n\n pagedContentPromise.then(function(html, js) {\n registerPagedEventHandlers(root, namespace);\n return Templates.replaceNodeContents(root.find(Selectors.courseView.region), html, js);\n }).catch(Notification.exception);\n };\n\n /**\n * Listen to, and handle events for the myoverview block.\n *\n * @param {Object} root The myoverview block container element.\n */\n var registerEventListeners = function(root) {\n CustomEvents.define(root, [\n CustomEvents.events.activate\n ]);\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_ADD_FAVOURITE, function(e, data) {\n var favourite = $(e.target).closest(SELECTORS.ACTION_ADD_FAVOURITE);\n var courseId = getCourseId(favourite);\n addToFavourites(root, courseId);\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_REMOVE_FAVOURITE, function(e, data) {\n var favourite = $(e.target).closest(SELECTORS.ACTION_REMOVE_FAVOURITE);\n var courseId = getCourseId(favourite);\n removeFromFavourites(root, courseId);\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.FAVOURITE_ICON, function(e, data) {\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_HIDE_COURSE, function(e, data) {\n var target = $(e.target).closest(SELECTORS.ACTION_HIDE_COURSE);\n var courseId = getCourseId(target);\n hideCourse(root, courseId);\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_SHOW_COURSE, function(e, data) {\n var target = $(e.target).closest(SELECTORS.ACTION_SHOW_COURSE);\n var courseId = getCourseId(target);\n showCourse(root, courseId);\n data.originalEvent.preventDefault();\n });\n };\n\n /**\n * Intialise the courses list and cards views on page load.\n *\n * @param {object} root The root element for the courses view.\n */\n var init = function(root) {\n root = $(root);\n loadedPages = [];\n lastPage = 0;\n courseOffset = 0;\n\n initializePagedContent(root);\n\n if (!root.attr('data-init')) {\n registerEventListeners(root);\n root.attr('data-init', true);\n }\n };\n\n /**\n\n * Reset the courses views to their original\n * state on first page load.courseOffset\n *\n * This is called when configuration has changed for the event lists\n * to cause them to reload their data.\n *\n * @param {Object} root The root element for the timeline view.\n */\n var reset = function(root) {\n if (loadedPages.length > 0) {\n loadedPages.forEach(function(courseList, index) {\n var pagedContentPage = getPagedContentContainer(root, index);\n renderCourses(root, courseList).then(function(html, js) {\n return Templates.replaceNodeContents(pagedContentPage, html, js);\n }).catch(Notification.exception);\n });\n } else {\n init(root);\n }\n };\n\n return {\n init: init,\n reset: reset\n };\n});\n"],"file":"view.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view.js"],"names":["define","$","Repository","PagedContentFactory","PubSub","CustomEvents","Notification","Templates","CourseEvents","Selectors","PagedContentEvents","Aria","SELECTORS","COURSE_REGION","ACTION_HIDE_COURSE","ACTION_SHOW_COURSE","ACTION_ADD_FAVOURITE","ACTION_REMOVE_FAVOURITE","FAVOURITE_ICON","ICON_IS_FAVOURITE","ICON_NOT_FAVOURITE","PAGED_CONTENT_CONTAINER","TEMPLATES","COURSES_CARDS","COURSES_LIST","COURSES_SUMMARY","NOCOURSES","GROUPINGS","GROUPING_ALLINCLUDINGHIDDEN","GROUPING_ALL","GROUPING_INPROGRESS","GROUPING_FUTURE","GROUPING_PAST","GROUPING_FAVOURITES","GROUPING_HIDDEN","NUMCOURSES_PERPAGE","loadedPages","courseOffset","lastPage","lastLimit","namespace","getFilterValues","root","courseRegion","find","courseView","region","display","attr","grouping","sort","displaycategories","customfieldname","customfieldvalue","DEFAULT_PAGED_CONTENT_CONFIG","ignoreControlWhileLoading","controlPlacementBottom","persistentLimitKey","getMyCourses","filters","limit","getEnrolledCoursesByTimeline","offset","classification","getFavouriteIconContainer","courseId","getPagedContentContainer","index","getCourseId","hideFavouriteIcon","iconContainer","isFavouriteIcon","addClass","hide","notFavourteIcon","removeClass","unhide","showFavouriteIcon","getAddFavouriteMenuItem","getRemoveFavouriteMenuItem","addToFavourites","removeAction","addAction","setCourseFavouriteState","then","success","publish","favourited","alert","catch","exception","removeFromFavourites","unfavorited","getHideCourseMenuItem","getShowCourseMenuItem","hideCourse","hideAction","showAction","setCourseHiddenState","hideElement","showCourse","status","updateUserPreferences","preferences","type","value","id","pagingBar","jumpto","parseInt","courseList","reducedCourse","courses","reduce","accumulator","current","push","newElement","slice","forEach","popElement","merge","length","pagedContentContainer","resetLastPageNumber","pagedContentPage","renderCourses","html","js","replaceNodeContents","page","remove","setFavouriteCourses","result","warnings","course","isfavourite","coursesData","currentTemplate","map","showcoursecategory","render","nocoursesimg","setLimit","registerPagedEventHandlers","event","SET_ITEMS_PER_PAGE_LIMIT","subscribe","bind","initializePagedContent","Math","random","pagingLimit","itemsPerPage","active","totalCourseCount","filter","pagingOption","config","extend","eventNamespace","pagedContentPromise","createWithLimit","pagesData","actions","promises","pageData","currentPage","pageNumber","allItemsLoaded","pagePromise","nextPageStart","pageCourses","currentPageLength","remainingCourses","nextoffset","registerEventListeners","events","activate","on","e","data","favourite","target","closest","originalEvent","preventDefault","init","reset"],"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 .\n\n/**\n * Manage the courses view for the overview block.\n *\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'block_myoverview/repository',\n 'core/paged_content_factory',\n 'core/pubsub',\n 'core/custom_interaction_events',\n 'core/notification',\n 'core/templates',\n 'core_course/events',\n 'block_myoverview/selectors',\n 'core/paged_content_events',\n 'core/aria',\n],\nfunction(\n $,\n Repository,\n PagedContentFactory,\n PubSub,\n CustomEvents,\n Notification,\n Templates,\n CourseEvents,\n Selectors,\n PagedContentEvents,\n Aria\n) {\n\n var SELECTORS = {\n COURSE_REGION: '[data-region=\"course-view-content\"]',\n ACTION_HIDE_COURSE: '[data-action=\"hide-course\"]',\n ACTION_SHOW_COURSE: '[data-action=\"show-course\"]',\n ACTION_ADD_FAVOURITE: '[data-action=\"add-favourite\"]',\n ACTION_REMOVE_FAVOURITE: '[data-action=\"remove-favourite\"]',\n FAVOURITE_ICON: '[data-region=\"favourite-icon\"]',\n ICON_IS_FAVOURITE: '[data-region=\"is-favourite\"]',\n ICON_NOT_FAVOURITE: '[data-region=\"not-favourite\"]',\n PAGED_CONTENT_CONTAINER: '[data-region=\"page-container\"]'\n\n };\n\n var TEMPLATES = {\n COURSES_CARDS: 'block_myoverview/view-cards',\n COURSES_LIST: 'block_myoverview/view-list',\n COURSES_SUMMARY: 'block_myoverview/view-summary',\n NOCOURSES: 'core_course/no-courses'\n };\n\n var GROUPINGS = {\n GROUPING_ALLINCLUDINGHIDDEN: 'allincludinghidden',\n GROUPING_ALL: 'all',\n GROUPING_INPROGRESS: 'inprogress',\n GROUPING_FUTURE: 'future',\n GROUPING_PAST: 'past',\n GROUPING_FAVOURITES: 'favourites',\n GROUPING_HIDDEN: 'hidden'\n };\n\n var NUMCOURSES_PERPAGE = [12, 24, 48, 96, 0];\n\n var loadedPages = [];\n\n var courseOffset = 0;\n\n var lastPage = 0;\n\n var lastLimit = 0;\n\n var namespace = null;\n\n /**\n * Get filter values from DOM.\n *\n * @param {object} root The root element for the courses view.\n * @return {filters} Set filters.\n */\n var getFilterValues = function(root) {\n var courseRegion = root.find(Selectors.courseView.region);\n return {\n display: courseRegion.attr('data-display'),\n grouping: courseRegion.attr('data-grouping'),\n sort: courseRegion.attr('data-sort'),\n displaycategories: courseRegion.attr('data-displaycategories'),\n customfieldname: courseRegion.attr('data-customfieldname'),\n customfieldvalue: courseRegion.attr('data-customfieldvalue'),\n };\n };\n\n // We want the paged content controls below the paged content area.\n // and the controls should be ignored while data is loading.\n var DEFAULT_PAGED_CONTENT_CONFIG = {\n ignoreControlWhileLoading: true,\n controlPlacementBottom: true,\n persistentLimitKey: 'block_myoverview_user_paging_preference'\n };\n\n /**\n * Get enrolled courses from backend.\n *\n * @param {object} filters The filters for this view.\n * @param {int} limit The number of courses to show.\n * @return {promise} Resolved with an array of courses.\n */\n var getMyCourses = function(filters, limit) {\n\n return Repository.getEnrolledCoursesByTimeline({\n offset: courseOffset,\n limit: limit,\n classification: filters.grouping,\n sort: filters.sort,\n customfieldname: filters.customfieldname,\n customfieldvalue: filters.customfieldvalue\n });\n };\n\n /**\n * Get the container element for the favourite icon.\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n * @return {Object} The favourite icon container\n */\n var getFavouriteIconContainer = function(root, courseId) {\n return root.find(SELECTORS.FAVOURITE_ICON + '[data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Get the paged content container element.\n *\n * @param {Object} root The course overview container\n * @param {Number} index Rendered page index.\n * @return {Object} The rendered paged container.\n */\n var getPagedContentContainer = function(root, index) {\n return root.find('[data-region=\"paged-content-page\"][data-page=\"' + index + '\"]');\n };\n\n /**\n * Get the course id from a favourite element.\n *\n * @param {Object} root The favourite icon container element.\n * @return {Number} Course id.\n */\n var getCourseId = function(root) {\n return root.attr('data-course-id');\n };\n\n /**\n * Hide the favourite icon.\n *\n * @param {Object} root The favourite icon container element.\n * @param {Number} courseId Course id number.\n */\n var hideFavouriteIcon = function(root, courseId) {\n var iconContainer = getFavouriteIconContainer(root, courseId);\n\n var isFavouriteIcon = iconContainer.find(SELECTORS.ICON_IS_FAVOURITE);\n isFavouriteIcon.addClass('hidden');\n Aria.hide(isFavouriteIcon);\n\n var notFavourteIcon = iconContainer.find(SELECTORS.ICON_NOT_FAVOURITE);\n notFavourteIcon.removeClass('hidden');\n Aria.unhide(notFavourteIcon);\n };\n\n /**\n * Show the favourite icon.\n *\n * @param {Object} root The course overview container.\n * @param {Number} courseId Course id number.\n */\n var showFavouriteIcon = function(root, courseId) {\n var iconContainer = getFavouriteIconContainer(root, courseId);\n\n var isFavouriteIcon = iconContainer.find(SELECTORS.ICON_IS_FAVOURITE);\n isFavouriteIcon.removeClass('hidden');\n Aria.unhide(isFavouriteIcon);\n\n var notFavourteIcon = iconContainer.find(SELECTORS.ICON_NOT_FAVOURITE);\n notFavourteIcon.addClass('hidden');\n Aria.hide(notFavourteIcon);\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The add to favourite menu item.\n */\n var getAddFavouriteMenuItem = function(root, courseId) {\n return root.find('[data-action=\"add-favourite\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The remove from favourites menu item.\n */\n var getRemoveFavouriteMenuItem = function(root, courseId) {\n return root.find('[data-action=\"remove-favourite\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Add course to favourites\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var addToFavourites = function(root, courseId) {\n var removeAction = getRemoveFavouriteMenuItem(root, courseId);\n var addAction = getAddFavouriteMenuItem(root, courseId);\n\n setCourseFavouriteState(courseId, true).then(function(success) {\n if (success) {\n PubSub.publish(CourseEvents.favourited, courseId);\n removeAction.removeClass('hidden');\n addAction.addClass('hidden');\n showFavouriteIcon(root, courseId);\n } else {\n Notification.alert('Starring course failed', 'Could not change favourite state');\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Remove course from favourites\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var removeFromFavourites = function(root, courseId) {\n var removeAction = getRemoveFavouriteMenuItem(root, courseId);\n var addAction = getAddFavouriteMenuItem(root, courseId);\n\n setCourseFavouriteState(courseId, false).then(function(success) {\n if (success) {\n PubSub.publish(CourseEvents.unfavorited, courseId);\n removeAction.addClass('hidden');\n addAction.removeClass('hidden');\n hideFavouriteIcon(root, courseId);\n } else {\n Notification.alert('Starring course failed', 'Could not change favourite state');\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The hide course menu item.\n */\n var getHideCourseMenuItem = function(root, courseId) {\n return root.find('[data-action=\"hide-course\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Get the action menu item\n *\n * @param {Object} root root The course overview container\n * @param {Number} courseId Course id.\n * @return {Object} The show course menu item.\n */\n var getShowCourseMenuItem = function(root, courseId) {\n return root.find('[data-action=\"show-course\"][data-course-id=\"' + courseId + '\"]');\n };\n\n /**\n * Hide course\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var hideCourse = function(root, courseId) {\n var hideAction = getHideCourseMenuItem(root, courseId);\n var showAction = getShowCourseMenuItem(root, courseId);\n var filters = getFilterValues(root);\n\n setCourseHiddenState(courseId, true);\n\n // Remove the course from this view as it is now hidden and thus not covered by this view anymore.\n // Do only if we are not in \"All\" view mode where really all courses are shown.\n if (filters.grouping != GROUPINGS.GROUPING_ALLINCLUDINGHIDDEN) {\n hideElement(root, courseId);\n }\n\n hideAction.addClass('hidden');\n showAction.removeClass('hidden');\n };\n\n /**\n * Show course\n *\n * @param {Object} root The course overview container\n * @param {Number} courseId Course id number\n */\n var showCourse = function(root, courseId) {\n var hideAction = getHideCourseMenuItem(root, courseId);\n var showAction = getShowCourseMenuItem(root, courseId);\n var filters = getFilterValues(root);\n\n setCourseHiddenState(courseId, null);\n\n // Remove the course from this view as it is now shown again and thus not covered by this view anymore.\n // Do only if we are not in \"All\" view mode where really all courses are shown.\n if (filters.grouping != GROUPINGS.GROUPING_ALLINCLUDINGHIDDEN) {\n hideElement(root, courseId);\n }\n\n hideAction.removeClass('hidden');\n showAction.addClass('hidden');\n };\n\n /**\n * Set the courses hidden status and push to repository\n *\n * @param {Number} courseId Course id to favourite.\n * @param {Bool} status new hidden status.\n * @return {Promise} Repository promise.\n */\n var setCourseHiddenState = function(courseId, status) {\n\n // If the given status is not hidden, the preference has to be deleted with a null value.\n if (status === false) {\n status = null;\n }\n return Repository.updateUserPreferences({\n preferences: [\n {\n type: 'block_myoverview_hidden_course_' + courseId,\n value: status\n }\n ]\n });\n };\n\n /**\n * Reset the loadedPages dataset to take into account the hidden element\n *\n * @param {Object} root The course overview container\n * @param {Number} id The course id number\n */\n var hideElement = function(root, id) {\n var pagingBar = root.find('[data-region=\"paging-bar\"]');\n var jumpto = parseInt(pagingBar.attr('data-active-page-number'));\n\n // Get a reduced dataset for the current page.\n var courseList = loadedPages[jumpto];\n var reducedCourse = courseList.courses.reduce(function(accumulator, current) {\n if (id != current.id) {\n accumulator.push(current);\n }\n return accumulator;\n }, []);\n\n // Get the next page's data if loaded and pop the first element from it\n if (loadedPages[jumpto + 1] != undefined) {\n var newElement = loadedPages[jumpto + 1].courses.slice(0, 1);\n\n // Adjust the dataset for the reset of the pages that are loaded\n loadedPages.forEach(function(courseList, index) {\n if (index > jumpto) {\n var popElement = [];\n if (loadedPages[index + 1] != undefined) {\n popElement = loadedPages[index + 1].courses.slice(0, 1);\n }\n\n loadedPages[index].courses = $.merge(loadedPages[index].courses.slice(1), popElement);\n }\n });\n\n\n reducedCourse = $.merge(reducedCourse, newElement);\n }\n\n // Check if the next page is the last page and if it still has data associated to it\n if (lastPage == jumpto + 1 && loadedPages[jumpto + 1].courses.length == 0) {\n var pagedContentContainer = root.find('[data-region=\"paged-content-container\"]');\n PagedContentFactory.resetLastPageNumber($(pagedContentContainer).attr('id'), jumpto);\n }\n\n loadedPages[jumpto].courses = reducedCourse;\n\n // Reduce the course offset\n courseOffset--;\n\n // Render the paged content for the current\n var pagedContentPage = getPagedContentContainer(root, jumpto);\n renderCourses(root, loadedPages[jumpto]).then(function(html, js) {\n return Templates.replaceNodeContents(pagedContentPage, html, js);\n }).catch(Notification.exception);\n\n // Delete subsequent pages in order to trigger the callback\n loadedPages.forEach(function(courseList, index) {\n if (index > jumpto) {\n var page = getPagedContentContainer(root, index);\n page.remove();\n }\n });\n };\n\n /**\n * Set the courses favourite status and push to repository\n *\n * @param {Number} courseId Course id to favourite.\n * @param {Bool} status new favourite status.\n * @return {Promise} Repository promise.\n */\n var setCourseFavouriteState = function(courseId, status) {\n\n return Repository.setFavouriteCourses({\n courses: [\n {\n 'id': courseId,\n 'favourite': status\n }\n ]\n }).then(function(result) {\n if (result.warnings.length == 0) {\n loadedPages.forEach(function(courseList) {\n courseList.courses.forEach(function(course, index) {\n if (course.id == courseId) {\n courseList.courses[index].isfavourite = status;\n }\n });\n });\n return true;\n } else {\n return false;\n }\n }).catch(Notification.exception);\n };\n\n /**\n * Render the dashboard courses.\n *\n * @param {object} root The root element for the courses view.\n * @param {array} coursesData containing array of returned courses.\n * @return {promise} jQuery promise resolved after rendering is complete.\n */\n var renderCourses = function(root, coursesData) {\n\n var filters = getFilterValues(root);\n\n var currentTemplate = '';\n if (filters.display == 'card') {\n currentTemplate = TEMPLATES.COURSES_CARDS;\n } else if (filters.display == 'list') {\n currentTemplate = TEMPLATES.COURSES_LIST;\n } else {\n currentTemplate = TEMPLATES.COURSES_SUMMARY;\n }\n\n // Whether the course category should be displayed in the course item.\n coursesData.courses = coursesData.courses.map(function(course) {\n course.showcoursecategory = filters.displaycategories == 'on' ? true : false;\n return course;\n });\n\n if (coursesData.courses.length) {\n return Templates.render(currentTemplate, {\n courses: coursesData.courses,\n });\n } else {\n var nocoursesimg = root.find(Selectors.courseView.region).attr('data-nocoursesimg');\n return Templates.render(TEMPLATES.NOCOURSES, {\n nocoursesimg: nocoursesimg\n });\n }\n };\n\n /**\n * Return the callback to be passed to the subscribe event\n *\n * @param {Number} limit The paged limit that is passed through the event\n */\n var setLimit = function(limit) {\n this.find(Selectors.courseView.region).attr('data-paging', limit);\n };\n\n /**\n * Intialise the paged list and cards views on page load.\n * Returns an array of paged contents that we would like to handle here\n *\n * @param {object} root The root element for the courses view\n * @param {string} namespace The namespace for all the events attached\n */\n var registerPagedEventHandlers = function(root, namespace) {\n var event = namespace + PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;\n PubSub.subscribe(event, setLimit.bind(root));\n };\n\n /**\n * Intialise the courses list and cards views on page load.\n *\n * @param {object} root The root element for the courses view.\n * @param {object} content The content element for the courses view.\n */\n var initializePagedContent = function(root) {\n namespace = \"block_myoverview_\" + root.attr('id') + \"_\" + Math.random();\n\n var pagingLimit = parseInt(root.find(Selectors.courseView.region).attr('data-paging'), 10);\n var itemsPerPage = NUMCOURSES_PERPAGE.map(function(value) {\n var active = false;\n if (value == pagingLimit) {\n active = true;\n }\n\n return {\n value: value,\n active: active\n };\n });\n\n // Filter out all pagination options which are too large for the amount of courses user is enrolled in.\n var totalCourseCount = parseInt(root.find(Selectors.courseView.region).attr('data-totalcoursecount'), 10);\n itemsPerPage = itemsPerPage.filter(function(pagingOption) {\n return pagingOption.value < totalCourseCount || pagingOption.value === 0;\n });\n\n var filters = getFilterValues(root);\n var config = $.extend({}, DEFAULT_PAGED_CONTENT_CONFIG);\n config.eventNamespace = namespace;\n\n var pagedContentPromise = PagedContentFactory.createWithLimit(\n itemsPerPage,\n function(pagesData, actions) {\n var promises = [];\n\n pagesData.forEach(function(pageData) {\n var currentPage = pageData.pageNumber;\n var limit = (pageData.limit > 0) ? pageData.limit : 0;\n\n // Reset local variables if limits have changed\n if (lastLimit != limit) {\n loadedPages = [];\n courseOffset = 0;\n lastPage = 0;\n }\n\n if (lastPage == currentPage) {\n // If we are on the last page and have it's data then load it from cache\n actions.allItemsLoaded(lastPage);\n promises.push(renderCourses(root, loadedPages[currentPage]));\n return;\n }\n\n lastLimit = limit;\n\n // Get 2 pages worth of data as we will need it for the hidden functionality.\n if (loadedPages[currentPage + 1] == undefined) {\n if (loadedPages[currentPage] == undefined) {\n limit *= 2;\n }\n }\n\n var pagePromise = getMyCourses(\n filters,\n limit\n ).then(function(coursesData) {\n var courses = coursesData.courses;\n var nextPageStart = 0;\n var pageCourses = [];\n\n // If current page's data is loaded make sure we max it to page limit\n if (loadedPages[currentPage] != undefined) {\n pageCourses = loadedPages[currentPage].courses;\n var currentPageLength = pageCourses.length;\n if (currentPageLength < pageData.limit) {\n nextPageStart = pageData.limit - currentPageLength;\n pageCourses = $.merge(loadedPages[currentPage].courses, courses.slice(0, nextPageStart));\n }\n } else {\n // When the page limit is zero, there is only one page of courses, no start for next page.\n nextPageStart = pageData.limit || false;\n pageCourses = (pageData.limit > 0) ? courses.slice(0, pageData.limit) : courses;\n }\n\n // Finished setting up the current page\n loadedPages[currentPage] = {\n courses: pageCourses\n };\n\n // Set up the next page (if there is more than one page).\n var remainingCourses = nextPageStart !== false ? courses.slice(nextPageStart, courses.length) : [];\n if (remainingCourses.length) {\n loadedPages[currentPage + 1] = {\n courses: remainingCourses\n };\n }\n\n // Set the last page to either the current or next page\n if (loadedPages[currentPage].courses.length < pageData.limit || !remainingCourses.length) {\n lastPage = currentPage;\n actions.allItemsLoaded(currentPage);\n } else if (loadedPages[currentPage + 1] != undefined\n && loadedPages[currentPage + 1].courses.length < pageData.limit) {\n lastPage = currentPage + 1;\n }\n\n courseOffset = coursesData.nextoffset;\n return renderCourses(root, loadedPages[currentPage]);\n })\n .catch(Notification.exception);\n\n promises.push(pagePromise);\n });\n\n return promises;\n },\n config\n );\n\n pagedContentPromise.then(function(html, js) {\n registerPagedEventHandlers(root, namespace);\n return Templates.replaceNodeContents(root.find(Selectors.courseView.region), html, js);\n }).catch(Notification.exception);\n };\n\n /**\n * Listen to, and handle events for the myoverview block.\n *\n * @param {Object} root The myoverview block container element.\n */\n var registerEventListeners = function(root) {\n CustomEvents.define(root, [\n CustomEvents.events.activate\n ]);\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_ADD_FAVOURITE, function(e, data) {\n var favourite = $(e.target).closest(SELECTORS.ACTION_ADD_FAVOURITE);\n var courseId = getCourseId(favourite);\n addToFavourites(root, courseId);\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_REMOVE_FAVOURITE, function(e, data) {\n var favourite = $(e.target).closest(SELECTORS.ACTION_REMOVE_FAVOURITE);\n var courseId = getCourseId(favourite);\n removeFromFavourites(root, courseId);\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.FAVOURITE_ICON, function(e, data) {\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_HIDE_COURSE, function(e, data) {\n var target = $(e.target).closest(SELECTORS.ACTION_HIDE_COURSE);\n var courseId = getCourseId(target);\n hideCourse(root, courseId);\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ACTION_SHOW_COURSE, function(e, data) {\n var target = $(e.target).closest(SELECTORS.ACTION_SHOW_COURSE);\n var courseId = getCourseId(target);\n showCourse(root, courseId);\n data.originalEvent.preventDefault();\n });\n };\n\n /**\n * Intialise the courses list and cards views on page load.\n *\n * @param {object} root The root element for the courses view.\n */\n var init = function(root) {\n root = $(root);\n loadedPages = [];\n lastPage = 0;\n courseOffset = 0;\n\n initializePagedContent(root);\n\n if (!root.attr('data-init')) {\n registerEventListeners(root);\n root.attr('data-init', true);\n }\n };\n\n /**\n\n * Reset the courses views to their original\n * state on first page load.courseOffset\n *\n * This is called when configuration has changed for the event lists\n * to cause them to reload their data.\n *\n * @param {Object} root The root element for the timeline view.\n */\n var reset = function(root) {\n if (loadedPages.length > 0) {\n loadedPages.forEach(function(courseList, index) {\n var pagedContentPage = getPagedContentContainer(root, index);\n renderCourses(root, courseList).then(function(html, js) {\n return Templates.replaceNodeContents(pagedContentPage, html, js);\n }).catch(Notification.exception);\n });\n } else {\n init(root);\n }\n };\n\n return {\n init: init,\n reset: reset\n };\n});\n"],"file":"view.min.js"} \ No newline at end of file diff --git a/blocks/myoverview/amd/build/view_nav.min.js.map b/blocks/myoverview/amd/build/view_nav.min.js.map index 815b2ae722c..9dfc62fe450 100644 --- a/blocks/myoverview/amd/build/view_nav.min.js.map +++ b/blocks/myoverview/amd/build/view_nav.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view_nav.js"],"names":["define","$","CustomEvents","Repository","View","Selectors","SELECTORS","FILTERS","FILTER_OPTION","DISPLAY_OPTION","updatePreferences","filter","value","type","updateUserPreferences","preferences","registerSelector","root","Selector","find","events","activate","on","e","data","option","target","hasClass","attr","pref","customfieldvalue","courseView","region","init","originalEvent","preventDefault","reset"],"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 .\n\n/**\n * Manage the timeline view navigation for the overview block.\n *\n * @package block_myoverview\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'block_myoverview/repository',\n 'block_myoverview/view',\n 'block_myoverview/selectors'\n],\nfunction(\n $,\n CustomEvents,\n Repository,\n View,\n Selectors\n) {\n\n var SELECTORS = {\n FILTERS: '[data-region=\"filter\"]',\n FILTER_OPTION: '[data-filter]',\n DISPLAY_OPTION: '[data-display-option]'\n };\n\n /**\n * Update the user preference for the block.\n *\n * @param {String} filter The type of filter: display/sort/grouping.\n * @param {String} value The current preferred value.\n */\n var updatePreferences = function(filter, value) {\n var type = null;\n if (filter == 'display') {\n type = 'block_myoverview_user_view_preference';\n } else if (filter == 'sort') {\n type = 'block_myoverview_user_sort_preference';\n } else if (filter == 'customfieldvalue') {\n type = 'block_myoverview_user_grouping_customfieldvalue_preference';\n } else {\n type = 'block_myoverview_user_grouping_preference';\n }\n\n Repository.updateUserPreferences({\n preferences: [\n {\n type: type,\n value: value\n }\n ]\n });\n };\n\n /**\n * Event listener for the Display filter (cards, list).\n *\n * @param {object} root The root element for the overview block\n */\n var registerSelector = function(root) {\n\n var Selector = root.find(SELECTORS.FILTERS);\n\n CustomEvents.define(Selector, [CustomEvents.events.activate]);\n Selector.on(\n CustomEvents.events.activate,\n SELECTORS.FILTER_OPTION,\n function(e, data) {\n var option = $(e.target);\n\n if (option.hasClass('active')) {\n // If it's already active then we don't need to do anything.\n return;\n }\n\n var filter = option.attr('data-filter');\n var pref = option.attr('data-pref');\n var customfieldvalue = option.attr('data-customfieldvalue');\n\n root.find(Selectors.courseView.region).attr('data-' + filter, option.attr('data-value'));\n updatePreferences(filter, pref);\n\n if (customfieldvalue) {\n root.find(Selectors.courseView.region).attr('data-customfieldvalue', customfieldvalue);\n updatePreferences('customfieldvalue', customfieldvalue);\n }\n\n // Reset the views.\n View.init(root);\n\n data.originalEvent.preventDefault();\n }\n );\n\n CustomEvents.define(Selector, [CustomEvents.events.activate]);\n Selector.on(\n CustomEvents.events.activate,\n SELECTORS.DISPLAY_OPTION,\n function(e, data) {\n var option = $(e.target);\n\n if (option.hasClass('active')) {\n return;\n }\n\n var filter = option.attr('data-display-option');\n var pref = option.attr('data-pref');\n\n root.find(Selectors.courseView.region).attr('data-display', option.attr('data-value'));\n updatePreferences(filter, pref);\n View.reset(root);\n data.originalEvent.preventDefault();\n }\n );\n };\n\n /**\n * Initialise the timeline view navigation by adding event listeners to\n * the navigation elements.\n *\n * @param {object} root The root element for the myoverview block\n */\n var init = function(root) {\n root = $(root);\n registerSelector(root);\n };\n\n return {\n init: init\n };\n});\n"],"file":"view_nav.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view_nav.js"],"names":["define","$","CustomEvents","Repository","View","Selectors","SELECTORS","FILTERS","FILTER_OPTION","DISPLAY_OPTION","updatePreferences","filter","value","type","updateUserPreferences","preferences","registerSelector","root","Selector","find","events","activate","on","e","data","option","target","hasClass","attr","pref","customfieldvalue","courseView","region","init","originalEvent","preventDefault","reset"],"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 .\n\n/**\n * Manage the timeline view navigation for the overview block.\n *\n * @copyright 2018 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'block_myoverview/repository',\n 'block_myoverview/view',\n 'block_myoverview/selectors'\n],\nfunction(\n $,\n CustomEvents,\n Repository,\n View,\n Selectors\n) {\n\n var SELECTORS = {\n FILTERS: '[data-region=\"filter\"]',\n FILTER_OPTION: '[data-filter]',\n DISPLAY_OPTION: '[data-display-option]'\n };\n\n /**\n * Update the user preference for the block.\n *\n * @param {String} filter The type of filter: display/sort/grouping.\n * @param {String} value The current preferred value.\n */\n var updatePreferences = function(filter, value) {\n var type = null;\n if (filter == 'display') {\n type = 'block_myoverview_user_view_preference';\n } else if (filter == 'sort') {\n type = 'block_myoverview_user_sort_preference';\n } else if (filter == 'customfieldvalue') {\n type = 'block_myoverview_user_grouping_customfieldvalue_preference';\n } else {\n type = 'block_myoverview_user_grouping_preference';\n }\n\n Repository.updateUserPreferences({\n preferences: [\n {\n type: type,\n value: value\n }\n ]\n });\n };\n\n /**\n * Event listener for the Display filter (cards, list).\n *\n * @param {object} root The root element for the overview block\n */\n var registerSelector = function(root) {\n\n var Selector = root.find(SELECTORS.FILTERS);\n\n CustomEvents.define(Selector, [CustomEvents.events.activate]);\n Selector.on(\n CustomEvents.events.activate,\n SELECTORS.FILTER_OPTION,\n function(e, data) {\n var option = $(e.target);\n\n if (option.hasClass('active')) {\n // If it's already active then we don't need to do anything.\n return;\n }\n\n var filter = option.attr('data-filter');\n var pref = option.attr('data-pref');\n var customfieldvalue = option.attr('data-customfieldvalue');\n\n root.find(Selectors.courseView.region).attr('data-' + filter, option.attr('data-value'));\n updatePreferences(filter, pref);\n\n if (customfieldvalue) {\n root.find(Selectors.courseView.region).attr('data-customfieldvalue', customfieldvalue);\n updatePreferences('customfieldvalue', customfieldvalue);\n }\n\n // Reset the views.\n View.init(root);\n\n data.originalEvent.preventDefault();\n }\n );\n\n CustomEvents.define(Selector, [CustomEvents.events.activate]);\n Selector.on(\n CustomEvents.events.activate,\n SELECTORS.DISPLAY_OPTION,\n function(e, data) {\n var option = $(e.target);\n\n if (option.hasClass('active')) {\n return;\n }\n\n var filter = option.attr('data-display-option');\n var pref = option.attr('data-pref');\n\n root.find(Selectors.courseView.region).attr('data-display', option.attr('data-value'));\n updatePreferences(filter, pref);\n View.reset(root);\n data.originalEvent.preventDefault();\n }\n );\n };\n\n /**\n * Initialise the timeline view navigation by adding event listeners to\n * the navigation elements.\n *\n * @param {object} root The root element for the myoverview block\n */\n var init = function(root) {\n root = $(root);\n registerSelector(root);\n };\n\n return {\n init: init\n };\n});\n"],"file":"view_nav.min.js"} \ No newline at end of file diff --git a/blocks/myoverview/amd/src/main.js b/blocks/myoverview/amd/src/main.js index 2582cbdaf17..53422c126fc 100644 --- a/blocks/myoverview/amd/src/main.js +++ b/blocks/myoverview/amd/src/main.js @@ -16,7 +16,6 @@ /** * Javascript to initialise the myoverview block. * - * @package block_myoverview * @copyright 2018 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/myoverview/amd/src/repository.js b/blocks/myoverview/amd/src/repository.js index fde78c752d5..816851c82f9 100644 --- a/blocks/myoverview/amd/src/repository.js +++ b/blocks/myoverview/amd/src/repository.js @@ -16,7 +16,6 @@ /** * A javascript module to retrieve enrolled coruses from the server. * - * @package block_myoverview * @copyright 2018 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/myoverview/amd/src/selectors.js b/blocks/myoverview/amd/src/selectors.js index 21e6a929bec..ab0f6435c78 100644 --- a/blocks/myoverview/amd/src/selectors.js +++ b/blocks/myoverview/amd/src/selectors.js @@ -16,7 +16,6 @@ /** * Javascript to initialise the selectors for the myoverview block. * - * @package block_myoverview * @copyright 2018 Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/myoverview/amd/src/view.js b/blocks/myoverview/amd/src/view.js index 1c923616956..b2905fac670 100644 --- a/blocks/myoverview/amd/src/view.js +++ b/blocks/myoverview/amd/src/view.js @@ -16,7 +16,6 @@ /** * Manage the courses view for the overview block. * - * @package block_myoverview * @copyright 2018 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/myoverview/amd/src/view_nav.js b/blocks/myoverview/amd/src/view_nav.js index 99ee87122d7..4ae0fb751ef 100644 --- a/blocks/myoverview/amd/src/view_nav.js +++ b/blocks/myoverview/amd/src/view_nav.js @@ -16,7 +16,6 @@ /** * Manage the timeline view navigation for the overview block. * - * @package block_myoverview * @copyright 2018 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/navigation/amd/build/ajax_response_renderer.min.js.map b/blocks/navigation/amd/build/ajax_response_renderer.min.js.map index c729061b495..810b93452f4 100644 --- a/blocks/navigation/amd/build/ajax_response_renderer.min.js.map +++ b/blocks/navigation/amd/build/ajax_response_renderer.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/ajax_response_renderer.js"],"names":["define","$","Templates","Notification","Url","Aria","NODETYPE","ACTIVITY","RESOURCE","buildDOM","rootElement","nodes","ul","attr","hide","each","index","node","li","p","id","key","icon","isBranch","expandable","haschildren","addClass","requiresajaxloading","type","eleToAddIcon","link","title","append","name","hidden","span","alt","imageUrl","pix","component","classes","className","prepend","renderPix","then","html","catch","exception","children","length","removeClass","parent","render","element","item","first","group","find","unhide","hasClass"],"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 .\n\n/**\n * Parse the response from the navblock ajax page and render the correct DOM\n * structure for the tree from it.\n *\n * @module block_navigation/ajax_response_renderer\n * @package core\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/templates',\n 'core/notification',\n 'core/url',\n 'core/aria',\n], function(\n $,\n Templates,\n Notification,\n Url,\n Aria\n) {\n\n // Mappings for the different types of nodes coming from the navigation.\n // Copied from lib/navigationlib.php navigation_node constants.\n var NODETYPE = {\n // @type int Activity (course module) = 40.\n ACTIVITY: 40,\n // @type int Resource (course module = 50.\n RESOURCE: 50,\n };\n\n /**\n * Build DOM.\n *\n * @method buildDOM\n * @param {Object} rootElement the root element of DOM.\n * @param {object} nodes jquery object representing the nodes to be build.\n */\n function buildDOM(rootElement, nodes) {\n var ul = $('
    ');\n ul.attr('role', 'group');\n Aria.hide(ul);\n\n $.each(nodes, function(index, node) {\n if (typeof node !== 'object') {\n return;\n }\n\n var li = $('
  • ');\n var p = $('

    ');\n var id = node.id || node.key + '_tree_item';\n var icon = null;\n var isBranch = (node.expandable || node.haschildren) ? true : false;\n\n p.addClass('tree_item');\n p.attr('id', id);\n p.attr('role', 'treeitem');\n // Negative tab index to allow it to receive focus.\n p.attr('tabindex', '-1');\n\n if (node.requiresajaxloading) {\n p.attr('data-requires-ajax', true);\n p.attr('data-node-id', node.id);\n p.attr('data-node-key', node.key);\n p.attr('data-node-type', node.type);\n }\n\n if (isBranch) {\n li.addClass('collapsed contains_branch');\n p.attr('aria-expanded', false);\n p.addClass('branch');\n }\n\n var eleToAddIcon = null;\n if (node.link) {\n var link = $('');\n\n eleToAddIcon = link;\n link.append('' + node.name + '');\n\n if (node.hidden) {\n link.addClass('dimmed');\n }\n\n p.append(link);\n } else {\n var span = $('');\n\n eleToAddIcon = span;\n span.append('' + node.name + '');\n\n if (node.hidden) {\n span.addClass('dimmed');\n }\n\n p.append(span);\n }\n\n if (node.icon && (!isBranch || node.type === NODETYPE.ACTIVITY || node.type === NODETYPE.RESOURCE)) {\n li.addClass('item_with_icon');\n p.addClass('hasicon');\n\n if (node.type === NODETYPE.ACTIVITY || node.type === NODETYPE.RESOURCE) {\n icon = $('');\n icon.attr('alt', node.icon.alt);\n icon.attr('title', node.icon.title);\n icon.attr('src', Url.imageUrl(node.icon.pix, node.icon.component));\n $.each(node.icon.classes, function(index, className) {\n icon.addClass(className);\n });\n eleToAddIcon.prepend(icon);\n } else {\n if (node.icon.component == 'moodle') {\n node.icon.component = 'core';\n }\n Templates.renderPix(node.icon.pix, node.icon.component, node.icon.title).then(function(html) {\n // Prepend.\n eleToAddIcon.prepend(html);\n return;\n }).catch(Notification.exception);\n }\n }\n\n li.append(p);\n ul.append(li);\n\n if (node.children && node.children.length) {\n buildDOM(p, node.children);\n } else if (isBranch && !node.requiresajaxloading) {\n li.removeClass('contains_branch');\n p.addClass('emptybranch');\n }\n });\n\n rootElement.parent().append(ul);\n var id = rootElement.attr('id') + '_group';\n ul.attr('id', id);\n rootElement.attr('aria-owns', id);\n rootElement.attr('role', 'treeitem');\n }\n\n return {\n render: function(element, nodes) {\n // The first element of the response is the existing node so we start with processing the children.\n if (nodes.children && nodes.children.length) {\n buildDOM(element, nodes.children);\n\n var item = element.children(\"[role='treeitem']\").first();\n var group = element.find('#' + item.attr('aria-owns'));\n\n item.attr('aria-expanded', true);\n Aria.unhide(group);\n } else {\n if (element.parent().hasClass('contains_branch')) {\n element.parent().removeClass('contains_branch');\n element.addClass('emptybranch');\n }\n }\n }\n };\n});\n"],"file":"ajax_response_renderer.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/ajax_response_renderer.js"],"names":["define","$","Templates","Notification","Url","Aria","NODETYPE","ACTIVITY","RESOURCE","buildDOM","rootElement","nodes","ul","attr","hide","each","index","node","li","p","id","key","icon","isBranch","expandable","haschildren","addClass","requiresajaxloading","type","eleToAddIcon","link","title","append","name","hidden","span","alt","imageUrl","pix","component","classes","className","prepend","renderPix","then","html","catch","exception","children","length","removeClass","parent","render","element","item","first","group","find","unhide","hasClass"],"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 .\n\n/**\n * Parse the response from the navblock ajax page and render the correct DOM\n * structure for the tree from it.\n *\n * @module block_navigation/ajax_response_renderer\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/templates',\n 'core/notification',\n 'core/url',\n 'core/aria',\n], function(\n $,\n Templates,\n Notification,\n Url,\n Aria\n) {\n\n // Mappings for the different types of nodes coming from the navigation.\n // Copied from lib/navigationlib.php navigation_node constants.\n var NODETYPE = {\n // @type int Activity (course module) = 40.\n ACTIVITY: 40,\n // @type int Resource (course module = 50.\n RESOURCE: 50,\n };\n\n /**\n * Build DOM.\n *\n * @method buildDOM\n * @param {Object} rootElement the root element of DOM.\n * @param {object} nodes jquery object representing the nodes to be build.\n */\n function buildDOM(rootElement, nodes) {\n var ul = $('
      ');\n ul.attr('role', 'group');\n Aria.hide(ul);\n\n $.each(nodes, function(index, node) {\n if (typeof node !== 'object') {\n return;\n }\n\n var li = $('
    • ');\n var p = $('

      ');\n var id = node.id || node.key + '_tree_item';\n var icon = null;\n var isBranch = (node.expandable || node.haschildren) ? true : false;\n\n p.addClass('tree_item');\n p.attr('id', id);\n p.attr('role', 'treeitem');\n // Negative tab index to allow it to receive focus.\n p.attr('tabindex', '-1');\n\n if (node.requiresajaxloading) {\n p.attr('data-requires-ajax', true);\n p.attr('data-node-id', node.id);\n p.attr('data-node-key', node.key);\n p.attr('data-node-type', node.type);\n }\n\n if (isBranch) {\n li.addClass('collapsed contains_branch');\n p.attr('aria-expanded', false);\n p.addClass('branch');\n }\n\n var eleToAddIcon = null;\n if (node.link) {\n var link = $('');\n\n eleToAddIcon = link;\n link.append('' + node.name + '');\n\n if (node.hidden) {\n link.addClass('dimmed');\n }\n\n p.append(link);\n } else {\n var span = $('');\n\n eleToAddIcon = span;\n span.append('' + node.name + '');\n\n if (node.hidden) {\n span.addClass('dimmed');\n }\n\n p.append(span);\n }\n\n if (node.icon && (!isBranch || node.type === NODETYPE.ACTIVITY || node.type === NODETYPE.RESOURCE)) {\n li.addClass('item_with_icon');\n p.addClass('hasicon');\n\n if (node.type === NODETYPE.ACTIVITY || node.type === NODETYPE.RESOURCE) {\n icon = $('');\n icon.attr('alt', node.icon.alt);\n icon.attr('title', node.icon.title);\n icon.attr('src', Url.imageUrl(node.icon.pix, node.icon.component));\n $.each(node.icon.classes, function(index, className) {\n icon.addClass(className);\n });\n eleToAddIcon.prepend(icon);\n } else {\n if (node.icon.component == 'moodle') {\n node.icon.component = 'core';\n }\n Templates.renderPix(node.icon.pix, node.icon.component, node.icon.title).then(function(html) {\n // Prepend.\n eleToAddIcon.prepend(html);\n return;\n }).catch(Notification.exception);\n }\n }\n\n li.append(p);\n ul.append(li);\n\n if (node.children && node.children.length) {\n buildDOM(p, node.children);\n } else if (isBranch && !node.requiresajaxloading) {\n li.removeClass('contains_branch');\n p.addClass('emptybranch');\n }\n });\n\n rootElement.parent().append(ul);\n var id = rootElement.attr('id') + '_group';\n ul.attr('id', id);\n rootElement.attr('aria-owns', id);\n rootElement.attr('role', 'treeitem');\n }\n\n return {\n render: function(element, nodes) {\n // The first element of the response is the existing node so we start with processing the children.\n if (nodes.children && nodes.children.length) {\n buildDOM(element, nodes.children);\n\n var item = element.children(\"[role='treeitem']\").first();\n var group = element.find('#' + item.attr('aria-owns'));\n\n item.attr('aria-expanded', true);\n Aria.unhide(group);\n } else {\n if (element.parent().hasClass('contains_branch')) {\n element.parent().removeClass('contains_branch');\n element.addClass('emptybranch');\n }\n }\n }\n };\n});\n"],"file":"ajax_response_renderer.min.js"} \ No newline at end of file diff --git a/blocks/navigation/amd/build/nav_loader.min.js.map b/blocks/navigation/amd/build/nav_loader.min.js.map index 331c071a0f5..31fc53da1b1 100644 --- a/blocks/navigation/amd/build/nav_loader.min.js.map +++ b/blocks/navigation/amd/build/nav_loader.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/nav_loader.js"],"names":["define","$","ajax","config","renderer","URL","wwwroot","getBlockInstanceId","element","closest","attr","load","promise","Deferred","data","elementid","id","type","sesskey","instance","dataType","done","nodes","render","resolve"],"mappings":"AAuBAA,OAAM,+BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,aAAxB,CAAuC,yCAAvC,CAAD,CACF,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA0BC,CAA1B,CAAoC,CAChC,GAAIC,CAAAA,CAAG,CAAGF,CAAM,CAACG,OAAP,CAAiB,4BAA3B,CASA,QAASC,CAAAA,CAAT,CAA4BC,CAA5B,CAAqC,CACjC,MAAOA,CAAAA,CAAO,CAACC,OAAR,CAAgB,cAAhB,EAAgCC,IAAhC,CAAqC,iBAArC,CACV,CAEL,MAAO,CACHC,IAAI,CAAE,cAASH,CAAT,CAAkB,CACpBA,CAAO,CAAGP,CAAC,CAACO,CAAD,CAAX,CADoB,GAEhBI,CAAAA,CAAO,CAAGX,CAAC,CAACY,QAAF,EAFM,CAGhBC,CAAI,CAAG,CACPC,SAAS,CAAEP,CAAO,CAACE,IAAR,CAAa,cAAb,CADJ,CAEPM,EAAE,CAAER,CAAO,CAACE,IAAR,CAAa,eAAb,CAFG,CAGPO,IAAI,CAAET,CAAO,CAACE,IAAR,CAAa,gBAAb,CAHC,CAIPQ,OAAO,CAAEf,CAAM,CAACe,OAJT,CAKPC,QAAQ,CAAEZ,CAAkB,CAACC,CAAD,CALrB,CAHS,CAgBpBP,CAAC,CAACC,IAAF,CAAOG,CAAP,CANe,CACXY,IAAI,CAAE,MADK,CAEXG,QAAQ,CAAE,MAFC,CAGXN,IAAI,CAAEA,CAHK,CAMf,EAAsBO,IAAtB,CAA2B,SAASC,CAAT,CAAgB,CACvClB,CAAQ,CAACmB,MAAT,CAAgBf,CAAhB,CAAyBc,CAAzB,EACAV,CAAO,CAACY,OAAR,EACH,CAHD,EAKA,MAAOZ,CAAAA,CACV,CAvBE,CAyBV,CAxCK,CAAN","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 .\n\n/**\n * Load the nav tree items via ajax and render the response.\n *\n * @module block_navigation/nav_loader\n * @package core\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/config', 'block_navigation/ajax_response_renderer'],\n function($, ajax, config, renderer) {\n var URL = config.wwwroot + '/lib/ajax/getnavbranch.php';\n\n /**\n * Get the block instance id.\n *\n * @function getBlockInstanceId\n * @param {Element} element\n * @returns {String} the instance id\n */\n function getBlockInstanceId(element) {\n return element.closest('[data-block]').attr('data-instanceid');\n }\n\n return {\n load: function(element) {\n element = $(element);\n var promise = $.Deferred();\n var data = {\n elementid: element.attr('data-node-id'),\n id: element.attr('data-node-key'),\n type: element.attr('data-node-type'),\n sesskey: config.sesskey,\n instance: getBlockInstanceId(element)\n };\n var settings = {\n type: 'POST',\n dataType: 'json',\n data: data\n };\n\n $.ajax(URL, settings).done(function(nodes) {\n renderer.render(element, nodes);\n promise.resolve();\n });\n\n return promise;\n }\n };\n});\n"],"file":"nav_loader.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/nav_loader.js"],"names":["define","$","ajax","config","renderer","URL","wwwroot","getBlockInstanceId","element","closest","attr","load","promise","Deferred","data","elementid","id","type","sesskey","instance","dataType","done","nodes","render","resolve"],"mappings":"AAsBAA,OAAM,+BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,aAAxB,CAAuC,yCAAvC,CAAD,CACF,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA0BC,CAA1B,CAAoC,CAChC,GAAIC,CAAAA,CAAG,CAAGF,CAAM,CAACG,OAAP,CAAiB,4BAA3B,CASA,QAASC,CAAAA,CAAT,CAA4BC,CAA5B,CAAqC,CACjC,MAAOA,CAAAA,CAAO,CAACC,OAAR,CAAgB,cAAhB,EAAgCC,IAAhC,CAAqC,iBAArC,CACV,CAEL,MAAO,CACHC,IAAI,CAAE,cAASH,CAAT,CAAkB,CACpBA,CAAO,CAAGP,CAAC,CAACO,CAAD,CAAX,CADoB,GAEhBI,CAAAA,CAAO,CAAGX,CAAC,CAACY,QAAF,EAFM,CAGhBC,CAAI,CAAG,CACPC,SAAS,CAAEP,CAAO,CAACE,IAAR,CAAa,cAAb,CADJ,CAEPM,EAAE,CAAER,CAAO,CAACE,IAAR,CAAa,eAAb,CAFG,CAGPO,IAAI,CAAET,CAAO,CAACE,IAAR,CAAa,gBAAb,CAHC,CAIPQ,OAAO,CAAEf,CAAM,CAACe,OAJT,CAKPC,QAAQ,CAAEZ,CAAkB,CAACC,CAAD,CALrB,CAHS,CAgBpBP,CAAC,CAACC,IAAF,CAAOG,CAAP,CANe,CACXY,IAAI,CAAE,MADK,CAEXG,QAAQ,CAAE,MAFC,CAGXN,IAAI,CAAEA,CAHK,CAMf,EAAsBO,IAAtB,CAA2B,SAASC,CAAT,CAAgB,CACvClB,CAAQ,CAACmB,MAAT,CAAgBf,CAAhB,CAAyBc,CAAzB,EACAV,CAAO,CAACY,OAAR,EACH,CAHD,EAKA,MAAOZ,CAAAA,CACV,CAvBE,CAyBV,CAxCK,CAAN","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 .\n\n/**\n * Load the nav tree items via ajax and render the response.\n *\n * @module block_navigation/nav_loader\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/config', 'block_navigation/ajax_response_renderer'],\n function($, ajax, config, renderer) {\n var URL = config.wwwroot + '/lib/ajax/getnavbranch.php';\n\n /**\n * Get the block instance id.\n *\n * @function getBlockInstanceId\n * @param {Element} element\n * @returns {String} the instance id\n */\n function getBlockInstanceId(element) {\n return element.closest('[data-block]').attr('data-instanceid');\n }\n\n return {\n load: function(element) {\n element = $(element);\n var promise = $.Deferred();\n var data = {\n elementid: element.attr('data-node-id'),\n id: element.attr('data-node-key'),\n type: element.attr('data-node-type'),\n sesskey: config.sesskey,\n instance: getBlockInstanceId(element)\n };\n var settings = {\n type: 'POST',\n dataType: 'json',\n data: data\n };\n\n $.ajax(URL, settings).done(function(nodes) {\n renderer.render(element, nodes);\n promise.resolve();\n });\n\n return promise;\n }\n };\n});\n"],"file":"nav_loader.min.js"} \ No newline at end of file diff --git a/blocks/navigation/amd/build/navblock.min.js.map b/blocks/navigation/amd/build/navblock.min.js.map index f93c05d4349..cbfc92c3ef3 100644 --- a/blocks/navigation/amd/build/navblock.min.js.map +++ b/blocks/navigation/amd/build/navblock.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/navblock.js"],"names":["define","$","Tree","init","instanceid","navTree","finishExpandingGroup","item","prototype","call","Y","use","Global","fire","M","core","globalEvents","BLOCK_CONTENT_UPDATED","collapseGroup"],"mappings":"AAuBAA,OAAM,6BAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAC9C,MAAO,CACHC,IAAI,CAAE,cAASC,CAAT,CAAqB,CACvB,GAAIC,CAAAA,CAAO,CAAG,GAAIH,CAAAA,CAAJ,CAAS,+BAAT,CAAd,CACAG,CAAO,CAACC,oBAAR,CAA+B,SAASC,CAAT,CAAe,CAC1CL,CAAI,CAACM,SAAL,CAAeF,oBAAf,CAAoCG,IAApC,CAAyC,IAAzC,CAA+CF,CAA/C,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDb,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CAPD,CAQAC,CAAO,CAACa,aAAR,CAAwB,SAASX,CAAT,CAAe,CACnCL,CAAI,CAACM,SAAL,CAAeU,aAAf,CAA6BT,IAA7B,CAAkC,IAAlC,CAAwCF,CAAxC,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDb,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CACJ,CAnBE,CAqBV,CAtBK,CAAN","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 .\n\n/**\n * Load the navigation tree javascript.\n *\n * @module block_navigation/navblock\n * @package core\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/tree'], function($, Tree) {\n return {\n init: function(instanceid) {\n var navTree = new Tree(\".block_navigation .block_tree\");\n navTree.finishExpandingGroup = function(item) {\n Tree.prototype.finishExpandingGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n navTree.collapseGroup = function(item) {\n Tree.prototype.collapseGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n }\n };\n});\n"],"file":"navblock.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/navblock.js"],"names":["define","$","Tree","init","instanceid","navTree","finishExpandingGroup","item","prototype","call","Y","use","Global","fire","M","core","globalEvents","BLOCK_CONTENT_UPDATED","collapseGroup"],"mappings":"AAsBAA,OAAM,6BAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAC9C,MAAO,CACHC,IAAI,CAAE,cAASC,CAAT,CAAqB,CACvB,GAAIC,CAAAA,CAAO,CAAG,GAAIH,CAAAA,CAAJ,CAAS,+BAAT,CAAd,CACAG,CAAO,CAACC,oBAAR,CAA+B,SAASC,CAAT,CAAe,CAC1CL,CAAI,CAACM,SAAL,CAAeF,oBAAf,CAAoCG,IAApC,CAAyC,IAAzC,CAA+CF,CAA/C,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDb,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CAPD,CAQAC,CAAO,CAACa,aAAR,CAAwB,SAASX,CAAT,CAAe,CACnCL,CAAI,CAACM,SAAL,CAAeU,aAAf,CAA6BT,IAA7B,CAAkC,IAAlC,CAAwCF,CAAxC,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDb,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CACJ,CAnBE,CAqBV,CAtBK,CAAN","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 .\n\n/**\n * Load the navigation tree javascript.\n *\n * @module block_navigation/navblock\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/tree'], function($, Tree) {\n return {\n init: function(instanceid) {\n var navTree = new Tree(\".block_navigation .block_tree\");\n navTree.finishExpandingGroup = function(item) {\n Tree.prototype.finishExpandingGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n navTree.collapseGroup = function(item) {\n Tree.prototype.collapseGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n }\n };\n});\n"],"file":"navblock.min.js"} \ No newline at end of file diff --git a/blocks/navigation/amd/build/site_admin_loader.min.js.map b/blocks/navigation/amd/build/site_admin_loader.min.js.map index c7cd6459f0d..61216fb9cd3 100644 --- a/blocks/navigation/amd/build/site_admin_loader.min.js.map +++ b/blocks/navigation/amd/build/site_admin_loader.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/site_admin_loader.js"],"names":["define","$","ajax","config","renderer","URL","wwwroot","load","element","promise","Deferred","data","type","sesskey","dataType","done","nodes","render","resolve"],"mappings":"AAuBAA,OAAM,sCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,aAAxB,CAAuC,yCAAvC,CAAD,CACE,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA0BC,CAA1B,CAAoC,IAGpCC,CAAAA,CAAG,CAAGF,CAAM,CAACG,OAAP,CAAiB,kCAHa,CAKxC,MAAO,CACHC,IAAI,CAAE,cAASC,CAAT,CAAkB,CACpBA,CAAO,CAAGP,CAAC,CAACO,CAAD,CAAX,CADoB,GAEhBC,CAAAA,CAAO,CAAGR,CAAC,CAACS,QAAF,EAFM,CAGhBC,CAAI,CAAG,CACPC,IAAI,GADG,CAEPC,OAAO,CAAEV,CAAM,CAACU,OAFT,CAHS,CAapBZ,CAAC,CAACC,IAAF,CAAOG,CAAP,CANe,CACXO,IAAI,CAAE,MADK,CAEXE,QAAQ,CAAE,MAFC,CAGXH,IAAI,CAAEA,CAHK,CAMf,EAAsBI,IAAtB,CAA2B,SAASC,CAAT,CAAgB,CACvCZ,CAAQ,CAACa,MAAT,CAAgBT,CAAhB,CAAyBQ,CAAzB,EACAP,CAAO,CAACS,OAAR,EACH,CAHD,EAKA,MAAOT,CAAAA,CACV,CApBE,CAsBV,CA5BK,CAAN","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 .\n\n/**\n * Load the site admin nav tree via ajax and render the response.\n *\n * @module block_navigation/site_admin_loader\n * @package core\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/config', 'block_navigation/ajax_response_renderer'],\n function($, ajax, config, renderer) {\n\n var SITE_ADMIN_NODE_TYPE = 71;\n var URL = config.wwwroot + '/lib/ajax/getsiteadminbranch.php';\n\n return {\n load: function(element) {\n element = $(element);\n var promise = $.Deferred();\n var data = {\n type: SITE_ADMIN_NODE_TYPE,\n sesskey: config.sesskey\n };\n var settings = {\n type: 'POST',\n dataType: 'json',\n data: data\n };\n\n $.ajax(URL, settings).done(function(nodes) {\n renderer.render(element, nodes);\n promise.resolve();\n });\n\n return promise;\n }\n };\n});\n"],"file":"site_admin_loader.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/site_admin_loader.js"],"names":["define","$","ajax","config","renderer","URL","wwwroot","load","element","promise","Deferred","data","type","sesskey","dataType","done","nodes","render","resolve"],"mappings":"AAsBAA,OAAM,sCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,aAAxB,CAAuC,yCAAvC,CAAD,CACE,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAA0BC,CAA1B,CAAoC,IAGpCC,CAAAA,CAAG,CAAGF,CAAM,CAACG,OAAP,CAAiB,kCAHa,CAKxC,MAAO,CACHC,IAAI,CAAE,cAASC,CAAT,CAAkB,CACpBA,CAAO,CAAGP,CAAC,CAACO,CAAD,CAAX,CADoB,GAEhBC,CAAAA,CAAO,CAAGR,CAAC,CAACS,QAAF,EAFM,CAGhBC,CAAI,CAAG,CACPC,IAAI,GADG,CAEPC,OAAO,CAAEV,CAAM,CAACU,OAFT,CAHS,CAapBZ,CAAC,CAACC,IAAF,CAAOG,CAAP,CANe,CACXO,IAAI,CAAE,MADK,CAEXE,QAAQ,CAAE,MAFC,CAGXH,IAAI,CAAEA,CAHK,CAMf,EAAsBI,IAAtB,CAA2B,SAASC,CAAT,CAAgB,CACvCZ,CAAQ,CAACa,MAAT,CAAgBT,CAAhB,CAAyBQ,CAAzB,EACAP,CAAO,CAACS,OAAR,EACH,CAHD,EAKA,MAAOT,CAAAA,CACV,CApBE,CAsBV,CA5BK,CAAN","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 .\n\n/**\n * Load the site admin nav tree via ajax and render the response.\n *\n * @module block_navigation/site_admin_loader\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/config', 'block_navigation/ajax_response_renderer'],\n function($, ajax, config, renderer) {\n\n var SITE_ADMIN_NODE_TYPE = 71;\n var URL = config.wwwroot + '/lib/ajax/getsiteadminbranch.php';\n\n return {\n load: function(element) {\n element = $(element);\n var promise = $.Deferred();\n var data = {\n type: SITE_ADMIN_NODE_TYPE,\n sesskey: config.sesskey\n };\n var settings = {\n type: 'POST',\n dataType: 'json',\n data: data\n };\n\n $.ajax(URL, settings).done(function(nodes) {\n renderer.render(element, nodes);\n promise.resolve();\n });\n\n return promise;\n }\n };\n});\n"],"file":"site_admin_loader.min.js"} \ No newline at end of file diff --git a/blocks/navigation/amd/src/ajax_response_renderer.js b/blocks/navigation/amd/src/ajax_response_renderer.js index e92ed463bee..bea1744ca35 100644 --- a/blocks/navigation/amd/src/ajax_response_renderer.js +++ b/blocks/navigation/amd/src/ajax_response_renderer.js @@ -18,7 +18,6 @@ * structure for the tree from it. * * @module block_navigation/ajax_response_renderer - * @package core * @copyright 2015 John Okely * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/navigation/amd/src/nav_loader.js b/blocks/navigation/amd/src/nav_loader.js index ce5cb997bd9..bd2c6cb2187 100644 --- a/blocks/navigation/amd/src/nav_loader.js +++ b/blocks/navigation/amd/src/nav_loader.js @@ -17,7 +17,6 @@ * Load the nav tree items via ajax and render the response. * * @module block_navigation/nav_loader - * @package core * @copyright 2015 John Okely * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/navigation/amd/src/navblock.js b/blocks/navigation/amd/src/navblock.js index 40e8678e370..33c1ff3d1ec 100644 --- a/blocks/navigation/amd/src/navblock.js +++ b/blocks/navigation/amd/src/navblock.js @@ -17,7 +17,6 @@ * Load the navigation tree javascript. * * @module block_navigation/navblock - * @package core * @copyright 2015 John Okely * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/navigation/amd/src/site_admin_loader.js b/blocks/navigation/amd/src/site_admin_loader.js index b203aac0199..91381a58534 100644 --- a/blocks/navigation/amd/src/site_admin_loader.js +++ b/blocks/navigation/amd/src/site_admin_loader.js @@ -17,7 +17,6 @@ * Load the site admin nav tree via ajax and render the response. * * @module block_navigation/site_admin_loader - * @package core * @copyright 2015 John Okely * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/online_users/amd/build/change_user_visibility.min.js.map b/blocks/online_users/amd/build/change_user_visibility.min.js.map index f8872777068..757879b7f26 100644 --- a/blocks/online_users/amd/build/change_user_visibility.min.js.map +++ b/blocks/online_users/amd/build/change_user_visibility.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/change_user_visibility.js"],"names":["define","$","Ajax","Str","Notification","SELECTORS","CHANGE_VISIBILITY_LINK","CHANGE_VISIBILITY_ICON","changeVisibility","action","userid","value","call","methodname","args","preferences","then","data","saved","newAction","oppositeAction","changeVisibilityLinkAttr","changeVisibilityIconAttr","catch","exception","getTitle","title","attr","icon","is","M","util","image_url","addClass","getIconClass","removeClass","get_string","init","on","e","preventDefault"],"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 .\n\n/**\n * A javascript module that handles the change of the user's visibility in the\n * online users block.\n *\n * @module block_online_users/change_user_visibility\n * @package block_online_users\n * @copyright 2018 Mihail Geshoski \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification'],\n function($, Ajax, Str, Notification) {\n\n /**\n * Selectors.\n *\n * @access private\n * @type {Object}\n */\n var SELECTORS = {\n CHANGE_VISIBILITY_LINK: '#change-user-visibility',\n CHANGE_VISIBILITY_ICON: '#change-user-visibility .icon'\n };\n\n /**\n * Change user visibility in the online users block.\n *\n * @method changeVisibility\n * @param {String} action\n * @param {String} userid\n * @private\n */\n var changeVisibility = function(action, userid) {\n\n var value = action == \"show\" ? 1 : 0;\n var preferences = [{\n 'name': 'block_online_users_uservisibility',\n 'value': value,\n 'userid': userid\n }];\n\n var request = {\n methodname: 'core_user_set_user_preferences',\n args: {\n preferences: preferences\n }\n };\n Ajax.call([request])[0].then(function(data) {\n if (data.saved) {\n var newAction = oppositeAction(action);\n changeVisibilityLinkAttr(newAction);\n changeVisibilityIconAttr(newAction);\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Get the opposite action.\n *\n * @method oppositeAction\n * @param {String} action\n * @return {String}\n * @private\n */\n var oppositeAction = function(action) {\n return action == 'show' ? 'hide' : 'show';\n };\n\n /**\n * Change the attribute values of the user visibility link in the online users block.\n *\n * @method changeVisibilityLinkAttr\n * @param {String} action\n * @private\n */\n var changeVisibilityLinkAttr = function(action) {\n getTitle(action).then(function(title) {\n $(SELECTORS.CHANGE_VISIBILITY_LINK).attr({\n 'data-action': action,\n 'title': title\n });\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Change the attribute values of the user visibility icon in the online users block.\n *\n * @method changeVisibilityIconAttr\n * @param {String} action\n * @private\n */\n var changeVisibilityIconAttr = function(action) {\n var icon = $(SELECTORS.CHANGE_VISIBILITY_ICON);\n getTitle(action).then(function(title) {\n // Add the proper title to the icon.\n $(icon).attr({\n 'title': title,\n 'aria-label': title\n });\n // If the icon is an image.\n if (icon.is(\"img\")) {\n $(icon).attr({\n 'src': M.util.image_url('t/' + action),\n 'alt': title\n });\n } else {\n // Add the new icon class and remove the old one.\n $(icon).addClass(getIconClass(action));\n $(icon).removeClass(getIconClass(oppositeAction(action)));\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Get the proper class for the user visibility icon in the online users block.\n *\n * @method getIconClass\n * @param {String} action\n * @return {String}\n * @private\n */\n var getIconClass = function(action) {\n return action == 'show' ? 'fa-eye-slash' : 'fa-eye';\n };\n\n /**\n * Get the title description of the user visibility link in the online users block.\n *\n * @method getTitle\n * @param {String} action\n * @return {object} jQuery promise\n * @private\n */\n var getTitle = function(action) {\n return Str.get_string('online_status:' + action, 'block_online_users');\n };\n\n return {\n // Public variables and functions.\n /**\n * Initialise change user visibility function.\n *\n * @method init\n */\n init: function() {\n $(SELECTORS.CHANGE_VISIBILITY_LINK).on('click', function(e) {\n e.preventDefault();\n var action = ($(this).attr('data-action'));\n var userid = ($(this).attr('data-userid'));\n changeVisibility(action, userid);\n });\n }\n };\n});\n"],"file":"change_user_visibility.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/change_user_visibility.js"],"names":["define","$","Ajax","Str","Notification","SELECTORS","CHANGE_VISIBILITY_LINK","CHANGE_VISIBILITY_ICON","changeVisibility","action","userid","value","call","methodname","args","preferences","then","data","saved","newAction","oppositeAction","changeVisibilityLinkAttr","changeVisibilityIconAttr","catch","exception","getTitle","title","attr","icon","is","M","util","image_url","addClass","getIconClass","removeClass","get_string","init","on","e","preventDefault"],"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 .\n\n/**\n * A javascript module that handles the change of the user's visibility in the\n * online users block.\n *\n * @module block_online_users/change_user_visibility\n * @copyright 2018 Mihail Geshoski \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification'],\n function($, Ajax, Str, Notification) {\n\n /**\n * Selectors.\n *\n * @access private\n * @type {Object}\n */\n var SELECTORS = {\n CHANGE_VISIBILITY_LINK: '#change-user-visibility',\n CHANGE_VISIBILITY_ICON: '#change-user-visibility .icon'\n };\n\n /**\n * Change user visibility in the online users block.\n *\n * @method changeVisibility\n * @param {String} action\n * @param {String} userid\n * @private\n */\n var changeVisibility = function(action, userid) {\n\n var value = action == \"show\" ? 1 : 0;\n var preferences = [{\n 'name': 'block_online_users_uservisibility',\n 'value': value,\n 'userid': userid\n }];\n\n var request = {\n methodname: 'core_user_set_user_preferences',\n args: {\n preferences: preferences\n }\n };\n Ajax.call([request])[0].then(function(data) {\n if (data.saved) {\n var newAction = oppositeAction(action);\n changeVisibilityLinkAttr(newAction);\n changeVisibilityIconAttr(newAction);\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Get the opposite action.\n *\n * @method oppositeAction\n * @param {String} action\n * @return {String}\n * @private\n */\n var oppositeAction = function(action) {\n return action == 'show' ? 'hide' : 'show';\n };\n\n /**\n * Change the attribute values of the user visibility link in the online users block.\n *\n * @method changeVisibilityLinkAttr\n * @param {String} action\n * @private\n */\n var changeVisibilityLinkAttr = function(action) {\n getTitle(action).then(function(title) {\n $(SELECTORS.CHANGE_VISIBILITY_LINK).attr({\n 'data-action': action,\n 'title': title\n });\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Change the attribute values of the user visibility icon in the online users block.\n *\n * @method changeVisibilityIconAttr\n * @param {String} action\n * @private\n */\n var changeVisibilityIconAttr = function(action) {\n var icon = $(SELECTORS.CHANGE_VISIBILITY_ICON);\n getTitle(action).then(function(title) {\n // Add the proper title to the icon.\n $(icon).attr({\n 'title': title,\n 'aria-label': title\n });\n // If the icon is an image.\n if (icon.is(\"img\")) {\n $(icon).attr({\n 'src': M.util.image_url('t/' + action),\n 'alt': title\n });\n } else {\n // Add the new icon class and remove the old one.\n $(icon).addClass(getIconClass(action));\n $(icon).removeClass(getIconClass(oppositeAction(action)));\n }\n return;\n }).catch(Notification.exception);\n };\n\n /**\n * Get the proper class for the user visibility icon in the online users block.\n *\n * @method getIconClass\n * @param {String} action\n * @return {String}\n * @private\n */\n var getIconClass = function(action) {\n return action == 'show' ? 'fa-eye-slash' : 'fa-eye';\n };\n\n /**\n * Get the title description of the user visibility link in the online users block.\n *\n * @method getTitle\n * @param {String} action\n * @return {object} jQuery promise\n * @private\n */\n var getTitle = function(action) {\n return Str.get_string('online_status:' + action, 'block_online_users');\n };\n\n return {\n // Public variables and functions.\n /**\n * Initialise change user visibility function.\n *\n * @method init\n */\n init: function() {\n $(SELECTORS.CHANGE_VISIBILITY_LINK).on('click', function(e) {\n e.preventDefault();\n var action = ($(this).attr('data-action'));\n var userid = ($(this).attr('data-userid'));\n changeVisibility(action, userid);\n });\n }\n };\n});\n"],"file":"change_user_visibility.min.js"} \ No newline at end of file diff --git a/blocks/online_users/amd/src/change_user_visibility.js b/blocks/online_users/amd/src/change_user_visibility.js index 4fbed820fdd..253e6ad7856 100644 --- a/blocks/online_users/amd/src/change_user_visibility.js +++ b/blocks/online_users/amd/src/change_user_visibility.js @@ -18,7 +18,6 @@ * online users block. * * @module block_online_users/change_user_visibility - * @package block_online_users * @copyright 2018 Mihail Geshoski * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/recentlyaccessedcourses/amd/build/main.min.js.map b/blocks/recentlyaccessedcourses/amd/build/main.min.js.map index c2da9f58793..b2d60005855 100644 --- a/blocks/recentlyaccessedcourses/amd/build/main.min.js.map +++ b/blocks/recentlyaccessedcourses/amd/build/main.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/main.js"],"names":["define","$","CustomEvents","Notification","PubSub","PagedContentPagingBar","Templates","CourseEvents","CoursesRepository","Aria","SELECTORS","BLOCK_CONTAINER","CARD_CONTAINER","COURSE_IS_FAVOURITE","CONTENT","EMPTY_MESSAGE","LOADING_PLACEHOLDER","PAGING_BAR","PAGING_BAR_NEXT","PAGING_BAR_PREVIOUS","contentLoaded","allCourses","visibleCoursesId","cardWidth","viewIndex","availableVisibleCards","showEmptyMessage","root","find","removeClass","addClass","showContent","showPagingBar","pagingBar","css","unhide","hidePagingBar","hide","favouriteCourse","courseId","forEach","course","attr","unfavouriteCourse","renderAllCourses","courses","showcoursecategory","data","promises","map","render","when","apply","then","renderedCourses","promise","html","push","catch","exception","loadContent","userid","getLastAccessedCourses","recalculateVisibleCourses","container","availableWidth","parseFloat","numberOfCourses","length","start","outerWidth","Math","floor","overflow","coursesToShow","slice","newVisibleCoursesId","reduce","carry","rootSelector","disablePreviousControlButtons","enablePreviousControlButtons","disableNextControlButtons","enableNextControlButtons","registerEventListeners","resizeTimeout","drawerToggling","subscribe","favourited","unfavorited","recalculationCount","doRecalculation","setTimeout","window","on","events","activate","e","button","target","closest","hasClass","originalEvent","preventDefault","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 .\n\n/**\n * Javascript to initialise the Recently accessed courses block.\n *\n * @module block_recentlyaccessedcourses/main.js\n * @package block_recentlyaccessedcourses\n * @copyright 2018 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n [\n 'jquery',\n 'core/custom_interaction_events',\n 'core/notification',\n 'core/pubsub',\n 'core/paged_content_paging_bar',\n 'core/templates',\n 'core_course/events',\n 'core_course/repository',\n 'core/aria',\n ],\n function(\n $,\n CustomEvents,\n Notification,\n PubSub,\n PagedContentPagingBar,\n Templates,\n CourseEvents,\n CoursesRepository,\n Aria\n ) {\n\n // Constants.\n var NUM_COURSES_TOTAL = 10;\n var SELECTORS = {\n BLOCK_CONTAINER: '[data-region=\"recentlyaccessedcourses\"]',\n CARD_CONTAINER: '[data-region=\"card-deck\"]',\n COURSE_IS_FAVOURITE: '[data-region=\"is-favourite\"]',\n CONTENT: '[data-region=\"view-content\"]',\n EMPTY_MESSAGE: '[data-region=\"empty-message\"]',\n LOADING_PLACEHOLDER: '[data-region=\"loading-placeholder\"]',\n PAGING_BAR: '[data-region=\"paging-bar\"]',\n PAGING_BAR_NEXT: '[data-control=\"next\"]',\n PAGING_BAR_PREVIOUS: '[data-control=\"previous\"]'\n };\n // Module variables.\n var contentLoaded = false;\n var allCourses = [];\n var visibleCoursesId = null;\n var cardWidth = null;\n var viewIndex = 0;\n var availableVisibleCards = 1;\n\n /**\n * Show the empty message when no course are found.\n *\n * @param {object} root The root element for the courses view.\n */\n var showEmptyMessage = function(root) {\n root.find(SELECTORS.EMPTY_MESSAGE).removeClass('hidden');\n root.find(SELECTORS.LOADING_PLACEHOLDER).addClass('hidden');\n root.find(SELECTORS.CONTENT).addClass('hidden');\n };\n\n /**\n * Show the empty message when no course are found.\n *\n * @param {object} root The root element for the courses view.\n */\n var showContent = function(root) {\n root.find(SELECTORS.CONTENT).removeClass('hidden');\n root.find(SELECTORS.EMPTY_MESSAGE).addClass('hidden');\n root.find(SELECTORS.LOADING_PLACEHOLDER).addClass('hidden');\n };\n\n /**\n * Show the paging bar.\n *\n * @param {object} root The root element for the courses view.\n */\n var showPagingBar = function(root) {\n var pagingBar = root.find(SELECTORS.PAGING_BAR);\n pagingBar.css('opacity', 1);\n pagingBar.css('visibility', 'visible');\n Aria.unhide(pagingBar);\n };\n\n /**\n * Hide the paging bar.\n *\n * @param {object} root The root element for the courses view.\n */\n var hidePagingBar = function(root) {\n var pagingBar = root.find(SELECTORS.PAGING_BAR);\n pagingBar.css('opacity', 0);\n pagingBar.css('visibility', 'hidden');\n Aria.hide(pagingBar);\n };\n\n /**\n * Show the favourite indicator for the given course (if it's in the list).\n *\n * @param {object} root The root element for the courses view.\n * @param {number} courseId The id of the course to be favourited.\n */\n var favouriteCourse = function(root, courseId) {\n allCourses.forEach(function(course) {\n if (course.attr('data-course-id') == courseId) {\n course.find(SELECTORS.COURSE_IS_FAVOURITE).removeClass('hidden');\n }\n });\n };\n\n /**\n * Hide the favourite indicator for the given course (if it's in the list).\n *\n * @param {object} root The root element for the courses view.\n * @param {number} courseId The id of the course to be unfavourited.\n */\n var unfavouriteCourse = function(root, courseId) {\n allCourses.forEach(function(course) {\n if (course.attr('data-course-id') == courseId) {\n course.find(SELECTORS.COURSE_IS_FAVOURITE).addClass('hidden');\n }\n });\n };\n\n /**\n * Render the a list of courses.\n *\n * @param {array} courses containing array of courses.\n * @return {promise} Resolved with list of rendered courses as jQuery objects.\n */\n var renderAllCourses = function(courses) {\n var showcoursecategory = $(SELECTORS.BLOCK_CONTAINER).data('displaycoursecategory');\n var promises = courses.map(function(course) {\n course.showcoursecategory = showcoursecategory;\n return Templates.render('block_recentlyaccessedcourses/course-card', course);\n });\n\n return $.when.apply(null, promises).then(function() {\n var renderedCourses = [];\n\n promises.forEach(function(promise) {\n promise.then(function(html) {\n renderedCourses.push($(html));\n return;\n })\n .catch(Notification.exception);\n });\n\n return renderedCourses;\n });\n };\n\n /**\n * Fetch user's recently accessed courses and reload the content of the block.\n *\n * @param {int} userid User whose courses will be shown\n * @returns {promise} The updated content for the block.\n */\n var loadContent = function(userid) {\n return CoursesRepository.getLastAccessedCourses(userid, NUM_COURSES_TOTAL)\n .then(function(courses) {\n return renderAllCourses(courses);\n });\n };\n\n /**\n * Recalculate the number of courses that should be visible.\n *\n * @param {object} root The root element for the courses view.\n */\n var recalculateVisibleCourses = function(root) {\n var container = root.find(SELECTORS.CONTENT).find(SELECTORS.CARD_CONTAINER);\n var availableWidth = parseFloat(root.css('width'));\n var numberOfCourses = allCourses.length;\n var start = 0;\n\n if (!cardWidth) {\n container.html(allCourses[0]);\n // Render one card initially to calculate the width of the cards\n // including the margins.\n cardWidth = allCourses[0].outerWidth(true);\n }\n\n availableVisibleCards = Math.floor(availableWidth / cardWidth);\n\n if (viewIndex + availableVisibleCards < numberOfCourses) {\n start = viewIndex;\n } else {\n var overflow = (viewIndex + availableVisibleCards) - numberOfCourses;\n start = viewIndex - overflow;\n start = start >= 0 ? start : 0;\n }\n\n // At least show one card.\n if (availableVisibleCards === 0) {\n availableVisibleCards = 1;\n }\n\n var coursesToShow = allCourses.slice(start, start + availableVisibleCards);\n // Create an id for the list of courses we expect to be displayed.\n var newVisibleCoursesId = coursesToShow.reduce(function(carry, course) {\n return carry + course.attr('data-course-id');\n }, '');\n\n // Centre the courses if we have an overflow of courses.\n if (allCourses.length > coursesToShow.length) {\n container.addClass('justify-content-center');\n container.removeClass('justify-content-start');\n } else {\n container.removeClass('justify-content-center');\n container.addClass('justify-content-start');\n }\n\n // Don't bother updating the DOM unless the visible courses have changed.\n if (visibleCoursesId != newVisibleCoursesId) {\n var pagingBar = root.find(PagedContentPagingBar.rootSelector);\n container.html(coursesToShow);\n visibleCoursesId = newVisibleCoursesId;\n\n if (availableVisibleCards >= allCourses.length) {\n hidePagingBar(root);\n } else {\n showPagingBar(root);\n\n if (viewIndex === 0) {\n PagedContentPagingBar.disablePreviousControlButtons(pagingBar);\n } else {\n PagedContentPagingBar.enablePreviousControlButtons(pagingBar);\n }\n\n if (viewIndex + availableVisibleCards >= allCourses.length) {\n PagedContentPagingBar.disableNextControlButtons(pagingBar);\n } else {\n PagedContentPagingBar.enableNextControlButtons(pagingBar);\n }\n }\n }\n };\n\n /**\n * Register event listeners for the block.\n *\n * @param {object} root The root element for the recentlyaccessedcourses block.\n */\n var registerEventListeners = function(root) {\n var resizeTimeout = null;\n var drawerToggling = false;\n\n PubSub.subscribe(CourseEvents.favourited, function(courseId) {\n favouriteCourse(root, courseId);\n });\n\n PubSub.subscribe(CourseEvents.unfavorited, function(courseId) {\n unfavouriteCourse(root, courseId);\n });\n\n PubSub.subscribe('nav-drawer-toggle-start', function() {\n if (!contentLoaded || !allCourses.length || drawerToggling) {\n // Nothing to recalculate.\n return;\n }\n\n drawerToggling = true;\n var recalculationCount = 0;\n // This function is going to recalculate the number of courses while\n // the nav drawer is opening or closes (up to a maximum of 5 recalcs).\n var doRecalculation = function() {\n setTimeout(function() {\n recalculateVisibleCourses(root);\n recalculationCount++;\n\n if (recalculationCount < 5 && drawerToggling) {\n // If we haven't done too many recalculations and the drawer\n // is still toggling then recurse.\n doRecalculation();\n }\n }, 100);\n };\n\n // Start the recalculations.\n doRecalculation(root);\n });\n\n PubSub.subscribe('nav-drawer-toggle-end', function() {\n drawerToggling = false;\n });\n\n $(window).on('resize', function() {\n if (!contentLoaded || !allCourses.length) {\n // Nothing to reclculate.\n return;\n }\n\n // Resize events fire rapidly so recalculating the visible courses each\n // time can be expensive. Let's debounce them,\n if (!resizeTimeout) {\n resizeTimeout = setTimeout(function() {\n resizeTimeout = null;\n recalculateVisibleCourses(root);\n // The recalculateVisibleCourses function will execute at a rate of 15fps.\n }, 66);\n }\n });\n\n CustomEvents.define(root, [CustomEvents.events.activate]);\n root.on(CustomEvents.events.activate, SELECTORS.PAGING_BAR_NEXT, function(e, data) {\n var button = $(e.target).closest(SELECTORS.PAGING_BAR_NEXT);\n if (!button.hasClass('disabled')) {\n viewIndex = viewIndex + availableVisibleCards;\n recalculateVisibleCourses(root);\n }\n\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.PAGING_BAR_PREVIOUS, function(e, data) {\n var button = $(e.target).closest(SELECTORS.PAGING_BAR_PREVIOUS);\n if (!button.hasClass('disabled')) {\n viewIndex = viewIndex - availableVisibleCards;\n viewIndex = viewIndex < 0 ? 0 : viewIndex;\n recalculateVisibleCourses(root);\n }\n\n data.originalEvent.preventDefault();\n });\n };\n\n /**\n * Get and show the recent courses into the block.\n *\n * @param {int} userid User from which the courses will be obtained\n * @param {object} root The root element for the recentlyaccessedcourses block.\n */\n var init = function(userid, root) {\n root = $(root);\n\n registerEventListeners(root);\n loadContent(userid)\n .then(function(renderedCourses) {\n allCourses = renderedCourses;\n contentLoaded = true;\n\n if (allCourses.length) {\n showContent(root);\n recalculateVisibleCourses(root);\n } else {\n showEmptyMessage(root);\n }\n\n return;\n })\n .catch(Notification.exception);\n };\n\n return {\n init: init\n };\n });\n"],"file":"main.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/main.js"],"names":["define","$","CustomEvents","Notification","PubSub","PagedContentPagingBar","Templates","CourseEvents","CoursesRepository","Aria","SELECTORS","BLOCK_CONTAINER","CARD_CONTAINER","COURSE_IS_FAVOURITE","CONTENT","EMPTY_MESSAGE","LOADING_PLACEHOLDER","PAGING_BAR","PAGING_BAR_NEXT","PAGING_BAR_PREVIOUS","contentLoaded","allCourses","visibleCoursesId","cardWidth","viewIndex","availableVisibleCards","showEmptyMessage","root","find","removeClass","addClass","showContent","showPagingBar","pagingBar","css","unhide","hidePagingBar","hide","favouriteCourse","courseId","forEach","course","attr","unfavouriteCourse","renderAllCourses","courses","showcoursecategory","data","promises","map","render","when","apply","then","renderedCourses","promise","html","push","catch","exception","loadContent","userid","getLastAccessedCourses","recalculateVisibleCourses","container","availableWidth","parseFloat","numberOfCourses","length","start","outerWidth","Math","floor","overflow","coursesToShow","slice","newVisibleCoursesId","reduce","carry","rootSelector","disablePreviousControlButtons","enablePreviousControlButtons","disableNextControlButtons","enableNextControlButtons","registerEventListeners","resizeTimeout","drawerToggling","subscribe","favourited","unfavorited","recalculationCount","doRecalculation","setTimeout","window","on","events","activate","e","button","target","closest","hasClass","originalEvent","preventDefault","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 .\n\n/**\n * Javascript to initialise the Recently accessed courses block.\n *\n * @module block_recentlyaccessedcourses/main\n * @copyright 2018 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n [\n 'jquery',\n 'core/custom_interaction_events',\n 'core/notification',\n 'core/pubsub',\n 'core/paged_content_paging_bar',\n 'core/templates',\n 'core_course/events',\n 'core_course/repository',\n 'core/aria',\n ],\n function(\n $,\n CustomEvents,\n Notification,\n PubSub,\n PagedContentPagingBar,\n Templates,\n CourseEvents,\n CoursesRepository,\n Aria\n ) {\n\n // Constants.\n var NUM_COURSES_TOTAL = 10;\n var SELECTORS = {\n BLOCK_CONTAINER: '[data-region=\"recentlyaccessedcourses\"]',\n CARD_CONTAINER: '[data-region=\"card-deck\"]',\n COURSE_IS_FAVOURITE: '[data-region=\"is-favourite\"]',\n CONTENT: '[data-region=\"view-content\"]',\n EMPTY_MESSAGE: '[data-region=\"empty-message\"]',\n LOADING_PLACEHOLDER: '[data-region=\"loading-placeholder\"]',\n PAGING_BAR: '[data-region=\"paging-bar\"]',\n PAGING_BAR_NEXT: '[data-control=\"next\"]',\n PAGING_BAR_PREVIOUS: '[data-control=\"previous\"]'\n };\n // Module variables.\n var contentLoaded = false;\n var allCourses = [];\n var visibleCoursesId = null;\n var cardWidth = null;\n var viewIndex = 0;\n var availableVisibleCards = 1;\n\n /**\n * Show the empty message when no course are found.\n *\n * @param {object} root The root element for the courses view.\n */\n var showEmptyMessage = function(root) {\n root.find(SELECTORS.EMPTY_MESSAGE).removeClass('hidden');\n root.find(SELECTORS.LOADING_PLACEHOLDER).addClass('hidden');\n root.find(SELECTORS.CONTENT).addClass('hidden');\n };\n\n /**\n * Show the empty message when no course are found.\n *\n * @param {object} root The root element for the courses view.\n */\n var showContent = function(root) {\n root.find(SELECTORS.CONTENT).removeClass('hidden');\n root.find(SELECTORS.EMPTY_MESSAGE).addClass('hidden');\n root.find(SELECTORS.LOADING_PLACEHOLDER).addClass('hidden');\n };\n\n /**\n * Show the paging bar.\n *\n * @param {object} root The root element for the courses view.\n */\n var showPagingBar = function(root) {\n var pagingBar = root.find(SELECTORS.PAGING_BAR);\n pagingBar.css('opacity', 1);\n pagingBar.css('visibility', 'visible');\n Aria.unhide(pagingBar);\n };\n\n /**\n * Hide the paging bar.\n *\n * @param {object} root The root element for the courses view.\n */\n var hidePagingBar = function(root) {\n var pagingBar = root.find(SELECTORS.PAGING_BAR);\n pagingBar.css('opacity', 0);\n pagingBar.css('visibility', 'hidden');\n Aria.hide(pagingBar);\n };\n\n /**\n * Show the favourite indicator for the given course (if it's in the list).\n *\n * @param {object} root The root element for the courses view.\n * @param {number} courseId The id of the course to be favourited.\n */\n var favouriteCourse = function(root, courseId) {\n allCourses.forEach(function(course) {\n if (course.attr('data-course-id') == courseId) {\n course.find(SELECTORS.COURSE_IS_FAVOURITE).removeClass('hidden');\n }\n });\n };\n\n /**\n * Hide the favourite indicator for the given course (if it's in the list).\n *\n * @param {object} root The root element for the courses view.\n * @param {number} courseId The id of the course to be unfavourited.\n */\n var unfavouriteCourse = function(root, courseId) {\n allCourses.forEach(function(course) {\n if (course.attr('data-course-id') == courseId) {\n course.find(SELECTORS.COURSE_IS_FAVOURITE).addClass('hidden');\n }\n });\n };\n\n /**\n * Render the a list of courses.\n *\n * @param {array} courses containing array of courses.\n * @return {promise} Resolved with list of rendered courses as jQuery objects.\n */\n var renderAllCourses = function(courses) {\n var showcoursecategory = $(SELECTORS.BLOCK_CONTAINER).data('displaycoursecategory');\n var promises = courses.map(function(course) {\n course.showcoursecategory = showcoursecategory;\n return Templates.render('block_recentlyaccessedcourses/course-card', course);\n });\n\n return $.when.apply(null, promises).then(function() {\n var renderedCourses = [];\n\n promises.forEach(function(promise) {\n promise.then(function(html) {\n renderedCourses.push($(html));\n return;\n })\n .catch(Notification.exception);\n });\n\n return renderedCourses;\n });\n };\n\n /**\n * Fetch user's recently accessed courses and reload the content of the block.\n *\n * @param {int} userid User whose courses will be shown\n * @returns {promise} The updated content for the block.\n */\n var loadContent = function(userid) {\n return CoursesRepository.getLastAccessedCourses(userid, NUM_COURSES_TOTAL)\n .then(function(courses) {\n return renderAllCourses(courses);\n });\n };\n\n /**\n * Recalculate the number of courses that should be visible.\n *\n * @param {object} root The root element for the courses view.\n */\n var recalculateVisibleCourses = function(root) {\n var container = root.find(SELECTORS.CONTENT).find(SELECTORS.CARD_CONTAINER);\n var availableWidth = parseFloat(root.css('width'));\n var numberOfCourses = allCourses.length;\n var start = 0;\n\n if (!cardWidth) {\n container.html(allCourses[0]);\n // Render one card initially to calculate the width of the cards\n // including the margins.\n cardWidth = allCourses[0].outerWidth(true);\n }\n\n availableVisibleCards = Math.floor(availableWidth / cardWidth);\n\n if (viewIndex + availableVisibleCards < numberOfCourses) {\n start = viewIndex;\n } else {\n var overflow = (viewIndex + availableVisibleCards) - numberOfCourses;\n start = viewIndex - overflow;\n start = start >= 0 ? start : 0;\n }\n\n // At least show one card.\n if (availableVisibleCards === 0) {\n availableVisibleCards = 1;\n }\n\n var coursesToShow = allCourses.slice(start, start + availableVisibleCards);\n // Create an id for the list of courses we expect to be displayed.\n var newVisibleCoursesId = coursesToShow.reduce(function(carry, course) {\n return carry + course.attr('data-course-id');\n }, '');\n\n // Centre the courses if we have an overflow of courses.\n if (allCourses.length > coursesToShow.length) {\n container.addClass('justify-content-center');\n container.removeClass('justify-content-start');\n } else {\n container.removeClass('justify-content-center');\n container.addClass('justify-content-start');\n }\n\n // Don't bother updating the DOM unless the visible courses have changed.\n if (visibleCoursesId != newVisibleCoursesId) {\n var pagingBar = root.find(PagedContentPagingBar.rootSelector);\n container.html(coursesToShow);\n visibleCoursesId = newVisibleCoursesId;\n\n if (availableVisibleCards >= allCourses.length) {\n hidePagingBar(root);\n } else {\n showPagingBar(root);\n\n if (viewIndex === 0) {\n PagedContentPagingBar.disablePreviousControlButtons(pagingBar);\n } else {\n PagedContentPagingBar.enablePreviousControlButtons(pagingBar);\n }\n\n if (viewIndex + availableVisibleCards >= allCourses.length) {\n PagedContentPagingBar.disableNextControlButtons(pagingBar);\n } else {\n PagedContentPagingBar.enableNextControlButtons(pagingBar);\n }\n }\n }\n };\n\n /**\n * Register event listeners for the block.\n *\n * @param {object} root The root element for the recentlyaccessedcourses block.\n */\n var registerEventListeners = function(root) {\n var resizeTimeout = null;\n var drawerToggling = false;\n\n PubSub.subscribe(CourseEvents.favourited, function(courseId) {\n favouriteCourse(root, courseId);\n });\n\n PubSub.subscribe(CourseEvents.unfavorited, function(courseId) {\n unfavouriteCourse(root, courseId);\n });\n\n PubSub.subscribe('nav-drawer-toggle-start', function() {\n if (!contentLoaded || !allCourses.length || drawerToggling) {\n // Nothing to recalculate.\n return;\n }\n\n drawerToggling = true;\n var recalculationCount = 0;\n // This function is going to recalculate the number of courses while\n // the nav drawer is opening or closes (up to a maximum of 5 recalcs).\n var doRecalculation = function() {\n setTimeout(function() {\n recalculateVisibleCourses(root);\n recalculationCount++;\n\n if (recalculationCount < 5 && drawerToggling) {\n // If we haven't done too many recalculations and the drawer\n // is still toggling then recurse.\n doRecalculation();\n }\n }, 100);\n };\n\n // Start the recalculations.\n doRecalculation(root);\n });\n\n PubSub.subscribe('nav-drawer-toggle-end', function() {\n drawerToggling = false;\n });\n\n $(window).on('resize', function() {\n if (!contentLoaded || !allCourses.length) {\n // Nothing to reclculate.\n return;\n }\n\n // Resize events fire rapidly so recalculating the visible courses each\n // time can be expensive. Let's debounce them,\n if (!resizeTimeout) {\n resizeTimeout = setTimeout(function() {\n resizeTimeout = null;\n recalculateVisibleCourses(root);\n // The recalculateVisibleCourses function will execute at a rate of 15fps.\n }, 66);\n }\n });\n\n CustomEvents.define(root, [CustomEvents.events.activate]);\n root.on(CustomEvents.events.activate, SELECTORS.PAGING_BAR_NEXT, function(e, data) {\n var button = $(e.target).closest(SELECTORS.PAGING_BAR_NEXT);\n if (!button.hasClass('disabled')) {\n viewIndex = viewIndex + availableVisibleCards;\n recalculateVisibleCourses(root);\n }\n\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.PAGING_BAR_PREVIOUS, function(e, data) {\n var button = $(e.target).closest(SELECTORS.PAGING_BAR_PREVIOUS);\n if (!button.hasClass('disabled')) {\n viewIndex = viewIndex - availableVisibleCards;\n viewIndex = viewIndex < 0 ? 0 : viewIndex;\n recalculateVisibleCourses(root);\n }\n\n data.originalEvent.preventDefault();\n });\n };\n\n /**\n * Get and show the recent courses into the block.\n *\n * @param {int} userid User from which the courses will be obtained\n * @param {object} root The root element for the recentlyaccessedcourses block.\n */\n var init = function(userid, root) {\n root = $(root);\n\n registerEventListeners(root);\n loadContent(userid)\n .then(function(renderedCourses) {\n allCourses = renderedCourses;\n contentLoaded = true;\n\n if (allCourses.length) {\n showContent(root);\n recalculateVisibleCourses(root);\n } else {\n showEmptyMessage(root);\n }\n\n return;\n })\n .catch(Notification.exception);\n };\n\n return {\n init: init\n };\n });\n"],"file":"main.min.js"} \ No newline at end of file diff --git a/blocks/recentlyaccessedcourses/amd/src/main.js b/blocks/recentlyaccessedcourses/amd/src/main.js index 423eeb0abe3..7fbf97e312a 100644 --- a/blocks/recentlyaccessedcourses/amd/src/main.js +++ b/blocks/recentlyaccessedcourses/amd/src/main.js @@ -16,8 +16,7 @@ /** * Javascript to initialise the Recently accessed courses block. * - * @module block_recentlyaccessedcourses/main.js - * @package block_recentlyaccessedcourses + * @module block_recentlyaccessedcourses/main * @copyright 2018 Victor Deniz * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/recentlyaccesseditems/amd/build/main.min.js.map b/blocks/recentlyaccesseditems/amd/build/main.min.js.map index 6308a5e272f..0ec27118f46 100644 --- a/blocks/recentlyaccesseditems/amd/build/main.min.js.map +++ b/blocks/recentlyaccesseditems/amd/build/main.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/main.js"],"names":["define","$","Repository","Templates","Notification","SELECTORS","CARDDECK_CONTAINER","CARDDECK","getRecentItems","limit","renderItems","root","items","length","render","noitemsimgurl","attr","init","itemsContainer","find","itemsContent","itemsPromise","then","pageContentPromise","html","js","replaceNodeContents","catch","exception"],"mappings":"AAyBAA,OAAM,oCACF,CACI,QADJ,CAEI,wCAFJ,CAGI,gBAHJ,CAII,mBAJJ,CADE,CAOF,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKE,IAIMC,CAAAA,CAAS,CAAG,CACZC,kBAAkB,CAAE,8CADR,CAEZC,QAAQ,CAAE,sDAFE,CAJlB,CAgBMC,CAAc,CAAG,SAASC,CAAT,CAAgB,CACjC,MAAOP,CAAAA,CAAU,CAACM,cAAX,CAA0BC,CAA1B,CACV,CAlBH,CA4BMC,CAAW,CAAG,SAASC,CAAT,CAAeC,CAAf,CAAsB,CACpC,GAAmB,CAAf,CAAAA,CAAK,CAACC,MAAV,CAAsB,CAClB,MAAOV,CAAAA,CAAS,CAACW,MAAV,CAAiB,wCAAjB,CAA2D,CAC9DF,KAAK,CAAEA,CADuD,CAA3D,CAGV,CAJD,IAIO,CACH,GAAIG,CAAAA,CAAa,CAAGJ,CAAI,CAACK,IAAL,CAAU,oBAAV,CAApB,CACA,MAAOb,CAAAA,CAAS,CAACW,MAAV,CAAiB,sCAAjB,CAAyD,CAC5DC,aAAa,CAAEA,CAD6C,CAAzD,CAGV,CACJ,CAvCH,CAgEE,MAAO,CACHE,IAAI,CAnBG,QAAPA,CAAAA,IAAO,CAASN,CAAT,CAAe,CACtBA,CAAI,CAAGV,CAAC,CAACU,CAAD,CAAR,CADsB,GAGlBO,CAAAA,CAAc,CAAGP,CAAI,CAACQ,IAAL,CAAUd,CAAS,CAACC,kBAApB,CAHC,CAIlBc,CAAY,CAAGT,CAAI,CAACQ,IAAL,CAAUd,CAAS,CAACE,QAApB,CAJG,CAMlBc,CAAY,CAAGb,CAAc,GANX,CAQtBa,CAAY,CAACC,IAAb,CAAkB,SAASV,CAAT,CAAgB,CAC9B,GAAIW,CAAAA,CAAkB,CAAGb,CAAW,CAACQ,CAAD,CAAiBN,CAAjB,CAApC,CAEAW,CAAkB,CAACD,IAAnB,CAAwB,SAASE,CAAT,CAAeC,CAAf,CAAmB,CACvC,MAAOtB,CAAAA,CAAS,CAACuB,mBAAV,CAA8BN,CAA9B,CAA4CI,CAA5C,CAAkDC,CAAlD,CACV,CAFD,EAEGE,KAFH,CAESvB,CAAY,CAACwB,SAFtB,EAGA,MAAOP,CAAAA,CACV,CAPD,EAOGM,KAPH,CAOSvB,CAAY,CAACwB,SAPtB,CAQH,CAEM,CAGV,CA/EC,CAAN","sourcesContent":["\n// 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 .\n\n/**\n * Javascript to initialise the Recently accessed items block.\n *\n * @module block_recentlyaccesseditems/main\n * @package block_recentlyaccesseditems\n * @copyright 2018 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n [\n 'jquery',\n 'block_recentlyaccesseditems/repository',\n 'core/templates',\n 'core/notification'\n ],\n function(\n $,\n Repository,\n Templates,\n Notification\n ) {\n\n var NUM_ITEMS = 9;\n\n var SELECTORS = {\n CARDDECK_CONTAINER: '[data-region=\"recentlyaccesseditems-view\"]',\n CARDDECK: '[data-region=\"recentlyaccesseditems-view-content\"]',\n };\n\n /**\n * Get recent items from backend.\n *\n * @method getRecentItems\n * @param {int} limit Only return this many results\n * @return {array} Items user most recently has accessed\n */\n var getRecentItems = function(limit) {\n return Repository.getRecentItems(limit);\n };\n\n /**\n * Render the block content.\n *\n * @method renderItems\n * @param {object} root The root element for the items view.\n * @param {array} items containing array of returned items.\n * @return {promise} Resolved with HTML and JS strings\n */\n var renderItems = function(root, items) {\n if (items.length > 0) {\n return Templates.render('block_recentlyaccesseditems/view-cards', {\n items: items\n });\n } else {\n var noitemsimgurl = root.attr('data-noitemsimgurl');\n return Templates.render('block_recentlyaccesseditems/no-items', {\n noitemsimgurl: noitemsimgurl\n });\n }\n };\n\n /**\n * Get and show the recent items into the block.\n *\n * @param {object} root The root element for the items block.\n */\n var init = function(root) {\n root = $(root);\n\n var itemsContainer = root.find(SELECTORS.CARDDECK_CONTAINER);\n var itemsContent = root.find(SELECTORS.CARDDECK);\n\n var itemsPromise = getRecentItems(NUM_ITEMS);\n\n itemsPromise.then(function(items) {\n var pageContentPromise = renderItems(itemsContainer, items);\n\n pageContentPromise.then(function(html, js) {\n return Templates.replaceNodeContents(itemsContent, html, js);\n }).catch(Notification.exception);\n return itemsPromise;\n }).catch(Notification.exception);\n };\n\n return {\n init: init\n };\n });"],"file":"main.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/main.js"],"names":["define","$","Repository","Templates","Notification","SELECTORS","CARDDECK_CONTAINER","CARDDECK","getRecentItems","limit","renderItems","root","items","length","render","noitemsimgurl","attr","init","itemsContainer","find","itemsContent","itemsPromise","then","pageContentPromise","html","js","replaceNodeContents","catch","exception"],"mappings":"AAwBAA,OAAM,oCACF,CACI,QADJ,CAEI,wCAFJ,CAGI,gBAHJ,CAII,mBAJJ,CADE,CAOF,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKE,IAIMC,CAAAA,CAAS,CAAG,CACZC,kBAAkB,CAAE,8CADR,CAEZC,QAAQ,CAAE,sDAFE,CAJlB,CAgBMC,CAAc,CAAG,SAASC,CAAT,CAAgB,CACjC,MAAOP,CAAAA,CAAU,CAACM,cAAX,CAA0BC,CAA1B,CACV,CAlBH,CA4BMC,CAAW,CAAG,SAASC,CAAT,CAAeC,CAAf,CAAsB,CACpC,GAAmB,CAAf,CAAAA,CAAK,CAACC,MAAV,CAAsB,CAClB,MAAOV,CAAAA,CAAS,CAACW,MAAV,CAAiB,wCAAjB,CAA2D,CAC9DF,KAAK,CAAEA,CADuD,CAA3D,CAGV,CAJD,IAIO,CACH,GAAIG,CAAAA,CAAa,CAAGJ,CAAI,CAACK,IAAL,CAAU,oBAAV,CAApB,CACA,MAAOb,CAAAA,CAAS,CAACW,MAAV,CAAiB,sCAAjB,CAAyD,CAC5DC,aAAa,CAAEA,CAD6C,CAAzD,CAGV,CACJ,CAvCH,CAgEE,MAAO,CACHE,IAAI,CAnBG,QAAPA,CAAAA,IAAO,CAASN,CAAT,CAAe,CACtBA,CAAI,CAAGV,CAAC,CAACU,CAAD,CAAR,CADsB,GAGlBO,CAAAA,CAAc,CAAGP,CAAI,CAACQ,IAAL,CAAUd,CAAS,CAACC,kBAApB,CAHC,CAIlBc,CAAY,CAAGT,CAAI,CAACQ,IAAL,CAAUd,CAAS,CAACE,QAApB,CAJG,CAMlBc,CAAY,CAAGb,CAAc,GANX,CAQtBa,CAAY,CAACC,IAAb,CAAkB,SAASV,CAAT,CAAgB,CAC9B,GAAIW,CAAAA,CAAkB,CAAGb,CAAW,CAACQ,CAAD,CAAiBN,CAAjB,CAApC,CAEAW,CAAkB,CAACD,IAAnB,CAAwB,SAASE,CAAT,CAAeC,CAAf,CAAmB,CACvC,MAAOtB,CAAAA,CAAS,CAACuB,mBAAV,CAA8BN,CAA9B,CAA4CI,CAA5C,CAAkDC,CAAlD,CACV,CAFD,EAEGE,KAFH,CAESvB,CAAY,CAACwB,SAFtB,EAGA,MAAOP,CAAAA,CACV,CAPD,EAOGM,KAPH,CAOSvB,CAAY,CAACwB,SAPtB,CAQH,CAEM,CAGV,CA/EC,CAAN","sourcesContent":["\n// 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 .\n\n/**\n * Javascript to initialise the Recently accessed items block.\n *\n * @module block_recentlyaccesseditems/main\n * @copyright 2018 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n [\n 'jquery',\n 'block_recentlyaccesseditems/repository',\n 'core/templates',\n 'core/notification'\n ],\n function(\n $,\n Repository,\n Templates,\n Notification\n ) {\n\n var NUM_ITEMS = 9;\n\n var SELECTORS = {\n CARDDECK_CONTAINER: '[data-region=\"recentlyaccesseditems-view\"]',\n CARDDECK: '[data-region=\"recentlyaccesseditems-view-content\"]',\n };\n\n /**\n * Get recent items from backend.\n *\n * @method getRecentItems\n * @param {int} limit Only return this many results\n * @return {array} Items user most recently has accessed\n */\n var getRecentItems = function(limit) {\n return Repository.getRecentItems(limit);\n };\n\n /**\n * Render the block content.\n *\n * @method renderItems\n * @param {object} root The root element for the items view.\n * @param {array} items containing array of returned items.\n * @return {promise} Resolved with HTML and JS strings\n */\n var renderItems = function(root, items) {\n if (items.length > 0) {\n return Templates.render('block_recentlyaccesseditems/view-cards', {\n items: items\n });\n } else {\n var noitemsimgurl = root.attr('data-noitemsimgurl');\n return Templates.render('block_recentlyaccesseditems/no-items', {\n noitemsimgurl: noitemsimgurl\n });\n }\n };\n\n /**\n * Get and show the recent items into the block.\n *\n * @param {object} root The root element for the items block.\n */\n var init = function(root) {\n root = $(root);\n\n var itemsContainer = root.find(SELECTORS.CARDDECK_CONTAINER);\n var itemsContent = root.find(SELECTORS.CARDDECK);\n\n var itemsPromise = getRecentItems(NUM_ITEMS);\n\n itemsPromise.then(function(items) {\n var pageContentPromise = renderItems(itemsContainer, items);\n\n pageContentPromise.then(function(html, js) {\n return Templates.replaceNodeContents(itemsContent, html, js);\n }).catch(Notification.exception);\n return itemsPromise;\n }).catch(Notification.exception);\n };\n\n return {\n init: init\n };\n });"],"file":"main.min.js"} \ No newline at end of file diff --git a/blocks/recentlyaccesseditems/amd/build/repository.min.js.map b/blocks/recentlyaccesseditems/amd/build/repository.min.js.map index 2a17bd0b5b1..6037b6471a0 100644 --- a/blocks/recentlyaccesseditems/amd/build/repository.min.js.map +++ b/blocks/recentlyaccesseditems/amd/build/repository.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/repository.js"],"names":["define","Ajax","getRecentItems","limit","args","call","methodname"],"mappings":"AAuBAA,OAAM,0CAAC,CAAC,WAAD,CAAD,CAAgB,SAASC,CAAT,CAAe,CAoBjC,MAAO,CACHC,cAAc,CAZG,QAAjBA,CAAAA,cAAiB,CAASC,CAAT,CAAgB,CACjC,GAAIC,CAAAA,CAAI,CAAG,EAAX,CACA,GAAqB,WAAjB,QAAOD,CAAAA,CAAX,CAAkC,CAC9BC,CAAI,CAACD,KAAL,CAAaA,CAChB,CAKD,MAAOF,CAAAA,CAAI,CAACI,IAAL,CAAU,CAJH,CACVC,UAAU,CAAE,8CADF,CAEVF,IAAI,CAAEA,CAFI,CAIG,CAAV,EAAqB,CAArB,CACV,CACM,CAGV,CAvBK,CAAN","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 .\n\n/**\n * A javascript module to handle user ajax actions.\n *\n * @module block_recentlyaccesseditems/repository\n * @package block_recentlyaccesseditems\n * @copyright 2018 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/ajax'], function(Ajax) {\n\n /**\n * Get the list of items that the user has most recently accessed.\n *\n * @method getRecentItems\n * @param {int} limit Only return this many results\n * @return {promise} Resolved with an array of items\n */\n var getRecentItems = function(limit) {\n var args = {};\n if (typeof limit !== 'undefined') {\n args.limit = limit;\n }\n var request = {\n methodname: 'block_recentlyaccesseditems_get_recent_items',\n args: args\n };\n return Ajax.call([request])[0];\n };\n return {\n getRecentItems: getRecentItems\n };\n});"],"file":"repository.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/repository.js"],"names":["define","Ajax","getRecentItems","limit","args","call","methodname"],"mappings":"AAsBAA,OAAM,0CAAC,CAAC,WAAD,CAAD,CAAgB,SAASC,CAAT,CAAe,CAoBjC,MAAO,CACHC,cAAc,CAZG,QAAjBA,CAAAA,cAAiB,CAASC,CAAT,CAAgB,CACjC,GAAIC,CAAAA,CAAI,CAAG,EAAX,CACA,GAAqB,WAAjB,QAAOD,CAAAA,CAAX,CAAkC,CAC9BC,CAAI,CAACD,KAAL,CAAaA,CAChB,CAKD,MAAOF,CAAAA,CAAI,CAACI,IAAL,CAAU,CAJH,CACVC,UAAU,CAAE,8CADF,CAEVF,IAAI,CAAEA,CAFI,CAIG,CAAV,EAAqB,CAArB,CACV,CACM,CAGV,CAvBK,CAAN","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 .\n\n/**\n * A javascript module to handle user ajax actions.\n *\n * @module block_recentlyaccesseditems/repository\n * @copyright 2018 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/ajax'], function(Ajax) {\n\n /**\n * Get the list of items that the user has most recently accessed.\n *\n * @method getRecentItems\n * @param {int} limit Only return this many results\n * @return {promise} Resolved with an array of items\n */\n var getRecentItems = function(limit) {\n var args = {};\n if (typeof limit !== 'undefined') {\n args.limit = limit;\n }\n var request = {\n methodname: 'block_recentlyaccesseditems_get_recent_items',\n args: args\n };\n return Ajax.call([request])[0];\n };\n return {\n getRecentItems: getRecentItems\n };\n});"],"file":"repository.min.js"} \ No newline at end of file diff --git a/blocks/recentlyaccesseditems/amd/src/main.js b/blocks/recentlyaccesseditems/amd/src/main.js index 5d4fd16e5c3..c217e002ae3 100644 --- a/blocks/recentlyaccesseditems/amd/src/main.js +++ b/blocks/recentlyaccesseditems/amd/src/main.js @@ -18,7 +18,6 @@ * Javascript to initialise the Recently accessed items block. * * @module block_recentlyaccesseditems/main - * @package block_recentlyaccesseditems * @copyright 2018 Victor Deniz * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/recentlyaccesseditems/amd/src/repository.js b/blocks/recentlyaccesseditems/amd/src/repository.js index cd76802a55b..a1d7a122148 100644 --- a/blocks/recentlyaccesseditems/amd/src/repository.js +++ b/blocks/recentlyaccesseditems/amd/src/repository.js @@ -17,7 +17,6 @@ * A javascript module to handle user ajax actions. * * @module block_recentlyaccesseditems/repository - * @package block_recentlyaccesseditems * @copyright 2018 Victor Deniz * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/settings/amd/build/settingsblock.min.js.map b/blocks/settings/amd/build/settingsblock.min.js.map index 1696676c470..716f924fd1d 100644 --- a/blocks/settings/amd/build/settingsblock.min.js.map +++ b/blocks/settings/amd/build/settingsblock.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/settingsblock.js"],"names":["define","$","Tree","init","instanceid","siteAdminNodeId","adminTree","siteAdminNode","treeRoot","find","siteAdminLink","children","first","replaceWith","html","finishExpandingGroup","item","prototype","call","Y","use","Global","fire","M","core","globalEvents","BLOCK_CONTENT_UPDATED","collapseGroup"],"mappings":"AAuBAA,OAAM,gCAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAC9C,MAAO,CACHC,IAAI,CAAE,cAASC,CAAT,CAAqBC,CAArB,CAAsC,CACxC,GAAIC,CAAAA,CAAS,CAAG,GAAIJ,CAAAA,CAAJ,CAAS,6BAAT,CAAhB,CACA,GAAIG,CAAJ,CAAqB,IACbE,CAAAA,CAAa,CAAGD,CAAS,CAACE,QAAV,CAAmBC,IAAnB,CAAwB,IAAMJ,CAA9B,CADH,CAEbK,CAAa,CAAGH,CAAa,CAACI,QAAd,CAAuB,GAAvB,EAA4BC,KAA5B,EAFH,CAGjBF,CAAa,CAACG,WAAd,CAA0B,wBAAwBH,CAAa,CAACI,IAAd,EAAxB,CAA+C,SAAzE,CACH,CACDR,CAAS,CAACS,oBAAV,CAAiC,SAASC,CAAT,CAAe,CAC5Cd,CAAI,CAACe,SAAL,CAAeF,oBAAf,CAAoCG,IAApC,CAAyC,IAAzC,CAA+CF,CAA/C,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDtB,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CAPD,CAQAE,CAAS,CAACqB,aAAV,CAA0B,SAASX,CAAT,CAAe,CACrCd,CAAI,CAACe,SAAL,CAAeU,aAAf,CAA6BT,IAA7B,CAAkC,IAAlC,CAAwCF,CAAxC,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDtB,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CACJ,CAxBE,CA0BV,CA3BK,CAAN","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 .\n\n/**\n * Load the settings block tree javscript\n *\n * @module block_settings/settingsblock\n * @package core\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/tree'], function($, Tree) {\n return {\n init: function(instanceid, siteAdminNodeId) {\n var adminTree = new Tree(\".block_settings .block_tree\");\n if (siteAdminNodeId) {\n var siteAdminNode = adminTree.treeRoot.find('#' + siteAdminNodeId);\n var siteAdminLink = siteAdminNode.children('a').first();\n siteAdminLink.replaceWith('' + siteAdminLink.html() + '');\n }\n adminTree.finishExpandingGroup = function(item) {\n Tree.prototype.finishExpandingGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n adminTree.collapseGroup = function(item) {\n Tree.prototype.collapseGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n }\n };\n});\n"],"file":"settingsblock.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/settingsblock.js"],"names":["define","$","Tree","init","instanceid","siteAdminNodeId","adminTree","siteAdminNode","treeRoot","find","siteAdminLink","children","first","replaceWith","html","finishExpandingGroup","item","prototype","call","Y","use","Global","fire","M","core","globalEvents","BLOCK_CONTENT_UPDATED","collapseGroup"],"mappings":"AAsBAA,OAAM,gCAAC,CAAC,QAAD,CAAW,WAAX,CAAD,CAA0B,SAASC,CAAT,CAAYC,CAAZ,CAAkB,CAC9C,MAAO,CACHC,IAAI,CAAE,cAASC,CAAT,CAAqBC,CAArB,CAAsC,CACxC,GAAIC,CAAAA,CAAS,CAAG,GAAIJ,CAAAA,CAAJ,CAAS,6BAAT,CAAhB,CACA,GAAIG,CAAJ,CAAqB,IACbE,CAAAA,CAAa,CAAGD,CAAS,CAACE,QAAV,CAAmBC,IAAnB,CAAwB,IAAMJ,CAA9B,CADH,CAEbK,CAAa,CAAGH,CAAa,CAACI,QAAd,CAAuB,GAAvB,EAA4BC,KAA5B,EAFH,CAGjBF,CAAa,CAACG,WAAd,CAA0B,wBAAwBH,CAAa,CAACI,IAAd,EAAxB,CAA+C,SAAzE,CACH,CACDR,CAAS,CAACS,oBAAV,CAAiC,SAASC,CAAT,CAAe,CAC5Cd,CAAI,CAACe,SAAL,CAAeF,oBAAf,CAAoCG,IAApC,CAAyC,IAAzC,CAA+CF,CAA/C,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDtB,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CAPD,CAQAE,CAAS,CAACqB,aAAV,CAA0B,SAASX,CAAT,CAAe,CACrCd,CAAI,CAACe,SAAL,CAAeU,aAAf,CAA6BT,IAA7B,CAAkC,IAAlC,CAAwCF,CAAxC,EACAG,CAAC,CAACC,GAAF,CAAM,mBAAN,CAA2B,UAAW,CAClCD,CAAC,CAACE,MAAF,CAASC,IAAT,CAAcC,CAAC,CAACC,IAAF,CAAOC,YAAP,CAAoBC,qBAAlC,CAAyD,CACrDtB,UAAU,CAAEA,CADyC,CAAzD,CAGH,CAJD,CAKH,CACJ,CAxBE,CA0BV,CA3BK,CAAN","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 .\n\n/**\n * Load the settings block tree javscript\n *\n * @module block_settings/settingsblock\n * @copyright 2015 John Okely \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/tree'], function($, Tree) {\n return {\n init: function(instanceid, siteAdminNodeId) {\n var adminTree = new Tree(\".block_settings .block_tree\");\n if (siteAdminNodeId) {\n var siteAdminNode = adminTree.treeRoot.find('#' + siteAdminNodeId);\n var siteAdminLink = siteAdminNode.children('a').first();\n siteAdminLink.replaceWith('' + siteAdminLink.html() + '');\n }\n adminTree.finishExpandingGroup = function(item) {\n Tree.prototype.finishExpandingGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n adminTree.collapseGroup = function(item) {\n Tree.prototype.collapseGroup.call(this, item);\n Y.use('moodle-core-event', function() {\n Y.Global.fire(M.core.globalEvents.BLOCK_CONTENT_UPDATED, {\n instanceid: instanceid\n });\n });\n };\n }\n };\n});\n"],"file":"settingsblock.min.js"} \ No newline at end of file diff --git a/blocks/settings/amd/src/settingsblock.js b/blocks/settings/amd/src/settingsblock.js index f17553f1822..9625f157ff7 100644 --- a/blocks/settings/amd/src/settingsblock.js +++ b/blocks/settings/amd/src/settingsblock.js @@ -17,7 +17,6 @@ * Load the settings block tree javscript * * @module block_settings/settingsblock - * @package core * @copyright 2015 John Okely * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/starredcourses/amd/build/repository.min.js.map b/blocks/starredcourses/amd/build/repository.min.js.map index 41d6b41c486..2f04b4f633d 100644 --- a/blocks/starredcourses/amd/build/repository.min.js.map +++ b/blocks/starredcourses/amd/build/repository.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/repository.js"],"names":["define","$","Ajax","Notification","getStarredCourses","args","promise","call","methodname","fail","exception"],"mappings":"AAsBAA,OAAM,mCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,mBAAxB,CAAD,CAA+C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgC,CA2BjF,MAAO,CACHC,iBAAiB,CAfG,QAApBA,CAAAA,iBAAoB,CAASC,CAAT,CAAe,IAO/BC,CAAAA,CAAO,CAAGJ,CAAI,CAACK,IAAL,CAAU,CALV,CACVC,UAAU,CAAE,0CADF,CAEVH,IAAI,CAAEA,CAFI,CAKU,CAAV,EAAqB,CAArB,CAPqB,CASnCC,CAAO,CAACG,IAAR,CAAaN,CAAY,CAACO,SAA1B,EAEA,MAAOJ,CAAAA,CACV,CAEM,CAGV,CA9BK,CAAN","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 .\n\n/**\n * A javascript module to retrieve user's starred courses.\n *\n * @package block_starredcourses\n * @copyright 2018 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {\n\n /**\n * Retrieve a list of starred courses.\n *\n * Valid args are:\n * int limit number of records to retrieve\n * int offset the offset of records to retrieve\n *\n * @method getStarredCourses\n * @param {object} args The request arguments\n * @return {promise} Resolved with an array of courses\n */\n var getStarredCourses = function(args) {\n\n var request = {\n methodname: 'block_starredcourses_get_starred_courses',\n args: args\n };\n\n var promise = Ajax.call([request])[0];\n\n promise.fail(Notification.exception);\n\n return promise;\n };\n\n return {\n getStarredCourses: getStarredCourses\n };\n});"],"file":"repository.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/repository.js"],"names":["define","$","Ajax","Notification","getStarredCourses","args","promise","call","methodname","fail","exception"],"mappings":"AAqBAA,OAAM,mCAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,mBAAxB,CAAD,CAA+C,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgC,CA2BjF,MAAO,CACHC,iBAAiB,CAfG,QAApBA,CAAAA,iBAAoB,CAASC,CAAT,CAAe,IAO/BC,CAAAA,CAAO,CAAGJ,CAAI,CAACK,IAAL,CAAU,CALV,CACVC,UAAU,CAAE,0CADF,CAEVH,IAAI,CAAEA,CAFI,CAKU,CAAV,EAAqB,CAArB,CAPqB,CASnCC,CAAO,CAACG,IAAR,CAAaN,CAAY,CAACO,SAA1B,EAEA,MAAOJ,CAAAA,CACV,CAEM,CAGV,CA9BK,CAAN","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 .\n\n/**\n * A javascript module to retrieve user's starred courses.\n *\n * @copyright 2018 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {\n\n /**\n * Retrieve a list of starred courses.\n *\n * Valid args are:\n * int limit number of records to retrieve\n * int offset the offset of records to retrieve\n *\n * @method getStarredCourses\n * @param {object} args The request arguments\n * @return {promise} Resolved with an array of courses\n */\n var getStarredCourses = function(args) {\n\n var request = {\n methodname: 'block_starredcourses_get_starred_courses',\n args: args\n };\n\n var promise = Ajax.call([request])[0];\n\n promise.fail(Notification.exception);\n\n return promise;\n };\n\n return {\n getStarredCourses: getStarredCourses\n };\n});"],"file":"repository.min.js"} \ No newline at end of file diff --git a/blocks/starredcourses/amd/src/repository.js b/blocks/starredcourses/amd/src/repository.js index 7de121ec335..761dd0a13fe 100644 --- a/blocks/starredcourses/amd/src/repository.js +++ b/blocks/starredcourses/amd/src/repository.js @@ -16,7 +16,6 @@ /** * A javascript module to retrieve user's starred courses. * - * @package block_starredcourses * @copyright 2018 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/timeline/amd/build/view.min.js.map b/blocks/timeline/amd/build/view.min.js.map index 90d9b070a05..3934e19066f 100644 --- a/blocks/timeline/amd/build/view.min.js.map +++ b/blocks/timeline/amd/build/view.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view.js"],"names":["define","$","ViewDates","ViewCourses","SELECTORS","TIMELINE_DATES_VIEW","TIMELINE_COURSES_VIEW","init","root","datesViewRoot","find","coursesViewRoot","reset","shown","hasClass"],"mappings":"AAuBAA,OAAM,uBACN,CACI,QADJ,CAEI,2BAFJ,CAGI,6BAHJ,CADM,CAMN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIE,IAEMC,CAAAA,CAAS,CAAG,CACZC,mBAAmB,CAAE,8BADT,CAEZC,qBAAqB,CAAE,gCAFX,CAFlB,CA0DE,MAAO,CACHC,IAAI,CA7CG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAe,CACtBA,CAAI,CAAGP,CAAC,CAACO,CAAD,CAAR,CADsB,GAElBC,CAAAA,CAAa,CAAGD,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACC,mBAApB,CAFE,CAGlBM,CAAe,CAAGH,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACE,qBAApB,CAHA,CAKtBJ,CAAS,CAACK,IAAV,CAAeE,CAAf,EACAN,CAAW,CAACI,IAAZ,CAAiBI,CAAjB,CACH,CAqCM,CAEHC,KAAK,CA5BG,QAARA,CAAAA,KAAQ,CAASJ,CAAT,CAAe,IACnBC,CAAAA,CAAa,CAAGD,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACC,mBAApB,CADG,CAEnBM,CAAe,CAAGH,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACE,qBAApB,CAFC,CAGvBJ,CAAS,CAACU,KAAV,CAAgBH,CAAhB,EACAN,CAAW,CAACS,KAAZ,CAAkBD,CAAlB,CACH,CAqBM,CAGHE,KAAK,CAdG,QAARA,CAAAA,KAAQ,CAASL,CAAT,CAAe,IACnBC,CAAAA,CAAa,CAAGD,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACC,mBAApB,CADG,CAEnBM,CAAe,CAAGH,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACE,qBAApB,CAFC,CAIvB,GAAIG,CAAa,CAACK,QAAd,CAAuB,QAAvB,CAAJ,CAAsC,CAClCZ,CAAS,CAACW,KAAV,CAAgBJ,CAAhB,CACH,CAFD,IAEO,CACHN,CAAW,CAACU,KAAZ,CAAkBF,CAAlB,CACH,CACJ,CAEM,CAKV,CAzEK,CAAN","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 .\n\n/**\n * Manage the timeline view for the timeline block.\n *\n * @package block_timeline\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'block_timeline/view_dates',\n 'block_timeline/view_courses',\n],\nfunction(\n $,\n ViewDates,\n ViewCourses\n) {\n\n var SELECTORS = {\n TIMELINE_DATES_VIEW: '[data-region=\"view-dates\"]',\n TIMELINE_COURSES_VIEW: '[data-region=\"view-courses\"]',\n };\n\n /**\n * Intialise the timeline dates and courses views on page load.\n * This function should only be called once per page load because\n * it can cause event listeners to be added to the page.\n *\n * @param {object} root The root element for the timeline view.\n */\n var init = function(root) {\n root = $(root);\n var datesViewRoot = root.find(SELECTORS.TIMELINE_DATES_VIEW);\n var coursesViewRoot = root.find(SELECTORS.TIMELINE_COURSES_VIEW);\n\n ViewDates.init(datesViewRoot);\n ViewCourses.init(coursesViewRoot);\n };\n\n /**\n * Reset the timeline dates and courses views to their original\n * state on first page load.\n *\n * This is called when configuration has changed for the event lists\n * to cause them to reload their data.\n *\n * @param {object} root The root element for the timeline view.\n */\n var reset = function(root) {\n var datesViewRoot = root.find(SELECTORS.TIMELINE_DATES_VIEW);\n var coursesViewRoot = root.find(SELECTORS.TIMELINE_COURSES_VIEW);\n ViewDates.reset(datesViewRoot);\n ViewCourses.reset(coursesViewRoot);\n };\n\n /**\n * Tell the timeline dates or courses view that it has been displayed.\n *\n * This is called each time one of the views is displayed and is used to\n * lazy load the data within it on first load.\n *\n * @param {object} root The root element for the timeline view.\n */\n var shown = function(root) {\n var datesViewRoot = root.find(SELECTORS.TIMELINE_DATES_VIEW);\n var coursesViewRoot = root.find(SELECTORS.TIMELINE_COURSES_VIEW);\n\n if (datesViewRoot.hasClass('active')) {\n ViewDates.shown(datesViewRoot);\n } else {\n ViewCourses.shown(coursesViewRoot);\n }\n };\n\n return {\n init: init,\n reset: reset,\n shown: shown,\n };\n});\n"],"file":"view.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view.js"],"names":["define","$","ViewDates","ViewCourses","SELECTORS","TIMELINE_DATES_VIEW","TIMELINE_COURSES_VIEW","init","root","datesViewRoot","find","coursesViewRoot","reset","shown","hasClass"],"mappings":"AAsBAA,OAAM,uBACN,CACI,QADJ,CAEI,2BAFJ,CAGI,6BAHJ,CADM,CAMN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIE,IAEMC,CAAAA,CAAS,CAAG,CACZC,mBAAmB,CAAE,8BADT,CAEZC,qBAAqB,CAAE,gCAFX,CAFlB,CA0DE,MAAO,CACHC,IAAI,CA7CG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAe,CACtBA,CAAI,CAAGP,CAAC,CAACO,CAAD,CAAR,CADsB,GAElBC,CAAAA,CAAa,CAAGD,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACC,mBAApB,CAFE,CAGlBM,CAAe,CAAGH,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACE,qBAApB,CAHA,CAKtBJ,CAAS,CAACK,IAAV,CAAeE,CAAf,EACAN,CAAW,CAACI,IAAZ,CAAiBI,CAAjB,CACH,CAqCM,CAEHC,KAAK,CA5BG,QAARA,CAAAA,KAAQ,CAASJ,CAAT,CAAe,IACnBC,CAAAA,CAAa,CAAGD,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACC,mBAApB,CADG,CAEnBM,CAAe,CAAGH,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACE,qBAApB,CAFC,CAGvBJ,CAAS,CAACU,KAAV,CAAgBH,CAAhB,EACAN,CAAW,CAACS,KAAZ,CAAkBD,CAAlB,CACH,CAqBM,CAGHE,KAAK,CAdG,QAARA,CAAAA,KAAQ,CAASL,CAAT,CAAe,IACnBC,CAAAA,CAAa,CAAGD,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACC,mBAApB,CADG,CAEnBM,CAAe,CAAGH,CAAI,CAACE,IAAL,CAAUN,CAAS,CAACE,qBAApB,CAFC,CAIvB,GAAIG,CAAa,CAACK,QAAd,CAAuB,QAAvB,CAAJ,CAAsC,CAClCZ,CAAS,CAACW,KAAV,CAAgBJ,CAAhB,CACH,CAFD,IAEO,CACHN,CAAW,CAACU,KAAZ,CAAkBF,CAAlB,CACH,CACJ,CAEM,CAKV,CAzEK,CAAN","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 .\n\n/**\n * Manage the timeline view for the timeline block.\n *\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'block_timeline/view_dates',\n 'block_timeline/view_courses',\n],\nfunction(\n $,\n ViewDates,\n ViewCourses\n) {\n\n var SELECTORS = {\n TIMELINE_DATES_VIEW: '[data-region=\"view-dates\"]',\n TIMELINE_COURSES_VIEW: '[data-region=\"view-courses\"]',\n };\n\n /**\n * Intialise the timeline dates and courses views on page load.\n * This function should only be called once per page load because\n * it can cause event listeners to be added to the page.\n *\n * @param {object} root The root element for the timeline view.\n */\n var init = function(root) {\n root = $(root);\n var datesViewRoot = root.find(SELECTORS.TIMELINE_DATES_VIEW);\n var coursesViewRoot = root.find(SELECTORS.TIMELINE_COURSES_VIEW);\n\n ViewDates.init(datesViewRoot);\n ViewCourses.init(coursesViewRoot);\n };\n\n /**\n * Reset the timeline dates and courses views to their original\n * state on first page load.\n *\n * This is called when configuration has changed for the event lists\n * to cause them to reload their data.\n *\n * @param {object} root The root element for the timeline view.\n */\n var reset = function(root) {\n var datesViewRoot = root.find(SELECTORS.TIMELINE_DATES_VIEW);\n var coursesViewRoot = root.find(SELECTORS.TIMELINE_COURSES_VIEW);\n ViewDates.reset(datesViewRoot);\n ViewCourses.reset(coursesViewRoot);\n };\n\n /**\n * Tell the timeline dates or courses view that it has been displayed.\n *\n * This is called each time one of the views is displayed and is used to\n * lazy load the data within it on first load.\n *\n * @param {object} root The root element for the timeline view.\n */\n var shown = function(root) {\n var datesViewRoot = root.find(SELECTORS.TIMELINE_DATES_VIEW);\n var coursesViewRoot = root.find(SELECTORS.TIMELINE_COURSES_VIEW);\n\n if (datesViewRoot.hasClass('active')) {\n ViewDates.shown(datesViewRoot);\n } else {\n ViewCourses.shown(coursesViewRoot);\n }\n };\n\n return {\n init: init,\n reset: reset,\n shown: shown,\n };\n});\n"],"file":"view.min.js"} \ No newline at end of file diff --git a/blocks/timeline/amd/build/view_courses.min.js.map b/blocks/timeline/amd/build/view_courses.min.js.map index 58b9369cfcd..dcf3ab3540b 100644 --- a/blocks/timeline/amd/build/view_courses.min.js.map +++ b/blocks/timeline/amd/build/view_courses.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view_courses.js"],"names":["define","$","Notification","CustomEvents","Str","Templates","EventList","CourseRepository","EventsRepository","SELECTORS","MORE_COURSES_BUTTON","MORE_COURSES_BUTTON_CONTAINER","NO_COURSES_EMPTY_MESSAGE","COURSES_LIST","COURSE_ITEMS_LOADING_PLACEHOLDER","COURSE_EVENTS_CONTAINER","COURSE_NAME","LOADING_ICON","TEMPLATES","COURSE_ITEMS","COURSE_EVENT_LIMIT","SECONDS_IN_DAY","hideLoadingPlaceholder","root","find","addClass","hideMoreCoursesButton","showMoreCoursesButton","removeClass","enableMoreCoursesButtonLoading","button","prop","render","then","html","append","catch","disableMoreCoursesButtonLoading","remove","showNoCoursesEmptyMessage","renderCourseItemsHTML","container","appendNodeContents","hasLoadedCourses","length","getOffset","parseInt","attr","setOffset","offset","getLimit","getDaysOffset","getDaysLimit","daysLimit","getMidnight","getStartTime","midnight","daysOffset","getEndTime","getEventsForCourseIds","courseIds","startTime","limit","endTime","args","courseids","starttime","endtime","queryByCourses","getEventReloadTime","data","setEventReloadTime","time","hasReloadedEventsSince","loadEventsForCourses","courses","map","course","id","updateDisplayFromCourses","noEventsURL","hasdaysoffset","hasdayslimit","daysoffset","dayslimit","nodayslimit","urls","noevents","loadMoreCourses","getEnrolledCoursesByTimelineClassification","result","startEventLoadingTime","Date","now","nextOffset","nextoffset","eventsPromise","renderPromise","when","eventsByCourse","forEach","courseId","events","courseEventsContainer","eventListRoot","rootSelector","courseGroups","groupedbycourse","filter","group","courseid","pageOnePreload","Deferred","resolve","promise","get_string","fullnamedisplay","string","init","exception","reloadCourseEvents","startReloadTime","courseEventsContainers","get","each","index","courseName","text","eventListContainer","pageDeferred","registerEventListeners","activate","on","e","originalEvent","preventDefault","stopPropagation","shown","hasClass","reset","removeAttr"],"mappings":"AAuBAA,OAAM,+BACN,CACI,QADJ,CAEI,mBAFJ,CAGI,gCAHJ,CAII,UAJJ,CAKI,gBALJ,CAMI,2BANJ,CAOI,wBAPJ,CAQI,2CARJ,CADM,CAWN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKIC,CALJ,CAMIC,CANJ,CAOIC,CAPJ,CAQIC,CARJ,CASE,IAEMC,CAAAA,CAAS,CAAG,CACZC,mBAAmB,CAAE,gCADT,CAEZC,6BAA6B,CAAE,iDAFnB,CAGZC,wBAAwB,CAAE,4CAHd,CAIZC,YAAY,CAAE,gCAJF,CAKZC,gCAAgC,CAAE,oDALtB,CAMZC,uBAAuB,CAAE,2CANb,CAOZC,WAAW,CAAE,+BAPD,CAQZC,YAAY,CAAE,eARF,CAFlB,CAaMC,CAAS,CAAG,CACZC,YAAY,CAAE,6BADF,CAEZF,YAAY,CAAE,cAFF,CAblB,CAoBMG,CAAkB,CAAG,CApB3B,CAsBMC,CAAc,MAtBpB,CA6BMC,CAAsB,CAAG,SAASC,CAAT,CAAe,CACxCA,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACK,gCAApB,EAAsDW,QAAtD,CAA+D,QAA/D,CACH,CA/BH,CAsCMC,CAAqB,CAAG,SAASH,CAAT,CAAe,CACvCA,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACE,6BAApB,EAAmDc,QAAnD,CAA4D,QAA5D,CACH,CAxCH,CA+CME,CAAqB,CAAG,SAASJ,CAAT,CAAe,CACvCA,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACE,6BAApB,EAAmDiB,WAAnD,CAA+D,QAA/D,CACH,CAjDH,CAwDMC,CAA8B,CAAG,SAASN,CAAT,CAAe,CAChD,GAAIO,CAAAA,CAAM,CAAGP,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACC,mBAApB,CAAb,CACAoB,CAAM,CAACC,IAAP,CAAY,UAAZ,KACA1B,CAAS,CAAC2B,MAAV,CAAiBd,CAAS,CAACD,YAA3B,CAAyC,EAAzC,EACKgB,IADL,CACU,SAASC,CAAT,CAAe,CACjBJ,CAAM,CAACK,MAAP,CAAcD,CAAd,EACA,MAAOA,CAAAA,CACV,CAJL,EAKKE,KALL,CAKW,UAAW,CAEd,QACH,CARL,CASH,CApEH,CA2EMC,CAA+B,CAAG,SAASd,CAAT,CAAe,CACjD,GAAIO,CAAAA,CAAM,CAAGP,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACC,mBAApB,CAAb,CACAoB,CAAM,CAACC,IAAP,CAAY,UAAZ,KACAD,CAAM,CAACN,IAAP,CAAYf,CAAS,CAACQ,YAAtB,EAAoCqB,MAApC,EACH,CA/EH,CAsFMC,CAAyB,CAAG,SAAShB,CAAT,CAAe,CAC3CA,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACG,wBAApB,EAA8CgB,WAA9C,CAA0D,QAA1D,CACH,CAxFH,CAgGMY,CAAqB,CAAG,SAASjB,CAAT,CAAeW,CAAf,CAAqB,CAC7C,GAAIO,CAAAA,CAAS,CAAGlB,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACI,YAApB,CAAhB,CACAR,CAAS,CAACqC,kBAAV,CAA6BD,CAA7B,CAAwCP,CAAxC,CAA8C,EAA9C,CACH,CAnGH,CA2GMS,CAAgB,CAAG,SAASpB,CAAT,CAAe,CAClC,MAA6D,EAAtD,CAAAA,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACM,uBAApB,EAA6C6B,MACvD,CA7GH,CAqHMC,CAAS,CAAG,SAAStB,CAAT,CAAe,CAC3B,MAAOuB,CAAAA,QAAQ,CAACvB,CAAI,CAACwB,IAAL,CAAU,aAAV,CAAD,CAA2B,EAA3B,CAClB,CAvHH,CA+HMC,CAAS,CAAG,SAASzB,CAAT,CAAe0B,CAAf,CAAuB,CACnC1B,CAAI,CAACwB,IAAL,CAAU,aAAV,CAAyBE,CAAzB,CACH,CAjIH,CAyIMC,CAAQ,CAAG,SAAS3B,CAAT,CAAe,CAC1B,MAAOuB,CAAAA,QAAQ,CAACvB,CAAI,CAACwB,IAAL,CAAU,YAAV,CAAD,CAA0B,EAA1B,CAClB,CA3IH,CAmJMI,CAAa,CAAG,SAAS5B,CAAT,CAAe,CAC/B,MAAOuB,CAAAA,QAAQ,CAACvB,CAAI,CAACwB,IAAL,CAAU,kBAAV,CAAD,CAAgC,EAAhC,CAClB,CArJH,CA+JMK,CAAY,CAAG,SAAS7B,CAAT,CAAe,CAC9B,GAAI8B,CAAAA,CAAS,CAAG9B,CAAI,CAACwB,IAAL,CAAU,iBAAV,CAAhB,CACA,MAAOM,CAAAA,CAAS,QAAT,CAAyBP,QAAQ,CAACO,CAAD,CAAY,EAAZ,CAAjC,OACV,CAlKH,CA0KMC,CAAW,CAAG,SAAS/B,CAAT,CAAe,CAC7B,MAAOuB,CAAAA,QAAQ,CAACvB,CAAI,CAACwB,IAAL,CAAU,eAAV,CAAD,CAA6B,EAA7B,CAClB,CA5KH,CAsLMQ,CAAY,CAAG,SAAShC,CAAT,CAAe,IAC1BiC,CAAAA,CAAQ,CAAGF,CAAW,CAAC/B,CAAD,CADI,CAE1BkC,CAAU,CAAGN,CAAa,CAAC5B,CAAD,CAFA,CAG9B,MAAOiC,CAAAA,CAAQ,CAAIC,CAAU,CAAGpC,CACnC,CA1LH,CAoMMqC,CAAU,CAAG,SAASnC,CAAT,CAAe,IACxBiC,CAAAA,CAAQ,CAAGF,CAAW,CAAC/B,CAAD,CADE,CAExB8B,CAAS,CAAGD,CAAY,CAAC7B,CAAD,CAFA,CAG5B,MAAO8B,CAAAA,CAAS,QAAT,CAAyBG,CAAQ,CAAIH,CAAS,CAAGhC,CAAjD,GACV,CAxMH,CAoNMsC,CAAqB,CAAG,SAASC,CAAT,CAAoBC,CAApB,CAA+BC,CAA/B,CAAsCC,CAAtC,CAA+C,CACvE,GAAIC,CAAAA,CAAI,CAAG,CACPC,SAAS,CAAEL,CADJ,CAEPM,SAAS,CAAEL,CAFJ,CAGPC,KAAK,CAAEA,CAHA,CAAX,CAMA,GAAIC,CAAJ,CAAa,CACTC,CAAI,CAACG,OAAL,CAAeJ,CAClB,CAED,MAAOvD,CAAAA,CAAgB,CAAC4D,cAAjB,CAAgCJ,CAAhC,CACV,CAhOH,CAwOMK,CAAkB,CAAG,SAAS9C,CAAT,CAAe,CACpC,MAAOA,CAAAA,CAAI,CAAC+C,IAAL,CAAU,sBAAV,CACV,CA1OH,CAkPMC,CAAkB,CAAG,SAAShD,CAAT,CAAeiD,CAAf,CAAqB,CAC1CjD,CAAI,CAAC+C,IAAL,CAAU,sBAAV,CAAkCE,CAAlC,CACH,CApPH,CA8PMC,CAAsB,CAAG,SAASlD,CAAT,CAAeiD,CAAf,CAAqB,CAC9C,MAAOH,CAAAA,CAAkB,CAAC9C,CAAD,CAAlB,CAA2BiD,CACrC,CAhQH,CA0QME,CAAoB,CAAG,SAASC,CAAT,CAAkBd,CAAlB,CAA6BE,CAA7B,CAAsC,CAC7D,GAAIH,CAAAA,CAAS,CAAGe,CAAO,CAACC,GAAR,CAAY,SAASC,CAAT,CAAiB,CACzC,MAAOA,CAAAA,CAAM,CAACC,EACjB,CAFe,CAAhB,CAIA,MAAOnB,CAAAA,CAAqB,CAACC,CAAD,CAAYC,CAAZ,CAAuBzC,CAAkB,CAAG,CAA5C,CAA+C2C,CAA/C,CAC/B,CAhRH,CA6RMgB,CAAwB,CAAG,SAASJ,CAAT,CAAkBpD,CAAlB,CAAwBiC,CAAxB,CAAkCC,CAAlC,CAA8CJ,CAA9C,CAAyD2B,CAAzD,CAAsE,CAEjG,MAAO3E,CAAAA,CAAS,CAAC2B,MAAV,CAAiBd,CAAS,CAACC,YAA3B,CAAyC,CAC5CwD,OAAO,CAAEA,CADmC,CAE5CnB,QAAQ,CAAEA,CAFkC,CAG5CyB,aAAa,GAH+B,CAI5CC,YAAY,CAAE7B,CAAS,QAJqB,CAK5C8B,UAAU,CAAE1B,CALgC,CAM5C2B,SAAS,CAAE/B,CANiC,CAO5CgC,WAAW,CAAEhC,CAAS,QAPsB,CAQ5CiC,IAAI,CAAE,CACFC,QAAQ,CAAEP,CADR,CARsC,CAAzC,EAWJ/C,IAXI,CAWC,SAASC,CAAT,CAAe,CACnBZ,CAAsB,CAACC,CAAD,CAAtB,CAEA,GAAIW,CAAJ,CAAU,CAGNM,CAAqB,CAACjB,CAAD,CAAOW,CAAP,CACxB,CAJD,IAIO,CACH,GAAI,CAACS,CAAgB,CAACpB,CAAD,CAArB,CAA6B,CAGzBgB,CAAyB,CAAChB,CAAD,CAC5B,CACJ,CAED,MAAOW,CAAAA,CACV,CA3BM,EA4BND,IA5BM,CA4BD,SAASC,CAAT,CAAe,CACjB,GAAIyC,CAAO,CAAC/B,MAAR,CAvSO,CAuSX,CAAmC,CAG/BlB,CAAqB,CAACH,CAAD,CACxB,CAJD,IAIO,CAEHI,CAAqB,CAACJ,CAAD,CACxB,CAED,MAAOW,CAAAA,CACV,CAvCM,EAwCNE,KAxCM,CAwCA,UAAW,CACdd,CAAsB,CAACC,CAAD,CACzB,CA1CM,CA2CV,CA1UH,CAmVMiE,CAAe,CAAG,SAASjE,CAAT,CAAe,IAC7B0B,CAAAA,CAAM,CAAGJ,CAAS,CAACtB,CAAD,CADW,CAE7BuC,CAAK,CAAGZ,CAAQ,CAAC3B,CAAD,CAFa,CAKjC,MAAOhB,CAAAA,CAAgB,CAACkF,0CAAjB,CAtUiB,YAsUjB,CAEH3B,CAFG,CAGHb,CAHG,CArUO,cAqUP,EAKLhB,IALK,CAKA,SAASyD,CAAT,CAAiB,IAChBC,CAAAA,CAAqB,CAAGC,IAAI,CAACC,GAAL,EADR,CAEhBlB,CAAO,CAAGe,CAAM,CAACf,OAFD,CAGhBmB,CAAU,CAAGJ,CAAM,CAACK,UAHJ,CAIhBtC,CAAU,CAAGN,CAAa,CAAC5B,CAAD,CAJV,CAKhB8B,CAAS,CAAGD,CAAY,CAAC7B,CAAD,CALR,CAMhBiC,CAAQ,CAAGF,CAAW,CAAC/B,CAAD,CANN,CAOhBsC,CAAS,CAAGN,CAAY,CAAChC,CAAD,CAPR,CAQhBwC,CAAO,CAAGL,CAAU,CAACnC,CAAD,CARJ,CAShByD,CAAW,CAAGzD,CAAI,CAACwB,IAAL,CAAU,oBAAV,CATE,CAWpBC,CAAS,CAACzB,CAAD,CAAOuE,CAAP,CAAT,CAXoB,GAahBE,CAAAA,CAAa,CAAGtB,CAAoB,CAACC,CAAD,CAAUd,CAAV,CAAqBE,CAArB,CAbpB,CAehBkC,CAAa,CAAGlB,CAAwB,CAACJ,CAAD,CAAUpD,CAAV,CAAgBiC,CAAhB,CAA0BC,CAA1B,CAAsCJ,CAAtC,CAAiD2B,CAAjD,CAfxB,CAiBpB,MAAO/E,CAAAA,CAAC,CAACiG,IAAF,CAAOF,CAAP,CAAsBC,CAAtB,EACFhE,IADE,CACG,SAASkE,CAAT,CAAyB,CAC3B,GAAI1B,CAAsB,CAAClD,CAAD,CAAOoE,CAAP,CAA1B,CAAyD,CAErD,MAAOQ,CAAAA,CACV,CAIDxB,CAAO,CAACyB,OAAR,CAAgB,SAASvB,CAAT,CAAiB,IACzBwB,CAAAA,CAAQ,CAAGxB,CAAM,CAACC,EADO,CAEzBwB,CAAM,CAAG,EAFgB,CAIzBC,CAAqB,CAAGhF,CAAI,CAACC,IAAL,CADJ,8DAA6D6E,CAA7D,CAAwE,KACpE,CAJC,CAKzBG,CAAa,CAAGD,CAAqB,CAAC/E,IAAtB,CAA2BlB,CAAS,CAACmG,YAArC,CALS,CAMzBC,CAAY,CAAGP,CAAc,CAACQ,eAAf,CAA+BC,MAA/B,CAAsC,SAASC,CAAT,CAAgB,CACrE,MAAOA,CAAAA,CAAK,CAACC,QAAN,EAAkBT,CAC5B,CAFkB,CANU,CAU7B,GAAIK,CAAY,CAAC9D,MAAjB,CAAyB,CAErB0D,CAAM,CAAGI,CAAY,CAAC,CAAD,CAAZ,CAAgBJ,MAC5B,CAID,GAAIS,CAAAA,CAAc,CAAG9G,CAAC,CAAC+G,QAAF,GAAaC,OAAb,CAAqB,CAACX,MAAM,CAAEA,CAAT,CAArB,EAAuCY,OAAvC,EAArB,CAEA9G,CAAG,CAAC+G,UAAJ,CAAe,mCAAf,CAAoD,gBAApD,CAAsEtC,CAAM,CAACuC,eAA7E,EACKnF,IADL,CACU,SAASoF,CAAT,CAAiB,CACnB/G,CAAS,CAACgH,IAAV,CAAed,CAAf,CAA8BpF,CAA9B,CAAkD,CAAC,EAAK2F,CAAN,CAAlD,CAAyEM,CAAzE,EACA,MAAOA,CAAAA,CACV,CAJL,EAKKjF,KALL,CAKW,UAAW,CAEd9B,CAAS,CAACgH,IAAV,CAAed,CAAf,CAA8BpF,CAA9B,CAAkD,CAAC,EAAK2F,CAAN,CAAlD,CACH,CARL,CASH,CA5BD,EA8BA,MAAOZ,CAAAA,CACV,CAxCE,CAyCV,CA/DM,EA+DJ/D,KA/DI,CA+DElC,CAAY,CAACqH,SA/Df,CAgEV,CAxZH,CAiaMC,CAAkB,CAAG,SAASjG,CAAT,CAAe,IAChCkG,CAAAA,CAAe,CAAG7B,IAAI,CAACC,GAAL,EADc,CAEhChC,CAAS,CAAGN,CAAY,CAAChC,CAAD,CAFQ,CAGhCwC,CAAO,CAAGL,CAAU,CAACnC,CAAD,CAHY,CAIhCmG,CAAsB,CAAGnG,CAAI,CAACC,IAAL,CAAUf,CAAS,CAACM,uBAApB,CAJO,CAKhC6C,CAAS,CAAG8D,CAAsB,CAAC9C,GAAvB,CAA2B,UAAW,CAClD,MAAO3E,CAAAA,CAAC,CAAC,IAAD,CAAD,CAAQ8C,IAAR,CAAa,gBAAb,CACV,CAFe,EAEb4E,GAFa,EALoB,CAUpCpD,CAAkB,CAAChD,CAAD,CAAOkG,CAAP,CAAlB,CAGA,MAAO9D,CAAAA,CAAqB,CAACC,CAAD,CAAYC,CAAZ,CAAuBzC,CAAkB,CAAG,CAA5C,CAA+C2C,CAA/C,CAArB,CACF9B,IADE,CACG,SAASkE,CAAT,CAAyB,CAC3B,GAAI1B,CAAsB,CAAClD,CAAD,CAAOkG,CAAP,CAA1B,CAAmD,CAE/C,MAAOtB,CAAAA,CACV,CAEDuB,CAAsB,CAACE,IAAvB,CAA4B,SAASC,CAAT,CAAgBpF,CAAhB,CAA2B,CACnDA,CAAS,CAAGxC,CAAC,CAACwC,CAAD,CAAb,CADmD,GAE/C4D,CAAAA,CAAQ,CAAG5D,CAAS,CAACM,IAAV,CAAe,gBAAf,CAFoC,CAG/C+E,CAAU,CAAGrF,CAAS,CAACjB,IAAV,CAAef,CAAS,CAACO,WAAzB,EAAsC+G,IAAtC,EAHkC,CAI/CC,CAAkB,CAAGvF,CAAS,CAACjB,IAAV,CAAelB,CAAS,CAACmG,YAAzB,CAJ0B,CAK/CwB,CAAY,CAAGhI,CAAC,CAAC+G,QAAF,EALgC,CAM/CV,CAAM,CAAG,EANsC,CAO/CI,CAAY,CAAGP,CAAc,CAACQ,eAAf,CAA+BC,MAA/B,CAAsC,SAASC,CAAT,CAAgB,CACrE,MAAOA,CAAAA,CAAK,CAACC,QAAN,EAAkBT,CAC5B,CAFkB,CAPgC,CAWnD,GAAIK,CAAY,CAAC9D,MAAjB,CAAyB,CAErB0D,CAAM,CAAGI,CAAY,CAAC,CAAD,CAAZ,CAAgBJ,MAC5B,CAED2B,CAAY,CAAChB,OAAb,CAAqB,CAACX,MAAM,CAAEA,CAAT,CAArB,EAIAlG,CAAG,CAAC+G,UAAJ,CAAe,mCAAf,CAAoD,gBAApD,CAAsEW,CAAtE,EACK7F,IADL,CACU,SAASoF,CAAT,CAAiB,CACnB/G,CAAS,CAACgH,IAAV,CAAeU,CAAf,CAAmC5G,CAAnC,CAAuD,CAAC,EAAK6G,CAAY,CAACf,OAAb,EAAN,CAAvD,CAAsFG,CAAtF,EACA,MAAOA,CAAAA,CACV,CAJL,EAKKjF,KALL,CAKW,UAAW,CAEd9B,CAAS,CAACgH,IAAV,CAAeU,CAAf,CAAmC5G,CAAnC,CAAuD,CAAC,EAAK6G,CAAY,CAACf,OAAb,EAAN,CAAvD,CACH,CARL,CASH,CA7BD,EA+BA,MAAOf,CAAAA,CACV,CAvCE,EAuCA/D,KAvCA,CAuCMlC,CAAY,CAACqH,SAvCnB,CAwCV,CAtdH,CA6dMW,CAAsB,CAAG,SAAS3G,CAAT,CAAe,CACxCpB,CAAY,CAACH,MAAb,CAAoBuB,CAApB,CAA0B,CAACpB,CAAY,CAACmG,MAAb,CAAoB6B,QAArB,CAA1B,EAGA5G,CAAI,CAAC6G,EAAL,CAAQjI,CAAY,CAACmG,MAAb,CAAoB6B,QAA5B,CAAsC1H,CAAS,CAACC,mBAAhD,CAAqE,SAAS2H,CAAT,CAAY/D,CAAZ,CAAkB,CACnFzC,CAA8B,CAACN,CAAD,CAA9B,CACAiE,CAAe,CAACjE,CAAD,CAAf,CACKU,IADL,CACU,UAAW,CACbI,CAA+B,CAACd,CAAD,CAElC,CAJL,EAKKa,KALL,CAKW,UAAW,CACdC,CAA+B,CAACd,CAAD,CAClC,CAPL,EASA,GAAI+C,CAAJ,CAAU,CACNA,CAAI,CAACgE,aAAL,CAAmBC,cAAnB,GACAjE,CAAI,CAACgE,aAAL,CAAmBE,eAAnB,EACH,CACDH,CAAC,CAACG,eAAF,EACH,CAhBD,CAiBH,CAlfH,CA8hBMC,CAAK,CAAG,SAASlH,CAAT,CAAe,CACvB,GAAI,CAACA,CAAI,CAACwB,IAAL,CAAU,WAAV,CAAL,CAA6B,CACzB,GAAIJ,CAAgB,CAACpB,CAAD,CAApB,CAA4B,CAGxBiG,CAAkB,CAACjG,CAAD,CACrB,CAJD,IAIO,CAEHiE,CAAe,CAACjE,CAAD,CAClB,CAEDA,CAAI,CAACwB,IAAL,CAAU,WAAV,IACH,CACJ,CA3iBH,CA6iBE,MAAO,CACHuE,IAAI,CAjDG,QAAPA,CAAAA,IAAO,CAAS/F,CAAT,CAAe,CACtBA,CAAI,CAAGtB,CAAC,CAACsB,CAAD,CAAR,CAEAgD,CAAkB,CAAChD,CAAD,CAAOqE,IAAI,CAACC,GAAL,EAAP,CAAlB,CAEA,GAAItE,CAAI,CAACmH,QAAL,CAAc,QAAd,CAAJ,CAA6B,CAEzBlD,CAAe,CAACjE,CAAD,CAAf,CACAA,CAAI,CAACwB,IAAL,CAAU,WAAV,IACH,CAEDmF,CAAsB,CAAC3G,CAAD,CACzB,CAoCM,CAEHoH,KAAK,CA9BG,QAARA,CAAAA,KAAQ,CAASpH,CAAT,CAAe,CACvBA,CAAI,CAACqH,UAAL,CAAgB,WAAhB,EACA,GAAIrH,CAAI,CAACmH,QAAL,CAAc,QAAd,CAAJ,CAA6B,CACzBD,CAAK,CAAClH,CAAD,CACR,CACJ,CAuBM,CAGHkH,KAAK,CAAEA,CAHJ,CAKV,CAtkBK,CAAN","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 .\n\n/**\n * Manage the timeline courses view for the timeline block.\n *\n * @package block_timeline\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/str',\n 'core/templates',\n 'block_timeline/event_list',\n 'core_course/repository',\n 'block_timeline/calendar_events_repository'\n],\nfunction(\n $,\n Notification,\n CustomEvents,\n Str,\n Templates,\n EventList,\n CourseRepository,\n EventsRepository\n) {\n\n var SELECTORS = {\n MORE_COURSES_BUTTON: '[data-action=\"more-courses\"]',\n MORE_COURSES_BUTTON_CONTAINER: '[data-region=\"more-courses-button-container\"]',\n NO_COURSES_EMPTY_MESSAGE: '[data-region=\"no-courses-empty-message\"]',\n COURSES_LIST: '[data-region=\"courses-list\"]',\n COURSE_ITEMS_LOADING_PLACEHOLDER: '[data-region=\"course-items-loading-placeholder\"]',\n COURSE_EVENTS_CONTAINER: '[data-region=\"course-events-container\"]',\n COURSE_NAME: '[data-region=\"course-name\"]',\n LOADING_ICON: '.loading-icon'\n };\n\n var TEMPLATES = {\n COURSE_ITEMS: 'block_timeline/course-items',\n LOADING_ICON: 'core/loading'\n };\n\n var COURSE_CLASSIFICATION = 'inprogress';\n var COURSE_SORT = 'fullname asc';\n var COURSE_EVENT_LIMIT = 5;\n var COURSE_LIMIT = 2;\n var SECONDS_IN_DAY = 60 * 60 * 24;\n\n /**\n * Hide the loading placeholder elements.\n *\n * @param {object} root The rool element.\n */\n var hideLoadingPlaceholder = function(root) {\n root.find(SELECTORS.COURSE_ITEMS_LOADING_PLACEHOLDER).addClass('hidden');\n };\n\n /**\n * Hide the \"more courses\" button.\n *\n * @param {object} root The rool element.\n */\n var hideMoreCoursesButton = function(root) {\n root.find(SELECTORS.MORE_COURSES_BUTTON_CONTAINER).addClass('hidden');\n };\n\n /**\n * Show the \"more courses\" button.\n *\n * @param {object} root The rool element.\n */\n var showMoreCoursesButton = function(root) {\n root.find(SELECTORS.MORE_COURSES_BUTTON_CONTAINER).removeClass('hidden');\n };\n\n /**\n * Disable the \"more courses\" button and show the loading spinner.\n *\n * @param {object} root The rool element.\n */\n var enableMoreCoursesButtonLoading = function(root) {\n var button = root.find(SELECTORS.MORE_COURSES_BUTTON);\n button.prop('disabled', true);\n Templates.render(TEMPLATES.LOADING_ICON, {})\n .then(function(html) {\n button.append(html);\n return html;\n })\n .catch(function() {\n // It's not important if this false so just do so silently.\n return false;\n });\n };\n\n /**\n * Enable the \"more courses\" button and remove the loading spinner.\n *\n * @param {object} root The rool element.\n */\n var disableMoreCoursesButtonLoading = function(root) {\n var button = root.find(SELECTORS.MORE_COURSES_BUTTON);\n button.prop('disabled', false);\n button.find(SELECTORS.LOADING_ICON).remove();\n };\n\n /**\n * Display the message for when there are no courses available.\n *\n * @param {object} root The rool element.\n */\n var showNoCoursesEmptyMessage = function(root) {\n root.find(SELECTORS.NO_COURSES_EMPTY_MESSAGE).removeClass('hidden');\n };\n\n /**\n * Render the course items HTML to the page.\n *\n * @param {object} root The rool element.\n * @param {string} html The course items HTML to render.\n */\n var renderCourseItemsHTML = function(root, html) {\n var container = root.find(SELECTORS.COURSES_LIST);\n Templates.appendNodeContents(container, html, '');\n };\n\n /**\n * Check if any courses have been loaded.\n *\n * @param {object} root The rool element.\n * @return {bool}\n */\n var hasLoadedCourses = function(root) {\n return root.find(SELECTORS.COURSE_EVENTS_CONTAINER).length > 0;\n };\n\n /**\n * Return the offset value for fetching courses.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getOffset = function(root) {\n return parseInt(root.attr('data-offset'), 10);\n };\n\n /**\n * Set the offset value for fetching courses.\n *\n * @param {object} root The rool element.\n * @param {Number} offset Offset value.\n */\n var setOffset = function(root, offset) {\n root.attr('data-offset', offset);\n };\n\n /**\n * Return the limit value for fetching courses.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getLimit = function(root) {\n return parseInt(root.attr('data-limit'), 10);\n };\n\n /**\n * Return the days offset value for fetching events.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getDaysOffset = function(root) {\n return parseInt(root.attr('data-days-offset'), 10);\n };\n\n /**\n * Return the days limit value for fetching events. The days\n * limit is optional so undefined will be returned if it isn't\n * set.\n *\n * @param {object} root The rool element.\n * @return {int|undefined}\n */\n var getDaysLimit = function(root) {\n var daysLimit = root.attr('data-days-limit');\n return daysLimit != undefined ? parseInt(daysLimit, 10) : undefined;\n };\n\n /**\n * Return the timestamp for the user's midnight.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getMidnight = function(root) {\n return parseInt(root.attr('data-midnight'), 10);\n };\n\n /**\n * Return the start time for fetching events. This is calculated\n * based on the user's midnight value so that timezones are\n * preserved.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getStartTime = function(root) {\n var midnight = getMidnight(root);\n var daysOffset = getDaysOffset(root);\n return midnight + (daysOffset * SECONDS_IN_DAY);\n };\n\n /**\n * Return the end time for fetching events. This is calculated\n * based on the user's midnight value so that timezones are\n * preserved.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getEndTime = function(root) {\n var midnight = getMidnight(root);\n var daysLimit = getDaysLimit(root);\n return daysLimit != undefined ? midnight + (daysLimit * SECONDS_IN_DAY) : false;\n };\n\n /**\n * Get a list of events for the given course ids. Returns a promise that will\n * be resolved with the events.\n *\n * @param {array} courseIds The list of course ids to fetch events for.\n * @param {Number} startTime Timestamp to fetch events from.\n * @param {Number} limit Limit to the number of events (this applies per course, not total)\n * @param {Number} endTime Timestamp to fetch events to.\n * @return {object} jQuery promise.\n */\n var getEventsForCourseIds = function(courseIds, startTime, limit, endTime) {\n var args = {\n courseids: courseIds,\n starttime: startTime,\n limit: limit\n };\n\n if (endTime) {\n args.endtime = endTime;\n }\n\n return EventsRepository.queryByCourses(args);\n };\n\n /**\n * Get the last time the events were reloaded.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getEventReloadTime = function(root) {\n return root.data('last-event-load-time');\n };\n\n /**\n * Set the last time the events were reloaded.\n *\n * @param {object} root The rool element.\n * @param {Number} time Timestamp in milliseconds.\n */\n var setEventReloadTime = function(root, time) {\n root.data('last-event-load-time', time);\n };\n\n /**\n * Check if events have begun reloading since the given\n * time.\n *\n * @param {object} root The rool element.\n * @param {Number} time Timestamp in milliseconds.\n * @return {bool}\n */\n var hasReloadedEventsSince = function(root, time) {\n return getEventReloadTime(root) > time;\n };\n\n /**\n * Send a request to the server to load the events for the courses.\n *\n * @param {array} courses List of course objects.\n * @param {Number} startTime Timestamp to load events after.\n * @param {int|undefined} endTime Timestamp to load events up until.\n * @return {object} jQuery promise resolved with the events.\n */\n var loadEventsForCourses = function(courses, startTime, endTime) {\n var courseIds = courses.map(function(course) {\n return course.id;\n });\n\n return getEventsForCourseIds(courseIds, startTime, COURSE_EVENT_LIMIT + 1, endTime);\n };\n\n /**\n * Render the courses in the DOM once the server has returned the courses.\n *\n * @param {array} courses List of course objects.\n * @param {object} root The root element\n * @param {Number} midnight The midnight timestamp in the user's timezone.\n * @param {Number} daysOffset Number of days from today to offset the events.\n * @param {Number} daysLimit Number of days from today to limit the events to.\n * @param {string} noEventsURL URL for the image to display for no events.\n * @return {object} jQuery promise resolved after rendering is complete.\n */\n var updateDisplayFromCourses = function(courses, root, midnight, daysOffset, daysLimit, noEventsURL) {\n // Render the courses template.\n return Templates.render(TEMPLATES.COURSE_ITEMS, {\n courses: courses,\n midnight: midnight,\n hasdaysoffset: true,\n hasdayslimit: daysLimit != undefined,\n daysoffset: daysOffset,\n dayslimit: daysLimit,\n nodayslimit: daysLimit == undefined,\n urls: {\n noevents: noEventsURL\n }\n }).then(function(html) {\n hideLoadingPlaceholder(root);\n\n if (html) {\n // Template rendering is complete and we have the HTML so we can\n // add it to the DOM.\n renderCourseItemsHTML(root, html);\n } else {\n if (!hasLoadedCourses(root)) {\n // There were no courses to render so show the empty placeholder\n // message for the user to tell them.\n showNoCoursesEmptyMessage(root);\n }\n }\n\n return html;\n })\n .then(function(html) {\n if (courses.length < COURSE_LIMIT) {\n // We know there aren't any more courses because we got back less\n // than we asked for so hide the button to request more.\n hideMoreCoursesButton(root);\n } else {\n // Make sure the button is visible if there are more courses to load.\n showMoreCoursesButton(root);\n }\n\n return html;\n })\n .catch(function() {\n hideLoadingPlaceholder(root);\n });\n };\n\n /**\n * Find all of the visible course blocks and initialise the event\n * list module to being loading the events for the course block.\n *\n * @param {object} root The root element for the timeline courses view.\n * @return {object} jQuery promise resolved with courses and events.\n */\n var loadMoreCourses = function(root) {\n var offset = getOffset(root);\n var limit = getLimit(root);\n\n // Start loading the next set of courses.\n return CourseRepository.getEnrolledCoursesByTimelineClassification(\n COURSE_CLASSIFICATION,\n limit,\n offset,\n COURSE_SORT\n ).then(function(result) {\n var startEventLoadingTime = Date.now();\n var courses = result.courses;\n var nextOffset = result.nextoffset;\n var daysOffset = getDaysOffset(root);\n var daysLimit = getDaysLimit(root);\n var midnight = getMidnight(root);\n var startTime = getStartTime(root);\n var endTime = getEndTime(root);\n var noEventsURL = root.attr('data-no-events-url');\n // Record the next offset if we want to request more courses.\n setOffset(root, nextOffset);\n // Load the events for these courses.\n var eventsPromise = loadEventsForCourses(courses, startTime, endTime);\n // Render the courses in the DOM.\n var renderPromise = updateDisplayFromCourses(courses, root, midnight, daysOffset, daysLimit, noEventsURL);\n\n return $.when(eventsPromise, renderPromise)\n .then(function(eventsByCourse) {\n if (hasReloadedEventsSince(root, startEventLoadingTime)) {\n // All of the events are being reloaded so ignore our results.\n return eventsByCourse;\n }\n\n // When we've got all of the courses and events we can render the events in the\n // correct course event list.\n courses.forEach(function(course) {\n var courseId = course.id;\n var events = [];\n var containerSelector = '[data-region=\"course-events-container\"][data-course-id=\"' + courseId + '\"]';\n var courseEventsContainer = root.find(containerSelector);\n var eventListRoot = courseEventsContainer.find(EventList.rootSelector);\n var courseGroups = eventsByCourse.groupedbycourse.filter(function(group) {\n return group.courseid == courseId;\n });\n\n if (courseGroups.length) {\n // Get the events for this course.\n events = courseGroups[0].events;\n }\n\n // Create a preloaded page to pass to the event list because we've already\n // loaded the first page of events.\n var pageOnePreload = $.Deferred().resolve({events: events}).promise();\n // Initialise the event list pagination area for this course.\n Str.get_string('ariaeventlistpaginationnavcourses', 'block_timeline', course.fullnamedisplay)\n .then(function(string) {\n EventList.init(eventListRoot, COURSE_EVENT_LIMIT, {'1': pageOnePreload}, string);\n return string;\n })\n .catch(function() {\n // An error is ok, just render with the default string.\n EventList.init(eventListRoot, COURSE_EVENT_LIMIT, {'1': pageOnePreload});\n });\n });\n\n return eventsByCourse;\n });\n }).catch(Notification.exception);\n };\n\n /**\n * Reload the events for all of the visible courses. These events will be loaded\n * in a single request to the server.\n *\n * @param {object} root The root element.\n * @return {object} jQuery promise resolved with courses and events.\n */\n var reloadCourseEvents = function(root) {\n var startReloadTime = Date.now();\n var startTime = getStartTime(root);\n var endTime = getEndTime(root);\n var courseEventsContainers = root.find(SELECTORS.COURSE_EVENTS_CONTAINER);\n var courseIds = courseEventsContainers.map(function() {\n return $(this).attr('data-course-id');\n }).get();\n\n // Record when we started our request.\n setEventReloadTime(root, startReloadTime);\n\n // Load all of the events for the given courses.\n return getEventsForCourseIds(courseIds, startTime, COURSE_EVENT_LIMIT + 1, endTime)\n .then(function(eventsByCourse) {\n if (hasReloadedEventsSince(root, startReloadTime)) {\n // A new reload has begun so ignore our results.\n return eventsByCourse;\n }\n\n courseEventsContainers.each(function(index, container) {\n container = $(container);\n var courseId = container.attr('data-course-id');\n var courseName = container.find(SELECTORS.COURSE_NAME).text();\n var eventListContainer = container.find(EventList.rootSelector);\n var pageDeferred = $.Deferred();\n var events = [];\n var courseGroups = eventsByCourse.groupedbycourse.filter(function(group) {\n return group.courseid == courseId;\n });\n\n if (courseGroups.length) {\n // Get the events just for this course.\n events = courseGroups[0].events;\n }\n\n pageDeferred.resolve({events: events});\n\n // Re-initialise the events list with the preloaded events we just got from\n // the server.\n Str.get_string('ariaeventlistpaginationnavcourses', 'block_timeline', courseName)\n .then(function(string) {\n EventList.init(eventListContainer, COURSE_EVENT_LIMIT, {'1': pageDeferred.promise()}, string);\n return string;\n })\n .catch(function() {\n // Ignore a failure to load the string. Just render with the default string.\n EventList.init(eventListContainer, COURSE_EVENT_LIMIT, {'1': pageDeferred.promise()});\n });\n });\n\n return eventsByCourse;\n }).catch(Notification.exception);\n };\n\n /**\n * Add event listeners to load more courses for the courses view.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var registerEventListeners = function(root) {\n CustomEvents.define(root, [CustomEvents.events.activate]);\n // Show more courses and load their events when the user clicks the \"more courses\"\n // button.\n root.on(CustomEvents.events.activate, SELECTORS.MORE_COURSES_BUTTON, function(e, data) {\n enableMoreCoursesButtonLoading(root);\n loadMoreCourses(root)\n .then(function() {\n disableMoreCoursesButtonLoading(root);\n return;\n })\n .catch(function() {\n disableMoreCoursesButtonLoading(root);\n });\n\n if (data) {\n data.originalEvent.preventDefault();\n data.originalEvent.stopPropagation();\n }\n e.stopPropagation();\n });\n };\n\n /**\n * Initialise the timeline courses view. Begin loading the events\n * if this view is active. Add the relevant event listeners.\n *\n * This function should only be called once per page load because it\n * is adding event listeners to the page.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var init = function(root) {\n root = $(root);\n\n setEventReloadTime(root, Date.now());\n\n if (root.hasClass('active')) {\n // Only load if this is active otherwise it will be lazy loaded later.\n loadMoreCourses(root);\n root.attr('data-seen', true);\n }\n\n registerEventListeners(root);\n };\n\n /**\n * Reset the element back to it's initial state. Begin loading the events again\n * if this view is active.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var reset = function(root) {\n root.removeAttr('data-seen');\n if (root.hasClass('active')) {\n shown(root);\n }\n };\n\n /**\n * If this is the first time this view has been displayed then begin loading\n * the events.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var shown = function(root) {\n if (!root.attr('data-seen')) {\n if (hasLoadedCourses(root)) {\n // This isn't the first time this view is shown so just reload the\n // events for the courses we've already loaded.\n reloadCourseEvents(root);\n } else {\n // We haven't loaded any courses yet so do that now.\n loadMoreCourses(root);\n }\n\n root.attr('data-seen', true);\n }\n };\n\n return {\n init: init,\n reset: reset,\n shown: shown\n };\n});\n"],"file":"view_courses.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view_courses.js"],"names":["define","$","Notification","CustomEvents","Str","Templates","EventList","CourseRepository","EventsRepository","SELECTORS","MORE_COURSES_BUTTON","MORE_COURSES_BUTTON_CONTAINER","NO_COURSES_EMPTY_MESSAGE","COURSES_LIST","COURSE_ITEMS_LOADING_PLACEHOLDER","COURSE_EVENTS_CONTAINER","COURSE_NAME","LOADING_ICON","TEMPLATES","COURSE_ITEMS","COURSE_EVENT_LIMIT","SECONDS_IN_DAY","hideLoadingPlaceholder","root","find","addClass","hideMoreCoursesButton","showMoreCoursesButton","removeClass","enableMoreCoursesButtonLoading","button","prop","render","then","html","append","catch","disableMoreCoursesButtonLoading","remove","showNoCoursesEmptyMessage","renderCourseItemsHTML","container","appendNodeContents","hasLoadedCourses","length","getOffset","parseInt","attr","setOffset","offset","getLimit","getDaysOffset","getDaysLimit","daysLimit","getMidnight","getStartTime","midnight","daysOffset","getEndTime","getEventsForCourseIds","courseIds","startTime","limit","endTime","args","courseids","starttime","endtime","queryByCourses","getEventReloadTime","data","setEventReloadTime","time","hasReloadedEventsSince","loadEventsForCourses","courses","map","course","id","updateDisplayFromCourses","noEventsURL","hasdaysoffset","hasdayslimit","daysoffset","dayslimit","nodayslimit","urls","noevents","loadMoreCourses","getEnrolledCoursesByTimelineClassification","result","startEventLoadingTime","Date","now","nextOffset","nextoffset","eventsPromise","renderPromise","when","eventsByCourse","forEach","courseId","events","courseEventsContainer","eventListRoot","rootSelector","courseGroups","groupedbycourse","filter","group","courseid","pageOnePreload","Deferred","resolve","promise","get_string","fullnamedisplay","string","init","exception","reloadCourseEvents","startReloadTime","courseEventsContainers","get","each","index","courseName","text","eventListContainer","pageDeferred","registerEventListeners","activate","on","e","originalEvent","preventDefault","stopPropagation","shown","hasClass","reset","removeAttr"],"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 .\n\n/**\n * Manage the timeline courses view for the timeline block.\n *\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/str',\n 'core/templates',\n 'block_timeline/event_list',\n 'core_course/repository',\n 'block_timeline/calendar_events_repository'\n],\nfunction(\n $,\n Notification,\n CustomEvents,\n Str,\n Templates,\n EventList,\n CourseRepository,\n EventsRepository\n) {\n\n var SELECTORS = {\n MORE_COURSES_BUTTON: '[data-action=\"more-courses\"]',\n MORE_COURSES_BUTTON_CONTAINER: '[data-region=\"more-courses-button-container\"]',\n NO_COURSES_EMPTY_MESSAGE: '[data-region=\"no-courses-empty-message\"]',\n COURSES_LIST: '[data-region=\"courses-list\"]',\n COURSE_ITEMS_LOADING_PLACEHOLDER: '[data-region=\"course-items-loading-placeholder\"]',\n COURSE_EVENTS_CONTAINER: '[data-region=\"course-events-container\"]',\n COURSE_NAME: '[data-region=\"course-name\"]',\n LOADING_ICON: '.loading-icon'\n };\n\n var TEMPLATES = {\n COURSE_ITEMS: 'block_timeline/course-items',\n LOADING_ICON: 'core/loading'\n };\n\n var COURSE_CLASSIFICATION = 'inprogress';\n var COURSE_SORT = 'fullname asc';\n var COURSE_EVENT_LIMIT = 5;\n var COURSE_LIMIT = 2;\n var SECONDS_IN_DAY = 60 * 60 * 24;\n\n /**\n * Hide the loading placeholder elements.\n *\n * @param {object} root The rool element.\n */\n var hideLoadingPlaceholder = function(root) {\n root.find(SELECTORS.COURSE_ITEMS_LOADING_PLACEHOLDER).addClass('hidden');\n };\n\n /**\n * Hide the \"more courses\" button.\n *\n * @param {object} root The rool element.\n */\n var hideMoreCoursesButton = function(root) {\n root.find(SELECTORS.MORE_COURSES_BUTTON_CONTAINER).addClass('hidden');\n };\n\n /**\n * Show the \"more courses\" button.\n *\n * @param {object} root The rool element.\n */\n var showMoreCoursesButton = function(root) {\n root.find(SELECTORS.MORE_COURSES_BUTTON_CONTAINER).removeClass('hidden');\n };\n\n /**\n * Disable the \"more courses\" button and show the loading spinner.\n *\n * @param {object} root The rool element.\n */\n var enableMoreCoursesButtonLoading = function(root) {\n var button = root.find(SELECTORS.MORE_COURSES_BUTTON);\n button.prop('disabled', true);\n Templates.render(TEMPLATES.LOADING_ICON, {})\n .then(function(html) {\n button.append(html);\n return html;\n })\n .catch(function() {\n // It's not important if this false so just do so silently.\n return false;\n });\n };\n\n /**\n * Enable the \"more courses\" button and remove the loading spinner.\n *\n * @param {object} root The rool element.\n */\n var disableMoreCoursesButtonLoading = function(root) {\n var button = root.find(SELECTORS.MORE_COURSES_BUTTON);\n button.prop('disabled', false);\n button.find(SELECTORS.LOADING_ICON).remove();\n };\n\n /**\n * Display the message for when there are no courses available.\n *\n * @param {object} root The rool element.\n */\n var showNoCoursesEmptyMessage = function(root) {\n root.find(SELECTORS.NO_COURSES_EMPTY_MESSAGE).removeClass('hidden');\n };\n\n /**\n * Render the course items HTML to the page.\n *\n * @param {object} root The rool element.\n * @param {string} html The course items HTML to render.\n */\n var renderCourseItemsHTML = function(root, html) {\n var container = root.find(SELECTORS.COURSES_LIST);\n Templates.appendNodeContents(container, html, '');\n };\n\n /**\n * Check if any courses have been loaded.\n *\n * @param {object} root The rool element.\n * @return {bool}\n */\n var hasLoadedCourses = function(root) {\n return root.find(SELECTORS.COURSE_EVENTS_CONTAINER).length > 0;\n };\n\n /**\n * Return the offset value for fetching courses.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getOffset = function(root) {\n return parseInt(root.attr('data-offset'), 10);\n };\n\n /**\n * Set the offset value for fetching courses.\n *\n * @param {object} root The rool element.\n * @param {Number} offset Offset value.\n */\n var setOffset = function(root, offset) {\n root.attr('data-offset', offset);\n };\n\n /**\n * Return the limit value for fetching courses.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getLimit = function(root) {\n return parseInt(root.attr('data-limit'), 10);\n };\n\n /**\n * Return the days offset value for fetching events.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getDaysOffset = function(root) {\n return parseInt(root.attr('data-days-offset'), 10);\n };\n\n /**\n * Return the days limit value for fetching events. The days\n * limit is optional so undefined will be returned if it isn't\n * set.\n *\n * @param {object} root The rool element.\n * @return {int|undefined}\n */\n var getDaysLimit = function(root) {\n var daysLimit = root.attr('data-days-limit');\n return daysLimit != undefined ? parseInt(daysLimit, 10) : undefined;\n };\n\n /**\n * Return the timestamp for the user's midnight.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getMidnight = function(root) {\n return parseInt(root.attr('data-midnight'), 10);\n };\n\n /**\n * Return the start time for fetching events. This is calculated\n * based on the user's midnight value so that timezones are\n * preserved.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getStartTime = function(root) {\n var midnight = getMidnight(root);\n var daysOffset = getDaysOffset(root);\n return midnight + (daysOffset * SECONDS_IN_DAY);\n };\n\n /**\n * Return the end time for fetching events. This is calculated\n * based on the user's midnight value so that timezones are\n * preserved.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getEndTime = function(root) {\n var midnight = getMidnight(root);\n var daysLimit = getDaysLimit(root);\n return daysLimit != undefined ? midnight + (daysLimit * SECONDS_IN_DAY) : false;\n };\n\n /**\n * Get a list of events for the given course ids. Returns a promise that will\n * be resolved with the events.\n *\n * @param {array} courseIds The list of course ids to fetch events for.\n * @param {Number} startTime Timestamp to fetch events from.\n * @param {Number} limit Limit to the number of events (this applies per course, not total)\n * @param {Number} endTime Timestamp to fetch events to.\n * @return {object} jQuery promise.\n */\n var getEventsForCourseIds = function(courseIds, startTime, limit, endTime) {\n var args = {\n courseids: courseIds,\n starttime: startTime,\n limit: limit\n };\n\n if (endTime) {\n args.endtime = endTime;\n }\n\n return EventsRepository.queryByCourses(args);\n };\n\n /**\n * Get the last time the events were reloaded.\n *\n * @param {object} root The rool element.\n * @return {Number}\n */\n var getEventReloadTime = function(root) {\n return root.data('last-event-load-time');\n };\n\n /**\n * Set the last time the events were reloaded.\n *\n * @param {object} root The rool element.\n * @param {Number} time Timestamp in milliseconds.\n */\n var setEventReloadTime = function(root, time) {\n root.data('last-event-load-time', time);\n };\n\n /**\n * Check if events have begun reloading since the given\n * time.\n *\n * @param {object} root The rool element.\n * @param {Number} time Timestamp in milliseconds.\n * @return {bool}\n */\n var hasReloadedEventsSince = function(root, time) {\n return getEventReloadTime(root) > time;\n };\n\n /**\n * Send a request to the server to load the events for the courses.\n *\n * @param {array} courses List of course objects.\n * @param {Number} startTime Timestamp to load events after.\n * @param {int|undefined} endTime Timestamp to load events up until.\n * @return {object} jQuery promise resolved with the events.\n */\n var loadEventsForCourses = function(courses, startTime, endTime) {\n var courseIds = courses.map(function(course) {\n return course.id;\n });\n\n return getEventsForCourseIds(courseIds, startTime, COURSE_EVENT_LIMIT + 1, endTime);\n };\n\n /**\n * Render the courses in the DOM once the server has returned the courses.\n *\n * @param {array} courses List of course objects.\n * @param {object} root The root element\n * @param {Number} midnight The midnight timestamp in the user's timezone.\n * @param {Number} daysOffset Number of days from today to offset the events.\n * @param {Number} daysLimit Number of days from today to limit the events to.\n * @param {string} noEventsURL URL for the image to display for no events.\n * @return {object} jQuery promise resolved after rendering is complete.\n */\n var updateDisplayFromCourses = function(courses, root, midnight, daysOffset, daysLimit, noEventsURL) {\n // Render the courses template.\n return Templates.render(TEMPLATES.COURSE_ITEMS, {\n courses: courses,\n midnight: midnight,\n hasdaysoffset: true,\n hasdayslimit: daysLimit != undefined,\n daysoffset: daysOffset,\n dayslimit: daysLimit,\n nodayslimit: daysLimit == undefined,\n urls: {\n noevents: noEventsURL\n }\n }).then(function(html) {\n hideLoadingPlaceholder(root);\n\n if (html) {\n // Template rendering is complete and we have the HTML so we can\n // add it to the DOM.\n renderCourseItemsHTML(root, html);\n } else {\n if (!hasLoadedCourses(root)) {\n // There were no courses to render so show the empty placeholder\n // message for the user to tell them.\n showNoCoursesEmptyMessage(root);\n }\n }\n\n return html;\n })\n .then(function(html) {\n if (courses.length < COURSE_LIMIT) {\n // We know there aren't any more courses because we got back less\n // than we asked for so hide the button to request more.\n hideMoreCoursesButton(root);\n } else {\n // Make sure the button is visible if there are more courses to load.\n showMoreCoursesButton(root);\n }\n\n return html;\n })\n .catch(function() {\n hideLoadingPlaceholder(root);\n });\n };\n\n /**\n * Find all of the visible course blocks and initialise the event\n * list module to being loading the events for the course block.\n *\n * @param {object} root The root element for the timeline courses view.\n * @return {object} jQuery promise resolved with courses and events.\n */\n var loadMoreCourses = function(root) {\n var offset = getOffset(root);\n var limit = getLimit(root);\n\n // Start loading the next set of courses.\n return CourseRepository.getEnrolledCoursesByTimelineClassification(\n COURSE_CLASSIFICATION,\n limit,\n offset,\n COURSE_SORT\n ).then(function(result) {\n var startEventLoadingTime = Date.now();\n var courses = result.courses;\n var nextOffset = result.nextoffset;\n var daysOffset = getDaysOffset(root);\n var daysLimit = getDaysLimit(root);\n var midnight = getMidnight(root);\n var startTime = getStartTime(root);\n var endTime = getEndTime(root);\n var noEventsURL = root.attr('data-no-events-url');\n // Record the next offset if we want to request more courses.\n setOffset(root, nextOffset);\n // Load the events for these courses.\n var eventsPromise = loadEventsForCourses(courses, startTime, endTime);\n // Render the courses in the DOM.\n var renderPromise = updateDisplayFromCourses(courses, root, midnight, daysOffset, daysLimit, noEventsURL);\n\n return $.when(eventsPromise, renderPromise)\n .then(function(eventsByCourse) {\n if (hasReloadedEventsSince(root, startEventLoadingTime)) {\n // All of the events are being reloaded so ignore our results.\n return eventsByCourse;\n }\n\n // When we've got all of the courses and events we can render the events in the\n // correct course event list.\n courses.forEach(function(course) {\n var courseId = course.id;\n var events = [];\n var containerSelector = '[data-region=\"course-events-container\"][data-course-id=\"' + courseId + '\"]';\n var courseEventsContainer = root.find(containerSelector);\n var eventListRoot = courseEventsContainer.find(EventList.rootSelector);\n var courseGroups = eventsByCourse.groupedbycourse.filter(function(group) {\n return group.courseid == courseId;\n });\n\n if (courseGroups.length) {\n // Get the events for this course.\n events = courseGroups[0].events;\n }\n\n // Create a preloaded page to pass to the event list because we've already\n // loaded the first page of events.\n var pageOnePreload = $.Deferred().resolve({events: events}).promise();\n // Initialise the event list pagination area for this course.\n Str.get_string('ariaeventlistpaginationnavcourses', 'block_timeline', course.fullnamedisplay)\n .then(function(string) {\n EventList.init(eventListRoot, COURSE_EVENT_LIMIT, {'1': pageOnePreload}, string);\n return string;\n })\n .catch(function() {\n // An error is ok, just render with the default string.\n EventList.init(eventListRoot, COURSE_EVENT_LIMIT, {'1': pageOnePreload});\n });\n });\n\n return eventsByCourse;\n });\n }).catch(Notification.exception);\n };\n\n /**\n * Reload the events for all of the visible courses. These events will be loaded\n * in a single request to the server.\n *\n * @param {object} root The root element.\n * @return {object} jQuery promise resolved with courses and events.\n */\n var reloadCourseEvents = function(root) {\n var startReloadTime = Date.now();\n var startTime = getStartTime(root);\n var endTime = getEndTime(root);\n var courseEventsContainers = root.find(SELECTORS.COURSE_EVENTS_CONTAINER);\n var courseIds = courseEventsContainers.map(function() {\n return $(this).attr('data-course-id');\n }).get();\n\n // Record when we started our request.\n setEventReloadTime(root, startReloadTime);\n\n // Load all of the events for the given courses.\n return getEventsForCourseIds(courseIds, startTime, COURSE_EVENT_LIMIT + 1, endTime)\n .then(function(eventsByCourse) {\n if (hasReloadedEventsSince(root, startReloadTime)) {\n // A new reload has begun so ignore our results.\n return eventsByCourse;\n }\n\n courseEventsContainers.each(function(index, container) {\n container = $(container);\n var courseId = container.attr('data-course-id');\n var courseName = container.find(SELECTORS.COURSE_NAME).text();\n var eventListContainer = container.find(EventList.rootSelector);\n var pageDeferred = $.Deferred();\n var events = [];\n var courseGroups = eventsByCourse.groupedbycourse.filter(function(group) {\n return group.courseid == courseId;\n });\n\n if (courseGroups.length) {\n // Get the events just for this course.\n events = courseGroups[0].events;\n }\n\n pageDeferred.resolve({events: events});\n\n // Re-initialise the events list with the preloaded events we just got from\n // the server.\n Str.get_string('ariaeventlistpaginationnavcourses', 'block_timeline', courseName)\n .then(function(string) {\n EventList.init(eventListContainer, COURSE_EVENT_LIMIT, {'1': pageDeferred.promise()}, string);\n return string;\n })\n .catch(function() {\n // Ignore a failure to load the string. Just render with the default string.\n EventList.init(eventListContainer, COURSE_EVENT_LIMIT, {'1': pageDeferred.promise()});\n });\n });\n\n return eventsByCourse;\n }).catch(Notification.exception);\n };\n\n /**\n * Add event listeners to load more courses for the courses view.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var registerEventListeners = function(root) {\n CustomEvents.define(root, [CustomEvents.events.activate]);\n // Show more courses and load their events when the user clicks the \"more courses\"\n // button.\n root.on(CustomEvents.events.activate, SELECTORS.MORE_COURSES_BUTTON, function(e, data) {\n enableMoreCoursesButtonLoading(root);\n loadMoreCourses(root)\n .then(function() {\n disableMoreCoursesButtonLoading(root);\n return;\n })\n .catch(function() {\n disableMoreCoursesButtonLoading(root);\n });\n\n if (data) {\n data.originalEvent.preventDefault();\n data.originalEvent.stopPropagation();\n }\n e.stopPropagation();\n });\n };\n\n /**\n * Initialise the timeline courses view. Begin loading the events\n * if this view is active. Add the relevant event listeners.\n *\n * This function should only be called once per page load because it\n * is adding event listeners to the page.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var init = function(root) {\n root = $(root);\n\n setEventReloadTime(root, Date.now());\n\n if (root.hasClass('active')) {\n // Only load if this is active otherwise it will be lazy loaded later.\n loadMoreCourses(root);\n root.attr('data-seen', true);\n }\n\n registerEventListeners(root);\n };\n\n /**\n * Reset the element back to it's initial state. Begin loading the events again\n * if this view is active.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var reset = function(root) {\n root.removeAttr('data-seen');\n if (root.hasClass('active')) {\n shown(root);\n }\n };\n\n /**\n * If this is the first time this view has been displayed then begin loading\n * the events.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var shown = function(root) {\n if (!root.attr('data-seen')) {\n if (hasLoadedCourses(root)) {\n // This isn't the first time this view is shown so just reload the\n // events for the courses we've already loaded.\n reloadCourseEvents(root);\n } else {\n // We haven't loaded any courses yet so do that now.\n loadMoreCourses(root);\n }\n\n root.attr('data-seen', true);\n }\n };\n\n return {\n init: init,\n reset: reset,\n shown: shown\n };\n});\n"],"file":"view_courses.min.js"} \ No newline at end of file diff --git a/blocks/timeline/amd/build/view_dates.min.js.map b/blocks/timeline/amd/build/view_dates.min.js.map index 93dcbe3c571..41af10d382b 100644 --- a/blocks/timeline/amd/build/view_dates.min.js.map +++ b/blocks/timeline/amd/build/view_dates.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view_dates.js"],"names":["define","$","Str","EventList","PubSub","PagedContentEvents","SELECTORS","EVENT_LIST_CONTAINER","DEFAULT_PAGE_LIMIT","getPagingLimits","root","limitPref","parseInt","data","isDefaultSet","limits","map","value","active","registerEventListeners","namespace","event","SET_ITEMS_PER_PAGE_LIMIT","subscribe","limit","load","eventListContainer","find","attr","Math","random","config","persistentLimitKey","eventNamespace","get_string","then","string","init","catch","hasClass","reset","removeAttr","shown"],"mappings":"AAuBAA,OAAM,6BACN,CACI,QADJ,CAEI,UAFJ,CAGI,2BAHJ,CAII,aAJJ,CAKI,2BALJ,CADM,CAQN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKIC,CALJ,CAME,IAEMC,CAAAA,CAAS,CAAG,CACZC,oBAAoB,CAAE,wCADV,CAFlB,CAMMC,CAAkB,CAAG,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAN3B,CAcMC,CAAe,CAAG,SAASC,CAAT,CAAe,IAC7BC,CAAAA,CAAS,CAAGC,QAAQ,CAACF,CAAI,CAACG,IAAL,CAAU,OAAV,CAAD,CAAqB,EAArB,CADS,CAE7BC,CAAY,GAFiB,CAG7BC,CAAM,CAAGP,CAAkB,CAACQ,GAAnB,CAAuB,SAASC,CAAT,CAAgB,CAChD,GAAIN,CAAS,EAAIM,CAAjB,CAAwB,CACpBH,CAAY,GACf,CAED,MAAO,CACHG,KAAK,CAAEA,CADJ,CAEHC,MAAM,CAAEP,CAAS,EAAIM,CAFlB,CAIV,CATY,CAHoB,CAcjC,GAAI,CAACH,CAAL,CAAmB,CACfC,CAAM,CAAC,CAAD,CAAN,CAAUG,MAAV,GACH,CAED,MAAOH,CAAAA,CACV,CAjCH,CAyCMI,CAAsB,CAAG,SAAST,CAAT,CAAeU,CAAf,CAA0B,CACnD,GAAIC,CAAAA,CAAK,CAAGD,CAAS,CAAGf,CAAkB,CAACiB,wBAA3C,CACAlB,CAAM,CAACmB,SAAP,CAAiBF,CAAjB,CAAwB,SAASG,CAAT,CAAgB,CACpCvB,CAAC,CAACS,CAAD,CAAD,CAAQG,IAAR,CAAa,OAAb,CAAsBW,CAAtB,CACH,CAFD,CAGH,CA9CH,CAqDMC,CAAI,CAAG,SAASf,CAAT,CAAe,IAClBgB,CAAAA,CAAkB,CAAGhB,CAAI,CAACiB,IAAL,CAAUrB,CAAS,CAACC,oBAApB,CADH,CAElBa,CAAS,CAAGnB,CAAC,CAACyB,CAAD,CAAD,CAAsBE,IAAtB,CAA2B,IAA3B,EAAmC,qBAAnC,CAA2DC,IAAI,CAACC,MAAL,EAFrD,CAGtBX,CAAsB,CAACT,CAAD,CAAOU,CAAP,CAAtB,CAHsB,GAKlBL,CAAAA,CAAM,CAAGN,CAAe,CAACC,CAAD,CALN,CAMlBqB,CAAM,CAAG,CACTC,kBAAkB,CAAE,sCADX,CAETC,cAAc,CAAEb,CAFP,CANS,CAUtBlB,CAAG,CAACgC,UAAJ,CAAe,iCAAf,CAAkD,gBAAlD,EACKC,IADL,CACU,SAASC,CAAT,CAAiB,CACnBjC,CAAS,CAACkC,IAAV,CAAeX,CAAf,CAAmCX,CAAnC,CAA2C,EAA3C,CAA+CqB,CAA/C,CAAuDL,CAAvD,EACA,MAAOK,CAAAA,CACV,CAJL,EAKKE,KALL,CAKW,UAAW,CAEdnC,CAAS,CAACkC,IAAV,CAAeX,CAAf,CAAmCX,CAAnC,CAA2C,EAA3C,CAA+C,EAA/C,CAAmDgB,CAAnD,CACH,CARL,CASH,CAxEH,CAkHE,MAAO,CACHM,IAAI,CAnCG,QAAPA,CAAAA,IAAO,CAAS3B,CAAT,CAAe,CACtBA,CAAI,CAAGT,CAAC,CAACS,CAAD,CAAR,CACA,GAAIA,CAAI,CAAC6B,QAAL,CAAc,QAAd,CAAJ,CAA6B,CACzBd,CAAI,CAACf,CAAD,CAAJ,CACAA,CAAI,CAACG,IAAL,CAAU,MAAV,IACH,CACJ,CA4BM,CAEH2B,KAAK,CAtBG,QAARA,CAAAA,KAAQ,CAAS9B,CAAT,CAAe,CACvBA,CAAI,CAAC+B,UAAL,CAAgB,WAAhB,EACA,GAAI/B,CAAI,CAAC6B,QAAL,CAAc,QAAd,CAAJ,CAA6B,CACzBd,CAAI,CAACf,CAAD,CAAJ,CACAA,CAAI,CAACG,IAAL,CAAU,MAAV,IACH,CACJ,CAcM,CAGH6B,KAAK,CAVG,QAARA,CAAAA,KAAQ,CAAShC,CAAT,CAAe,CACvB,GAAI,CAACA,CAAI,CAACG,IAAL,CAAU,MAAV,CAAL,CAAwB,CACpBY,CAAI,CAACf,CAAD,CAAJ,CACAA,CAAI,CAACG,IAAL,CAAU,MAAV,IACH,CACJ,CAEM,CAKV,CArIK,CAAN","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 .\n\n/**\n * Manage the timeline dates view for the timeline block.\n *\n * @package block_timeline\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/str',\n 'block_timeline/event_list',\n 'core/pubsub',\n 'core/paged_content_events'\n],\nfunction(\n $,\n Str,\n EventList,\n PubSub,\n PagedContentEvents\n) {\n\n var SELECTORS = {\n EVENT_LIST_CONTAINER: '[data-region=\"event-list-container\"]',\n };\n\n var DEFAULT_PAGE_LIMIT = [5, 10, 25];\n\n /**\n * Generate a paged content array of limits taking into account user preferences\n *\n * @param {object} root The root element for the timeline dates view.\n * @return {array} Array of limit objects\n */\n var getPagingLimits = function(root) {\n var limitPref = parseInt(root.data('limit'), 10);\n var isDefaultSet = false;\n var limits = DEFAULT_PAGE_LIMIT.map(function(value) {\n if (limitPref == value) {\n isDefaultSet = true;\n }\n\n return {\n value: value,\n active: limitPref == value\n };\n });\n\n if (!isDefaultSet) {\n limits[0].active = true;\n }\n\n return limits;\n };\n\n /**\n * Setup the listeners for the timeline block\n *\n * @param {string} root view dates container\n * @param {string} namespace The namespace for the paged content\n */\n var registerEventListeners = function(root, namespace) {\n var event = namespace + PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;\n PubSub.subscribe(event, function(limit) {\n $(root).data('limit', limit);\n });\n };\n\n /**\n * Initialise the event list and being loading the events.\n *\n * @param {object} root The root element for the timeline dates view.\n */\n var load = function(root) {\n var eventListContainer = root.find(SELECTORS.EVENT_LIST_CONTAINER);\n var namespace = $(eventListContainer).attr('id') + \"user_block_timeline\" + Math.random();\n registerEventListeners(root, namespace);\n\n var limits = getPagingLimits(root);\n var config = {\n persistentLimitKey: \"block_timeline_user_limit_preference\",\n eventNamespace: namespace\n };\n Str.get_string('ariaeventlistpaginationnavdates', 'block_timeline')\n .then(function(string) {\n EventList.init(eventListContainer, limits, {}, string, config);\n return string;\n })\n .catch(function() {\n // Ignore if we can't load the string. Still init the event list.\n EventList.init(eventListContainer, limits, {}, \"\", config);\n });\n };\n\n /**\n * Initialise the timeline dates view. Begin loading the events\n * if this view is active.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var init = function(root) {\n root = $(root);\n if (root.hasClass('active')) {\n load(root);\n root.data('seen', true);\n }\n };\n\n /**\n * Reset the view back to it's initial state. If this view is active then\n * beging loading the events.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var reset = function(root) {\n root.removeAttr('data-seen');\n if (root.hasClass('active')) {\n load(root);\n root.data('seen', true);\n }\n };\n\n /**\n * Load the events if this is the first time the view is displayed.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var shown = function(root) {\n if (!root.data('seen')) {\n load(root);\n root.data('seen', true);\n }\n };\n\n return {\n init: init,\n reset: reset,\n shown: shown\n };\n});\n"],"file":"view_dates.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view_dates.js"],"names":["define","$","Str","EventList","PubSub","PagedContentEvents","SELECTORS","EVENT_LIST_CONTAINER","DEFAULT_PAGE_LIMIT","getPagingLimits","root","limitPref","parseInt","data","isDefaultSet","limits","map","value","active","registerEventListeners","namespace","event","SET_ITEMS_PER_PAGE_LIMIT","subscribe","limit","load","eventListContainer","find","attr","Math","random","config","persistentLimitKey","eventNamespace","get_string","then","string","init","catch","hasClass","reset","removeAttr","shown"],"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 .\n\n/**\n * Manage the timeline dates view for the timeline block.\n *\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/str',\n 'block_timeline/event_list',\n 'core/pubsub',\n 'core/paged_content_events'\n],\nfunction(\n $,\n Str,\n EventList,\n PubSub,\n PagedContentEvents\n) {\n\n var SELECTORS = {\n EVENT_LIST_CONTAINER: '[data-region=\"event-list-container\"]',\n };\n\n var DEFAULT_PAGE_LIMIT = [5, 10, 25];\n\n /**\n * Generate a paged content array of limits taking into account user preferences\n *\n * @param {object} root The root element for the timeline dates view.\n * @return {array} Array of limit objects\n */\n var getPagingLimits = function(root) {\n var limitPref = parseInt(root.data('limit'), 10);\n var isDefaultSet = false;\n var limits = DEFAULT_PAGE_LIMIT.map(function(value) {\n if (limitPref == value) {\n isDefaultSet = true;\n }\n\n return {\n value: value,\n active: limitPref == value\n };\n });\n\n if (!isDefaultSet) {\n limits[0].active = true;\n }\n\n return limits;\n };\n\n /**\n * Setup the listeners for the timeline block\n *\n * @param {string} root view dates container\n * @param {string} namespace The namespace for the paged content\n */\n var registerEventListeners = function(root, namespace) {\n var event = namespace + PagedContentEvents.SET_ITEMS_PER_PAGE_LIMIT;\n PubSub.subscribe(event, function(limit) {\n $(root).data('limit', limit);\n });\n };\n\n /**\n * Initialise the event list and being loading the events.\n *\n * @param {object} root The root element for the timeline dates view.\n */\n var load = function(root) {\n var eventListContainer = root.find(SELECTORS.EVENT_LIST_CONTAINER);\n var namespace = $(eventListContainer).attr('id') + \"user_block_timeline\" + Math.random();\n registerEventListeners(root, namespace);\n\n var limits = getPagingLimits(root);\n var config = {\n persistentLimitKey: \"block_timeline_user_limit_preference\",\n eventNamespace: namespace\n };\n Str.get_string('ariaeventlistpaginationnavdates', 'block_timeline')\n .then(function(string) {\n EventList.init(eventListContainer, limits, {}, string, config);\n return string;\n })\n .catch(function() {\n // Ignore if we can't load the string. Still init the event list.\n EventList.init(eventListContainer, limits, {}, \"\", config);\n });\n };\n\n /**\n * Initialise the timeline dates view. Begin loading the events\n * if this view is active.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var init = function(root) {\n root = $(root);\n if (root.hasClass('active')) {\n load(root);\n root.data('seen', true);\n }\n };\n\n /**\n * Reset the view back to it's initial state. If this view is active then\n * beging loading the events.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var reset = function(root) {\n root.removeAttr('data-seen');\n if (root.hasClass('active')) {\n load(root);\n root.data('seen', true);\n }\n };\n\n /**\n * Load the events if this is the first time the view is displayed.\n *\n * @param {object} root The root element for the timeline courses view.\n */\n var shown = function(root) {\n if (!root.data('seen')) {\n load(root);\n root.data('seen', true);\n }\n };\n\n return {\n init: init,\n reset: reset,\n shown: shown\n };\n});\n"],"file":"view_dates.min.js"} \ No newline at end of file diff --git a/blocks/timeline/amd/build/view_nav.min.js.map b/blocks/timeline/amd/build/view_nav.min.js.map index 2b6c8424f93..1ccedd50ff2 100644 --- a/blocks/timeline/amd/build/view_nav.min.js.map +++ b/blocks/timeline/amd/build/view_nav.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view_nav.js"],"names":["define","$","CustomEvents","View","Ajax","Notification","SELECTORS","TIMELINE_DAY_FILTER","TIMELINE_DAY_FILTER_OPTION","TIMELINE_VIEW_SELECTOR","DATA_DAYS_OFFSET","DATA_DAYS_LIMIT","updateUserPreferences","type","value","call","methodname","args","preferences","fail","exception","registerTimelineDaySelector","root","timelineViewRoot","timelineDaySelectorContainer","find","events","activate","on","e","data","filtername","currentTarget","option","target","closest","attr","daysOffset","daysLimit","elementsWithDaysOffset","removeAttr","reset","originalEvent","preventDefault","registerViewSelector","viewSelector","shown","removeClass","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 .\n\n/**\n * Manage the timeline view navigation for the timeline block.\n *\n * @package block_timeline\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'block_timeline/view',\n 'core/ajax',\n 'core/notification'\n],\nfunction(\n $,\n CustomEvents,\n View,\n Ajax,\n Notification\n) {\n\n var SELECTORS = {\n TIMELINE_DAY_FILTER: '[data-region=\"day-filter\"]',\n TIMELINE_DAY_FILTER_OPTION: '[data-from]',\n TIMELINE_VIEW_SELECTOR: '[data-region=\"view-selector\"]',\n DATA_DAYS_OFFSET: '[data-days-offset]',\n DATA_DAYS_LIMIT: '[data-days-limit]',\n };\n\n /**\n * Generic handler to persist user preferences\n *\n * @param {string} type The name of the attribute you're updating\n * @param {string} value The value of the attribute you're updating\n */\n var updateUserPreferences = function(type, value) {\n var request = {\n methodname: 'core_user_update_user_preferences',\n args: {\n preferences: [\n {\n type: type,\n value: value\n }\n ]\n }\n };\n\n Ajax.call([request])[0]\n .fail(Notification.exception);\n };\n\n /**\n * Event listener for the day selector (\"Next 7 days\", \"Next 30 days\", etc).\n *\n * @param {object} root The root element for the timeline block\n * @param {object} timelineViewRoot The root element for the timeline view\n */\n var registerTimelineDaySelector = function(root, timelineViewRoot) {\n var timelineDaySelectorContainer = root.find(SELECTORS.TIMELINE_DAY_FILTER);\n\n CustomEvents.define(timelineDaySelectorContainer, [CustomEvents.events.activate]);\n timelineDaySelectorContainer.on(\n CustomEvents.events.activate,\n SELECTORS.TIMELINE_DAY_FILTER_OPTION,\n function(e, data) {\n // Update the user preference\n var filtername = $(e.currentTarget).data('filtername');\n var type = 'block_timeline_user_filter_preference';\n updateUserPreferences(type, filtername);\n\n var option = $(e.target).closest(SELECTORS.TIMELINE_DAY_FILTER_OPTION);\n\n if (option.attr('aria-current') == 'true') {\n // If it's already active then we don't need to do anything.\n return;\n }\n\n var daysOffset = option.attr('data-from');\n var daysLimit = option.attr('data-to');\n var elementsWithDaysOffset = root.find(SELECTORS.DATA_DAYS_OFFSET);\n\n elementsWithDaysOffset.attr('data-days-offset', daysOffset);\n\n if (daysLimit != undefined) {\n elementsWithDaysOffset.attr('data-days-limit', daysLimit);\n } else {\n elementsWithDaysOffset.removeAttr('data-days-limit');\n }\n\n // Reset the views to reinitialise the event lists now that we've\n // updated the day limits.\n View.reset(timelineViewRoot);\n\n data.originalEvent.preventDefault();\n }\n );\n };\n\n /**\n * Event listener for the \"sort\" button in the timeline navigation that allows for\n * changing between the timeline dates and courses views.\n *\n * On a view change we tell the timeline view module that the view has been shown\n * so that it can handle how to display the appropriate view.\n *\n * @param {object} root The root element for the timeline block\n * @param {object} timelineViewRoot The root element for the timeline view\n */\n var registerViewSelector = function(root, timelineViewRoot) {\n var viewSelector = root.find(SELECTORS.TIMELINE_VIEW_SELECTOR);\n\n // Listen for when the user changes tab so that we can show the first set of courses\n // and load their events when they request the sort by courses view for the first time.\n viewSelector.on('shown shown.bs.tab', function(e) {\n View.shown(timelineViewRoot);\n $(e.target).removeClass('active');\n });\n\n\n // Event selector for user_sort\n CustomEvents.define(viewSelector, [CustomEvents.events.activate]);\n viewSelector.on(CustomEvents.events.activate, \"[data-toggle='tab']\", function(e) {\n var filtername = $(e.currentTarget).data('filtername');\n var type = 'block_timeline_user_sort_preference';\n updateUserPreferences(type, filtername);\n });\n };\n\n /**\n * Initialise the timeline view navigation by adding event listeners to\n * the navigation elements.\n *\n * @param {object} root The root element for the timeline block\n * @param {object} timelineViewRoot The root element for the timeline view\n */\n var init = function(root, timelineViewRoot) {\n root = $(root);\n registerTimelineDaySelector(root, timelineViewRoot);\n registerViewSelector(root, timelineViewRoot);\n };\n\n return {\n init: init\n };\n});\n"],"file":"view_nav.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view_nav.js"],"names":["define","$","CustomEvents","View","Ajax","Notification","SELECTORS","TIMELINE_DAY_FILTER","TIMELINE_DAY_FILTER_OPTION","TIMELINE_VIEW_SELECTOR","DATA_DAYS_OFFSET","DATA_DAYS_LIMIT","updateUserPreferences","type","value","call","methodname","args","preferences","fail","exception","registerTimelineDaySelector","root","timelineViewRoot","timelineDaySelectorContainer","find","events","activate","on","e","data","filtername","currentTarget","option","target","closest","attr","daysOffset","daysLimit","elementsWithDaysOffset","removeAttr","reset","originalEvent","preventDefault","registerViewSelector","viewSelector","shown","removeClass","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 .\n\n/**\n * Manage the timeline view navigation for the timeline block.\n *\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'block_timeline/view',\n 'core/ajax',\n 'core/notification'\n],\nfunction(\n $,\n CustomEvents,\n View,\n Ajax,\n Notification\n) {\n\n var SELECTORS = {\n TIMELINE_DAY_FILTER: '[data-region=\"day-filter\"]',\n TIMELINE_DAY_FILTER_OPTION: '[data-from]',\n TIMELINE_VIEW_SELECTOR: '[data-region=\"view-selector\"]',\n DATA_DAYS_OFFSET: '[data-days-offset]',\n DATA_DAYS_LIMIT: '[data-days-limit]',\n };\n\n /**\n * Generic handler to persist user preferences\n *\n * @param {string} type The name of the attribute you're updating\n * @param {string} value The value of the attribute you're updating\n */\n var updateUserPreferences = function(type, value) {\n var request = {\n methodname: 'core_user_update_user_preferences',\n args: {\n preferences: [\n {\n type: type,\n value: value\n }\n ]\n }\n };\n\n Ajax.call([request])[0]\n .fail(Notification.exception);\n };\n\n /**\n * Event listener for the day selector (\"Next 7 days\", \"Next 30 days\", etc).\n *\n * @param {object} root The root element for the timeline block\n * @param {object} timelineViewRoot The root element for the timeline view\n */\n var registerTimelineDaySelector = function(root, timelineViewRoot) {\n var timelineDaySelectorContainer = root.find(SELECTORS.TIMELINE_DAY_FILTER);\n\n CustomEvents.define(timelineDaySelectorContainer, [CustomEvents.events.activate]);\n timelineDaySelectorContainer.on(\n CustomEvents.events.activate,\n SELECTORS.TIMELINE_DAY_FILTER_OPTION,\n function(e, data) {\n // Update the user preference\n var filtername = $(e.currentTarget).data('filtername');\n var type = 'block_timeline_user_filter_preference';\n updateUserPreferences(type, filtername);\n\n var option = $(e.target).closest(SELECTORS.TIMELINE_DAY_FILTER_OPTION);\n\n if (option.attr('aria-current') == 'true') {\n // If it's already active then we don't need to do anything.\n return;\n }\n\n var daysOffset = option.attr('data-from');\n var daysLimit = option.attr('data-to');\n var elementsWithDaysOffset = root.find(SELECTORS.DATA_DAYS_OFFSET);\n\n elementsWithDaysOffset.attr('data-days-offset', daysOffset);\n\n if (daysLimit != undefined) {\n elementsWithDaysOffset.attr('data-days-limit', daysLimit);\n } else {\n elementsWithDaysOffset.removeAttr('data-days-limit');\n }\n\n // Reset the views to reinitialise the event lists now that we've\n // updated the day limits.\n View.reset(timelineViewRoot);\n\n data.originalEvent.preventDefault();\n }\n );\n };\n\n /**\n * Event listener for the \"sort\" button in the timeline navigation that allows for\n * changing between the timeline dates and courses views.\n *\n * On a view change we tell the timeline view module that the view has been shown\n * so that it can handle how to display the appropriate view.\n *\n * @param {object} root The root element for the timeline block\n * @param {object} timelineViewRoot The root element for the timeline view\n */\n var registerViewSelector = function(root, timelineViewRoot) {\n var viewSelector = root.find(SELECTORS.TIMELINE_VIEW_SELECTOR);\n\n // Listen for when the user changes tab so that we can show the first set of courses\n // and load their events when they request the sort by courses view for the first time.\n viewSelector.on('shown shown.bs.tab', function(e) {\n View.shown(timelineViewRoot);\n $(e.target).removeClass('active');\n });\n\n\n // Event selector for user_sort\n CustomEvents.define(viewSelector, [CustomEvents.events.activate]);\n viewSelector.on(CustomEvents.events.activate, \"[data-toggle='tab']\", function(e) {\n var filtername = $(e.currentTarget).data('filtername');\n var type = 'block_timeline_user_sort_preference';\n updateUserPreferences(type, filtername);\n });\n };\n\n /**\n * Initialise the timeline view navigation by adding event listeners to\n * the navigation elements.\n *\n * @param {object} root The root element for the timeline block\n * @param {object} timelineViewRoot The root element for the timeline view\n */\n var init = function(root, timelineViewRoot) {\n root = $(root);\n registerTimelineDaySelector(root, timelineViewRoot);\n registerViewSelector(root, timelineViewRoot);\n };\n\n return {\n init: init\n };\n});\n"],"file":"view_nav.min.js"} \ No newline at end of file diff --git a/blocks/timeline/amd/src/view.js b/blocks/timeline/amd/src/view.js index 89430a77fe5..20d3a241939 100644 --- a/blocks/timeline/amd/src/view.js +++ b/blocks/timeline/amd/src/view.js @@ -16,7 +16,6 @@ /** * Manage the timeline view for the timeline block. * - * @package block_timeline * @copyright 2018 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/timeline/amd/src/view_courses.js b/blocks/timeline/amd/src/view_courses.js index 4749c920351..a31f49665de 100644 --- a/blocks/timeline/amd/src/view_courses.js +++ b/blocks/timeline/amd/src/view_courses.js @@ -16,7 +16,6 @@ /** * Manage the timeline courses view for the timeline block. * - * @package block_timeline * @copyright 2018 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/timeline/amd/src/view_dates.js b/blocks/timeline/amd/src/view_dates.js index f411c47ff7c..a46bd0f18ec 100644 --- a/blocks/timeline/amd/src/view_dates.js +++ b/blocks/timeline/amd/src/view_dates.js @@ -16,7 +16,6 @@ /** * Manage the timeline dates view for the timeline block. * - * @package block_timeline * @copyright 2018 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/blocks/timeline/amd/src/view_nav.js b/blocks/timeline/amd/src/view_nav.js index 596c75b669e..180ff9dba3b 100644 --- a/blocks/timeline/amd/src/view_nav.js +++ b/blocks/timeline/amd/src/view_nav.js @@ -16,7 +16,6 @@ /** * Manage the timeline view navigation for the timeline block. * - * @package block_timeline * @copyright 2018 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/build/calendar.min.js.map b/calendar/amd/build/calendar.min.js.map index aa84975f2fb..322452e0f99 100644 --- a/calendar/amd/build/calendar.min.js.map +++ b/calendar/amd/build/calendar.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/calendar.js"],"names":["define","$","Ajax","Str","Templates","Notification","CustomEvents","ModalEvents","ModalFactory","ModalEventForm","SummaryModal","CalendarRepository","CalendarEvents","CalendarViewManager","CalendarCrud","CalendarSelectors","SELECTORS","ROOT","DAY","NEW_EVENT_BUTTON","DAY_CONTENT","LOADING_ICON","VIEW_DAY_LINK","CALENDAR_MONTH_WRAPPER","TODAY","handleMoveEvent","e","eventId","originElement","destinationElement","originTimestamp","destinationTimestamp","attr","render","then","html","js","find","addClass","appendNodeContents","updateEventStartDay","trigger","eventMoved","always","destinationLoadingElement","removeClass","replaceNode","originLoadingElement","fail","exception","registerCalendarEventListeners","root","eventFormModalPromise","body","on","created","reloadCurrentMonth","deleted","updated","editActionEvent","url","window","location","assign","moveEvent","registerEditListeners","registerEventListeners","dayLink","target","year","data","month","day","courseId","categoryId","refreshDayContent","preventDefault","history","pushState","elements","courseSelector","selectElement","val","eventFormPromise","registerEventFormModal","contextId","is","startTime","modal","wrapper","closest","setCourseId","setCategoryId","setContextId","setStartTime","show","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 .\n\n/**\n * This module is the highest level module for the calendar. It is\n * responsible for initialising all of the components required for\n * the calendar to run. It also coordinates the interaction between\n * components by listening for and responding to different events\n * triggered within the calendar UI.\n *\n * @module core_calendar/calendar\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/str',\n 'core/templates',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal_events',\n 'core/modal_factory',\n 'core_calendar/modal_event_form',\n 'core_calendar/summary_modal',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n 'core_calendar/crud',\n 'core_calendar/selectors',\n ],\n function(\n $,\n Ajax,\n Str,\n Templates,\n Notification,\n CustomEvents,\n ModalEvents,\n ModalFactory,\n ModalEventForm,\n SummaryModal,\n CalendarRepository,\n CalendarEvents,\n CalendarViewManager,\n CalendarCrud,\n CalendarSelectors\n ) {\n\n var SELECTORS = {\n ROOT: \"[data-region='calendar']\",\n DAY: \"[data-region='day']\",\n NEW_EVENT_BUTTON: \"[data-action='new-event-button']\",\n DAY_CONTENT: \"[data-region='day-content']\",\n LOADING_ICON: '.loading-icon',\n VIEW_DAY_LINK: \"[data-action='view-day-link']\",\n CALENDAR_MONTH_WRAPPER: \".calendarwrapper\",\n TODAY: '.today',\n };\n\n /**\n * Handler for the drag and drop move event. Provides a loading indicator\n * while the request is sent to the server to update the event start date.\n *\n * Triggers a eventMoved calendar javascript event if the event was successfully\n * updated.\n *\n * @param {event} e The calendar move event\n * @param {int} eventId The event id being moved\n * @param {object|null} originElement The jQuery element for where the event is moving from\n * @param {object} destinationElement The jQuery element for where the event is moving to\n */\n var handleMoveEvent = function(e, eventId, originElement, destinationElement) {\n var originTimestamp = null;\n var destinationTimestamp = destinationElement.attr('data-day-timestamp');\n\n if (originElement) {\n originTimestamp = originElement.attr('data-day-timestamp');\n }\n\n // If the event has actually changed day.\n if (!originElement || originTimestamp != destinationTimestamp) {\n Templates.render('core/loading', {})\n .then(function(html, js) {\n // First we show some loading icons in each of the days being affected.\n destinationElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(destinationElement, html, js);\n\n if (originElement) {\n originElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(originElement, html, js);\n }\n return;\n })\n .then(function() {\n // Send a request to the server to make the change.\n return CalendarRepository.updateEventStartDay(eventId, destinationTimestamp);\n })\n .then(function() {\n // If the update was successful then broadcast an event letting the calendar\n // know that an event has been moved.\n $('body').trigger(CalendarEvents.eventMoved, [eventId, originElement, destinationElement]);\n return;\n })\n .always(function() {\n // Always remove the loading icons regardless of whether the update\n // request was successful or not.\n var destinationLoadingElement = destinationElement.find(SELECTORS.LOADING_ICON);\n destinationElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(destinationLoadingElement, '', '');\n\n if (originElement) {\n var originLoadingElement = originElement.find(SELECTORS.LOADING_ICON);\n originElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(originLoadingElement, '', '');\n }\n return;\n })\n .fail(Notification.exception);\n }\n };\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n * @param {object} eventFormModalPromise A promise reolved with the event form modal\n */\n var registerCalendarEventListeners = function(root, eventFormModalPromise) {\n var body = $('body');\n\n body.on(CalendarEvents.created, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.deleted, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.updated, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.editActionEvent, function(e, url) {\n // Action events needs to be edit directly on the course module.\n window.location.assign(url);\n });\n // Handle the event fired by the drag and drop code.\n body.on(CalendarEvents.moveEvent, handleMoveEvent);\n // When an event is successfully moved we should updated the UI.\n body.on(CalendarEvents.eventMoved, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n\n CalendarCrud.registerEditListeners(root, eventFormModalPromise);\n };\n\n /**\n * Register event listeners for the module.\n *\n * @param {object} root The calendar root element\n */\n var registerEventListeners = function(root) {\n // Listen the click on the day link to render the day view.\n root.on('click', SELECTORS.VIEW_DAY_LINK, function(e) {\n var dayLink = $(e.target);\n var year = dayLink.data('year'),\n month = dayLink.data('month'),\n day = dayLink.data('day'),\n courseId = dayLink.data('courseid'),\n categoryId = dayLink.data('categoryid');\n CalendarViewManager.refreshDayContent(root, year, month, day, courseId, categoryId, root,\n 'core_calendar/calendar_day').then(function() {\n e.preventDefault();\n var url = '?view=day&time=' + dayLink.data('timestamp');\n return window.history.pushState({}, '', url);\n }).fail(Notification.exception);\n });\n\n root.on('change', CalendarSelectors.elements.courseSelector, function() {\n var selectElement = $(this);\n var courseId = selectElement.val();\n CalendarViewManager.reloadCurrentMonth(root, courseId, null)\n .then(function() {\n // We need to get the selector again because the content has changed.\n return root.find(CalendarSelectors.elements.courseSelector).val(courseId);\n })\n .fail(Notification.exception);\n });\n\n var eventFormPromise = CalendarCrud.registerEventFormModal(root),\n contextId = $(SELECTORS.CALENDAR_MONTH_WRAPPER).data('context-id');\n registerCalendarEventListeners(root, eventFormPromise);\n\n if (contextId) {\n // Bind click events to calendar days.\n root.on('click', SELECTORS.DAY, function (e) {\n\n var target = $(e.target);\n\n if (!target.is(SELECTORS.VIEW_DAY_LINK)) {\n var startTime = $(this).attr('data-new-event-timestamp');\n eventFormPromise.then(function (modal) {\n var wrapper = target.closest(CalendarSelectors.wrapper);\n modal.setCourseId(wrapper.data('courseid'));\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setStartTime(startTime);\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n }\n });\n }\n };\n\n return {\n init: function(root) {\n root = $(root);\n CalendarViewManager.init(root);\n registerEventListeners(root);\n }\n };\n});\n"],"file":"calendar.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/calendar.js"],"names":["define","$","Ajax","Str","Templates","Notification","CustomEvents","ModalEvents","ModalFactory","ModalEventForm","SummaryModal","CalendarRepository","CalendarEvents","CalendarViewManager","CalendarCrud","CalendarSelectors","SELECTORS","ROOT","DAY","NEW_EVENT_BUTTON","DAY_CONTENT","LOADING_ICON","VIEW_DAY_LINK","CALENDAR_MONTH_WRAPPER","TODAY","handleMoveEvent","e","eventId","originElement","destinationElement","originTimestamp","destinationTimestamp","attr","render","then","html","js","find","addClass","appendNodeContents","updateEventStartDay","trigger","eventMoved","always","destinationLoadingElement","removeClass","replaceNode","originLoadingElement","fail","exception","registerCalendarEventListeners","root","eventFormModalPromise","body","on","created","reloadCurrentMonth","deleted","updated","editActionEvent","url","window","location","assign","moveEvent","registerEditListeners","registerEventListeners","dayLink","target","year","data","month","day","courseId","categoryId","refreshDayContent","preventDefault","history","pushState","elements","courseSelector","selectElement","val","eventFormPromise","registerEventFormModal","contextId","is","startTime","modal","wrapper","closest","setCourseId","setCategoryId","setContextId","setStartTime","show","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 .\n\n/**\n * This module is the highest level module for the calendar. It is\n * responsible for initialising all of the components required for\n * the calendar to run. It also coordinates the interaction between\n * components by listening for and responding to different events\n * triggered within the calendar UI.\n *\n * @module core_calendar/calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/str',\n 'core/templates',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal_events',\n 'core/modal_factory',\n 'core_calendar/modal_event_form',\n 'core_calendar/summary_modal',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n 'core_calendar/crud',\n 'core_calendar/selectors',\n ],\n function(\n $,\n Ajax,\n Str,\n Templates,\n Notification,\n CustomEvents,\n ModalEvents,\n ModalFactory,\n ModalEventForm,\n SummaryModal,\n CalendarRepository,\n CalendarEvents,\n CalendarViewManager,\n CalendarCrud,\n CalendarSelectors\n ) {\n\n var SELECTORS = {\n ROOT: \"[data-region='calendar']\",\n DAY: \"[data-region='day']\",\n NEW_EVENT_BUTTON: \"[data-action='new-event-button']\",\n DAY_CONTENT: \"[data-region='day-content']\",\n LOADING_ICON: '.loading-icon',\n VIEW_DAY_LINK: \"[data-action='view-day-link']\",\n CALENDAR_MONTH_WRAPPER: \".calendarwrapper\",\n TODAY: '.today',\n };\n\n /**\n * Handler for the drag and drop move event. Provides a loading indicator\n * while the request is sent to the server to update the event start date.\n *\n * Triggers a eventMoved calendar javascript event if the event was successfully\n * updated.\n *\n * @param {event} e The calendar move event\n * @param {int} eventId The event id being moved\n * @param {object|null} originElement The jQuery element for where the event is moving from\n * @param {object} destinationElement The jQuery element for where the event is moving to\n */\n var handleMoveEvent = function(e, eventId, originElement, destinationElement) {\n var originTimestamp = null;\n var destinationTimestamp = destinationElement.attr('data-day-timestamp');\n\n if (originElement) {\n originTimestamp = originElement.attr('data-day-timestamp');\n }\n\n // If the event has actually changed day.\n if (!originElement || originTimestamp != destinationTimestamp) {\n Templates.render('core/loading', {})\n .then(function(html, js) {\n // First we show some loading icons in each of the days being affected.\n destinationElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(destinationElement, html, js);\n\n if (originElement) {\n originElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(originElement, html, js);\n }\n return;\n })\n .then(function() {\n // Send a request to the server to make the change.\n return CalendarRepository.updateEventStartDay(eventId, destinationTimestamp);\n })\n .then(function() {\n // If the update was successful then broadcast an event letting the calendar\n // know that an event has been moved.\n $('body').trigger(CalendarEvents.eventMoved, [eventId, originElement, destinationElement]);\n return;\n })\n .always(function() {\n // Always remove the loading icons regardless of whether the update\n // request was successful or not.\n var destinationLoadingElement = destinationElement.find(SELECTORS.LOADING_ICON);\n destinationElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(destinationLoadingElement, '', '');\n\n if (originElement) {\n var originLoadingElement = originElement.find(SELECTORS.LOADING_ICON);\n originElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(originLoadingElement, '', '');\n }\n return;\n })\n .fail(Notification.exception);\n }\n };\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n * @param {object} eventFormModalPromise A promise reolved with the event form modal\n */\n var registerCalendarEventListeners = function(root, eventFormModalPromise) {\n var body = $('body');\n\n body.on(CalendarEvents.created, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.deleted, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.updated, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.editActionEvent, function(e, url) {\n // Action events needs to be edit directly on the course module.\n window.location.assign(url);\n });\n // Handle the event fired by the drag and drop code.\n body.on(CalendarEvents.moveEvent, handleMoveEvent);\n // When an event is successfully moved we should updated the UI.\n body.on(CalendarEvents.eventMoved, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n\n CalendarCrud.registerEditListeners(root, eventFormModalPromise);\n };\n\n /**\n * Register event listeners for the module.\n *\n * @param {object} root The calendar root element\n */\n var registerEventListeners = function(root) {\n // Listen the click on the day link to render the day view.\n root.on('click', SELECTORS.VIEW_DAY_LINK, function(e) {\n var dayLink = $(e.target);\n var year = dayLink.data('year'),\n month = dayLink.data('month'),\n day = dayLink.data('day'),\n courseId = dayLink.data('courseid'),\n categoryId = dayLink.data('categoryid');\n CalendarViewManager.refreshDayContent(root, year, month, day, courseId, categoryId, root,\n 'core_calendar/calendar_day').then(function() {\n e.preventDefault();\n var url = '?view=day&time=' + dayLink.data('timestamp');\n return window.history.pushState({}, '', url);\n }).fail(Notification.exception);\n });\n\n root.on('change', CalendarSelectors.elements.courseSelector, function() {\n var selectElement = $(this);\n var courseId = selectElement.val();\n CalendarViewManager.reloadCurrentMonth(root, courseId, null)\n .then(function() {\n // We need to get the selector again because the content has changed.\n return root.find(CalendarSelectors.elements.courseSelector).val(courseId);\n })\n .fail(Notification.exception);\n });\n\n var eventFormPromise = CalendarCrud.registerEventFormModal(root),\n contextId = $(SELECTORS.CALENDAR_MONTH_WRAPPER).data('context-id');\n registerCalendarEventListeners(root, eventFormPromise);\n\n if (contextId) {\n // Bind click events to calendar days.\n root.on('click', SELECTORS.DAY, function (e) {\n\n var target = $(e.target);\n\n if (!target.is(SELECTORS.VIEW_DAY_LINK)) {\n var startTime = $(this).attr('data-new-event-timestamp');\n eventFormPromise.then(function (modal) {\n var wrapper = target.closest(CalendarSelectors.wrapper);\n modal.setCourseId(wrapper.data('courseid'));\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setStartTime(startTime);\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n }\n });\n }\n };\n\n return {\n init: function(root) {\n root = $(root);\n CalendarViewManager.init(root);\n registerEventListeners(root);\n }\n };\n});\n"],"file":"calendar.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/calendar_filter.min.js.map b/calendar/amd/build/calendar_filter.min.js.map index 5fd11036430..1962b1a27e3 100644 --- a/calendar/amd/build/calendar_filter.min.js.map +++ b/calendar/amd/build/calendar_filter.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/calendar_filter.js"],"names":["define","$","CalendarSelectors","CalendarEvents","Str","Templates","registerEventListeners","root","on","eventFilterItem","e","target","currentTarget","toggleFilter","preventDefault","viewUpdated","filters","find","each","i","filter","data","getFilterData","fireFilterChangedEvent","hidden","M","util","js_pending","get_string","eventtype","then","nameStr","name","icon","key","component","context","render","html","js","replaceNode","js_complete","trigger","filterChanged","type","init"],"mappings":"AAuBAA,OAAM,iCAAC,CACH,QADG,CAEH,yBAFG,CAGH,sBAHG,CAIH,UAJG,CAKH,gBALG,CAAD,CAON,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKIC,CALJ,CAME,IAEMC,CAAAA,CAAsB,CAAG,SAASC,CAAT,CAAe,CACxCA,CAAI,CAACC,EAAL,CAAQ,OAAR,CAAiBN,CAAiB,CAACO,eAAnC,CAAoD,SAASC,CAAT,CAAY,CAC5D,GAAIC,CAAAA,CAAM,CAAGV,CAAC,CAACS,CAAC,CAACE,aAAH,CAAd,CAEAC,CAAY,CAACF,CAAD,CAAZ,CAEAD,CAAC,CAACI,cAAF,EACH,CAND,EAQAb,CAAC,CAAC,MAAD,CAAD,CAAUO,EAAV,CAAaL,CAAc,CAACY,WAA5B,CAAyC,UAAW,CAChD,GAAIC,CAAAA,CAAO,CAAGT,CAAI,CAACU,IAAL,CAAUf,CAAiB,CAACO,eAA5B,CAAd,CAEAO,CAAO,CAACE,IAAR,CAAa,SAASC,CAAT,CAAYC,CAAZ,CAAoB,CAC7BA,CAAM,CAAGnB,CAAC,CAACmB,CAAD,CAAV,CACA,GAAIA,CAAM,CAACC,IAAP,CAAY,kBAAZ,CAAJ,CAAqC,CACjC,GAAIA,CAAAA,CAAI,CAAGC,CAAa,CAACF,CAAD,CAAxB,CACAG,CAAsB,CAACF,CAAD,CACzB,CACJ,CAND,CAOH,CAVD,CAWH,CAtBH,CAwBMR,CAAY,CAAG,SAASF,CAAT,CAAiB,CAChC,GAAIU,CAAAA,CAAI,CAAGC,CAAa,CAACX,CAAD,CAAxB,CAGAU,CAAI,CAACG,MAAL,CAAc,CAACH,CAAI,CAACG,MAApB,CAEAC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,4CAAlB,EACA,MAAOvB,CAAAA,CAAG,CAACwB,UAAJ,CAAe,YAAcP,CAAI,CAACQ,SAAlC,CAA6C,UAA7C,EACNC,IADM,CACD,SAASC,CAAT,CAAkB,CACpBV,CAAI,CAACW,IAAL,CAAYD,CAAZ,CACAV,CAAI,CAACY,IAAL,IACAZ,CAAI,CAACa,GAAL,CAAW,KAAOb,CAAI,CAACQ,SAAZ,CAAwB,OAAnC,CACAR,CAAI,CAACc,SAAL,CAAiB,MAAjB,CAEA,MAAOd,CAAAA,CACV,CARM,EASNS,IATM,CASD,SAASM,CAAT,CAAkB,CACpB,MAAO/B,CAAAA,CAAS,CAACgC,MAAV,CAAiB,gCAAjB,CAAmDD,CAAnD,CACV,CAXM,EAYNN,IAZM,CAYD,SAASQ,CAAT,CAAeC,CAAf,CAAmB,CACrB,MAAOlC,CAAAA,CAAS,CAACmC,WAAV,CAAsB7B,CAAtB,CAA8B2B,CAA9B,CAAoCC,CAApC,CACV,CAdM,EAeNT,IAfM,CAeD,UAAW,CACbP,CAAsB,CAACF,CAAD,CAAtB,CACAI,CAAC,CAACC,IAAF,CAAOe,WAAP,CAAmB,4CAAnB,CAEH,CAnBM,CAoBV,CAnDH,CA0DMlB,CAAsB,CAAG,SAASF,CAAT,CAAe,CACxCI,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,0BAAlB,EACA1B,CAAC,CAAC,MAAD,CAAD,CAAUyC,OAAV,CAAkBvC,CAAc,CAACwC,aAAjC,CAAgD,CAC5CC,IAAI,CAAEvB,CAAI,CAACQ,SADiC,CAE5CL,MAAM,CAAEH,CAAI,CAACG,MAF+B,CAAhD,EAIAC,CAAC,CAACC,IAAF,CAAOe,WAAP,CAAmB,0BAAnB,CACH,CAjEH,CAyEMnB,CAAa,CAAG,SAASX,CAAT,CAAiB,CACjC,MAAO,CACHkB,SAAS,CAAElB,CAAM,CAACU,IAAP,CAAY,WAAZ,CADR,CAEHG,MAAM,CAAEb,CAAM,CAACU,IAAP,CAAY,kBAAZ,CAFL,CAIV,CA9EH,CAgFE,MAAO,CACHwB,IAAI,CAAE,cAAStC,CAAT,CAAe,CACjBA,CAAI,CAAGN,CAAC,CAACM,CAAD,CAAR,CAEAD,CAAsB,CAACC,CAAD,CACzB,CALE,CAOV,CApGK,CAAN","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 .\n\n/**\n * This module is responsible for the calendar filter.\n *\n * @module core_calendar/calendar_filter\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core/str',\n 'core/templates',\n],\nfunction(\n $,\n CalendarSelectors,\n CalendarEvents,\n Str,\n Templates\n) {\n\n var registerEventListeners = function(root) {\n root.on('click', CalendarSelectors.eventFilterItem, function(e) {\n var target = $(e.currentTarget);\n\n toggleFilter(target);\n\n e.preventDefault();\n });\n\n $('body').on(CalendarEvents.viewUpdated, function() {\n var filters = root.find(CalendarSelectors.eventFilterItem);\n\n filters.each(function(i, filter) {\n filter = $(filter);\n if (filter.data('eventtype-hidden')) {\n var data = getFilterData(filter);\n fireFilterChangedEvent(data);\n }\n });\n });\n };\n\n var toggleFilter = function(target) {\n var data = getFilterData(target);\n\n // Toggle the hidden. We need to render the template before we change the value.\n data.hidden = !data.hidden;\n\n M.util.js_pending(\"core_calendar/calendar_filter:toggleFilter\");\n return Str.get_string('eventtype' + data.eventtype, 'calendar')\n .then(function(nameStr) {\n data.name = nameStr;\n data.icon = true;\n data.key = 'i/' + data.eventtype + 'event';\n data.component = 'core';\n\n return data;\n })\n .then(function(context) {\n return Templates.render('core_calendar/event_filter_key', context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n fireFilterChangedEvent(data);\n M.util.js_complete(\"core_calendar/calendar_filter:toggleFilter\");\n return;\n });\n };\n\n /**\n * Fire the filterChanged event for the specified data.\n *\n * @param {object} data The data to include\n */\n var fireFilterChangedEvent = function(data) {\n M.util.js_pending(\"month-mini-filterChanged\");\n $('body').trigger(CalendarEvents.filterChanged, {\n type: data.eventtype,\n hidden: data.hidden,\n });\n M.util.js_complete(\"month-mini-filterChanged\");\n };\n\n /**\n * Get the filter data for the specified target.\n *\n * @param {jQuery} target The target node\n * @return {Object}\n */\n var getFilterData = function(target) {\n return {\n eventtype: target.data('eventtype'),\n hidden: target.data('eventtype-hidden'),\n };\n };\n\n return {\n init: function(root) {\n root = $(root);\n\n registerEventListeners(root);\n }\n };\n});\n"],"file":"calendar_filter.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/calendar_filter.js"],"names":["define","$","CalendarSelectors","CalendarEvents","Str","Templates","registerEventListeners","root","on","eventFilterItem","e","target","currentTarget","toggleFilter","preventDefault","viewUpdated","filters","find","each","i","filter","data","getFilterData","fireFilterChangedEvent","hidden","M","util","js_pending","get_string","eventtype","then","nameStr","name","icon","key","component","context","render","html","js","replaceNode","js_complete","trigger","filterChanged","type","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 .\n\n/**\n * This module is responsible for the calendar filter.\n *\n * @module core_calendar/calendar_filter\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core/str',\n 'core/templates',\n],\nfunction(\n $,\n CalendarSelectors,\n CalendarEvents,\n Str,\n Templates\n) {\n\n var registerEventListeners = function(root) {\n root.on('click', CalendarSelectors.eventFilterItem, function(e) {\n var target = $(e.currentTarget);\n\n toggleFilter(target);\n\n e.preventDefault();\n });\n\n $('body').on(CalendarEvents.viewUpdated, function() {\n var filters = root.find(CalendarSelectors.eventFilterItem);\n\n filters.each(function(i, filter) {\n filter = $(filter);\n if (filter.data('eventtype-hidden')) {\n var data = getFilterData(filter);\n fireFilterChangedEvent(data);\n }\n });\n });\n };\n\n var toggleFilter = function(target) {\n var data = getFilterData(target);\n\n // Toggle the hidden. We need to render the template before we change the value.\n data.hidden = !data.hidden;\n\n M.util.js_pending(\"core_calendar/calendar_filter:toggleFilter\");\n return Str.get_string('eventtype' + data.eventtype, 'calendar')\n .then(function(nameStr) {\n data.name = nameStr;\n data.icon = true;\n data.key = 'i/' + data.eventtype + 'event';\n data.component = 'core';\n\n return data;\n })\n .then(function(context) {\n return Templates.render('core_calendar/event_filter_key', context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n fireFilterChangedEvent(data);\n M.util.js_complete(\"core_calendar/calendar_filter:toggleFilter\");\n return;\n });\n };\n\n /**\n * Fire the filterChanged event for the specified data.\n *\n * @param {object} data The data to include\n */\n var fireFilterChangedEvent = function(data) {\n M.util.js_pending(\"month-mini-filterChanged\");\n $('body').trigger(CalendarEvents.filterChanged, {\n type: data.eventtype,\n hidden: data.hidden,\n });\n M.util.js_complete(\"month-mini-filterChanged\");\n };\n\n /**\n * Get the filter data for the specified target.\n *\n * @param {jQuery} target The target node\n * @return {Object}\n */\n var getFilterData = function(target) {\n return {\n eventtype: target.data('eventtype'),\n hidden: target.data('eventtype-hidden'),\n };\n };\n\n return {\n init: function(root) {\n root = $(root);\n\n registerEventListeners(root);\n }\n };\n});\n"],"file":"calendar_filter.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/calendar_mini.min.js.map b/calendar/amd/build/calendar_mini.min.js.map index 8fd42939090..979529eb1b7 100644 --- a/calendar/amd/build/calendar_mini.min.js.map +++ b/calendar/amd/build/calendar_mini.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/calendar_mini.js"],"names":["define","$","CalendarSelectors","CalendarEvents","CalendarViewManager","registerCalendarEventListeners","root","body","namespace","attr","on","created","reloadMonth","deleted","updated","eventMoved","e","data","is","reloadCurrentMonth","off","registerEventListeners","filterChanged","daysWithEvent","find","eventType","type","toggleClass","hidden","elements","courseSelector","selectElement","courseId","val","init","loadOnInit"],"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 .\n\n/**\n * This module is the highest level module for the calendar. It is\n * responsible for initialising all of the components required for\n * the calendar to run. It also coordinates the interaction between\n * components by listening for and responding to different events\n * triggered within the calendar UI.\n *\n * @module core_calendar/calendar_mini\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n],\nfunction(\n $,\n CalendarSelectors,\n CalendarEvents,\n CalendarViewManager\n) {\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n */\n var registerCalendarEventListeners = function(root) {\n var body = $('body');\n var namespace = '.' + root.attr('id');\n\n body.on(CalendarEvents.created + namespace, root, reloadMonth);\n body.on(CalendarEvents.deleted + namespace, root, reloadMonth);\n body.on(CalendarEvents.updated + namespace, root, reloadMonth);\n body.on(CalendarEvents.eventMoved + namespace, root, reloadMonth);\n };\n\n /**\n * Reload the month view in this month.\n *\n * @param {EventFacade} e\n */\n var reloadMonth = function(e) {\n var root = e.data;\n var body = $('body');\n var namespace = '.' + root.attr('id');\n\n if (root.is(':visible')) {\n CalendarViewManager.reloadCurrentMonth(root);\n } else {\n // The root has been removed.\n // Remove all events in the namespace.\n body.off(CalendarEvents.created + namespace);\n body.off(CalendarEvents.deleted + namespace);\n body.off(CalendarEvents.updated + namespace);\n body.off(CalendarEvents.eventMoved + namespace);\n }\n };\n\n var registerEventListeners = function(root) {\n $('body').on(CalendarEvents.filterChanged, function(e, data) {\n var daysWithEvent = root.find(CalendarSelectors.eventType[data.type]);\n\n daysWithEvent.toggleClass('calendar_event_' + data.type, !data.hidden);\n });\n\n var namespace = '.' + root.attr('id');\n $('body').on('change' + namespace, CalendarSelectors.elements.courseSelector, function() {\n if (root.is(':visible')) {\n var selectElement = $(this);\n var courseId = selectElement.val();\n var categoryId = null;\n\n CalendarViewManager.reloadCurrentMonth(root, courseId, categoryId);\n } else {\n $('body').off('change' + namespace);\n }\n });\n\n };\n\n return {\n init: function(root, loadOnInit) {\n root = $(root);\n\n CalendarViewManager.init(root);\n registerEventListeners(root);\n registerCalendarEventListeners(root);\n\n if (loadOnInit) {\n // The calendar hasn't yet loaded it's events so we\n // should load them as soon as we've initialised.\n CalendarViewManager.reloadCurrentMonth(root);\n }\n\n }\n };\n});\n"],"file":"calendar_mini.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/calendar_mini.js"],"names":["define","$","CalendarSelectors","CalendarEvents","CalendarViewManager","registerCalendarEventListeners","root","body","namespace","attr","on","created","reloadMonth","deleted","updated","eventMoved","e","data","is","reloadCurrentMonth","off","registerEventListeners","filterChanged","daysWithEvent","find","eventType","type","toggleClass","hidden","elements","courseSelector","selectElement","courseId","val","init","loadOnInit"],"mappings":"AA0BAA,OAAM,+BAAC,CACH,QADG,CAEH,yBAFG,CAGH,sBAHG,CAIH,4BAJG,CAAD,CAMN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKE,IAQMC,CAAAA,CAA8B,CAAG,SAASC,CAAT,CAAe,IAC5CC,CAAAA,CAAI,CAAGN,CAAC,CAAC,MAAD,CADoC,CAE5CO,CAAS,CAAG,IAAMF,CAAI,CAACG,IAAL,CAAU,IAAV,CAF0B,CAIhDF,CAAI,CAACG,EAAL,CAAQP,CAAc,CAACQ,OAAf,CAAyBH,CAAjC,CAA4CF,CAA5C,CAAkDM,CAAlD,EACAL,CAAI,CAACG,EAAL,CAAQP,CAAc,CAACU,OAAf,CAAyBL,CAAjC,CAA4CF,CAA5C,CAAkDM,CAAlD,EACAL,CAAI,CAACG,EAAL,CAAQP,CAAc,CAACW,OAAf,CAAyBN,CAAjC,CAA4CF,CAA5C,CAAkDM,CAAlD,EACAL,CAAI,CAACG,EAAL,CAAQP,CAAc,CAACY,UAAf,CAA4BP,CAApC,CAA+CF,CAA/C,CAAqDM,CAArD,CACH,CAhBH,CAuBMA,CAAW,CAAG,SAASI,CAAT,CAAY,IACtBV,CAAAA,CAAI,CAAGU,CAAC,CAACC,IADa,CAEtBV,CAAI,CAAGN,CAAC,CAAC,MAAD,CAFc,CAGtBO,CAAS,CAAG,IAAMF,CAAI,CAACG,IAAL,CAAU,IAAV,CAHI,CAK1B,GAAIH,CAAI,CAACY,EAAL,CAAQ,UAAR,CAAJ,CAAyB,CACrBd,CAAmB,CAACe,kBAApB,CAAuCb,CAAvC,CACH,CAFD,IAEO,CAGHC,CAAI,CAACa,GAAL,CAASjB,CAAc,CAACQ,OAAf,CAAyBH,CAAlC,EACAD,CAAI,CAACa,GAAL,CAASjB,CAAc,CAACU,OAAf,CAAyBL,CAAlC,EACAD,CAAI,CAACa,GAAL,CAASjB,CAAc,CAACW,OAAf,CAAyBN,CAAlC,EACAD,CAAI,CAACa,GAAL,CAASjB,CAAc,CAACY,UAAf,CAA4BP,CAArC,CACH,CACJ,CAtCH,CAwCMa,CAAsB,CAAG,SAASf,CAAT,CAAe,CACxCL,CAAC,CAAC,MAAD,CAAD,CAAUS,EAAV,CAAaP,CAAc,CAACmB,aAA5B,CAA2C,SAASN,CAAT,CAAYC,CAAZ,CAAkB,CACzD,GAAIM,CAAAA,CAAa,CAAGjB,CAAI,CAACkB,IAAL,CAAUtB,CAAiB,CAACuB,SAAlB,CAA4BR,CAAI,CAACS,IAAjC,CAAV,CAApB,CAEAH,CAAa,CAACI,WAAd,CAA0B,kBAAoBV,CAAI,CAACS,IAAnD,CAAyD,CAACT,CAAI,CAACW,MAA/D,CACH,CAJD,EAMA,GAAIpB,CAAAA,CAAS,CAAG,IAAMF,CAAI,CAACG,IAAL,CAAU,IAAV,CAAtB,CACAR,CAAC,CAAC,MAAD,CAAD,CAAUS,EAAV,CAAa,SAAWF,CAAxB,CAAmCN,CAAiB,CAAC2B,QAAlB,CAA2BC,cAA9D,CAA8E,UAAW,CACrF,GAAIxB,CAAI,CAACY,EAAL,CAAQ,UAAR,CAAJ,CAAyB,IACjBa,CAAAA,CAAa,CAAG9B,CAAC,CAAC,IAAD,CADA,CAEjB+B,CAAQ,CAAGD,CAAa,CAACE,GAAd,EAFM,CAKrB7B,CAAmB,CAACe,kBAApB,CAAuCb,CAAvC,CAA6C0B,CAA7C,CAFiB,IAEjB,CACH,CAND,IAMO,CACH/B,CAAC,CAAC,MAAD,CAAD,CAAUmB,GAAV,CAAc,SAAWZ,CAAzB,CACH,CACJ,CAVD,CAYH,CA5DH,CA8DE,MAAO,CACH0B,IAAI,CAAE,cAAS5B,CAAT,CAAe6B,CAAf,CAA2B,CAC7B7B,CAAI,CAAGL,CAAC,CAACK,CAAD,CAAR,CAEAF,CAAmB,CAAC8B,IAApB,CAAyB5B,CAAzB,EACAe,CAAsB,CAACf,CAAD,CAAtB,CACAD,CAA8B,CAACC,CAAD,CAA9B,CAEA,GAAI6B,CAAJ,CAAgB,CAGZ/B,CAAmB,CAACe,kBAApB,CAAuCb,CAAvC,CACH,CAEJ,CAdE,CAgBV,CAzFK,CAAN","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 .\n\n/**\n * This module is the highest level module for the calendar. It is\n * responsible for initialising all of the components required for\n * the calendar to run. It also coordinates the interaction between\n * components by listening for and responding to different events\n * triggered within the calendar UI.\n *\n * @module core_calendar/calendar_mini\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n],\nfunction(\n $,\n CalendarSelectors,\n CalendarEvents,\n CalendarViewManager\n) {\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n */\n var registerCalendarEventListeners = function(root) {\n var body = $('body');\n var namespace = '.' + root.attr('id');\n\n body.on(CalendarEvents.created + namespace, root, reloadMonth);\n body.on(CalendarEvents.deleted + namespace, root, reloadMonth);\n body.on(CalendarEvents.updated + namespace, root, reloadMonth);\n body.on(CalendarEvents.eventMoved + namespace, root, reloadMonth);\n };\n\n /**\n * Reload the month view in this month.\n *\n * @param {EventFacade} e\n */\n var reloadMonth = function(e) {\n var root = e.data;\n var body = $('body');\n var namespace = '.' + root.attr('id');\n\n if (root.is(':visible')) {\n CalendarViewManager.reloadCurrentMonth(root);\n } else {\n // The root has been removed.\n // Remove all events in the namespace.\n body.off(CalendarEvents.created + namespace);\n body.off(CalendarEvents.deleted + namespace);\n body.off(CalendarEvents.updated + namespace);\n body.off(CalendarEvents.eventMoved + namespace);\n }\n };\n\n var registerEventListeners = function(root) {\n $('body').on(CalendarEvents.filterChanged, function(e, data) {\n var daysWithEvent = root.find(CalendarSelectors.eventType[data.type]);\n\n daysWithEvent.toggleClass('calendar_event_' + data.type, !data.hidden);\n });\n\n var namespace = '.' + root.attr('id');\n $('body').on('change' + namespace, CalendarSelectors.elements.courseSelector, function() {\n if (root.is(':visible')) {\n var selectElement = $(this);\n var courseId = selectElement.val();\n var categoryId = null;\n\n CalendarViewManager.reloadCurrentMonth(root, courseId, categoryId);\n } else {\n $('body').off('change' + namespace);\n }\n });\n\n };\n\n return {\n init: function(root, loadOnInit) {\n root = $(root);\n\n CalendarViewManager.init(root);\n registerEventListeners(root);\n registerCalendarEventListeners(root);\n\n if (loadOnInit) {\n // The calendar hasn't yet loaded it's events so we\n // should load them as soon as we've initialised.\n CalendarViewManager.reloadCurrentMonth(root);\n }\n\n }\n };\n});\n"],"file":"calendar_mini.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/calendar_threemonth.min.js.map b/calendar/amd/build/calendar_threemonth.min.js.map index 04406fee766..eb186bdbfac 100644 --- a/calendar/amd/build/calendar_threemonth.min.js.map +++ b/calendar/amd/build/calendar_threemonth.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/calendar_threemonth.js"],"names":["define","$","Notification","CalendarSelectors","CalendarEvents","Templates","CalendarViewManager","registerCalendarEventListeners","root","body","on","monthChanged","dayChanged","join","e","year","month","courseId","categoryId","queue","next","processRequest","then","fail","exception","newCurrentMonth","find","newParent","closest","calendarPeriods","allMonths","previousMonth","nextMonth","placeHolder","attr","placeHolderContainer","hide","append","requestYear","requestMonth","oldMonth","is","insertBefore","data","insertAfter","Deferred","resolve","refreshMonthContent","slideUpPromise","slideDownPromise","slideUp","remove","slideDown","when","links","miniDayLink","target","day","text","calendarRoot","calendarMain","refreshDayContent","preventDefault","window","history","pushState","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 .\n\n/**\n * This module handles display of multiple mini calendars in a view, and\n * movement through them.\n *\n * @module core_calendar/calendar_threemonth\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/notification',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core/templates',\n 'core_calendar/view_manager',\n],\nfunction(\n $,\n Notification,\n CalendarSelectors,\n CalendarEvents,\n Templates,\n CalendarViewManager\n) {\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n */\n var registerCalendarEventListeners = function(root) {\n var body = $('body');\n body.on([CalendarEvents.monthChanged, CalendarEvents.dayChanged].join(' '), function(e, year, month, courseId, categoryId) {\n // We have to use a queue here because the calling code is decoupled from these listeners.\n // It's possible for the event to be called multiple times before one call is fully resolved.\n root.queue(function(next) {\n return processRequest(e, year, month, courseId, categoryId)\n .then(function() {\n return next();\n })\n .fail(Notification.exception)\n ;\n });\n });\n\n var processRequest = function(e, year, month, courseId, categoryId) {\n var newCurrentMonth = root.find('[data-year=\"' + year + '\"][data-month=\"' + month + '\"]');\n var newParent = newCurrentMonth.closest(CalendarSelectors.calendarPeriods.month);\n var allMonths = root.find(CalendarSelectors.calendarPeriods.month);\n\n var previousMonth = $(allMonths[0]);\n var nextMonth = $(allMonths[2]);\n\n var placeHolder = $('');\n placeHolder.attr('data-template', 'core_calendar/threemonth_month');\n placeHolder.attr('data-includenavigation', false);\n placeHolder.attr('data-mini', true);\n var placeHolderContainer = $('
      ');\n placeHolderContainer.hide();\n placeHolderContainer.append(placeHolder);\n\n var requestYear;\n var requestMonth;\n var oldMonth;\n\n if (newParent.is(previousMonth)) {\n // Fetch the new previous month.\n placeHolderContainer.insertBefore(previousMonth);\n\n requestYear = previousMonth.data('previousYear');\n requestMonth = previousMonth.data('previousMonth');\n oldMonth = nextMonth;\n } else if (newParent.is(nextMonth)) {\n // Fetch the new next month.\n placeHolderContainer.insertAfter(nextMonth);\n requestYear = nextMonth.data('nextYear');\n requestMonth = nextMonth.data('nextMonth');\n oldMonth = previousMonth;\n } else {\n return $.Deferred().resolve();\n }\n\n return CalendarViewManager.refreshMonthContent(\n placeHolder,\n requestYear,\n requestMonth,\n courseId,\n categoryId,\n placeHolder\n )\n .then(function() {\n var slideUpPromise = $.Deferred();\n var slideDownPromise = $.Deferred();\n oldMonth.slideUp('fast', function() {\n $(this).remove();\n slideUpPromise.resolve();\n });\n placeHolderContainer.slideDown('fast', function() {\n slideDownPromise.resolve();\n });\n\n return $.when(slideUpPromise, slideDownPromise);\n });\n };\n\n // Listen for a click on the day link in the three month block to load the day view.\n root.on('click', CalendarSelectors.links.miniDayLink, function(e) {\n\n var miniDayLink = $(e.target);\n var year = miniDayLink.data('year'),\n month = miniDayLink.data('month'),\n day = miniDayLink.text(),\n courseId = miniDayLink.data('courseid'),\n categoryId = miniDayLink.data('categoryid'),\n calendarRoot = $('body').find(CalendarSelectors.calendarMain);\n CalendarViewManager.refreshDayContent(calendarRoot, year, month, day, courseId, categoryId,\n calendarRoot, 'core_calendar/calendar_day');\n e.preventDefault();\n window.history.pushState({}, '', '?view=day');\n });\n };\n\n return {\n init: function(root) {\n root = $(root);\n\n registerCalendarEventListeners(root);\n }\n };\n});\n"],"file":"calendar_threemonth.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/calendar_threemonth.js"],"names":["define","$","Notification","CalendarSelectors","CalendarEvents","Templates","CalendarViewManager","registerCalendarEventListeners","root","body","on","monthChanged","dayChanged","join","e","year","month","courseId","categoryId","queue","next","processRequest","then","fail","exception","newCurrentMonth","find","newParent","closest","calendarPeriods","allMonths","previousMonth","nextMonth","placeHolder","attr","placeHolderContainer","hide","append","requestYear","requestMonth","oldMonth","is","insertBefore","data","insertAfter","Deferred","resolve","refreshMonthContent","slideUpPromise","slideDownPromise","slideUp","remove","slideDown","when","links","miniDayLink","target","day","text","calendarRoot","calendarMain","refreshDayContent","preventDefault","window","history","pushState","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 .\n\n/**\n * This module handles display of multiple mini calendars in a view, and\n * movement through them.\n *\n * @module core_calendar/calendar_threemonth\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/notification',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core/templates',\n 'core_calendar/view_manager',\n],\nfunction(\n $,\n Notification,\n CalendarSelectors,\n CalendarEvents,\n Templates,\n CalendarViewManager\n) {\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n */\n var registerCalendarEventListeners = function(root) {\n var body = $('body');\n body.on([CalendarEvents.monthChanged, CalendarEvents.dayChanged].join(' '), function(e, year, month, courseId, categoryId) {\n // We have to use a queue here because the calling code is decoupled from these listeners.\n // It's possible for the event to be called multiple times before one call is fully resolved.\n root.queue(function(next) {\n return processRequest(e, year, month, courseId, categoryId)\n .then(function() {\n return next();\n })\n .fail(Notification.exception)\n ;\n });\n });\n\n var processRequest = function(e, year, month, courseId, categoryId) {\n var newCurrentMonth = root.find('[data-year=\"' + year + '\"][data-month=\"' + month + '\"]');\n var newParent = newCurrentMonth.closest(CalendarSelectors.calendarPeriods.month);\n var allMonths = root.find(CalendarSelectors.calendarPeriods.month);\n\n var previousMonth = $(allMonths[0]);\n var nextMonth = $(allMonths[2]);\n\n var placeHolder = $('');\n placeHolder.attr('data-template', 'core_calendar/threemonth_month');\n placeHolder.attr('data-includenavigation', false);\n placeHolder.attr('data-mini', true);\n var placeHolderContainer = $('
      ');\n placeHolderContainer.hide();\n placeHolderContainer.append(placeHolder);\n\n var requestYear;\n var requestMonth;\n var oldMonth;\n\n if (newParent.is(previousMonth)) {\n // Fetch the new previous month.\n placeHolderContainer.insertBefore(previousMonth);\n\n requestYear = previousMonth.data('previousYear');\n requestMonth = previousMonth.data('previousMonth');\n oldMonth = nextMonth;\n } else if (newParent.is(nextMonth)) {\n // Fetch the new next month.\n placeHolderContainer.insertAfter(nextMonth);\n requestYear = nextMonth.data('nextYear');\n requestMonth = nextMonth.data('nextMonth');\n oldMonth = previousMonth;\n } else {\n return $.Deferred().resolve();\n }\n\n return CalendarViewManager.refreshMonthContent(\n placeHolder,\n requestYear,\n requestMonth,\n courseId,\n categoryId,\n placeHolder\n )\n .then(function() {\n var slideUpPromise = $.Deferred();\n var slideDownPromise = $.Deferred();\n oldMonth.slideUp('fast', function() {\n $(this).remove();\n slideUpPromise.resolve();\n });\n placeHolderContainer.slideDown('fast', function() {\n slideDownPromise.resolve();\n });\n\n return $.when(slideUpPromise, slideDownPromise);\n });\n };\n\n // Listen for a click on the day link in the three month block to load the day view.\n root.on('click', CalendarSelectors.links.miniDayLink, function(e) {\n\n var miniDayLink = $(e.target);\n var year = miniDayLink.data('year'),\n month = miniDayLink.data('month'),\n day = miniDayLink.text(),\n courseId = miniDayLink.data('courseid'),\n categoryId = miniDayLink.data('categoryid'),\n calendarRoot = $('body').find(CalendarSelectors.calendarMain);\n CalendarViewManager.refreshDayContent(calendarRoot, year, month, day, courseId, categoryId,\n calendarRoot, 'core_calendar/calendar_day');\n e.preventDefault();\n window.history.pushState({}, '', '?view=day');\n });\n };\n\n return {\n init: function(root) {\n root = $(root);\n\n registerCalendarEventListeners(root);\n }\n };\n});\n"],"file":"calendar_threemonth.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/calendar_view.min.js.map b/calendar/amd/build/calendar_view.min.js.map index 59a4e6efde2..be62156ed8a 100644 --- a/calendar/amd/build/calendar_view.min.js.map +++ b/calendar/amd/build/calendar_view.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/calendar_view.js"],"names":["define","$","Str","Notification","CalendarSelectors","CalendarEvents","CalendarViewManager","CalendarRepository","ModalFactory","ModalEventForm","ModalEvents","CalendarCrud","registerEventListeners","root","type","body","registerRemove","reloadFunction","charAt","toUpperCase","slice","on","created","deleted","updated","courseSelector","selectElement","courseId","val","then","find","window","history","pushState","fail","exception","filterChanged","e","data","daysWithEvent","eventType","hidden","addClass","removeClass","eventFormPromise","registerEventFormModal","registerEditListeners","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 .\n\n/**\n * This module is responsible for handle calendar day and upcoming view.\n *\n * @module core_calendar/calendar\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n 'core_calendar/repository',\n 'core/modal_factory',\n 'core_calendar/modal_event_form',\n 'core/modal_events',\n 'core_calendar/crud'\n ],\n function(\n $,\n Str,\n Notification,\n CalendarSelectors,\n CalendarEvents,\n CalendarViewManager,\n CalendarRepository,\n ModalFactory,\n ModalEventForm,\n ModalEvents,\n CalendarCrud\n ) {\n\n var registerEventListeners = function(root, type) {\n var body = $('body');\n\n CalendarCrud.registerRemove(root);\n\n var reloadFunction = 'reloadCurrent' + type.charAt(0).toUpperCase() + type.slice(1);\n\n body.on(CalendarEvents.created, function() {\n CalendarViewManager[reloadFunction](root);\n });\n body.on(CalendarEvents.deleted, function() {\n CalendarViewManager[reloadFunction](root);\n });\n body.on(CalendarEvents.updated, function() {\n CalendarViewManager[reloadFunction](root);\n });\n\n root.on('change', CalendarSelectors.courseSelector, function() {\n var selectElement = $(this);\n var courseId = selectElement.val();\n CalendarViewManager[reloadFunction](root, courseId, null)\n .then(function() {\n // We need to get the selector again because the content has changed.\n return root.find(CalendarSelectors.courseSelector).val(courseId);\n })\n .then(function() {\n window.history.pushState({}, '', '?view=upcoming&course=' + courseId);\n\n return;\n })\n .fail(Notification.exception);\n });\n\n body.on(CalendarEvents.filterChanged, function(e, data) {\n var daysWithEvent = root.find(CalendarSelectors.eventType[data.type]);\n if (data.hidden == true) {\n daysWithEvent.addClass('hidden');\n } else {\n daysWithEvent.removeClass('hidden');\n }\n });\n\n var eventFormPromise = CalendarCrud.registerEventFormModal(root);\n CalendarCrud.registerEditListeners(root, eventFormPromise);\n };\n\n return {\n init: function(root, type) {\n root = $(root);\n\n CalendarViewManager.init(root, type);\n registerEventListeners(root, type);\n }\n };\n });\n"],"file":"calendar_view.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/calendar_view.js"],"names":["define","$","Str","Notification","CalendarSelectors","CalendarEvents","CalendarViewManager","CalendarRepository","ModalFactory","ModalEventForm","ModalEvents","CalendarCrud","registerEventListeners","root","type","body","registerRemove","reloadFunction","charAt","toUpperCase","slice","on","created","deleted","updated","courseSelector","selectElement","courseId","val","then","find","window","history","pushState","fail","exception","filterChanged","e","data","daysWithEvent","eventType","hidden","addClass","removeClass","eventFormPromise","registerEventFormModal","registerEditListeners","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 .\n\n/**\n * This module is responsible for handle calendar day and upcoming view.\n *\n * @module core_calendar/calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core_calendar/selectors',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n 'core_calendar/repository',\n 'core/modal_factory',\n 'core_calendar/modal_event_form',\n 'core/modal_events',\n 'core_calendar/crud'\n ],\n function(\n $,\n Str,\n Notification,\n CalendarSelectors,\n CalendarEvents,\n CalendarViewManager,\n CalendarRepository,\n ModalFactory,\n ModalEventForm,\n ModalEvents,\n CalendarCrud\n ) {\n\n var registerEventListeners = function(root, type) {\n var body = $('body');\n\n CalendarCrud.registerRemove(root);\n\n var reloadFunction = 'reloadCurrent' + type.charAt(0).toUpperCase() + type.slice(1);\n\n body.on(CalendarEvents.created, function() {\n CalendarViewManager[reloadFunction](root);\n });\n body.on(CalendarEvents.deleted, function() {\n CalendarViewManager[reloadFunction](root);\n });\n body.on(CalendarEvents.updated, function() {\n CalendarViewManager[reloadFunction](root);\n });\n\n root.on('change', CalendarSelectors.courseSelector, function() {\n var selectElement = $(this);\n var courseId = selectElement.val();\n CalendarViewManager[reloadFunction](root, courseId, null)\n .then(function() {\n // We need to get the selector again because the content has changed.\n return root.find(CalendarSelectors.courseSelector).val(courseId);\n })\n .then(function() {\n window.history.pushState({}, '', '?view=upcoming&course=' + courseId);\n\n return;\n })\n .fail(Notification.exception);\n });\n\n body.on(CalendarEvents.filterChanged, function(e, data) {\n var daysWithEvent = root.find(CalendarSelectors.eventType[data.type]);\n if (data.hidden == true) {\n daysWithEvent.addClass('hidden');\n } else {\n daysWithEvent.removeClass('hidden');\n }\n });\n\n var eventFormPromise = CalendarCrud.registerEventFormModal(root);\n CalendarCrud.registerEditListeners(root, eventFormPromise);\n };\n\n return {\n init: function(root, type) {\n root = $(root);\n\n CalendarViewManager.init(root, type);\n registerEventListeners(root, type);\n }\n };\n });\n"],"file":"calendar_view.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/crud.min.js.map b/calendar/amd/build/crud.min.js.map index ff9457017cd..e9c3d90b0b8 100644 --- a/calendar/amd/build/crud.min.js.map +++ b/calendar/amd/build/crud.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/crud.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","ModalEventForm","CalendarRepository","CalendarEvents","ModalDelete","CalendarSelectors","Pending","confirmDeletion","eventId","eventTitle","eventCount","pendingPromise","deleteStrings","key","component","parseInt","deletePromise","isRepeatedEvent","push","param","name","count","create","type","TYPE","types","SAVE_CANCEL","stringsPromise","get_strings","finalPromise","when","then","strings","deleteModal","setRemoveOnClose","setTitle","setBody","setSaveButtonText","show","getRoot","on","save","deleteEvent","trigger","deleted","resolve","catch","exception","deleteAll","modal","registerRemove","root","actions","remove","e","eventSource","closest","eventItem","data","preventDefault","registerEditListeners","eventFormModalPromise","editEvent","calendarWrapper","find","wrapper","setEventId","setContextId","stopImmediatePropagation","registerEventFormModal","eventFormPromise","large","categoryId","setCategoryId","today","firstDay","day","length","setStartTime","setCourseId","fail","edit","target","currentTarget","eventWrapper"],"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 .\n\n/**\n * A module to handle CRUD operations within the UI.\n *\n * @module core_calendar/crud\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/modal_event_form',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/modal_delete',\n 'core_calendar/selectors',\n 'core/pending',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n ModalEventForm,\n CalendarRepository,\n CalendarEvents,\n ModalDelete,\n CalendarSelectors,\n Pending\n) {\n\n /**\n * Prepares the action for the summary modal's delete action.\n *\n * @param {Number} eventId The ID of the event.\n * @param {string} eventTitle The event title.\n * @param {Number} eventCount The number of events in the series.\n * @return {Promise}\n */\n function confirmDeletion(eventId, eventTitle, eventCount) {\n var pendingPromise = new Pending('core_calendar/crud:confirmDeletion');\n var deleteStrings = [\n {\n key: 'deleteevent',\n component: 'calendar'\n },\n ];\n\n eventCount = parseInt(eventCount, 10);\n var deletePromise;\n var isRepeatedEvent = eventCount > 1;\n if (isRepeatedEvent) {\n deleteStrings.push({\n key: 'confirmeventseriesdelete',\n component: 'calendar',\n param: {\n name: eventTitle,\n count: eventCount,\n },\n });\n\n deletePromise = ModalFactory.create(\n {\n type: ModalDelete.TYPE\n }\n );\n } else {\n deleteStrings.push({\n key: 'confirmeventdelete',\n component: 'calendar',\n param: eventTitle\n });\n\n\n deletePromise = ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n });\n }\n\n var stringsPromise = Str.get_strings(deleteStrings);\n\n var finalPromise = $.when(stringsPromise, deletePromise)\n .then(function(strings, deleteModal) {\n deleteModal.setRemoveOnClose(true);\n deleteModal.setTitle(strings[0]);\n deleteModal.setBody(strings[1]);\n if (!isRepeatedEvent) {\n deleteModal.setSaveButtonText(strings[0]);\n }\n\n deleteModal.show();\n\n deleteModal.getRoot().on(ModalEvents.save, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedevent');\n CalendarRepository.deleteEvent(eventId, false)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, false]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n deleteModal.getRoot().on(CalendarEvents.deleteAll, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedallevent');\n CalendarRepository.deleteEvent(eventId, true)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, true]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n return deleteModal;\n })\n .then(function(modal) {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n\n return finalPromise;\n }\n\n /**\n * Create the event form modal for creating new events and\n * editing existing events.\n *\n * @method registerEventFormModal\n * @param {object} root The calendar root element\n * @return {object} The create modal promise\n */\n var registerEventFormModal = function(root) {\n var eventFormPromise = ModalFactory.create({\n type: ModalEventForm.TYPE,\n large: true\n });\n\n // Bind click event on the new event button.\n root.on('click', CalendarSelectors.actions.create, function(e) {\n eventFormPromise.then(function(modal) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n // Attempt to find the cell for today.\n // If it can't be found, then use the start time of the first day on the calendar.\n var today = root.find(CalendarSelectors.today);\n var firstDay = root.find(CalendarSelectors.day);\n if (!today.length && firstDay.length) {\n modal.setStartTime(firstDay.data('newEventTimestamp'));\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setCourseId(wrapper.data('courseid'));\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n });\n\n root.on('click', CalendarSelectors.actions.edit, function(e) {\n e.preventDefault();\n var target = $(e.currentTarget),\n calendarWrapper = target.closest(CalendarSelectors.wrapper),\n eventWrapper = target.closest(CalendarSelectors.eventItem);\n\n eventFormPromise.then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n modal.setEventId(eventWrapper.data('eventId'));\n\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n return;\n }).fail(Notification.exception);\n });\n\n\n return eventFormPromise;\n };\n /**\n * Register the listeners required to remove the event.\n *\n * @param {jQuery} root\n */\n function registerRemove(root) {\n root.on('click', CalendarSelectors.actions.remove, function(e) {\n // Fetch the event title, count, and pass them into the new dialogue.\n var eventSource = $(this).closest(CalendarSelectors.eventItem);\n var eventId = eventSource.data('eventId'),\n eventTitle = eventSource.data('eventTitle'),\n eventCount = eventSource.data('eventCount');\n confirmDeletion(eventId, eventTitle, eventCount);\n\n e.preventDefault();\n });\n }\n\n /**\n * Register the listeners required to edit the event.\n *\n * @param {jQuery} root\n * @param {Promise} eventFormModalPromise\n * @returns {Promise}\n */\n function registerEditListeners(root, eventFormModalPromise) {\n var pendingPromise = new Pending('core_calendar/crud:registerEditListeners');\n\n return eventFormModalPromise\n .then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n $('body').on(CalendarEvents.editEvent, function(e, eventId) {\n var calendarWrapper = root.find(CalendarSelectors.wrapper);\n modal.setEventId(eventId);\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n });\n return modal;\n })\n .then(function(modal) {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n }\n\n return {\n registerRemove: registerRemove,\n registerEditListeners: registerEditListeners,\n registerEventFormModal: registerEventFormModal\n };\n});\n"],"file":"crud.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/crud.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","ModalEventForm","CalendarRepository","CalendarEvents","ModalDelete","CalendarSelectors","Pending","confirmDeletion","eventId","eventTitle","eventCount","pendingPromise","deleteStrings","key","component","parseInt","deletePromise","isRepeatedEvent","push","param","name","count","create","type","TYPE","types","SAVE_CANCEL","stringsPromise","get_strings","finalPromise","when","then","strings","deleteModal","setRemoveOnClose","setTitle","setBody","setSaveButtonText","show","getRoot","on","save","deleteEvent","trigger","deleted","resolve","catch","exception","deleteAll","modal","registerRemove","root","actions","remove","e","eventSource","closest","eventItem","data","preventDefault","registerEditListeners","eventFormModalPromise","editEvent","calendarWrapper","find","wrapper","setEventId","setContextId","stopImmediatePropagation","registerEventFormModal","eventFormPromise","large","categoryId","setCategoryId","today","firstDay","day","length","setStartTime","setCourseId","fail","edit","target","currentTarget","eventWrapper"],"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 .\n\n/**\n * A module to handle CRUD operations within the UI.\n *\n * @module core_calendar/crud\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/modal_event_form',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/modal_delete',\n 'core_calendar/selectors',\n 'core/pending',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n ModalEventForm,\n CalendarRepository,\n CalendarEvents,\n ModalDelete,\n CalendarSelectors,\n Pending\n) {\n\n /**\n * Prepares the action for the summary modal's delete action.\n *\n * @param {Number} eventId The ID of the event.\n * @param {string} eventTitle The event title.\n * @param {Number} eventCount The number of events in the series.\n * @return {Promise}\n */\n function confirmDeletion(eventId, eventTitle, eventCount) {\n var pendingPromise = new Pending('core_calendar/crud:confirmDeletion');\n var deleteStrings = [\n {\n key: 'deleteevent',\n component: 'calendar'\n },\n ];\n\n eventCount = parseInt(eventCount, 10);\n var deletePromise;\n var isRepeatedEvent = eventCount > 1;\n if (isRepeatedEvent) {\n deleteStrings.push({\n key: 'confirmeventseriesdelete',\n component: 'calendar',\n param: {\n name: eventTitle,\n count: eventCount,\n },\n });\n\n deletePromise = ModalFactory.create(\n {\n type: ModalDelete.TYPE\n }\n );\n } else {\n deleteStrings.push({\n key: 'confirmeventdelete',\n component: 'calendar',\n param: eventTitle\n });\n\n\n deletePromise = ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n });\n }\n\n var stringsPromise = Str.get_strings(deleteStrings);\n\n var finalPromise = $.when(stringsPromise, deletePromise)\n .then(function(strings, deleteModal) {\n deleteModal.setRemoveOnClose(true);\n deleteModal.setTitle(strings[0]);\n deleteModal.setBody(strings[1]);\n if (!isRepeatedEvent) {\n deleteModal.setSaveButtonText(strings[0]);\n }\n\n deleteModal.show();\n\n deleteModal.getRoot().on(ModalEvents.save, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedevent');\n CalendarRepository.deleteEvent(eventId, false)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, false]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n deleteModal.getRoot().on(CalendarEvents.deleteAll, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedallevent');\n CalendarRepository.deleteEvent(eventId, true)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, true]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n return deleteModal;\n })\n .then(function(modal) {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n\n return finalPromise;\n }\n\n /**\n * Create the event form modal for creating new events and\n * editing existing events.\n *\n * @method registerEventFormModal\n * @param {object} root The calendar root element\n * @return {object} The create modal promise\n */\n var registerEventFormModal = function(root) {\n var eventFormPromise = ModalFactory.create({\n type: ModalEventForm.TYPE,\n large: true\n });\n\n // Bind click event on the new event button.\n root.on('click', CalendarSelectors.actions.create, function(e) {\n eventFormPromise.then(function(modal) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n // Attempt to find the cell for today.\n // If it can't be found, then use the start time of the first day on the calendar.\n var today = root.find(CalendarSelectors.today);\n var firstDay = root.find(CalendarSelectors.day);\n if (!today.length && firstDay.length) {\n modal.setStartTime(firstDay.data('newEventTimestamp'));\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setCourseId(wrapper.data('courseid'));\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n });\n\n root.on('click', CalendarSelectors.actions.edit, function(e) {\n e.preventDefault();\n var target = $(e.currentTarget),\n calendarWrapper = target.closest(CalendarSelectors.wrapper),\n eventWrapper = target.closest(CalendarSelectors.eventItem);\n\n eventFormPromise.then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n modal.setEventId(eventWrapper.data('eventId'));\n\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n return;\n }).fail(Notification.exception);\n });\n\n\n return eventFormPromise;\n };\n /**\n * Register the listeners required to remove the event.\n *\n * @param {jQuery} root\n */\n function registerRemove(root) {\n root.on('click', CalendarSelectors.actions.remove, function(e) {\n // Fetch the event title, count, and pass them into the new dialogue.\n var eventSource = $(this).closest(CalendarSelectors.eventItem);\n var eventId = eventSource.data('eventId'),\n eventTitle = eventSource.data('eventTitle'),\n eventCount = eventSource.data('eventCount');\n confirmDeletion(eventId, eventTitle, eventCount);\n\n e.preventDefault();\n });\n }\n\n /**\n * Register the listeners required to edit the event.\n *\n * @param {jQuery} root\n * @param {Promise} eventFormModalPromise\n * @returns {Promise}\n */\n function registerEditListeners(root, eventFormModalPromise) {\n var pendingPromise = new Pending('core_calendar/crud:registerEditListeners');\n\n return eventFormModalPromise\n .then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n $('body').on(CalendarEvents.editEvent, function(e, eventId) {\n var calendarWrapper = root.find(CalendarSelectors.wrapper);\n modal.setEventId(eventId);\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n });\n return modal;\n })\n .then(function(modal) {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n }\n\n return {\n registerRemove: registerRemove,\n registerEditListeners: registerEditListeners,\n registerEventFormModal: registerEventFormModal\n };\n});\n"],"file":"crud.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/drag_drop_data_store.min.js.map b/calendar/amd/build/drag_drop_data_store.min.js.map index 82ff858c249..9a339242cbb 100644 --- a/calendar/amd/build/drag_drop_data_store.min.js.map +++ b/calendar/amd/build/drag_drop_data_store.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/drag_drop_data_store.js"],"names":["define","eventId","durationDays","minTimestart","maxTimestart","minError","maxError","setEventId","id","getEventId","hasEventId","setDurationDays","days","getDurationDays","setMinTimestart","timestamp","getMinTimestart","hasMinTimestart","setMaxTimestart","getMaxTimestart","hasMaxTimestart","setMinError","message","getMinError","setMaxError","getMaxError","clearAll"],"mappings":"AA2BAA,OAAM,sCAAC,EAAD,CAAK,UAAW,IAEdC,CAAAA,CAAO,CAAG,IAFI,CAIdC,CAAY,CAAG,IAJD,CAMdC,CAAY,CAAG,IAND,CAQdC,CAAY,CAAG,IARD,CAUdC,CAAQ,CAAG,IAVG,CAYdC,CAAQ,CAAG,IAZG,CAmBdC,CAAU,CAAG,SAASC,CAAT,CAAa,CAC1BP,CAAO,CAAGO,CACb,CArBiB,CA4BdC,CAAU,CAAG,UAAW,CACxB,MAAOR,CAAAA,CACV,CA9BiB,CAqCdS,CAAU,CAAG,UAAW,CACxB,MAAmB,KAAZ,GAAAT,CACV,CAvCiB,CA8CdU,CAAe,CAAG,SAASC,CAAT,CAAe,CACjCV,CAAY,CAAGU,CAClB,CAhDiB,CAuDdC,CAAe,CAAG,UAAW,CAC7B,MAAOX,CAAAA,CACV,CAzDiB,CAgEdY,CAAe,CAAG,SAASC,CAAT,CAAoB,CACtCZ,CAAY,CAAGY,CAClB,CAlEiB,CAyEdC,CAAe,CAAG,UAAW,CAC7B,MAAOb,CAAAA,CACV,CA3EiB,CAkFdc,CAAe,CAAG,UAAW,CAC7B,MAAwB,KAAjB,GAAAd,CACV,CApFiB,CA2Fde,CAAe,CAAG,SAASH,CAAT,CAAoB,CACtCX,CAAY,CAAGW,CAClB,CA7FiB,CAoGdI,CAAe,CAAG,UAAW,CAC7B,MAAOf,CAAAA,CACV,CAtGiB,CA6GdgB,CAAe,CAAG,UAAW,CAC7B,MAAwB,KAAjB,GAAAhB,CACV,CA/GiB,CAuHdiB,CAAW,CAAG,SAASC,CAAT,CAAkB,CAChCjB,CAAQ,CAAGiB,CACd,CAzHiB,CAgIdC,CAAW,CAAG,UAAW,CACzB,MAAOlB,CAAAA,CACV,CAlIiB,CA0IdmB,CAAW,CAAG,SAASF,CAAT,CAAkB,CAChChB,CAAQ,CAAGgB,CACd,CA5IiB,CAmJdG,CAAW,CAAG,UAAW,CACzB,MAAOnB,CAAAA,CACV,CArJiB,CAmKlB,MAAO,CACHC,UAAU,CAAEA,CADT,CAEHE,UAAU,CAAEA,CAFT,CAGHC,UAAU,CAAEA,CAHT,CAIHC,eAAe,CAAEA,CAJd,CAKHE,eAAe,CAAEA,CALd,CAMHC,eAAe,CAAEA,CANd,CAOHE,eAAe,CAAEA,CAPd,CAQHC,eAAe,CAAEA,CARd,CASHC,eAAe,CAAEA,CATd,CAUHC,eAAe,CAAEA,CAVd,CAWHC,eAAe,CAAEA,CAXd,CAYHC,WAAW,CAAEA,CAZV,CAaHE,WAAW,CAAEA,CAbV,CAcHC,WAAW,CAAEA,CAdV,CAeHC,WAAW,CAAEA,CAfV,CAgBHC,QAAQ,CAzBG,QAAXA,CAAAA,QAAW,EAAW,CACtBnB,CAAU,CAAC,IAAD,CAAV,CACAI,CAAe,CAAC,IAAD,CAAf,CACAG,CAAe,CAAC,IAAD,CAAf,CACAI,CAAe,CAAC,IAAD,CAAf,CACAG,CAAW,CAAC,IAAD,CAAX,CACAG,CAAW,CAAC,IAAD,CACd,CAEM,CAkBV,CArLK,CAAN","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 .\n\n/**\n * A javascript module to store calendar drag and drop data.\n *\n * This module is unfortunately required because of the limitations\n * of the HTML5 drag and drop API and it's ability to provide data\n * between the different stages of the drag/drop lifecycle.\n *\n * @module core_calendar/drag_drop_data_store\n * @package core_calendar\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n /* @var {int|null} eventId The id of the event being dragged */\n var eventId = null;\n /* @var {int|null} durationDays How many days the event spans */\n var durationDays = null;\n /* @var {int|null} minTimestart The earliest valid timestart */\n var minTimestart = null;\n /* @var {int|null} maxTimestart The latest valid tiemstart */\n var maxTimestart = null;\n /* @var {string|null} minError Error message for min timestamp violation */\n var minError = null;\n /* @var {string|null} maxError Error message for max timestamp violation */\n var maxError = null;\n\n /**\n * Store the id of the event being dragged.\n *\n * @param {int} id The event id\n */\n var setEventId = function(id) {\n eventId = id;\n };\n\n /**\n * Get the stored event id.\n *\n * @return {int|null}\n */\n var getEventId = function() {\n return eventId;\n };\n\n /**\n * Check if the store has an event id.\n *\n * @return {bool}\n */\n var hasEventId = function() {\n return eventId !== null;\n };\n\n /**\n * Store the duration (in days) of the event being dragged.\n *\n * @param {int} days Number of days the event spans\n */\n var setDurationDays = function(days) {\n durationDays = days;\n };\n\n /**\n * Get the stored number of days.\n *\n * @return {int|null}\n */\n var getDurationDays = function() {\n return durationDays;\n };\n\n /**\n * Store the minimum timestart valid for an event being dragged.\n *\n * @param {int} timestamp The unix timstamp\n */\n var setMinTimestart = function(timestamp) {\n minTimestart = timestamp;\n };\n\n /**\n * Get the minimum valid timestart.\n *\n * @return {int|null}\n */\n var getMinTimestart = function() {\n return minTimestart;\n };\n\n /**\n * Check if a minimum timestamp is set.\n *\n * @return {bool}\n */\n var hasMinTimestart = function() {\n return minTimestart !== null;\n };\n\n /**\n * Store the maximum timestart valid for an event being dragged.\n *\n * @param {int} timestamp The unix timstamp\n */\n var setMaxTimestart = function(timestamp) {\n maxTimestart = timestamp;\n };\n\n /**\n * Get the maximum valid timestart.\n *\n * @return {int|null}\n */\n var getMaxTimestart = function() {\n return maxTimestart;\n };\n\n /**\n * Check if a maximum timestamp is set.\n *\n * @return {bool}\n */\n var hasMaxTimestart = function() {\n return maxTimestart !== null;\n };\n\n /**\n * Store the error string to display if trying to drag an event\n * earlier than the minimum allowed date.\n *\n * @param {string} message The error message\n */\n var setMinError = function(message) {\n minError = message;\n };\n\n /**\n * Get the error message for a minimum time start violation.\n *\n * @return {string|null}\n */\n var getMinError = function() {\n return minError;\n };\n\n /**\n * Store the error string to display if trying to drag an event\n * later than the maximum allowed date.\n *\n * @param {string} message The error message\n */\n var setMaxError = function(message) {\n maxError = message;\n };\n\n /**\n * Get the error message for a maximum time start violation.\n *\n * @return {string|null}\n */\n var getMaxError = function() {\n return maxError;\n };\n\n /**\n * Reset all of the stored values.\n */\n var clearAll = function() {\n setEventId(null);\n setDurationDays(null);\n setMinTimestart(null);\n setMaxTimestart(null);\n setMinError(null);\n setMaxError(null);\n };\n\n return {\n setEventId: setEventId,\n getEventId: getEventId,\n hasEventId: hasEventId,\n setDurationDays: setDurationDays,\n getDurationDays: getDurationDays,\n setMinTimestart: setMinTimestart,\n getMinTimestart: getMinTimestart,\n hasMinTimestart: hasMinTimestart,\n setMaxTimestart: setMaxTimestart,\n getMaxTimestart: getMaxTimestart,\n hasMaxTimestart: hasMaxTimestart,\n setMinError: setMinError,\n getMinError: getMinError,\n setMaxError: setMaxError,\n getMaxError: getMaxError,\n clearAll: clearAll\n };\n});\n"],"file":"drag_drop_data_store.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/drag_drop_data_store.js"],"names":["define","eventId","durationDays","minTimestart","maxTimestart","minError","maxError","setEventId","id","getEventId","hasEventId","setDurationDays","days","getDurationDays","setMinTimestart","timestamp","getMinTimestart","hasMinTimestart","setMaxTimestart","getMaxTimestart","hasMaxTimestart","setMinError","message","getMinError","setMaxError","getMaxError","clearAll"],"mappings":"AA0BAA,OAAM,sCAAC,EAAD,CAAK,UAAW,IAEdC,CAAAA,CAAO,CAAG,IAFI,CAIdC,CAAY,CAAG,IAJD,CAMdC,CAAY,CAAG,IAND,CAQdC,CAAY,CAAG,IARD,CAUdC,CAAQ,CAAG,IAVG,CAYdC,CAAQ,CAAG,IAZG,CAmBdC,CAAU,CAAG,SAASC,CAAT,CAAa,CAC1BP,CAAO,CAAGO,CACb,CArBiB,CA4BdC,CAAU,CAAG,UAAW,CACxB,MAAOR,CAAAA,CACV,CA9BiB,CAqCdS,CAAU,CAAG,UAAW,CACxB,MAAmB,KAAZ,GAAAT,CACV,CAvCiB,CA8CdU,CAAe,CAAG,SAASC,CAAT,CAAe,CACjCV,CAAY,CAAGU,CAClB,CAhDiB,CAuDdC,CAAe,CAAG,UAAW,CAC7B,MAAOX,CAAAA,CACV,CAzDiB,CAgEdY,CAAe,CAAG,SAASC,CAAT,CAAoB,CACtCZ,CAAY,CAAGY,CAClB,CAlEiB,CAyEdC,CAAe,CAAG,UAAW,CAC7B,MAAOb,CAAAA,CACV,CA3EiB,CAkFdc,CAAe,CAAG,UAAW,CAC7B,MAAwB,KAAjB,GAAAd,CACV,CApFiB,CA2Fde,CAAe,CAAG,SAASH,CAAT,CAAoB,CACtCX,CAAY,CAAGW,CAClB,CA7FiB,CAoGdI,CAAe,CAAG,UAAW,CAC7B,MAAOf,CAAAA,CACV,CAtGiB,CA6GdgB,CAAe,CAAG,UAAW,CAC7B,MAAwB,KAAjB,GAAAhB,CACV,CA/GiB,CAuHdiB,CAAW,CAAG,SAASC,CAAT,CAAkB,CAChCjB,CAAQ,CAAGiB,CACd,CAzHiB,CAgIdC,CAAW,CAAG,UAAW,CACzB,MAAOlB,CAAAA,CACV,CAlIiB,CA0IdmB,CAAW,CAAG,SAASF,CAAT,CAAkB,CAChChB,CAAQ,CAAGgB,CACd,CA5IiB,CAmJdG,CAAW,CAAG,UAAW,CACzB,MAAOnB,CAAAA,CACV,CArJiB,CAmKlB,MAAO,CACHC,UAAU,CAAEA,CADT,CAEHE,UAAU,CAAEA,CAFT,CAGHC,UAAU,CAAEA,CAHT,CAIHC,eAAe,CAAEA,CAJd,CAKHE,eAAe,CAAEA,CALd,CAMHC,eAAe,CAAEA,CANd,CAOHE,eAAe,CAAEA,CAPd,CAQHC,eAAe,CAAEA,CARd,CASHC,eAAe,CAAEA,CATd,CAUHC,eAAe,CAAEA,CAVd,CAWHC,eAAe,CAAEA,CAXd,CAYHC,WAAW,CAAEA,CAZV,CAaHE,WAAW,CAAEA,CAbV,CAcHC,WAAW,CAAEA,CAdV,CAeHC,WAAW,CAAEA,CAfV,CAgBHC,QAAQ,CAzBG,QAAXA,CAAAA,QAAW,EAAW,CACtBnB,CAAU,CAAC,IAAD,CAAV,CACAI,CAAe,CAAC,IAAD,CAAf,CACAG,CAAe,CAAC,IAAD,CAAf,CACAI,CAAe,CAAC,IAAD,CAAf,CACAG,CAAW,CAAC,IAAD,CAAX,CACAG,CAAW,CAAC,IAAD,CACd,CAEM,CAkBV,CArLK,CAAN","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 .\n\n/**\n * A javascript module to store calendar drag and drop data.\n *\n * This module is unfortunately required because of the limitations\n * of the HTML5 drag and drop API and it's ability to provide data\n * between the different stages of the drag/drop lifecycle.\n *\n * @module core_calendar/drag_drop_data_store\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n /* @var {int|null} eventId The id of the event being dragged */\n var eventId = null;\n /* @var {int|null} durationDays How many days the event spans */\n var durationDays = null;\n /* @var {int|null} minTimestart The earliest valid timestart */\n var minTimestart = null;\n /* @var {int|null} maxTimestart The latest valid tiemstart */\n var maxTimestart = null;\n /* @var {string|null} minError Error message for min timestamp violation */\n var minError = null;\n /* @var {string|null} maxError Error message for max timestamp violation */\n var maxError = null;\n\n /**\n * Store the id of the event being dragged.\n *\n * @param {int} id The event id\n */\n var setEventId = function(id) {\n eventId = id;\n };\n\n /**\n * Get the stored event id.\n *\n * @return {int|null}\n */\n var getEventId = function() {\n return eventId;\n };\n\n /**\n * Check if the store has an event id.\n *\n * @return {bool}\n */\n var hasEventId = function() {\n return eventId !== null;\n };\n\n /**\n * Store the duration (in days) of the event being dragged.\n *\n * @param {int} days Number of days the event spans\n */\n var setDurationDays = function(days) {\n durationDays = days;\n };\n\n /**\n * Get the stored number of days.\n *\n * @return {int|null}\n */\n var getDurationDays = function() {\n return durationDays;\n };\n\n /**\n * Store the minimum timestart valid for an event being dragged.\n *\n * @param {int} timestamp The unix timstamp\n */\n var setMinTimestart = function(timestamp) {\n minTimestart = timestamp;\n };\n\n /**\n * Get the minimum valid timestart.\n *\n * @return {int|null}\n */\n var getMinTimestart = function() {\n return minTimestart;\n };\n\n /**\n * Check if a minimum timestamp is set.\n *\n * @return {bool}\n */\n var hasMinTimestart = function() {\n return minTimestart !== null;\n };\n\n /**\n * Store the maximum timestart valid for an event being dragged.\n *\n * @param {int} timestamp The unix timstamp\n */\n var setMaxTimestart = function(timestamp) {\n maxTimestart = timestamp;\n };\n\n /**\n * Get the maximum valid timestart.\n *\n * @return {int|null}\n */\n var getMaxTimestart = function() {\n return maxTimestart;\n };\n\n /**\n * Check if a maximum timestamp is set.\n *\n * @return {bool}\n */\n var hasMaxTimestart = function() {\n return maxTimestart !== null;\n };\n\n /**\n * Store the error string to display if trying to drag an event\n * earlier than the minimum allowed date.\n *\n * @param {string} message The error message\n */\n var setMinError = function(message) {\n minError = message;\n };\n\n /**\n * Get the error message for a minimum time start violation.\n *\n * @return {string|null}\n */\n var getMinError = function() {\n return minError;\n };\n\n /**\n * Store the error string to display if trying to drag an event\n * later than the maximum allowed date.\n *\n * @param {string} message The error message\n */\n var setMaxError = function(message) {\n maxError = message;\n };\n\n /**\n * Get the error message for a maximum time start violation.\n *\n * @return {string|null}\n */\n var getMaxError = function() {\n return maxError;\n };\n\n /**\n * Reset all of the stored values.\n */\n var clearAll = function() {\n setEventId(null);\n setDurationDays(null);\n setMinTimestart(null);\n setMaxTimestart(null);\n setMinError(null);\n setMaxError(null);\n };\n\n return {\n setEventId: setEventId,\n getEventId: getEventId,\n hasEventId: hasEventId,\n setDurationDays: setDurationDays,\n getDurationDays: getDurationDays,\n setMinTimestart: setMinTimestart,\n getMinTimestart: getMinTimestart,\n hasMinTimestart: hasMinTimestart,\n setMaxTimestart: setMaxTimestart,\n getMaxTimestart: getMaxTimestart,\n hasMaxTimestart: hasMaxTimestart,\n setMinError: setMinError,\n getMinError: getMinError,\n setMaxError: setMaxError,\n getMaxError: getMaxError,\n clearAll: clearAll\n };\n});\n"],"file":"drag_drop_data_store.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/event_form.min.js.map b/calendar/amd/build/event_form.min.js.map index 32d3877390e..cc0bda06ac3 100644 --- a/calendar/amd/build/event_form.min.js.map +++ b/calendar/amd/build/event_form.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/event_form.js"],"names":["define","$","CalendarRepository","SELECTORS","EVENT_GROUP_COURSE_ID","EVENT_GROUP_ID","SELECT_OPTION","addCourseGroupSelectListeners","formElement","courseGroupSelect","find","loadGroupSelectOptions","groups","groupSelect","groupSelectOptions","courseGroups","remove","prop","each","id","group","append","attr","text","name","on","courseId","val","getCourseGroupsData","then","catch","Notification","exception","init","formId"],"mappings":"AAuBAA,OAAM,4BAAC,CAAC,QAAD,CAAW,0BAAX,CAAD,CAAyC,SAASC,CAAT,CAAYC,CAAZ,CAAgC,IAEvEC,CAAAA,CAAS,CAAG,CACZC,qBAAqB,CAAE,0BADX,CAEZC,cAAc,CAAE,oBAFJ,CAGZC,aAAa,CAAE,QAHH,CAF2D,CAgBvEC,CAA6B,CAAG,SAASC,CAAT,CAAsB,IAClDC,CAAAA,CAAiB,CAAGD,CAAW,CAACE,IAAZ,CAAiBP,CAAS,CAACC,qBAA3B,CAD8B,CAGlDO,CAAsB,CAAG,SAASC,CAAT,CAAiB,CAC1C,GAAIC,CAAAA,CAAW,CAAGL,CAAW,CAACE,IAAZ,CAAiBP,CAAS,CAACE,cAA3B,CAAlB,CACIS,CAAkB,CAAGD,CAAW,CAACH,IAAZ,CAAiBP,CAAS,CAACG,aAA3B,CADzB,CAEIS,CAAY,CAAGd,CAAC,CAACW,CAAD,CAFpB,CAKAE,CAAkB,CAACE,MAAnB,GACAH,CAAW,CAACI,IAAZ,CAAiB,UAAjB,KACAF,CAAY,CAACG,IAAb,CAAkB,SAASC,CAAT,CAAaC,CAAb,CAAoB,CAClCnB,CAAC,CAACY,CAAD,CAAD,CAAeQ,MAAf,CAAsBpB,CAAC,CAAC,mBAAD,CAAD,CAAuBqB,IAAvB,CAA4B,OAA5B,CAAqCF,CAAK,CAACD,EAA3C,EAA+CI,IAA/C,CAAoDH,CAAK,CAACI,IAA1D,CAAtB,CACH,CAFD,CAGH,CAdqD,CAiBtDf,CAAiB,CAACgB,EAAlB,CAAqB,QAArB,CAA+B,UAAW,CACtC,GAAIC,CAAAA,CAAQ,CAAGlB,CAAW,CAACE,IAAZ,CAAiBP,CAAS,CAACC,qBAA3B,EAAkDuB,GAAlD,EAAf,CACAzB,CAAkB,CAAC0B,mBAAnB,CAAuCF,CAAvC,EACKG,IADL,CACU,SAASjB,CAAT,CAAiB,CACnB,MAAOD,CAAAA,CAAsB,CAACC,CAAD,CAChC,CAHL,EAIKkB,KAJL,CAIWC,YAAY,CAACC,SAJxB,CAKH,CAPD,CAQH,CAzC0E,CAsD3E,MAAO,CACHC,IAAI,CANG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAiB,CACxB,GAAI1B,CAAAA,CAAW,CAAGP,CAAC,CAAC,IAAMiC,CAAP,CAAnB,CACA3B,CAA6B,CAACC,CAAD,CAChC,CAEM,CAGV,CAzDK,CAAN","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 .\n\n/**\n * A javascript module to enhance the event form.\n *\n * @module core_calendar/event_form\n * @package core_calendar\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core_calendar/repository'], function($, CalendarRepository) {\n\n var SELECTORS = {\n EVENT_GROUP_COURSE_ID: '[name=\"groupcourseid\"]',\n EVENT_GROUP_ID: '[name=\"groupid\"]',\n SELECT_OPTION: 'option'\n };\n\n /**\n * Listen for when the user changes the group course when configuring\n * a group event and filter the options in the group select to only\n * show the groups available within the course the user has selected.\n *\n * @method addCourseGroupSelectListeners\n * @param {object} formElement The root form element\n */\n var addCourseGroupSelectListeners = function(formElement) {\n var courseGroupSelect = formElement.find(SELECTORS.EVENT_GROUP_COURSE_ID);\n\n var loadGroupSelectOptions = function(groups) {\n var groupSelect = formElement.find(SELECTORS.EVENT_GROUP_ID),\n groupSelectOptions = groupSelect.find(SELECTORS.SELECT_OPTION),\n courseGroups = $(groups);\n\n // Let's clear all options first.\n groupSelectOptions.remove();\n groupSelect.prop(\"disabled\", false);\n courseGroups.each(function(id, group) {\n $(groupSelect).append($(\"\").attr(\"value\", group.id).text(group.name));\n });\n };\n\n // If the user choose a course in the selector do a WS request to get groups.\n courseGroupSelect.on('change', function() {\n var courseId = formElement.find(SELECTORS.EVENT_GROUP_COURSE_ID).val();\n CalendarRepository.getCourseGroupsData(courseId)\n .then(function(groups) {\n return loadGroupSelectOptions(groups);\n })\n .catch(Notification.exception);\n });\n };\n\n /**\n * Initialise all of the form enhancements.\n *\n * @method init\n * @param {string} formId The value of the form's id attribute\n */\n var init = function(formId) {\n var formElement = $('#' + formId);\n addCourseGroupSelectListeners(formElement);\n };\n\n return {\n init: init,\n };\n});\n"],"file":"event_form.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/event_form.js"],"names":["define","$","CalendarRepository","SELECTORS","EVENT_GROUP_COURSE_ID","EVENT_GROUP_ID","SELECT_OPTION","addCourseGroupSelectListeners","formElement","courseGroupSelect","find","loadGroupSelectOptions","groups","groupSelect","groupSelectOptions","courseGroups","remove","prop","each","id","group","append","attr","text","name","on","courseId","val","getCourseGroupsData","then","catch","Notification","exception","init","formId"],"mappings":"AAsBAA,OAAM,4BAAC,CAAC,QAAD,CAAW,0BAAX,CAAD,CAAyC,SAASC,CAAT,CAAYC,CAAZ,CAAgC,IAEvEC,CAAAA,CAAS,CAAG,CACZC,qBAAqB,CAAE,0BADX,CAEZC,cAAc,CAAE,oBAFJ,CAGZC,aAAa,CAAE,QAHH,CAF2D,CAgBvEC,CAA6B,CAAG,SAASC,CAAT,CAAsB,IAClDC,CAAAA,CAAiB,CAAGD,CAAW,CAACE,IAAZ,CAAiBP,CAAS,CAACC,qBAA3B,CAD8B,CAGlDO,CAAsB,CAAG,SAASC,CAAT,CAAiB,CAC1C,GAAIC,CAAAA,CAAW,CAAGL,CAAW,CAACE,IAAZ,CAAiBP,CAAS,CAACE,cAA3B,CAAlB,CACIS,CAAkB,CAAGD,CAAW,CAACH,IAAZ,CAAiBP,CAAS,CAACG,aAA3B,CADzB,CAEIS,CAAY,CAAGd,CAAC,CAACW,CAAD,CAFpB,CAKAE,CAAkB,CAACE,MAAnB,GACAH,CAAW,CAACI,IAAZ,CAAiB,UAAjB,KACAF,CAAY,CAACG,IAAb,CAAkB,SAASC,CAAT,CAAaC,CAAb,CAAoB,CAClCnB,CAAC,CAACY,CAAD,CAAD,CAAeQ,MAAf,CAAsBpB,CAAC,CAAC,mBAAD,CAAD,CAAuBqB,IAAvB,CAA4B,OAA5B,CAAqCF,CAAK,CAACD,EAA3C,EAA+CI,IAA/C,CAAoDH,CAAK,CAACI,IAA1D,CAAtB,CACH,CAFD,CAGH,CAdqD,CAiBtDf,CAAiB,CAACgB,EAAlB,CAAqB,QAArB,CAA+B,UAAW,CACtC,GAAIC,CAAAA,CAAQ,CAAGlB,CAAW,CAACE,IAAZ,CAAiBP,CAAS,CAACC,qBAA3B,EAAkDuB,GAAlD,EAAf,CACAzB,CAAkB,CAAC0B,mBAAnB,CAAuCF,CAAvC,EACKG,IADL,CACU,SAASjB,CAAT,CAAiB,CACnB,MAAOD,CAAAA,CAAsB,CAACC,CAAD,CAChC,CAHL,EAIKkB,KAJL,CAIWC,YAAY,CAACC,SAJxB,CAKH,CAPD,CAQH,CAzC0E,CAsD3E,MAAO,CACHC,IAAI,CANG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAiB,CACxB,GAAI1B,CAAAA,CAAW,CAAGP,CAAC,CAAC,IAAMiC,CAAP,CAAnB,CACA3B,CAA6B,CAACC,CAAD,CAChC,CAEM,CAGV,CAzDK,CAAN","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 .\n\n/**\n * A javascript module to enhance the event form.\n *\n * @module core_calendar/event_form\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core_calendar/repository'], function($, CalendarRepository) {\n\n var SELECTORS = {\n EVENT_GROUP_COURSE_ID: '[name=\"groupcourseid\"]',\n EVENT_GROUP_ID: '[name=\"groupid\"]',\n SELECT_OPTION: 'option'\n };\n\n /**\n * Listen for when the user changes the group course when configuring\n * a group event and filter the options in the group select to only\n * show the groups available within the course the user has selected.\n *\n * @method addCourseGroupSelectListeners\n * @param {object} formElement The root form element\n */\n var addCourseGroupSelectListeners = function(formElement) {\n var courseGroupSelect = formElement.find(SELECTORS.EVENT_GROUP_COURSE_ID);\n\n var loadGroupSelectOptions = function(groups) {\n var groupSelect = formElement.find(SELECTORS.EVENT_GROUP_ID),\n groupSelectOptions = groupSelect.find(SELECTORS.SELECT_OPTION),\n courseGroups = $(groups);\n\n // Let's clear all options first.\n groupSelectOptions.remove();\n groupSelect.prop(\"disabled\", false);\n courseGroups.each(function(id, group) {\n $(groupSelect).append($(\"\").attr(\"value\", group.id).text(group.name));\n });\n };\n\n // If the user choose a course in the selector do a WS request to get groups.\n courseGroupSelect.on('change', function() {\n var courseId = formElement.find(SELECTORS.EVENT_GROUP_COURSE_ID).val();\n CalendarRepository.getCourseGroupsData(courseId)\n .then(function(groups) {\n return loadGroupSelectOptions(groups);\n })\n .catch(Notification.exception);\n });\n };\n\n /**\n * Initialise all of the form enhancements.\n *\n * @method init\n * @param {string} formId The value of the form's id attribute\n */\n var init = function(formId) {\n var formElement = $('#' + formId);\n addCourseGroupSelectListeners(formElement);\n };\n\n return {\n init: init,\n };\n});\n"],"file":"event_form.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/events.min.js.map b/calendar/amd/build/events.min.js.map index e3efce1d56f..bf94bc57696 100644 --- a/calendar/amd/build/events.min.js.map +++ b/calendar/amd/build/events.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/events.js"],"names":["define","created","deleted","deleteAll","updated","editEvent","editActionEvent","eventMoved","dayChanged","monthChanged","moveEvent","filterChanged","viewUpdated"],"mappings":"AAwBAA,OAAM,wBAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,OAAO,CAAE,yBADN,CAEHC,OAAO,CAAE,yBAFN,CAGHC,SAAS,CAAE,4BAHR,CAIHC,OAAO,CAAE,yBAJN,CAKHC,SAAS,CAAE,4BALR,CAMHC,eAAe,CAAE,mCANd,CAOHC,UAAU,CAAE,6BAPT,CAQHC,UAAU,CAAE,6BART,CASHC,YAAY,CAAE,+BATX,CAUHC,SAAS,CAAE,4BAVR,CAWHC,aAAa,CAAE,gCAXZ,CAYHC,WAAW,CAAE,8BAZV,CAcV,CAfK,CAAN","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 .\n\n/**\n * Contain the events the calendar component can fire.\n *\n * @module core_calendar/events\n * @class calendar_events\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n created: 'calendar-events:created',\n deleted: 'calendar-events:deleted',\n deleteAll: 'calendar-events:delete_all',\n updated: 'calendar-events:updated',\n editEvent: 'calendar-events:edit_event',\n editActionEvent: 'calendar-events:edit_action_event',\n eventMoved: 'calendar-events:event_moved',\n dayChanged: 'calendar-events:day_changed',\n monthChanged: 'calendar-events:month_changed',\n moveEvent: 'calendar-events:move_event',\n filterChanged: 'calendar-events:filter_changed',\n viewUpdated: 'calendar-events:view_updated',\n };\n});\n"],"file":"events.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/events.js"],"names":["define","created","deleted","deleteAll","updated","editEvent","editActionEvent","eventMoved","dayChanged","monthChanged","moveEvent","filterChanged","viewUpdated"],"mappings":"AAuBAA,OAAM,wBAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,OAAO,CAAE,yBADN,CAEHC,OAAO,CAAE,yBAFN,CAGHC,SAAS,CAAE,4BAHR,CAIHC,OAAO,CAAE,yBAJN,CAKHC,SAAS,CAAE,4BALR,CAMHC,eAAe,CAAE,mCANd,CAOHC,UAAU,CAAE,6BAPT,CAQHC,UAAU,CAAE,6BART,CASHC,YAAY,CAAE,+BATX,CAUHC,SAAS,CAAE,4BAVR,CAWHC,aAAa,CAAE,gCAXZ,CAYHC,WAAW,CAAE,8BAZV,CAcV,CAfK,CAAN","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 .\n\n/**\n * Contain the events the calendar component can fire.\n *\n * @module core_calendar/events\n * @class calendar_events\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n created: 'calendar-events:created',\n deleted: 'calendar-events:deleted',\n deleteAll: 'calendar-events:delete_all',\n updated: 'calendar-events:updated',\n editEvent: 'calendar-events:edit_event',\n editActionEvent: 'calendar-events:edit_action_event',\n eventMoved: 'calendar-events:event_moved',\n dayChanged: 'calendar-events:day_changed',\n monthChanged: 'calendar-events:month_changed',\n moveEvent: 'calendar-events:move_event',\n filterChanged: 'calendar-events:filter_changed',\n viewUpdated: 'calendar-events:view_updated',\n };\n});\n"],"file":"events.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/modal_delete.min.js.map b/calendar/amd/build/modal_delete.min.js.map index 090c326af6b..fd5b24cdfec 100644 --- a/calendar/amd/build/modal_delete.min.js.map +++ b/calendar/amd/build/modal_delete.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/modal_delete.js"],"names":["define","$","Notification","CustomEvents","Modal","ModalEvents","ModalRegistry","CalendarEvents","registered","SELECTORS","DELETE_ONE_BUTTON","DELETE_ALL_BUTTON","CANCEL_BUTTON","ModalDelete","root","call","setRemoveOnClose","TYPE","prototype","Object","create","constructor","registerEventListeners","getModal","on","events","activate","e","data","saveEvent","Event","save","getRoot","trigger","isDefaultPrevented","hide","originalEvent","preventDefault","bind","deleteAll","cancelEvent","cancel","register"],"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 .\n\n/**\n * Contain the logic for the save/cancel modal.\n *\n * @module core_calendar/modal_delete\n * @class modal_delete\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_events',\n 'core/modal_registry',\n 'core_calendar/events',\n],\nfunction(\n $,\n Notification,\n CustomEvents,\n Modal,\n ModalEvents,\n ModalRegistry,\n CalendarEvents\n) {\n\n var registered = false;\n var SELECTORS = {\n DELETE_ONE_BUTTON: '[data-action=\"deleteone\"]',\n DELETE_ALL_BUTTON: '[data-action=\"deleteall\"]',\n CANCEL_BUTTON: '[data-action=\"cancel\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalDelete = function(root) {\n Modal.call(this, root);\n\n this.setRemoveOnClose(true);\n };\n\n ModalDelete.TYPE = 'core_calendar-modal_delete';\n ModalDelete.prototype = Object.create(Modal.prototype);\n ModalDelete.prototype.constructor = ModalDelete;\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalDelete.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.DELETE_ONE_BUTTON, function(e, data) {\n var saveEvent = $.Event(ModalEvents.save);\n this.getRoot().trigger(saveEvent, this);\n\n if (!saveEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.DELETE_ALL_BUTTON, function(e, data) {\n var saveEvent = $.Event(CalendarEvents.deleteAll);\n this.getRoot().trigger(saveEvent, this);\n\n if (!saveEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.CANCEL_BUTTON, function(e, data) {\n var cancelEvent = $.Event(ModalEvents.cancel);\n this.getRoot().trigger(cancelEvent, this);\n\n if (!cancelEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalDelete.TYPE, ModalDelete, 'calendar/event_delete_modal');\n registered = true;\n }\n\n return ModalDelete;\n});\n"],"file":"modal_delete.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/modal_delete.js"],"names":["define","$","Notification","CustomEvents","Modal","ModalEvents","ModalRegistry","CalendarEvents","registered","SELECTORS","DELETE_ONE_BUTTON","DELETE_ALL_BUTTON","CANCEL_BUTTON","ModalDelete","root","call","setRemoveOnClose","TYPE","prototype","Object","create","constructor","registerEventListeners","getModal","on","events","activate","e","data","saveEvent","Event","save","getRoot","trigger","isDefaultPrevented","hide","originalEvent","preventDefault","bind","deleteAll","cancelEvent","cancel","register"],"mappings":"AAuBAA,OAAM,8BAAC,CACH,QADG,CAEH,mBAFG,CAGH,gCAHG,CAIH,YAJG,CAKH,mBALG,CAMH,qBANG,CAOH,sBAPG,CAAD,CASN,SACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKIC,CALJ,CAMIC,CANJ,CAOIC,CAPJ,CAQE,IAEMC,CAAAA,CAAU,GAFhB,CAGMC,CAAS,CAAG,CACZC,iBAAiB,CAAE,6BADP,CAEZC,iBAAiB,CAAE,6BAFP,CAGZC,aAAa,CAAE,0BAHH,CAHlB,CAcMC,CAAW,CAAG,SAASC,CAAT,CAAe,CAC7BV,CAAK,CAACW,IAAN,CAAW,IAAX,CAAiBD,CAAjB,EAEA,KAAKE,gBAAL,IACH,CAlBH,CAoBEH,CAAW,CAACI,IAAZ,CAAmB,4BAAnB,CACAJ,CAAW,CAACK,SAAZ,CAAwBC,MAAM,CAACC,MAAP,CAAchB,CAAK,CAACc,SAApB,CAAxB,CACAL,CAAW,CAACK,SAAZ,CAAsBG,WAAtB,CAAoCR,CAApC,CAOAA,CAAW,CAACK,SAAZ,CAAsBI,sBAAtB,CAA+C,UAAW,CAEtDlB,CAAK,CAACc,SAAN,CAAgBI,sBAAhB,CAAuCP,IAAvC,CAA4C,IAA5C,EAEA,KAAKQ,QAAL,GAAgBC,EAAhB,CAAmBrB,CAAY,CAACsB,MAAb,CAAoBC,QAAvC,CAAiDjB,CAAS,CAACC,iBAA3D,CAA8E,SAASiB,CAAT,CAAYC,CAAZ,CAAkB,CAC5F,GAAIC,CAAAA,CAAS,CAAG5B,CAAC,CAAC6B,KAAF,CAAQzB,CAAW,CAAC0B,IAApB,CAAhB,CACA,KAAKC,OAAL,GAAeC,OAAf,CAAuBJ,CAAvB,CAAkC,IAAlC,EAEA,GAAI,CAACA,CAAS,CAACK,kBAAV,EAAL,CAAqC,CACjC,KAAKC,IAAL,GACAP,CAAI,CAACQ,aAAL,CAAmBC,cAAnB,EACH,CACJ,CAR6E,CAQ5EC,IAR4E,CAQvE,IARuE,CAA9E,EAUA,KAAKf,QAAL,GAAgBC,EAAhB,CAAmBrB,CAAY,CAACsB,MAAb,CAAoBC,QAAvC,CAAiDjB,CAAS,CAACE,iBAA3D,CAA8E,SAASgB,CAAT,CAAYC,CAAZ,CAAkB,CAC5F,GAAIC,CAAAA,CAAS,CAAG5B,CAAC,CAAC6B,KAAF,CAAQvB,CAAc,CAACgC,SAAvB,CAAhB,CACA,KAAKP,OAAL,GAAeC,OAAf,CAAuBJ,CAAvB,CAAkC,IAAlC,EAEA,GAAI,CAACA,CAAS,CAACK,kBAAV,EAAL,CAAqC,CACjC,KAAKC,IAAL,GACAP,CAAI,CAACQ,aAAL,CAAmBC,cAAnB,EACH,CACJ,CAR6E,CAQ5EC,IAR4E,CAQvE,IARuE,CAA9E,EAUA,KAAKf,QAAL,GAAgBC,EAAhB,CAAmBrB,CAAY,CAACsB,MAAb,CAAoBC,QAAvC,CAAiDjB,CAAS,CAACG,aAA3D,CAA0E,SAASe,CAAT,CAAYC,CAAZ,CAAkB,CACxF,GAAIY,CAAAA,CAAW,CAAGvC,CAAC,CAAC6B,KAAF,CAAQzB,CAAW,CAACoC,MAApB,CAAlB,CACA,KAAKT,OAAL,GAAeC,OAAf,CAAuBO,CAAvB,CAAoC,IAApC,EAEA,GAAI,CAACA,CAAW,CAACN,kBAAZ,EAAL,CAAuC,CACnC,KAAKC,IAAL,GACAP,CAAI,CAACQ,aAAL,CAAmBC,cAAnB,EACH,CACJ,CARyE,CAQxEC,IARwE,CAQnE,IARmE,CAA1E,CASH,CAjCD,CAqCA,GAAI,CAAC9B,CAAL,CAAiB,CACbF,CAAa,CAACoC,QAAd,CAAuB7B,CAAW,CAACI,IAAnC,CAAyCJ,CAAzC,CAAsD,6BAAtD,EACAL,CAAU,GACb,CAED,MAAOK,CAAAA,CACV,CAzFK,CAAN","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 .\n\n/**\n * Contain the logic for the save/cancel modal.\n *\n * @module core_calendar/modal_delete\n * @class modal_delete\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_events',\n 'core/modal_registry',\n 'core_calendar/events',\n],\nfunction(\n $,\n Notification,\n CustomEvents,\n Modal,\n ModalEvents,\n ModalRegistry,\n CalendarEvents\n) {\n\n var registered = false;\n var SELECTORS = {\n DELETE_ONE_BUTTON: '[data-action=\"deleteone\"]',\n DELETE_ALL_BUTTON: '[data-action=\"deleteall\"]',\n CANCEL_BUTTON: '[data-action=\"cancel\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalDelete = function(root) {\n Modal.call(this, root);\n\n this.setRemoveOnClose(true);\n };\n\n ModalDelete.TYPE = 'core_calendar-modal_delete';\n ModalDelete.prototype = Object.create(Modal.prototype);\n ModalDelete.prototype.constructor = ModalDelete;\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalDelete.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.DELETE_ONE_BUTTON, function(e, data) {\n var saveEvent = $.Event(ModalEvents.save);\n this.getRoot().trigger(saveEvent, this);\n\n if (!saveEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.DELETE_ALL_BUTTON, function(e, data) {\n var saveEvent = $.Event(CalendarEvents.deleteAll);\n this.getRoot().trigger(saveEvent, this);\n\n if (!saveEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n\n this.getModal().on(CustomEvents.events.activate, SELECTORS.CANCEL_BUTTON, function(e, data) {\n var cancelEvent = $.Event(ModalEvents.cancel);\n this.getRoot().trigger(cancelEvent, this);\n\n if (!cancelEvent.isDefaultPrevented()) {\n this.hide();\n data.originalEvent.preventDefault();\n }\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalDelete.TYPE, ModalDelete, 'calendar/event_delete_modal');\n registered = true;\n }\n\n return ModalDelete;\n});\n"],"file":"modal_delete.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/modal_event_form.min.js.map b/calendar/amd/build/modal_event_form.min.js.map index 6962097c568..b5f1e4cc651 100644 --- a/calendar/amd/build/modal_event_form.min.js.map +++ b/calendar/amd/build/modal_event_form.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/modal_event_form.js"],"names":["define","$","Event","Str","Notification","Templates","CustomEvents","Modal","ModalRegistry","Fragment","CalendarEvents","Repository","registered","SELECTORS","SAVE_BUTTON","LOADING_ICON_CONTAINER","ModalEventForm","root","call","eventId","startTime","courseId","categoryId","contextId","reloadingBody","reloadingTitle","saveButton","getFooter","find","TYPE","prototype","Object","create","constructor","setContextId","id","getContextId","setCourseId","getCourseId","setCategoryId","getCategoryId","hasCourseId","hasCategoryId","setEventId","getEventId","hasEventId","setStartTime","time","getStartTime","hasStartTime","getForm","getBody","disableButtons","prop","enableButtons","reloadTitleContent","titlePromise","get_string","then","string","setTitle","bind","always","fail","exception","reloadBodyContent","formData","bodyPromise","args","eventid","starttime","courseid","categoryid","formdata","loadFragment","setBody","reloadAllContent","when","show","hide","getFormData","serialize","save","invalid","loadingContainer","length","first","focus","removeClass","submitCreateUpdateForm","response","validationerror","isExisting","trigger","updated","event","created","addClass","registerEventListeners","getModal","on","events","activate","e","data","submit","originalEvent","preventDefault","stopPropagation","notifyFormSubmitAjax","register"],"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 .\n\n/**\n * Contain the logic for the quick add or update event modal.\n *\n * @module calendar/modal_quick_add_event\n * @class modal_quick_add_event\n * @package core\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/event',\n 'core/str',\n 'core/notification',\n 'core/templates',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/fragment',\n 'core_calendar/events',\n 'core_calendar/repository'\n ],\n function(\n $,\n Event,\n Str,\n Notification,\n Templates,\n CustomEvents,\n Modal,\n ModalRegistry,\n Fragment,\n CalendarEvents,\n Repository\n ) {\n\n var registered = false;\n var SELECTORS = {\n SAVE_BUTTON: '[data-action=\"save\"]',\n LOADING_ICON_CONTAINER: '[data-region=\"loading-icon-container\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalEventForm = function(root) {\n Modal.call(this, root);\n this.eventId = null;\n this.startTime = null;\n this.courseId = null;\n this.categoryId = null;\n this.contextId = null;\n this.reloadingBody = false;\n this.reloadingTitle = false;\n this.saveButton = this.getFooter().find(SELECTORS.SAVE_BUTTON);\n };\n\n ModalEventForm.TYPE = 'core_calendar-modal_event_form';\n ModalEventForm.prototype = Object.create(Modal.prototype);\n ModalEventForm.prototype.constructor = ModalEventForm;\n\n /**\n * Set the context id to the given value.\n *\n * @method setContextId\n * @param {Number} id The event id\n */\n ModalEventForm.prototype.setContextId = function(id) {\n this.contextId = id;\n };\n\n /**\n * Retrieve the current context id, if any.\n *\n * @method getContextId\n * @return {Number|null} The event id\n */\n ModalEventForm.prototype.getContextId = function() {\n return this.contextId;\n };\n\n /**\n * Set the course id to the given value.\n *\n * @method setCourseId\n * @param {int} id The event id\n */\n ModalEventForm.prototype.setCourseId = function(id) {\n this.courseId = id;\n };\n\n /**\n * Retrieve the current course id, if any.\n *\n * @method getCourseId\n * @return {int|null} The event id\n */\n ModalEventForm.prototype.getCourseId = function() {\n return this.courseId;\n };\n\n /**\n * Set the category id to the given value.\n *\n * @method setCategoryId\n * @param {int} id The event id\n */\n ModalEventForm.prototype.setCategoryId = function(id) {\n this.categoryId = id;\n };\n\n /**\n * Retrieve the current category id, if any.\n *\n * @method getCategoryId\n * @return {int|null} The event id\n */\n ModalEventForm.prototype.getCategoryId = function() {\n return this.categoryId;\n };\n\n /**\n * Check if the modal has an course id.\n *\n * @method hasCourseId\n * @return {bool}\n */\n ModalEventForm.prototype.hasCourseId = function() {\n return this.courseId !== null;\n };\n\n /**\n * Check if the modal has an category id.\n *\n * @method hasCategoryId\n * @return {bool}\n */\n ModalEventForm.prototype.hasCategoryId = function() {\n return this.categoryId !== null;\n };\n\n /**\n * Set the event id to the given value.\n *\n * @method setEventId\n * @param {int} id The event id\n */\n ModalEventForm.prototype.setEventId = function(id) {\n this.eventId = id;\n };\n\n /**\n * Retrieve the current event id, if any.\n *\n * @method getEventId\n * @return {int|null} The event id\n */\n ModalEventForm.prototype.getEventId = function() {\n return this.eventId;\n };\n\n /**\n * Check if the modal has an event id.\n *\n * @method hasEventId\n * @return {bool}\n */\n ModalEventForm.prototype.hasEventId = function() {\n return this.eventId !== null;\n };\n\n /**\n * Set the start time to the given value.\n *\n * @method setStartTime\n * @param {int} time The start time\n */\n ModalEventForm.prototype.setStartTime = function(time) {\n this.startTime = time;\n };\n\n /**\n * Retrieve the current start time, if any.\n *\n * @method getStartTime\n * @return {int|null} The start time\n */\n ModalEventForm.prototype.getStartTime = function() {\n return this.startTime;\n };\n\n /**\n * Check if the modal has start time.\n *\n * @method hasStartTime\n * @return {bool}\n */\n ModalEventForm.prototype.hasStartTime = function() {\n return this.startTime !== null;\n };\n\n /**\n * Get the form element from the modal.\n *\n * @method getForm\n * @return {object}\n */\n ModalEventForm.prototype.getForm = function() {\n return this.getBody().find('form');\n };\n\n /**\n * Disable the buttons in the footer.\n *\n * @method disableButtons\n */\n ModalEventForm.prototype.disableButtons = function() {\n this.saveButton.prop('disabled', true);\n };\n\n /**\n * Enable the buttons in the footer.\n *\n * @method enableButtons\n */\n ModalEventForm.prototype.enableButtons = function() {\n this.saveButton.prop('disabled', false);\n };\n\n /**\n * Reload the title for the modal to the appropriate value\n * depending on whether we are creating a new event or\n * editing an existing event.\n *\n * @method reloadTitleContent\n * @return {object} A promise resolved with the new title text\n */\n ModalEventForm.prototype.reloadTitleContent = function() {\n if (this.reloadingTitle) {\n return this.titlePromise;\n }\n\n this.reloadingTitle = true;\n\n if (this.hasEventId()) {\n this.titlePromise = Str.get_string('editevent', 'calendar');\n } else {\n this.titlePromise = Str.get_string('newevent', 'calendar');\n }\n\n this.titlePromise.then(function(string) {\n this.setTitle(string);\n return string;\n }.bind(this))\n .always(function() {\n this.reloadingTitle = false;\n return;\n }.bind(this))\n .fail(Notification.exception);\n\n return this.titlePromise;\n };\n\n /**\n * Send a request to the server to get the event_form in a fragment\n * and render the result in the body of the modal.\n *\n * If serialised form data is provided then it will be sent in the\n * request to the server to have the form rendered with the data. This\n * is used when the form had a server side error and we need the server\n * to re-render it for us to display the error to the user.\n *\n * @method reloadBodyContent\n * @param {string} formData The serialised form data\n * @return {object} A promise resolved with the fragment html and js from\n */\n ModalEventForm.prototype.reloadBodyContent = function(formData) {\n if (this.reloadingBody) {\n return this.bodyPromise;\n }\n\n this.reloadingBody = true;\n this.disableButtons();\n\n var args = {};\n\n if (this.hasEventId()) {\n args.eventid = this.getEventId();\n }\n\n if (this.hasStartTime()) {\n args.starttime = this.getStartTime();\n }\n\n if (this.hasCourseId()) {\n args.courseid = this.getCourseId();\n }\n\n if (this.hasCategoryId()) {\n args.categoryid = this.getCategoryId();\n }\n\n if (typeof formData !== 'undefined') {\n args.formdata = formData;\n }\n\n this.bodyPromise = Fragment.loadFragment('calendar', 'event_form', this.getContextId(), args);\n\n this.setBody(this.bodyPromise);\n\n this.bodyPromise.then(function() {\n this.enableButtons();\n return;\n }.bind(this))\n .fail(Notification.exception)\n .always(function() {\n this.reloadingBody = false;\n return;\n }.bind(this))\n .fail(Notification.exception);\n\n return this.bodyPromise;\n };\n\n /**\n * Reload both the title and body content.\n *\n * @method reloadAllContent\n * @return {object} promise\n */\n ModalEventForm.prototype.reloadAllContent = function() {\n return $.when(this.reloadTitleContent(), this.reloadBodyContent());\n };\n\n /**\n * Kick off a reload the modal content before showing it. This\n * is to allow us to re-use the same modal for creating and\n * editing different events within the page.\n *\n * We do the reload when showing the modal rather than hiding it\n * to save a request to the server if the user closes the modal\n * and never re-opens it.\n *\n * @method show\n */\n ModalEventForm.prototype.show = function() {\n this.reloadAllContent();\n Modal.prototype.show.call(this);\n };\n\n /**\n * Clear the event id from the modal when it's closed so\n * that it is loaded fresh next time it's displayed.\n *\n * The event id will be set by the calling code if it wants\n * to edit a specific event.\n *\n * @method hide\n */\n ModalEventForm.prototype.hide = function() {\n Modal.prototype.hide.call(this);\n this.setEventId(null);\n this.setStartTime(null);\n this.setCourseId(null);\n this.setCategoryId(null);\n };\n\n /**\n * Get the serialised form data.\n *\n * @method getFormData\n * @return {string} serialised form data\n */\n ModalEventForm.prototype.getFormData = function() {\n return this.getForm().serialize();\n };\n\n /**\n * Send the form data to the server to create or update\n * an event.\n *\n * If there is a server side validation error then we re-request the\n * rendered form (with the data) from the server in order to get the\n * server side errors to display.\n *\n * On success the modal is hidden and the page is reloaded so that the\n * new event will display.\n *\n * @method save\n * @return {object} A promise\n */\n ModalEventForm.prototype.save = function() {\n var invalid,\n loadingContainer = this.saveButton.find(SELECTORS.LOADING_ICON_CONTAINER);\n\n // Now the change events have run, see if there are any \"invalid\" form fields.\n invalid = this.getForm().find('[aria-invalid=\"true\"]');\n\n // If we found invalid fields, focus on the first one and do not submit via ajax.\n if (invalid.length) {\n invalid.first().focus();\n return;\n }\n\n loadingContainer.removeClass('hidden');\n this.disableButtons();\n\n var formData = this.getFormData();\n // Send the form data to the server for processing.\n return Repository.submitCreateUpdateForm(formData)\n .then(function(response) {\n if (response.validationerror) {\n // If there was a server side validation error then\n // we need to re-request the rendered form from the server\n // in order to display the error for the user.\n this.reloadBodyContent(formData);\n return;\n } else {\n // Check whether this was a new event or not.\n // The hide function unsets the form data so grab this before the hide.\n var isExisting = this.hasEventId();\n\n // No problemo! Our work here is done.\n this.hide();\n\n // Trigger the appropriate calendar event so that the view can be updated.\n if (isExisting) {\n $('body').trigger(CalendarEvents.updated, [response.event]);\n } else {\n $('body').trigger(CalendarEvents.created, [response.event]);\n }\n }\n\n return;\n }.bind(this))\n .always(function() {\n // Regardless of success or error we should always stop\n // the loading icon and re-enable the buttons.\n loadingContainer.addClass('hidden');\n this.enableButtons();\n\n return;\n }.bind(this))\n .fail(Notification.exception);\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalEventForm.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n // When the user clicks the save button we trigger the form submission. We need to\n // trigger an actual submission because there is some JS code in the form that is\n // listening for this event and doing some stuff (e.g. saving draft areas etc).\n this.getModal().on(CustomEvents.events.activate, SELECTORS.SAVE_BUTTON, function(e, data) {\n this.getForm().submit();\n data.originalEvent.preventDefault();\n e.stopPropagation();\n }.bind(this));\n\n // Catch the submit event before it is actually processed by the browser and\n // prevent the submission. We'll take it from here.\n this.getModal().on('submit', function(e) {\n Event.notifyFormSubmitAjax(this.getForm()[0]);\n\n this.save();\n\n // Stop the form from actually submitting and prevent it's\n // propagation because we have already handled the event.\n e.preventDefault();\n e.stopPropagation();\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalEventForm.TYPE, ModalEventForm, 'calendar/modal_event_form');\n registered = true;\n }\n\n return ModalEventForm;\n});\n"],"file":"modal_event_form.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/modal_event_form.js"],"names":["define","$","Event","Str","Notification","Templates","CustomEvents","Modal","ModalRegistry","Fragment","CalendarEvents","Repository","registered","SELECTORS","SAVE_BUTTON","LOADING_ICON_CONTAINER","ModalEventForm","root","call","eventId","startTime","courseId","categoryId","contextId","reloadingBody","reloadingTitle","saveButton","getFooter","find","TYPE","prototype","Object","create","constructor","setContextId","id","getContextId","setCourseId","getCourseId","setCategoryId","getCategoryId","hasCourseId","hasCategoryId","setEventId","getEventId","hasEventId","setStartTime","time","getStartTime","hasStartTime","getForm","getBody","disableButtons","prop","enableButtons","reloadTitleContent","titlePromise","get_string","then","string","setTitle","bind","always","fail","exception","reloadBodyContent","formData","bodyPromise","args","eventid","starttime","courseid","categoryid","formdata","loadFragment","setBody","reloadAllContent","when","show","hide","getFormData","serialize","save","invalid","loadingContainer","length","first","focus","removeClass","submitCreateUpdateForm","response","validationerror","isExisting","trigger","updated","event","created","addClass","registerEventListeners","getModal","on","events","activate","e","data","submit","originalEvent","preventDefault","stopPropagation","notifyFormSubmitAjax","register"],"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 .\n\n/**\n * Contain the logic for the quick add or update event modal.\n *\n * @module core_calendar/modal_quick_add_event\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/event',\n 'core/str',\n 'core/notification',\n 'core/templates',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/fragment',\n 'core_calendar/events',\n 'core_calendar/repository'\n ],\n function(\n $,\n Event,\n Str,\n Notification,\n Templates,\n CustomEvents,\n Modal,\n ModalRegistry,\n Fragment,\n CalendarEvents,\n Repository\n ) {\n\n var registered = false;\n var SELECTORS = {\n SAVE_BUTTON: '[data-action=\"save\"]',\n LOADING_ICON_CONTAINER: '[data-region=\"loading-icon-container\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalEventForm = function(root) {\n Modal.call(this, root);\n this.eventId = null;\n this.startTime = null;\n this.courseId = null;\n this.categoryId = null;\n this.contextId = null;\n this.reloadingBody = false;\n this.reloadingTitle = false;\n this.saveButton = this.getFooter().find(SELECTORS.SAVE_BUTTON);\n };\n\n ModalEventForm.TYPE = 'core_calendar-modal_event_form';\n ModalEventForm.prototype = Object.create(Modal.prototype);\n ModalEventForm.prototype.constructor = ModalEventForm;\n\n /**\n * Set the context id to the given value.\n *\n * @method setContextId\n * @param {Number} id The event id\n */\n ModalEventForm.prototype.setContextId = function(id) {\n this.contextId = id;\n };\n\n /**\n * Retrieve the current context id, if any.\n *\n * @method getContextId\n * @return {Number|null} The event id\n */\n ModalEventForm.prototype.getContextId = function() {\n return this.contextId;\n };\n\n /**\n * Set the course id to the given value.\n *\n * @method setCourseId\n * @param {int} id The event id\n */\n ModalEventForm.prototype.setCourseId = function(id) {\n this.courseId = id;\n };\n\n /**\n * Retrieve the current course id, if any.\n *\n * @method getCourseId\n * @return {int|null} The event id\n */\n ModalEventForm.prototype.getCourseId = function() {\n return this.courseId;\n };\n\n /**\n * Set the category id to the given value.\n *\n * @method setCategoryId\n * @param {int} id The event id\n */\n ModalEventForm.prototype.setCategoryId = function(id) {\n this.categoryId = id;\n };\n\n /**\n * Retrieve the current category id, if any.\n *\n * @method getCategoryId\n * @return {int|null} The event id\n */\n ModalEventForm.prototype.getCategoryId = function() {\n return this.categoryId;\n };\n\n /**\n * Check if the modal has an course id.\n *\n * @method hasCourseId\n * @return {bool}\n */\n ModalEventForm.prototype.hasCourseId = function() {\n return this.courseId !== null;\n };\n\n /**\n * Check if the modal has an category id.\n *\n * @method hasCategoryId\n * @return {bool}\n */\n ModalEventForm.prototype.hasCategoryId = function() {\n return this.categoryId !== null;\n };\n\n /**\n * Set the event id to the given value.\n *\n * @method setEventId\n * @param {int} id The event id\n */\n ModalEventForm.prototype.setEventId = function(id) {\n this.eventId = id;\n };\n\n /**\n * Retrieve the current event id, if any.\n *\n * @method getEventId\n * @return {int|null} The event id\n */\n ModalEventForm.prototype.getEventId = function() {\n return this.eventId;\n };\n\n /**\n * Check if the modal has an event id.\n *\n * @method hasEventId\n * @return {bool}\n */\n ModalEventForm.prototype.hasEventId = function() {\n return this.eventId !== null;\n };\n\n /**\n * Set the start time to the given value.\n *\n * @method setStartTime\n * @param {int} time The start time\n */\n ModalEventForm.prototype.setStartTime = function(time) {\n this.startTime = time;\n };\n\n /**\n * Retrieve the current start time, if any.\n *\n * @method getStartTime\n * @return {int|null} The start time\n */\n ModalEventForm.prototype.getStartTime = function() {\n return this.startTime;\n };\n\n /**\n * Check if the modal has start time.\n *\n * @method hasStartTime\n * @return {bool}\n */\n ModalEventForm.prototype.hasStartTime = function() {\n return this.startTime !== null;\n };\n\n /**\n * Get the form element from the modal.\n *\n * @method getForm\n * @return {object}\n */\n ModalEventForm.prototype.getForm = function() {\n return this.getBody().find('form');\n };\n\n /**\n * Disable the buttons in the footer.\n *\n * @method disableButtons\n */\n ModalEventForm.prototype.disableButtons = function() {\n this.saveButton.prop('disabled', true);\n };\n\n /**\n * Enable the buttons in the footer.\n *\n * @method enableButtons\n */\n ModalEventForm.prototype.enableButtons = function() {\n this.saveButton.prop('disabled', false);\n };\n\n /**\n * Reload the title for the modal to the appropriate value\n * depending on whether we are creating a new event or\n * editing an existing event.\n *\n * @method reloadTitleContent\n * @return {object} A promise resolved with the new title text\n */\n ModalEventForm.prototype.reloadTitleContent = function() {\n if (this.reloadingTitle) {\n return this.titlePromise;\n }\n\n this.reloadingTitle = true;\n\n if (this.hasEventId()) {\n this.titlePromise = Str.get_string('editevent', 'calendar');\n } else {\n this.titlePromise = Str.get_string('newevent', 'calendar');\n }\n\n this.titlePromise.then(function(string) {\n this.setTitle(string);\n return string;\n }.bind(this))\n .always(function() {\n this.reloadingTitle = false;\n return;\n }.bind(this))\n .fail(Notification.exception);\n\n return this.titlePromise;\n };\n\n /**\n * Send a request to the server to get the event_form in a fragment\n * and render the result in the body of the modal.\n *\n * If serialised form data is provided then it will be sent in the\n * request to the server to have the form rendered with the data. This\n * is used when the form had a server side error and we need the server\n * to re-render it for us to display the error to the user.\n *\n * @method reloadBodyContent\n * @param {string} formData The serialised form data\n * @return {object} A promise resolved with the fragment html and js from\n */\n ModalEventForm.prototype.reloadBodyContent = function(formData) {\n if (this.reloadingBody) {\n return this.bodyPromise;\n }\n\n this.reloadingBody = true;\n this.disableButtons();\n\n var args = {};\n\n if (this.hasEventId()) {\n args.eventid = this.getEventId();\n }\n\n if (this.hasStartTime()) {\n args.starttime = this.getStartTime();\n }\n\n if (this.hasCourseId()) {\n args.courseid = this.getCourseId();\n }\n\n if (this.hasCategoryId()) {\n args.categoryid = this.getCategoryId();\n }\n\n if (typeof formData !== 'undefined') {\n args.formdata = formData;\n }\n\n this.bodyPromise = Fragment.loadFragment('calendar', 'event_form', this.getContextId(), args);\n\n this.setBody(this.bodyPromise);\n\n this.bodyPromise.then(function() {\n this.enableButtons();\n return;\n }.bind(this))\n .fail(Notification.exception)\n .always(function() {\n this.reloadingBody = false;\n return;\n }.bind(this))\n .fail(Notification.exception);\n\n return this.bodyPromise;\n };\n\n /**\n * Reload both the title and body content.\n *\n * @method reloadAllContent\n * @return {object} promise\n */\n ModalEventForm.prototype.reloadAllContent = function() {\n return $.when(this.reloadTitleContent(), this.reloadBodyContent());\n };\n\n /**\n * Kick off a reload the modal content before showing it. This\n * is to allow us to re-use the same modal for creating and\n * editing different events within the page.\n *\n * We do the reload when showing the modal rather than hiding it\n * to save a request to the server if the user closes the modal\n * and never re-opens it.\n *\n * @method show\n */\n ModalEventForm.prototype.show = function() {\n this.reloadAllContent();\n Modal.prototype.show.call(this);\n };\n\n /**\n * Clear the event id from the modal when it's closed so\n * that it is loaded fresh next time it's displayed.\n *\n * The event id will be set by the calling code if it wants\n * to edit a specific event.\n *\n * @method hide\n */\n ModalEventForm.prototype.hide = function() {\n Modal.prototype.hide.call(this);\n this.setEventId(null);\n this.setStartTime(null);\n this.setCourseId(null);\n this.setCategoryId(null);\n };\n\n /**\n * Get the serialised form data.\n *\n * @method getFormData\n * @return {string} serialised form data\n */\n ModalEventForm.prototype.getFormData = function() {\n return this.getForm().serialize();\n };\n\n /**\n * Send the form data to the server to create or update\n * an event.\n *\n * If there is a server side validation error then we re-request the\n * rendered form (with the data) from the server in order to get the\n * server side errors to display.\n *\n * On success the modal is hidden and the page is reloaded so that the\n * new event will display.\n *\n * @method save\n * @return {object} A promise\n */\n ModalEventForm.prototype.save = function() {\n var invalid,\n loadingContainer = this.saveButton.find(SELECTORS.LOADING_ICON_CONTAINER);\n\n // Now the change events have run, see if there are any \"invalid\" form fields.\n invalid = this.getForm().find('[aria-invalid=\"true\"]');\n\n // If we found invalid fields, focus on the first one and do not submit via ajax.\n if (invalid.length) {\n invalid.first().focus();\n return;\n }\n\n loadingContainer.removeClass('hidden');\n this.disableButtons();\n\n var formData = this.getFormData();\n // Send the form data to the server for processing.\n return Repository.submitCreateUpdateForm(formData)\n .then(function(response) {\n if (response.validationerror) {\n // If there was a server side validation error then\n // we need to re-request the rendered form from the server\n // in order to display the error for the user.\n this.reloadBodyContent(formData);\n return;\n } else {\n // Check whether this was a new event or not.\n // The hide function unsets the form data so grab this before the hide.\n var isExisting = this.hasEventId();\n\n // No problemo! Our work here is done.\n this.hide();\n\n // Trigger the appropriate calendar event so that the view can be updated.\n if (isExisting) {\n $('body').trigger(CalendarEvents.updated, [response.event]);\n } else {\n $('body').trigger(CalendarEvents.created, [response.event]);\n }\n }\n\n return;\n }.bind(this))\n .always(function() {\n // Regardless of success or error we should always stop\n // the loading icon and re-enable the buttons.\n loadingContainer.addClass('hidden');\n this.enableButtons();\n\n return;\n }.bind(this))\n .fail(Notification.exception);\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalEventForm.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n // When the user clicks the save button we trigger the form submission. We need to\n // trigger an actual submission because there is some JS code in the form that is\n // listening for this event and doing some stuff (e.g. saving draft areas etc).\n this.getModal().on(CustomEvents.events.activate, SELECTORS.SAVE_BUTTON, function(e, data) {\n this.getForm().submit();\n data.originalEvent.preventDefault();\n e.stopPropagation();\n }.bind(this));\n\n // Catch the submit event before it is actually processed by the browser and\n // prevent the submission. We'll take it from here.\n this.getModal().on('submit', function(e) {\n Event.notifyFormSubmitAjax(this.getForm()[0]);\n\n this.save();\n\n // Stop the form from actually submitting and prevent it's\n // propagation because we have already handled the event.\n e.preventDefault();\n e.stopPropagation();\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalEventForm.TYPE, ModalEventForm, 'calendar/modal_event_form');\n registered = true;\n }\n\n return ModalEventForm;\n});\n"],"file":"modal_event_form.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/month_navigation_drag_drop.min.js.map b/calendar/amd/build/month_navigation_drag_drop.min.js.map index cf519936329..54ea3a7c28a 100644 --- a/calendar/amd/build/month_navigation_drag_drop.min.js.map +++ b/calendar/amd/build/month_navigation_drag_drop.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/month_navigation_drag_drop.js"],"names":["define","$","DataStore","SELECTORS","DRAGGABLE","DROP_ZONE","HOVER_CLASS","TARGET_CLASS","registered","hoverTimer","root","updateHoverState","target","hovered","addClass","removeClass","addDropZoneIndicator","find","removeDropZoneIndicator","getTargetFromEvent","e","closest","length","dragstartHandler","eventElement","dragoverHandler","hasEventId","preventDefault","setTimeout","click","dragleaveHandler","clearTimeout","dropHandler","init","rootElement","document","addEventListener"],"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 .\n\n/**\n * A javascript module to handle calendar drag and drop in the calendar\n * month view navigation.\n *\n * This code is run each time the calendar month view is re-rendered. We\n * only register the event handlers once per page load so that the in place\n * DOM updates that happen on month change don't continue to register handlers.\n *\n * @module core_calendar/month_navigation_drag_drop\n * @class month_navigation_drag_drop\n * @package core_calendar\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core_calendar/drag_drop_data_store',\n ],\n function(\n $,\n DataStore\n ) {\n\n var SELECTORS = {\n DRAGGABLE: '[draggable=\"true\"][data-region=\"event-item\"]',\n DROP_ZONE: '[data-drop-zone=\"nav-link\"]',\n };\n var HOVER_CLASS = 'bg-primary text-white';\n var TARGET_CLASS = 'drop-target';\n var HOVER_TIME = 1000; // 1 second hover to change month.\n\n // We store some static variables at the module level because this\n // module is called each time the calendar month view is reloaded but\n // we want some actions to only occur ones.\n\n /* @var {bool} registered If the event listeners have been added */\n var registered = false;\n /* @var {int} hoverTimer The timeout id of any timeout waiting for hover */\n var hoverTimer = null;\n /* @var {object} root The root nav element we're operating on */\n var root = null;\n\n /**\n * Add or remove the appropriate styling to indicate whether\n * the drop target is being hovered over.\n *\n * @param {object} target The target drop zone element\n * @param {bool} hovered If the element is hovered over ot not\n */\n var updateHoverState = function(target, hovered) {\n if (hovered) {\n target.addClass(HOVER_CLASS);\n } else {\n target.removeClass(HOVER_CLASS);\n }\n };\n\n /**\n * Add some styling to the UI to indicate that the nav links\n * are an acceptable drop target.\n */\n var addDropZoneIndicator = function() {\n root.find(SELECTORS.DROP_ZONE).addClass(TARGET_CLASS);\n };\n\n /**\n * Remove the styling from the nav links.\n */\n var removeDropZoneIndicator = function() {\n root.find(SELECTORS.DROP_ZONE).removeClass(TARGET_CLASS);\n };\n\n /**\n * Get the drop zone target from the event, if one is found.\n *\n * @param {event} e Javascript event\n * @return {object|null}\n */\n var getTargetFromEvent = function(e) {\n var target = $(e.target).closest(SELECTORS.DROP_ZONE);\n return (target.length) ? target : null;\n };\n\n /**\n * This will add a visual indicator to the calendar UI to\n * indicate which nav link is a valid drop zone.\n */\n var dragstartHandler = function(e) {\n // Make sure the drag event is for a calendar event.\n var eventElement = $(e.target).closest(SELECTORS.DRAGGABLE);\n\n if (eventElement.length) {\n addDropZoneIndicator();\n }\n };\n\n /**\n * Update the hover state of the target nav element when\n * the user is dragging an event over it.\n *\n * This will add a visual indicator to the calendar UI to\n * indicate which nav link is being hovered.\n *\n * @param {event} e The dragover event\n */\n var dragoverHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n e.preventDefault();\n var target = getTargetFromEvent(e);\n\n if (!target) {\n return;\n }\n\n // If we're not draggin a calendar event then\n // ignore it.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n if (!hoverTimer) {\n hoverTimer = setTimeout(function() {\n target.click();\n hoverTimer = null;\n }, HOVER_TIME);\n }\n\n updateHoverState(target, true);\n removeDropZoneIndicator();\n };\n\n /**\n * Update the hover state of the target nav element that was\n * previously dragged over but has is no longer a drag target.\n *\n * This will remove the visual indicator from the calendar UI\n * that was added by the dragoverHandler.\n *\n * @param {event} e The dragstart event\n */\n var dragleaveHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n var target = getTargetFromEvent(e);\n\n if (!target) {\n return;\n }\n\n if (hoverTimer) {\n clearTimeout(hoverTimer);\n hoverTimer = null;\n }\n\n updateHoverState(target, false);\n addDropZoneIndicator();\n e.preventDefault();\n };\n\n /**\n * Remove the visual indicator from the calendar UI that was\n * added by the dragoverHandler.\n *\n * @param {event} e The drop event\n */\n var dropHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n removeDropZoneIndicator();\n var target = getTargetFromEvent(e);\n\n if (!target) {\n return;\n }\n\n updateHoverState(target, false);\n e.preventDefault();\n };\n\n return {\n /**\n * Initialise the event handlers for the drag events.\n *\n * @param {object} rootElement The element containing calendar nav links\n */\n init: function(rootElement) {\n // Only register the handlers once on the first load.\n if (!registered) {\n // These handlers are only added the first time the module\n // is loaded because we don't want to have a new listener\n // added each time the \"init\" function is called otherwise we'll\n // end up with lots of stale handlers.\n document.addEventListener('dragstart', dragstartHandler, false);\n document.addEventListener('dragover', dragoverHandler, false);\n document.addEventListener('dragleave', dragleaveHandler, false);\n document.addEventListener('drop', dropHandler, false);\n document.addEventListener('dragend', removeDropZoneIndicator, false);\n registered = true;\n }\n\n // Update the module variable to operate on the given\n // root element.\n root = $(rootElement);\n\n // If we're currently dragging then add the indicators.\n if (DataStore.hasEventId()) {\n addDropZoneIndicator();\n }\n },\n };\n});\n"],"file":"month_navigation_drag_drop.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/month_navigation_drag_drop.js"],"names":["define","$","DataStore","SELECTORS","DRAGGABLE","DROP_ZONE","HOVER_CLASS","TARGET_CLASS","registered","hoverTimer","root","updateHoverState","target","hovered","addClass","removeClass","addDropZoneIndicator","find","removeDropZoneIndicator","getTargetFromEvent","e","closest","length","dragstartHandler","eventElement","dragoverHandler","hasEventId","preventDefault","setTimeout","click","dragleaveHandler","clearTimeout","dropHandler","init","rootElement","document","addEventListener"],"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 .\n\n/**\n * A javascript module to handle calendar drag and drop in the calendar\n * month view navigation.\n *\n * This code is run each time the calendar month view is re-rendered. We\n * only register the event handlers once per page load so that the in place\n * DOM updates that happen on month change don't continue to register handlers.\n *\n * @module core_calendar/month_navigation_drag_drop\n * @class month_navigation_drag_drop\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core_calendar/drag_drop_data_store',\n ],\n function(\n $,\n DataStore\n ) {\n\n var SELECTORS = {\n DRAGGABLE: '[draggable=\"true\"][data-region=\"event-item\"]',\n DROP_ZONE: '[data-drop-zone=\"nav-link\"]',\n };\n var HOVER_CLASS = 'bg-primary text-white';\n var TARGET_CLASS = 'drop-target';\n var HOVER_TIME = 1000; // 1 second hover to change month.\n\n // We store some static variables at the module level because this\n // module is called each time the calendar month view is reloaded but\n // we want some actions to only occur ones.\n\n /* @var {bool} registered If the event listeners have been added */\n var registered = false;\n /* @var {int} hoverTimer The timeout id of any timeout waiting for hover */\n var hoverTimer = null;\n /* @var {object} root The root nav element we're operating on */\n var root = null;\n\n /**\n * Add or remove the appropriate styling to indicate whether\n * the drop target is being hovered over.\n *\n * @param {object} target The target drop zone element\n * @param {bool} hovered If the element is hovered over ot not\n */\n var updateHoverState = function(target, hovered) {\n if (hovered) {\n target.addClass(HOVER_CLASS);\n } else {\n target.removeClass(HOVER_CLASS);\n }\n };\n\n /**\n * Add some styling to the UI to indicate that the nav links\n * are an acceptable drop target.\n */\n var addDropZoneIndicator = function() {\n root.find(SELECTORS.DROP_ZONE).addClass(TARGET_CLASS);\n };\n\n /**\n * Remove the styling from the nav links.\n */\n var removeDropZoneIndicator = function() {\n root.find(SELECTORS.DROP_ZONE).removeClass(TARGET_CLASS);\n };\n\n /**\n * Get the drop zone target from the event, if one is found.\n *\n * @param {event} e Javascript event\n * @return {object|null}\n */\n var getTargetFromEvent = function(e) {\n var target = $(e.target).closest(SELECTORS.DROP_ZONE);\n return (target.length) ? target : null;\n };\n\n /**\n * This will add a visual indicator to the calendar UI to\n * indicate which nav link is a valid drop zone.\n */\n var dragstartHandler = function(e) {\n // Make sure the drag event is for a calendar event.\n var eventElement = $(e.target).closest(SELECTORS.DRAGGABLE);\n\n if (eventElement.length) {\n addDropZoneIndicator();\n }\n };\n\n /**\n * Update the hover state of the target nav element when\n * the user is dragging an event over it.\n *\n * This will add a visual indicator to the calendar UI to\n * indicate which nav link is being hovered.\n *\n * @param {event} e The dragover event\n */\n var dragoverHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n e.preventDefault();\n var target = getTargetFromEvent(e);\n\n if (!target) {\n return;\n }\n\n // If we're not draggin a calendar event then\n // ignore it.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n if (!hoverTimer) {\n hoverTimer = setTimeout(function() {\n target.click();\n hoverTimer = null;\n }, HOVER_TIME);\n }\n\n updateHoverState(target, true);\n removeDropZoneIndicator();\n };\n\n /**\n * Update the hover state of the target nav element that was\n * previously dragged over but has is no longer a drag target.\n *\n * This will remove the visual indicator from the calendar UI\n * that was added by the dragoverHandler.\n *\n * @param {event} e The dragstart event\n */\n var dragleaveHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n var target = getTargetFromEvent(e);\n\n if (!target) {\n return;\n }\n\n if (hoverTimer) {\n clearTimeout(hoverTimer);\n hoverTimer = null;\n }\n\n updateHoverState(target, false);\n addDropZoneIndicator();\n e.preventDefault();\n };\n\n /**\n * Remove the visual indicator from the calendar UI that was\n * added by the dragoverHandler.\n *\n * @param {event} e The drop event\n */\n var dropHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n removeDropZoneIndicator();\n var target = getTargetFromEvent(e);\n\n if (!target) {\n return;\n }\n\n updateHoverState(target, false);\n e.preventDefault();\n };\n\n return {\n /**\n * Initialise the event handlers for the drag events.\n *\n * @param {object} rootElement The element containing calendar nav links\n */\n init: function(rootElement) {\n // Only register the handlers once on the first load.\n if (!registered) {\n // These handlers are only added the first time the module\n // is loaded because we don't want to have a new listener\n // added each time the \"init\" function is called otherwise we'll\n // end up with lots of stale handlers.\n document.addEventListener('dragstart', dragstartHandler, false);\n document.addEventListener('dragover', dragoverHandler, false);\n document.addEventListener('dragleave', dragleaveHandler, false);\n document.addEventListener('drop', dropHandler, false);\n document.addEventListener('dragend', removeDropZoneIndicator, false);\n registered = true;\n }\n\n // Update the module variable to operate on the given\n // root element.\n root = $(rootElement);\n\n // If we're currently dragging then add the indicators.\n if (DataStore.hasEventId()) {\n addDropZoneIndicator();\n }\n },\n };\n});\n"],"file":"month_navigation_drag_drop.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/month_view_drag_drop.min.js.map b/calendar/amd/build/month_view_drag_drop.min.js.map index a0053f93ee2..65f3f5d8a5a 100644 --- a/calendar/amd/build/month_view_drag_drop.min.js.map +++ b/calendar/amd/build/month_view_drag_drop.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/month_view_drag_drop.js"],"names":["define","$","Notification","Str","CalendarEvents","DataStore","SELECTORS","ROOT","DRAGGABLE","DROP_ZONE","WEEK","INVALID_DROP_ZONE_CLASS","INVALID_HOVER_CLASS","VALID_HOVER_CLASS","ALL_CLASSES","registered","getDropZoneFromEvent","e","dropZone","target","closest","length","isValidDropZone","dropTimestamp","attr","minTimestart","getMinTimestart","maxTimestart","getMaxTimestart","getDropZoneError","getMinError","getMaxError","clearAllDropZonesState","find","each","index","removeClass","updateHoverState","hovered","count","getDurationDays","valid","addClass","nextDropZone","next","nextWeek","children","first","updateAllDropZonesState","dragstartHandler","draggableElement","eventElement","eventId","minError","maxError","eventsSelector","duration","setEventId","setDurationDays","setMinTimestart","setMaxTimestart","setMinError","setMaxError","dataTransfer","effectAllowed","dropEffect","setData","dragoverHandler","hasEventId","preventDefault","dragleaveHandler","dropHandler","clearAll","getEventId","eventElementSelector","origin","trigger","moveEvent","message","get_string","then","string","exception","name","dragendHandler","calendarMonthChangedHandler","init","document","addEventListener","on","monthChanged"],"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 .\n\n/**\n * A javascript module to handle calendar drag and drop in the calendar\n * month view.\n *\n * @module core_calendar/month_view_drag_drop\n * @class month_view_drag_drop\n * @package core_calendar\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/notification',\n 'core/str',\n 'core_calendar/events',\n 'core_calendar/drag_drop_data_store'\n ],\n function(\n $,\n Notification,\n Str,\n CalendarEvents,\n DataStore\n ) {\n\n var SELECTORS = {\n ROOT: \"[data-region='calendar']\",\n DRAGGABLE: '[draggable=\"true\"][data-region=\"event-item\"]',\n DROP_ZONE: '[data-drop-zone=\"month-view-day\"]',\n WEEK: '[data-region=\"month-view-week\"]',\n };\n var INVALID_DROP_ZONE_CLASS = 'bg-faded';\n var INVALID_HOVER_CLASS = 'bg-danger text-white';\n var VALID_HOVER_CLASS = 'bg-primary text-white';\n var ALL_CLASSES = INVALID_DROP_ZONE_CLASS + ' ' + INVALID_HOVER_CLASS + ' ' + VALID_HOVER_CLASS;\n /* @var {bool} registered If the event listeners have been added */\n var registered = false;\n\n /**\n * Get the correct drop zone element from the given javascript\n * event.\n *\n * @param {event} e The javascript event\n * @return {object|null}\n */\n var getDropZoneFromEvent = function(e) {\n var dropZone = $(e.target).closest(SELECTORS.DROP_ZONE);\n return (dropZone.length) ? dropZone : null;\n };\n\n /**\n * Determine if the given dropzone element is within the acceptable\n * time range.\n *\n * The drop zone timestamp is midnight on that day so we should check\n * that the event's acceptable timestart value\n *\n * @param {object} dropZone The drop zone day from the calendar\n * @return {bool}\n */\n var isValidDropZone = function(dropZone) {\n var dropTimestamp = dropZone.attr('data-day-timestamp');\n var minTimestart = DataStore.getMinTimestart();\n var maxTimestart = DataStore.getMaxTimestart();\n\n if (minTimestart && minTimestart > dropTimestamp) {\n return false;\n }\n\n if (maxTimestart && maxTimestart < dropTimestamp) {\n return false;\n }\n\n return true;\n };\n\n /**\n * Get the error string to display for a given drop zone element\n * if it is invalid.\n *\n * @param {object} dropZone The drop zone day from the calendar\n * @return {string}\n */\n var getDropZoneError = function(dropZone) {\n var dropTimestamp = dropZone.attr('data-day-timestamp');\n var minTimestart = DataStore.getMinTimestart();\n var maxTimestart = DataStore.getMaxTimestart();\n\n if (minTimestart && minTimestart > dropTimestamp) {\n return DataStore.getMinError();\n }\n\n if (maxTimestart && maxTimestart < dropTimestamp) {\n return DataStore.getMaxError();\n }\n\n return null;\n };\n\n /**\n * Remove all of the styling from each of the drop zones in the calendar.\n */\n var clearAllDropZonesState = function() {\n $(SELECTORS.ROOT).find(SELECTORS.DROP_ZONE).each(function(index, dropZone) {\n dropZone = $(dropZone);\n dropZone.removeClass(ALL_CLASSES);\n });\n };\n\n /**\n * Update the hover state for the event in the calendar to reflect\n * which days the event will be moved to.\n *\n * If the drop zone is not being hovered then it will apply some\n * styling to reflect whether the drop zone is a valid or invalid\n * drop place for the current dragging event.\n *\n * This funciton supports events spanning multiple days and will\n * recurse to highlight (or remove highlight) each of the days\n * that the event will be moved to.\n *\n * For example: An event with a duration of 3 days will have\n * 3 days highlighted when it's dragged elsewhere in the calendar.\n * The current drag target and the 2 days following it (including\n * wrapping to the next week if necessary).\n *\n * @param {string|object} target The drag target element\n * @param {bool} hovered If the target is hovered or not\n * @param {int} count How many days to highlight (default to duration)\n */\n var updateHoverState = function(dropZone, hovered, count) {\n if (typeof count === 'undefined') {\n // This is how many days we need to highlight.\n count = DataStore.getDurationDays();\n }\n\n var valid = isValidDropZone(dropZone);\n dropZone.removeClass(ALL_CLASSES);\n\n if (hovered) {\n\n if (valid) {\n dropZone.addClass(VALID_HOVER_CLASS);\n } else {\n dropZone.addClass(INVALID_HOVER_CLASS);\n }\n } else {\n dropZone.removeClass(VALID_HOVER_CLASS + ' ' + INVALID_HOVER_CLASS);\n\n if (!valid) {\n dropZone.addClass(INVALID_DROP_ZONE_CLASS);\n }\n }\n\n count--;\n\n // If we've still got days to highlight then we should\n // find the next day.\n if (count > 0) {\n var nextDropZone = dropZone.next();\n\n // If there are no more days in this week then we\n // need to move down to the next week in the calendar.\n if (!nextDropZone.length) {\n var nextWeek = dropZone.closest(SELECTORS.WEEK).next();\n\n if (nextWeek.length) {\n nextDropZone = nextWeek.children(SELECTORS.DROP_ZONE).first();\n }\n }\n\n // If we found another day then let's recursively\n // update it's hover state.\n if (nextDropZone.length) {\n updateHoverState(nextDropZone, hovered, count);\n }\n }\n };\n\n /**\n * Find all of the calendar event drop zones in the calendar and update the display\n * for the user to indicate which zones are valid and invalid.\n */\n var updateAllDropZonesState = function() {\n $(SELECTORS.ROOT).find(SELECTORS.DROP_ZONE).each(function(index, dropZone) {\n dropZone = $(dropZone);\n\n if (!isValidDropZone(dropZone)) {\n updateHoverState(dropZone, false);\n }\n });\n };\n\n\n /**\n * Set up the module level variables to track which event is being\n * dragged and how many days it spans.\n *\n * @param {event} e The dragstart event\n */\n var dragstartHandler = function(e) {\n var target = $(e.target);\n var draggableElement = target.closest(SELECTORS.DRAGGABLE);\n\n if (!draggableElement.length) {\n return;\n }\n\n var eventElement = draggableElement.find('[data-event-id]');\n var eventId = eventElement.attr('data-event-id');\n var minTimestart = draggableElement.attr('data-min-day-timestamp');\n var maxTimestart = draggableElement.attr('data-max-day-timestamp');\n var minError = draggableElement.attr('data-min-day-error');\n var maxError = draggableElement.attr('data-max-day-error');\n var eventsSelector = SELECTORS.ROOT + ' [data-event-id=\"' + eventId + '\"]';\n var duration = $(eventsSelector).length;\n\n DataStore.setEventId(eventId);\n DataStore.setDurationDays(duration);\n\n if (minTimestart) {\n DataStore.setMinTimestart(minTimestart);\n }\n\n if (maxTimestart) {\n DataStore.setMaxTimestart(maxTimestart);\n }\n\n if (minError) {\n DataStore.setMinError(minError);\n }\n\n if (maxError) {\n DataStore.setMaxError(maxError);\n }\n\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.dropEffect = \"move\";\n // Firefox requires a value to be set here or the drag won't\n // work and the dragover handler won't fire.\n e.dataTransfer.setData('text/plain', eventId);\n e.dropEffect = \"move\";\n\n updateAllDropZonesState();\n };\n\n /**\n * Update the hover state of the target day element when\n * the user is dragging an event over it.\n *\n * This will add a visual indicator to the calendar UI to\n * indicate which day(s) the event will be moved to.\n *\n * @param {event} e The dragstart event\n */\n var dragoverHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n e.preventDefault();\n\n var dropZone = getDropZoneFromEvent(e);\n\n if (!dropZone) {\n return;\n }\n\n updateHoverState(dropZone, true);\n };\n\n /**\n * Update the hover state of the target day element that was\n * previously dragged over but has is no longer a drag target.\n *\n * This will remove the visual indicator from the calendar UI\n * that was added by the dragoverHandler.\n *\n * @param {event} e The dragstart event\n */\n var dragleaveHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n var dropZone = getDropZoneFromEvent(e);\n\n if (!dropZone) {\n return;\n }\n\n updateHoverState(dropZone, false);\n e.preventDefault();\n };\n\n /**\n * Determines the event element, origin day, and destination day\n * once the user drops the calendar event. These three bits of data\n * are provided as the payload to the \"moveEvent\" calendar javascript\n * event that is fired.\n *\n * This will remove the visual indicator from the calendar UI\n * that was added by the dragoverHandler.\n *\n * @param {event} e The dragstart event\n */\n var dropHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n var dropZone = getDropZoneFromEvent(e);\n\n if (!dropZone) {\n DataStore.clearAll();\n clearAllDropZonesState();\n return;\n }\n\n if (isValidDropZone(dropZone)) {\n var eventId = DataStore.getEventId();\n var eventElementSelector = SELECTORS.ROOT + ' [data-event-id=\"' + eventId + '\"]';\n var eventElement = $(eventElementSelector);\n var origin = null;\n\n if (eventElement.length) {\n origin = eventElement.closest(SELECTORS.DROP_ZONE);\n }\n\n $('body').trigger(CalendarEvents.moveEvent, [eventId, origin, dropZone]);\n } else {\n // If the drop zone is not valid then there is not need for us to\n // try to process it. Instead we can just show an error to the user.\n var message = getDropZoneError(dropZone);\n Str.get_string('errorinvaliddate', 'calendar').then(function(string) {\n Notification.exception({\n name: string,\n message: message || string\n });\n });\n }\n\n DataStore.clearAll();\n clearAllDropZonesState();\n\n e.preventDefault();\n };\n\n /**\n * Clear the data store and remove the drag indicators from the UI\n * when the drag event has finished.\n */\n var dragendHandler = function() {\n DataStore.clearAll();\n clearAllDropZonesState();\n };\n\n /**\n * Re-render the drop zones in the new month to highlight\n * which areas are or aren't acceptable to drop the calendar\n * event.\n */\n var calendarMonthChangedHandler = function() {\n updateAllDropZonesState();\n };\n\n return {\n /**\n * Initialise the event handlers for the drag events.\n */\n init: function() {\n if (!registered) {\n // These handlers are only added the first time the module\n // is loaded because we don't want to have a new listener\n // added each time the \"init\" function is called otherwise we'll\n // end up with lots of stale handlers.\n document.addEventListener('dragstart', dragstartHandler, false);\n document.addEventListener('dragover', dragoverHandler, false);\n document.addEventListener('dragleave', dragleaveHandler, false);\n document.addEventListener('drop', dropHandler, false);\n document.addEventListener('dragend', dragendHandler, false);\n $('body').on(CalendarEvents.monthChanged, calendarMonthChangedHandler);\n registered = true;\n }\n },\n };\n});\n"],"file":"month_view_drag_drop.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/month_view_drag_drop.js"],"names":["define","$","Notification","Str","CalendarEvents","DataStore","SELECTORS","ROOT","DRAGGABLE","DROP_ZONE","WEEK","INVALID_DROP_ZONE_CLASS","INVALID_HOVER_CLASS","VALID_HOVER_CLASS","ALL_CLASSES","registered","getDropZoneFromEvent","e","dropZone","target","closest","length","isValidDropZone","dropTimestamp","attr","minTimestart","getMinTimestart","maxTimestart","getMaxTimestart","getDropZoneError","getMinError","getMaxError","clearAllDropZonesState","find","each","index","removeClass","updateHoverState","hovered","count","getDurationDays","valid","addClass","nextDropZone","next","nextWeek","children","first","updateAllDropZonesState","dragstartHandler","draggableElement","eventElement","eventId","minError","maxError","eventsSelector","duration","setEventId","setDurationDays","setMinTimestart","setMaxTimestart","setMinError","setMaxError","dataTransfer","effectAllowed","dropEffect","setData","dragoverHandler","hasEventId","preventDefault","dragleaveHandler","dropHandler","clearAll","getEventId","eventElementSelector","origin","trigger","moveEvent","message","get_string","then","string","exception","name","dragendHandler","calendarMonthChangedHandler","init","document","addEventListener","on","monthChanged"],"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 .\n\n/**\n * A javascript module to handle calendar drag and drop in the calendar\n * month view.\n *\n * @module core_calendar/month_view_drag_drop\n * @class month_view_drag_drop\n * @copyright 2017 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/notification',\n 'core/str',\n 'core_calendar/events',\n 'core_calendar/drag_drop_data_store'\n ],\n function(\n $,\n Notification,\n Str,\n CalendarEvents,\n DataStore\n ) {\n\n var SELECTORS = {\n ROOT: \"[data-region='calendar']\",\n DRAGGABLE: '[draggable=\"true\"][data-region=\"event-item\"]',\n DROP_ZONE: '[data-drop-zone=\"month-view-day\"]',\n WEEK: '[data-region=\"month-view-week\"]',\n };\n var INVALID_DROP_ZONE_CLASS = 'bg-faded';\n var INVALID_HOVER_CLASS = 'bg-danger text-white';\n var VALID_HOVER_CLASS = 'bg-primary text-white';\n var ALL_CLASSES = INVALID_DROP_ZONE_CLASS + ' ' + INVALID_HOVER_CLASS + ' ' + VALID_HOVER_CLASS;\n /* @var {bool} registered If the event listeners have been added */\n var registered = false;\n\n /**\n * Get the correct drop zone element from the given javascript\n * event.\n *\n * @param {event} e The javascript event\n * @return {object|null}\n */\n var getDropZoneFromEvent = function(e) {\n var dropZone = $(e.target).closest(SELECTORS.DROP_ZONE);\n return (dropZone.length) ? dropZone : null;\n };\n\n /**\n * Determine if the given dropzone element is within the acceptable\n * time range.\n *\n * The drop zone timestamp is midnight on that day so we should check\n * that the event's acceptable timestart value\n *\n * @param {object} dropZone The drop zone day from the calendar\n * @return {bool}\n */\n var isValidDropZone = function(dropZone) {\n var dropTimestamp = dropZone.attr('data-day-timestamp');\n var minTimestart = DataStore.getMinTimestart();\n var maxTimestart = DataStore.getMaxTimestart();\n\n if (minTimestart && minTimestart > dropTimestamp) {\n return false;\n }\n\n if (maxTimestart && maxTimestart < dropTimestamp) {\n return false;\n }\n\n return true;\n };\n\n /**\n * Get the error string to display for a given drop zone element\n * if it is invalid.\n *\n * @param {object} dropZone The drop zone day from the calendar\n * @return {string}\n */\n var getDropZoneError = function(dropZone) {\n var dropTimestamp = dropZone.attr('data-day-timestamp');\n var minTimestart = DataStore.getMinTimestart();\n var maxTimestart = DataStore.getMaxTimestart();\n\n if (minTimestart && minTimestart > dropTimestamp) {\n return DataStore.getMinError();\n }\n\n if (maxTimestart && maxTimestart < dropTimestamp) {\n return DataStore.getMaxError();\n }\n\n return null;\n };\n\n /**\n * Remove all of the styling from each of the drop zones in the calendar.\n */\n var clearAllDropZonesState = function() {\n $(SELECTORS.ROOT).find(SELECTORS.DROP_ZONE).each(function(index, dropZone) {\n dropZone = $(dropZone);\n dropZone.removeClass(ALL_CLASSES);\n });\n };\n\n /**\n * Update the hover state for the event in the calendar to reflect\n * which days the event will be moved to.\n *\n * If the drop zone is not being hovered then it will apply some\n * styling to reflect whether the drop zone is a valid or invalid\n * drop place for the current dragging event.\n *\n * This funciton supports events spanning multiple days and will\n * recurse to highlight (or remove highlight) each of the days\n * that the event will be moved to.\n *\n * For example: An event with a duration of 3 days will have\n * 3 days highlighted when it's dragged elsewhere in the calendar.\n * The current drag target and the 2 days following it (including\n * wrapping to the next week if necessary).\n *\n * @param {string|object} target The drag target element\n * @param {bool} hovered If the target is hovered or not\n * @param {int} count How many days to highlight (default to duration)\n */\n var updateHoverState = function(dropZone, hovered, count) {\n if (typeof count === 'undefined') {\n // This is how many days we need to highlight.\n count = DataStore.getDurationDays();\n }\n\n var valid = isValidDropZone(dropZone);\n dropZone.removeClass(ALL_CLASSES);\n\n if (hovered) {\n\n if (valid) {\n dropZone.addClass(VALID_HOVER_CLASS);\n } else {\n dropZone.addClass(INVALID_HOVER_CLASS);\n }\n } else {\n dropZone.removeClass(VALID_HOVER_CLASS + ' ' + INVALID_HOVER_CLASS);\n\n if (!valid) {\n dropZone.addClass(INVALID_DROP_ZONE_CLASS);\n }\n }\n\n count--;\n\n // If we've still got days to highlight then we should\n // find the next day.\n if (count > 0) {\n var nextDropZone = dropZone.next();\n\n // If there are no more days in this week then we\n // need to move down to the next week in the calendar.\n if (!nextDropZone.length) {\n var nextWeek = dropZone.closest(SELECTORS.WEEK).next();\n\n if (nextWeek.length) {\n nextDropZone = nextWeek.children(SELECTORS.DROP_ZONE).first();\n }\n }\n\n // If we found another day then let's recursively\n // update it's hover state.\n if (nextDropZone.length) {\n updateHoverState(nextDropZone, hovered, count);\n }\n }\n };\n\n /**\n * Find all of the calendar event drop zones in the calendar and update the display\n * for the user to indicate which zones are valid and invalid.\n */\n var updateAllDropZonesState = function() {\n $(SELECTORS.ROOT).find(SELECTORS.DROP_ZONE).each(function(index, dropZone) {\n dropZone = $(dropZone);\n\n if (!isValidDropZone(dropZone)) {\n updateHoverState(dropZone, false);\n }\n });\n };\n\n\n /**\n * Set up the module level variables to track which event is being\n * dragged and how many days it spans.\n *\n * @param {event} e The dragstart event\n */\n var dragstartHandler = function(e) {\n var target = $(e.target);\n var draggableElement = target.closest(SELECTORS.DRAGGABLE);\n\n if (!draggableElement.length) {\n return;\n }\n\n var eventElement = draggableElement.find('[data-event-id]');\n var eventId = eventElement.attr('data-event-id');\n var minTimestart = draggableElement.attr('data-min-day-timestamp');\n var maxTimestart = draggableElement.attr('data-max-day-timestamp');\n var minError = draggableElement.attr('data-min-day-error');\n var maxError = draggableElement.attr('data-max-day-error');\n var eventsSelector = SELECTORS.ROOT + ' [data-event-id=\"' + eventId + '\"]';\n var duration = $(eventsSelector).length;\n\n DataStore.setEventId(eventId);\n DataStore.setDurationDays(duration);\n\n if (minTimestart) {\n DataStore.setMinTimestart(minTimestart);\n }\n\n if (maxTimestart) {\n DataStore.setMaxTimestart(maxTimestart);\n }\n\n if (minError) {\n DataStore.setMinError(minError);\n }\n\n if (maxError) {\n DataStore.setMaxError(maxError);\n }\n\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.dropEffect = \"move\";\n // Firefox requires a value to be set here or the drag won't\n // work and the dragover handler won't fire.\n e.dataTransfer.setData('text/plain', eventId);\n e.dropEffect = \"move\";\n\n updateAllDropZonesState();\n };\n\n /**\n * Update the hover state of the target day element when\n * the user is dragging an event over it.\n *\n * This will add a visual indicator to the calendar UI to\n * indicate which day(s) the event will be moved to.\n *\n * @param {event} e The dragstart event\n */\n var dragoverHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n e.preventDefault();\n\n var dropZone = getDropZoneFromEvent(e);\n\n if (!dropZone) {\n return;\n }\n\n updateHoverState(dropZone, true);\n };\n\n /**\n * Update the hover state of the target day element that was\n * previously dragged over but has is no longer a drag target.\n *\n * This will remove the visual indicator from the calendar UI\n * that was added by the dragoverHandler.\n *\n * @param {event} e The dragstart event\n */\n var dragleaveHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n var dropZone = getDropZoneFromEvent(e);\n\n if (!dropZone) {\n return;\n }\n\n updateHoverState(dropZone, false);\n e.preventDefault();\n };\n\n /**\n * Determines the event element, origin day, and destination day\n * once the user drops the calendar event. These three bits of data\n * are provided as the payload to the \"moveEvent\" calendar javascript\n * event that is fired.\n *\n * This will remove the visual indicator from the calendar UI\n * that was added by the dragoverHandler.\n *\n * @param {event} e The dragstart event\n */\n var dropHandler = function(e) {\n // Ignore dragging of non calendar events.\n if (!DataStore.hasEventId()) {\n return;\n }\n\n var dropZone = getDropZoneFromEvent(e);\n\n if (!dropZone) {\n DataStore.clearAll();\n clearAllDropZonesState();\n return;\n }\n\n if (isValidDropZone(dropZone)) {\n var eventId = DataStore.getEventId();\n var eventElementSelector = SELECTORS.ROOT + ' [data-event-id=\"' + eventId + '\"]';\n var eventElement = $(eventElementSelector);\n var origin = null;\n\n if (eventElement.length) {\n origin = eventElement.closest(SELECTORS.DROP_ZONE);\n }\n\n $('body').trigger(CalendarEvents.moveEvent, [eventId, origin, dropZone]);\n } else {\n // If the drop zone is not valid then there is not need for us to\n // try to process it. Instead we can just show an error to the user.\n var message = getDropZoneError(dropZone);\n Str.get_string('errorinvaliddate', 'calendar').then(function(string) {\n Notification.exception({\n name: string,\n message: message || string\n });\n });\n }\n\n DataStore.clearAll();\n clearAllDropZonesState();\n\n e.preventDefault();\n };\n\n /**\n * Clear the data store and remove the drag indicators from the UI\n * when the drag event has finished.\n */\n var dragendHandler = function() {\n DataStore.clearAll();\n clearAllDropZonesState();\n };\n\n /**\n * Re-render the drop zones in the new month to highlight\n * which areas are or aren't acceptable to drop the calendar\n * event.\n */\n var calendarMonthChangedHandler = function() {\n updateAllDropZonesState();\n };\n\n return {\n /**\n * Initialise the event handlers for the drag events.\n */\n init: function() {\n if (!registered) {\n // These handlers are only added the first time the module\n // is loaded because we don't want to have a new listener\n // added each time the \"init\" function is called otherwise we'll\n // end up with lots of stale handlers.\n document.addEventListener('dragstart', dragstartHandler, false);\n document.addEventListener('dragover', dragoverHandler, false);\n document.addEventListener('dragleave', dragleaveHandler, false);\n document.addEventListener('drop', dropHandler, false);\n document.addEventListener('dragend', dragendHandler, false);\n $('body').on(CalendarEvents.monthChanged, calendarMonthChangedHandler);\n registered = true;\n }\n },\n };\n});\n"],"file":"month_view_drag_drop.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/repository.min.js.map b/calendar/amd/build/repository.min.js.map index 1cace37b8a2..8792399bd7d 100644 --- a/calendar/amd/build/repository.min.js.map +++ b/calendar/amd/build/repository.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/repository.js"],"names":["deleteEvent","eventId","deleteSeries","Ajax","call","methodname","args","events","eventid","repeat","getEventById","submitCreateUpdateForm","formData","formdata","getCalendarMonthData","year","month","courseId","categoryId","includeNavigation","mini","day","courseid","categoryid","includenavigation","getCalendarDayData","updateEventStartDay","dayTimestamp","daytimestamp","getCalendarUpcomingData","getCourseGroupsData"],"mappings":"sTAwBA,uDAUO,GAAMA,CAAAA,CAAW,CAAG,SAACC,CAAD,CAAmC,IAAzBC,CAAAA,CAAyB,2DAW1D,MAAOC,WAAKC,IAAL,CAAU,CAVD,CACZC,UAAU,CAAE,sCADA,CAEZC,IAAI,CAAE,CACFC,MAAM,CAAE,CAAC,CACLC,OAAO,CAAEP,CADJ,CAELQ,MAAM,CAAEP,CAFH,CAAD,CADN,CAFM,CAUC,CAAV,EAAqB,CAArB,CACV,CAZM,C,gBAqBA,GAAMQ,CAAAA,CAAY,CAAG,SAACT,CAAD,CAAa,CASrC,MAAOE,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,wCADA,CAEZC,IAAI,CAAE,CACFE,OAAO,CAAEP,CADP,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CAVM,C,iBAmBA,GAAMU,CAAAA,CAAsB,CAAG,SAACC,CAAD,CAAc,CAQhD,MAAOT,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,yCADA,CAEZC,IAAI,CAAE,CACFO,QAAQ,CAAED,CADR,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C,2BAwBA,GAAME,CAAAA,CAAoB,CAAG,SAACC,CAAD,CAAOC,CAAP,CAAcC,CAAd,CAAwBC,CAAxB,CAAoCC,CAApC,CAAuDC,CAAvD,CAAyE,IAAZC,CAAAA,CAAY,wDAAN,CAAM,CAczG,MAAOlB,WAAKC,IAAL,CAAU,CAbD,CACZC,UAAU,CAAE,yCADA,CAEZC,IAAI,CAAE,CACFS,IAAI,CAAJA,CADE,CAEFC,KAAK,CAALA,CAFE,CAGFM,QAAQ,CAAEL,CAHR,CAIFM,UAAU,CAAEL,CAJV,CAKFM,iBAAiB,CAAEL,CALjB,CAMFC,IAAI,CAAJA,CANE,CAOFC,GAAG,CAAHA,CAPE,CAFM,CAaC,CAAV,EAAqB,CAArB,CACV,CAfM,C,yBA4BA,GAAMI,CAAAA,CAAkB,CAAG,SAACV,CAAD,CAAOC,CAAP,CAAcK,CAAd,CAAmBJ,CAAnB,CAA6BC,CAA7B,CAA4C,CAY1E,MAAOf,WAAKC,IAAL,CAAU,CAXD,CACZC,UAAU,CAAE,qCADA,CAEZC,IAAI,CAAE,CACFS,IAAI,CAAJA,CADE,CAEFC,KAAK,CAALA,CAFE,CAGFK,GAAG,CAAHA,CAHE,CAIFC,QAAQ,CAAEL,CAJR,CAKFM,UAAU,CAAEL,CALV,CAFM,CAWC,CAAV,EAAqB,CAArB,CACV,CAbM,C,uBAwBA,GAAMQ,CAAAA,CAAmB,CAAG,SAACzB,CAAD,CAAU0B,CAAV,CAA2B,CAS1D,MAAOxB,WAAKC,IAAL,CAAU,CARD,CACZC,UAAU,CAAE,sCADA,CAEZC,IAAI,CAAE,CACFE,OAAO,CAAEP,CADP,CAEF2B,YAAY,CAAED,CAFZ,CAFM,CAQC,CAAV,EAAqB,CAArB,CACV,CAVM,C,wBAoBA,GAAME,CAAAA,CAAuB,CAAG,SAACZ,CAAD,CAAWC,CAAX,CAA0B,CAS7D,MAAOf,WAAKC,IAAL,CAAU,CARD,CACZC,UAAU,CAAE,0CADA,CAEZC,IAAI,CAAE,CACFgB,QAAQ,CAAEL,CADR,CAEFM,UAAU,CAAEL,CAFV,CAFM,CAQC,CAAV,EAAqB,CAArB,CACV,CAVM,C,4BAkBA,GAAMY,CAAAA,CAAmB,CAAG,SAACb,CAAD,CAAc,CAQ7C,MAAOd,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,8BADA,CAEZC,IAAI,CAAE,CACFgB,QAAQ,CAAEL,CADR,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C","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 .\n\n/**\n * A javascript module to handle calendar ajax actions.\n *\n * @module core_calendar/repository\n * @class repository\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport Ajax from 'core/ajax';\n\n/**\n * Delete a calendar event.\n *\n * @method deleteEvent\n * @param {number} eventId The event id.\n * @param {boolean} deleteSeries Whether to delete all events in the series\n * @return {promise} Resolved with requested calendar event\n */\nexport const deleteEvent = (eventId, deleteSeries = false) => {\n const request = {\n methodname: 'core_calendar_delete_calendar_events',\n args: {\n events: [{\n eventid: eventId,\n repeat: deleteSeries,\n }]\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get a calendar event by id.\n *\n * @method getEventById\n * @param {number} eventId The event id.\n * @return {promise} Resolved with requested calendar event\n */\nexport const getEventById = (eventId) => {\n\n const request = {\n methodname: 'core_calendar_get_calendar_event_by_id',\n args: {\n eventid: eventId\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Submit the form data for the event form.\n *\n * @method submitCreateUpdateForm\n * @param {string} formData The URL encoded values from the form\n * @return {promise} Resolved with the new or edited event\n */\nexport const submitCreateUpdateForm = (formData) => {\n const request = {\n methodname: 'core_calendar_submit_create_update_form',\n args: {\n formdata: formData\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get calendar data for the month view.\n *\n * @method getCalendarMonthData\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} courseId The course id.\n * @param {number} categoryId The category id.\n * @param {boolean} includeNavigation Whether to include navigation.\n * @param {boolean} mini Whether the month is in mini view.\n * @param {number} day Day (optional)\n * @return {promise} Resolved with the month view data.\n */\nexport const getCalendarMonthData = (year, month, courseId, categoryId, includeNavigation, mini, day = 1) => {\n const request = {\n methodname: 'core_calendar_get_calendar_monthly_view',\n args: {\n year,\n month,\n courseid: courseId,\n categoryid: categoryId,\n includenavigation: includeNavigation,\n mini,\n day,\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get calendar data for the day view.\n *\n * @method getCalendarDayData\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} day Day\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @return {promise} Resolved with the day view data.\n */\nexport const getCalendarDayData = (year, month, day, courseId, categoryId) => {\n const request = {\n methodname: 'core_calendar_get_calendar_day_view',\n args: {\n year,\n month,\n day,\n courseid: courseId,\n categoryid: categoryId,\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Change the start day for the given event id. The day timestamp\n * only has to be any time during the target day because only the\n * date information is extracted, the time of the day is ignored.\n *\n * @param {int} eventId The id of the event to update\n * @param {int} dayTimestamp A timestamp for some time during the target day\n * @return {promise}\n */\nexport const updateEventStartDay = (eventId, dayTimestamp) => {\n const request = {\n methodname: 'core_calendar_update_event_start_day',\n args: {\n eventid: eventId,\n daytimestamp: dayTimestamp\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get calendar upcoming data.\n *\n * @method getCalendarUpcomingData\n * @param {number} courseId The course id.\n * @param {number} categoryId The category id.\n * @return {promise} Resolved with the month view data.\n */\nexport const getCalendarUpcomingData = (courseId, categoryId) => {\n const request = {\n methodname: 'core_calendar_get_calendar_upcoming_view',\n args: {\n courseid: courseId,\n categoryid: categoryId,\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get the groups by course id.\n *\n * @param {Number} courseId The course id to fetch the groups from.\n * @return {promise} Resolved with the course groups.\n */\nexport const getCourseGroupsData = (courseId) => {\n const request = {\n methodname: 'core_group_get_course_groups',\n args: {\n courseid: courseId\n }\n };\n\n return Ajax.call([request])[0];\n};\n"],"file":"repository.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/repository.js"],"names":["deleteEvent","eventId","deleteSeries","Ajax","call","methodname","args","events","eventid","repeat","getEventById","submitCreateUpdateForm","formData","formdata","getCalendarMonthData","year","month","courseId","categoryId","includeNavigation","mini","day","courseid","categoryid","includenavigation","getCalendarDayData","updateEventStartDay","dayTimestamp","daytimestamp","getCalendarUpcomingData","getCourseGroupsData"],"mappings":"sTAuBA,uDAUO,GAAMA,CAAAA,CAAW,CAAG,SAACC,CAAD,CAAmC,IAAzBC,CAAAA,CAAyB,2DAW1D,MAAOC,WAAKC,IAAL,CAAU,CAVD,CACZC,UAAU,CAAE,sCADA,CAEZC,IAAI,CAAE,CACFC,MAAM,CAAE,CAAC,CACLC,OAAO,CAAEP,CADJ,CAELQ,MAAM,CAAEP,CAFH,CAAD,CADN,CAFM,CAUC,CAAV,EAAqB,CAArB,CACV,CAZM,C,gBAqBA,GAAMQ,CAAAA,CAAY,CAAG,SAACT,CAAD,CAAa,CASrC,MAAOE,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,wCADA,CAEZC,IAAI,CAAE,CACFE,OAAO,CAAEP,CADP,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CAVM,C,iBAmBA,GAAMU,CAAAA,CAAsB,CAAG,SAACC,CAAD,CAAc,CAQhD,MAAOT,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,yCADA,CAEZC,IAAI,CAAE,CACFO,QAAQ,CAAED,CADR,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C,2BAwBA,GAAME,CAAAA,CAAoB,CAAG,SAACC,CAAD,CAAOC,CAAP,CAAcC,CAAd,CAAwBC,CAAxB,CAAoCC,CAApC,CAAuDC,CAAvD,CAAyE,IAAZC,CAAAA,CAAY,wDAAN,CAAM,CAczG,MAAOlB,WAAKC,IAAL,CAAU,CAbD,CACZC,UAAU,CAAE,yCADA,CAEZC,IAAI,CAAE,CACFS,IAAI,CAAJA,CADE,CAEFC,KAAK,CAALA,CAFE,CAGFM,QAAQ,CAAEL,CAHR,CAIFM,UAAU,CAAEL,CAJV,CAKFM,iBAAiB,CAAEL,CALjB,CAMFC,IAAI,CAAJA,CANE,CAOFC,GAAG,CAAHA,CAPE,CAFM,CAaC,CAAV,EAAqB,CAArB,CACV,CAfM,C,yBA4BA,GAAMI,CAAAA,CAAkB,CAAG,SAACV,CAAD,CAAOC,CAAP,CAAcK,CAAd,CAAmBJ,CAAnB,CAA6BC,CAA7B,CAA4C,CAY1E,MAAOf,WAAKC,IAAL,CAAU,CAXD,CACZC,UAAU,CAAE,qCADA,CAEZC,IAAI,CAAE,CACFS,IAAI,CAAJA,CADE,CAEFC,KAAK,CAALA,CAFE,CAGFK,GAAG,CAAHA,CAHE,CAIFC,QAAQ,CAAEL,CAJR,CAKFM,UAAU,CAAEL,CALV,CAFM,CAWC,CAAV,EAAqB,CAArB,CACV,CAbM,C,uBAwBA,GAAMQ,CAAAA,CAAmB,CAAG,SAACzB,CAAD,CAAU0B,CAAV,CAA2B,CAS1D,MAAOxB,WAAKC,IAAL,CAAU,CARD,CACZC,UAAU,CAAE,sCADA,CAEZC,IAAI,CAAE,CACFE,OAAO,CAAEP,CADP,CAEF2B,YAAY,CAAED,CAFZ,CAFM,CAQC,CAAV,EAAqB,CAArB,CACV,CAVM,C,wBAoBA,GAAME,CAAAA,CAAuB,CAAG,SAACZ,CAAD,CAAWC,CAAX,CAA0B,CAS7D,MAAOf,WAAKC,IAAL,CAAU,CARD,CACZC,UAAU,CAAE,0CADA,CAEZC,IAAI,CAAE,CACFgB,QAAQ,CAAEL,CADR,CAEFM,UAAU,CAAEL,CAFV,CAFM,CAQC,CAAV,EAAqB,CAArB,CACV,CAVM,C,4BAkBA,GAAMY,CAAAA,CAAmB,CAAG,SAACb,CAAD,CAAc,CAQ7C,MAAOd,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,8BADA,CAEZC,IAAI,CAAE,CACFgB,QAAQ,CAAEL,CADR,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C","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 .\n\n/**\n * A javascript module to handle calendar ajax actions.\n *\n * @module core_calendar/repository\n * @class repository\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport Ajax from 'core/ajax';\n\n/**\n * Delete a calendar event.\n *\n * @method deleteEvent\n * @param {number} eventId The event id.\n * @param {boolean} deleteSeries Whether to delete all events in the series\n * @return {promise} Resolved with requested calendar event\n */\nexport const deleteEvent = (eventId, deleteSeries = false) => {\n const request = {\n methodname: 'core_calendar_delete_calendar_events',\n args: {\n events: [{\n eventid: eventId,\n repeat: deleteSeries,\n }]\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get a calendar event by id.\n *\n * @method getEventById\n * @param {number} eventId The event id.\n * @return {promise} Resolved with requested calendar event\n */\nexport const getEventById = (eventId) => {\n\n const request = {\n methodname: 'core_calendar_get_calendar_event_by_id',\n args: {\n eventid: eventId\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Submit the form data for the event form.\n *\n * @method submitCreateUpdateForm\n * @param {string} formData The URL encoded values from the form\n * @return {promise} Resolved with the new or edited event\n */\nexport const submitCreateUpdateForm = (formData) => {\n const request = {\n methodname: 'core_calendar_submit_create_update_form',\n args: {\n formdata: formData\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get calendar data for the month view.\n *\n * @method getCalendarMonthData\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} courseId The course id.\n * @param {number} categoryId The category id.\n * @param {boolean} includeNavigation Whether to include navigation.\n * @param {boolean} mini Whether the month is in mini view.\n * @param {number} day Day (optional)\n * @return {promise} Resolved with the month view data.\n */\nexport const getCalendarMonthData = (year, month, courseId, categoryId, includeNavigation, mini, day = 1) => {\n const request = {\n methodname: 'core_calendar_get_calendar_monthly_view',\n args: {\n year,\n month,\n courseid: courseId,\n categoryid: categoryId,\n includenavigation: includeNavigation,\n mini,\n day,\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get calendar data for the day view.\n *\n * @method getCalendarDayData\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} day Day\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @return {promise} Resolved with the day view data.\n */\nexport const getCalendarDayData = (year, month, day, courseId, categoryId) => {\n const request = {\n methodname: 'core_calendar_get_calendar_day_view',\n args: {\n year,\n month,\n day,\n courseid: courseId,\n categoryid: categoryId,\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Change the start day for the given event id. The day timestamp\n * only has to be any time during the target day because only the\n * date information is extracted, the time of the day is ignored.\n *\n * @param {int} eventId The id of the event to update\n * @param {int} dayTimestamp A timestamp for some time during the target day\n * @return {promise}\n */\nexport const updateEventStartDay = (eventId, dayTimestamp) => {\n const request = {\n methodname: 'core_calendar_update_event_start_day',\n args: {\n eventid: eventId,\n daytimestamp: dayTimestamp\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get calendar upcoming data.\n *\n * @method getCalendarUpcomingData\n * @param {number} courseId The course id.\n * @param {number} categoryId The category id.\n * @return {promise} Resolved with the month view data.\n */\nexport const getCalendarUpcomingData = (courseId, categoryId) => {\n const request = {\n methodname: 'core_calendar_get_calendar_upcoming_view',\n args: {\n courseid: courseId,\n categoryid: categoryId,\n }\n };\n\n return Ajax.call([request])[0];\n};\n\n/**\n * Get the groups by course id.\n *\n * @param {Number} courseId The course id to fetch the groups from.\n * @return {promise} Resolved with the course groups.\n */\nexport const getCourseGroupsData = (courseId) => {\n const request = {\n methodname: 'core_group_get_course_groups',\n args: {\n courseid: courseId\n }\n };\n\n return Ajax.call([request])[0];\n};\n"],"file":"repository.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/selectors.min.js.map b/calendar/amd/build/selectors.min.js.map index cd5c94cd0e0..5e167210749 100644 --- a/calendar/amd/build/selectors.min.js.map +++ b/calendar/amd/build/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/selectors.js"],"names":["define","eventFilterItem","eventType","site","category","course","group","user","other","popoverType","calendarPeriods","month","courseSelector","viewSelector","actions","create","edit","remove","viewEvent","elements","today","day","calendarMain","wrapper","eventItem","links","navLink","eventLink","miniDayLink","containers","loadingIcon"],"mappings":"AAuBAA,OAAM,2BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,eAAe,CAAE,mCADd,CAEHC,SAAS,CAAE,CACPC,IAAI,CAAE,uBADC,CAEPC,QAAQ,CAAE,2BAFH,CAGPC,MAAM,CAAE,yBAHD,CAIPC,KAAK,CAAE,wBAJA,CAKPC,IAAI,CAAE,uBALC,CAMPC,KAAK,CAAE,wBANA,CAFR,CAUHC,WAAW,CAAE,CACTN,IAAI,CAAE,+BADG,CAETC,QAAQ,CAAE,mCAFD,CAGTC,MAAM,CAAE,iCAHC,CAITC,KAAK,CAAE,gCAJE,CAKTC,IAAI,CAAE,+BALG,CAMTC,KAAK,CAAE,gCANE,CAVV,CAkBHE,eAAe,CAAE,CACbC,KAAK,CAAE,uBADM,CAlBd,CAqBHC,cAAc,CAAE,yBArBb,CAsBHC,YAAY,CAAE,oCAtBX,CAuBHC,OAAO,CAAE,CACLC,MAAM,CAAE,oCADH,CAELC,IAAI,CAAE,wBAFD,CAGLC,MAAM,CAAE,0BAHH,CAILC,SAAS,CAAE,8BAJN,CAvBN,CA6BHC,QAAQ,CAAE,CACNP,cAAc,CAAE,yBADV,CA7BP,CAgCHQ,KAAK,CAAE,QAhCJ,CAiCHC,GAAG,CAAE,uBAjCF,CAkCHC,YAAY,CAAE,4BAlCX,CAmCHC,OAAO,CAAE,kBAnCN,CAoCHC,SAAS,CAAE,uBApCR,CAqCHC,KAAK,CAAE,CACHC,OAAO,CAAE,8BADN,CAEHC,SAAS,CAAE,4BAFR,CAGHC,WAAW,CAAE,+BAHV,CArCJ,CA0CHC,UAAU,CAAE,CACRC,WAAW,CAAE,0CADL,CA1CT,CA8CV,CA/CK,CAAN","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 .\n\n/**\n * This module is responsible for the calendar filter.\n *\n * @module core_calendar/calendar_selectors\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n eventFilterItem: \"[data-action='filter-event-type']\",\n eventType: {\n site: \"[data-eventtype-site]\",\n category: \"[data-eventtype-category]\",\n course: \"[data-eventtype-course]\",\n group: \"[data-eventtype-group]\",\n user: \"[data-eventtype-user]\",\n other: \"[data-eventtype-other]\",\n },\n popoverType: {\n site: \"[data-popover-eventtype-site]\",\n category: \"[data-popover-eventtype-category]\",\n course: \"[data-popover-eventtype-course]\",\n group: \"[data-popover-eventtype-group]\",\n user: \"[data-popover-eventtype-user]\",\n other: \"[data-popover-eventtype-other]\",\n },\n calendarPeriods: {\n month: \"[data-period='month']\",\n },\n courseSelector: 'select[name=\"course\"]',\n viewSelector: 'div[data-region=\"view-selector\"]',\n actions: {\n create: '[data-action=\"new-event-button\"]',\n edit: '[data-action=\"edit\"]',\n remove: '[data-action=\"delete\"]',\n viewEvent: '[data-action=\"view-event\"]',\n },\n elements: {\n courseSelector: 'select[name=\"course\"]',\n },\n today: '.today',\n day: '[data-region=\"day\"]',\n calendarMain: '[data-region=\"calendar\"]',\n wrapper: '.calendarwrapper',\n eventItem: '[data-type=\"event\"]',\n links: {\n navLink: '.calendarwrapper .arrow_link',\n eventLink: \"[data-region='event-item']\",\n miniDayLink: \"[data-region='mini-day-link']\",\n },\n containers: {\n loadingIcon: '[data-region=\"overlay-icon-container\"]',\n },\n };\n});\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/selectors.js"],"names":["define","eventFilterItem","eventType","site","category","course","group","user","other","popoverType","calendarPeriods","month","courseSelector","viewSelector","actions","create","edit","remove","viewEvent","elements","today","day","calendarMain","wrapper","eventItem","links","navLink","eventLink","miniDayLink","containers","loadingIcon"],"mappings":"AAsBAA,OAAM,2BAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,eAAe,CAAE,mCADd,CAEHC,SAAS,CAAE,CACPC,IAAI,CAAE,uBADC,CAEPC,QAAQ,CAAE,2BAFH,CAGPC,MAAM,CAAE,yBAHD,CAIPC,KAAK,CAAE,wBAJA,CAKPC,IAAI,CAAE,uBALC,CAMPC,KAAK,CAAE,wBANA,CAFR,CAUHC,WAAW,CAAE,CACTN,IAAI,CAAE,+BADG,CAETC,QAAQ,CAAE,mCAFD,CAGTC,MAAM,CAAE,iCAHC,CAITC,KAAK,CAAE,gCAJE,CAKTC,IAAI,CAAE,+BALG,CAMTC,KAAK,CAAE,gCANE,CAVV,CAkBHE,eAAe,CAAE,CACbC,KAAK,CAAE,uBADM,CAlBd,CAqBHC,cAAc,CAAE,yBArBb,CAsBHC,YAAY,CAAE,oCAtBX,CAuBHC,OAAO,CAAE,CACLC,MAAM,CAAE,oCADH,CAELC,IAAI,CAAE,wBAFD,CAGLC,MAAM,CAAE,0BAHH,CAILC,SAAS,CAAE,8BAJN,CAvBN,CA6BHC,QAAQ,CAAE,CACNP,cAAc,CAAE,yBADV,CA7BP,CAgCHQ,KAAK,CAAE,QAhCJ,CAiCHC,GAAG,CAAE,uBAjCF,CAkCHC,YAAY,CAAE,4BAlCX,CAmCHC,OAAO,CAAE,kBAnCN,CAoCHC,SAAS,CAAE,uBApCR,CAqCHC,KAAK,CAAE,CACHC,OAAO,CAAE,8BADN,CAEHC,SAAS,CAAE,4BAFR,CAGHC,WAAW,CAAE,+BAHV,CArCJ,CA0CHC,UAAU,CAAE,CACRC,WAAW,CAAE,0CADL,CA1CT,CA8CV,CA/CK,CAAN","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 .\n\n/**\n * This module is responsible for the calendar filter.\n *\n * @module core_calendar/calendar_selectors\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n eventFilterItem: \"[data-action='filter-event-type']\",\n eventType: {\n site: \"[data-eventtype-site]\",\n category: \"[data-eventtype-category]\",\n course: \"[data-eventtype-course]\",\n group: \"[data-eventtype-group]\",\n user: \"[data-eventtype-user]\",\n other: \"[data-eventtype-other]\",\n },\n popoverType: {\n site: \"[data-popover-eventtype-site]\",\n category: \"[data-popover-eventtype-category]\",\n course: \"[data-popover-eventtype-course]\",\n group: \"[data-popover-eventtype-group]\",\n user: \"[data-popover-eventtype-user]\",\n other: \"[data-popover-eventtype-other]\",\n },\n calendarPeriods: {\n month: \"[data-period='month']\",\n },\n courseSelector: 'select[name=\"course\"]',\n viewSelector: 'div[data-region=\"view-selector\"]',\n actions: {\n create: '[data-action=\"new-event-button\"]',\n edit: '[data-action=\"edit\"]',\n remove: '[data-action=\"delete\"]',\n viewEvent: '[data-action=\"view-event\"]',\n },\n elements: {\n courseSelector: 'select[name=\"course\"]',\n },\n today: '.today',\n day: '[data-region=\"day\"]',\n calendarMain: '[data-region=\"calendar\"]',\n wrapper: '.calendarwrapper',\n eventItem: '[data-type=\"event\"]',\n links: {\n navLink: '.calendarwrapper .arrow_link',\n eventLink: \"[data-region='event-item']\",\n miniDayLink: \"[data-region='mini-day-link']\",\n },\n containers: {\n loadingIcon: '[data-region=\"overlay-icon-container\"]',\n },\n };\n});\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/summary_modal.min.js.map b/calendar/amd/build/summary_modal.min.js.map index 9146ef87058..bfc856849dd 100644 --- a/calendar/amd/build/summary_modal.min.js.map +++ b/calendar/amd/build/summary_modal.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/summary_modal.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","CalendarRepository","CalendarEvents","CalendarCrud","registered","SELECTORS","ROOT","EDIT_BUTTON","DELETE_BUTTON","ModalEventSummary","root","call","TYPE","prototype","Object","create","constructor","getEditButton","editButton","getFooter","find","getDeleteButton","deleteButton","getEventId","getBody","attr","getEventTitle","getEventCount","getEditUrl","isActionEvent","registerEventListeners","M","util","js_pending","getRoot","on","bodyRendered","getModal","data","eventTitle","eventId","eventCount","registerRemove","js_complete","bind","deleted","hide","events","activate","e","trigger","editActionEvent","editEvent","preventDefault","stopPropagation","originalEvent","register"],"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 .\n\n/**\n * A javascript module to handle summary modal.\n *\n * @module core_calendar/summary_modal\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/crud',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n CalendarRepository,\n CalendarEvents,\n CalendarCrud\n) {\n\n var registered = false;\n var SELECTORS = {\n ROOT: \"[data-region='summary-modal-container']\",\n EDIT_BUTTON: '[data-action=\"edit\"]',\n DELETE_BUTTON: '[data-action=\"delete\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalEventSummary = function(root) {\n Modal.call(this, root);\n };\n\n ModalEventSummary.TYPE = 'core_calendar-event_summary';\n ModalEventSummary.prototype = Object.create(Modal.prototype);\n ModalEventSummary.prototype.constructor = ModalEventSummary;\n\n /**\n * Get the edit button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getEditButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getEditButton = function() {\n if (typeof this.editButton == 'undefined') {\n this.editButton = this.getFooter().find(SELECTORS.EDIT_BUTTON);\n }\n\n return this.editButton;\n };\n\n /**\n * Get the delete button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getDeleteButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getDeleteButton = function() {\n if (typeof this.deleteButton == 'undefined') {\n this.deleteButton = this.getFooter().find(SELECTORS.DELETE_BUTTON);\n }\n\n return this.deleteButton;\n };\n\n /**\n * Get the id for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventId\n * @return {int}\n */\n ModalEventSummary.prototype.getEventId = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-id');\n };\n\n /**\n * Get the title for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventTitle\n * @return {String}\n */\n ModalEventSummary.prototype.getEventTitle = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-title');\n };\n\n /**\n * Get the number of events in the series for the event being shown in\n * this modal. This value is not cached because it will change\n * depending on which event is being displayed.\n *\n * @method getEventCount\n * @return {int}\n */\n ModalEventSummary.prototype.getEventCount = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-count');\n };\n\n /**\n * Get the url for the event being shown in this modal.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.getEditUrl = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-edit-url');\n };\n\n /**\n * Is this an action event.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.isActionEvent = function() {\n return (this.getBody().find(SELECTORS.ROOT).attr('data-action-event') == 'true');\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalEventSummary.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n // We have to wait for the modal to finish rendering in order to ensure that\n // the data-event-title property is available to use as the modal title.\n M.util.js_pending('core_calendar/summary_modal:registerEventListeners:bodyRendered');\n this.getRoot().on(ModalEvents.bodyRendered, function() {\n this.getModal().data({\n eventTitle: this.getEventTitle(),\n eventId: this.getEventId(),\n eventCount: this.getEventCount(),\n })\n .attr('data-type', 'event');\n CalendarCrud.registerRemove(this.getModal());\n M.util.js_complete('core_calendar/summary_modal:registerEventListeners:bodyRendered');\n }.bind(this));\n\n $('body').on(CalendarEvents.deleted, function() {\n // Close the dialogue on delete.\n this.hide();\n }.bind(this));\n\n CustomEvents.define(this.getEditButton(), [\n CustomEvents.events.activate\n ]);\n\n this.getEditButton().on(CustomEvents.events.activate, function(e, data) {\n if (this.isActionEvent()) {\n // Action events cannot be edited on the event form and must be redirected to the module UI.\n $('body').trigger(CalendarEvents.editActionEvent, [this.getEditUrl()]);\n } else {\n // When the edit button is clicked we fire an event for the calendar UI to handle.\n // We don't care how the UI chooses to handle it.\n $('body').trigger(CalendarEvents.editEvent, [this.getEventId()]);\n }\n\n // There is nothing else for us to do so let's hide.\n this.hide();\n\n // We've handled this event so no need to propagate it.\n e.preventDefault();\n e.stopPropagation();\n data.originalEvent.preventDefault();\n data.originalEvent.stopPropagation();\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalEventSummary.TYPE, ModalEventSummary, 'core_calendar/event_summary_modal');\n registered = true;\n }\n\n return ModalEventSummary;\n});\n"],"file":"summary_modal.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/summary_modal.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","CalendarRepository","CalendarEvents","CalendarCrud","registered","SELECTORS","ROOT","EDIT_BUTTON","DELETE_BUTTON","ModalEventSummary","root","call","TYPE","prototype","Object","create","constructor","getEditButton","editButton","getFooter","find","getDeleteButton","deleteButton","getEventId","getBody","attr","getEventTitle","getEventCount","getEditUrl","isActionEvent","registerEventListeners","M","util","js_pending","getRoot","on","bodyRendered","getModal","data","eventTitle","eventId","eventCount","registerRemove","js_complete","bind","deleted","hide","events","activate","e","trigger","editActionEvent","editEvent","preventDefault","stopPropagation","originalEvent","register"],"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 .\n\n/**\n * A javascript module to handle summary modal.\n *\n * @module core_calendar/summary_modal\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/crud',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n CalendarRepository,\n CalendarEvents,\n CalendarCrud\n) {\n\n var registered = false;\n var SELECTORS = {\n ROOT: \"[data-region='summary-modal-container']\",\n EDIT_BUTTON: '[data-action=\"edit\"]',\n DELETE_BUTTON: '[data-action=\"delete\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalEventSummary = function(root) {\n Modal.call(this, root);\n };\n\n ModalEventSummary.TYPE = 'core_calendar-event_summary';\n ModalEventSummary.prototype = Object.create(Modal.prototype);\n ModalEventSummary.prototype.constructor = ModalEventSummary;\n\n /**\n * Get the edit button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getEditButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getEditButton = function() {\n if (typeof this.editButton == 'undefined') {\n this.editButton = this.getFooter().find(SELECTORS.EDIT_BUTTON);\n }\n\n return this.editButton;\n };\n\n /**\n * Get the delete button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getDeleteButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getDeleteButton = function() {\n if (typeof this.deleteButton == 'undefined') {\n this.deleteButton = this.getFooter().find(SELECTORS.DELETE_BUTTON);\n }\n\n return this.deleteButton;\n };\n\n /**\n * Get the id for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventId\n * @return {int}\n */\n ModalEventSummary.prototype.getEventId = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-id');\n };\n\n /**\n * Get the title for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventTitle\n * @return {String}\n */\n ModalEventSummary.prototype.getEventTitle = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-title');\n };\n\n /**\n * Get the number of events in the series for the event being shown in\n * this modal. This value is not cached because it will change\n * depending on which event is being displayed.\n *\n * @method getEventCount\n * @return {int}\n */\n ModalEventSummary.prototype.getEventCount = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-count');\n };\n\n /**\n * Get the url for the event being shown in this modal.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.getEditUrl = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-edit-url');\n };\n\n /**\n * Is this an action event.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.isActionEvent = function() {\n return (this.getBody().find(SELECTORS.ROOT).attr('data-action-event') == 'true');\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalEventSummary.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n // We have to wait for the modal to finish rendering in order to ensure that\n // the data-event-title property is available to use as the modal title.\n M.util.js_pending('core_calendar/summary_modal:registerEventListeners:bodyRendered');\n this.getRoot().on(ModalEvents.bodyRendered, function() {\n this.getModal().data({\n eventTitle: this.getEventTitle(),\n eventId: this.getEventId(),\n eventCount: this.getEventCount(),\n })\n .attr('data-type', 'event');\n CalendarCrud.registerRemove(this.getModal());\n M.util.js_complete('core_calendar/summary_modal:registerEventListeners:bodyRendered');\n }.bind(this));\n\n $('body').on(CalendarEvents.deleted, function() {\n // Close the dialogue on delete.\n this.hide();\n }.bind(this));\n\n CustomEvents.define(this.getEditButton(), [\n CustomEvents.events.activate\n ]);\n\n this.getEditButton().on(CustomEvents.events.activate, function(e, data) {\n if (this.isActionEvent()) {\n // Action events cannot be edited on the event form and must be redirected to the module UI.\n $('body').trigger(CalendarEvents.editActionEvent, [this.getEditUrl()]);\n } else {\n // When the edit button is clicked we fire an event for the calendar UI to handle.\n // We don't care how the UI chooses to handle it.\n $('body').trigger(CalendarEvents.editEvent, [this.getEventId()]);\n }\n\n // There is nothing else for us to do so let's hide.\n this.hide();\n\n // We've handled this event so no need to propagate it.\n e.preventDefault();\n e.stopPropagation();\n data.originalEvent.preventDefault();\n data.originalEvent.stopPropagation();\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalEventSummary.TYPE, ModalEventSummary, 'core_calendar/event_summary_modal');\n registered = true;\n }\n\n return ModalEventSummary;\n});\n"],"file":"summary_modal.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/view_manager.min.js.map b/calendar/amd/build/view_manager.min.js.map index 91067138c9c..f9b4c830667 100644 --- a/calendar/amd/build/view_manager.min.js.map +++ b/calendar/amd/build/view_manager.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view_manager.js"],"names":["registerEventListeners","root","on","CalendarSelectors","links","eventLink","e","target","eventId","pendingPromise","Pending","matches","actions","viewEvent","closest","dataset","querySelector","preventDefault","stopPropagation","renderEventSummaryModal","then","resolve","catch","navLink","wrapper","find","view","data","courseId","categoryId","link","currentTarget","changeMonth","href","year","month","day","changeDay","viewSelector","CustomEvents","define","events","activate","option","classList","contains","courseid","categoryid","refreshMonthContent","window","history","pushState","fail","Notification","exception","refreshDayContent","reloadCurrentUpcoming","template","startLoading","attr","M","util","js_pending","get","join","includenavigation","mini","CalendarRepository","getCalendarMonthData","context","viewingmonth","Templates","render","html","js","replaceNode","document","dispatchEvent","CustomEvent","CalendarEvents","viewUpdated","always","js_complete","stopLoading","url","length","args","trigger","monthChanged","reloadCurrentMonth","getCalendarDayData","viewingday","reloadCurrentDay","dayChanged","loadingIconContainer","containers","loadingIcon","removeClass","addClass","getCalendarUpcomingData","viewingupcoming","getEventTypeClassFromType","eventType","getEventById","getEventResponse","event","Error","eventData","modalParams","title","name","type","SummaryModal","TYPE","body","templateContext","canedit","candelete","headerclasses","normalisedeventtype","isactionevent","action","ModalFactory","create","modal","getRoot","ModalEvents","hidden","destroy","show","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 .\n\n/**\n * A javascript module to handler calendar view changes.\n *\n * @module core_calendar/view_manager\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Templates from 'core/templates';\nimport Notification from 'core/notification';\nimport * as CalendarRepository from 'core_calendar/repository';\nimport CalendarEvents from 'core_calendar/events';\nimport * as CalendarSelectors from 'core_calendar/selectors';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\nimport SummaryModal from 'core_calendar/summary_modal';\nimport CustomEvents from 'core/custom_interaction_events';\nimport Pending from 'core/pending';\n\n/**\n * Register event listeners for the module.\n *\n * @param {object} root The root element.\n */\nconst registerEventListeners = (root) => {\n root = $(root);\n\n // Bind click events to event links.\n root.on('click', CalendarSelectors.links.eventLink, (e) => {\n const target = e.target;\n let eventLink = null;\n let eventId = null;\n const pendingPromise = new Pending('core_calendar/view_manager:eventLink:click');\n\n if (target.matches(CalendarSelectors.actions.viewEvent)) {\n eventLink = target;\n } else {\n eventLink = target.closest(CalendarSelectors.actions.viewEvent);\n }\n\n if (eventLink) {\n eventId = eventLink.dataset.eventId;\n } else {\n eventId = target.querySelector(CalendarSelectors.actions.viewEvent).dataset.eventId;\n }\n\n if (eventId) {\n // A link was found. Show the modal.\n\n e.preventDefault();\n // We've handled the event so stop it from bubbling\n // and causing the day click handler to fire.\n e.stopPropagation();\n\n renderEventSummaryModal(eventId)\n .then(pendingPromise.resolve)\n .catch();\n } else {\n pendingPromise.resolve();\n }\n });\n\n root.on('click', CalendarSelectors.links.navLink, (e) => {\n const wrapper = root.find(CalendarSelectors.wrapper);\n const view = wrapper.data('view');\n const courseId = wrapper.data('courseid');\n const categoryId = wrapper.data('categoryid');\n const link = e.currentTarget;\n\n if (view === 'month') {\n changeMonth(root, link.href, link.dataset.year, link.dataset.month, courseId, categoryId, link.dataset.day);\n e.preventDefault();\n } else if (view === 'day') {\n changeDay(root, link.href, link.dataset.year, link.dataset.month, link.dataset.day, courseId, categoryId);\n e.preventDefault();\n }\n });\n\n const viewSelector = root.find(CalendarSelectors.viewSelector);\n CustomEvents.define(viewSelector, [CustomEvents.events.activate]);\n viewSelector.on(\n CustomEvents.events.activate,\n (e) => {\n e.preventDefault();\n\n const option = e.target;\n if (option.classList.contains('active')) {\n return;\n }\n\n const view = option.dataset.view,\n year = option.dataset.year,\n month = option.dataset.month,\n day = option.dataset.day,\n courseId = option.dataset.courseid,\n categoryId = option.dataset.categoryid;\n\n if (view == 'month') {\n refreshMonthContent(root, year, month, courseId, categoryId, root, 'core_calendar/calendar_month', day)\n .then(() => {\n return window.history.pushState({}, '', '?view=month');\n }).fail(Notification.exception);\n } else if (view == 'day') {\n refreshDayContent(root, year, month, day, courseId, categoryId, root, 'core_calendar/calendar_day')\n .then(() => {\n return window.history.pushState({}, '', '?view=day');\n }).fail(Notification.exception);\n } else if (view == 'upcoming') {\n reloadCurrentUpcoming(root, courseId, categoryId, root, 'core_calendar/calendar_upcoming')\n .then(() => {\n return window.history.pushState({}, '', '?view=upcoming');\n }).fail(Notification.exception);\n }\n }\n );\n};\n\n/**\n * Refresh the month content.\n *\n * @param {object} root The root element.\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} courseId The id of the course whose events are shown\n * @param {number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {string} template The template to be rendered.\n * @param {number} day Day (optional)\n * @return {promise}\n */\nexport const refreshMonthContent = (root, year, month, courseId, categoryId, target = null, template = '', day = 1) => {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n M.util.js_pending([root.get('id'), year, month, courseId].join('-'));\n const includenavigation = root.data('includenavigation');\n const mini = root.data('mini');\n return CalendarRepository.getCalendarMonthData(year, month, courseId, categoryId, includenavigation, mini, day)\n .then(context => {\n context.viewingmonth = true;\n return Templates.render(template, context);\n })\n .then((html, js) => {\n return Templates.replaceNode(target, html, js);\n })\n .then(() => {\n document.querySelector('body').dispatchEvent(new CustomEvent(CalendarEvents.viewUpdated));\n return;\n })\n .always(() => {\n M.util.js_complete([root.get('id'), year, month, courseId].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n};\n\n/**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The container element\n * @param {string} url The calendar url to be shown\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} courseId The id of the course whose events are shown\n * @param {number} categoryId The id of the category whose events are shown\n * @param {number} day Day (optional)\n * @return {promise}\n */\nexport const changeMonth = (root, url, year, month, courseId, categoryId, day = 1) => {\n return refreshMonthContent(root, year, month, courseId, categoryId, null, '', day)\n .then((...args) => {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return args;\n })\n .then((...args) => {\n $('body').trigger(CalendarEvents.monthChanged, [year, month, courseId, categoryId]);\n return args;\n });\n};\n\n/**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\nexport const reloadCurrentMonth = (root, courseId = 0, categoryId = 0) => {\n const year = root.find(CalendarSelectors.wrapper).data('year');\n const month = root.find(CalendarSelectors.wrapper).data('month');\n const day = root.find(CalendarSelectors.wrapper).data('day');\n\n courseId = courseId || root.find(CalendarSelectors.wrapper).data('courseid');\n categoryId = categoryId || root.find(CalendarSelectors.wrapper).data('categoryid');\n\n return refreshMonthContent(root, year, month, courseId, categoryId, null, '', day);\n};\n\n\n/**\n * Refresh the day content.\n *\n * @param {object} root The root element.\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} day Day\n * @param {number} courseId The id of the course whose events are shown\n * @param {number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {string} template The template to be rendered.\n *\n * @return {promise}\n */\nexport const refreshDayContent = (root, year, month, day, courseId, categoryId, target = null, template = '') => {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n M.util.js_pending([root.get('id'), year, month, day, courseId, categoryId].join('-'));\n const includenavigation = root.data('includenavigation');\n return CalendarRepository.getCalendarDayData(year, month, day, courseId, categoryId, includenavigation)\n .then((context) => {\n context.viewingday = true;\n return Templates.render(template, context);\n })\n .then((html, js) => {\n return Templates.replaceNode(target, html, js);\n })\n .then(() => {\n document.querySelector('body').dispatchEvent(new CustomEvent(CalendarEvents.viewUpdated));\n return;\n })\n .always(() => {\n M.util.js_complete([root.get('id'), year, month, day, courseId, categoryId].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n};\n\n/**\n * Reload the current day view data.\n *\n * @param {object} root The container element.\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\nexport const reloadCurrentDay = (root, courseId = 0, categoryId = 0) => {\n const wrapper = root.find(CalendarSelectors.wrapper);\n const year = wrapper.data('year');\n const month = wrapper.data('month');\n const day = wrapper.data('day');\n\n courseId = courseId || root.find(CalendarSelectors.wrapper).data('courseid');\n categoryId = categoryId || root.find(CalendarSelectors.wrapper).data('categoryid');\n\n return refreshDayContent(root, year, month, day, courseId, categoryId);\n};\n\n/**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The root element.\n * @param {String} url The calendar url to be shown\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} day Day\n * @param {Number} courseId The id of the course whose events are shown\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\nexport const changeDay = (root, url, year, month, day, courseId, categoryId) => {\n return refreshDayContent(root, year, month, day, courseId, categoryId)\n .then((...args) => {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return args;\n })\n .then((...args) => {\n $('body').trigger(CalendarEvents.dayChanged, [year, month, courseId, categoryId]);\n return args;\n });\n};\n\n/**\n * Set the element state to loading.\n *\n * @param {object} root The container element\n * @method startLoading\n */\nconst startLoading = (root) => {\n const loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.removeClass('hidden');\n};\n\n/**\n * Remove the loading state from the element.\n *\n * @param {object} root The container element\n * @method stopLoading\n */\nconst stopLoading = (root) => {\n const loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.addClass('hidden');\n};\n\n/**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {string} template The template to be rendered.\n * @return {promise}\n */\nexport const reloadCurrentUpcoming = (root, courseId = 0, categoryId = 0, target = null, template = '') => {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n courseId = courseId || root.find(CalendarSelectors.wrapper).data('courseid');\n categoryId = categoryId || root.find(CalendarSelectors.wrapper).data('categoryid');\n\n return CalendarRepository.getCalendarUpcomingData(courseId, categoryId)\n .then((context) => {\n context.viewingupcoming = true;\n return Templates.render(template, context);\n })\n .then((html, js) => {\n return Templates.replaceNode(target, html, js);\n })\n .then(() => {\n document.querySelector('body').dispatchEvent(new CustomEvent(CalendarEvents.viewUpdated));\n return;\n })\n .always(function() {\n return stopLoading(root);\n })\n .fail(Notification.exception);\n};\n\n/**\n * Get the CSS class to apply for the given event type.\n *\n * @param {string} eventType The calendar event type\n * @return {string}\n */\nconst getEventTypeClassFromType = (eventType) => {\n return 'calendar_event_' + eventType;\n};\n\n/**\n * Render the event summary modal.\n *\n * @param {Number} eventId The calendar event id.\n * @returns {Promise}\n */\nconst renderEventSummaryModal = (eventId) => {\n const pendingPromise = new Pending('core_calendar/view_manager:renderEventSummaryModal');\n\n // Calendar repository promise.\n return CalendarRepository.getEventById(eventId)\n .then((getEventResponse) => {\n if (!getEventResponse.event) {\n throw new Error('Error encountered while trying to fetch calendar event with ID: ' + eventId);\n }\n\n return getEventResponse.event;\n })\n .then(eventData => {\n // Build the modal parameters from the event data.\n const modalParams = {\n title: eventData.name,\n type: SummaryModal.TYPE,\n body: Templates.render('core_calendar/event_summary_body', eventData),\n templateContext: {\n canedit: eventData.canedit,\n candelete: eventData.candelete,\n headerclasses: getEventTypeClassFromType(eventData.normalisedeventtype),\n isactionevent: eventData.isactionevent,\n url: eventData.url,\n action: eventData.action\n }\n };\n\n // Create the modal.\n return ModalFactory.create(modalParams);\n })\n .then(modal => {\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Finally, render the modal!\n modal.show();\n\n return modal;\n })\n .then(modal => {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n};\n\nexport const init = (root, view) => {\n registerEventListeners(root, view);\n};\n"],"file":"view_manager.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view_manager.js"],"names":["registerEventListeners","root","on","CalendarSelectors","links","eventLink","e","target","eventId","pendingPromise","Pending","matches","actions","viewEvent","closest","dataset","querySelector","preventDefault","stopPropagation","renderEventSummaryModal","then","resolve","catch","navLink","wrapper","find","view","data","courseId","categoryId","link","currentTarget","changeMonth","href","year","month","day","changeDay","viewSelector","CustomEvents","define","events","activate","option","classList","contains","courseid","categoryid","refreshMonthContent","window","history","pushState","fail","Notification","exception","refreshDayContent","reloadCurrentUpcoming","template","startLoading","attr","M","util","js_pending","get","join","includenavigation","mini","CalendarRepository","getCalendarMonthData","context","viewingmonth","Templates","render","html","js","replaceNode","document","dispatchEvent","CustomEvent","CalendarEvents","viewUpdated","always","js_complete","stopLoading","url","length","args","trigger","monthChanged","reloadCurrentMonth","getCalendarDayData","viewingday","reloadCurrentDay","dayChanged","loadingIconContainer","containers","loadingIcon","removeClass","addClass","getCalendarUpcomingData","viewingupcoming","getEventTypeClassFromType","eventType","getEventById","getEventResponse","event","Error","eventData","modalParams","title","name","type","SummaryModal","TYPE","body","templateContext","canedit","candelete","headerclasses","normalisedeventtype","isactionevent","action","ModalFactory","create","modal","getRoot","ModalEvents","hidden","destroy","show","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 .\n\n/**\n * A javascript module to handler calendar view changes.\n *\n * @module core_calendar/view_manager\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Templates from 'core/templates';\nimport Notification from 'core/notification';\nimport * as CalendarRepository from 'core_calendar/repository';\nimport CalendarEvents from 'core_calendar/events';\nimport * as CalendarSelectors from 'core_calendar/selectors';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\nimport SummaryModal from 'core_calendar/summary_modal';\nimport CustomEvents from 'core/custom_interaction_events';\nimport Pending from 'core/pending';\n\n/**\n * Register event listeners for the module.\n *\n * @param {object} root The root element.\n */\nconst registerEventListeners = (root) => {\n root = $(root);\n\n // Bind click events to event links.\n root.on('click', CalendarSelectors.links.eventLink, (e) => {\n const target = e.target;\n let eventLink = null;\n let eventId = null;\n const pendingPromise = new Pending('core_calendar/view_manager:eventLink:click');\n\n if (target.matches(CalendarSelectors.actions.viewEvent)) {\n eventLink = target;\n } else {\n eventLink = target.closest(CalendarSelectors.actions.viewEvent);\n }\n\n if (eventLink) {\n eventId = eventLink.dataset.eventId;\n } else {\n eventId = target.querySelector(CalendarSelectors.actions.viewEvent).dataset.eventId;\n }\n\n if (eventId) {\n // A link was found. Show the modal.\n\n e.preventDefault();\n // We've handled the event so stop it from bubbling\n // and causing the day click handler to fire.\n e.stopPropagation();\n\n renderEventSummaryModal(eventId)\n .then(pendingPromise.resolve)\n .catch();\n } else {\n pendingPromise.resolve();\n }\n });\n\n root.on('click', CalendarSelectors.links.navLink, (e) => {\n const wrapper = root.find(CalendarSelectors.wrapper);\n const view = wrapper.data('view');\n const courseId = wrapper.data('courseid');\n const categoryId = wrapper.data('categoryid');\n const link = e.currentTarget;\n\n if (view === 'month') {\n changeMonth(root, link.href, link.dataset.year, link.dataset.month, courseId, categoryId, link.dataset.day);\n e.preventDefault();\n } else if (view === 'day') {\n changeDay(root, link.href, link.dataset.year, link.dataset.month, link.dataset.day, courseId, categoryId);\n e.preventDefault();\n }\n });\n\n const viewSelector = root.find(CalendarSelectors.viewSelector);\n CustomEvents.define(viewSelector, [CustomEvents.events.activate]);\n viewSelector.on(\n CustomEvents.events.activate,\n (e) => {\n e.preventDefault();\n\n const option = e.target;\n if (option.classList.contains('active')) {\n return;\n }\n\n const view = option.dataset.view,\n year = option.dataset.year,\n month = option.dataset.month,\n day = option.dataset.day,\n courseId = option.dataset.courseid,\n categoryId = option.dataset.categoryid;\n\n if (view == 'month') {\n refreshMonthContent(root, year, month, courseId, categoryId, root, 'core_calendar/calendar_month', day)\n .then(() => {\n return window.history.pushState({}, '', '?view=month');\n }).fail(Notification.exception);\n } else if (view == 'day') {\n refreshDayContent(root, year, month, day, courseId, categoryId, root, 'core_calendar/calendar_day')\n .then(() => {\n return window.history.pushState({}, '', '?view=day');\n }).fail(Notification.exception);\n } else if (view == 'upcoming') {\n reloadCurrentUpcoming(root, courseId, categoryId, root, 'core_calendar/calendar_upcoming')\n .then(() => {\n return window.history.pushState({}, '', '?view=upcoming');\n }).fail(Notification.exception);\n }\n }\n );\n};\n\n/**\n * Refresh the month content.\n *\n * @param {object} root The root element.\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} courseId The id of the course whose events are shown\n * @param {number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {string} template The template to be rendered.\n * @param {number} day Day (optional)\n * @return {promise}\n */\nexport const refreshMonthContent = (root, year, month, courseId, categoryId, target = null, template = '', day = 1) => {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n M.util.js_pending([root.get('id'), year, month, courseId].join('-'));\n const includenavigation = root.data('includenavigation');\n const mini = root.data('mini');\n return CalendarRepository.getCalendarMonthData(year, month, courseId, categoryId, includenavigation, mini, day)\n .then(context => {\n context.viewingmonth = true;\n return Templates.render(template, context);\n })\n .then((html, js) => {\n return Templates.replaceNode(target, html, js);\n })\n .then(() => {\n document.querySelector('body').dispatchEvent(new CustomEvent(CalendarEvents.viewUpdated));\n return;\n })\n .always(() => {\n M.util.js_complete([root.get('id'), year, month, courseId].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n};\n\n/**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The container element\n * @param {string} url The calendar url to be shown\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} courseId The id of the course whose events are shown\n * @param {number} categoryId The id of the category whose events are shown\n * @param {number} day Day (optional)\n * @return {promise}\n */\nexport const changeMonth = (root, url, year, month, courseId, categoryId, day = 1) => {\n return refreshMonthContent(root, year, month, courseId, categoryId, null, '', day)\n .then((...args) => {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return args;\n })\n .then((...args) => {\n $('body').trigger(CalendarEvents.monthChanged, [year, month, courseId, categoryId]);\n return args;\n });\n};\n\n/**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\nexport const reloadCurrentMonth = (root, courseId = 0, categoryId = 0) => {\n const year = root.find(CalendarSelectors.wrapper).data('year');\n const month = root.find(CalendarSelectors.wrapper).data('month');\n const day = root.find(CalendarSelectors.wrapper).data('day');\n\n courseId = courseId || root.find(CalendarSelectors.wrapper).data('courseid');\n categoryId = categoryId || root.find(CalendarSelectors.wrapper).data('categoryid');\n\n return refreshMonthContent(root, year, month, courseId, categoryId, null, '', day);\n};\n\n\n/**\n * Refresh the day content.\n *\n * @param {object} root The root element.\n * @param {number} year Year\n * @param {number} month Month\n * @param {number} day Day\n * @param {number} courseId The id of the course whose events are shown\n * @param {number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {string} template The template to be rendered.\n *\n * @return {promise}\n */\nexport const refreshDayContent = (root, year, month, day, courseId, categoryId, target = null, template = '') => {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n M.util.js_pending([root.get('id'), year, month, day, courseId, categoryId].join('-'));\n const includenavigation = root.data('includenavigation');\n return CalendarRepository.getCalendarDayData(year, month, day, courseId, categoryId, includenavigation)\n .then((context) => {\n context.viewingday = true;\n return Templates.render(template, context);\n })\n .then((html, js) => {\n return Templates.replaceNode(target, html, js);\n })\n .then(() => {\n document.querySelector('body').dispatchEvent(new CustomEvent(CalendarEvents.viewUpdated));\n return;\n })\n .always(() => {\n M.util.js_complete([root.get('id'), year, month, day, courseId, categoryId].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n};\n\n/**\n * Reload the current day view data.\n *\n * @param {object} root The container element.\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\nexport const reloadCurrentDay = (root, courseId = 0, categoryId = 0) => {\n const wrapper = root.find(CalendarSelectors.wrapper);\n const year = wrapper.data('year');\n const month = wrapper.data('month');\n const day = wrapper.data('day');\n\n courseId = courseId || root.find(CalendarSelectors.wrapper).data('courseid');\n categoryId = categoryId || root.find(CalendarSelectors.wrapper).data('categoryid');\n\n return refreshDayContent(root, year, month, day, courseId, categoryId);\n};\n\n/**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The root element.\n * @param {String} url The calendar url to be shown\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} day Day\n * @param {Number} courseId The id of the course whose events are shown\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\nexport const changeDay = (root, url, year, month, day, courseId, categoryId) => {\n return refreshDayContent(root, year, month, day, courseId, categoryId)\n .then((...args) => {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return args;\n })\n .then((...args) => {\n $('body').trigger(CalendarEvents.dayChanged, [year, month, courseId, categoryId]);\n return args;\n });\n};\n\n/**\n * Set the element state to loading.\n *\n * @param {object} root The container element\n * @method startLoading\n */\nconst startLoading = (root) => {\n const loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.removeClass('hidden');\n};\n\n/**\n * Remove the loading state from the element.\n *\n * @param {object} root The container element\n * @method stopLoading\n */\nconst stopLoading = (root) => {\n const loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.addClass('hidden');\n};\n\n/**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {number} courseId The course id.\n * @param {number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {string} template The template to be rendered.\n * @return {promise}\n */\nexport const reloadCurrentUpcoming = (root, courseId = 0, categoryId = 0, target = null, template = '') => {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n courseId = courseId || root.find(CalendarSelectors.wrapper).data('courseid');\n categoryId = categoryId || root.find(CalendarSelectors.wrapper).data('categoryid');\n\n return CalendarRepository.getCalendarUpcomingData(courseId, categoryId)\n .then((context) => {\n context.viewingupcoming = true;\n return Templates.render(template, context);\n })\n .then((html, js) => {\n return Templates.replaceNode(target, html, js);\n })\n .then(() => {\n document.querySelector('body').dispatchEvent(new CustomEvent(CalendarEvents.viewUpdated));\n return;\n })\n .always(function() {\n return stopLoading(root);\n })\n .fail(Notification.exception);\n};\n\n/**\n * Get the CSS class to apply for the given event type.\n *\n * @param {string} eventType The calendar event type\n * @return {string}\n */\nconst getEventTypeClassFromType = (eventType) => {\n return 'calendar_event_' + eventType;\n};\n\n/**\n * Render the event summary modal.\n *\n * @param {Number} eventId The calendar event id.\n * @returns {Promise}\n */\nconst renderEventSummaryModal = (eventId) => {\n const pendingPromise = new Pending('core_calendar/view_manager:renderEventSummaryModal');\n\n // Calendar repository promise.\n return CalendarRepository.getEventById(eventId)\n .then((getEventResponse) => {\n if (!getEventResponse.event) {\n throw new Error('Error encountered while trying to fetch calendar event with ID: ' + eventId);\n }\n\n return getEventResponse.event;\n })\n .then(eventData => {\n // Build the modal parameters from the event data.\n const modalParams = {\n title: eventData.name,\n type: SummaryModal.TYPE,\n body: Templates.render('core_calendar/event_summary_body', eventData),\n templateContext: {\n canedit: eventData.canedit,\n candelete: eventData.candelete,\n headerclasses: getEventTypeClassFromType(eventData.normalisedeventtype),\n isactionevent: eventData.isactionevent,\n url: eventData.url,\n action: eventData.action\n }\n };\n\n // Create the modal.\n return ModalFactory.create(modalParams);\n })\n .then(modal => {\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Finally, render the modal!\n modal.show();\n\n return modal;\n })\n .then(modal => {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n};\n\nexport const init = (root, view) => {\n registerEventListeners(root, view);\n};\n"],"file":"view_manager.min.js"} \ No newline at end of file diff --git a/calendar/amd/src/calendar.js b/calendar/amd/src/calendar.js index 96c0b087b5f..cf9b68f22a8 100644 --- a/calendar/amd/src/calendar.js +++ b/calendar/amd/src/calendar.js @@ -21,7 +21,6 @@ * triggered within the calendar UI. * * @module core_calendar/calendar - * @package core_calendar * @copyright 2017 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/calendar_filter.js b/calendar/amd/src/calendar_filter.js index 415b3b3a8b6..fbd0535c41e 100644 --- a/calendar/amd/src/calendar_filter.js +++ b/calendar/amd/src/calendar_filter.js @@ -17,7 +17,6 @@ * This module is responsible for the calendar filter. * * @module core_calendar/calendar_filter - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/calendar_mini.js b/calendar/amd/src/calendar_mini.js index e419a255d3e..92b99eba92c 100644 --- a/calendar/amd/src/calendar_mini.js +++ b/calendar/amd/src/calendar_mini.js @@ -21,7 +21,6 @@ * triggered within the calendar UI. * * @module core_calendar/calendar_mini - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/calendar_threemonth.js b/calendar/amd/src/calendar_threemonth.js index 33545c3a8f4..b4b5a3f26d3 100644 --- a/calendar/amd/src/calendar_threemonth.js +++ b/calendar/amd/src/calendar_threemonth.js @@ -18,7 +18,6 @@ * movement through them. * * @module core_calendar/calendar_threemonth - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/calendar_view.js b/calendar/amd/src/calendar_view.js index 5b4e589f8c9..030fa519532 100644 --- a/calendar/amd/src/calendar_view.js +++ b/calendar/amd/src/calendar_view.js @@ -17,7 +17,6 @@ * This module is responsible for handle calendar day and upcoming view. * * @module core_calendar/calendar - * @package core_calendar * @copyright 2017 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/crud.js b/calendar/amd/src/crud.js index a82bee13a49..4672dd615bb 100644 --- a/calendar/amd/src/crud.js +++ b/calendar/amd/src/crud.js @@ -17,7 +17,6 @@ * A module to handle CRUD operations within the UI. * * @module core_calendar/crud - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/drag_drop_data_store.js b/calendar/amd/src/drag_drop_data_store.js index 893d11abd65..6c203ab9672 100644 --- a/calendar/amd/src/drag_drop_data_store.js +++ b/calendar/amd/src/drag_drop_data_store.js @@ -21,7 +21,6 @@ * between the different stages of the drag/drop lifecycle. * * @module core_calendar/drag_drop_data_store - * @package core_calendar * @copyright 2017 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/event_form.js b/calendar/amd/src/event_form.js index b64639aa6ac..53fbcb3ac20 100644 --- a/calendar/amd/src/event_form.js +++ b/calendar/amd/src/event_form.js @@ -17,7 +17,6 @@ * A javascript module to enhance the event form. * * @module core_calendar/event_form - * @package core_calendar * @copyright 2017 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/events.js b/calendar/amd/src/events.js index a3d0244957c..5ead82790e2 100644 --- a/calendar/amd/src/events.js +++ b/calendar/amd/src/events.js @@ -18,7 +18,6 @@ * * @module core_calendar/events * @class calendar_events - * @package core_calendar * @copyright 2017 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/modal_delete.js b/calendar/amd/src/modal_delete.js index e457761ef78..7e91b5f07d8 100644 --- a/calendar/amd/src/modal_delete.js +++ b/calendar/amd/src/modal_delete.js @@ -18,7 +18,6 @@ * * @module core_calendar/modal_delete * @class modal_delete - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/modal_event_form.js b/calendar/amd/src/modal_event_form.js index be7f718e17e..cf2c5258776 100644 --- a/calendar/amd/src/modal_event_form.js +++ b/calendar/amd/src/modal_event_form.js @@ -16,9 +16,7 @@ /** * Contain the logic for the quick add or update event modal. * - * @module calendar/modal_quick_add_event - * @class modal_quick_add_event - * @package core + * @module core_calendar/modal_quick_add_event * @copyright 2017 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/month_navigation_drag_drop.js b/calendar/amd/src/month_navigation_drag_drop.js index dca8f6178e0..cb880983161 100644 --- a/calendar/amd/src/month_navigation_drag_drop.js +++ b/calendar/amd/src/month_navigation_drag_drop.js @@ -23,7 +23,6 @@ * * @module core_calendar/month_navigation_drag_drop * @class month_navigation_drag_drop - * @package core_calendar * @copyright 2017 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/month_view_drag_drop.js b/calendar/amd/src/month_view_drag_drop.js index b94af90d155..a59df72e9a6 100644 --- a/calendar/amd/src/month_view_drag_drop.js +++ b/calendar/amd/src/month_view_drag_drop.js @@ -19,7 +19,6 @@ * * @module core_calendar/month_view_drag_drop * @class month_view_drag_drop - * @package core_calendar * @copyright 2017 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/repository.js b/calendar/amd/src/repository.js index baa66ca055d..06a9ac7b6ef 100644 --- a/calendar/amd/src/repository.js +++ b/calendar/amd/src/repository.js @@ -18,7 +18,6 @@ * * @module core_calendar/repository * @class repository - * @package core_calendar * @copyright 2017 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/selectors.js b/calendar/amd/src/selectors.js index 6ecbea3e555..a8ae8b52b34 100644 --- a/calendar/amd/src/selectors.js +++ b/calendar/amd/src/selectors.js @@ -17,7 +17,6 @@ * This module is responsible for the calendar filter. * * @module core_calendar/calendar_selectors - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/summary_modal.js b/calendar/amd/src/summary_modal.js index 5f92706423d..744f4edcbb7 100644 --- a/calendar/amd/src/summary_modal.js +++ b/calendar/amd/src/summary_modal.js @@ -17,7 +17,6 @@ * A javascript module to handle summary modal. * * @module core_calendar/summary_modal - * @package core_calendar * @copyright 2017 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/calendar/amd/src/view_manager.js b/calendar/amd/src/view_manager.js index 37fca710b17..33a213f1cf2 100644 --- a/calendar/amd/src/view_manager.js +++ b/calendar/amd/src/view_manager.js @@ -17,7 +17,6 @@ * A javascript module to handler calendar view changes. * * @module core_calendar/view_manager - * @package core_calendar * @copyright 2017 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/contentbank/amd/build/actions.min.js.map b/contentbank/amd/build/actions.min.js.map index ee0807e6a8e..3298e0b0915 100644 --- a/contentbank/amd/build/actions.min.js.map +++ b/contentbank/amd/build/actions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/actions.js"],"names":["define","$","Ajax","Notification","Str","Templates","Url","ModalFactory","ModalEvents","ACTIONS","DELETE_CONTENT","RENAME_CONTENT","Actions","registerEvents","prototype","click","e","preventDefault","contentname","data","contentid","contextid","deleteButtonText","get_strings","key","component","param","name","then","langStrings","modalTitle","modalContent","create","title","body","type","types","SAVE_CANCEL","large","done","modal","setSaveButtonText","getRoot","on","save","deleteContent","hidden","destroy","show","catch","exception","saveButtonText","render","newname","val","trim","renameContent","alert","requestType","call","methodname","args","contentids","result","message","params","statusmsg","errormsg","window","location","href","relativeUrl","fail","warnings","id","addNotification","fetchNotifications"],"mappings":"AAuBAA,OAAM,4BAAC,CACH,QADG,CAEH,WAFG,CAGH,mBAHG,CAIH,UAJG,CAKH,gBALG,CAMH,UANG,CAOH,oBAPG,CAQH,mBARG,CAAD,CASN,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgCC,CAAhC,CAAqCC,CAArC,CAAgDC,CAAhD,CAAqDC,CAArD,CAAmEC,CAAnE,CAAgF,IAOxEC,CAAAA,CAAO,CAAG,CACVC,cAAc,CAAE,iCADN,CAEVC,cAAc,CAAE,iCAFN,CAP8D,CAexEC,CAAO,CAAG,UAAW,CACrB,KAAKC,cAAL,EACH,CAjB2E,CAsB5ED,CAAO,CAACE,SAAR,CAAkBD,cAAlB,CAAmC,UAAW,CAC1CZ,CAAC,CAACQ,CAAO,CAACC,cAAT,CAAD,CAA0BK,KAA1B,CAAgC,SAASC,CAAT,CAAY,CACxCA,CAAC,CAACC,cAAF,GADwC,GAGpCC,CAAAA,CAAW,CAAGjB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,aAAb,CAHsB,CAIpCC,CAAS,CAAGnB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,WAAb,CAJwB,CAKpCE,CAAS,CAAGpB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,WAAb,CALwB,CAyBpCG,CAAgB,CAAG,EAzBiB,CA0BxClB,CAAG,CAACmB,WAAJ,CAnBc,CACV,CACIC,GAAG,CAAE,eADT,CAEIC,SAAS,CAAE,kBAFf,CADU,CAKV,CACID,GAAG,CAAE,sBADT,CAEIC,SAAS,CAAE,kBAFf,CAGIC,KAAK,CAAE,CACHC,IAAI,CAAET,CADH,CAHX,CALU,CAYV,CACIM,GAAG,CAAE,QADT,CAEIC,SAAS,CAAE,MAFf,CAZU,CAmBd,EAAyBG,IAAzB,CAA8B,SAASC,CAAT,CAAsB,IAC5CC,CAAAA,CAAU,CAAGD,CAAW,CAAC,CAAD,CADoB,CAE5CE,CAAY,CAAGF,CAAW,CAAC,CAAD,CAFkB,CAGhDP,CAAgB,CAAGO,CAAW,CAAC,CAAD,CAA9B,CAEA,MAAOtB,CAAAA,CAAY,CAACyB,MAAb,CAAoB,CACvBC,KAAK,CAAEH,CADgB,CAEvBI,IAAI,CAAEH,CAFiB,CAGvBI,IAAI,CAAE5B,CAAY,CAAC6B,KAAb,CAAmBC,WAHF,CAIvBC,KAAK,GAJkB,CAApB,CAMV,CAXD,EAWGC,IAXH,CAWQ,SAASC,CAAT,CAAgB,CACpBA,CAAK,CAACC,iBAAN,CAAwBnB,CAAxB,EACAkB,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACoC,IAA/B,CAAqC,UAAW,CAE5C,MAAOC,CAAAA,CAAa,CAACzB,CAAD,CAAYC,CAAZ,CACvB,CAHD,EAMAmB,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACsC,MAA/B,CAAuC,UAAW,CAE9CN,CAAK,CAACO,OAAN,EACH,CAHD,EAMAP,CAAK,CAACQ,IAAN,EAGH,CA5BD,EA4BGC,KA5BH,CA4BS9C,CAAY,CAAC+C,SA5BtB,CA6BH,CAvDD,EAyDAjD,CAAC,CAACQ,CAAO,CAACE,cAAT,CAAD,CAA0BI,KAA1B,CAAgC,SAASC,CAAT,CAAY,CACxCA,CAAC,CAACC,cAAF,GADwC,GAGpCC,CAAAA,CAAW,CAAGjB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,aAAb,CAHsB,CAIpCC,CAAS,CAAGnB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,WAAb,CAJwB,CAiBpCgC,CAAc,CAAG,EAjBmB,CAkBxC/C,CAAG,CAACmB,WAAJ,CAZc,CACV,CACIC,GAAG,CAAE,eADT,CAEIC,SAAS,CAAE,kBAFf,CADU,CAKV,CACID,GAAG,CAAE,QADT,CAEIC,SAAS,CAAE,kBAFf,CALU,CAYd,EAAyBG,IAAzB,CAA8B,SAASC,CAAT,CAAsB,CAChD,GAAIC,CAAAA,CAAU,CAAGD,CAAW,CAAC,CAAD,CAA5B,CACAsB,CAAc,CAAGtB,CAAW,CAAC,CAAD,CAA5B,CAEA,MAAOtB,CAAAA,CAAY,CAACyB,MAAb,CAAoB,CACvBC,KAAK,CAAEH,CADgB,CAEvBI,IAAI,CAAE7B,CAAS,CAAC+C,MAAV,CAAiB,gCAAjB,CAAmD,CAAC,UAAahC,CAAd,CAAyB,KAAQF,CAAjC,CAAnD,CAFiB,CAGvBiB,IAAI,CAAE5B,CAAY,CAAC6B,KAAb,CAAmBC,WAHF,CAApB,CAKV,CATD,EASGT,IATH,CASQ,SAASY,CAAT,CAAgB,CACpBA,CAAK,CAACC,iBAAN,CAAwBU,CAAxB,EACAX,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACoC,IAA/B,CAAqC,SAAS5B,CAAT,CAAY,CAE7C,GAAIqC,CAAAA,CAAO,CAAGpD,CAAC,CAAC,UAAD,CAAD,CAAcqD,GAAd,GAAoBC,IAApB,EAAd,CACA,GAAIF,CAAJ,CAAa,CACTG,CAAa,CAACpC,CAAD,CAAYiC,CAAZ,CAChB,CAFD,IAEO,CAUHjD,CAAG,CAACmB,WAAJ,CATmB,CACf,CACIC,GAAG,CAAE,OADT,CADe,CAIf,CACIA,GAAG,CAAE,qBADT,CAEIC,SAAS,CAAE,kBAFf,CAJe,CASnB,EAA8BG,IAA9B,CAAmC,SAASC,CAAT,CAAsB,CACrD1B,CAAY,CAACsD,KAAb,CAAmB5B,CAAW,CAAC,CAAD,CAA9B,CAAmCA,CAAW,CAAC,CAAD,CAA9C,CACH,CAFD,EAEGoB,KAFH,CAES9C,CAAY,CAAC+C,SAFtB,EAGAlC,CAAC,CAACC,cAAF,EACH,CACJ,CApBD,EAuBAuB,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACsC,MAA/B,CAAuC,UAAW,CAE9CN,CAAK,CAACO,OAAN,EACH,CAHD,EAMAP,CAAK,CAACQ,IAAN,EAGH,CA3CD,EA2CGC,KA3CH,CA2CS9C,CAAY,CAAC+C,SA3CtB,CA4CH,CA9DD,CA+DH,CAzHD,CAiIA,QAASL,CAAAA,CAAT,CAAuBzB,CAAvB,CAAkCC,CAAlC,CAA6C,IAQrCqC,CAAAA,CAAW,CAAG,SARuB,CASzCxD,CAAI,CAACyD,IAAL,CAAU,CARI,CACVC,UAAU,CAAE,iCADF,CAEVC,IAAI,CAAE,CACFC,UAAU,CAAE,CAAC1C,SAAS,CAATA,CAAD,CADV,CAFI,CAQJ,CAAV,EAAqB,CAArB,EAAwBQ,IAAxB,CAA6B,SAAST,CAAT,CAAe,CACxC,GAAIA,CAAI,CAAC4C,MAAT,CAAiB,CACb,MAAO,gBACV,CACDL,CAAW,CAAG,OAAd,CACA,MAAO,mBAEV,CAPD,EAOGnB,IAPH,CAOQ,SAASyB,CAAT,CAAkB,CACtB,GAAIC,CAAAA,CAAM,CAAG,CACT5C,SAAS,CAAEA,CADF,CAAb,CAGA,GAAmB,SAAf,EAAAqC,CAAJ,CAA8B,CAC1BO,CAAM,CAACC,SAAP,CAAmBF,CACtB,CAFD,IAEO,CACHC,CAAM,CAACE,QAAP,CAAkBH,CACrB,CAEDI,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBhE,CAAG,CAACiE,WAAJ,CAAgB,uBAAhB,CAAyCN,CAAzC,IAC1B,CAlBD,EAkBGO,IAlBH,CAkBQrE,CAAY,CAAC+C,SAlBrB,CAmBH,CAQD,QAASM,CAAAA,CAAT,CAAuBpC,CAAvB,CAAkCO,CAAlC,CAAwC,IAQhC+B,CAAAA,CAAW,CAAG,SARkB,CASpCxD,CAAI,CAACyD,IAAL,CAAU,CARI,CACVC,UAAU,CAAE,iCADF,CAEVC,IAAI,CAAE,CACFzC,SAAS,CAAEA,CADT,CAEFO,IAAI,CAAEA,CAFJ,CAFI,CAQJ,CAAV,EAAqB,CAArB,EAAwBC,IAAxB,CAA6B,SAAST,CAAT,CAAe,CACxC,GAAIA,CAAI,CAAC4C,MAAT,CAAiB,CACb,MAAO,gBACV,CACDL,CAAW,CAAG,OAAd,CACA,MAAOvC,CAAAA,CAAI,CAACsD,QAAL,CAAc,CAAd,EAAiBT,OAE3B,CAPD,EAOGpC,IAPH,CAOQ,SAASoC,CAAT,CAAkB,CACtB,GAAIC,CAAAA,CAAM,CAAG,IAAb,CACA,GAAmB,SAAf,EAAAP,CAAJ,CAA8B,CAC1BO,CAAM,CAAG,CACLS,EAAE,CAAEtD,CADC,CAEL8C,SAAS,CAAEF,CAFN,CAAT,CAKAI,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBhE,CAAG,CAACiE,WAAJ,CAAgB,sBAAhB,CAAwCN,CAAxC,IAC1B,CAPD,IAOO,CAEH9D,CAAY,CAACwE,eAAb,CAA6B,CACzBX,OAAO,CAAEA,CADgB,CAEzB7B,IAAI,CAAE,OAFmB,CAA7B,EAIAhC,CAAY,CAACyE,kBAAb,EACH,CAEJ,CAzBD,EAyBG3B,KAzBH,CAyBS9C,CAAY,CAAC+C,SAzBtB,CA0BH,CAED,MAAqD,CASjD,KAAQ,eAAW,CACf,MAAO,IAAItC,CAAAA,CACd,CAXgD,CAaxD,CAtPK,CAAN","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 .\n\n/**\n * Module to manage content bank actions, such as delete or rename.\n *\n * @module core_contentbank/actions\n * @package core_contentbank\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/templates',\n 'core/url',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, Templates, Url, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{DELETE_CONTENT: string}}\n */\n var ACTIONS = {\n DELETE_CONTENT: '[data-action=\"deletecontent\"]',\n RENAME_CONTENT: '[data-action=\"renamecontent\"]',\n };\n\n /**\n * Actions class.\n */\n var Actions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n Actions.prototype.registerEvents = function() {\n $(ACTIONS.DELETE_CONTENT).click(function(e) {\n e.preventDefault();\n\n var contentname = $(this).data('contentname');\n var contentid = $(this).data('contentid');\n var contextid = $(this).data('contextid');\n\n var strings = [\n {\n key: 'deletecontent',\n component: 'core_contentbank'\n },\n {\n key: 'deletecontentconfirm',\n component: 'core_contentbank',\n param: {\n name: contentname,\n }\n },\n {\n key: 'delete',\n component: 'core'\n },\n ];\n\n var deleteButtonText = '';\n Str.get_strings(strings).then(function(langStrings) {\n var modalTitle = langStrings[0];\n var modalContent = langStrings[1];\n deleteButtonText = langStrings[2];\n\n return ModalFactory.create({\n title: modalTitle,\n body: modalContent,\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n });\n }).done(function(modal) {\n modal.setSaveButtonText(deleteButtonText);\n modal.getRoot().on(ModalEvents.save, function() {\n // The action is now confirmed, sending an action for it.\n return deleteContent(contentid, contextid);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal.\n modal.show();\n\n return;\n }).catch(Notification.exception);\n });\n\n $(ACTIONS.RENAME_CONTENT).click(function(e) {\n e.preventDefault();\n\n var contentname = $(this).data('contentname');\n var contentid = $(this).data('contentid');\n\n var strings = [\n {\n key: 'renamecontent',\n component: 'core_contentbank'\n },\n {\n key: 'rename',\n component: 'core_contentbank'\n },\n ];\n\n var saveButtonText = '';\n Str.get_strings(strings).then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n\n return ModalFactory.create({\n title: modalTitle,\n body: Templates.render('core_contentbank/renamecontent', {'contentid': contentid, 'name': contentname}),\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n modal.getRoot().on(ModalEvents.save, function(e) {\n // The action is now confirmed, sending an action for it.\n var newname = $(\"#newname\").val().trim();\n if (newname) {\n renameContent(contentid, newname);\n } else {\n var errorStrings = [\n {\n key: 'error',\n },\n {\n key: 'emptynamenotallowed',\n component: 'core_contentbank',\n },\n ];\n Str.get_strings(errorStrings).then(function(langStrings) {\n Notification.alert(langStrings[0], langStrings[1]);\n }).catch(Notification.exception);\n e.preventDefault();\n }\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal.\n modal.show();\n\n return;\n }).catch(Notification.exception);\n });\n };\n\n /**\n * Delete content from the content bank.\n *\n * @param {int} contentid The content to delete.\n * @param {int} contextid The contextid where the content belongs.\n */\n function deleteContent(contentid, contextid) {\n var request = {\n methodname: 'core_contentbank_delete_content',\n args: {\n contentids: {contentid}\n }\n };\n\n var requestType = 'success';\n Ajax.call([request])[0].then(function(data) {\n if (data.result) {\n return 'contentdeleted';\n }\n requestType = 'error';\n return 'contentnotdeleted';\n\n }).done(function(message) {\n var params = {\n contextid: contextid\n };\n if (requestType == 'success') {\n params.statusmsg = message;\n } else {\n params.errormsg = message;\n }\n // Redirect to the main content bank page and display the message as a notification.\n window.location.href = Url.relativeUrl('contentbank/index.php', params, false);\n }).fail(Notification.exception);\n }\n\n /**\n * Rename content in the content bank.\n *\n * @param {int} contentid The content to rename.\n * @param {string} name The new name for the content.\n */\n function renameContent(contentid, name) {\n var request = {\n methodname: 'core_contentbank_rename_content',\n args: {\n contentid: contentid,\n name: name\n }\n };\n var requestType = 'success';\n Ajax.call([request])[0].then(function(data) {\n if (data.result) {\n return 'contentrenamed';\n }\n requestType = 'error';\n return data.warnings[0].message;\n\n }).then(function(message) {\n var params = null;\n if (requestType == 'success') {\n params = {\n id: contentid,\n statusmsg: message\n };\n // Redirect to the content view page and display the message as a notification.\n window.location.href = Url.relativeUrl('contentbank/view.php', params, false);\n } else {\n // Fetch error notifications.\n Notification.addNotification({\n message: message,\n type: 'error'\n });\n Notification.fetchNotifications();\n }\n return;\n }).catch(Notification.exception);\n }\n\n return /** @alias module:core_contentbank/actions */ {\n // Public variables and functions.\n\n /**\n * Initialise the contentbank actions.\n *\n * @method init\n * @return {Actions}\n */\n 'init': function() {\n return new Actions();\n }\n };\n});\n"],"file":"actions.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/actions.js"],"names":["define","$","Ajax","Notification","Str","Templates","Url","ModalFactory","ModalEvents","ACTIONS","DELETE_CONTENT","RENAME_CONTENT","Actions","registerEvents","prototype","click","e","preventDefault","contentname","data","contentid","contextid","deleteButtonText","get_strings","key","component","param","name","then","langStrings","modalTitle","modalContent","create","title","body","type","types","SAVE_CANCEL","large","done","modal","setSaveButtonText","getRoot","on","save","deleteContent","hidden","destroy","show","catch","exception","saveButtonText","render","newname","val","trim","renameContent","alert","requestType","call","methodname","args","contentids","result","message","params","statusmsg","errormsg","window","location","href","relativeUrl","fail","warnings","id","addNotification","fetchNotifications"],"mappings":"AAsBAA,OAAM,4BAAC,CACH,QADG,CAEH,WAFG,CAGH,mBAHG,CAIH,UAJG,CAKH,gBALG,CAMH,UANG,CAOH,oBAPG,CAQH,mBARG,CAAD,CASN,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAgCC,CAAhC,CAAqCC,CAArC,CAAgDC,CAAhD,CAAqDC,CAArD,CAAmEC,CAAnE,CAAgF,IAOxEC,CAAAA,CAAO,CAAG,CACVC,cAAc,CAAE,iCADN,CAEVC,cAAc,CAAE,iCAFN,CAP8D,CAexEC,CAAO,CAAG,UAAW,CACrB,KAAKC,cAAL,EACH,CAjB2E,CAsB5ED,CAAO,CAACE,SAAR,CAAkBD,cAAlB,CAAmC,UAAW,CAC1CZ,CAAC,CAACQ,CAAO,CAACC,cAAT,CAAD,CAA0BK,KAA1B,CAAgC,SAASC,CAAT,CAAY,CACxCA,CAAC,CAACC,cAAF,GADwC,GAGpCC,CAAAA,CAAW,CAAGjB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,aAAb,CAHsB,CAIpCC,CAAS,CAAGnB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,WAAb,CAJwB,CAKpCE,CAAS,CAAGpB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,WAAb,CALwB,CAyBpCG,CAAgB,CAAG,EAzBiB,CA0BxClB,CAAG,CAACmB,WAAJ,CAnBc,CACV,CACIC,GAAG,CAAE,eADT,CAEIC,SAAS,CAAE,kBAFf,CADU,CAKV,CACID,GAAG,CAAE,sBADT,CAEIC,SAAS,CAAE,kBAFf,CAGIC,KAAK,CAAE,CACHC,IAAI,CAAET,CADH,CAHX,CALU,CAYV,CACIM,GAAG,CAAE,QADT,CAEIC,SAAS,CAAE,MAFf,CAZU,CAmBd,EAAyBG,IAAzB,CAA8B,SAASC,CAAT,CAAsB,IAC5CC,CAAAA,CAAU,CAAGD,CAAW,CAAC,CAAD,CADoB,CAE5CE,CAAY,CAAGF,CAAW,CAAC,CAAD,CAFkB,CAGhDP,CAAgB,CAAGO,CAAW,CAAC,CAAD,CAA9B,CAEA,MAAOtB,CAAAA,CAAY,CAACyB,MAAb,CAAoB,CACvBC,KAAK,CAAEH,CADgB,CAEvBI,IAAI,CAAEH,CAFiB,CAGvBI,IAAI,CAAE5B,CAAY,CAAC6B,KAAb,CAAmBC,WAHF,CAIvBC,KAAK,GAJkB,CAApB,CAMV,CAXD,EAWGC,IAXH,CAWQ,SAASC,CAAT,CAAgB,CACpBA,CAAK,CAACC,iBAAN,CAAwBnB,CAAxB,EACAkB,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACoC,IAA/B,CAAqC,UAAW,CAE5C,MAAOC,CAAAA,CAAa,CAACzB,CAAD,CAAYC,CAAZ,CACvB,CAHD,EAMAmB,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACsC,MAA/B,CAAuC,UAAW,CAE9CN,CAAK,CAACO,OAAN,EACH,CAHD,EAMAP,CAAK,CAACQ,IAAN,EAGH,CA5BD,EA4BGC,KA5BH,CA4BS9C,CAAY,CAAC+C,SA5BtB,CA6BH,CAvDD,EAyDAjD,CAAC,CAACQ,CAAO,CAACE,cAAT,CAAD,CAA0BI,KAA1B,CAAgC,SAASC,CAAT,CAAY,CACxCA,CAAC,CAACC,cAAF,GADwC,GAGpCC,CAAAA,CAAW,CAAGjB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,aAAb,CAHsB,CAIpCC,CAAS,CAAGnB,CAAC,CAAC,IAAD,CAAD,CAAQkB,IAAR,CAAa,WAAb,CAJwB,CAiBpCgC,CAAc,CAAG,EAjBmB,CAkBxC/C,CAAG,CAACmB,WAAJ,CAZc,CACV,CACIC,GAAG,CAAE,eADT,CAEIC,SAAS,CAAE,kBAFf,CADU,CAKV,CACID,GAAG,CAAE,QADT,CAEIC,SAAS,CAAE,kBAFf,CALU,CAYd,EAAyBG,IAAzB,CAA8B,SAASC,CAAT,CAAsB,CAChD,GAAIC,CAAAA,CAAU,CAAGD,CAAW,CAAC,CAAD,CAA5B,CACAsB,CAAc,CAAGtB,CAAW,CAAC,CAAD,CAA5B,CAEA,MAAOtB,CAAAA,CAAY,CAACyB,MAAb,CAAoB,CACvBC,KAAK,CAAEH,CADgB,CAEvBI,IAAI,CAAE7B,CAAS,CAAC+C,MAAV,CAAiB,gCAAjB,CAAmD,CAAC,UAAahC,CAAd,CAAyB,KAAQF,CAAjC,CAAnD,CAFiB,CAGvBiB,IAAI,CAAE5B,CAAY,CAAC6B,KAAb,CAAmBC,WAHF,CAApB,CAKV,CATD,EASGT,IATH,CASQ,SAASY,CAAT,CAAgB,CACpBA,CAAK,CAACC,iBAAN,CAAwBU,CAAxB,EACAX,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACoC,IAA/B,CAAqC,SAAS5B,CAAT,CAAY,CAE7C,GAAIqC,CAAAA,CAAO,CAAGpD,CAAC,CAAC,UAAD,CAAD,CAAcqD,GAAd,GAAoBC,IAApB,EAAd,CACA,GAAIF,CAAJ,CAAa,CACTG,CAAa,CAACpC,CAAD,CAAYiC,CAAZ,CAChB,CAFD,IAEO,CAUHjD,CAAG,CAACmB,WAAJ,CATmB,CACf,CACIC,GAAG,CAAE,OADT,CADe,CAIf,CACIA,GAAG,CAAE,qBADT,CAEIC,SAAS,CAAE,kBAFf,CAJe,CASnB,EAA8BG,IAA9B,CAAmC,SAASC,CAAT,CAAsB,CACrD1B,CAAY,CAACsD,KAAb,CAAmB5B,CAAW,CAAC,CAAD,CAA9B,CAAmCA,CAAW,CAAC,CAAD,CAA9C,CACH,CAFD,EAEGoB,KAFH,CAES9C,CAAY,CAAC+C,SAFtB,EAGAlC,CAAC,CAACC,cAAF,EACH,CACJ,CApBD,EAuBAuB,CAAK,CAACE,OAAN,GAAgBC,EAAhB,CAAmBnC,CAAW,CAACsC,MAA/B,CAAuC,UAAW,CAE9CN,CAAK,CAACO,OAAN,EACH,CAHD,EAMAP,CAAK,CAACQ,IAAN,EAGH,CA3CD,EA2CGC,KA3CH,CA2CS9C,CAAY,CAAC+C,SA3CtB,CA4CH,CA9DD,CA+DH,CAzHD,CAiIA,QAASL,CAAAA,CAAT,CAAuBzB,CAAvB,CAAkCC,CAAlC,CAA6C,IAQrCqC,CAAAA,CAAW,CAAG,SARuB,CASzCxD,CAAI,CAACyD,IAAL,CAAU,CARI,CACVC,UAAU,CAAE,iCADF,CAEVC,IAAI,CAAE,CACFC,UAAU,CAAE,CAAC1C,SAAS,CAATA,CAAD,CADV,CAFI,CAQJ,CAAV,EAAqB,CAArB,EAAwBQ,IAAxB,CAA6B,SAAST,CAAT,CAAe,CACxC,GAAIA,CAAI,CAAC4C,MAAT,CAAiB,CACb,MAAO,gBACV,CACDL,CAAW,CAAG,OAAd,CACA,MAAO,mBAEV,CAPD,EAOGnB,IAPH,CAOQ,SAASyB,CAAT,CAAkB,CACtB,GAAIC,CAAAA,CAAM,CAAG,CACT5C,SAAS,CAAEA,CADF,CAAb,CAGA,GAAmB,SAAf,EAAAqC,CAAJ,CAA8B,CAC1BO,CAAM,CAACC,SAAP,CAAmBF,CACtB,CAFD,IAEO,CACHC,CAAM,CAACE,QAAP,CAAkBH,CACrB,CAEDI,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBhE,CAAG,CAACiE,WAAJ,CAAgB,uBAAhB,CAAyCN,CAAzC,IAC1B,CAlBD,EAkBGO,IAlBH,CAkBQrE,CAAY,CAAC+C,SAlBrB,CAmBH,CAQD,QAASM,CAAAA,CAAT,CAAuBpC,CAAvB,CAAkCO,CAAlC,CAAwC,IAQhC+B,CAAAA,CAAW,CAAG,SARkB,CASpCxD,CAAI,CAACyD,IAAL,CAAU,CARI,CACVC,UAAU,CAAE,iCADF,CAEVC,IAAI,CAAE,CACFzC,SAAS,CAAEA,CADT,CAEFO,IAAI,CAAEA,CAFJ,CAFI,CAQJ,CAAV,EAAqB,CAArB,EAAwBC,IAAxB,CAA6B,SAAST,CAAT,CAAe,CACxC,GAAIA,CAAI,CAAC4C,MAAT,CAAiB,CACb,MAAO,gBACV,CACDL,CAAW,CAAG,OAAd,CACA,MAAOvC,CAAAA,CAAI,CAACsD,QAAL,CAAc,CAAd,EAAiBT,OAE3B,CAPD,EAOGpC,IAPH,CAOQ,SAASoC,CAAT,CAAkB,CACtB,GAAIC,CAAAA,CAAM,CAAG,IAAb,CACA,GAAmB,SAAf,EAAAP,CAAJ,CAA8B,CAC1BO,CAAM,CAAG,CACLS,EAAE,CAAEtD,CADC,CAEL8C,SAAS,CAAEF,CAFN,CAAT,CAKAI,MAAM,CAACC,QAAP,CAAgBC,IAAhB,CAAuBhE,CAAG,CAACiE,WAAJ,CAAgB,sBAAhB,CAAwCN,CAAxC,IAC1B,CAPD,IAOO,CAEH9D,CAAY,CAACwE,eAAb,CAA6B,CACzBX,OAAO,CAAEA,CADgB,CAEzB7B,IAAI,CAAE,OAFmB,CAA7B,EAIAhC,CAAY,CAACyE,kBAAb,EACH,CAEJ,CAzBD,EAyBG3B,KAzBH,CAyBS9C,CAAY,CAAC+C,SAzBtB,CA0BH,CAED,MAAqD,CASjD,KAAQ,eAAW,CACf,MAAO,IAAItC,CAAAA,CACd,CAXgD,CAaxD,CAtPK,CAAN","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 .\n\n/**\n * Module to manage content bank actions, such as delete or rename.\n *\n * @module core_contentbank/actions\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/notification',\n 'core/str',\n 'core/templates',\n 'core/url',\n 'core/modal_factory',\n 'core/modal_events'],\nfunction($, Ajax, Notification, Str, Templates, Url, ModalFactory, ModalEvents) {\n\n /**\n * List of action selectors.\n *\n * @type {{DELETE_CONTENT: string}}\n */\n var ACTIONS = {\n DELETE_CONTENT: '[data-action=\"deletecontent\"]',\n RENAME_CONTENT: '[data-action=\"renamecontent\"]',\n };\n\n /**\n * Actions class.\n */\n var Actions = function() {\n this.registerEvents();\n };\n\n /**\n * Register event listeners.\n */\n Actions.prototype.registerEvents = function() {\n $(ACTIONS.DELETE_CONTENT).click(function(e) {\n e.preventDefault();\n\n var contentname = $(this).data('contentname');\n var contentid = $(this).data('contentid');\n var contextid = $(this).data('contextid');\n\n var strings = [\n {\n key: 'deletecontent',\n component: 'core_contentbank'\n },\n {\n key: 'deletecontentconfirm',\n component: 'core_contentbank',\n param: {\n name: contentname,\n }\n },\n {\n key: 'delete',\n component: 'core'\n },\n ];\n\n var deleteButtonText = '';\n Str.get_strings(strings).then(function(langStrings) {\n var modalTitle = langStrings[0];\n var modalContent = langStrings[1];\n deleteButtonText = langStrings[2];\n\n return ModalFactory.create({\n title: modalTitle,\n body: modalContent,\n type: ModalFactory.types.SAVE_CANCEL,\n large: true\n });\n }).done(function(modal) {\n modal.setSaveButtonText(deleteButtonText);\n modal.getRoot().on(ModalEvents.save, function() {\n // The action is now confirmed, sending an action for it.\n return deleteContent(contentid, contextid);\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal.\n modal.show();\n\n return;\n }).catch(Notification.exception);\n });\n\n $(ACTIONS.RENAME_CONTENT).click(function(e) {\n e.preventDefault();\n\n var contentname = $(this).data('contentname');\n var contentid = $(this).data('contentid');\n\n var strings = [\n {\n key: 'renamecontent',\n component: 'core_contentbank'\n },\n {\n key: 'rename',\n component: 'core_contentbank'\n },\n ];\n\n var saveButtonText = '';\n Str.get_strings(strings).then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n\n return ModalFactory.create({\n title: modalTitle,\n body: Templates.render('core_contentbank/renamecontent', {'contentid': contentid, 'name': contentname}),\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n modal.getRoot().on(ModalEvents.save, function(e) {\n // The action is now confirmed, sending an action for it.\n var newname = $(\"#newname\").val().trim();\n if (newname) {\n renameContent(contentid, newname);\n } else {\n var errorStrings = [\n {\n key: 'error',\n },\n {\n key: 'emptynamenotallowed',\n component: 'core_contentbank',\n },\n ];\n Str.get_strings(errorStrings).then(function(langStrings) {\n Notification.alert(langStrings[0], langStrings[1]);\n }).catch(Notification.exception);\n e.preventDefault();\n }\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Show the modal.\n modal.show();\n\n return;\n }).catch(Notification.exception);\n });\n };\n\n /**\n * Delete content from the content bank.\n *\n * @param {int} contentid The content to delete.\n * @param {int} contextid The contextid where the content belongs.\n */\n function deleteContent(contentid, contextid) {\n var request = {\n methodname: 'core_contentbank_delete_content',\n args: {\n contentids: {contentid}\n }\n };\n\n var requestType = 'success';\n Ajax.call([request])[0].then(function(data) {\n if (data.result) {\n return 'contentdeleted';\n }\n requestType = 'error';\n return 'contentnotdeleted';\n\n }).done(function(message) {\n var params = {\n contextid: contextid\n };\n if (requestType == 'success') {\n params.statusmsg = message;\n } else {\n params.errormsg = message;\n }\n // Redirect to the main content bank page and display the message as a notification.\n window.location.href = Url.relativeUrl('contentbank/index.php', params, false);\n }).fail(Notification.exception);\n }\n\n /**\n * Rename content in the content bank.\n *\n * @param {int} contentid The content to rename.\n * @param {string} name The new name for the content.\n */\n function renameContent(contentid, name) {\n var request = {\n methodname: 'core_contentbank_rename_content',\n args: {\n contentid: contentid,\n name: name\n }\n };\n var requestType = 'success';\n Ajax.call([request])[0].then(function(data) {\n if (data.result) {\n return 'contentrenamed';\n }\n requestType = 'error';\n return data.warnings[0].message;\n\n }).then(function(message) {\n var params = null;\n if (requestType == 'success') {\n params = {\n id: contentid,\n statusmsg: message\n };\n // Redirect to the content view page and display the message as a notification.\n window.location.href = Url.relativeUrl('contentbank/view.php', params, false);\n } else {\n // Fetch error notifications.\n Notification.addNotification({\n message: message,\n type: 'error'\n });\n Notification.fetchNotifications();\n }\n return;\n }).catch(Notification.exception);\n }\n\n return /** @alias module:core_contentbank/actions */ {\n // Public variables and functions.\n\n /**\n * Initialise the contentbank actions.\n *\n * @method init\n * @return {Actions}\n */\n 'init': function() {\n return new Actions();\n }\n };\n});\n"],"file":"actions.min.js"} \ No newline at end of file diff --git a/contentbank/amd/build/search.min.js.map b/contentbank/amd/build/search.min.js.map index ae3bad772ca..d618defb07e 100644 --- a/contentbank/amd/build/search.min.js.map +++ b/contentbank/amd/build/search.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/search.js"],"names":["init","pendingPromise","Pending","root","selectors","regions","contentbank","registerListenerEvents","resolve","searchInput","find","elements","searchinput","on","actions","search","e","preventDefault","toggleSearchResultsView","value","clearSearch","focus","addEventListener","body","searchQuery","clearSearchButton","navbarBreadcrumb","cbnavbarbreadcrumb","navbarTotal","cbnavbartotalsearch","filteredContents","filterContents","length","classList","remove","add","innerHTML","searchTerm","contents","Array","from","listitem","searchResults","forEach","content","contentName","getAttribute","toLowerCase","includes","push","contentNameElement","querySelector","cbcontentname","highlight","text","highlightText","result","pos","indexOf","substr"],"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 .\n\n/**\n * Search methods for finding contents in the content bank.\n *\n * @module core_contentbank/search\n * @package core_contentbank\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport selectors from 'core_contentbank/selectors';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\nimport {debounce} from 'core/utils';\n\n/**\n * Set up the search.\n *\n * @method init\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n\n const root = $(selectors.regions.contentbank);\n registerListenerEvents(root);\n\n pendingPromise.resolve();\n};\n\n/**\n * Register contentbank search related event listeners.\n *\n * @method registerListenerEvents\n * @param {Object} root The root element for the contentbank.\n */\nconst registerListenerEvents = (root) => {\n\n const searchInput = root.find(selectors.elements.searchinput)[0];\n\n root.on('click', selectors.actions.search, function(e) {\n e.preventDefault();\n toggleSearchResultsView(root, searchInput.value);\n });\n\n root.on('click', selectors.actions.clearSearch, function(e) {\n e.preventDefault();\n searchInput.value = \"\";\n searchInput.focus();\n toggleSearchResultsView(root, searchInput.value);\n });\n\n // The search input is also triggered.\n searchInput.addEventListener('input', debounce(() => {\n // Display the search results.\n toggleSearchResultsView(root, searchInput.value);\n }, 300));\n\n};\n\n/**\n * Toggle (display/hide) the search results depending on the value of the search query.\n *\n * @method toggleSearchResultsView\n * @param {HTMLElement} body The root element for the contentbank.\n * @param {String} searchQuery The search query.\n */\nconst toggleSearchResultsView = async(body, searchQuery) => {\n const clearSearchButton = body.find(selectors.actions.clearSearch)[0];\n\n const navbarBreadcrumb = body.find(selectors.elements.cbnavbarbreadcrumb)[0];\n const navbarTotal = body.find(selectors.elements.cbnavbartotalsearch)[0];\n // Update the results.\n const filteredContents = filterContents(body, searchQuery);\n if (searchQuery.length > 0) {\n // As the search query is present, search results should be displayed.\n\n // Display the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.remove('d-none');\n\n // Change the cb-navbar to display total items found.\n navbarBreadcrumb.classList.add('d-none');\n navbarTotal.innerHTML = await getString('itemsfound', 'core_contentbank', filteredContents.length);\n navbarTotal.classList.remove('d-none');\n } else {\n // As search query is not present, the search results should be removed.\n\n // Hide the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.add('d-none');\n\n // Display again the breadcrumb in the navbar.\n navbarBreadcrumb.classList.remove('d-none');\n navbarTotal.classList.add('d-none');\n }\n};\n\n/**\n * Return the list of contents which have a name that matches the given search term.\n *\n * @method filterContents\n * @param {HTMLElement} body The root element for the contentbank.\n * @param {String} searchTerm The search term to match.\n * @return {Array}\n */\nconst filterContents = (body, searchTerm) => {\n const contents = Array.from(body.find(selectors.elements.listitem));\n const searchResults = [];\n contents.forEach((content) => {\n const contentName = content.getAttribute('data-name');\n if (searchTerm === '' || contentName.toLowerCase().includes(searchTerm.toLowerCase())) {\n // The content matches the search criteria so it should be displayed and hightlighted.\n searchResults.push(content);\n const contentNameElement = content.querySelector(selectors.regions.cbcontentname);\n contentNameElement.innerHTML = highlight(contentName, searchTerm);\n content.classList.remove('d-none');\n } else {\n content.classList.add('d-none');\n }\n });\n\n return searchResults;\n};\n\n/**\n * Highlight a given string in a text.\n *\n * @method highlight\n * @param {String} text The whole text.\n * @param {String} highlightText The piece of text to highlight.\n * @return {String}\n */\nconst highlight = (text, highlightText) => {\n let result = text;\n if (highlightText !== '') {\n const pos = text.toLowerCase().indexOf(highlightText.toLowerCase());\n if (pos > -1) {\n result = text.substr(0, pos) + '' + text.substr(pos, highlightText.length) + '' +\n text.substr(pos + highlightText.length);\n }\n }\n\n return result;\n};\n"],"file":"search.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/search.js"],"names":["init","pendingPromise","Pending","root","selectors","regions","contentbank","registerListenerEvents","resolve","searchInput","find","elements","searchinput","on","actions","search","e","preventDefault","toggleSearchResultsView","value","clearSearch","focus","addEventListener","body","searchQuery","clearSearchButton","navbarBreadcrumb","cbnavbarbreadcrumb","navbarTotal","cbnavbartotalsearch","filteredContents","filterContents","length","classList","remove","add","innerHTML","searchTerm","contents","Array","from","listitem","searchResults","forEach","content","contentName","getAttribute","toLowerCase","includes","push","contentNameElement","querySelector","cbcontentname","highlight","text","highlightText","result","pos","indexOf","substr"],"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 .\n\n/**\n * Search methods for finding contents in the content bank.\n *\n * @module core_contentbank/search\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport selectors from 'core_contentbank/selectors';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\nimport {debounce} from 'core/utils';\n\n/**\n * Set up the search.\n *\n * @method init\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n\n const root = $(selectors.regions.contentbank);\n registerListenerEvents(root);\n\n pendingPromise.resolve();\n};\n\n/**\n * Register contentbank search related event listeners.\n *\n * @method registerListenerEvents\n * @param {Object} root The root element for the contentbank.\n */\nconst registerListenerEvents = (root) => {\n\n const searchInput = root.find(selectors.elements.searchinput)[0];\n\n root.on('click', selectors.actions.search, function(e) {\n e.preventDefault();\n toggleSearchResultsView(root, searchInput.value);\n });\n\n root.on('click', selectors.actions.clearSearch, function(e) {\n e.preventDefault();\n searchInput.value = \"\";\n searchInput.focus();\n toggleSearchResultsView(root, searchInput.value);\n });\n\n // The search input is also triggered.\n searchInput.addEventListener('input', debounce(() => {\n // Display the search results.\n toggleSearchResultsView(root, searchInput.value);\n }, 300));\n\n};\n\n/**\n * Toggle (display/hide) the search results depending on the value of the search query.\n *\n * @method toggleSearchResultsView\n * @param {HTMLElement} body The root element for the contentbank.\n * @param {String} searchQuery The search query.\n */\nconst toggleSearchResultsView = async(body, searchQuery) => {\n const clearSearchButton = body.find(selectors.actions.clearSearch)[0];\n\n const navbarBreadcrumb = body.find(selectors.elements.cbnavbarbreadcrumb)[0];\n const navbarTotal = body.find(selectors.elements.cbnavbartotalsearch)[0];\n // Update the results.\n const filteredContents = filterContents(body, searchQuery);\n if (searchQuery.length > 0) {\n // As the search query is present, search results should be displayed.\n\n // Display the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.remove('d-none');\n\n // Change the cb-navbar to display total items found.\n navbarBreadcrumb.classList.add('d-none');\n navbarTotal.innerHTML = await getString('itemsfound', 'core_contentbank', filteredContents.length);\n navbarTotal.classList.remove('d-none');\n } else {\n // As search query is not present, the search results should be removed.\n\n // Hide the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.add('d-none');\n\n // Display again the breadcrumb in the navbar.\n navbarBreadcrumb.classList.remove('d-none');\n navbarTotal.classList.add('d-none');\n }\n};\n\n/**\n * Return the list of contents which have a name that matches the given search term.\n *\n * @method filterContents\n * @param {HTMLElement} body The root element for the contentbank.\n * @param {String} searchTerm The search term to match.\n * @return {Array}\n */\nconst filterContents = (body, searchTerm) => {\n const contents = Array.from(body.find(selectors.elements.listitem));\n const searchResults = [];\n contents.forEach((content) => {\n const contentName = content.getAttribute('data-name');\n if (searchTerm === '' || contentName.toLowerCase().includes(searchTerm.toLowerCase())) {\n // The content matches the search criteria so it should be displayed and hightlighted.\n searchResults.push(content);\n const contentNameElement = content.querySelector(selectors.regions.cbcontentname);\n contentNameElement.innerHTML = highlight(contentName, searchTerm);\n content.classList.remove('d-none');\n } else {\n content.classList.add('d-none');\n }\n });\n\n return searchResults;\n};\n\n/**\n * Highlight a given string in a text.\n *\n * @method highlight\n * @param {String} text The whole text.\n * @param {String} highlightText The piece of text to highlight.\n * @return {String}\n */\nconst highlight = (text, highlightText) => {\n let result = text;\n if (highlightText !== '') {\n const pos = text.toLowerCase().indexOf(highlightText.toLowerCase());\n if (pos > -1) {\n result = text.substr(0, pos) + '' + text.substr(pos, highlightText.length) + '' +\n text.substr(pos + highlightText.length);\n }\n }\n\n return result;\n};\n"],"file":"search.min.js"} \ No newline at end of file diff --git a/contentbank/amd/build/selectors.min.js.map b/contentbank/amd/build/selectors.min.js.map index 62be4440b62..52de6bc7147 100644 --- a/contentbank/amd/build/selectors.min.js.map +++ b/contentbank/amd/build/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/selectors.js"],"names":["getDataSelector","name","value","regions","cbcontentname","contentbank","filearea","actions","search","clearSearch","viewgrid","viewlist","sortname","sortdate","sortsize","sorttype","sortauthor","elements","listitem","cbnavbarbreadcrumb","cbnavbartotalsearch","searchinput","sortbutton"],"mappings":"+IAgCMA,CAAAA,CAAe,CAAG,SAACC,CAAD,CAAOC,CAAP,CAAiB,CACrC,sBAAgBD,CAAhB,eAAyBC,CAAzB,OACH,C,GAEc,CACXC,OAAO,CAAE,CACLC,aAAa,CAAEJ,CAAe,CAAC,QAAD,CAAW,iBAAX,CADzB,CAELK,WAAW,CAAEL,CAAe,CAAC,QAAD,CAAW,aAAX,CAFvB,CAGLM,QAAQ,CAAEN,CAAe,CAAC,QAAD,CAAW,UAAX,CAHpB,CADE,CAMXO,OAAO,CAAE,CACLC,MAAM,CAAER,CAAe,CAAC,QAAD,CAAW,eAAX,CADlB,CAELS,WAAW,CAAET,CAAe,CAAC,QAAD,CAAW,aAAX,CAFvB,CAGLU,QAAQ,CAAEV,CAAe,CAAC,QAAD,CAAW,UAAX,CAHpB,CAILW,QAAQ,CAAEX,CAAe,CAAC,QAAD,CAAW,UAAX,CAJpB,CAKLY,QAAQ,CAAEZ,CAAe,CAAC,QAAD,CAAW,UAAX,CALpB,CAMLa,QAAQ,CAAEb,CAAe,CAAC,QAAD,CAAW,UAAX,CANpB,CAOLc,QAAQ,CAAEd,CAAe,CAAC,QAAD,CAAW,UAAX,CAPpB,CAQLe,QAAQ,CAAEf,CAAe,CAAC,QAAD,CAAW,UAAX,CARpB,CASLgB,UAAU,CAAEhB,CAAe,CAAC,QAAD,CAAW,YAAX,CATtB,CANE,CAiBXiB,QAAQ,CAAE,CACNC,QAAQ,CAAE,cADJ,CAENC,kBAAkB,CAAE,uBAFd,CAGNC,mBAAmB,CAAE,wBAHf,CAINC,WAAW,CAAE,cAJP,CAKNC,UAAU,CAAE,aALN,CAjBC,C","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 .\n\n/**\n * Define all of the selectors we will be using on the contentbank interface.\n *\n * @module core_contentbank/selectors\n * @package core_contentbank\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n *\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n regions: {\n cbcontentname: getDataSelector('region', 'cb-content-name'),\n contentbank: getDataSelector('region', 'contentbank'),\n filearea: getDataSelector('region', 'filearea')\n },\n actions: {\n search: getDataSelector('action', 'searchcontent'),\n clearSearch: getDataSelector('action', 'clearsearch'),\n viewgrid: getDataSelector('action', 'viewgrid'),\n viewlist: getDataSelector('action', 'viewlist'),\n sortname: getDataSelector('action', 'sortname'),\n sortdate: getDataSelector('action', 'sortdate'),\n sortsize: getDataSelector('action', 'sortsize'),\n sorttype: getDataSelector('action', 'sorttype'),\n sortauthor: getDataSelector('action', 'sortauthor'),\n },\n elements: {\n listitem: '.cb-listitem',\n cbnavbarbreadcrumb: '.cb-navbar-breadbrumb',\n cbnavbartotalsearch: '.cb-navbar-totalsearch',\n searchinput: '#searchinput',\n sortbutton: '.cb-btnsort'\n },\n};\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/selectors.js"],"names":["getDataSelector","name","value","regions","cbcontentname","contentbank","filearea","actions","search","clearSearch","viewgrid","viewlist","sortname","sortdate","sortsize","sorttype","sortauthor","elements","listitem","cbnavbarbreadcrumb","cbnavbartotalsearch","searchinput","sortbutton"],"mappings":"+IA+BMA,CAAAA,CAAe,CAAG,SAACC,CAAD,CAAOC,CAAP,CAAiB,CACrC,sBAAgBD,CAAhB,eAAyBC,CAAzB,OACH,C,GAEc,CACXC,OAAO,CAAE,CACLC,aAAa,CAAEJ,CAAe,CAAC,QAAD,CAAW,iBAAX,CADzB,CAELK,WAAW,CAAEL,CAAe,CAAC,QAAD,CAAW,aAAX,CAFvB,CAGLM,QAAQ,CAAEN,CAAe,CAAC,QAAD,CAAW,UAAX,CAHpB,CADE,CAMXO,OAAO,CAAE,CACLC,MAAM,CAAER,CAAe,CAAC,QAAD,CAAW,eAAX,CADlB,CAELS,WAAW,CAAET,CAAe,CAAC,QAAD,CAAW,aAAX,CAFvB,CAGLU,QAAQ,CAAEV,CAAe,CAAC,QAAD,CAAW,UAAX,CAHpB,CAILW,QAAQ,CAAEX,CAAe,CAAC,QAAD,CAAW,UAAX,CAJpB,CAKLY,QAAQ,CAAEZ,CAAe,CAAC,QAAD,CAAW,UAAX,CALpB,CAMLa,QAAQ,CAAEb,CAAe,CAAC,QAAD,CAAW,UAAX,CANpB,CAOLc,QAAQ,CAAEd,CAAe,CAAC,QAAD,CAAW,UAAX,CAPpB,CAQLe,QAAQ,CAAEf,CAAe,CAAC,QAAD,CAAW,UAAX,CARpB,CASLgB,UAAU,CAAEhB,CAAe,CAAC,QAAD,CAAW,YAAX,CATtB,CANE,CAiBXiB,QAAQ,CAAE,CACNC,QAAQ,CAAE,cADJ,CAENC,kBAAkB,CAAE,uBAFd,CAGNC,mBAAmB,CAAE,wBAHf,CAINC,WAAW,CAAE,cAJP,CAKNC,UAAU,CAAE,aALN,CAjBC,C","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 .\n\n/**\n * Define all of the selectors we will be using on the contentbank interface.\n *\n * @module core_contentbank/selectors\n * @copyright 2020 Sara Arjona \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n *\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n regions: {\n cbcontentname: getDataSelector('region', 'cb-content-name'),\n contentbank: getDataSelector('region', 'contentbank'),\n filearea: getDataSelector('region', 'filearea')\n },\n actions: {\n search: getDataSelector('action', 'searchcontent'),\n clearSearch: getDataSelector('action', 'clearsearch'),\n viewgrid: getDataSelector('action', 'viewgrid'),\n viewlist: getDataSelector('action', 'viewlist'),\n sortname: getDataSelector('action', 'sortname'),\n sortdate: getDataSelector('action', 'sortdate'),\n sortsize: getDataSelector('action', 'sortsize'),\n sorttype: getDataSelector('action', 'sorttype'),\n sortauthor: getDataSelector('action', 'sortauthor'),\n },\n elements: {\n listitem: '.cb-listitem',\n cbnavbarbreadcrumb: '.cb-navbar-breadbrumb',\n cbnavbartotalsearch: '.cb-navbar-totalsearch',\n searchinput: '#searchinput',\n sortbutton: '.cb-btnsort'\n },\n};\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/contentbank/amd/build/sort.min.js.map b/contentbank/amd/build/sort.min.js.map index 06c091c29b6..14d7eac349f 100644 --- a/contentbank/amd/build/sort.min.js.map +++ b/contentbank/amd/build/sort.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/sort.js"],"names":["init","contentBank","document","querySelector","selectors","regions","contentbank","Prefetch","prefetchStrings","registerListenerEvents","addEventListener","e","viewList","actions","viewlist","viewGrid","viewgrid","target","closest","classList","remove","add","setViewListPreference","fileArea","filearea","shownItems","querySelectorAll","elements","listitem","sortByName","sortname","ascending","updateSortButtons","updateSortOrder","sortByDate","sortdate","sortBySize","sortsize","sortByType","sorttype","sortByAuthor","sortauthor","request","methodname","args","preferences","type","value","Ajax","call","catch","Notification","exception","sortButton","sortButtons","sortbutton","forEach","button","updateButtonTitle","contains","sortString","dataset","string","then","columnName","sortByString","setAttribute","itemList","attribute","sortList","slice","sort","a","b","aa","getAttribute","bb","isNaN","parseInt","listItem","appendChild"],"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 .\n\n/**\n * Content bank UI actions.\n *\n * @module core_contentbank/sort\n * @package core_contentbank\n * @copyright 2020 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport selectors from './selectors';\nimport {get_string as getString} from 'core/str';\nimport Prefetch from 'core/prefetch';\nimport Ajax from 'core/ajax';\nimport Notification from 'core/notification';\n\n/**\n * Set up the contentbank views.\n *\n * @method init\n */\nexport const init = () => {\n const contentBank = document.querySelector(selectors.regions.contentbank);\n Prefetch.prefetchStrings('contentbank', ['contentname', 'lastmodified', 'size', 'type', 'author']);\n Prefetch.prefetchStrings('moodle', ['sortbyx', 'sortbyxreverse']);\n registerListenerEvents(contentBank);\n};\n\n/**\n * Register contentbank related event listeners.\n *\n * @method registerListenerEvents\n * @param {HTMLElement} contentBank The DOM node of the content bank\n */\nconst registerListenerEvents = (contentBank) => {\n\n contentBank.addEventListener('click', e => {\n const viewList = contentBank.querySelector(selectors.actions.viewlist);\n const viewGrid = contentBank.querySelector(selectors.actions.viewgrid);\n\n // View as Grid button.\n if (e.target.closest(selectors.actions.viewgrid)) {\n contentBank.classList.remove('view-list');\n contentBank.classList.add('view-grid');\n viewGrid.classList.add('active');\n viewList.classList.remove('active');\n setViewListPreference(false);\n\n return;\n }\n\n // View as List button.\n if (e.target.closest(selectors.actions.viewlist)) {\n contentBank.classList.remove('view-grid');\n contentBank.classList.add('view-list');\n viewList.classList.add('active');\n viewGrid.classList.remove('active');\n setViewListPreference(true);\n\n return;\n }\n\n // TODO: This should _not_ use `document`. Every query should be constrained to the content bank container.\n const fileArea = document.querySelector(selectors.regions.filearea);\n const shownItems = fileArea.querySelectorAll(selectors.elements.listitem);\n\n if (fileArea && shownItems) {\n\n // Sort by file name alphabetical\n const sortByName = e.target.closest(selectors.actions.sortname);\n if (sortByName) {\n const ascending = updateSortButtons(contentBank, sortByName);\n updateSortOrder(fileArea, shownItems, 'data-file', ascending);\n return;\n }\n\n // Sort by date.\n const sortByDate = e.target.closest(selectors.actions.sortdate);\n if (sortByDate) {\n const ascending = updateSortButtons(contentBank, sortByDate);\n updateSortOrder(fileArea, shownItems, 'data-timemodified', ascending);\n return;\n }\n\n // Sort by size.\n const sortBySize = e.target.closest(selectors.actions.sortsize);\n if (sortBySize) {\n const ascending = updateSortButtons(contentBank, sortBySize);\n updateSortOrder(fileArea, shownItems, 'data-bytes', ascending);\n return;\n }\n\n // Sort by type.\n const sortByType = e.target.closest(selectors.actions.sorttype);\n if (sortByType) {\n const ascending = updateSortButtons(contentBank, sortByType);\n updateSortOrder(fileArea, shownItems, 'data-type', ascending);\n return;\n }\n\n // Sort by author.\n const sortByAuthor = e.target.closest(selectors.actions.sortauthor);\n if (sortByAuthor) {\n const ascending = updateSortButtons(contentBank, sortByAuthor);\n updateSortOrder(fileArea, shownItems, 'data-author', ascending);\n }\n return;\n }\n });\n};\n\n\n/**\n * Set the contentbank user preference in list view\n *\n * @param {Bool} viewList view ContentBank as list.\n * @return {Promise} Repository promise.\n */\nconst setViewListPreference = function(viewList) {\n\n // If the given status is not hidden, the preference has to be deleted with a null value.\n if (viewList === false) {\n viewList = null;\n }\n\n const request = {\n methodname: 'core_user_update_user_preferences',\n args: {\n preferences: [\n {\n type: 'core_contentbank_view_list',\n value: viewList\n }\n ]\n }\n };\n\n return Ajax.call([request])[0].catch(Notification.exception);\n};\n\n/**\n * Update the sort button view.\n *\n * @method updateSortButtons\n * @param {HTMLElement} contentBank The DOM node of the contentbank button\n * @param {HTMLElement} sortButton The DOM node of the sort button\n * @return {Bool} sort ascending\n */\nconst updateSortButtons = (contentBank, sortButton) => {\n const sortButtons = contentBank.querySelectorAll(selectors.elements.sortbutton);\n\n sortButtons.forEach((button) => {\n if (button !== sortButton) {\n button.classList.remove('dir-asc');\n button.classList.remove('dir-desc');\n button.classList.add('dir-none');\n\n updateButtonTitle(button, false);\n }\n });\n\n let ascending = true;\n\n if (sortButton.classList.contains('dir-none')) {\n sortButton.classList.remove('dir-none');\n sortButton.classList.add('dir-asc');\n } else if (sortButton.classList.contains('dir-asc')) {\n sortButton.classList.remove('dir-asc');\n sortButton.classList.add('dir-desc');\n ascending = false;\n } else if (sortButton.classList.contains('dir-desc')) {\n sortButton.classList.remove('dir-desc');\n sortButton.classList.add('dir-asc');\n }\n\n updateButtonTitle(sortButton, ascending);\n\n return ascending;\n};\n\n/**\n * Update the button title.\n *\n * @method updateButtonTitle\n * @param {HTMLElement} button Button to update\n * @param {Bool} ascending Sort direction\n * @return {Promise} string promise\n */\nconst updateButtonTitle = (button, ascending) => {\n\n const sortString = (ascending ? 'sortbyxreverse' : 'sortbyx');\n\n return getString(button.dataset.string, 'contentbank')\n .then(columnName => {\n return getString(sortString, 'core', columnName);\n })\n .then(sortByString => {\n button.setAttribute('title', sortByString);\n return sortByString;\n })\n .catch();\n};\n\n/**\n * Update the sort order of the itemlist and update the DOM\n *\n * @method updateSortOrder\n * @param {HTMLElement} fileArea the Dom container for the itemlist\n * @param {Array} itemList Nodelist of Dom elements\n * @param {String} attribute, the attribut to sort on\n * @param {Bool} ascending, Sort Ascending\n */\nconst updateSortOrder = (fileArea, itemList, attribute, ascending) => {\n const sortList = [].slice.call(itemList).sort(function(a, b) {\n\n let aa = a.getAttribute(attribute);\n let bb = b.getAttribute(attribute);\n if (!isNaN(aa)) {\n aa = parseInt(aa);\n bb = parseInt(bb);\n }\n\n if (ascending) {\n return aa > bb ? 1 : -1;\n } else {\n return aa < bb ? 1 : -1;\n }\n });\n sortList.forEach(listItem => fileArea.appendChild(listItem));\n};\n"],"file":"sort.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/sort.js"],"names":["init","contentBank","document","querySelector","selectors","regions","contentbank","Prefetch","prefetchStrings","registerListenerEvents","addEventListener","e","viewList","actions","viewlist","viewGrid","viewgrid","target","closest","classList","remove","add","setViewListPreference","fileArea","filearea","shownItems","querySelectorAll","elements","listitem","sortByName","sortname","ascending","updateSortButtons","updateSortOrder","sortByDate","sortdate","sortBySize","sortsize","sortByType","sorttype","sortByAuthor","sortauthor","request","methodname","args","preferences","type","value","Ajax","call","catch","Notification","exception","sortButton","sortButtons","sortbutton","forEach","button","updateButtonTitle","contains","sortString","dataset","string","then","columnName","sortByString","setAttribute","itemList","attribute","sortList","slice","sort","a","b","aa","getAttribute","bb","isNaN","parseInt","listItem","appendChild"],"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 .\n\n/**\n * Content bank UI actions.\n *\n * @module core_contentbank/sort\n * @copyright 2020 Bas Brands \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport selectors from './selectors';\nimport {get_string as getString} from 'core/str';\nimport Prefetch from 'core/prefetch';\nimport Ajax from 'core/ajax';\nimport Notification from 'core/notification';\n\n/**\n * Set up the contentbank views.\n *\n * @method init\n */\nexport const init = () => {\n const contentBank = document.querySelector(selectors.regions.contentbank);\n Prefetch.prefetchStrings('contentbank', ['contentname', 'lastmodified', 'size', 'type', 'author']);\n Prefetch.prefetchStrings('moodle', ['sortbyx', 'sortbyxreverse']);\n registerListenerEvents(contentBank);\n};\n\n/**\n * Register contentbank related event listeners.\n *\n * @method registerListenerEvents\n * @param {HTMLElement} contentBank The DOM node of the content bank\n */\nconst registerListenerEvents = (contentBank) => {\n\n contentBank.addEventListener('click', e => {\n const viewList = contentBank.querySelector(selectors.actions.viewlist);\n const viewGrid = contentBank.querySelector(selectors.actions.viewgrid);\n\n // View as Grid button.\n if (e.target.closest(selectors.actions.viewgrid)) {\n contentBank.classList.remove('view-list');\n contentBank.classList.add('view-grid');\n viewGrid.classList.add('active');\n viewList.classList.remove('active');\n setViewListPreference(false);\n\n return;\n }\n\n // View as List button.\n if (e.target.closest(selectors.actions.viewlist)) {\n contentBank.classList.remove('view-grid');\n contentBank.classList.add('view-list');\n viewList.classList.add('active');\n viewGrid.classList.remove('active');\n setViewListPreference(true);\n\n return;\n }\n\n // TODO: This should _not_ use `document`. Every query should be constrained to the content bank container.\n const fileArea = document.querySelector(selectors.regions.filearea);\n const shownItems = fileArea.querySelectorAll(selectors.elements.listitem);\n\n if (fileArea && shownItems) {\n\n // Sort by file name alphabetical\n const sortByName = e.target.closest(selectors.actions.sortname);\n if (sortByName) {\n const ascending = updateSortButtons(contentBank, sortByName);\n updateSortOrder(fileArea, shownItems, 'data-file', ascending);\n return;\n }\n\n // Sort by date.\n const sortByDate = e.target.closest(selectors.actions.sortdate);\n if (sortByDate) {\n const ascending = updateSortButtons(contentBank, sortByDate);\n updateSortOrder(fileArea, shownItems, 'data-timemodified', ascending);\n return;\n }\n\n // Sort by size.\n const sortBySize = e.target.closest(selectors.actions.sortsize);\n if (sortBySize) {\n const ascending = updateSortButtons(contentBank, sortBySize);\n updateSortOrder(fileArea, shownItems, 'data-bytes', ascending);\n return;\n }\n\n // Sort by type.\n const sortByType = e.target.closest(selectors.actions.sorttype);\n if (sortByType) {\n const ascending = updateSortButtons(contentBank, sortByType);\n updateSortOrder(fileArea, shownItems, 'data-type', ascending);\n return;\n }\n\n // Sort by author.\n const sortByAuthor = e.target.closest(selectors.actions.sortauthor);\n if (sortByAuthor) {\n const ascending = updateSortButtons(contentBank, sortByAuthor);\n updateSortOrder(fileArea, shownItems, 'data-author', ascending);\n }\n return;\n }\n });\n};\n\n\n/**\n * Set the contentbank user preference in list view\n *\n * @param {Bool} viewList view ContentBank as list.\n * @return {Promise} Repository promise.\n */\nconst setViewListPreference = function(viewList) {\n\n // If the given status is not hidden, the preference has to be deleted with a null value.\n if (viewList === false) {\n viewList = null;\n }\n\n const request = {\n methodname: 'core_user_update_user_preferences',\n args: {\n preferences: [\n {\n type: 'core_contentbank_view_list',\n value: viewList\n }\n ]\n }\n };\n\n return Ajax.call([request])[0].catch(Notification.exception);\n};\n\n/**\n * Update the sort button view.\n *\n * @method updateSortButtons\n * @param {HTMLElement} contentBank The DOM node of the contentbank button\n * @param {HTMLElement} sortButton The DOM node of the sort button\n * @return {Bool} sort ascending\n */\nconst updateSortButtons = (contentBank, sortButton) => {\n const sortButtons = contentBank.querySelectorAll(selectors.elements.sortbutton);\n\n sortButtons.forEach((button) => {\n if (button !== sortButton) {\n button.classList.remove('dir-asc');\n button.classList.remove('dir-desc');\n button.classList.add('dir-none');\n\n updateButtonTitle(button, false);\n }\n });\n\n let ascending = true;\n\n if (sortButton.classList.contains('dir-none')) {\n sortButton.classList.remove('dir-none');\n sortButton.classList.add('dir-asc');\n } else if (sortButton.classList.contains('dir-asc')) {\n sortButton.classList.remove('dir-asc');\n sortButton.classList.add('dir-desc');\n ascending = false;\n } else if (sortButton.classList.contains('dir-desc')) {\n sortButton.classList.remove('dir-desc');\n sortButton.classList.add('dir-asc');\n }\n\n updateButtonTitle(sortButton, ascending);\n\n return ascending;\n};\n\n/**\n * Update the button title.\n *\n * @method updateButtonTitle\n * @param {HTMLElement} button Button to update\n * @param {Bool} ascending Sort direction\n * @return {Promise} string promise\n */\nconst updateButtonTitle = (button, ascending) => {\n\n const sortString = (ascending ? 'sortbyxreverse' : 'sortbyx');\n\n return getString(button.dataset.string, 'contentbank')\n .then(columnName => {\n return getString(sortString, 'core', columnName);\n })\n .then(sortByString => {\n button.setAttribute('title', sortByString);\n return sortByString;\n })\n .catch();\n};\n\n/**\n * Update the sort order of the itemlist and update the DOM\n *\n * @method updateSortOrder\n * @param {HTMLElement} fileArea the Dom container for the itemlist\n * @param {Array} itemList Nodelist of Dom elements\n * @param {String} attribute, the attribut to sort on\n * @param {Bool} ascending, Sort Ascending\n */\nconst updateSortOrder = (fileArea, itemList, attribute, ascending) => {\n const sortList = [].slice.call(itemList).sort(function(a, b) {\n\n let aa = a.getAttribute(attribute);\n let bb = b.getAttribute(attribute);\n if (!isNaN(aa)) {\n aa = parseInt(aa);\n bb = parseInt(bb);\n }\n\n if (ascending) {\n return aa > bb ? 1 : -1;\n } else {\n return aa < bb ? 1 : -1;\n }\n });\n sortList.forEach(listItem => fileArea.appendChild(listItem));\n};\n"],"file":"sort.min.js"} \ No newline at end of file diff --git a/contentbank/amd/src/actions.js b/contentbank/amd/src/actions.js index 176b1277c1c..004ce4ab6f8 100644 --- a/contentbank/amd/src/actions.js +++ b/contentbank/amd/src/actions.js @@ -17,7 +17,6 @@ * Module to manage content bank actions, such as delete or rename. * * @module core_contentbank/actions - * @package core_contentbank * @copyright 2020 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/contentbank/amd/src/search.js b/contentbank/amd/src/search.js index 40a99a5a0dc..9fa09c2317f 100644 --- a/contentbank/amd/src/search.js +++ b/contentbank/amd/src/search.js @@ -17,7 +17,6 @@ * Search methods for finding contents in the content bank. * * @module core_contentbank/search - * @package core_contentbank * @copyright 2020 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/contentbank/amd/src/selectors.js b/contentbank/amd/src/selectors.js index f6de1b2a0fd..16d01a135ce 100644 --- a/contentbank/amd/src/selectors.js +++ b/contentbank/amd/src/selectors.js @@ -17,7 +17,6 @@ * Define all of the selectors we will be using on the contentbank interface. * * @module core_contentbank/selectors - * @package core_contentbank * @copyright 2020 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/contentbank/amd/src/sort.js b/contentbank/amd/src/sort.js index ed67de5233f..6028b48cb6d 100644 --- a/contentbank/amd/src/sort.js +++ b/contentbank/amd/src/sort.js @@ -17,7 +17,6 @@ * Content bank UI actions. * * @module core_contentbank/sort - * @package core_contentbank * @copyright 2020 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/course/amd/build/actions.min.js.map b/course/amd/build/actions.min.js.map index 3cbade0df4a..313e81399e0 100644 --- a/course/amd/build/actions.min.js.map +++ b/course/amd/build/actions.min.js.map @@ -1 +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 .\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 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 $('
      ' + data + '
      ').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 $('
      ' + activityHTML + '
      ').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 = $('
      ' +\n '
      ');\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"} \ No newline at end of file +{"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 .\n\n/**\n * Various actions on modules and sections in the editing mode - hiding, duplicating, deleting, etc.\n *\n * @module core_course/actions\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
      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 $('
      ' + data + '
      ').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 $('
      ' + activityHTML + '
      ').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 = $('
      ' +\n '
      ');\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"} \ No newline at end of file diff --git a/course/amd/build/activitychooser.min.js.map b/course/amd/build/activitychooser.min.js.map index b4be36402fe..015a3d6c96c 100644 --- a/course/amd/build/activitychooser.min.js.map +++ b/course/amd/build/activitychooser.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/activitychooser.js"],"names":["ACTIVITIESRESOURCES","init","courseId","chooserConfig","pendingPromise","Pending","registerListenerEvents","resolve","events","CustomEvents","activate","keyboardActivate","fetchModuleData","innerPromise","Promise","Repository","activityModules","fetchFooterData","footerInnerPromise","sectionId","define","document","forEach","event","addEventListener","e","target","closest","selectors","elements","sectionmodchooser","sectionDiv","section","button","hasAttribute","caller","bodyPromise","bodyPromiseResolver","dataset","sectionid","footerData","sectionModal","buildModal","catch","errorTemplateData","message","Templates","render","data","builtModuleData","sectionIdMapper","sectionreturnid","ChooserDialogue","displayChooser","partiallyAppliedFavouriteManager","templateDataBuilder","webServiceData","id","newData","JSON","parse","stringify","content_items","module","link","activities","resources","showAll","showActivities","showResources","tabMode","parseInt","tabmode","favourites","filter","mod","favourite","recommended","archetype","favouritesFirst","length","activitiesFirst","fallback","footer","ModalFactory","create","type","types","DEFAULT","title","body","customfootertemplate","large","scrollable","templateContext","classes","then","modal","show","nullFavouriteDomManager","favouriteTabNav","modalBody","tabIndex","classList","add","contains","remove","setAttribute","favouriteTab","querySelector","regions","defaultTabNav","activitiesTabNav","activityTabNav","focus","defaultTab","activitiesTab","activityTab","moduleData","internal","favouriteArea","favouriteButtons","querySelectorAll","actions","optionActions","manageFavourite","result","find","name","newFaves","builtFaves","renderForPromise","html","js","replaceNodeContents","Array","from","element","favourited","firstElementChild","nodeToRemove","parentNode","removeChild"],"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 .\n\n/**\n * A type of dialogue used as for choosing modules in a course.\n *\n * @module core_course/activitychooser\n * @package core_course\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport * as ChooserDialogue from 'core_course/local/activitychooser/dialogue';\nimport * as Repository from 'core_course/local/activitychooser/repository';\nimport selectors from 'core_course/local/activitychooser/selectors';\nimport CustomEvents from 'core/custom_interaction_events';\nimport * as Templates from 'core/templates';\nimport * as ModalFactory from 'core/modal_factory';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\n\n// Set up some JS module wide constants that can be added to in the future.\n\n// Tab config options.\nconst ALLACTIVITIESRESOURCES = 0;\nconst ONLYALL = 1;\nconst ACTIVITIESRESOURCES = 2;\n\n// Module types.\nconst ACTIVITY = 0;\nconst RESOURCE = 1;\n\n/**\n * Set up the activity chooser.\n *\n * @method init\n * @param {Number} courseId Course ID to use later on in fetchModules()\n * @param {Object} chooserConfig Any PHP config settings that we may need to reference\n */\nexport const init = (courseId, chooserConfig) => {\n const pendingPromise = new Pending();\n\n registerListenerEvents(courseId, chooserConfig);\n\n pendingPromise.resolve();\n};\n\n/**\n * Once a selection has been made make the modal & module information and pass it along\n *\n * @method registerListenerEvents\n * @param {Number} courseId\n * @param {Object} chooserConfig Any PHP config settings that we may need to reference\n */\nconst registerListenerEvents = (courseId, chooserConfig) => {\n const events = [\n 'click',\n CustomEvents.events.activate,\n CustomEvents.events.keyboardActivate\n ];\n\n const fetchModuleData = (() => {\n let innerPromise = null;\n\n return () => {\n if (!innerPromise) {\n innerPromise = new Promise((resolve) => {\n resolve(Repository.activityModules(courseId));\n });\n }\n\n return innerPromise;\n };\n })();\n\n const fetchFooterData = (() => {\n let footerInnerPromise = null;\n\n return (sectionId) => {\n if (!footerInnerPromise) {\n footerInnerPromise = new Promise((resolve) => {\n resolve(Repository.fetchFooterData(courseId, sectionId));\n });\n }\n\n return footerInnerPromise;\n };\n })();\n\n CustomEvents.define(document, events);\n\n // Display module chooser event listeners.\n events.forEach((event) => {\n document.addEventListener(event, async(e) => {\n if (e.target.closest(selectors.elements.sectionmodchooser)) {\n let caller;\n // We need to know who called this.\n // Standard courses use the ID in the main section info.\n const sectionDiv = e.target.closest(selectors.elements.section);\n // Front page courses need some special handling.\n const button = e.target.closest(selectors.elements.sectionmodchooser);\n\n // If we don't have a section ID use the fallback ID.\n // We always want the sectionDiv caller first as it keeps track of section ID's after DnD changes.\n // The button attribute is always just a fallback for us as the section div is not always available.\n // A YUI change could be done maybe to only update the button attribute but we are going for minimal change here.\n if (sectionDiv !== null && sectionDiv.hasAttribute('data-sectionid')) {\n // We check for attributes just in case of outdated contrib course formats.\n caller = sectionDiv;\n } else {\n caller = button;\n }\n\n // We want to show the modal instantly but loading whilst waiting for our data.\n let bodyPromiseResolver;\n const bodyPromise = new Promise(resolve => {\n bodyPromiseResolver = resolve;\n });\n\n const footerData = await fetchFooterData(caller.dataset.sectionid);\n const sectionModal = buildModal(bodyPromise, footerData);\n\n // Now we have a modal we should start fetching data.\n // If an error occurs while fetching the data, display the error within the modal.\n const data = await fetchModuleData().catch(async(e) => {\n const errorTemplateData = {\n 'errormessage': e.message\n };\n bodyPromiseResolver(await Templates.render('core_course/local/activitychooser/error', errorTemplateData));\n });\n\n // Early return if there is no module data.\n if (!data) {\n return;\n }\n\n // Apply the section id to all the module instance links.\n const builtModuleData = sectionIdMapper(data, caller.dataset.sectionid, caller.dataset.sectionreturnid);\n\n ChooserDialogue.displayChooser(\n sectionModal,\n builtModuleData,\n partiallyAppliedFavouriteManager(data, caller.dataset.sectionid),\n footerData,\n );\n\n bodyPromiseResolver(await Templates.render(\n 'core_course/activitychooser',\n templateDataBuilder(builtModuleData, chooserConfig)\n ));\n }\n });\n });\n};\n\n/**\n * Given the web service data and an ID we want to make a deep copy\n * of the WS data then add on the section ID to the addoption URL\n *\n * @method sectionIdMapper\n * @param {Object} webServiceData Our original data from the Web service call\n * @param {Number} id The ID of the section we need to append to the links\n * @param {Number|null} sectionreturnid The ID of the section return we need to append to the links\n * @return {Array} [modules] with URL's built\n */\nconst sectionIdMapper = (webServiceData, id, sectionreturnid) => {\n // We need to take a fresh deep copy of the original data as an object is a reference type.\n const newData = JSON.parse(JSON.stringify(webServiceData));\n newData.content_items.forEach((module) => {\n module.link += '§ion=' + id + '&sr=' + (sectionreturnid ?? 0);\n });\n return newData.content_items;\n};\n\n/**\n * Given an array of modules we want to figure out where & how to place them into our template object\n *\n * @method templateDataBuilder\n * @param {Array} data our modules to manipulate into a Templatable object\n * @param {Object} chooserConfig Any PHP config settings that we may need to reference\n * @return {Object} Our built object ready to render out\n */\nconst templateDataBuilder = (data, chooserConfig) => {\n // Setup of various bits and pieces we need to mutate before throwing it to the wolves.\n let activities = [];\n let resources = [];\n let showAll = true;\n let showActivities = false;\n let showResources = false;\n\n // Tab mode can be the following [All, Resources & Activities, All & Activities & Resources].\n const tabMode = parseInt(chooserConfig.tabmode);\n\n // Filter the incoming data to find favourite & recommended modules.\n const favourites = data.filter(mod => mod.favourite === true);\n const recommended = data.filter(mod => mod.recommended === true);\n\n // Both of these modes need Activity & Resource tabs.\n if ((tabMode === ALLACTIVITIESRESOURCES || tabMode === ACTIVITIESRESOURCES) && tabMode !== ONLYALL) {\n // Filter the incoming data to find activities then resources.\n activities = data.filter(mod => mod.archetype === ACTIVITY);\n resources = data.filter(mod => mod.archetype === RESOURCE);\n showActivities = true;\n showResources = true;\n\n // We want all of the previous information but no 'All' tab.\n if (tabMode === ACTIVITIESRESOURCES) {\n showAll = false;\n }\n }\n\n // Given the results of the above filters lets figure out what tab to set active.\n // We have some favourites.\n const favouritesFirst = !!favourites.length;\n // We are in tabMode 2 without any favourites.\n const activitiesFirst = showAll === false && favouritesFirst === false;\n // We have nothing fallback to show all modules.\n const fallback = showAll === true && favouritesFirst === false;\n\n return {\n 'default': data,\n showAll: showAll,\n activities: activities,\n showActivities: showActivities,\n activitiesFirst: activitiesFirst,\n resources: resources,\n showResources: showResources,\n favourites: favourites,\n recommended: recommended,\n favouritesFirst: favouritesFirst,\n fallback: fallback,\n };\n};\n\n/**\n * Given an object we want to build a modal ready to show\n *\n * @method buildModal\n * @param {Promise} bodyPromise\n * @param {String|Boolean} footer Either a footer to add or nothing\n * @return {Object} The modal ready to display immediately and render body in later.\n */\nconst buildModal = (bodyPromise, footer) => {\n return ModalFactory.create({\n type: ModalFactory.types.DEFAULT,\n title: getString('addresourceoractivity'),\n body: bodyPromise,\n footer: footer.customfootertemplate,\n large: true,\n scrollable: false,\n templateContext: {\n classes: 'modchooser'\n }\n })\n .then(modal => {\n modal.show();\n return modal;\n });\n};\n\n/**\n * A small helper function to handle the case where there are no more favourites\n * and we need to mess a bit with the available tabs in the chooser\n *\n * @method nullFavouriteDomManager\n * @param {HTMLElement} favouriteTabNav Dom node of the favourite tab nav\n * @param {HTMLElement} modalBody Our current modals' body\n */\nconst nullFavouriteDomManager = (favouriteTabNav, modalBody) => {\n favouriteTabNav.tabIndex = -1;\n favouriteTabNav.classList.add('d-none');\n // Need to set active to an available tab.\n if (favouriteTabNav.classList.contains('active')) {\n favouriteTabNav.classList.remove('active');\n favouriteTabNav.setAttribute('aria-selected', 'false');\n const favouriteTab = modalBody.querySelector(selectors.regions.favouriteTab);\n favouriteTab.classList.remove('active');\n const defaultTabNav = modalBody.querySelector(selectors.regions.defaultTabNav);\n const activitiesTabNav = modalBody.querySelector(selectors.regions.activityTabNav);\n if (defaultTabNav.classList.contains('d-none') === false) {\n defaultTabNav.classList.add('active');\n defaultTabNav.setAttribute('aria-selected', 'true');\n defaultTabNav.tabIndex = 0;\n defaultTabNav.focus();\n const defaultTab = modalBody.querySelector(selectors.regions.defaultTab);\n defaultTab.classList.add('active');\n } else {\n activitiesTabNav.classList.add('active');\n activitiesTabNav.setAttribute('aria-selected', 'true');\n activitiesTabNav.tabIndex = 0;\n activitiesTabNav.focus();\n const activitiesTab = modalBody.querySelector(selectors.regions.activityTab);\n activitiesTab.classList.add('active');\n }\n\n }\n};\n\n/**\n * Export a curried function where the builtModules has been applied.\n * We have our array of modules so we can rerender the favourites area and have all of the items sorted.\n *\n * @method partiallyAppliedFavouriteManager\n * @param {Array} moduleData This is our raw WS data that we need to manipulate\n * @param {Number} sectionId We need this to add the sectionID to the URL's in the faves area after rerender\n * @return {Function} partially applied function so we can manipulate DOM nodes easily & update our internal array\n */\nconst partiallyAppliedFavouriteManager = (moduleData, sectionId) => {\n /**\n * Curried function that is being returned.\n *\n * @param {String} internal Internal name of the module to manage\n * @param {Boolean} favourite Is the caller adding a favourite or removing one?\n * @param {HTMLElement} modalBody What we need to update whilst we are here\n */\n return async(internal, favourite, modalBody) => {\n const favouriteArea = modalBody.querySelector(selectors.render.favourites);\n\n // eslint-disable-next-line max-len\n const favouriteButtons = modalBody.querySelectorAll(`[data-internal=\"${internal}\"] ${selectors.actions.optionActions.manageFavourite}`);\n const favouriteTabNav = modalBody.querySelector(selectors.regions.favouriteTabNav);\n const result = moduleData.content_items.find(({name}) => name === internal);\n const newFaves = {};\n if (result) {\n if (favourite) {\n result.favourite = true;\n\n // eslint-disable-next-line camelcase\n newFaves.content_items = moduleData.content_items.filter(mod => mod.favourite === true);\n\n const builtFaves = sectionIdMapper(newFaves, sectionId);\n\n const {html, js} = await Templates.renderForPromise('core_course/local/activitychooser/favourites',\n {favourites: builtFaves});\n\n await Templates.replaceNodeContents(favouriteArea, html, js);\n\n Array.from(favouriteButtons).forEach((element) => {\n element.classList.remove('text-muted');\n element.classList.add('text-primary');\n element.dataset.favourited = 'true';\n element.setAttribute('aria-pressed', true);\n element.firstElementChild.classList.remove('fa-star-o');\n element.firstElementChild.classList.add('fa-star');\n });\n\n favouriteTabNav.classList.remove('d-none');\n } else {\n result.favourite = false;\n\n const nodeToRemove = favouriteArea.querySelector(`[data-internal=\"${internal}\"]`);\n\n nodeToRemove.parentNode.removeChild(nodeToRemove);\n\n Array.from(favouriteButtons).forEach((element) => {\n element.classList.add('text-muted');\n element.classList.remove('text-primary');\n element.dataset.favourited = 'false';\n element.setAttribute('aria-pressed', false);\n element.firstElementChild.classList.remove('fa-star');\n element.firstElementChild.classList.add('fa-star-o');\n });\n const newFaves = moduleData.content_items.filter(mod => mod.favourite === true);\n\n if (newFaves.length === 0) {\n nullFavouriteDomManager(favouriteTabNav, modalBody);\n }\n }\n }\n };\n};\n"],"file":"activitychooser.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/activitychooser.js"],"names":["ACTIVITIESRESOURCES","init","courseId","chooserConfig","pendingPromise","Pending","registerListenerEvents","resolve","events","CustomEvents","activate","keyboardActivate","fetchModuleData","innerPromise","Promise","Repository","activityModules","fetchFooterData","footerInnerPromise","sectionId","define","document","forEach","event","addEventListener","e","target","closest","selectors","elements","sectionmodchooser","sectionDiv","section","button","hasAttribute","caller","bodyPromise","bodyPromiseResolver","dataset","sectionid","footerData","sectionModal","buildModal","catch","errorTemplateData","message","Templates","render","data","builtModuleData","sectionIdMapper","sectionreturnid","ChooserDialogue","displayChooser","partiallyAppliedFavouriteManager","templateDataBuilder","webServiceData","id","newData","JSON","parse","stringify","content_items","module","link","activities","resources","showAll","showActivities","showResources","tabMode","parseInt","tabmode","favourites","filter","mod","favourite","recommended","archetype","favouritesFirst","length","activitiesFirst","fallback","footer","ModalFactory","create","type","types","DEFAULT","title","body","customfootertemplate","large","scrollable","templateContext","classes","then","modal","show","nullFavouriteDomManager","favouriteTabNav","modalBody","tabIndex","classList","add","contains","remove","setAttribute","favouriteTab","querySelector","regions","defaultTabNav","activitiesTabNav","activityTabNav","focus","defaultTab","activitiesTab","activityTab","moduleData","internal","favouriteArea","favouriteButtons","querySelectorAll","actions","optionActions","manageFavourite","result","find","name","newFaves","builtFaves","renderForPromise","html","js","replaceNodeContents","Array","from","element","favourited","firstElementChild","nodeToRemove","parentNode","removeChild"],"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 .\n\n/**\n * A type of dialogue used as for choosing modules in a course.\n *\n * @module core_course/activitychooser\n * @copyright 2020 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport * as ChooserDialogue from 'core_course/local/activitychooser/dialogue';\nimport * as Repository from 'core_course/local/activitychooser/repository';\nimport selectors from 'core_course/local/activitychooser/selectors';\nimport CustomEvents from 'core/custom_interaction_events';\nimport * as Templates from 'core/templates';\nimport * as ModalFactory from 'core/modal_factory';\nimport {get_string as getString} from 'core/str';\nimport Pending from 'core/pending';\n\n// Set up some JS module wide constants that can be added to in the future.\n\n// Tab config options.\nconst ALLACTIVITIESRESOURCES = 0;\nconst ONLYALL = 1;\nconst ACTIVITIESRESOURCES = 2;\n\n// Module types.\nconst ACTIVITY = 0;\nconst RESOURCE = 1;\n\n/**\n * Set up the activity chooser.\n *\n * @method init\n * @param {Number} courseId Course ID to use later on in fetchModules()\n * @param {Object} chooserConfig Any PHP config settings that we may need to reference\n */\nexport const init = (courseId, chooserConfig) => {\n const pendingPromise = new Pending();\n\n registerListenerEvents(courseId, chooserConfig);\n\n pendingPromise.resolve();\n};\n\n/**\n * Once a selection has been made make the modal & module information and pass it along\n *\n * @method registerListenerEvents\n * @param {Number} courseId\n * @param {Object} chooserConfig Any PHP config settings that we may need to reference\n */\nconst registerListenerEvents = (courseId, chooserConfig) => {\n const events = [\n 'click',\n CustomEvents.events.activate,\n CustomEvents.events.keyboardActivate\n ];\n\n const fetchModuleData = (() => {\n let innerPromise = null;\n\n return () => {\n if (!innerPromise) {\n innerPromise = new Promise((resolve) => {\n resolve(Repository.activityModules(courseId));\n });\n }\n\n return innerPromise;\n };\n })();\n\n const fetchFooterData = (() => {\n let footerInnerPromise = null;\n\n return (sectionId) => {\n if (!footerInnerPromise) {\n footerInnerPromise = new Promise((resolve) => {\n resolve(Repository.fetchFooterData(courseId, sectionId));\n });\n }\n\n return footerInnerPromise;\n };\n })();\n\n CustomEvents.define(document, events);\n\n // Display module chooser event listeners.\n events.forEach((event) => {\n document.addEventListener(event, async(e) => {\n if (e.target.closest(selectors.elements.sectionmodchooser)) {\n let caller;\n // We need to know who called this.\n // Standard courses use the ID in the main section info.\n const sectionDiv = e.target.closest(selectors.elements.section);\n // Front page courses need some special handling.\n const button = e.target.closest(selectors.elements.sectionmodchooser);\n\n // If we don't have a section ID use the fallback ID.\n // We always want the sectionDiv caller first as it keeps track of section ID's after DnD changes.\n // The button attribute is always just a fallback for us as the section div is not always available.\n // A YUI change could be done maybe to only update the button attribute but we are going for minimal change here.\n if (sectionDiv !== null && sectionDiv.hasAttribute('data-sectionid')) {\n // We check for attributes just in case of outdated contrib course formats.\n caller = sectionDiv;\n } else {\n caller = button;\n }\n\n // We want to show the modal instantly but loading whilst waiting for our data.\n let bodyPromiseResolver;\n const bodyPromise = new Promise(resolve => {\n bodyPromiseResolver = resolve;\n });\n\n const footerData = await fetchFooterData(caller.dataset.sectionid);\n const sectionModal = buildModal(bodyPromise, footerData);\n\n // Now we have a modal we should start fetching data.\n // If an error occurs while fetching the data, display the error within the modal.\n const data = await fetchModuleData().catch(async(e) => {\n const errorTemplateData = {\n 'errormessage': e.message\n };\n bodyPromiseResolver(await Templates.render('core_course/local/activitychooser/error', errorTemplateData));\n });\n\n // Early return if there is no module data.\n if (!data) {\n return;\n }\n\n // Apply the section id to all the module instance links.\n const builtModuleData = sectionIdMapper(data, caller.dataset.sectionid, caller.dataset.sectionreturnid);\n\n ChooserDialogue.displayChooser(\n sectionModal,\n builtModuleData,\n partiallyAppliedFavouriteManager(data, caller.dataset.sectionid),\n footerData,\n );\n\n bodyPromiseResolver(await Templates.render(\n 'core_course/activitychooser',\n templateDataBuilder(builtModuleData, chooserConfig)\n ));\n }\n });\n });\n};\n\n/**\n * Given the web service data and an ID we want to make a deep copy\n * of the WS data then add on the section ID to the addoption URL\n *\n * @method sectionIdMapper\n * @param {Object} webServiceData Our original data from the Web service call\n * @param {Number} id The ID of the section we need to append to the links\n * @param {Number|null} sectionreturnid The ID of the section return we need to append to the links\n * @return {Array} [modules] with URL's built\n */\nconst sectionIdMapper = (webServiceData, id, sectionreturnid) => {\n // We need to take a fresh deep copy of the original data as an object is a reference type.\n const newData = JSON.parse(JSON.stringify(webServiceData));\n newData.content_items.forEach((module) => {\n module.link += '§ion=' + id + '&sr=' + (sectionreturnid ?? 0);\n });\n return newData.content_items;\n};\n\n/**\n * Given an array of modules we want to figure out where & how to place them into our template object\n *\n * @method templateDataBuilder\n * @param {Array} data our modules to manipulate into a Templatable object\n * @param {Object} chooserConfig Any PHP config settings that we may need to reference\n * @return {Object} Our built object ready to render out\n */\nconst templateDataBuilder = (data, chooserConfig) => {\n // Setup of various bits and pieces we need to mutate before throwing it to the wolves.\n let activities = [];\n let resources = [];\n let showAll = true;\n let showActivities = false;\n let showResources = false;\n\n // Tab mode can be the following [All, Resources & Activities, All & Activities & Resources].\n const tabMode = parseInt(chooserConfig.tabmode);\n\n // Filter the incoming data to find favourite & recommended modules.\n const favourites = data.filter(mod => mod.favourite === true);\n const recommended = data.filter(mod => mod.recommended === true);\n\n // Both of these modes need Activity & Resource tabs.\n if ((tabMode === ALLACTIVITIESRESOURCES || tabMode === ACTIVITIESRESOURCES) && tabMode !== ONLYALL) {\n // Filter the incoming data to find activities then resources.\n activities = data.filter(mod => mod.archetype === ACTIVITY);\n resources = data.filter(mod => mod.archetype === RESOURCE);\n showActivities = true;\n showResources = true;\n\n // We want all of the previous information but no 'All' tab.\n if (tabMode === ACTIVITIESRESOURCES) {\n showAll = false;\n }\n }\n\n // Given the results of the above filters lets figure out what tab to set active.\n // We have some favourites.\n const favouritesFirst = !!favourites.length;\n // We are in tabMode 2 without any favourites.\n const activitiesFirst = showAll === false && favouritesFirst === false;\n // We have nothing fallback to show all modules.\n const fallback = showAll === true && favouritesFirst === false;\n\n return {\n 'default': data,\n showAll: showAll,\n activities: activities,\n showActivities: showActivities,\n activitiesFirst: activitiesFirst,\n resources: resources,\n showResources: showResources,\n favourites: favourites,\n recommended: recommended,\n favouritesFirst: favouritesFirst,\n fallback: fallback,\n };\n};\n\n/**\n * Given an object we want to build a modal ready to show\n *\n * @method buildModal\n * @param {Promise} bodyPromise\n * @param {String|Boolean} footer Either a footer to add or nothing\n * @return {Object} The modal ready to display immediately and render body in later.\n */\nconst buildModal = (bodyPromise, footer) => {\n return ModalFactory.create({\n type: ModalFactory.types.DEFAULT,\n title: getString('addresourceoractivity'),\n body: bodyPromise,\n footer: footer.customfootertemplate,\n large: true,\n scrollable: false,\n templateContext: {\n classes: 'modchooser'\n }\n })\n .then(modal => {\n modal.show();\n return modal;\n });\n};\n\n/**\n * A small helper function to handle the case where there are no more favourites\n * and we need to mess a bit with the available tabs in the chooser\n *\n * @method nullFavouriteDomManager\n * @param {HTMLElement} favouriteTabNav Dom node of the favourite tab nav\n * @param {HTMLElement} modalBody Our current modals' body\n */\nconst nullFavouriteDomManager = (favouriteTabNav, modalBody) => {\n favouriteTabNav.tabIndex = -1;\n favouriteTabNav.classList.add('d-none');\n // Need to set active to an available tab.\n if (favouriteTabNav.classList.contains('active')) {\n favouriteTabNav.classList.remove('active');\n favouriteTabNav.setAttribute('aria-selected', 'false');\n const favouriteTab = modalBody.querySelector(selectors.regions.favouriteTab);\n favouriteTab.classList.remove('active');\n const defaultTabNav = modalBody.querySelector(selectors.regions.defaultTabNav);\n const activitiesTabNav = modalBody.querySelector(selectors.regions.activityTabNav);\n if (defaultTabNav.classList.contains('d-none') === false) {\n defaultTabNav.classList.add('active');\n defaultTabNav.setAttribute('aria-selected', 'true');\n defaultTabNav.tabIndex = 0;\n defaultTabNav.focus();\n const defaultTab = modalBody.querySelector(selectors.regions.defaultTab);\n defaultTab.classList.add('active');\n } else {\n activitiesTabNav.classList.add('active');\n activitiesTabNav.setAttribute('aria-selected', 'true');\n activitiesTabNav.tabIndex = 0;\n activitiesTabNav.focus();\n const activitiesTab = modalBody.querySelector(selectors.regions.activityTab);\n activitiesTab.classList.add('active');\n }\n\n }\n};\n\n/**\n * Export a curried function where the builtModules has been applied.\n * We have our array of modules so we can rerender the favourites area and have all of the items sorted.\n *\n * @method partiallyAppliedFavouriteManager\n * @param {Array} moduleData This is our raw WS data that we need to manipulate\n * @param {Number} sectionId We need this to add the sectionID to the URL's in the faves area after rerender\n * @return {Function} partially applied function so we can manipulate DOM nodes easily & update our internal array\n */\nconst partiallyAppliedFavouriteManager = (moduleData, sectionId) => {\n /**\n * Curried function that is being returned.\n *\n * @param {String} internal Internal name of the module to manage\n * @param {Boolean} favourite Is the caller adding a favourite or removing one?\n * @param {HTMLElement} modalBody What we need to update whilst we are here\n */\n return async(internal, favourite, modalBody) => {\n const favouriteArea = modalBody.querySelector(selectors.render.favourites);\n\n // eslint-disable-next-line max-len\n const favouriteButtons = modalBody.querySelectorAll(`[data-internal=\"${internal}\"] ${selectors.actions.optionActions.manageFavourite}`);\n const favouriteTabNav = modalBody.querySelector(selectors.regions.favouriteTabNav);\n const result = moduleData.content_items.find(({name}) => name === internal);\n const newFaves = {};\n if (result) {\n if (favourite) {\n result.favourite = true;\n\n // eslint-disable-next-line camelcase\n newFaves.content_items = moduleData.content_items.filter(mod => mod.favourite === true);\n\n const builtFaves = sectionIdMapper(newFaves, sectionId);\n\n const {html, js} = await Templates.renderForPromise('core_course/local/activitychooser/favourites',\n {favourites: builtFaves});\n\n await Templates.replaceNodeContents(favouriteArea, html, js);\n\n Array.from(favouriteButtons).forEach((element) => {\n element.classList.remove('text-muted');\n element.classList.add('text-primary');\n element.dataset.favourited = 'true';\n element.setAttribute('aria-pressed', true);\n element.firstElementChild.classList.remove('fa-star-o');\n element.firstElementChild.classList.add('fa-star');\n });\n\n favouriteTabNav.classList.remove('d-none');\n } else {\n result.favourite = false;\n\n const nodeToRemove = favouriteArea.querySelector(`[data-internal=\"${internal}\"]`);\n\n nodeToRemove.parentNode.removeChild(nodeToRemove);\n\n Array.from(favouriteButtons).forEach((element) => {\n element.classList.add('text-muted');\n element.classList.remove('text-primary');\n element.dataset.favourited = 'false';\n element.setAttribute('aria-pressed', false);\n element.firstElementChild.classList.remove('fa-star');\n element.firstElementChild.classList.add('fa-star-o');\n });\n const newFaves = moduleData.content_items.filter(mod => mod.favourite === true);\n\n if (newFaves.length === 0) {\n nullFavouriteDomManager(favouriteTabNav, modalBody);\n }\n }\n }\n };\n};\n"],"file":"activitychooser.min.js"} \ No newline at end of file diff --git a/course/amd/build/copy_modal.min.js.map b/course/amd/build/copy_modal.min.js.map index 3ec3b14aeea..3f4c220cc24 100644 --- a/course/amd/build/copy_modal.min.js.map +++ b/course/amd/build/copy_modal.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/copy_modal.js"],"names":["define","$","Str","ModalFactory","ModalEvents","ajax","Fragment","Notification","Config","CopyModal","contextid","course","modalObj","spinner","createModal","get_string","then","title","create","type","types","DEFAULT","body","large","done","modal","getRoot","on","processModalForm","e","formredirect","preventDefault","setBody","hide","catch","exception","Error","updateModalBody","formdata","params","JSON","stringify","id","shortname","setTitle","loadFragment","copyform","find","serialize","formjson","invalid","merge","length","first","focus","call","methodname","args","jsonformdata","redirect","wwwroot","window","location","assign","fail","init","context","url","URL","getAttribute","URLSearchParams","search","courseid","get","response","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 .\n\n/**\n * This module provides the course copy modal from the course and\n * category management screen.\n *\n * @module course\n * @package core\n * @copyright 2020 onward The Moodle Users Association \n * @author Matt Porritt \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.9\n */\n\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events',\n 'core/ajax', 'core/fragment', 'core/notification', 'core/config'],\n function($, Str, ModalFactory, ModalEvents, ajax, Fragment, Notification, Config) {\n\n /**\n * Module level variables.\n */\n var CopyModal = {};\n var contextid;\n var course;\n var modalObj;\n var spinner = '

      '\n + ''\n + '

      ';\n\n /**\n * Creates the modal for the course copy form\n *\n * @private\n */\n function createModal() {\n // Get the Title String.\n Str.get_string('loading').then(function(title) {\n // Create the Modal.\n ModalFactory.create({\n type: ModalFactory.types.DEFAULT,\n title: title,\n body: spinner,\n large: true\n })\n .done(function(modal) {\n modalObj = modal;\n // Explicitly handle form click events.\n modalObj.getRoot().on('click', '#id_submitreturn', processModalForm);\n modalObj.getRoot().on('click', '#id_submitdisplay', function(e) {\n e.formredirect = true;\n processModalForm(e);\n\n });\n modalObj.getRoot().on('click', '#id_cancel', function(e) {\n e.preventDefault();\n modalObj.setBody(spinner);\n modalObj.hide();\n });\n });\n return;\n }).catch(function() {\n Notification.exception(new Error('Failed to load string: loading'));\n });\n }\n\n /**\n * Updates the body of the modal window.\n *\n * @param {Object} formdata\n * @private\n */\n function updateModalBody(formdata) {\n if (typeof formdata === \"undefined\") {\n formdata = {};\n }\n\n var params = {\n 'jsonformdata': JSON.stringify(formdata),\n 'courseid': course.id\n };\n\n modalObj.setBody(spinner);\n Str.get_string('copycoursetitle', 'backup', course.shortname).then(function(title) {\n modalObj.setTitle(title);\n modalObj.setBody(Fragment.loadFragment('course', 'new_base_form', contextid, params));\n return;\n }).catch(function() {\n Notification.exception(new Error('Failed to load string: copycoursetitle'));\n });\n }\n\n /**\n * Updates Moodle form with selected information.\n *\n * @param {Object} e\n * @private\n */\n function processModalForm(e) {\n e.preventDefault(); // Stop modal from closing.\n\n // Form data.\n var copyform = modalObj.getRoot().find('form').serialize();\n var formjson = JSON.stringify(copyform);\n\n // Handle invalid form fields for better UX.\n var invalid = $.merge(\n modalObj.getRoot().find('[aria-invalid=\"true\"]'),\n modalObj.getRoot().find('.error')\n );\n\n if (invalid.length) {\n invalid.first().focus();\n return;\n }\n\n // Submit form via ajax.\n ajax.call([{\n methodname: 'core_backup_submit_copy_form',\n args: {\n jsonformdata: formjson\n },\n }])[0].done(function() {\n // For submission succeeded.\n modalObj.setBody(spinner);\n modalObj.hide();\n\n if (e.formredirect == true) {\n // We are redirecting to copy progress display.\n let redirect = Config.wwwroot + \"/backup/copyprogress.php?id=\" + course.id;\n window.location.assign(redirect);\n }\n\n }).fail(function() {\n // Form submission failed server side, redisplay with errors.\n updateModalBody(copyform);\n });\n }\n\n /**\n * Initialise the class.\n *\n * @param {Object} context\n * @public\n */\n CopyModal.init = function(context) {\n contextid = context;\n // Setup the initial Modal.\n createModal();\n\n // Setup the click handlers on the copy buttons.\n $('.action-copy').on('click', function(e) {\n e.preventDefault(); // Stop. Hammer time.\n let url = new URL(this.getAttribute('href'));\n let params = new URLSearchParams(url.search);\n let courseid = params.get('id');\n\n ajax.call([{ // Get the course information.\n methodname: 'core_course_get_courses',\n args: {\n 'options': {'ids': [courseid]},\n },\n }])[0].done(function(response) {\n // We have the course info get the modal content.\n course = response[0];\n updateModalBody();\n\n }).fail(function() {\n Notification.exception(new Error('Failed to load course'));\n });\n\n modalObj.show();\n });\n\n };\n\n return CopyModal;\n});\n"],"file":"copy_modal.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/copy_modal.js"],"names":["define","$","Str","ModalFactory","ModalEvents","ajax","Fragment","Notification","Config","CopyModal","contextid","course","modalObj","spinner","createModal","get_string","then","title","create","type","types","DEFAULT","body","large","done","modal","getRoot","on","processModalForm","e","formredirect","preventDefault","setBody","hide","catch","exception","Error","updateModalBody","formdata","params","JSON","stringify","id","shortname","setTitle","loadFragment","copyform","find","serialize","formjson","invalid","merge","length","first","focus","call","methodname","args","jsonformdata","redirect","wwwroot","window","location","assign","fail","init","context","url","URL","getAttribute","URLSearchParams","search","courseid","get","response","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 .\n\n/**\n * This module provides the course copy modal from the course and\n * category management screen.\n *\n * @module course\n * @copyright 2020 onward The Moodle Users Association \n * @author Matt Porritt \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.9\n */\n\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events',\n 'core/ajax', 'core/fragment', 'core/notification', 'core/config'],\n function($, Str, ModalFactory, ModalEvents, ajax, Fragment, Notification, Config) {\n\n /**\n * Module level variables.\n */\n var CopyModal = {};\n var contextid;\n var course;\n var modalObj;\n var spinner = '

      '\n + ''\n + '

      ';\n\n /**\n * Creates the modal for the course copy form\n *\n * @private\n */\n function createModal() {\n // Get the Title String.\n Str.get_string('loading').then(function(title) {\n // Create the Modal.\n ModalFactory.create({\n type: ModalFactory.types.DEFAULT,\n title: title,\n body: spinner,\n large: true\n })\n .done(function(modal) {\n modalObj = modal;\n // Explicitly handle form click events.\n modalObj.getRoot().on('click', '#id_submitreturn', processModalForm);\n modalObj.getRoot().on('click', '#id_submitdisplay', function(e) {\n e.formredirect = true;\n processModalForm(e);\n\n });\n modalObj.getRoot().on('click', '#id_cancel', function(e) {\n e.preventDefault();\n modalObj.setBody(spinner);\n modalObj.hide();\n });\n });\n return;\n }).catch(function() {\n Notification.exception(new Error('Failed to load string: loading'));\n });\n }\n\n /**\n * Updates the body of the modal window.\n *\n * @param {Object} formdata\n * @private\n */\n function updateModalBody(formdata) {\n if (typeof formdata === \"undefined\") {\n formdata = {};\n }\n\n var params = {\n 'jsonformdata': JSON.stringify(formdata),\n 'courseid': course.id\n };\n\n modalObj.setBody(spinner);\n Str.get_string('copycoursetitle', 'backup', course.shortname).then(function(title) {\n modalObj.setTitle(title);\n modalObj.setBody(Fragment.loadFragment('course', 'new_base_form', contextid, params));\n return;\n }).catch(function() {\n Notification.exception(new Error('Failed to load string: copycoursetitle'));\n });\n }\n\n /**\n * Updates Moodle form with selected information.\n *\n * @param {Object} e\n * @private\n */\n function processModalForm(e) {\n e.preventDefault(); // Stop modal from closing.\n\n // Form data.\n var copyform = modalObj.getRoot().find('form').serialize();\n var formjson = JSON.stringify(copyform);\n\n // Handle invalid form fields for better UX.\n var invalid = $.merge(\n modalObj.getRoot().find('[aria-invalid=\"true\"]'),\n modalObj.getRoot().find('.error')\n );\n\n if (invalid.length) {\n invalid.first().focus();\n return;\n }\n\n // Submit form via ajax.\n ajax.call([{\n methodname: 'core_backup_submit_copy_form',\n args: {\n jsonformdata: formjson\n },\n }])[0].done(function() {\n // For submission succeeded.\n modalObj.setBody(spinner);\n modalObj.hide();\n\n if (e.formredirect == true) {\n // We are redirecting to copy progress display.\n let redirect = Config.wwwroot + \"/backup/copyprogress.php?id=\" + course.id;\n window.location.assign(redirect);\n }\n\n }).fail(function() {\n // Form submission failed server side, redisplay with errors.\n updateModalBody(copyform);\n });\n }\n\n /**\n * Initialise the class.\n *\n * @param {Object} context\n * @public\n */\n CopyModal.init = function(context) {\n contextid = context;\n // Setup the initial Modal.\n createModal();\n\n // Setup the click handlers on the copy buttons.\n $('.action-copy').on('click', function(e) {\n e.preventDefault(); // Stop. Hammer time.\n let url = new URL(this.getAttribute('href'));\n let params = new URLSearchParams(url.search);\n let courseid = params.get('id');\n\n ajax.call([{ // Get the course information.\n methodname: 'core_course_get_courses',\n args: {\n 'options': {'ids': [courseid]},\n },\n }])[0].done(function(response) {\n // We have the course info get the modal content.\n course = response[0];\n updateModalBody();\n\n }).fail(function() {\n Notification.exception(new Error('Failed to load course'));\n });\n\n modalObj.show();\n });\n\n };\n\n return CopyModal;\n});\n"],"file":"copy_modal.min.js"} \ No newline at end of file diff --git a/course/amd/build/downloadcontent.min.js.map b/course/amd/build/downloadcontent.min.js.map index b6c5863f84f..c894f877539 100644 --- a/course/amd/build/downloadcontent.min.js.map +++ b/course/amd/build/downloadcontent.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/downloadcontent.js"],"names":["init","pendingPromise","Pending","on","e","type","which","enter","space","preventDefault","displayDownloadConfirmation","currentTarget","resolve","downloadModalTrigger","ModalFactory","create","title","dataset","downloadTitle","types","SAVE_CANCEL","body","downloadBody","buttons","save","downloadButtonText","templateContext","classes","then","modal","show","saveButton","document","querySelector","cancelButton","modalContainer","CustomEvents","events","activate","downloadContent","destroy","downloadForm","createElement","action","downloadLink","method","target","downloadSesskey","name","value","Config","sesskey","appendChild","style","display","submit","removeChild"],"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 .\n\n/**\n * Functions related to downloading course content.\n *\n * @module core_course/downloadcontent\n * @package core_course\n * @copyright 2020 Michael Hawkins \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Config from 'core/config';\nimport CustomEvents from 'core/custom_interaction_events';\nimport * as ModalFactory from 'core/modal_factory';\nimport jQuery from 'jquery';\nimport Pending from 'core/pending';\nimport {enter, space} from 'core/key_codes';\n\n/**\n * Set up listener to trigger the download course content modal.\n *\n * @return {void}\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n\n // Add event listeners for click and enter/space keys.\n jQuery('[data-downloadcourse]').on('click keydown', (e) => {\n if (e.type === 'click' || e.which === enter || e.which === space) {\n e.preventDefault();\n displayDownloadConfirmation(e.currentTarget);\n }\n });\n\n pendingPromise.resolve();\n};\n\n/**\n * Display the download course content modal.\n *\n * @method displayDownloadConfirmation\n * @param {Object} downloadModalTrigger The DOM element that triggered the download modal.\n * @return {void}\n */\nconst displayDownloadConfirmation = (downloadModalTrigger) => {\n ModalFactory.create({\n title: downloadModalTrigger.dataset.downloadTitle,\n type: ModalFactory.types.SAVE_CANCEL,\n body: `

      ${downloadModalTrigger.dataset.downloadBody}

      `,\n buttons: {\n save: downloadModalTrigger.dataset.downloadButtonText\n },\n templateContext: {\n classes: 'downloadcoursecontentmodal'\n }\n })\n .then(modal => {\n // Display the modal.\n modal.show();\n\n const saveButton = document.querySelector('.modal .downloadcoursecontentmodal [data-action=\"save\"]');\n const cancelButton = document.querySelector('.modal .downloadcoursecontentmodal [data-action=\"cancel\"]');\n const modalContainer = document.querySelector('.modal[data-region=\"modal-container\"]');\n\n // Create listener to trigger the download when the \"Download\" button is pressed.\n jQuery(saveButton).on(CustomEvents.events.activate, (e) => downloadContent(e, downloadModalTrigger, modal));\n\n // Create listener to destroy the modal when closing modal by cancelling.\n jQuery(cancelButton).on(CustomEvents.events.activate, () => {\n modal.destroy();\n });\n\n // Create listener to destroy the modal when closing modal by clicking outside of it.\n if (modalContainer.querySelector('.downloadcoursecontentmodal')) {\n jQuery(modalContainer).on(CustomEvents.events.activate, () => {\n modal.destroy();\n });\n }\n });\n};\n\n/**\n * Trigger downloading of course content.\n *\n * @method downloadContent\n * @param {Event} e The event triggering the download.\n * @param {Object} downloadModalTrigger The DOM element that triggered the download modal.\n * @param {Object} modal The modal object.\n * @return {void}\n */\nconst downloadContent = (e, downloadModalTrigger, modal) => {\n e.preventDefault();\n\n // Create a form to submit the file download request, so we can avoid sending sesskey over GET.\n const downloadForm = document.createElement('form');\n downloadForm.action = downloadModalTrigger.dataset.downloadLink;\n downloadForm.method = 'POST';\n // Open download in a new tab, so current course view is not disrupted.\n downloadForm.target = '_blank';\n const downloadSesskey = document.createElement('input');\n downloadSesskey.name = 'sesskey';\n downloadSesskey.value = Config.sesskey;\n downloadForm.appendChild(downloadSesskey);\n downloadForm.style.display = 'none';\n\n document.body.appendChild(downloadForm);\n downloadForm.submit();\n document.body.removeChild(downloadForm);\n\n // Destroy the modal to prevent duplicates if reopened later.\n modal.destroy();\n};\n"],"file":"downloadcontent.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/downloadcontent.js"],"names":["init","pendingPromise","Pending","on","e","type","which","enter","space","preventDefault","displayDownloadConfirmation","currentTarget","resolve","downloadModalTrigger","ModalFactory","create","title","dataset","downloadTitle","types","SAVE_CANCEL","body","downloadBody","buttons","save","downloadButtonText","templateContext","classes","then","modal","show","saveButton","document","querySelector","cancelButton","modalContainer","CustomEvents","events","activate","downloadContent","destroy","downloadForm","createElement","action","downloadLink","method","target","downloadSesskey","name","value","Config","sesskey","appendChild","style","display","submit","removeChild"],"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 .\n\n/**\n * Functions related to downloading course content.\n *\n * @module core_course/downloadcontent\n * @copyright 2020 Michael Hawkins \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Config from 'core/config';\nimport CustomEvents from 'core/custom_interaction_events';\nimport * as ModalFactory from 'core/modal_factory';\nimport jQuery from 'jquery';\nimport Pending from 'core/pending';\nimport {enter, space} from 'core/key_codes';\n\n/**\n * Set up listener to trigger the download course content modal.\n *\n * @return {void}\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n\n // Add event listeners for click and enter/space keys.\n jQuery('[data-downloadcourse]').on('click keydown', (e) => {\n if (e.type === 'click' || e.which === enter || e.which === space) {\n e.preventDefault();\n displayDownloadConfirmation(e.currentTarget);\n }\n });\n\n pendingPromise.resolve();\n};\n\n/**\n * Display the download course content modal.\n *\n * @method displayDownloadConfirmation\n * @param {Object} downloadModalTrigger The DOM element that triggered the download modal.\n * @return {void}\n */\nconst displayDownloadConfirmation = (downloadModalTrigger) => {\n ModalFactory.create({\n title: downloadModalTrigger.dataset.downloadTitle,\n type: ModalFactory.types.SAVE_CANCEL,\n body: `

      ${downloadModalTrigger.dataset.downloadBody}

      `,\n buttons: {\n save: downloadModalTrigger.dataset.downloadButtonText\n },\n templateContext: {\n classes: 'downloadcoursecontentmodal'\n }\n })\n .then(modal => {\n // Display the modal.\n modal.show();\n\n const saveButton = document.querySelector('.modal .downloadcoursecontentmodal [data-action=\"save\"]');\n const cancelButton = document.querySelector('.modal .downloadcoursecontentmodal [data-action=\"cancel\"]');\n const modalContainer = document.querySelector('.modal[data-region=\"modal-container\"]');\n\n // Create listener to trigger the download when the \"Download\" button is pressed.\n jQuery(saveButton).on(CustomEvents.events.activate, (e) => downloadContent(e, downloadModalTrigger, modal));\n\n // Create listener to destroy the modal when closing modal by cancelling.\n jQuery(cancelButton).on(CustomEvents.events.activate, () => {\n modal.destroy();\n });\n\n // Create listener to destroy the modal when closing modal by clicking outside of it.\n if (modalContainer.querySelector('.downloadcoursecontentmodal')) {\n jQuery(modalContainer).on(CustomEvents.events.activate, () => {\n modal.destroy();\n });\n }\n });\n};\n\n/**\n * Trigger downloading of course content.\n *\n * @method downloadContent\n * @param {Event} e The event triggering the download.\n * @param {Object} downloadModalTrigger The DOM element that triggered the download modal.\n * @param {Object} modal The modal object.\n * @return {void}\n */\nconst downloadContent = (e, downloadModalTrigger, modal) => {\n e.preventDefault();\n\n // Create a form to submit the file download request, so we can avoid sending sesskey over GET.\n const downloadForm = document.createElement('form');\n downloadForm.action = downloadModalTrigger.dataset.downloadLink;\n downloadForm.method = 'POST';\n // Open download in a new tab, so current course view is not disrupted.\n downloadForm.target = '_blank';\n const downloadSesskey = document.createElement('input');\n downloadSesskey.name = 'sesskey';\n downloadSesskey.value = Config.sesskey;\n downloadForm.appendChild(downloadSesskey);\n downloadForm.style.display = 'none';\n\n document.body.appendChild(downloadForm);\n downloadForm.submit();\n document.body.removeChild(downloadForm);\n\n // Destroy the modal to prevent duplicates if reopened later.\n modal.destroy();\n};\n"],"file":"downloadcontent.min.js"} \ No newline at end of file diff --git a/course/amd/build/events.min.js.map b/course/amd/build/events.min.js.map index e451fda7f3b..c484bf1578f 100644 --- a/course/amd/build/events.min.js.map +++ b/course/amd/build/events.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/events.js"],"names":["define","favourited","unfavorited"],"mappings":"AAuBAA,OAAM,sBAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,UAAU,CAAE,wBADT,CAEHC,WAAW,CAAE,yBAFV,CAIV,CALK,CAAN","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 .\n\n/**\n * Contain the events the course component can trigger.\n *\n * @module core_course/events\n * @package core_course\n * @copyright 2018 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n favourited: 'core_course:favourited',\n unfavorited: 'core_course:unfavorited',\n };\n});"],"file":"events.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/events.js"],"names":["define","favourited","unfavorited"],"mappings":"AAsBAA,OAAM,sBAAC,EAAD,CAAK,UAAW,CAClB,MAAO,CACHC,UAAU,CAAE,wBADT,CAEHC,WAAW,CAAE,yBAFV,CAIV,CALK,CAAN","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 .\n\n/**\n * Contain the events the course component can trigger.\n *\n * @module core_course/events\n * @copyright 2018 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([], function() {\n return {\n favourited: 'core_course:favourited',\n unfavorited: 'core_course:unfavorited',\n };\n});"],"file":"events.min.js"} \ No newline at end of file diff --git a/course/amd/build/local/activitychooser/dialogue.min.js.map b/course/amd/build/local/activitychooser/dialogue.min.js.map index c782a8424c2..b8e5c943d4c 100644 --- a/course/amd/build/local/activitychooser/dialogue.min.js.map +++ b/course/amd/build/local/activitychooser/dialogue.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/local/activitychooser/dialogue.js"],"names":["getPlugin","pluginName","showModuleHelp","carousel","moduleData","modal","showFooter","setFooter","Templates","render","help","find","selectors","regions","innerHTML","classList","add","spinnerPromise","transitionPromiseResolver","transitionPromise","Promise","resolve","contentPromise","renderForPromise","all","then","html","js","replaceNodeContents","querySelector","chooserSummary","header","focus","catch","Notification","exception","one","manageFavouriteState","modalBody","caller","partialFavourite","isFavourite","dataset","favourited","id","name","internal","Repository","unfavouriteModule","favouriteModule","registerListenerEvents","mappedModules","footerData","bodyClickListener","e","target","closest","actions","optionActions","showSummary","getBody","module","chooserOption","container","moduleName","modname","get","hasFooterContent","manageFavourite","activeSectionId","elements","activetab","getAttribute","sectionChooserOptions","getSectionChooserOptions","firstChooserOption","toggleFocusableChooserOption","initChooserOptionsKeyboardNavigation","matches","closeOption","on","allModules","modules","getModuleSelector","clearSearch","searchInput","search","value","toggleSearchResultsView","footerClickListener","footer","customfooterjs","footerjs","getBodyPromise","body","interval","pause","keyboard","addEventListener","getFooterPromise","chooserOptionsContainer","chooserOptions","querySelectorAll","Array","from","forEach","element","keyCode","enter","space","preventDefault","arrowRight","currentOption","nextOption","nextElementSibling","firstOption","firstElementChild","toFocusOption","clickErrorHandler","focusChooserOption","arrowLeft","previousOption","previousElementSibling","lastOption","lastElementChild","home","end","currentChooserOption","previousChooserOption","isFocusable","chooserOptionLink","addChooser","chooserOptionHelp","chooserOptionFavourite","tabIndex","item","fallback","renderSearchResults","searchResultsContainer","searchResultsData","templateData","length","searchQuery","searchResults","chooserContainer","chooser","clearSearchButton","searchModules","searchResultItemsContainer","searchResultItems","firstSearchResultItem","remove","setAttribute","removeAttribute","searchTerm","toLowerCase","activity","activityName","title","activityDesc","includes","push","setupKeyboardAccessibility","getModal","tab","activeSectionChooserOptions","prevActiveSectionId","relatedTarget","prevActiveSectionChooserOptions","disableFocusAllChooserOptions","allChooserOptions","displayChooser","modalPromise","sectionModules","Map","set","componentname","link","getRoot","ModalEvents","hidden","destroy"],"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 .\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 \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';\nimport * as Repository from 'core_course/local/activitychooser/repository';\nimport Notification from 'core/notification';\nimport {debounce} from 'core/utils';\nconst getPlugin = pluginName => import(pluginName);\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 * @param {jQuery} modal We need to figure out if the current modal has a footer.\n */\nconst showModuleHelp = (carousel, moduleData, modal = null) => {\n // If we have a real footer then we need to change temporarily.\n if (modal !== null && moduleData.showFooter === true) {\n modal.setFooter(Templates.render('core_course/local/activitychooser/footer_partial', moduleData));\n }\n const help = carousel.find(selectors.regions.help)[0];\n help.innerHTML = '';\n help.classList.add('m-auto');\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/local/activitychooser/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.header).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 * Given a user wants to change the favourite state of a module we either add or remove the status.\n * We also propergate this change across our map of modals.\n *\n * @method manageFavouriteState\n * @param {HTMLElement} modalBody The DOM node of the modal to manipulate\n * @param {HTMLElement} caller\n * @param {Function} partialFavourite Partially applied function we need to manage favourite status\n */\nconst manageFavouriteState = async(modalBody, caller, partialFavourite) => {\n const isFavourite = caller.dataset.favourited;\n const id = caller.dataset.id;\n const name = caller.dataset.name;\n const internal = caller.dataset.internal;\n // Switch on fave or not.\n if (isFavourite === 'true') {\n await Repository.unfavouriteModule(name, id);\n\n partialFavourite(internal, false, modalBody);\n } else {\n await Repository.favouriteModule(name, id);\n\n partialFavourite(internal, true, modalBody);\n }\n\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 * @param {Function} partialFavourite Partially applied function we need to manage favourite status\n * @param {Object} footerData Our base footer object.\n */\nconst registerListenerEvents = (modal, mappedModules, partialFavourite, footerData) => {\n const bodyClickListener = async(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 // We need to know if the overall modal has a footer so we know when to show a real / vs fake footer.\n moduleData.showFooter = modal.hasFooterContent();\n showModuleHelp(carousel, moduleData, modal);\n }\n\n if (e.target.closest(selectors.actions.optionActions.manageFavourite)) {\n const caller = e.target.closest(selectors.actions.optionActions.manageFavourite);\n await manageFavouriteState(modal.getBody()[0], caller, partialFavourite);\n const activeSectionId = modal.getBody()[0].querySelector(selectors.elements.activetab).getAttribute(\"href\");\n const sectionChooserOptions = modal.getBody()[0]\n .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));\n const firstChooserOption = sectionChooserOptions\n .querySelector(selectors.regions.chooserOption.container);\n toggleFocusableChooserOption(firstChooserOption, true);\n initChooserOptionsKeyboardNavigation(modal.getBody()[0], mappedModules, sectionChooserOptions, modal);\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 // The \"clear search\" button is triggered.\n if (e.target.closest(selectors.actions.clearSearch)) {\n // Clear the entered search query in the search bar and hide the search results container.\n const searchInput = modal.getBody()[0].querySelector(selectors.actions.search);\n searchInput.value = \"\";\n searchInput.focus();\n toggleSearchResultsView(modal, mappedModules, searchInput.value);\n }\n };\n\n // We essentially have two types of footer.\n // A fake one that is handled within the template for chooser_help and then all of the stuff for\n // modal.footer. We need to ensure we know exactly what type of footer we are using so we know what we\n // need to manage. The below code handles a real footer going to a mnet carousel item.\n const footerClickListener = async(e) => {\n if (footerData.footer === true) {\n const footerjs = await getPlugin(footerData.customfooterjs);\n await footerjs.footerClickListener(e, footerData, modal);\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 // Add a listener for an input change in the activity chooser's search bar.\n .then(body => {\n const searchInput = body.querySelector(selectors.actions.search);\n // The search input is triggered.\n searchInput.addEventListener('input', debounce(() => {\n // Display the search results.\n toggleSearchResultsView(modal, mappedModules, searchInput.value);\n }, 300));\n return body;\n })\n\n // Register event listeners related to the keyboard navigation controls.\n .then(body => {\n // Get the active chooser options section.\n const activeSectionId = body.querySelector(selectors.elements.activetab).getAttribute(\"href\");\n const sectionChooserOptions = body.querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));\n const firstChooserOption = sectionChooserOptions.querySelector(selectors.regions.chooserOption.container);\n\n toggleFocusableChooserOption(firstChooserOption, true);\n initChooserOptionsKeyboardNavigation(body, mappedModules, sectionChooserOptions, modal);\n\n return body;\n })\n .catch();\n\n modal.getFooterPromise()\n\n // The return value of getBodyPromise is a jquery object containing the body NodeElement.\n .then(footer => footer[0])\n // Add the listener for clicks on the footer.\n .then(footer => {\n footer.addEventListener('click', footerClickListener);\n return footer;\n })\n .catch();\n};\n\n/**\n * Initialise the keyboard navigation controls for the chooser options.\n *\n * @method initChooserOptionsKeyboardNavigation\n * @param {HTMLElement} 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 * @param {HTMLElement} chooserOptionsContainer The section that contains the chooser items\n * @param {Object} modal Our created modal for the section\n */\nconst initChooserOptionsKeyboardNavigation = (body, mappedModules, chooserOptionsContainer, modal = null) => {\n const chooserOptions = chooserOptionsContainer.querySelectorAll(selectors.regions.chooserOption.container);\n\n Array.from(chooserOptions).forEach((element) => {\n return element.addEventListener('keydown', (e) => {\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\n // We need to know if the overall modal has a footer so we know when to show a real / vs fake footer.\n moduleData.showFooter = modal.hasFooterContent();\n showModuleHelp(carousel, moduleData, modal);\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 = chooserOptionsContainer.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 = chooserOptionsContainer.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 = chooserOptionsContainer.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 = chooserOptionsContainer.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|null} previousChooserOption The previous focused option element\n */\nconst focusChooserOption = (currentChooserOption, previousChooserOption = null) => {\n if (previousChooserOption !== null) {\n toggleFocusableChooserOption(previousChooserOption, false);\n }\n\n toggleFocusableChooserOption(currentChooserOption, true);\n currentChooserOption.focus();\n};\n\n/**\n * Add or remove a chooser option from the focus order.\n *\n * @method toggleFocusableChooserOption\n * @param {HTMLElement} chooserOption The chooser option element which should be added or removed from the focus order\n * @param {Boolean} isFocusable Whether the chooser element is focusable or not\n */\nconst toggleFocusableChooserOption = (chooserOption, isFocusable) => {\n const chooserOptionLink = chooserOption.querySelector(selectors.actions.addChooser);\n const chooserOptionHelp = chooserOption.querySelector(selectors.actions.optionActions.showSummary);\n const chooserOptionFavourite = chooserOption.querySelector(selectors.actions.optionActions.manageFavourite);\n\n if (isFocusable) {\n // Set tabindex to 0 to add current chooser option element to the focus order.\n chooserOption.tabIndex = 0;\n chooserOptionLink.tabIndex = 0;\n chooserOptionHelp.tabIndex = 0;\n chooserOptionFavourite.tabIndex = 0;\n } else {\n // Set tabindex to -1 to remove the previous chooser option element from the focus order.\n chooserOption.tabIndex = -1;\n chooserOptionLink.tabIndex = -1;\n chooserOptionHelp.tabIndex = -1;\n chooserOptionFavourite.tabIndex = -1;\n }\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 {HTMLElement}\n */\nconst clickErrorHandler = (item, fallback) => {\n if (item !== null) {\n return item;\n } else {\n return fallback;\n }\n};\n\n/**\n * Render the search results in a defined container\n *\n * @method renderSearchResults\n * @param {HTMLElement} searchResultsContainer The container where the data should be rendered\n * @param {Object} searchResultsData Data containing the module items that satisfy the search criteria\n */\nconst renderSearchResults = async(searchResultsContainer, searchResultsData) => {\n const templateData = {\n 'searchresultsnumber': searchResultsData.length,\n 'searchresults': searchResultsData\n };\n // Build up the html & js ready to place into the help section.\n const {html, js} = await Templates.renderForPromise('core_course/local/activitychooser/search_results', templateData);\n await Templates.replaceNodeContents(searchResultsContainer, html, js);\n};\n\n/**\n * Toggle (display/hide) the search results depending on the value of the search query\n *\n * @method toggleSearchResultsView\n * @param {Object} modal Our created modal for the section\n * @param {Map} mappedModules A map of all of the modules we are working with with K: mod_name V: {Object}\n * @param {String} searchQuery The search query\n */\nconst toggleSearchResultsView = async(modal, mappedModules, searchQuery) => {\n const modalBody = modal.getBody()[0];\n const searchResultsContainer = modalBody.querySelector(selectors.regions.searchResults);\n const chooserContainer = modalBody.querySelector(selectors.regions.chooser);\n const clearSearchButton = modalBody.querySelector(selectors.actions.clearSearch);\n\n if (searchQuery.length > 0) { // Search query is present.\n const searchResultsData = searchModules(mappedModules, searchQuery);\n await renderSearchResults(searchResultsContainer, searchResultsData);\n const searchResultItemsContainer = searchResultsContainer.querySelector(selectors.regions.searchResultItems);\n const firstSearchResultItem = searchResultItemsContainer.querySelector(selectors.regions.chooserOption.container);\n if (firstSearchResultItem) {\n // Set the first result item to be focusable.\n toggleFocusableChooserOption(firstSearchResultItem, true);\n // Register keyboard events on the created search result items.\n initChooserOptionsKeyboardNavigation(modalBody, mappedModules, searchResultItemsContainer, modal);\n }\n // Display the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.remove('d-none');\n // Hide the default chooser options container.\n chooserContainer.setAttribute('hidden', 'hidden');\n // Display the search results container.\n searchResultsContainer.removeAttribute('hidden');\n } else { // Search query is not present.\n // Hide the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.add('d-none');\n // Hide the search results container.\n searchResultsContainer.setAttribute('hidden', 'hidden');\n // Display the default chooser options container.\n chooserContainer.removeAttribute('hidden');\n }\n};\n\n/**\n * Return the list of modules which have a name or description that matches the given search term.\n *\n * @method searchModules\n * @param {Array} modules List of available modules\n * @param {String} searchTerm The search term to match\n * @return {Array}\n */\nconst searchModules = (modules, searchTerm) => {\n if (searchTerm === '') {\n return modules;\n }\n searchTerm = searchTerm.toLowerCase();\n const searchResults = [];\n modules.forEach((activity) => {\n const activityName = activity.title.toLowerCase();\n const activityDesc = activity.help.toLowerCase();\n if (activityName.includes(searchTerm) || activityDesc.includes(searchTerm)) {\n searchResults.push(activity);\n }\n });\n\n return searchResults;\n};\n\n/**\n * Set up our tabindex information across the chooser.\n *\n * @method setupKeyboardAccessibility\n * @param {Promise} modal Our created modal for the section\n * @param {Map} mappedModules A map of all of the built module information\n */\nconst setupKeyboardAccessibility = (modal, mappedModules) => {\n modal.getModal()[0].tabIndex = -1;\n\n modal.getBodyPromise().then(body => {\n $(selectors.elements.tab).on('shown.bs.tab', (e) => {\n const activeSectionId = e.target.getAttribute(\"href\");\n const activeSectionChooserOptions = body[0]\n .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));\n const firstChooserOption = activeSectionChooserOptions\n .querySelector(selectors.regions.chooserOption.container);\n const prevActiveSectionId = e.relatedTarget.getAttribute(\"href\");\n const prevActiveSectionChooserOptions = body[0]\n .querySelector(selectors.regions.getSectionChooserOptions(prevActiveSectionId));\n\n // Disable the focus of every chooser option in the previous active section.\n disableFocusAllChooserOptions(prevActiveSectionChooserOptions);\n // Enable the focus of the first chooser option in the current active section.\n toggleFocusableChooserOption(firstChooserOption, true);\n initChooserOptionsKeyboardNavigation(body[0], mappedModules, activeSectionChooserOptions, modal);\n });\n return;\n }).catch(Notification.exception);\n};\n\n/**\n * Disable the focus of all chooser options in a specific container (section).\n *\n * @method disableFocusAllChooserOptions\n * @param {HTMLElement} sectionChooserOptions The section that contains the chooser items\n */\nconst disableFocusAllChooserOptions = (sectionChooserOptions) => {\n const allChooserOptions = sectionChooserOptions.querySelectorAll(selectors.regions.chooserOption.container);\n allChooserOptions.forEach((chooserOption) => {\n toggleFocusableChooserOption(chooserOption, false);\n });\n};\n\n/**\n * Display the module chooser.\n *\n * @method displayChooser\n * @param {Promise} modalPromise Our created modal for the section\n * @param {Array} sectionModules An array of all of the built module information\n * @param {Function} partialFavourite Partially applied function we need to manage favourite status\n * @param {Object} footerData Our base footer object.\n */\nexport const displayChooser = (modalPromise, sectionModules, partialFavourite, footerData) => {\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.componentname + '_' + module.link, module);\n });\n\n // Register event listeners.\n modalPromise.then(modal => {\n registerListenerEvents(modal, mappedModules, partialFavourite, footerData);\n\n // We want to focus on the first chooser option element as soon as the modal is opened.\n setupKeyboardAccessibility(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 return modal;\n }).catch();\n};\n"],"file":"dialogue.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../src/local/activitychooser/dialogue.js"],"names":["getPlugin","pluginName","showModuleHelp","carousel","moduleData","modal","showFooter","setFooter","Templates","render","help","find","selectors","regions","innerHTML","classList","add","spinnerPromise","transitionPromiseResolver","transitionPromise","Promise","resolve","contentPromise","renderForPromise","all","then","html","js","replaceNodeContents","querySelector","chooserSummary","header","focus","catch","Notification","exception","one","manageFavouriteState","modalBody","caller","partialFavourite","isFavourite","dataset","favourited","id","name","internal","Repository","unfavouriteModule","favouriteModule","registerListenerEvents","mappedModules","footerData","bodyClickListener","e","target","closest","actions","optionActions","showSummary","getBody","module","chooserOption","container","moduleName","modname","get","hasFooterContent","manageFavourite","activeSectionId","elements","activetab","getAttribute","sectionChooserOptions","getSectionChooserOptions","firstChooserOption","toggleFocusableChooserOption","initChooserOptionsKeyboardNavigation","matches","closeOption","on","allModules","modules","getModuleSelector","clearSearch","searchInput","search","value","toggleSearchResultsView","footerClickListener","footer","customfooterjs","footerjs","getBodyPromise","body","interval","pause","keyboard","addEventListener","getFooterPromise","chooserOptionsContainer","chooserOptions","querySelectorAll","Array","from","forEach","element","keyCode","enter","space","preventDefault","arrowRight","currentOption","nextOption","nextElementSibling","firstOption","firstElementChild","toFocusOption","clickErrorHandler","focusChooserOption","arrowLeft","previousOption","previousElementSibling","lastOption","lastElementChild","home","end","currentChooserOption","previousChooserOption","isFocusable","chooserOptionLink","addChooser","chooserOptionHelp","chooserOptionFavourite","tabIndex","item","fallback","renderSearchResults","searchResultsContainer","searchResultsData","templateData","length","searchQuery","searchResults","chooserContainer","chooser","clearSearchButton","searchModules","searchResultItemsContainer","searchResultItems","firstSearchResultItem","remove","setAttribute","removeAttribute","searchTerm","toLowerCase","activity","activityName","title","activityDesc","includes","push","setupKeyboardAccessibility","getModal","tab","activeSectionChooserOptions","prevActiveSectionId","relatedTarget","prevActiveSectionChooserOptions","disableFocusAllChooserOptions","allChooserOptions","displayChooser","modalPromise","sectionModules","Map","set","componentname","link","getRoot","ModalEvents","hidden","destroy"],"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 .\n\n/**\n * A type of dialogue used as for choosing options.\n *\n * @module core_course/local/chooser/dialogue\n * @copyright 2019 Mihail Geshoski \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';\nimport * as Repository from 'core_course/local/activitychooser/repository';\nimport Notification from 'core/notification';\nimport {debounce} from 'core/utils';\nconst getPlugin = pluginName => import(pluginName);\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 * @param {jQuery} modal We need to figure out if the current modal has a footer.\n */\nconst showModuleHelp = (carousel, moduleData, modal = null) => {\n // If we have a real footer then we need to change temporarily.\n if (modal !== null && moduleData.showFooter === true) {\n modal.setFooter(Templates.render('core_course/local/activitychooser/footer_partial', moduleData));\n }\n const help = carousel.find(selectors.regions.help)[0];\n help.innerHTML = '';\n help.classList.add('m-auto');\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/local/activitychooser/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.header).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 * Given a user wants to change the favourite state of a module we either add or remove the status.\n * We also propergate this change across our map of modals.\n *\n * @method manageFavouriteState\n * @param {HTMLElement} modalBody The DOM node of the modal to manipulate\n * @param {HTMLElement} caller\n * @param {Function} partialFavourite Partially applied function we need to manage favourite status\n */\nconst manageFavouriteState = async(modalBody, caller, partialFavourite) => {\n const isFavourite = caller.dataset.favourited;\n const id = caller.dataset.id;\n const name = caller.dataset.name;\n const internal = caller.dataset.internal;\n // Switch on fave or not.\n if (isFavourite === 'true') {\n await Repository.unfavouriteModule(name, id);\n\n partialFavourite(internal, false, modalBody);\n } else {\n await Repository.favouriteModule(name, id);\n\n partialFavourite(internal, true, modalBody);\n }\n\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 * @param {Function} partialFavourite Partially applied function we need to manage favourite status\n * @param {Object} footerData Our base footer object.\n */\nconst registerListenerEvents = (modal, mappedModules, partialFavourite, footerData) => {\n const bodyClickListener = async(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 // We need to know if the overall modal has a footer so we know when to show a real / vs fake footer.\n moduleData.showFooter = modal.hasFooterContent();\n showModuleHelp(carousel, moduleData, modal);\n }\n\n if (e.target.closest(selectors.actions.optionActions.manageFavourite)) {\n const caller = e.target.closest(selectors.actions.optionActions.manageFavourite);\n await manageFavouriteState(modal.getBody()[0], caller, partialFavourite);\n const activeSectionId = modal.getBody()[0].querySelector(selectors.elements.activetab).getAttribute(\"href\");\n const sectionChooserOptions = modal.getBody()[0]\n .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));\n const firstChooserOption = sectionChooserOptions\n .querySelector(selectors.regions.chooserOption.container);\n toggleFocusableChooserOption(firstChooserOption, true);\n initChooserOptionsKeyboardNavigation(modal.getBody()[0], mappedModules, sectionChooserOptions, modal);\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 // The \"clear search\" button is triggered.\n if (e.target.closest(selectors.actions.clearSearch)) {\n // Clear the entered search query in the search bar and hide the search results container.\n const searchInput = modal.getBody()[0].querySelector(selectors.actions.search);\n searchInput.value = \"\";\n searchInput.focus();\n toggleSearchResultsView(modal, mappedModules, searchInput.value);\n }\n };\n\n // We essentially have two types of footer.\n // A fake one that is handled within the template for chooser_help and then all of the stuff for\n // modal.footer. We need to ensure we know exactly what type of footer we are using so we know what we\n // need to manage. The below code handles a real footer going to a mnet carousel item.\n const footerClickListener = async(e) => {\n if (footerData.footer === true) {\n const footerjs = await getPlugin(footerData.customfooterjs);\n await footerjs.footerClickListener(e, footerData, modal);\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 // Add a listener for an input change in the activity chooser's search bar.\n .then(body => {\n const searchInput = body.querySelector(selectors.actions.search);\n // The search input is triggered.\n searchInput.addEventListener('input', debounce(() => {\n // Display the search results.\n toggleSearchResultsView(modal, mappedModules, searchInput.value);\n }, 300));\n return body;\n })\n\n // Register event listeners related to the keyboard navigation controls.\n .then(body => {\n // Get the active chooser options section.\n const activeSectionId = body.querySelector(selectors.elements.activetab).getAttribute(\"href\");\n const sectionChooserOptions = body.querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));\n const firstChooserOption = sectionChooserOptions.querySelector(selectors.regions.chooserOption.container);\n\n toggleFocusableChooserOption(firstChooserOption, true);\n initChooserOptionsKeyboardNavigation(body, mappedModules, sectionChooserOptions, modal);\n\n return body;\n })\n .catch();\n\n modal.getFooterPromise()\n\n // The return value of getBodyPromise is a jquery object containing the body NodeElement.\n .then(footer => footer[0])\n // Add the listener for clicks on the footer.\n .then(footer => {\n footer.addEventListener('click', footerClickListener);\n return footer;\n })\n .catch();\n};\n\n/**\n * Initialise the keyboard navigation controls for the chooser options.\n *\n * @method initChooserOptionsKeyboardNavigation\n * @param {HTMLElement} 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 * @param {HTMLElement} chooserOptionsContainer The section that contains the chooser items\n * @param {Object} modal Our created modal for the section\n */\nconst initChooserOptionsKeyboardNavigation = (body, mappedModules, chooserOptionsContainer, modal = null) => {\n const chooserOptions = chooserOptionsContainer.querySelectorAll(selectors.regions.chooserOption.container);\n\n Array.from(chooserOptions).forEach((element) => {\n return element.addEventListener('keydown', (e) => {\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\n // We need to know if the overall modal has a footer so we know when to show a real / vs fake footer.\n moduleData.showFooter = modal.hasFooterContent();\n showModuleHelp(carousel, moduleData, modal);\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 = chooserOptionsContainer.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 = chooserOptionsContainer.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 = chooserOptionsContainer.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 = chooserOptionsContainer.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|null} previousChooserOption The previous focused option element\n */\nconst focusChooserOption = (currentChooserOption, previousChooserOption = null) => {\n if (previousChooserOption !== null) {\n toggleFocusableChooserOption(previousChooserOption, false);\n }\n\n toggleFocusableChooserOption(currentChooserOption, true);\n currentChooserOption.focus();\n};\n\n/**\n * Add or remove a chooser option from the focus order.\n *\n * @method toggleFocusableChooserOption\n * @param {HTMLElement} chooserOption The chooser option element which should be added or removed from the focus order\n * @param {Boolean} isFocusable Whether the chooser element is focusable or not\n */\nconst toggleFocusableChooserOption = (chooserOption, isFocusable) => {\n const chooserOptionLink = chooserOption.querySelector(selectors.actions.addChooser);\n const chooserOptionHelp = chooserOption.querySelector(selectors.actions.optionActions.showSummary);\n const chooserOptionFavourite = chooserOption.querySelector(selectors.actions.optionActions.manageFavourite);\n\n if (isFocusable) {\n // Set tabindex to 0 to add current chooser option element to the focus order.\n chooserOption.tabIndex = 0;\n chooserOptionLink.tabIndex = 0;\n chooserOptionHelp.tabIndex = 0;\n chooserOptionFavourite.tabIndex = 0;\n } else {\n // Set tabindex to -1 to remove the previous chooser option element from the focus order.\n chooserOption.tabIndex = -1;\n chooserOptionLink.tabIndex = -1;\n chooserOptionHelp.tabIndex = -1;\n chooserOptionFavourite.tabIndex = -1;\n }\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 {HTMLElement}\n */\nconst clickErrorHandler = (item, fallback) => {\n if (item !== null) {\n return item;\n } else {\n return fallback;\n }\n};\n\n/**\n * Render the search results in a defined container\n *\n * @method renderSearchResults\n * @param {HTMLElement} searchResultsContainer The container where the data should be rendered\n * @param {Object} searchResultsData Data containing the module items that satisfy the search criteria\n */\nconst renderSearchResults = async(searchResultsContainer, searchResultsData) => {\n const templateData = {\n 'searchresultsnumber': searchResultsData.length,\n 'searchresults': searchResultsData\n };\n // Build up the html & js ready to place into the help section.\n const {html, js} = await Templates.renderForPromise('core_course/local/activitychooser/search_results', templateData);\n await Templates.replaceNodeContents(searchResultsContainer, html, js);\n};\n\n/**\n * Toggle (display/hide) the search results depending on the value of the search query\n *\n * @method toggleSearchResultsView\n * @param {Object} modal Our created modal for the section\n * @param {Map} mappedModules A map of all of the modules we are working with with K: mod_name V: {Object}\n * @param {String} searchQuery The search query\n */\nconst toggleSearchResultsView = async(modal, mappedModules, searchQuery) => {\n const modalBody = modal.getBody()[0];\n const searchResultsContainer = modalBody.querySelector(selectors.regions.searchResults);\n const chooserContainer = modalBody.querySelector(selectors.regions.chooser);\n const clearSearchButton = modalBody.querySelector(selectors.actions.clearSearch);\n\n if (searchQuery.length > 0) { // Search query is present.\n const searchResultsData = searchModules(mappedModules, searchQuery);\n await renderSearchResults(searchResultsContainer, searchResultsData);\n const searchResultItemsContainer = searchResultsContainer.querySelector(selectors.regions.searchResultItems);\n const firstSearchResultItem = searchResultItemsContainer.querySelector(selectors.regions.chooserOption.container);\n if (firstSearchResultItem) {\n // Set the first result item to be focusable.\n toggleFocusableChooserOption(firstSearchResultItem, true);\n // Register keyboard events on the created search result items.\n initChooserOptionsKeyboardNavigation(modalBody, mappedModules, searchResultItemsContainer, modal);\n }\n // Display the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.remove('d-none');\n // Hide the default chooser options container.\n chooserContainer.setAttribute('hidden', 'hidden');\n // Display the search results container.\n searchResultsContainer.removeAttribute('hidden');\n } else { // Search query is not present.\n // Hide the \"clear\" search button in the activity chooser search bar.\n clearSearchButton.classList.add('d-none');\n // Hide the search results container.\n searchResultsContainer.setAttribute('hidden', 'hidden');\n // Display the default chooser options container.\n chooserContainer.removeAttribute('hidden');\n }\n};\n\n/**\n * Return the list of modules which have a name or description that matches the given search term.\n *\n * @method searchModules\n * @param {Array} modules List of available modules\n * @param {String} searchTerm The search term to match\n * @return {Array}\n */\nconst searchModules = (modules, searchTerm) => {\n if (searchTerm === '') {\n return modules;\n }\n searchTerm = searchTerm.toLowerCase();\n const searchResults = [];\n modules.forEach((activity) => {\n const activityName = activity.title.toLowerCase();\n const activityDesc = activity.help.toLowerCase();\n if (activityName.includes(searchTerm) || activityDesc.includes(searchTerm)) {\n searchResults.push(activity);\n }\n });\n\n return searchResults;\n};\n\n/**\n * Set up our tabindex information across the chooser.\n *\n * @method setupKeyboardAccessibility\n * @param {Promise} modal Our created modal for the section\n * @param {Map} mappedModules A map of all of the built module information\n */\nconst setupKeyboardAccessibility = (modal, mappedModules) => {\n modal.getModal()[0].tabIndex = -1;\n\n modal.getBodyPromise().then(body => {\n $(selectors.elements.tab).on('shown.bs.tab', (e) => {\n const activeSectionId = e.target.getAttribute(\"href\");\n const activeSectionChooserOptions = body[0]\n .querySelector(selectors.regions.getSectionChooserOptions(activeSectionId));\n const firstChooserOption = activeSectionChooserOptions\n .querySelector(selectors.regions.chooserOption.container);\n const prevActiveSectionId = e.relatedTarget.getAttribute(\"href\");\n const prevActiveSectionChooserOptions = body[0]\n .querySelector(selectors.regions.getSectionChooserOptions(prevActiveSectionId));\n\n // Disable the focus of every chooser option in the previous active section.\n disableFocusAllChooserOptions(prevActiveSectionChooserOptions);\n // Enable the focus of the first chooser option in the current active section.\n toggleFocusableChooserOption(firstChooserOption, true);\n initChooserOptionsKeyboardNavigation(body[0], mappedModules, activeSectionChooserOptions, modal);\n });\n return;\n }).catch(Notification.exception);\n};\n\n/**\n * Disable the focus of all chooser options in a specific container (section).\n *\n * @method disableFocusAllChooserOptions\n * @param {HTMLElement} sectionChooserOptions The section that contains the chooser items\n */\nconst disableFocusAllChooserOptions = (sectionChooserOptions) => {\n const allChooserOptions = sectionChooserOptions.querySelectorAll(selectors.regions.chooserOption.container);\n allChooserOptions.forEach((chooserOption) => {\n toggleFocusableChooserOption(chooserOption, false);\n });\n};\n\n/**\n * Display the module chooser.\n *\n * @method displayChooser\n * @param {Promise} modalPromise Our created modal for the section\n * @param {Array} sectionModules An array of all of the built module information\n * @param {Function} partialFavourite Partially applied function we need to manage favourite status\n * @param {Object} footerData Our base footer object.\n */\nexport const displayChooser = (modalPromise, sectionModules, partialFavourite, footerData) => {\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.componentname + '_' + module.link, module);\n });\n\n // Register event listeners.\n modalPromise.then(modal => {\n registerListenerEvents(modal, mappedModules, partialFavourite, footerData);\n\n // We want to focus on the first chooser option element as soon as the modal is opened.\n setupKeyboardAccessibility(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 return modal;\n }).catch();\n};\n"],"file":"dialogue.min.js"} \ No newline at end of file diff --git a/course/amd/build/local/activitychooser/repository.min.js.map b/course/amd/build/local/activitychooser/repository.min.js.map index 0469db64b55..d8dc80c6ab5 100644 --- a/course/amd/build/local/activitychooser/repository.min.js.map +++ b/course/amd/build/local/activitychooser/repository.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/local/activitychooser/repository.js"],"names":["activityModules","courseid","ajax","call","methodname","args","favouriteModule","modName","modID","componentname","contentitemid","unfavouriteModule","fetchFooterData","sectionid"],"mappings":"4OAsBA,uDASO,GAAMA,CAAAA,CAAe,CAAG,SAACC,CAAD,CAAc,CAOzC,MAAOC,WAAKC,IAAL,CAAU,CAND,CACZC,UAAU,CAAE,sCADA,CAEZC,IAAI,CAAE,CACFJ,QAAQ,CAAEA,CADR,CAFM,CAMC,CAAV,EAAqB,CAArB,CACV,CARM,C,oBAmBA,GAAMK,CAAAA,CAAe,CAAG,SAACC,CAAD,CAAUC,CAAV,CAAoB,CAQ/C,MAAON,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,iDADA,CAEZC,IAAI,CAAE,CACFI,aAAa,CAAEF,CADb,CAEFG,aAAa,CAAEF,CAFb,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C,oBAoBA,GAAMG,CAAAA,CAAiB,CAAG,SAACJ,CAAD,CAAUC,CAAV,CAAoB,CAQjD,MAAON,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,sDADA,CAEZC,IAAI,CAAE,CACFI,aAAa,CAAEF,CADb,CAEFG,aAAa,CAAEF,CAFb,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C,sBAmBA,GAAMI,CAAAA,CAAe,CAAG,SAACX,CAAD,CAAWY,CAAX,CAAyB,CAQpD,MAAOX,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,yCADA,CAEZC,IAAI,CAAE,CACFJ,QAAQ,CAAEA,CADR,CAEFY,SAAS,CAAEA,CAFT,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C","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 .\n\n/**\n *\n * @module core_course/repository\n * @package core_course\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport ajax from 'core/ajax';\n\n/**\n * Fetch all the information on modules we'll need in the activity chooser.\n *\n * @method activityModules\n * @param {Number} courseid What course to fetch the modules for\n * @return {object} jQuery promise\n */\nexport const activityModules = (courseid) => {\n const request = {\n methodname: 'core_course_get_course_content_items',\n args: {\n courseid: courseid,\n },\n };\n return ajax.call([request])[0];\n};\n\n/**\n * Given a module name, module ID & the current course we want to specify that the module\n * is a users' favourite.\n *\n * @method favouriteModule\n * @param {String} modName Frankenstyle name of the component to add favourite\n * @param {int} modID ID of the module. Mainly for LTI cases where they have same / similar names\n * @return {object} jQuery promise\n */\nexport const favouriteModule = (modName, modID) => {\n const request = {\n methodname: 'core_course_add_content_item_to_user_favourites',\n args: {\n componentname: modName,\n contentitemid: modID,\n },\n };\n return ajax.call([request])[0];\n};\n\n/**\n * Given a module name, module ID & the current course we want to specify that the module\n * is no longer a users' favourite.\n *\n * @method unfavouriteModule\n * @param {String} modName Frankenstyle name of the component to add favourite\n * @param {int} modID ID of the module. Mainly for LTI cases where they have same / similar names\n * @return {object} jQuery promise\n */\nexport const unfavouriteModule = (modName, modID) => {\n const request = {\n methodname: 'core_course_remove_content_item_from_user_favourites',\n args: {\n componentname: modName,\n contentitemid: modID,\n },\n };\n return ajax.call([request])[0];\n};\n\n/**\n * Fetch all the information on modules we'll need in the activity chooser.\n *\n * @method fetchFooterData\n * @param {Number} courseid What course to fetch the data for\n * @param {Number} sectionid What section to fetch the data for\n * @return {object} jQuery promise\n */\nexport const fetchFooterData = (courseid, sectionid) => {\n const request = {\n methodname: 'core_course_get_activity_chooser_footer',\n args: {\n courseid: courseid,\n sectionid: sectionid,\n },\n };\n return ajax.call([request])[0];\n};\n"],"file":"repository.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../src/local/activitychooser/repository.js"],"names":["activityModules","courseid","ajax","call","methodname","args","favouriteModule","modName","modID","componentname","contentitemid","unfavouriteModule","fetchFooterData","sectionid"],"mappings":"4OAqBA,uDASO,GAAMA,CAAAA,CAAe,CAAG,SAACC,CAAD,CAAc,CAOzC,MAAOC,WAAKC,IAAL,CAAU,CAND,CACZC,UAAU,CAAE,sCADA,CAEZC,IAAI,CAAE,CACFJ,QAAQ,CAAEA,CADR,CAFM,CAMC,CAAV,EAAqB,CAArB,CACV,CARM,C,oBAmBA,GAAMK,CAAAA,CAAe,CAAG,SAACC,CAAD,CAAUC,CAAV,CAAoB,CAQ/C,MAAON,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,iDADA,CAEZC,IAAI,CAAE,CACFI,aAAa,CAAEF,CADb,CAEFG,aAAa,CAAEF,CAFb,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C,oBAoBA,GAAMG,CAAAA,CAAiB,CAAG,SAACJ,CAAD,CAAUC,CAAV,CAAoB,CAQjD,MAAON,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,sDADA,CAEZC,IAAI,CAAE,CACFI,aAAa,CAAEF,CADb,CAEFG,aAAa,CAAEF,CAFb,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C,sBAmBA,GAAMI,CAAAA,CAAe,CAAG,SAACX,CAAD,CAAWY,CAAX,CAAyB,CAQpD,MAAOX,WAAKC,IAAL,CAAU,CAPD,CACZC,UAAU,CAAE,yCADA,CAEZC,IAAI,CAAE,CACFJ,QAAQ,CAAEA,CADR,CAEFY,SAAS,CAAEA,CAFT,CAFM,CAOC,CAAV,EAAqB,CAArB,CACV,CATM,C","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 .\n\n/**\n *\n * @module core_course/repository\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport ajax from 'core/ajax';\n\n/**\n * Fetch all the information on modules we'll need in the activity chooser.\n *\n * @method activityModules\n * @param {Number} courseid What course to fetch the modules for\n * @return {object} jQuery promise\n */\nexport const activityModules = (courseid) => {\n const request = {\n methodname: 'core_course_get_course_content_items',\n args: {\n courseid: courseid,\n },\n };\n return ajax.call([request])[0];\n};\n\n/**\n * Given a module name, module ID & the current course we want to specify that the module\n * is a users' favourite.\n *\n * @method favouriteModule\n * @param {String} modName Frankenstyle name of the component to add favourite\n * @param {int} modID ID of the module. Mainly for LTI cases where they have same / similar names\n * @return {object} jQuery promise\n */\nexport const favouriteModule = (modName, modID) => {\n const request = {\n methodname: 'core_course_add_content_item_to_user_favourites',\n args: {\n componentname: modName,\n contentitemid: modID,\n },\n };\n return ajax.call([request])[0];\n};\n\n/**\n * Given a module name, module ID & the current course we want to specify that the module\n * is no longer a users' favourite.\n *\n * @method unfavouriteModule\n * @param {String} modName Frankenstyle name of the component to add favourite\n * @param {int} modID ID of the module. Mainly for LTI cases where they have same / similar names\n * @return {object} jQuery promise\n */\nexport const unfavouriteModule = (modName, modID) => {\n const request = {\n methodname: 'core_course_remove_content_item_from_user_favourites',\n args: {\n componentname: modName,\n contentitemid: modID,\n },\n };\n return ajax.call([request])[0];\n};\n\n/**\n * Fetch all the information on modules we'll need in the activity chooser.\n *\n * @method fetchFooterData\n * @param {Number} courseid What course to fetch the data for\n * @param {Number} sectionid What section to fetch the data for\n * @return {object} jQuery promise\n */\nexport const fetchFooterData = (courseid, sectionid) => {\n const request = {\n methodname: 'core_course_get_activity_chooser_footer',\n args: {\n courseid: courseid,\n sectionid: sectionid,\n },\n };\n return ajax.call([request])[0];\n};\n"],"file":"repository.min.js"} \ No newline at end of file diff --git a/course/amd/build/local/activitychooser/selectors.min.js.map b/course/amd/build/local/activitychooser/selectors.min.js.map index 25b6d79c3f1..1449b9811dd 100644 --- a/course/amd/build/local/activitychooser/selectors.min.js.map +++ b/course/amd/build/local/activitychooser/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/local/activitychooser/selectors.js"],"names":["getDataSelector","name","value","regions","chooser","getSectionChooserOptions","containerid","chooserOption","container","actions","info","chooserSummary","content","header","carousel","help","modules","favouriteTabNav","defaultTabNav","activityTabNav","favouriteTab","recommendedTab","defaultTab","activityTab","resourceTab","getModuleSelector","modname","searchResults","searchResultItems","optionActions","showSummary","manageFavourite","addChooser","closeOption","hide","search","clearSearch","render","favourites","elements","section","sectionmodchooser","sitemenu","sitetopic","tab","activetab","visibletabs"],"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 .\n\n/**\n * Define all of the selectors we will be using on the grading interface.\n *\n * @module core_course/local/chooser/selectors\n * @package core_course\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n regions: {\n chooser: getDataSelector('region', 'chooser-container'),\n getSectionChooserOptions: containerid => `${containerid} ${getDataSelector('region', 'chooser-options-container')}`,\n chooserOption: {\n container: getDataSelector('region', 'chooser-option-container'),\n actions: getDataSelector('region', 'chooser-option-actions-container'),\n info: getDataSelector('region', 'chooser-option-info-container'),\n },\n chooserSummary: {\n container: getDataSelector('region', 'chooser-option-summary-container'),\n content: getDataSelector('region', 'chooser-option-summary-content-container'),\n header: getDataSelector('region', 'summary-header'),\n actions: getDataSelector('region', 'chooser-option-summary-actions-container'),\n },\n carousel: getDataSelector('region', 'carousel'),\n help: getDataSelector('region', 'help'),\n modules: getDataSelector('region', 'modules'),\n favouriteTabNav: getDataSelector('region', 'favourite-tab-nav'),\n defaultTabNav: getDataSelector('region', 'default-tab-nav'),\n activityTabNav: getDataSelector('region', 'activity-tab-nav'),\n favouriteTab: getDataSelector('region', 'favourites'),\n recommendedTab: getDataSelector('region', 'recommended'),\n defaultTab: getDataSelector('region', 'default'),\n activityTab: getDataSelector('region', 'activity'),\n resourceTab: getDataSelector('region', 'resources'),\n getModuleSelector: modname => `[role=\"menuitem\"][data-modname=\"${modname}\"]`,\n searchResults: getDataSelector('region', 'search-results-container'),\n searchResultItems: getDataSelector('region', 'search-result-items-container'),\n },\n actions: {\n optionActions: {\n showSummary: getDataSelector('action', 'show-option-summary'),\n manageFavourite: getDataSelector('action', 'manage-module-favourite'),\n },\n addChooser: getDataSelector('action', 'add-chooser-option'),\n closeOption: getDataSelector('action', 'close-chooser-option-summary'),\n hide: getDataSelector('action', 'hide'),\n search: getDataSelector('action', 'search'),\n clearSearch: getDataSelector('action', 'clearsearch'),\n },\n render: {\n favourites: getDataSelector('render', 'favourites-area'),\n },\n elements: {\n section: '.section',\n sectionmodchooser: 'button.section-modchooser-link',\n sitemenu: '.block_site_main_menu',\n sitetopic: 'div.sitetopic',\n tab: 'a[data-toggle=\"tab\"]',\n activetab: 'a[data-toggle=\"tab\"][aria-selected=\"true\"]',\n visibletabs: 'a[data-toggle=\"tab\"]:not(.d-none)'\n },\n};\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../src/local/activitychooser/selectors.js"],"names":["getDataSelector","name","value","regions","chooser","getSectionChooserOptions","containerid","chooserOption","container","actions","info","chooserSummary","content","header","carousel","help","modules","favouriteTabNav","defaultTabNav","activityTabNav","favouriteTab","recommendedTab","defaultTab","activityTab","resourceTab","getModuleSelector","modname","searchResults","searchResultItems","optionActions","showSummary","manageFavourite","addChooser","closeOption","hide","search","clearSearch","render","favourites","elements","section","sectionmodchooser","sitemenu","sitetopic","tab","activetab","visibletabs"],"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 .\n\n/**\n * Define all of the selectors we will be using on the grading interface.\n *\n * @module core_course/local/chooser/selectors\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n regions: {\n chooser: getDataSelector('region', 'chooser-container'),\n getSectionChooserOptions: containerid => `${containerid} ${getDataSelector('region', 'chooser-options-container')}`,\n chooserOption: {\n container: getDataSelector('region', 'chooser-option-container'),\n actions: getDataSelector('region', 'chooser-option-actions-container'),\n info: getDataSelector('region', 'chooser-option-info-container'),\n },\n chooserSummary: {\n container: getDataSelector('region', 'chooser-option-summary-container'),\n content: getDataSelector('region', 'chooser-option-summary-content-container'),\n header: getDataSelector('region', 'summary-header'),\n actions: getDataSelector('region', 'chooser-option-summary-actions-container'),\n },\n carousel: getDataSelector('region', 'carousel'),\n help: getDataSelector('region', 'help'),\n modules: getDataSelector('region', 'modules'),\n favouriteTabNav: getDataSelector('region', 'favourite-tab-nav'),\n defaultTabNav: getDataSelector('region', 'default-tab-nav'),\n activityTabNav: getDataSelector('region', 'activity-tab-nav'),\n favouriteTab: getDataSelector('region', 'favourites'),\n recommendedTab: getDataSelector('region', 'recommended'),\n defaultTab: getDataSelector('region', 'default'),\n activityTab: getDataSelector('region', 'activity'),\n resourceTab: getDataSelector('region', 'resources'),\n getModuleSelector: modname => `[role=\"menuitem\"][data-modname=\"${modname}\"]`,\n searchResults: getDataSelector('region', 'search-results-container'),\n searchResultItems: getDataSelector('region', 'search-result-items-container'),\n },\n actions: {\n optionActions: {\n showSummary: getDataSelector('action', 'show-option-summary'),\n manageFavourite: getDataSelector('action', 'manage-module-favourite'),\n },\n addChooser: getDataSelector('action', 'add-chooser-option'),\n closeOption: getDataSelector('action', 'close-chooser-option-summary'),\n hide: getDataSelector('action', 'hide'),\n search: getDataSelector('action', 'search'),\n clearSearch: getDataSelector('action', 'clearsearch'),\n },\n render: {\n favourites: getDataSelector('render', 'favourites-area'),\n },\n elements: {\n section: '.section',\n sectionmodchooser: 'button.section-modchooser-link',\n sitemenu: '.block_site_main_menu',\n sitetopic: 'div.sitetopic',\n tab: 'a[data-toggle=\"tab\"]',\n activetab: 'a[data-toggle=\"tab\"][aria-selected=\"true\"]',\n visibletabs: 'a[data-toggle=\"tab\"]:not(.d-none)'\n },\n};\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/course/amd/src/actions.js b/course/amd/src/actions.js index a2eef2cb8e6..fa7f51ae2b0 100644 --- a/course/amd/src/actions.js +++ b/course/amd/src/actions.js @@ -17,7 +17,6 @@ * Various actions on modules and sections in the editing mode - hiding, duplicating, deleting, etc. * * @module core_course/actions - * @package core * @copyright 2016 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.3 diff --git a/course/amd/src/activitychooser.js b/course/amd/src/activitychooser.js index ab56979778f..49abbc41334 100644 --- a/course/amd/src/activitychooser.js +++ b/course/amd/src/activitychooser.js @@ -17,7 +17,6 @@ * A type of dialogue used as for choosing modules in a course. * * @module core_course/activitychooser - * @package core_course * @copyright 2020 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/course/amd/src/copy_modal.js b/course/amd/src/copy_modal.js index dc1644c5977..56c273371ee 100644 --- a/course/amd/src/copy_modal.js +++ b/course/amd/src/copy_modal.js @@ -18,7 +18,6 @@ * category management screen. * * @module course - * @package core * @copyright 2020 onward The Moodle Users Association * @author Matt Porritt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/course/amd/src/downloadcontent.js b/course/amd/src/downloadcontent.js index 2c5899ab875..c19006e7597 100644 --- a/course/amd/src/downloadcontent.js +++ b/course/amd/src/downloadcontent.js @@ -17,7 +17,6 @@ * Functions related to downloading course content. * * @module core_course/downloadcontent - * @package core_course * @copyright 2020 Michael Hawkins * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/course/amd/src/events.js b/course/amd/src/events.js index 7609702c34a..75f4cd78170 100644 --- a/course/amd/src/events.js +++ b/course/amd/src/events.js @@ -17,7 +17,6 @@ * Contain the events the course component can trigger. * * @module core_course/events - * @package core_course * @copyright 2018 Simey Lameze * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/course/amd/src/local/activitychooser/dialogue.js b/course/amd/src/local/activitychooser/dialogue.js index a7c701824ab..688c2a4922c 100644 --- a/course/amd/src/local/activitychooser/dialogue.js +++ b/course/amd/src/local/activitychooser/dialogue.js @@ -17,7 +17,6 @@ * A type of dialogue used as for choosing options. * * @module core_course/local/chooser/dialogue - * @package core * @copyright 2019 Mihail Geshoski * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/course/amd/src/local/activitychooser/repository.js b/course/amd/src/local/activitychooser/repository.js index 43de8c19681..519357af63a 100644 --- a/course/amd/src/local/activitychooser/repository.js +++ b/course/amd/src/local/activitychooser/repository.js @@ -16,7 +16,6 @@ /** * * @module core_course/repository - * @package core_course * @copyright 2019 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/course/amd/src/local/activitychooser/selectors.js b/course/amd/src/local/activitychooser/selectors.js index 34e9adb112f..ceedc44a9ac 100644 --- a/course/amd/src/local/activitychooser/selectors.js +++ b/course/amd/src/local/activitychooser/selectors.js @@ -17,7 +17,6 @@ * Define all of the selectors we will be using on the grading interface. * * @module core_course/local/chooser/selectors - * @package core_course * @copyright 2019 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/customfield/amd/build/form.min.js.map b/customfield/amd/build/form.min.js.map index fb1d01906e0..f967275ac40 100644 --- a/customfield/amd/build/form.min.js.map +++ b/customfield/amd/build/form.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form.js"],"names":["define","$","Str","Notification","Ajax","Templates","SortableList","Pending","confirmDelete","id","type","component","area","itemid","pendingPromise","get_strings","then","s","confirm","pendingDeletePromise","func","call","methodname","args","response","render","html","js","replaceNode","resolve","catch","exception","createNewCategory","promises","categoryid","window","location","href","Promise","all","init","mainlist","attr","on","e","preventDefault","categoryName","element","closest","find","sortCat","moveHandlerSelector","getElementName","el","Deferred","evt","info","positionChanged","data","beforeid","targetNextElement","stopPropagation","sort","getDestinationName","parentElement","afterElement","length","get_string","targetList","children","each","fields","nofields","append","remove","setTimeout","width"],"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 .\n\n/**\n * This module depends on the real jquery - and returns the non-global version of it.\n *\n * @module core_customfield/form\n * @package core_customfield\n * @copyright 2018 Toni Barbera\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/sortable_list',\n 'core/pending',\n 'core/inplace_editable',\n], function($, Str, Notification, Ajax, Templates, SortableList, Pending) {\n\n /**\n * Display confirmation dialogue\n *\n * @param {Number} id\n * @param {String} type\n * @param {String} component\n * @param {String} area\n * @param {Number} itemid\n */\n var confirmDelete = function(id, type, component, area, itemid) {\n var pendingPromise = new Pending('core_customfield/form:confirmDelete');\n Str.get_strings([\n {'key': 'confirm'},\n {'key': 'confirmdelete' + type, component: 'core_customfield'},\n {'key': 'yes'},\n {'key': 'no'},\n ])\n .then(function(s) {\n Notification.confirm(s[0], s[1], s[2], s[3], function() {\n var pendingDeletePromise = new Pending('core_customfield/form:confirmDelete');\n var func = (type === 'field') ? 'core_customfield_delete_field' : 'core_customfield_delete_category';\n Ajax.call([\n {methodname: func, args: {id: id}},\n {methodname: 'core_customfield_reload_template', args: {component: component, area: area, itemid: itemid}}\n ])[1]\n .then(function(response) {\n return Templates.render('core_customfield/list', response);\n })\n .then(function(html, js) {\n Templates.replaceNode($('[data-region=\"list-page\"]'), html, js);\n return null;\n })\n .then(pendingDeletePromise.resolve)\n .catch(Notification.exception);\n });\n\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n };\n\n /**\n * Creates a new custom fields category with default name and updates the list\n *\n * @param {String} component\n * @param {String} area\n * @param {Number} itemid\n */\n var createNewCategory = function(component, area, itemid) {\n var pendingPromise = new Pending('core_customfield/form:confirmDelete');\n var promises = Ajax.call([\n {methodname: 'core_customfield_create_category', args: {component: component, area: area, itemid: itemid}},\n {methodname: 'core_customfield_reload_template', args: {component: component, area: area, itemid: itemid}}\n ]);\n var categoryid;\n\n promises[0].then(function(response) {\n categoryid = response;\n return null;\n }).catch(Notification.exception);\n\n promises[1].then(function(response) {\n return Templates.render('core_customfield/list', response);\n })\n .then(function(html, js) {\n Templates.replaceNode($('[data-region=\"list-page\"]'), html, js);\n window.location.href = '#category-' + categoryid;\n return null;\n })\n .catch(Notification.exception);\n\n Promise.all(promises)\n .then(pendingPromise.resolve)\n .catch();\n };\n\n return {\n /**\n * Initialise the custom fields manager\n */\n init: function() {\n var mainlist = $('#customfield_catlist');\n var component = mainlist.attr('data-component');\n var area = mainlist.attr('data-area');\n var itemid = mainlist.attr('data-itemid');\n\n $(\"[data-role=deletefield]\").on('click', function(e) {\n confirmDelete($(this).attr('data-id'), 'field', component, area, itemid);\n e.preventDefault();\n });\n\n $(\"[data-role=deletecategory]\").on('click', function(e) {\n confirmDelete($(this).attr('data-id'), 'category', component, area, itemid);\n e.preventDefault();\n });\n\n $('[data-role=addnewcategory]').on('click', function() {\n createNewCategory(component, area, itemid);\n });\n\n var categoryName = function(element) {\n return element\n .closest('[data-category-id]')\n .find('[data-inplaceeditable][data-itemtype=category][data-component=core_customfield]')\n .attr('data-value');\n };\n\n // Sort category.\n var sortCat = new SortableList(\n $('#customfield_catlist .categorieslist'),\n {moveHandlerSelector: '.movecategory [data-drag-type=move]'}\n );\n\n sortCat.getElementName = function(el) {\n return $.Deferred().resolve(categoryName(el));\n };\n\n $('[data-category-id]').on('sortablelist-drop', function(evt, info) {\n if (info.positionChanged) {\n var pendingPromise = new Pending('core_customfield/form:categoryid:on:sortablelist-drop');\n Ajax.call([\n {\n methodname: 'core_customfield_move_category',\n args: {\n id: info.element.data('category-id'),\n beforeid: info.targetNextElement.data('category-id')\n }\n\n },\n ])[0]\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n }\n evt.stopPropagation(); // Important for nested lists to prevent multiple targets.\n });\n\n // Sort fields.\n var sort = new SortableList(\n $('#customfield_catlist .fieldslist tbody'),\n {moveHandlerSelector: '.movefield [data-drag-type=move]'}\n );\n\n sort.getDestinationName = function(parentElement, afterElement) {\n if (!afterElement.length) {\n return Str.get_string('totopofcategory', 'customfield', categoryName(parentElement));\n } else if (afterElement.attr('data-field-name')) {\n return Str.get_string('afterfield', 'customfield', afterElement.attr('data-field-name'));\n } else {\n return $.Deferred().resolve('');\n }\n };\n\n $('[data-field-name]').on('sortablelist-drop', function(evt, info) {\n evt.stopPropagation(); // Important for nested lists to prevent multiple targets.\n if (info.positionChanged) {\n var pendingPromise = new Pending('core_customfield/form:fieldname:on:sortablelist-drop');\n Ajax.call([\n {\n methodname: 'core_customfield_move_field',\n args: {\n id: info.element.data('field-id'),\n beforeid: info.targetNextElement.data('field-id'),\n categoryid: Number(info.targetList.closest('[data-category-id]').attr('data-category-id'))\n },\n },\n ])[0]\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n }\n });\n\n $('[data-field-name]').on('sortablelist-drag', function(evt) {\n var pendingPromise = new Pending('core_customfield/form:fieldname:on:sortablelist-drag');\n\n evt.stopPropagation(); // Important for nested lists to prevent multiple targets.\n\n // Refreshing fields tables.\n Str.get_string('therearenofields', 'core_customfield').then(function(s) {\n $('#customfield_catlist .categorieslist').children().each(function() {\n var fields = $(this).find($('.field')),\n nofields = $(this).find($('.nofields'));\n if (!fields.length && !nofields.length) {\n $(this).find('tbody').append(\n '' + s + ''\n );\n }\n if (fields.length && nofields.length) {\n nofields.remove();\n }\n });\n return null;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n $('[data-category-id], [data-field-name]').on('sortablelist-dragstart',\n function(evt, info) {\n setTimeout(function() {\n $('.sortable-list-is-dragged').width(info.element.width());\n }, 501);\n }\n );\n\n }\n };\n});\n"],"file":"form.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/form.js"],"names":["define","$","Str","Notification","Ajax","Templates","SortableList","Pending","confirmDelete","id","type","component","area","itemid","pendingPromise","get_strings","then","s","confirm","pendingDeletePromise","func","call","methodname","args","response","render","html","js","replaceNode","resolve","catch","exception","createNewCategory","promises","categoryid","window","location","href","Promise","all","init","mainlist","attr","on","e","preventDefault","categoryName","element","closest","find","sortCat","moveHandlerSelector","getElementName","el","Deferred","evt","info","positionChanged","data","beforeid","targetNextElement","stopPropagation","sort","getDestinationName","parentElement","afterElement","length","get_string","targetList","children","each","fields","nofields","append","remove","setTimeout","width"],"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 .\n\n/**\n * This module depends on the real jquery - and returns the non-global version of it.\n *\n * @module core_customfield/form\n * @copyright 2018 Toni Barbera\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/ajax',\n 'core/templates',\n 'core/sortable_list',\n 'core/pending',\n 'core/inplace_editable',\n], function($, Str, Notification, Ajax, Templates, SortableList, Pending) {\n\n /**\n * Display confirmation dialogue\n *\n * @param {Number} id\n * @param {String} type\n * @param {String} component\n * @param {String} area\n * @param {Number} itemid\n */\n var confirmDelete = function(id, type, component, area, itemid) {\n var pendingPromise = new Pending('core_customfield/form:confirmDelete');\n Str.get_strings([\n {'key': 'confirm'},\n {'key': 'confirmdelete' + type, component: 'core_customfield'},\n {'key': 'yes'},\n {'key': 'no'},\n ])\n .then(function(s) {\n Notification.confirm(s[0], s[1], s[2], s[3], function() {\n var pendingDeletePromise = new Pending('core_customfield/form:confirmDelete');\n var func = (type === 'field') ? 'core_customfield_delete_field' : 'core_customfield_delete_category';\n Ajax.call([\n {methodname: func, args: {id: id}},\n {methodname: 'core_customfield_reload_template', args: {component: component, area: area, itemid: itemid}}\n ])[1]\n .then(function(response) {\n return Templates.render('core_customfield/list', response);\n })\n .then(function(html, js) {\n Templates.replaceNode($('[data-region=\"list-page\"]'), html, js);\n return null;\n })\n .then(pendingDeletePromise.resolve)\n .catch(Notification.exception);\n });\n\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n };\n\n /**\n * Creates a new custom fields category with default name and updates the list\n *\n * @param {String} component\n * @param {String} area\n * @param {Number} itemid\n */\n var createNewCategory = function(component, area, itemid) {\n var pendingPromise = new Pending('core_customfield/form:confirmDelete');\n var promises = Ajax.call([\n {methodname: 'core_customfield_create_category', args: {component: component, area: area, itemid: itemid}},\n {methodname: 'core_customfield_reload_template', args: {component: component, area: area, itemid: itemid}}\n ]);\n var categoryid;\n\n promises[0].then(function(response) {\n categoryid = response;\n return null;\n }).catch(Notification.exception);\n\n promises[1].then(function(response) {\n return Templates.render('core_customfield/list', response);\n })\n .then(function(html, js) {\n Templates.replaceNode($('[data-region=\"list-page\"]'), html, js);\n window.location.href = '#category-' + categoryid;\n return null;\n })\n .catch(Notification.exception);\n\n Promise.all(promises)\n .then(pendingPromise.resolve)\n .catch();\n };\n\n return {\n /**\n * Initialise the custom fields manager\n */\n init: function() {\n var mainlist = $('#customfield_catlist');\n var component = mainlist.attr('data-component');\n var area = mainlist.attr('data-area');\n var itemid = mainlist.attr('data-itemid');\n\n $(\"[data-role=deletefield]\").on('click', function(e) {\n confirmDelete($(this).attr('data-id'), 'field', component, area, itemid);\n e.preventDefault();\n });\n\n $(\"[data-role=deletecategory]\").on('click', function(e) {\n confirmDelete($(this).attr('data-id'), 'category', component, area, itemid);\n e.preventDefault();\n });\n\n $('[data-role=addnewcategory]').on('click', function() {\n createNewCategory(component, area, itemid);\n });\n\n var categoryName = function(element) {\n return element\n .closest('[data-category-id]')\n .find('[data-inplaceeditable][data-itemtype=category][data-component=core_customfield]')\n .attr('data-value');\n };\n\n // Sort category.\n var sortCat = new SortableList(\n $('#customfield_catlist .categorieslist'),\n {moveHandlerSelector: '.movecategory [data-drag-type=move]'}\n );\n\n sortCat.getElementName = function(el) {\n return $.Deferred().resolve(categoryName(el));\n };\n\n $('[data-category-id]').on('sortablelist-drop', function(evt, info) {\n if (info.positionChanged) {\n var pendingPromise = new Pending('core_customfield/form:categoryid:on:sortablelist-drop');\n Ajax.call([\n {\n methodname: 'core_customfield_move_category',\n args: {\n id: info.element.data('category-id'),\n beforeid: info.targetNextElement.data('category-id')\n }\n\n },\n ])[0]\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n }\n evt.stopPropagation(); // Important for nested lists to prevent multiple targets.\n });\n\n // Sort fields.\n var sort = new SortableList(\n $('#customfield_catlist .fieldslist tbody'),\n {moveHandlerSelector: '.movefield [data-drag-type=move]'}\n );\n\n sort.getDestinationName = function(parentElement, afterElement) {\n if (!afterElement.length) {\n return Str.get_string('totopofcategory', 'customfield', categoryName(parentElement));\n } else if (afterElement.attr('data-field-name')) {\n return Str.get_string('afterfield', 'customfield', afterElement.attr('data-field-name'));\n } else {\n return $.Deferred().resolve('');\n }\n };\n\n $('[data-field-name]').on('sortablelist-drop', function(evt, info) {\n evt.stopPropagation(); // Important for nested lists to prevent multiple targets.\n if (info.positionChanged) {\n var pendingPromise = new Pending('core_customfield/form:fieldname:on:sortablelist-drop');\n Ajax.call([\n {\n methodname: 'core_customfield_move_field',\n args: {\n id: info.element.data('field-id'),\n beforeid: info.targetNextElement.data('field-id'),\n categoryid: Number(info.targetList.closest('[data-category-id]').attr('data-category-id'))\n },\n },\n ])[0]\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n }\n });\n\n $('[data-field-name]').on('sortablelist-drag', function(evt) {\n var pendingPromise = new Pending('core_customfield/form:fieldname:on:sortablelist-drag');\n\n evt.stopPropagation(); // Important for nested lists to prevent multiple targets.\n\n // Refreshing fields tables.\n Str.get_string('therearenofields', 'core_customfield').then(function(s) {\n $('#customfield_catlist .categorieslist').children().each(function() {\n var fields = $(this).find($('.field')),\n nofields = $(this).find($('.nofields'));\n if (!fields.length && !nofields.length) {\n $(this).find('tbody').append(\n '' + s + ''\n );\n }\n if (fields.length && nofields.length) {\n nofields.remove();\n }\n });\n return null;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n $('[data-category-id], [data-field-name]').on('sortablelist-dragstart',\n function(evt, info) {\n setTimeout(function() {\n $('.sortable-list-is-dragged').width(info.element.width());\n }, 501);\n }\n );\n\n }\n };\n});\n"],"file":"form.min.js"} \ No newline at end of file diff --git a/customfield/amd/src/form.js b/customfield/amd/src/form.js index 9825728ebfe..d8c38115140 100644 --- a/customfield/amd/src/form.js +++ b/customfield/amd/src/form.js @@ -17,7 +17,6 @@ * This module depends on the real jquery - and returns the non-global version of it. * * @module core_customfield/form - * @package core_customfield * @copyright 2018 Toni Barbera * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/enrol/manual/amd/build/form-potential-user-selector.min.js.map b/enrol/manual/amd/build/form-potential-user-selector.min.js.map index 3f9f5baa2cd..39ea1b4a585 100644 --- a/enrol/manual/amd/build/form-potential-user-selector.min.js.map +++ b/enrol/manual/amd/build/form-potential-user-selector.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form-potential-user-selector.js"],"names":["define","$","Ajax","Templates","Str","processResults","selector","results","users","isArray","each","index","user","push","value","id","label","_label","transport","query","success","failure","promise","courseid","attr","userfields","split","enrolid","perpage","parseInt","isNaN","call","methodname","args","search","searchanywhere","page","then","promises","i","length","ctx","identity","k","hasidentity","join","render","when","apply","arguments","get_string","toomanyuserstoshow","fail"],"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 .\n\n/**\n * Potential user selector module.\n *\n * @module enrol_manual/form-potential-user-selector\n * @class form-potential-user-selector\n * @package enrol_manual\n * @copyright 2016 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates', 'core/str'], function($, Ajax, Templates, Str) {\n\n return /** @alias module:enrol_manual/form-potential-user-selector */ {\n\n processResults: function(selector, results) {\n var users = [];\n if ($.isArray(results)) {\n $.each(results, function(index, user) {\n users.push({\n value: user.id,\n label: user._label\n });\n });\n return users;\n\n } else {\n return results;\n }\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n var courseid = $(selector).attr('courseid');\n var userfields = $(selector).attr('userfields').split(',');\n if (typeof courseid === \"undefined\") {\n courseid = '1';\n }\n var enrolid = $(selector).attr('enrolid');\n if (typeof enrolid === \"undefined\") {\n enrolid = '';\n }\n var perpage = parseInt($(selector).attr('perpage'));\n if (isNaN(perpage)) {\n perpage = 100;\n }\n\n promise = Ajax.call([{\n methodname: 'core_enrol_get_potential_users',\n args: {\n courseid: courseid,\n enrolid: enrolid,\n search: query,\n searchanywhere: true,\n page: 0,\n perpage: perpage + 1\n }\n }]);\n\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n if (results.length <= perpage) {\n // Render the label.\n $.each(results, function(index, user) {\n var ctx = user,\n identity = [];\n $.each(userfields, function(i, k) {\n if (typeof user[k] !== 'undefined' && user[k] !== '') {\n ctx.hasidentity = true;\n identity.push(user[k]);\n }\n });\n ctx.identity = identity.join(', ');\n promises.push(Templates.render('enrol_manual/form-user-selector-suggestion', ctx));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results, function(index, user) {\n user._label = args[i];\n i++;\n });\n success(results);\n return;\n });\n\n } else {\n return Str.get_string('toomanyuserstoshow', 'core', '>' + perpage).then(function(toomanyuserstoshow) {\n success(toomanyuserstoshow);\n return;\n });\n }\n\n }).fail(failure);\n }\n\n };\n\n});\n"],"file":"form-potential-user-selector.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/form-potential-user-selector.js"],"names":["define","$","Ajax","Templates","Str","processResults","selector","results","users","isArray","each","index","user","push","value","id","label","_label","transport","query","success","failure","promise","courseid","attr","userfields","split","enrolid","perpage","parseInt","isNaN","call","methodname","args","search","searchanywhere","page","then","promises","i","length","ctx","identity","k","hasidentity","join","render","when","apply","arguments","get_string","toomanyuserstoshow","fail"],"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 .\n\n/**\n * Potential user selector module.\n *\n * @module enrol_manual/form-potential-user-selector\n * @class form-potential-user-selector\n * @copyright 2016 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/ajax', 'core/templates', 'core/str'], function($, Ajax, Templates, Str) {\n\n return /** @alias module:enrol_manual/form-potential-user-selector */ {\n\n processResults: function(selector, results) {\n var users = [];\n if ($.isArray(results)) {\n $.each(results, function(index, user) {\n users.push({\n value: user.id,\n label: user._label\n });\n });\n return users;\n\n } else {\n return results;\n }\n },\n\n transport: function(selector, query, success, failure) {\n var promise;\n var courseid = $(selector).attr('courseid');\n var userfields = $(selector).attr('userfields').split(',');\n if (typeof courseid === \"undefined\") {\n courseid = '1';\n }\n var enrolid = $(selector).attr('enrolid');\n if (typeof enrolid === \"undefined\") {\n enrolid = '';\n }\n var perpage = parseInt($(selector).attr('perpage'));\n if (isNaN(perpage)) {\n perpage = 100;\n }\n\n promise = Ajax.call([{\n methodname: 'core_enrol_get_potential_users',\n args: {\n courseid: courseid,\n enrolid: enrolid,\n search: query,\n searchanywhere: true,\n page: 0,\n perpage: perpage + 1\n }\n }]);\n\n promise[0].then(function(results) {\n var promises = [],\n i = 0;\n\n if (results.length <= perpage) {\n // Render the label.\n $.each(results, function(index, user) {\n var ctx = user,\n identity = [];\n $.each(userfields, function(i, k) {\n if (typeof user[k] !== 'undefined' && user[k] !== '') {\n ctx.hasidentity = true;\n identity.push(user[k]);\n }\n });\n ctx.identity = identity.join(', ');\n promises.push(Templates.render('enrol_manual/form-user-selector-suggestion', ctx));\n });\n\n // Apply the label to the results.\n return $.when.apply($.when, promises).then(function() {\n var args = arguments;\n $.each(results, function(index, user) {\n user._label = args[i];\n i++;\n });\n success(results);\n return;\n });\n\n } else {\n return Str.get_string('toomanyuserstoshow', 'core', '>' + perpage).then(function(toomanyuserstoshow) {\n success(toomanyuserstoshow);\n return;\n });\n }\n\n }).fail(failure);\n }\n\n };\n\n});\n"],"file":"form-potential-user-selector.min.js"} \ No newline at end of file diff --git a/enrol/manual/amd/src/form-potential-user-selector.js b/enrol/manual/amd/src/form-potential-user-selector.js index c2e53d82fd5..b9a270cc8fe 100644 --- a/enrol/manual/amd/src/form-potential-user-selector.js +++ b/enrol/manual/amd/src/form-potential-user-selector.js @@ -18,7 +18,6 @@ * * @module enrol_manual/form-potential-user-selector * @class form-potential-user-selector - * @package enrol_manual * @copyright 2016 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/amd/build/edittree_index.min.js.map b/grade/amd/build/edittree_index.min.js.map index 26c6df9e44e..3aadf04d046 100644 --- a/grade/amd/build/edittree_index.min.js.map +++ b/grade/amd/build/edittree_index.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/edittree_index.js"],"names":["define","$","edittree","on","toggleWeightInput","form","closest","bulkmove","find","val","submit","e","preventDefault","node","row","data","prop","enhance"],"mappings":"AAuBAA,OAAM,8BAAC,CACH,QADG,CAAD,CAEH,SAASC,CAAT,CAAY,CAMX,GAAIC,CAAAA,CAAQ,CAAG,UAAW,CAEtBD,CAAC,CAAC,MAAD,CAAD,CAAUE,EAAV,CAAa,QAAb,CAAuB,iBAAvB,CAA0CD,CAAQ,CAACE,iBAAnD,EAGAH,CAAC,CAAC,gBAAD,CAAD,CAAoBE,EAApB,CAAuB,QAAvB,CAAiC,UAAW,CACxC,GAAIE,CAAAA,CAAI,CAAGJ,CAAC,CAAC,IAAD,CAAD,CAAQK,OAAR,CAAgB,MAAhB,CAAX,CACIC,CAAQ,CAAGF,CAAI,CAACG,IAAL,CAAU,gBAAV,CADf,CAGAD,CAAQ,CAACE,GAAT,CAAa,CAAb,EACAJ,CAAI,CAACK,MAAL,EACH,CAND,CAOH,CAZD,CAqBAR,CAAQ,CAACE,iBAAT,CAA6B,SAASO,CAAT,CAAY,CACrCA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAI,CAAGZ,CAAC,CAAC,IAAD,CAAZ,CACIa,CAAG,CAAGD,CAAI,CAACP,OAAL,CAAa,IAAb,CADV,CAGAL,CAAC,CAAC,uBAAwBa,CAAG,CAACC,IAAJ,CAAS,QAAT,CAAxB,CAA6C,KAA9C,CAAD,CAAqDC,IAArD,CAA0D,UAA1D,CAAsE,CAACH,CAAI,CAACG,IAAL,CAAU,SAAV,CAAvE,CACH,CAND,CAQA,MAAuD,CACnDC,OAAO,CAAEf,CAD0C,CAG1D,CAxCK,CAAN","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 .\n\n/**\n * Enhance the gradebook tree setup with various facilities.\n *\n * @module core_grades/edittree_index\n * @package core_grades\n * @copyright 2016 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n], function($) {\n /**\n * Enhance the edittree functionality.\n *\n * @method edittree\n */\n var edittree = function() {\n // Watch for the weight override checkboxes.\n $('body').on('change', '.weightoverride', edittree.toggleWeightInput);\n\n // Watch changes to the bulk move menu and submit.\n $('#menumoveafter').on('change', function() {\n var form = $(this).closest('form'),\n bulkmove = form.find('#bulkmoveinput');\n\n bulkmove.val(1);\n form.submit();\n });\n };\n\n /**\n * Toggle the weight input field based on its checkbox.\n *\n * @method toggleWeightInput\n * @param {EventFacade} e\n * @private\n */\n edittree.toggleWeightInput = function(e) {\n e.preventDefault();\n var node = $(this),\n row = node.closest('tr');\n\n $('input[name=\"weight_' + row.data('itemid') + '\"]').prop('disabled', !node.prop('checked'));\n };\n\n return /** @alias module:core_grades/edittree_index */ {\n enhance: edittree\n };\n});\n"],"file":"edittree_index.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/edittree_index.js"],"names":["define","$","edittree","on","toggleWeightInput","form","closest","bulkmove","find","val","submit","e","preventDefault","node","row","data","prop","enhance"],"mappings":"AAsBAA,OAAM,8BAAC,CACH,QADG,CAAD,CAEH,SAASC,CAAT,CAAY,CAMX,GAAIC,CAAAA,CAAQ,CAAG,UAAW,CAEtBD,CAAC,CAAC,MAAD,CAAD,CAAUE,EAAV,CAAa,QAAb,CAAuB,iBAAvB,CAA0CD,CAAQ,CAACE,iBAAnD,EAGAH,CAAC,CAAC,gBAAD,CAAD,CAAoBE,EAApB,CAAuB,QAAvB,CAAiC,UAAW,CACxC,GAAIE,CAAAA,CAAI,CAAGJ,CAAC,CAAC,IAAD,CAAD,CAAQK,OAAR,CAAgB,MAAhB,CAAX,CACIC,CAAQ,CAAGF,CAAI,CAACG,IAAL,CAAU,gBAAV,CADf,CAGAD,CAAQ,CAACE,GAAT,CAAa,CAAb,EACAJ,CAAI,CAACK,MAAL,EACH,CAND,CAOH,CAZD,CAqBAR,CAAQ,CAACE,iBAAT,CAA6B,SAASO,CAAT,CAAY,CACrCA,CAAC,CAACC,cAAF,GACA,GAAIC,CAAAA,CAAI,CAAGZ,CAAC,CAAC,IAAD,CAAZ,CACIa,CAAG,CAAGD,CAAI,CAACP,OAAL,CAAa,IAAb,CADV,CAGAL,CAAC,CAAC,uBAAwBa,CAAG,CAACC,IAAJ,CAAS,QAAT,CAAxB,CAA6C,KAA9C,CAAD,CAAqDC,IAArD,CAA0D,UAA1D,CAAsE,CAACH,CAAI,CAACG,IAAL,CAAU,SAAV,CAAvE,CACH,CAND,CAQA,MAAuD,CACnDC,OAAO,CAAEf,CAD0C,CAG1D,CAxCK,CAAN","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 .\n\n/**\n * Enhance the gradebook tree setup with various facilities.\n *\n * @module core_grades/edittree_index\n * @copyright 2016 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n], function($) {\n /**\n * Enhance the edittree functionality.\n *\n * @method edittree\n */\n var edittree = function() {\n // Watch for the weight override checkboxes.\n $('body').on('change', '.weightoverride', edittree.toggleWeightInput);\n\n // Watch changes to the bulk move menu and submit.\n $('#menumoveafter').on('change', function() {\n var form = $(this).closest('form'),\n bulkmove = form.find('#bulkmoveinput');\n\n bulkmove.val(1);\n form.submit();\n });\n };\n\n /**\n * Toggle the weight input field based on its checkbox.\n *\n * @method toggleWeightInput\n * @param {EventFacade} e\n * @private\n */\n edittree.toggleWeightInput = function(e) {\n e.preventDefault();\n var node = $(this),\n row = node.closest('tr');\n\n $('input[name=\"weight_' + row.data('itemid') + '\"]').prop('disabled', !node.prop('checked'));\n };\n\n return /** @alias module:core_grades/edittree_index */ {\n enhance: edittree\n };\n});\n"],"file":"edittree_index.min.js"} \ No newline at end of file diff --git a/grade/amd/build/grades/grader/gradingpanel/comparison.min.js.map b/grade/amd/build/grades/grader/gradingpanel/comparison.min.js.map index 0f76f2eff8b..072cfbd8578 100644 --- a/grade/amd/build/grades/grader/gradingpanel/comparison.min.js.map +++ b/grade/amd/build/grades/grader/gradingpanel/comparison.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/comparison.js"],"names":["fillInitialValues","form","Array","prototype","forEach","call","elements","input","type","dataset","initialValue","JSON","stringify","checked","value","options","option","selected","compareData","result","some"],"mappings":"2LAwBO,GAAMA,CAAAA,CAAiB,CAAG,SAACC,CAAD,CAAU,CACvCC,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BJ,CAAI,CAACK,QAAlC,CAA4C,SAACC,CAAD,CAAW,CACnD,GAAmB,QAAf,GAAAA,CAAK,CAACC,IAAN,EAA0C,QAAf,GAAAD,CAAK,CAACC,IAArC,CAAwD,CAEvD,CAFD,IAEO,IAAmB,OAAf,GAAAD,CAAK,CAACC,IAAN,EAAyC,UAAf,GAAAD,CAAK,CAACC,IAApC,CAAyD,CAC5DD,CAAK,CAACE,OAAN,CAAcC,YAAd,CAA6BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACM,OAArB,CAChC,CAFM,IAEA,IAA2B,WAAvB,QAAON,CAAAA,CAAK,CAACO,KAAjB,CAAwC,CAC3CP,CAAK,CAACE,OAAN,CAAcC,YAAd,CAA6BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACO,KAArB,CAChC,CAFM,IAEA,IAAmB,YAAf,GAAAP,CAAK,CAACC,IAAV,CAAiC,CACpCN,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BE,CAAK,CAACQ,OAAnC,CAA4C,SAACC,CAAD,CAAY,CACpDA,CAAM,CAACP,OAAP,CAAeC,YAAf,CAA8BC,IAAI,CAACC,SAAL,CAAeI,CAAM,CAACC,QAAtB,CACjC,CAFD,CAGH,CACL,CAZA,CAaH,CAdM,C,oCAyBoB,QAAdC,CAAAA,WAAc,CAACjB,CAAD,CAAU,CACjC,GAAMkB,CAAAA,CAAM,CAAGjB,KAAK,CAACC,SAAN,CAAgBiB,IAAhB,CAAqBf,IAArB,CAA0BJ,CAAI,CAACK,QAA/B,CAAyC,SAACC,CAAD,CAAW,CAC/D,GAAmB,QAAf,GAAAA,CAAK,CAACC,IAAN,EAA0C,QAAf,GAAAD,CAAK,CAACC,IAArC,CAAwD,CACpD,QACH,CAFD,IAEO,IAAmB,OAAf,GAAAD,CAAK,CAACC,IAAN,EAAyC,UAAf,GAAAD,CAAK,CAACC,IAApC,CAAyD,CAC5D,GAA0C,WAAtC,QAAOD,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAzB,CAAuD,CACnD,MAAOH,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAd,GAA+BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACM,OAArB,CACzC,CACJ,CAJM,IAIA,IAA2B,WAAvB,QAAON,CAAAA,CAAK,CAACO,KAAjB,CAAwC,CAC3C,GAA0C,WAAtC,QAAOP,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAzB,CAAuD,CACnD,MAAOH,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAd,GAA+BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACO,KAArB,CACzC,CACJ,CAJM,IAIA,IAAmB,YAAf,GAAAP,CAAK,CAACC,IAAV,CAAiC,CACpC,MAAON,CAAAA,KAAK,CAACC,SAAN,CAAgBiB,IAAhB,CAAqBf,IAArB,CAA0BE,CAAK,CAACQ,OAAhC,CAAyC,SAACC,CAAD,CAAY,CACxD,GAA2C,WAAvC,QAAOA,CAAAA,CAAM,CAACP,OAAP,CAAeC,YAA1B,CAAwD,CACpD,MAAOM,CAAAA,CAAM,CAACP,OAAP,CAAeC,YAAf,GAAgCC,IAAI,CAACC,SAAL,CAAeI,CAAM,CAACC,QAAtB,CAC1C,CAED,QACH,CANM,CAOV,CAGD,QACH,CAvBc,CAAf,CA0BAjB,CAAiB,CAACC,CAAD,CAAjB,CAEA,MAAOkB,CAAAA,CACV,C","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 .\n\n/**\n * Compare a given form's values and its previously set data attributes.\n *\n * @module core_grades/grades/grader/gradingpanel/comparison\n * @package core_grades\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nexport const fillInitialValues = (form) => {\n Array.prototype.forEach.call(form.elements, (input) => {\n if (input.type === 'submit' || input.type === 'button') {\n return;\n } else if (input.type === 'radio' || input.type === 'checkbox') {\n input.dataset.initialValue = JSON.stringify(input.checked);\n } else if (typeof input.value !== 'undefined') {\n input.dataset.initialValue = JSON.stringify(input.value);\n } else if (input.type === 'select-one') {\n Array.prototype.forEach.call(input.options, (option) => {\n option.dataset.initialValue = JSON.stringify(option.selected);\n });\n }\n });\n};\n\n\n/**\n * Compare the form data with the initial form data from when the form was set up.\n *\n * If values have changed, return a truthy value.\n *\n * @param {HTMLElement} form\n * @return {Boolean}\n */\nexport const compareData = (form) => {\n const result = Array.prototype.some.call(form.elements, (input) => {\n if (input.type === 'submit' || input.type === 'button') {\n return false;\n } else if (input.type === 'radio' || input.type === 'checkbox') {\n if (typeof input.dataset.initialValue !== 'undefined') {\n return input.dataset.initialValue !== JSON.stringify(input.checked);\n }\n } else if (typeof input.value !== 'undefined') {\n if (typeof input.dataset.initialValue !== 'undefined') {\n return input.dataset.initialValue !== JSON.stringify(input.value);\n }\n } else if (input.type === 'select-one') {\n return Array.prototype.some.call(input.options, (option) => {\n if (typeof option.dataset.initialValue !== 'undefined') {\n return option.dataset.initialValue !== JSON.stringify(option.selected);\n }\n\n return false;\n });\n }\n\n // No value found to check. Assume that there were changes.\n return true;\n });\n\n // Fill the initial values again as the form may not be reloaded.\n fillInitialValues(form);\n\n return result;\n};\n"],"file":"comparison.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/comparison.js"],"names":["fillInitialValues","form","Array","prototype","forEach","call","elements","input","type","dataset","initialValue","JSON","stringify","checked","value","options","option","selected","compareData","result","some"],"mappings":"2LAuBO,GAAMA,CAAAA,CAAiB,CAAG,SAACC,CAAD,CAAU,CACvCC,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BJ,CAAI,CAACK,QAAlC,CAA4C,SAACC,CAAD,CAAW,CACnD,GAAmB,QAAf,GAAAA,CAAK,CAACC,IAAN,EAA0C,QAAf,GAAAD,CAAK,CAACC,IAArC,CAAwD,CAEvD,CAFD,IAEO,IAAmB,OAAf,GAAAD,CAAK,CAACC,IAAN,EAAyC,UAAf,GAAAD,CAAK,CAACC,IAApC,CAAyD,CAC5DD,CAAK,CAACE,OAAN,CAAcC,YAAd,CAA6BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACM,OAArB,CAChC,CAFM,IAEA,IAA2B,WAAvB,QAAON,CAAAA,CAAK,CAACO,KAAjB,CAAwC,CAC3CP,CAAK,CAACE,OAAN,CAAcC,YAAd,CAA6BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACO,KAArB,CAChC,CAFM,IAEA,IAAmB,YAAf,GAAAP,CAAK,CAACC,IAAV,CAAiC,CACpCN,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BE,CAAK,CAACQ,OAAnC,CAA4C,SAACC,CAAD,CAAY,CACpDA,CAAM,CAACP,OAAP,CAAeC,YAAf,CAA8BC,IAAI,CAACC,SAAL,CAAeI,CAAM,CAACC,QAAtB,CACjC,CAFD,CAGH,CACL,CAZA,CAaH,CAdM,C,oCAyBoB,QAAdC,CAAAA,WAAc,CAACjB,CAAD,CAAU,CACjC,GAAMkB,CAAAA,CAAM,CAAGjB,KAAK,CAACC,SAAN,CAAgBiB,IAAhB,CAAqBf,IAArB,CAA0BJ,CAAI,CAACK,QAA/B,CAAyC,SAACC,CAAD,CAAW,CAC/D,GAAmB,QAAf,GAAAA,CAAK,CAACC,IAAN,EAA0C,QAAf,GAAAD,CAAK,CAACC,IAArC,CAAwD,CACpD,QACH,CAFD,IAEO,IAAmB,OAAf,GAAAD,CAAK,CAACC,IAAN,EAAyC,UAAf,GAAAD,CAAK,CAACC,IAApC,CAAyD,CAC5D,GAA0C,WAAtC,QAAOD,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAzB,CAAuD,CACnD,MAAOH,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAd,GAA+BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACM,OAArB,CACzC,CACJ,CAJM,IAIA,IAA2B,WAAvB,QAAON,CAAAA,CAAK,CAACO,KAAjB,CAAwC,CAC3C,GAA0C,WAAtC,QAAOP,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAzB,CAAuD,CACnD,MAAOH,CAAAA,CAAK,CAACE,OAAN,CAAcC,YAAd,GAA+BC,IAAI,CAACC,SAAL,CAAeL,CAAK,CAACO,KAArB,CACzC,CACJ,CAJM,IAIA,IAAmB,YAAf,GAAAP,CAAK,CAACC,IAAV,CAAiC,CACpC,MAAON,CAAAA,KAAK,CAACC,SAAN,CAAgBiB,IAAhB,CAAqBf,IAArB,CAA0BE,CAAK,CAACQ,OAAhC,CAAyC,SAACC,CAAD,CAAY,CACxD,GAA2C,WAAvC,QAAOA,CAAAA,CAAM,CAACP,OAAP,CAAeC,YAA1B,CAAwD,CACpD,MAAOM,CAAAA,CAAM,CAACP,OAAP,CAAeC,YAAf,GAAgCC,IAAI,CAACC,SAAL,CAAeI,CAAM,CAACC,QAAtB,CAC1C,CAED,QACH,CANM,CAOV,CAGD,QACH,CAvBc,CAAf,CA0BAjB,CAAiB,CAACC,CAAD,CAAjB,CAEA,MAAOkB,CAAAA,CACV,C","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 .\n\n/**\n * Compare a given form's values and its previously set data attributes.\n *\n * @module core_grades/grades/grader/gradingpanel/comparison\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nexport const fillInitialValues = (form) => {\n Array.prototype.forEach.call(form.elements, (input) => {\n if (input.type === 'submit' || input.type === 'button') {\n return;\n } else if (input.type === 'radio' || input.type === 'checkbox') {\n input.dataset.initialValue = JSON.stringify(input.checked);\n } else if (typeof input.value !== 'undefined') {\n input.dataset.initialValue = JSON.stringify(input.value);\n } else if (input.type === 'select-one') {\n Array.prototype.forEach.call(input.options, (option) => {\n option.dataset.initialValue = JSON.stringify(option.selected);\n });\n }\n });\n};\n\n\n/**\n * Compare the form data with the initial form data from when the form was set up.\n *\n * If values have changed, return a truthy value.\n *\n * @param {HTMLElement} form\n * @return {Boolean}\n */\nexport const compareData = (form) => {\n const result = Array.prototype.some.call(form.elements, (input) => {\n if (input.type === 'submit' || input.type === 'button') {\n return false;\n } else if (input.type === 'radio' || input.type === 'checkbox') {\n if (typeof input.dataset.initialValue !== 'undefined') {\n return input.dataset.initialValue !== JSON.stringify(input.checked);\n }\n } else if (typeof input.value !== 'undefined') {\n if (typeof input.dataset.initialValue !== 'undefined') {\n return input.dataset.initialValue !== JSON.stringify(input.value);\n }\n } else if (input.type === 'select-one') {\n return Array.prototype.some.call(input.options, (option) => {\n if (typeof option.dataset.initialValue !== 'undefined') {\n return option.dataset.initialValue !== JSON.stringify(option.selected);\n }\n\n return false;\n });\n }\n\n // No value found to check. Assume that there were changes.\n return true;\n });\n\n // Fill the initial values again as the form may not be reloaded.\n fillInitialValues(form);\n\n return result;\n};\n"],"file":"comparison.min.js"} \ No newline at end of file diff --git a/grade/amd/build/grades/grader/gradingpanel/normalise.min.js.map b/grade/amd/build/grades/grader/gradingpanel/normalise.min.js.map index 7b4f090ad1c..c9c090ba0ff 100644 --- a/grade/amd/build/grades/grader/gradingpanel/normalise.min.js.map +++ b/grade/amd/build/grades/grader/gradingpanel/normalise.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/normalise.js"],"names":["normaliseResult","result","failed","warnings","length","success","error","invalidResult","failedUpdate"],"mappings":"2NA8B+B,QAAlBA,CAAAA,eAAkB,CAAAC,CAAM,CAAI,CACrC,MAAO,CACHA,MAAM,CAANA,CADG,CAEHC,MAAM,CAAE,CAAC,CAACD,CAAM,CAACE,QAAP,CAAgBC,MAFvB,CAGHC,OAAO,CAAE,CAACJ,CAAM,CAACE,QAAP,CAAgBC,MAHvB,CAIHE,KAAK,CAAE,IAJJ,CAMV,C,iBAO4B,QAAhBC,CAAAA,aAAgB,EAAM,CAC/B,MAAO,CACHF,OAAO,GADJ,CAEHH,MAAM,GAFH,CAGHD,MAAM,CAAE,EAHL,CAIHK,KAAK,CAAE,IAJJ,CAMV,C,gBAQ2B,QAAfE,CAAAA,YAAe,CAAAF,CAAK,CAAI,CACjC,MAAO,CACHD,OAAO,GADJ,CAEHH,MAAM,GAFH,CAGHD,MAAM,CAAE,EAHL,CAIHK,KAAK,CAALA,CAJG,CAMV,C","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 .\n\n/**\n * Error handling and normalisation of provided data.\n *\n * @module core_grades/grades/grader/gradingpanel/normalise\n * @package core_grades\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Normalise a resultset for consumption by the grader.\n *\n * @param {Object} result The result returned from a grading web service\n * @return {Object}\n */\nexport const normaliseResult = result => {\n return {\n result,\n failed: !!result.warnings.length,\n success: !result.warnings.length,\n error: null,\n };\n};\n\n/**\n * Return the resultset used to describe an invalid result.\n *\n * @return {Object}\n */\nexport const invalidResult = () => {\n return {\n success: false,\n failed: false,\n result: {},\n error: null,\n };\n};\n\n/**\n * Return the resultset used to describe a failed update.\n *\n * @param {Object} error\n * @return {Object}\n */\nexport const failedUpdate = error => {\n return {\n success: false,\n failed: true,\n result: {},\n error,\n };\n};\n"],"file":"normalise.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/normalise.js"],"names":["normaliseResult","result","failed","warnings","length","success","error","invalidResult","failedUpdate"],"mappings":"2NA6B+B,QAAlBA,CAAAA,eAAkB,CAAAC,CAAM,CAAI,CACrC,MAAO,CACHA,MAAM,CAANA,CADG,CAEHC,MAAM,CAAE,CAAC,CAACD,CAAM,CAACE,QAAP,CAAgBC,MAFvB,CAGHC,OAAO,CAAE,CAACJ,CAAM,CAACE,QAAP,CAAgBC,MAHvB,CAIHE,KAAK,CAAE,IAJJ,CAMV,C,iBAO4B,QAAhBC,CAAAA,aAAgB,EAAM,CAC/B,MAAO,CACHF,OAAO,GADJ,CAEHH,MAAM,GAFH,CAGHD,MAAM,CAAE,EAHL,CAIHK,KAAK,CAAE,IAJJ,CAMV,C,gBAQ2B,QAAfE,CAAAA,YAAe,CAAAF,CAAK,CAAI,CACjC,MAAO,CACHD,OAAO,GADJ,CAEHH,MAAM,GAFH,CAGHD,MAAM,CAAE,EAHL,CAIHK,KAAK,CAALA,CAJG,CAMV,C","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 .\n\n/**\n * Error handling and normalisation of provided data.\n *\n * @module core_grades/grades/grader/gradingpanel/normalise\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * Normalise a resultset for consumption by the grader.\n *\n * @param {Object} result The result returned from a grading web service\n * @return {Object}\n */\nexport const normaliseResult = result => {\n return {\n result,\n failed: !!result.warnings.length,\n success: !result.warnings.length,\n error: null,\n };\n};\n\n/**\n * Return the resultset used to describe an invalid result.\n *\n * @return {Object}\n */\nexport const invalidResult = () => {\n return {\n success: false,\n failed: false,\n result: {},\n error: null,\n };\n};\n\n/**\n * Return the resultset used to describe a failed update.\n *\n * @param {Object} error\n * @return {Object}\n */\nexport const failedUpdate = error => {\n return {\n success: false,\n failed: true,\n result: {},\n error,\n };\n};\n"],"file":"normalise.min.js"} \ No newline at end of file diff --git a/grade/amd/build/grades/grader/gradingpanel/point.min.js.map b/grade/amd/build/grades/grader/gradingpanel/point.min.js.map index 4f3b718f3fb..8b38fb2f0c9 100644 --- a/grade/amd/build/grades/grader/gradingpanel/point.min.js.map +++ b/grade/amd/build/grades/grader/gradingpanel/point.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/point.js"],"names":["fetchCurrentGrade","storeCurrentGrade","component","context","itemname","userId","notifyUser","rootNode","form","querySelector","grade","checkValidity","value","trim","invalidResult","serialize"],"mappings":"8RA2BA,uD,mVAaiC,QAApBA,CAAAA,iBAAoB,SAAa,iBAAW,OAAX,yBAAb,C,CAc1B,GAAMC,CAAAA,CAAiB,4CAAG,WAAMC,CAAN,CAAiBC,CAAjB,CAA0BC,CAA1B,CAAoCC,CAApC,CAA4CC,CAA5C,CAAwDC,CAAxD,2FACvBC,CADuB,CAChBD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgB,CAEvBC,CAFuB,CAEfF,CAAI,CAACC,aAAL,CAAmB,uBAAnB,CAFe,MAIzB,CAACC,CAAK,CAACC,aAAN,EAAD,EAA0B,CAACD,CAAK,CAACE,KAAN,CAAYC,IAAZ,EAJF,2CAKlBC,eALkB,cAQzB,uBAAYN,CAAZ,CARyB,kCASZ,gBAAU,OAAV,EAAmBN,CAAnB,CAA8BC,CAA9B,CAAuCC,CAAvC,CAAiDC,CAAjD,CAAyDC,CAAzD,CAAqE,cAAOE,CAAP,EAAaO,SAAb,EAArE,CATY,0EAWlB,EAXkB,2CAAH,uDAAvB,C","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 .\n\n/**\n * Grading panel for simple direct grading.\n *\n * @module core_grades/grades/grader/gradingpanel/point\n * @package core_grades\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {saveGrade, fetchGrade} from './repository';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\nimport {invalidResult} from './normalise';\n\n/**\n * Fetch the current grade for a user.\n *\n * @param {String} component\n * @param {Number} context\n * @param {String} itemname\n * @param {Number} userId\n * @param {Element} rootNode\n * @return {Object}\n */\nexport const fetchCurrentGrade = (...args) => fetchGrade('point')(...args);\n\n/**\n * Store a new grade for a user.\n *\n * @param {String} component\n * @param {Number} context\n * @param {String} itemname\n * @param {Number} userId\n * @param {Boolean} notifyUser\n * @param {Element} rootNode\n *\n * @return {Object}\n */\nexport const storeCurrentGrade = async(component, context, itemname, userId, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n const grade = form.querySelector('input[name=\"grade\"]');\n\n if (!grade.checkValidity() || !grade.value.trim()) {\n return invalidResult;\n }\n\n if (compareData(form) === true) {\n return await saveGrade('point')(component, context, itemname, userId, notifyUser, jQuery(form).serialize());\n } else {\n return '';\n }\n};\n"],"file":"point.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/point.js"],"names":["fetchCurrentGrade","storeCurrentGrade","component","context","itemname","userId","notifyUser","rootNode","form","querySelector","grade","checkValidity","value","trim","invalidResult","serialize"],"mappings":"8RA0BA,uD,mVAaiC,QAApBA,CAAAA,iBAAoB,SAAa,iBAAW,OAAX,yBAAb,C,CAc1B,GAAMC,CAAAA,CAAiB,4CAAG,WAAMC,CAAN,CAAiBC,CAAjB,CAA0BC,CAA1B,CAAoCC,CAApC,CAA4CC,CAA5C,CAAwDC,CAAxD,2FACvBC,CADuB,CAChBD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgB,CAEvBC,CAFuB,CAEfF,CAAI,CAACC,aAAL,CAAmB,uBAAnB,CAFe,MAIzB,CAACC,CAAK,CAACC,aAAN,EAAD,EAA0B,CAACD,CAAK,CAACE,KAAN,CAAYC,IAAZ,EAJF,2CAKlBC,eALkB,cAQzB,uBAAYN,CAAZ,CARyB,kCASZ,gBAAU,OAAV,EAAmBN,CAAnB,CAA8BC,CAA9B,CAAuCC,CAAvC,CAAiDC,CAAjD,CAAyDC,CAAzD,CAAqE,cAAOE,CAAP,EAAaO,SAAb,EAArE,CATY,0EAWlB,EAXkB,2CAAH,uDAAvB,C","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 .\n\n/**\n * Grading panel for simple direct grading.\n *\n * @module core_grades/grades/grader/gradingpanel/point\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {saveGrade, fetchGrade} from './repository';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\nimport {invalidResult} from './normalise';\n\n/**\n * Fetch the current grade for a user.\n *\n * @param {String} component\n * @param {Number} context\n * @param {String} itemname\n * @param {Number} userId\n * @param {Element} rootNode\n * @return {Object}\n */\nexport const fetchCurrentGrade = (...args) => fetchGrade('point')(...args);\n\n/**\n * Store a new grade for a user.\n *\n * @param {String} component\n * @param {Number} context\n * @param {String} itemname\n * @param {Number} userId\n * @param {Boolean} notifyUser\n * @param {Element} rootNode\n *\n * @return {Object}\n */\nexport const storeCurrentGrade = async(component, context, itemname, userId, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n const grade = form.querySelector('input[name=\"grade\"]');\n\n if (!grade.checkValidity() || !grade.value.trim()) {\n return invalidResult;\n }\n\n if (compareData(form) === true) {\n return await saveGrade('point')(component, context, itemname, userId, notifyUser, jQuery(form).serialize());\n } else {\n return '';\n }\n};\n"],"file":"point.min.js"} \ No newline at end of file diff --git a/grade/amd/build/grades/grader/gradingpanel/repository.min.js.map b/grade/amd/build/grades/grader/gradingpanel/repository.min.js.map index 5f95d18b0c0..0ec060fa6f8 100644 --- a/grade/amd/build/grades/grader/gradingpanel/repository.min.js.map +++ b/grade/amd/build/grades/grader/gradingpanel/repository.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/repository.js"],"names":["fetchGrade","type","component","contextid","itemname","gradeduserid","methodname","args","saveGrade","notifyUser","formdata","normaliseResult","notifyuser"],"mappings":"4hBA0B0B,QAAbA,CAAAA,UAAa,CAAAC,CAAI,QAAI,UAACC,CAAD,CAAYC,CAAZ,CAAuBC,CAAvB,CAAiCC,CAAjC,CAAkD,CAChF,MAAO,WAAU,CAAC,CACdC,UAAU,2CAAqCL,CAArC,UADI,CAEdM,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAFQ,CAAD,CAAV,EAQH,CARG,CASV,CAV6B,C,aAYL,QAAZG,CAAAA,SAAY,CAAAP,CAAI,oDAAI,WAAMC,CAAN,CAAiBC,CAAjB,CAA4BC,CAA5B,CAAsCC,CAAtC,CAAoDI,CAApD,CAAgEC,CAAhE,wFACtBC,iBADsB,gBACA,WAAU,CAAC,CACpCL,UAAU,2CAAqCL,CAArC,UAD0B,CAEpCM,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAKFO,UAAU,CAAEH,CALV,CAMFC,QAAQ,CAARA,CANE,CAF8B,CAAD,CAAV,EAUzB,CAVyB,CADA,qGAAJ,wD","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 .\n\n/**\n * Repository for simple direct grading panel.\n *\n * @module core_grades/grades/grader/gradingpanel/repository\n * @package core_grades\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {call as fetchMany} from 'core/ajax';\nimport {normaliseResult} from './normalise';\n\nexport const fetchGrade = type => (component, contextid, itemname, gradeduserid) => {\n return fetchMany([{\n methodname: `core_grades_grader_gradingpanel_${type}_fetch`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n },\n }])[0];\n};\n\nexport const saveGrade = type => async(component, contextid, itemname, gradeduserid, notifyUser, formdata) => {\n return normaliseResult(await fetchMany([{\n methodname: `core_grades_grader_gradingpanel_${type}_store`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n notifyuser: notifyUser,\n formdata,\n },\n }])[0]);\n};\n"],"file":"repository.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/repository.js"],"names":["fetchGrade","type","component","contextid","itemname","gradeduserid","methodname","args","saveGrade","notifyUser","formdata","normaliseResult","notifyuser"],"mappings":"4hBAyB0B,QAAbA,CAAAA,UAAa,CAAAC,CAAI,QAAI,UAACC,CAAD,CAAYC,CAAZ,CAAuBC,CAAvB,CAAiCC,CAAjC,CAAkD,CAChF,MAAO,WAAU,CAAC,CACdC,UAAU,2CAAqCL,CAArC,UADI,CAEdM,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAFQ,CAAD,CAAV,EAQH,CARG,CASV,CAV6B,C,aAYL,QAAZG,CAAAA,SAAY,CAAAP,CAAI,oDAAI,WAAMC,CAAN,CAAiBC,CAAjB,CAA4BC,CAA5B,CAAsCC,CAAtC,CAAoDI,CAApD,CAAgEC,CAAhE,wFACtBC,iBADsB,gBACA,WAAU,CAAC,CACpCL,UAAU,2CAAqCL,CAArC,UAD0B,CAEpCM,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAKFO,UAAU,CAAEH,CALV,CAMFC,QAAQ,CAARA,CANE,CAF8B,CAAD,CAAV,EAUzB,CAVyB,CADA,qGAAJ,wD","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 .\n\n/**\n * Repository for simple direct grading panel.\n *\n * @module core_grades/grades/grader/gradingpanel/repository\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {call as fetchMany} from 'core/ajax';\nimport {normaliseResult} from './normalise';\n\nexport const fetchGrade = type => (component, contextid, itemname, gradeduserid) => {\n return fetchMany([{\n methodname: `core_grades_grader_gradingpanel_${type}_fetch`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n },\n }])[0];\n};\n\nexport const saveGrade = type => async(component, contextid, itemname, gradeduserid, notifyUser, formdata) => {\n return normaliseResult(await fetchMany([{\n methodname: `core_grades_grader_gradingpanel_${type}_store`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n notifyuser: notifyUser,\n formdata,\n },\n }])[0]);\n};\n"],"file":"repository.min.js"} \ No newline at end of file diff --git a/grade/amd/build/grades/grader/gradingpanel/scale.min.js.map b/grade/amd/build/grades/grader/gradingpanel/scale.min.js.map index b64fe517843..583d20993c4 100644 --- a/grade/amd/build/grades/grader/gradingpanel/scale.min.js.map +++ b/grade/amd/build/grades/grader/gradingpanel/scale.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/scale.js"],"names":["fetchCurrentGrade","storeCurrentGrade","component","context","itemname","userId","notifyUser","rootNode","form","querySelector","grade","checkValidity","value","trim","invalidResult","serialize"],"mappings":"8RA2BA,uD,oBAGiC,QAApBA,CAAAA,iBAAoB,SAAa,iBAAW,OAAX,yBAAb,C,CAE1B,GAAMC,CAAAA,CAAiB,CAAG,SAACC,CAAD,CAAYC,CAAZ,CAAqBC,CAArB,CAA+BC,CAA/B,CAAuCC,CAAvC,CAAmDC,CAAnD,CAAgE,IACvFC,CAAAA,CAAI,CAAGD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgF,CAEvFC,CAAK,CAAGF,CAAI,CAACC,aAAL,CAAmB,wBAAnB,CAF+E,CAI7F,GAAI,CAACC,CAAK,CAACC,aAAN,EAAD,EAA0B,CAACD,CAAK,CAACE,KAAN,CAAYC,IAAZ,EAA/B,CAAmD,CAC/C,MAAOC,gBACV,CAED,GAAI,uBAAYN,CAAZ,CAAJ,CAAgC,CAC5B,MAAO,gBAAU,OAAV,EAAmBN,CAAnB,CAA8BC,CAA9B,CAAuCC,CAAvC,CAAiDC,CAAjD,CAAyDC,CAAzD,CAAqE,cAAOE,CAAP,EAAaO,SAAb,EAArE,CACV,CAFD,IAEO,CACH,MAAO,EACV,CACJ,CAbM,C","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 .\n\n/**\n * Grading panel for simple direct grading.\n *\n * @module core_grades/grades/grader/gradingpanel/scale\n * @package core_grades\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {saveGrade, fetchGrade} from './repository';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\nimport {invalidResult} from './normalise';\n\nexport const fetchCurrentGrade = (...args) => fetchGrade('scale')(...args);\n\nexport const storeCurrentGrade = (component, context, itemname, userId, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n const grade = form.querySelector('select[name=\"grade\"]');\n\n if (!grade.checkValidity() || !grade.value.trim()) {\n return invalidResult;\n }\n\n if (compareData(form) === true) {\n return saveGrade('scale')(component, context, itemname, userId, notifyUser, jQuery(form).serialize());\n } else {\n return '';\n }\n};\n"],"file":"scale.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/scale.js"],"names":["fetchCurrentGrade","storeCurrentGrade","component","context","itemname","userId","notifyUser","rootNode","form","querySelector","grade","checkValidity","value","trim","invalidResult","serialize"],"mappings":"8RA0BA,uD,oBAGiC,QAApBA,CAAAA,iBAAoB,SAAa,iBAAW,OAAX,yBAAb,C,CAE1B,GAAMC,CAAAA,CAAiB,CAAG,SAACC,CAAD,CAAYC,CAAZ,CAAqBC,CAArB,CAA+BC,CAA/B,CAAuCC,CAAvC,CAAmDC,CAAnD,CAAgE,IACvFC,CAAAA,CAAI,CAAGD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgF,CAEvFC,CAAK,CAAGF,CAAI,CAACC,aAAL,CAAmB,wBAAnB,CAF+E,CAI7F,GAAI,CAACC,CAAK,CAACC,aAAN,EAAD,EAA0B,CAACD,CAAK,CAACE,KAAN,CAAYC,IAAZ,EAA/B,CAAmD,CAC/C,MAAOC,gBACV,CAED,GAAI,uBAAYN,CAAZ,CAAJ,CAAgC,CAC5B,MAAO,gBAAU,OAAV,EAAmBN,CAAnB,CAA8BC,CAA9B,CAAuCC,CAAvC,CAAiDC,CAAjD,CAAyDC,CAAzD,CAAqE,cAAOE,CAAP,EAAaO,SAAb,EAArE,CACV,CAFD,IAEO,CACH,MAAO,EACV,CACJ,CAbM,C","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 .\n\n/**\n * Grading panel for simple direct grading.\n *\n * @module core_grades/grades/grader/gradingpanel/scale\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {saveGrade, fetchGrade} from './repository';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\nimport {invalidResult} from './normalise';\n\nexport const fetchCurrentGrade = (...args) => fetchGrade('scale')(...args);\n\nexport const storeCurrentGrade = (component, context, itemname, userId, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n const grade = form.querySelector('select[name=\"grade\"]');\n\n if (!grade.checkValidity() || !grade.value.trim()) {\n return invalidResult;\n }\n\n if (compareData(form) === true) {\n return saveGrade('scale')(component, context, itemname, userId, notifyUser, jQuery(form).serialize());\n } else {\n return '';\n }\n};\n"],"file":"scale.min.js"} \ No newline at end of file diff --git a/grade/amd/src/edittree_index.js b/grade/amd/src/edittree_index.js index bb9aa792b2e..b0c513e2db9 100644 --- a/grade/amd/src/edittree_index.js +++ b/grade/amd/src/edittree_index.js @@ -17,7 +17,6 @@ * Enhance the gradebook tree setup with various facilities. * * @module core_grades/edittree_index - * @package core_grades * @copyright 2016 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/amd/src/grades/grader/gradingpanel/comparison.js b/grade/amd/src/grades/grader/gradingpanel/comparison.js index 2507d8bd346..2fa71ef2ea8 100644 --- a/grade/amd/src/grades/grader/gradingpanel/comparison.js +++ b/grade/amd/src/grades/grader/gradingpanel/comparison.js @@ -17,7 +17,6 @@ * Compare a given form's values and its previously set data attributes. * * @module core_grades/grades/grader/gradingpanel/comparison - * @package core_grades * @copyright 2019 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/amd/src/grades/grader/gradingpanel/normalise.js b/grade/amd/src/grades/grader/gradingpanel/normalise.js index 1d9da382f0c..de02adbb1bd 100644 --- a/grade/amd/src/grades/grader/gradingpanel/normalise.js +++ b/grade/amd/src/grades/grader/gradingpanel/normalise.js @@ -17,7 +17,6 @@ * Error handling and normalisation of provided data. * * @module core_grades/grades/grader/gradingpanel/normalise - * @package core_grades * @copyright 2019 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/amd/src/grades/grader/gradingpanel/point.js b/grade/amd/src/grades/grader/gradingpanel/point.js index 0c42c3f4a3d..e7bc14116d2 100644 --- a/grade/amd/src/grades/grader/gradingpanel/point.js +++ b/grade/amd/src/grades/grader/gradingpanel/point.js @@ -17,7 +17,6 @@ * Grading panel for simple direct grading. * * @module core_grades/grades/grader/gradingpanel/point - * @package core_grades * @copyright 2019 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/amd/src/grades/grader/gradingpanel/repository.js b/grade/amd/src/grades/grader/gradingpanel/repository.js index c0ad026decb..e8a24f1f9d9 100644 --- a/grade/amd/src/grades/grader/gradingpanel/repository.js +++ b/grade/amd/src/grades/grader/gradingpanel/repository.js @@ -17,7 +17,6 @@ * Repository for simple direct grading panel. * * @module core_grades/grades/grader/gradingpanel/repository - * @package core_grades * @copyright 2019 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/amd/src/grades/grader/gradingpanel/scale.js b/grade/amd/src/grades/grader/gradingpanel/scale.js index 278047b491e..8fe7a146d04 100644 --- a/grade/amd/src/grades/grader/gradingpanel/scale.js +++ b/grade/amd/src/grades/grader/gradingpanel/scale.js @@ -17,7 +17,6 @@ * Grading panel for simple direct grading. * * @module core_grades/grades/grader/gradingpanel/scale - * @package core_grades * @copyright 2019 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/grading/form/guide/amd/build/comment_chooser.min.js.map b/grade/grading/form/guide/amd/build/comment_chooser.min.js.map index 9c907aff0b4..bd1cc93354c 100644 --- a/grade/grading/form/guide/amd/build/comment_chooser.min.js.map +++ b/grade/grading/form/guide/amd/build/comment_chooser.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/comment_chooser.js"],"names":["define","$","templates","notification","initialise","criterionId","buttonId","remarkId","commentOptions","displayChooserDialog","compiledSource","comments","titleLabel","M","util","get_string","cancelButtonId","cancelButton","chooserDialog","core","dialogue","modal","headerContent","bodyContent","footerContent","focusAfterHide","id","click","hide","each","index","comment","commentOptionId","remarkTextArea","remarkText","val","trim","description","document","off","on","keyCode","event","which","after","e","prevVal","newVal","destroy","show","generateCommentsChooser","render","done","fail","exception","preventDefault"],"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 .\n\n/**\n * AMD code for the frequently used comments chooser for the marking guide grading form.\n *\n * @module gradingform_guide/comment_chooser\n * @class comment_chooser\n * @package core\n * @copyright 2015 Jun Pataleta \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/templates', 'core/notification', 'core/yui'], function($, templates, notification) {\n\n // Private variables and functions.\n\n return /** @alias module:gradingform_guide/comment_chooser */ {\n // Public variables and functions.\n /**\n * Initialises the module.\n *\n * Basically, it performs the binding and handling of the button click event for\n * the 'Insert frequently used comment' button.\n *\n * @param {Integer} criterionId The criterion ID.\n * @param {String} buttonId The element ID of the button which the handler will be bound to.\n * @param {String} remarkId The element ID of the remark text area where the text of the selected comment will be copied to.\n * @param {Array} commentOptions The array of frequently used comments to be used as options.\n */\n initialise: function(criterionId, buttonId, remarkId, commentOptions) {\n /**\n * Display the chooser dialog using the compiled HTML from the mustache template\n * and binds onclick events for the generated comment options.\n *\n * @param {String} compiledSource The compiled HTML from the mustache template\n * @param {Array} comments Array containing comments.\n */\n function displayChooserDialog(compiledSource, comments) {\n var titleLabel = '';\n var cancelButtonId = 'comment-chooser-' + criterionId + '-cancel';\n var cancelButton = '';\n\n // Set dialog's body content.\n var chooserDialog = new M.core.dialogue({\n modal: true,\n headerContent: titleLabel,\n bodyContent: compiledSource,\n footerContent: cancelButton,\n focusAfterHide: '#' + remarkId,\n id: \"comments-chooser-dialog-\" + criterionId\n });\n\n // Bind click event to the cancel button.\n $(\"#\" + cancelButtonId).click(function() {\n chooserDialog.hide();\n });\n\n // Loop over each comment item and bind click events.\n $.each(comments, function(index, comment) {\n var commentOptionId = '#comment-option-' + criterionId + '-' + comment.id;\n\n // Delegate click event for the generated option link.\n $(commentOptionId).click(function() {\n var remarkTextArea = $('#' + remarkId);\n var remarkText = remarkTextArea.val();\n\n // Add line break if the current value of the remark text is not empty.\n if (remarkText.trim() !== '') {\n remarkText += '\\n';\n }\n remarkText += comment.description;\n\n remarkTextArea.val(remarkText);\n\n chooserDialog.hide();\n });\n\n // Handle keypress on list items.\n $(document).off('keypress', commentOptionId).on('keypress', commentOptionId, function() {\n var keyCode = event.which || event.keyCode;\n\n // Enter or space key.\n if (keyCode == 13 || keyCode == 32) {\n // Trigger click event.\n $(commentOptionId).click();\n }\n });\n });\n\n // Destroy the dialog when it is hidden to allow the grading section to\n // be loaded as a fragment multiple times within the same page.\n chooserDialog.after('visibleChange', function(e) {\n // Going from visible to hidden.\n if (e.prevVal && !e.newVal) {\n this.destroy();\n }\n }, chooserDialog);\n\n // Show dialog.\n chooserDialog.show();\n }\n\n /**\n * Generates the comments chooser dialog from the grading_form/comment_chooser mustache template.\n */\n function generateCommentsChooser() {\n // Template context.\n var context = {\n criterionId: criterionId,\n comments: commentOptions\n };\n\n // Render the template and display the comment chooser dialog.\n templates.render('gradingform_guide/comment_chooser', context)\n .done(function(compiledSource) {\n displayChooserDialog(compiledSource, commentOptions);\n })\n .fail(notification.exception);\n }\n\n // Bind click event for the comments chooser button.\n $(\"#\" + buttonId).click(function(e) {\n e.preventDefault();\n generateCommentsChooser();\n });\n }\n };\n});\n"],"file":"comment_chooser.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/comment_chooser.js"],"names":["define","$","templates","notification","initialise","criterionId","buttonId","remarkId","commentOptions","displayChooserDialog","compiledSource","comments","titleLabel","M","util","get_string","cancelButtonId","cancelButton","chooserDialog","core","dialogue","modal","headerContent","bodyContent","footerContent","focusAfterHide","id","click","hide","each","index","comment","commentOptionId","remarkTextArea","remarkText","val","trim","description","document","off","on","keyCode","event","which","after","e","prevVal","newVal","destroy","show","generateCommentsChooser","render","done","fail","exception","preventDefault"],"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 .\n\n/**\n * AMD code for the frequently used comments chooser for the marking guide grading form.\n *\n * @module gradingform_guide/comment_chooser\n * @class comment_chooser\n * @copyright 2015 Jun Pataleta \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/templates', 'core/notification', 'core/yui'], function($, templates, notification) {\n\n // Private variables and functions.\n\n return /** @alias module:gradingform_guide/comment_chooser */ {\n // Public variables and functions.\n /**\n * Initialises the module.\n *\n * Basically, it performs the binding and handling of the button click event for\n * the 'Insert frequently used comment' button.\n *\n * @param {Integer} criterionId The criterion ID.\n * @param {String} buttonId The element ID of the button which the handler will be bound to.\n * @param {String} remarkId The element ID of the remark text area where the text of the selected comment will be copied to.\n * @param {Array} commentOptions The array of frequently used comments to be used as options.\n */\n initialise: function(criterionId, buttonId, remarkId, commentOptions) {\n /**\n * Display the chooser dialog using the compiled HTML from the mustache template\n * and binds onclick events for the generated comment options.\n *\n * @param {String} compiledSource The compiled HTML from the mustache template\n * @param {Array} comments Array containing comments.\n */\n function displayChooserDialog(compiledSource, comments) {\n var titleLabel = '';\n var cancelButtonId = 'comment-chooser-' + criterionId + '-cancel';\n var cancelButton = '';\n\n // Set dialog's body content.\n var chooserDialog = new M.core.dialogue({\n modal: true,\n headerContent: titleLabel,\n bodyContent: compiledSource,\n footerContent: cancelButton,\n focusAfterHide: '#' + remarkId,\n id: \"comments-chooser-dialog-\" + criterionId\n });\n\n // Bind click event to the cancel button.\n $(\"#\" + cancelButtonId).click(function() {\n chooserDialog.hide();\n });\n\n // Loop over each comment item and bind click events.\n $.each(comments, function(index, comment) {\n var commentOptionId = '#comment-option-' + criterionId + '-' + comment.id;\n\n // Delegate click event for the generated option link.\n $(commentOptionId).click(function() {\n var remarkTextArea = $('#' + remarkId);\n var remarkText = remarkTextArea.val();\n\n // Add line break if the current value of the remark text is not empty.\n if (remarkText.trim() !== '') {\n remarkText += '\\n';\n }\n remarkText += comment.description;\n\n remarkTextArea.val(remarkText);\n\n chooserDialog.hide();\n });\n\n // Handle keypress on list items.\n $(document).off('keypress', commentOptionId).on('keypress', commentOptionId, function() {\n var keyCode = event.which || event.keyCode;\n\n // Enter or space key.\n if (keyCode == 13 || keyCode == 32) {\n // Trigger click event.\n $(commentOptionId).click();\n }\n });\n });\n\n // Destroy the dialog when it is hidden to allow the grading section to\n // be loaded as a fragment multiple times within the same page.\n chooserDialog.after('visibleChange', function(e) {\n // Going from visible to hidden.\n if (e.prevVal && !e.newVal) {\n this.destroy();\n }\n }, chooserDialog);\n\n // Show dialog.\n chooserDialog.show();\n }\n\n /**\n * Generates the comments chooser dialog from the grading_form/comment_chooser mustache template.\n */\n function generateCommentsChooser() {\n // Template context.\n var context = {\n criterionId: criterionId,\n comments: commentOptions\n };\n\n // Render the template and display the comment chooser dialog.\n templates.render('gradingform_guide/comment_chooser', context)\n .done(function(compiledSource) {\n displayChooserDialog(compiledSource, commentOptions);\n })\n .fail(notification.exception);\n }\n\n // Bind click event for the comments chooser button.\n $(\"#\" + buttonId).click(function(e) {\n e.preventDefault();\n generateCommentsChooser();\n });\n }\n };\n});\n"],"file":"comment_chooser.min.js"} \ No newline at end of file diff --git a/grade/grading/form/guide/amd/build/grades/grader/gradingpanel.min.js.map b/grade/grading/form/guide/amd/build/grades/grader/gradingpanel.min.js.map index cac4be33469..902951950f5 100644 --- a/grade/grading/form/guide/amd/build/grades/grader/gradingpanel.min.js.map +++ b/grade/grading/form/guide/amd/build/grades/grader/gradingpanel.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/grades/grader/gradingpanel.js"],"names":["fetchCurrentGrade","component","contextid","itemname","gradeduserid","methodname","args","storeCurrentGrade","notifyUser","rootNode","form","querySelector","normaliseResult","notifyuser","formdata","serialize"],"mappings":"gUA6BA,uD,mVAYiC,QAApBA,CAAAA,iBAAoB,CAACC,CAAD,CAAYC,CAAZ,CAAuBC,CAAvB,CAAiCC,CAAjC,CAAkD,CAC/E,MAAO,WAAU,CAAC,CACdC,UAAU,8CADI,CAEdC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAFQ,CAAD,CAAV,EAQH,CARG,CASV,C,CAcM,GAAMG,CAAAA,CAAiB,4CAAG,WAAMN,CAAN,CAAiBC,CAAjB,CAA4BC,CAA5B,CAAsCC,CAAtC,CAAoDI,CAApD,CAAgEC,CAAhE,yFACvBC,CADuB,CAChBD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgB,MAGzB,uBAAYD,CAAZ,CAHyB,uBAIlBE,iBAJkB,gBAII,WAAU,CAAC,CACpCP,UAAU,8CAD0B,CAEpCC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAKFS,UAAU,CAAEL,CALV,CAMFM,QAAQ,CAAE,cAAOJ,CAAP,EAAaK,SAAb,EANR,CAF8B,CAAD,CAAV,EAUzB,CAVyB,CAJJ,6FAgBlB,EAhBkB,2CAAH,uDAAvB,C","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 .\n\n/**\n * Grading panel for gradingform_guide.\n *\n * @module gradingform_guide/grades/grader/gradingpanel\n * @package gradingform_guide\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {call as fetchMany} from 'core/ajax';\nimport {normaliseResult} from 'core_grades/grades/grader/gradingpanel/normalise';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can fetch the currently assigned grade.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n *\n * @returns {Promise}\n */\nexport const fetchCurrentGrade = (component, contextid, itemname, gradeduserid) => {\n return fetchMany([{\n methodname: `gradingform_guide_grader_gradingpanel_fetch`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n },\n }])[0];\n};\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can store the currently assigned grade in a given form.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n * @param {Boolean} notifyUser\n * @param {HTMLElement} rootNode\n *\n * @returns {Promise}\n */\nexport const storeCurrentGrade = async(component, contextid, itemname, gradeduserid, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n\n if (compareData(form) === true) {\n return normaliseResult(await fetchMany([{\n methodname: `gradingform_guide_grader_gradingpanel_store`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n notifyuser: notifyUser,\n formdata: jQuery(form).serialize(),\n },\n }])[0]);\n } else {\n return '';\n }\n};\n"],"file":"gradingpanel.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../src/grades/grader/gradingpanel.js"],"names":["fetchCurrentGrade","component","contextid","itemname","gradeduserid","methodname","args","storeCurrentGrade","notifyUser","rootNode","form","querySelector","normaliseResult","notifyuser","formdata","serialize"],"mappings":"gUA4BA,uD,mVAYiC,QAApBA,CAAAA,iBAAoB,CAACC,CAAD,CAAYC,CAAZ,CAAuBC,CAAvB,CAAiCC,CAAjC,CAAkD,CAC/E,MAAO,WAAU,CAAC,CACdC,UAAU,8CADI,CAEdC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAFQ,CAAD,CAAV,EAQH,CARG,CASV,C,CAcM,GAAMG,CAAAA,CAAiB,4CAAG,WAAMN,CAAN,CAAiBC,CAAjB,CAA4BC,CAA5B,CAAsCC,CAAtC,CAAoDI,CAApD,CAAgEC,CAAhE,yFACvBC,CADuB,CAChBD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgB,MAGzB,uBAAYD,CAAZ,CAHyB,uBAIlBE,iBAJkB,gBAII,WAAU,CAAC,CACpCP,UAAU,8CAD0B,CAEpCC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAKFS,UAAU,CAAEL,CALV,CAMFM,QAAQ,CAAE,cAAOJ,CAAP,EAAaK,SAAb,EANR,CAF8B,CAAD,CAAV,EAUzB,CAVyB,CAJJ,6FAgBlB,EAhBkB,2CAAH,uDAAvB,C","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 .\n\n/**\n * Grading panel for gradingform_guide.\n *\n * @module gradingform_guide/grades/grader/gradingpanel\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {call as fetchMany} from 'core/ajax';\nimport {normaliseResult} from 'core_grades/grades/grader/gradingpanel/normalise';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can fetch the currently assigned grade.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n *\n * @returns {Promise}\n */\nexport const fetchCurrentGrade = (component, contextid, itemname, gradeduserid) => {\n return fetchMany([{\n methodname: `gradingform_guide_grader_gradingpanel_fetch`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n },\n }])[0];\n};\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can store the currently assigned grade in a given form.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n * @param {Boolean} notifyUser\n * @param {HTMLElement} rootNode\n *\n * @returns {Promise}\n */\nexport const storeCurrentGrade = async(component, contextid, itemname, gradeduserid, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n\n if (compareData(form) === true) {\n return normaliseResult(await fetchMany([{\n methodname: `gradingform_guide_grader_gradingpanel_store`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n notifyuser: notifyUser,\n formdata: jQuery(form).serialize(),\n },\n }])[0]);\n } else {\n return '';\n }\n};\n"],"file":"gradingpanel.min.js"} \ No newline at end of file diff --git a/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments.min.js.map b/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments.min.js.map index 5f600058c5c..e82d20643fc 100644 --- a/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments.min.js.map +++ b/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/comments.js"],"names":["init","rootId","rootNode","document","querySelector","addEventListener","e","target","matches","Selectors","frequentComment","preventDefault","clicked","closest","criterion","remark","value","trim","innerHTML"],"mappings":"6LAwBA,uD,OAOoB,QAAPA,CAAAA,IAAO,CAACC,CAAD,CAAY,CAC5B,GAAMC,CAAAA,CAAQ,CAAGC,QAAQ,CAACC,aAAT,YAA2BH,CAA3B,EAAjB,CAEAC,CAAQ,CAACG,gBAAT,CAA0B,OAA1B,CAAmC,SAACC,CAAD,CAAO,CACtC,GAAI,CAACA,CAAC,CAACC,MAAF,CAASC,OAAT,CAAiBC,UAAUC,eAA3B,CAAL,CAAkD,CAC9C,MACH,CAEDJ,CAAC,CAACK,cAAF,GALsC,GAOhCC,CAAAA,CAAO,CAAGN,CAAC,CAACC,MAAF,CAASM,OAAT,CAAiBJ,UAAUC,eAA3B,CAPsB,CAQhCI,CAAS,CAAGF,CAAO,CAACC,OAAR,CAAgBJ,UAAUK,SAA1B,CARoB,CAShCC,CAAM,CAAGD,CAAS,CAACV,aAAV,CAAwBK,UAAUM,MAAlC,CATuB,CAWtC,GAAI,CAACA,CAAL,CAAa,CACT,MACH,CAGD,GAAIA,CAAM,CAACC,KAAP,CAAaC,IAAb,EAAJ,CAAyB,CACrBF,CAAM,CAACC,KAAP,cAAqBJ,CAAO,CAACM,SAA7B,CACH,CAFD,IAEO,CACHH,CAAM,CAACC,KAAP,EAAgBJ,CAAO,CAACM,SAC3B,CACJ,CArBD,CAsBH,C","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 .\n\n/**\n * Grading panel frequently used comments selector.\n *\n * @module gradingform_guide/grades/grader/gradingpanel/comments\n * @package gradingform_guide\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Selectors from './comments/selectors';\n\n/**\n * Manage the frequently used comments in the Marking Guide form.\n *\n * @param {String} rootId\n */\nexport const init = (rootId) => {\n const rootNode = document.querySelector(`#${rootId}`);\n\n rootNode.addEventListener('click', (e) => {\n if (!e.target.matches(Selectors.frequentComment)) {\n return;\n }\n\n e.preventDefault();\n\n const clicked = e.target.closest(Selectors.frequentComment);\n const criterion = clicked.closest(Selectors.criterion);\n const remark = criterion.querySelector(Selectors.remark);\n\n if (!remark) {\n return;\n }\n\n // Either append the comment to an existing comment or set it as the comment.\n if (remark.value.trim()) {\n remark.value += `\\n${clicked.innerHTML}`;\n } else {\n remark.value += clicked.innerHTML;\n }\n });\n};\n"],"file":"comments.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../src/grades/grader/gradingpanel/comments.js"],"names":["init","rootId","rootNode","document","querySelector","addEventListener","e","target","matches","Selectors","frequentComment","preventDefault","clicked","closest","criterion","remark","value","trim","innerHTML"],"mappings":"6LAuBA,uD,OAOoB,QAAPA,CAAAA,IAAO,CAACC,CAAD,CAAY,CAC5B,GAAMC,CAAAA,CAAQ,CAAGC,QAAQ,CAACC,aAAT,YAA2BH,CAA3B,EAAjB,CAEAC,CAAQ,CAACG,gBAAT,CAA0B,OAA1B,CAAmC,SAACC,CAAD,CAAO,CACtC,GAAI,CAACA,CAAC,CAACC,MAAF,CAASC,OAAT,CAAiBC,UAAUC,eAA3B,CAAL,CAAkD,CAC9C,MACH,CAEDJ,CAAC,CAACK,cAAF,GALsC,GAOhCC,CAAAA,CAAO,CAAGN,CAAC,CAACC,MAAF,CAASM,OAAT,CAAiBJ,UAAUC,eAA3B,CAPsB,CAQhCI,CAAS,CAAGF,CAAO,CAACC,OAAR,CAAgBJ,UAAUK,SAA1B,CARoB,CAShCC,CAAM,CAAGD,CAAS,CAACV,aAAV,CAAwBK,UAAUM,MAAlC,CATuB,CAWtC,GAAI,CAACA,CAAL,CAAa,CACT,MACH,CAGD,GAAIA,CAAM,CAACC,KAAP,CAAaC,IAAb,EAAJ,CAAyB,CACrBF,CAAM,CAACC,KAAP,cAAqBJ,CAAO,CAACM,SAA7B,CACH,CAFD,IAEO,CACHH,CAAM,CAACC,KAAP,EAAgBJ,CAAO,CAACM,SAC3B,CACJ,CArBD,CAsBH,C","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 .\n\n/**\n * Grading panel frequently used comments selector.\n *\n * @module gradingform_guide/grades/grader/gradingpanel/comments\n * @copyright 2019 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Selectors from './comments/selectors';\n\n/**\n * Manage the frequently used comments in the Marking Guide form.\n *\n * @param {String} rootId\n */\nexport const init = (rootId) => {\n const rootNode = document.querySelector(`#${rootId}`);\n\n rootNode.addEventListener('click', (e) => {\n if (!e.target.matches(Selectors.frequentComment)) {\n return;\n }\n\n e.preventDefault();\n\n const clicked = e.target.closest(Selectors.frequentComment);\n const criterion = clicked.closest(Selectors.criterion);\n const remark = criterion.querySelector(Selectors.remark);\n\n if (!remark) {\n return;\n }\n\n // Either append the comment to an existing comment or set it as the comment.\n if (remark.value.trim()) {\n remark.value += `\\n${clicked.innerHTML}`;\n } else {\n remark.value += clicked.innerHTML;\n }\n });\n};\n"],"file":"comments.min.js"} \ No newline at end of file diff --git a/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments/selectors.min.js.map b/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments/selectors.min.js.map index 539a41d8769..b9c8890fffe 100644 --- a/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments/selectors.min.js.map +++ b/grade/grading/form/guide/amd/build/grades/grader/gradingpanel/comments/selectors.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../../../src/grades/grader/gradingpanel/comments/selectors.js"],"names":["frequentComment","criterion","remark"],"mappings":"2LAuBe,CACXA,eAAe,CAAE,oDADN,CAEXC,SAAS,CAAE,6CAFA,CAGXC,MAAM,CAAE,0CAHG,C","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 .\n\n/**\n * Define all of the selectors we will be using on the Marking Guide interface.\n *\n * @module gradingform_guide/grades/grader/gradingpanel/comments/selectors\n * @package gradingform_guide\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n frequentComment: '[data-gradingform_guide-role=\"frequent-comment\"]',\n criterion: '[data-gradingform-guide-role=\"criterion\"]',\n remark: '[data-gradingform-guide-role=\"remark\"]',\n};\n"],"file":"selectors.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../../../src/grades/grader/gradingpanel/comments/selectors.js"],"names":["frequentComment","criterion","remark"],"mappings":"2LAsBe,CACXA,eAAe,CAAE,oDADN,CAEXC,SAAS,CAAE,6CAFA,CAGXC,MAAM,CAAE,0CAHG,C","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 .\n\n/**\n * Define all of the selectors we will be using on the Marking Guide interface.\n *\n * @module gradingform_guide/grades/grader/gradingpanel/comments/selectors\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n frequentComment: '[data-gradingform_guide-role=\"frequent-comment\"]',\n criterion: '[data-gradingform-guide-role=\"criterion\"]',\n remark: '[data-gradingform-guide-role=\"remark\"]',\n};\n"],"file":"selectors.min.js"} \ No newline at end of file diff --git a/grade/grading/form/guide/amd/src/comment_chooser.js b/grade/grading/form/guide/amd/src/comment_chooser.js index b7a48311a96..e13d33a9c1d 100644 --- a/grade/grading/form/guide/amd/src/comment_chooser.js +++ b/grade/grading/form/guide/amd/src/comment_chooser.js @@ -18,7 +18,6 @@ * * @module gradingform_guide/comment_chooser * @class comment_chooser - * @package core * @copyright 2015 Jun Pataleta * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/grading/form/guide/amd/src/grades/grader/gradingpanel.js b/grade/grading/form/guide/amd/src/grades/grader/gradingpanel.js index 2233c5bcc55..26efd6cbb2b 100644 --- a/grade/grading/form/guide/amd/src/grades/grader/gradingpanel.js +++ b/grade/grading/form/guide/amd/src/grades/grader/gradingpanel.js @@ -17,7 +17,6 @@ * Grading panel for gradingform_guide. * * @module gradingform_guide/grades/grader/gradingpanel - * @package gradingform_guide * @copyright 2019 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments.js b/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments.js index c2cbfb58d6d..4800e4162f0 100644 --- a/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments.js +++ b/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments.js @@ -17,7 +17,6 @@ * Grading panel frequently used comments selector. * * @module gradingform_guide/grades/grader/gradingpanel/comments - * @package gradingform_guide * @copyright 2019 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments/selectors.js b/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments/selectors.js index 45bd89f4417..3e2e1f22cb8 100644 --- a/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments/selectors.js +++ b/grade/grading/form/guide/amd/src/grades/grader/gradingpanel/comments/selectors.js @@ -17,7 +17,6 @@ * Define all of the selectors we will be using on the Marking Guide interface. * * @module gradingform_guide/grades/grader/gradingpanel/comments/selectors - * @package gradingform_guide * @copyright 2019 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map b/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map index 33ce01ccb0b..262af2451e2 100644 --- a/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map +++ b/grade/grading/form/rubric/amd/build/grades/grader/gradingpanel.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../src/grades/grader/gradingpanel.js"],"names":["fetchCurrentGrade","component","contextid","itemname","gradeduserid","methodname","args","storeCurrentGrade","notifyUser","rootNode","form","querySelector","normaliseResult","notifyuser","formdata","serialize"],"mappings":"iUA6BA,uD,mVAYiC,QAApBA,CAAAA,iBAAoB,CAACC,CAAD,CAAYC,CAAZ,CAAuBC,CAAvB,CAAiCC,CAAjC,CAAkD,CAC/E,MAAO,WAAU,CAAC,CACdC,UAAU,+CADI,CAEdC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAFQ,CAAD,CAAV,EAQH,CARG,CASV,C,CAcM,GAAMG,CAAAA,CAAiB,4CAAG,WAAMN,CAAN,CAAiBC,CAAjB,CAA4BC,CAA5B,CAAsCC,CAAtC,CAAoDI,CAApD,CAAgEC,CAAhE,yFACvBC,CADuB,CAChBD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgB,MAGzB,uBAAYD,CAAZ,CAHyB,uBAIlBE,iBAJkB,gBAII,WAAU,CAAC,CACpCP,UAAU,+CAD0B,CAEpCC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAKFS,UAAU,CAAEL,CALV,CAMFM,QAAQ,CAAE,cAAOJ,CAAP,EAAaK,SAAb,EANR,CAF8B,CAAD,CAAV,EAUzB,CAVyB,CAJJ,6FAgBlB,EAhBkB,2CAAH,uDAAvB,C","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 .\n\n/**\n * Grading panel for gradingform_rubric.\n *\n * @module gradingform_rubric/grades/grader/gradingpanel\n * @package gradingform_rubric\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {call as fetchMany} from 'core/ajax';\nimport {normaliseResult} from 'core_grades/grades/grader/gradingpanel/normalise';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can fetch the currently assigned grade.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n *\n * @returns {Promise}\n */\nexport const fetchCurrentGrade = (component, contextid, itemname, gradeduserid) => {\n return fetchMany([{\n methodname: `gradingform_rubric_grader_gradingpanel_fetch`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n },\n }])[0];\n};\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can store the currently assigned grade in a given form.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n * @param {Boolean} notifyUser\n * @param {HTMLElement} rootNode\n *\n * @returns {Promise}\n */\nexport const storeCurrentGrade = async(component, contextid, itemname, gradeduserid, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n\n if (compareData(form) === true) {\n return normaliseResult(await fetchMany([{\n methodname: `gradingform_rubric_grader_gradingpanel_store`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n notifyuser: notifyUser,\n formdata: jQuery(form).serialize(),\n },\n }])[0]);\n } else {\n return '';\n }\n};\n"],"file":"gradingpanel.min.js"} \ No newline at end of file +{"version":3,"sources":["../../../src/grades/grader/gradingpanel.js"],"names":["fetchCurrentGrade","component","contextid","itemname","gradeduserid","methodname","args","storeCurrentGrade","notifyUser","rootNode","form","querySelector","normaliseResult","notifyuser","formdata","serialize"],"mappings":"iUA4BA,uD,mVAYiC,QAApBA,CAAAA,iBAAoB,CAACC,CAAD,CAAYC,CAAZ,CAAuBC,CAAvB,CAAiCC,CAAjC,CAAkD,CAC/E,MAAO,WAAU,CAAC,CACdC,UAAU,+CADI,CAEdC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAFQ,CAAD,CAAV,EAQH,CARG,CASV,C,CAcM,GAAMG,CAAAA,CAAiB,4CAAG,WAAMN,CAAN,CAAiBC,CAAjB,CAA4BC,CAA5B,CAAsCC,CAAtC,CAAoDI,CAApD,CAAgEC,CAAhE,yFACvBC,CADuB,CAChBD,CAAQ,CAACE,aAAT,CAAuB,MAAvB,CADgB,MAGzB,uBAAYD,CAAZ,CAHyB,uBAIlBE,iBAJkB,gBAII,WAAU,CAAC,CACpCP,UAAU,+CAD0B,CAEpCC,IAAI,CAAE,CACFL,SAAS,CAATA,CADE,CAEFC,SAAS,CAATA,CAFE,CAGFC,QAAQ,CAARA,CAHE,CAIFC,YAAY,CAAZA,CAJE,CAKFS,UAAU,CAAEL,CALV,CAMFM,QAAQ,CAAE,cAAOJ,CAAP,EAAaK,SAAb,EANR,CAF8B,CAAD,CAAV,EAUzB,CAVyB,CAJJ,6FAgBlB,EAhBkB,2CAAH,uDAAvB,C","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 .\n\n/**\n * Grading panel for gradingform_rubric.\n *\n * @module gradingform_rubric/grades/grader/gradingpanel\n * @copyright 2019 Mathew May \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {call as fetchMany} from 'core/ajax';\nimport {normaliseResult} from 'core_grades/grades/grader/gradingpanel/normalise';\nimport {compareData} from 'core_grades/grades/grader/gradingpanel/comparison';\n\n// Note: We use jQuery.serializer here until we can rewrite Ajax to use XHR.send()\nimport jQuery from 'jquery';\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can fetch the currently assigned grade.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n *\n * @returns {Promise}\n */\nexport const fetchCurrentGrade = (component, contextid, itemname, gradeduserid) => {\n return fetchMany([{\n methodname: `gradingform_rubric_grader_gradingpanel_fetch`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n },\n }])[0];\n};\n\n/**\n * For a given component, contextid, itemname & gradeduserid we can store the currently assigned grade in a given form.\n *\n * @param {String} component\n * @param {Number} contextid\n * @param {String} itemname\n * @param {Number} gradeduserid\n * @param {Boolean} notifyUser\n * @param {HTMLElement} rootNode\n *\n * @returns {Promise}\n */\nexport const storeCurrentGrade = async(component, contextid, itemname, gradeduserid, notifyUser, rootNode) => {\n const form = rootNode.querySelector('form');\n\n if (compareData(form) === true) {\n return normaliseResult(await fetchMany([{\n methodname: `gradingform_rubric_grader_gradingpanel_store`,\n args: {\n component,\n contextid,\n itemname,\n gradeduserid,\n notifyuser: notifyUser,\n formdata: jQuery(form).serialize(),\n },\n }])[0]);\n } else {\n return '';\n }\n};\n"],"file":"gradingpanel.min.js"} \ No newline at end of file diff --git a/grade/grading/form/rubric/amd/src/grades/grader/gradingpanel.js b/grade/grading/form/rubric/amd/src/grades/grader/gradingpanel.js index 9a27ab4c0be..964fd3cc1b5 100644 --- a/grade/grading/form/rubric/amd/src/grades/grader/gradingpanel.js +++ b/grade/grading/form/rubric/amd/src/grades/grader/gradingpanel.js @@ -17,7 +17,6 @@ * Grading panel for gradingform_rubric. * * @module gradingform_rubric/grades/grader/gradingpanel - * @package gradingform_rubric * @copyright 2019 Mathew May * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/h5p/amd/build/editor_display.min.js.map b/h5p/amd/build/editor_display.min.js.map index 09d896b21d1..1f031f57a31 100644 --- a/h5p/amd/build/editor_display.min.js.map +++ b/h5p/amd/build/editor_display.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/editor_display.js"],"names":["init","elementId","editorwrapper","editor","mform","closest","editorupload","h5plibrary","h5pparams","inputname","h5paction","val","H5PEditor","cancelSubmitCallback","$button","is","document","querySelector","setAttribute"],"mappings":"iJAwBA,uDAQO,GAAMA,CAAAA,CAAI,CAAG,SAACC,CAAD,CAAe,IACzBC,CAAAA,CAAa,CAAG,cAAE,IAAMD,CAAR,CADS,CAEzBE,CAAM,CAAG,cAAE,aAAF,CAFgB,CAGzBC,CAAK,CAAGD,CAAM,CAACE,OAAP,CAAe,MAAf,CAHiB,CAIzBC,CAAY,CAAG,cAAE,mBAAF,CAJU,CAKzBC,CAAU,CAAG,cAAE,4BAAF,CALY,CAMzBC,CAAS,CAAG,cAAE,2BAAF,CANa,CAOzBC,CAAS,CAAG,cAAE,sBAAF,CAPa,CAQzBC,CAAS,CAAG,cAAE,2BAAF,CARa,CAe/BA,CAAS,CAACC,GAAV,CAAc,QAAd,EAEAC,SAAS,CAACZ,IAAV,CACII,CADJ,CAEIM,CAFJ,CAGIJ,CAHJ,CAIIJ,CAJJ,CAKIC,CALJ,CAMII,CANJ,CAOIC,CAPJ,CAQI,EARJ,CASIC,CATJ,CAN6B,QAAvBI,CAAAA,oBAAuB,CAASC,CAAT,CAAkB,CAC3C,MAAOA,CAAAA,CAAO,CAACC,EAAR,CAAW,mBAAX,CACV,CAID,EAYAC,QAAQ,CAACC,aAAT,CAAuB,IAAMhB,CAAN,CAAkB,SAAzC,EAAoDiB,YAApD,CAAiE,MAAjE,CAAyE,YAAzE,CACH,CA9BM,C","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 .\n\n/**\n * This module handles the display of the H5P authoring tool.\n *\n * @module core_h5p/editor_display\n * @package core_h5p\n * @copyright 2020 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\n/* global H5PEditor */\n\n/**\n * Display the H5P authoring tool.\n *\n * @param {String} elementId Root element.\n */\nexport const init = (elementId) => {\n const editorwrapper = $('#' + elementId);\n const editor = $('.h5p-editor');\n const mform = editor.closest(\"form\");\n const editorupload = $(\"h5p-editor-upload\");\n const h5plibrary = $('input[name=\"h5plibrary\"]');\n const h5pparams = $('input[name=\"h5pparams\"]');\n const inputname = $('input[name=\"name\"]');\n const h5paction = $('input[name=\"h5paction\"]');\n\n // Cancel validation and submission of form if clicking cancel button.\n const cancelSubmitCallback = function($button) {\n return $button.is('[name=\"cancel\"]');\n };\n\n h5paction.val(\"create\");\n\n H5PEditor.init(\n mform,\n h5paction,\n editorupload,\n editorwrapper,\n editor,\n h5plibrary,\n h5pparams,\n '',\n inputname,\n cancelSubmitCallback\n );\n document.querySelector('#' + elementId + ' iframe').setAttribute('name', 'h5p-editor');\n};\n"],"file":"editor_display.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/editor_display.js"],"names":["init","elementId","editorwrapper","editor","mform","closest","editorupload","h5plibrary","h5pparams","inputname","h5paction","val","H5PEditor","cancelSubmitCallback","$button","is","document","querySelector","setAttribute"],"mappings":"iJAuBA,uDAQO,GAAMA,CAAAA,CAAI,CAAG,SAACC,CAAD,CAAe,IACzBC,CAAAA,CAAa,CAAG,cAAE,IAAMD,CAAR,CADS,CAEzBE,CAAM,CAAG,cAAE,aAAF,CAFgB,CAGzBC,CAAK,CAAGD,CAAM,CAACE,OAAP,CAAe,MAAf,CAHiB,CAIzBC,CAAY,CAAG,cAAE,mBAAF,CAJU,CAKzBC,CAAU,CAAG,cAAE,4BAAF,CALY,CAMzBC,CAAS,CAAG,cAAE,2BAAF,CANa,CAOzBC,CAAS,CAAG,cAAE,sBAAF,CAPa,CAQzBC,CAAS,CAAG,cAAE,2BAAF,CARa,CAe/BA,CAAS,CAACC,GAAV,CAAc,QAAd,EAEAC,SAAS,CAACZ,IAAV,CACII,CADJ,CAEIM,CAFJ,CAGIJ,CAHJ,CAIIJ,CAJJ,CAKIC,CALJ,CAMII,CANJ,CAOIC,CAPJ,CAQI,EARJ,CASIC,CATJ,CAN6B,QAAvBI,CAAAA,oBAAuB,CAASC,CAAT,CAAkB,CAC3C,MAAOA,CAAAA,CAAO,CAACC,EAAR,CAAW,mBAAX,CACV,CAID,EAYAC,QAAQ,CAACC,aAAT,CAAuB,IAAMhB,CAAN,CAAkB,SAAzC,EAAoDiB,YAApD,CAAiE,MAAjE,CAAyE,YAAzE,CACH,CA9BM,C","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 .\n\n/**\n * This module handles the display of the H5P authoring tool.\n *\n * @module core_h5p/editor_display\n * @copyright 2020 Victor Deniz \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\n/* global H5PEditor */\n\n/**\n * Display the H5P authoring tool.\n *\n * @param {String} elementId Root element.\n */\nexport const init = (elementId) => {\n const editorwrapper = $('#' + elementId);\n const editor = $('.h5p-editor');\n const mform = editor.closest(\"form\");\n const editorupload = $(\"h5p-editor-upload\");\n const h5plibrary = $('input[name=\"h5plibrary\"]');\n const h5pparams = $('input[name=\"h5pparams\"]');\n const inputname = $('input[name=\"name\"]');\n const h5paction = $('input[name=\"h5paction\"]');\n\n // Cancel validation and submission of form if clicking cancel button.\n const cancelSubmitCallback = function($button) {\n return $button.is('[name=\"cancel\"]');\n };\n\n h5paction.val(\"create\");\n\n H5PEditor.init(\n mform,\n h5paction,\n editorupload,\n editorwrapper,\n editor,\n h5plibrary,\n h5pparams,\n '',\n inputname,\n cancelSubmitCallback\n );\n document.querySelector('#' + elementId + ' iframe').setAttribute('name', 'h5p-editor');\n};\n"],"file":"editor_display.min.js"} \ No newline at end of file diff --git a/h5p/amd/src/editor_display.js b/h5p/amd/src/editor_display.js index e27dcff01e2..b55a62038f6 100644 --- a/h5p/amd/src/editor_display.js +++ b/h5p/amd/src/editor_display.js @@ -17,7 +17,6 @@ * This module handles the display of the H5P authoring tool. * * @module core_h5p/editor_display - * @package core_h5p * @copyright 2020 Victor Deniz * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/lib/amd/build/addblockmodal.min.js.map b/lib/amd/build/addblockmodal.min.js.map index 839aaa57792..f1f89717670 100644 --- a/lib/amd/build/addblockmodal.min.js.map +++ b/lib/amd/build/addblockmodal.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/addblockmodal.js"],"names":["define","$","ModalFactory","Templates","Str","Notification","init","context","addblocklink","titlerequests","blocks","map","blockName","key","component","bodyPromise","get_strings","then","titles","title","index","name","render","fail","exception","titlePromise","get_string","create","body","type"],"mappings":"AAwBAA,OAAM,sBAAC,CAAC,QAAD,CAAW,oBAAX,CAAiC,gBAAjC,CAAmD,UAAnD,CAA+D,mBAA/D,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAqCC,CAArC,CAA0CC,CAA1C,CAAwD,CAG3D,MAA+C,CAO3CC,IAAI,CAAE,cAASC,CAAT,CAAkB,IAChBC,CAAAA,CAAY,CAAGP,CAAC,CAAC,qBAAD,CADA,CAIhBQ,CAAa,CAAGF,CAAO,CAACG,MAAR,CAAeC,GAAf,CAAmB,SAASC,CAAT,CAAoB,CACvD,MAAO,CACHC,GAAG,CAAE,YADF,CAEHC,SAAS,CAAE,SAAWF,CAFnB,CAIV,CALmB,CAJA,CAWhBG,CAAW,CAAGX,CAAG,CAACY,WAAJ,CAAgBP,CAAhB,EACjBQ,IADiB,CACZ,SAASC,CAAT,CAAiB,CACnB,MAAOA,CAAAA,CAAM,CAACP,GAAP,CAAW,SAASQ,CAAT,CAAgBC,CAAhB,CAAuB,CACrC,MAAO,CACHC,IAAI,CAAEd,CAAO,CAACG,MAAR,CAAeU,CAAf,CADH,CAEHD,KAAK,CAAEA,CAFJ,CAIV,CALM,CAMV,CARiB,EASjBF,IATiB,CASZ,SAASP,CAAT,CAAiB,CACnBH,CAAO,CAACG,MAAR,CAAiBA,CAAjB,CACA,MAAOP,CAAAA,CAAS,CAACmB,MAAV,CAAiB,qBAAjB,CAAwCf,CAAxC,CACV,CAZiB,EAajBgB,IAbiB,CAaZlB,CAAY,CAACmB,SAbD,CAXE,CA0BhBC,CAAY,CAAGrB,CAAG,CAACsB,UAAJ,CAAe,UAAf,EAClBH,IADkB,CACblB,CAAY,CAACmB,SADA,CA1BC,CA6BpBtB,CAAY,CAACyB,MAAb,CAAoB,CAChBR,KAAK,CAAEM,CADS,CAEhBG,IAAI,CAAEb,CAFU,CAGhBc,IAAI,CAAE,QAHU,CAApB,CAIGrB,CAJH,CAKH,CAzC0C,CA2ClD,CA/CK,CAAN","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 .\n\n/**\n * Show an add block modal instead of doing it on a separate page.\n *\n * @module core/addblockmodal\n * @class addblockmodal\n * @package core\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/modal_factory', 'core/templates', 'core/str', 'core/notification'],\n function($, ModalFactory, Templates, Str, Notification) {\n\n\n return /** @alias module:core/addblockmodal */ {\n /**\n * Global init function for this module.\n *\n * @method init\n * @param {Object} context The template context for rendering this modal body.\n */\n init: function(context) {\n var addblocklink = $('[data-key=addblock]');\n\n // We need the fetch the names of the blocks. It was too much to send in the page.\n var titlerequests = context.blocks.map(function(blockName) {\n return {\n key: 'pluginname',\n component: 'block_' + blockName,\n };\n });\n\n var bodyPromise = Str.get_strings(titlerequests)\n .then(function(titles) {\n return titles.map(function(title, index) {\n return {\n name: context.blocks[index],\n title: title,\n };\n });\n })\n .then(function(blocks) {\n context.blocks = blocks;\n return Templates.render('core/add_block_body', context);\n })\n .fail(Notification.exception);\n\n var titlePromise = Str.get_string('addblock')\n .fail(Notification.exception);\n\n ModalFactory.create({\n title: titlePromise,\n body: bodyPromise,\n type: 'CANCEL',\n }, addblocklink);\n }\n };\n});\n"],"file":"addblockmodal.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/addblockmodal.js"],"names":["define","$","ModalFactory","Templates","Str","Notification","init","context","addblocklink","titlerequests","blocks","map","blockName","key","component","bodyPromise","get_strings","then","titles","title","index","name","render","fail","exception","titlePromise","get_string","create","body","type"],"mappings":"AAsBAA,OAAM,sBAAC,CAAC,QAAD,CAAW,oBAAX,CAAiC,gBAAjC,CAAmD,UAAnD,CAA+D,mBAA/D,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAAqCC,CAArC,CAA0CC,CAA1C,CAAwD,CAG3D,MAA+C,CAO3CC,IAAI,CAAE,cAASC,CAAT,CAAkB,IAChBC,CAAAA,CAAY,CAAGP,CAAC,CAAC,qBAAD,CADA,CAIhBQ,CAAa,CAAGF,CAAO,CAACG,MAAR,CAAeC,GAAf,CAAmB,SAASC,CAAT,CAAoB,CACvD,MAAO,CACHC,GAAG,CAAE,YADF,CAEHC,SAAS,CAAE,SAAWF,CAFnB,CAIV,CALmB,CAJA,CAWhBG,CAAW,CAAGX,CAAG,CAACY,WAAJ,CAAgBP,CAAhB,EACjBQ,IADiB,CACZ,SAASC,CAAT,CAAiB,CACnB,MAAOA,CAAAA,CAAM,CAACP,GAAP,CAAW,SAASQ,CAAT,CAAgBC,CAAhB,CAAuB,CACrC,MAAO,CACHC,IAAI,CAAEd,CAAO,CAACG,MAAR,CAAeU,CAAf,CADH,CAEHD,KAAK,CAAEA,CAFJ,CAIV,CALM,CAMV,CARiB,EASjBF,IATiB,CASZ,SAASP,CAAT,CAAiB,CACnBH,CAAO,CAACG,MAAR,CAAiBA,CAAjB,CACA,MAAOP,CAAAA,CAAS,CAACmB,MAAV,CAAiB,qBAAjB,CAAwCf,CAAxC,CACV,CAZiB,EAajBgB,IAbiB,CAaZlB,CAAY,CAACmB,SAbD,CAXE,CA0BhBC,CAAY,CAAGrB,CAAG,CAACsB,UAAJ,CAAe,UAAf,EAClBH,IADkB,CACblB,CAAY,CAACmB,SADA,CA1BC,CA6BpBtB,CAAY,CAACyB,MAAb,CAAoB,CAChBR,KAAK,CAAEM,CADS,CAEhBG,IAAI,CAAEb,CAFU,CAGhBc,IAAI,CAAE,QAHU,CAApB,CAIGrB,CAJH,CAKH,CAzC0C,CA2ClD,CA/CK,CAAN","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 .\n\n/**\n * Show an add block modal instead of doing it on a separate page.\n *\n * @module core/addblockmodal\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/modal_factory', 'core/templates', 'core/str', 'core/notification'],\n function($, ModalFactory, Templates, Str, Notification) {\n\n\n return /** @alias module:core/addblockmodal */ {\n /**\n * Global init function for this module.\n *\n * @method init\n * @param {Object} context The template context for rendering this modal body.\n */\n init: function(context) {\n var addblocklink = $('[data-key=addblock]');\n\n // We need the fetch the names of the blocks. It was too much to send in the page.\n var titlerequests = context.blocks.map(function(blockName) {\n return {\n key: 'pluginname',\n component: 'block_' + blockName,\n };\n });\n\n var bodyPromise = Str.get_strings(titlerequests)\n .then(function(titles) {\n return titles.map(function(title, index) {\n return {\n name: context.blocks[index],\n title: title,\n };\n });\n })\n .then(function(blocks) {\n context.blocks = blocks;\n return Templates.render('core/add_block_body', context);\n })\n .fail(Notification.exception);\n\n var titlePromise = Str.get_string('addblock')\n .fail(Notification.exception);\n\n ModalFactory.create({\n title: titlePromise,\n body: bodyPromise,\n type: 'CANCEL',\n }, addblocklink);\n }\n };\n});\n"],"file":"addblockmodal.min.js"} \ No newline at end of file diff --git a/lib/amd/build/ajax.min.js.map b/lib/amd/build/ajax.min.js.map index c16a4d54cb7..b7caecfbadd 100644 --- a/lib/amd/build/ajax.min.js.map +++ b/lib/amd/build/ajax.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/ajax.js"],"names":["define","$","config","Log","URL","unloading","requestSuccess","responses","requests","exception","i","request","response","nosessionupdate","error","length","deferred","reject","resolve","data","Error","errorcode","window","location","relativeUrl","forEach","requestFail","jqXHR","textStatus","call","async","loginrequired","timeout","cachekey","bind","ajaxRequestData","promises","methodInfo","requestInfo","parseInt","push","index","methodname","args","Deferred","promise","done","fail","sort","join","JSON","stringify","settings","type","context","dataType","processData","contentType","script","url","wwwroot","sesskey","urlUseGet","encodeURIComponent","ajax","success"],"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 .\n\n/**\n * Standard Ajax wrapper for Moodle. It calls the central Ajax script,\n * which can call any existing webservice using the current session.\n * In addition, it can batch multiple requests and return multiple responses.\n *\n * @module core/ajax\n * @class ajax\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(['jquery', 'core/config', 'core/log', 'core/url'], function($, config, Log, URL) {\n\n // Keeps track of when the user leaves the page so we know not to show an error.\n var unloading = false;\n\n /**\n * Success handler. Called when the ajax call succeeds. Checks each response and\n * resolves or rejects the deferred from that request.\n *\n * @method requestSuccess\n * @private\n * @param {Object[]} responses Array of responses containing error, exception and data attributes.\n */\n var requestSuccess = function(responses) {\n // Call each of the success handlers.\n var requests = this,\n exception = null,\n i = 0,\n request,\n response,\n nosessionupdate;\n\n if (responses.error) {\n // There was an error with the request as a whole.\n // We need to reject each promise.\n // Unfortunately this may lead to duplicate dialogues, but each Promise must be rejected.\n for (; i < requests.length; i++) {\n request = requests[i];\n request.deferred.reject(responses);\n }\n\n return;\n }\n\n for (i = 0; i < requests.length; i++) {\n request = requests[i];\n\n response = responses[i];\n // We may not have responses for all the requests.\n if (typeof response !== \"undefined\") {\n if (response.error === false) {\n // Call the done handler if it was provided.\n request.deferred.resolve(response.data);\n } else {\n exception = response.exception;\n nosessionupdate = requests[i].nosessionupdate;\n break;\n }\n } else {\n // This is not an expected case.\n exception = new Error('missing response');\n break;\n }\n }\n // Something failed, reject the remaining promises.\n if (exception !== null) {\n // Redirect to the login page.\n if (exception.errorcode === \"servicerequireslogin\" && !nosessionupdate) {\n window.location = URL.relativeUrl(\"/login/index.php\");\n } else {\n requests.forEach(function(request) {\n request.deferred.reject(exception);\n });\n }\n }\n };\n\n /**\n * Fail handler. Called when the ajax call fails. Rejects all deferreds.\n *\n * @method requestFail\n * @private\n * @param {jqXHR} jqXHR The ajax object.\n * @param {string} textStatus The status string.\n * @param {Error|Object} exception The error thrown.\n */\n var requestFail = function(jqXHR, textStatus, exception) {\n // Reject all the promises.\n var requests = this;\n\n var i = 0;\n for (i = 0; i < requests.length; i++) {\n var request = requests[i];\n\n if (unloading) {\n // No need to trigger an error because we are already navigating.\n Log.error(\"Page unloaded.\");\n Log.error(exception);\n } else {\n request.deferred.reject(exception);\n }\n }\n };\n\n return /** @alias module:core/ajax */ {\n // Public variables and functions.\n /**\n * Make a series of ajax requests and return all the responses.\n *\n * @method call\n * @param {Object[]} requests Array of requests with each containing methodname and args properties.\n * done and fail callbacks can be set for each element in the array, or the\n * can be attached to the promises returned by this function.\n * @param {Boolean} async Optional, defaults to true.\n * If false - this function will not return until the promises are resolved.\n * @param {Boolean} loginrequired Optional, defaults to true.\n * If false - this function will call the faster nologin ajax script - but\n * will fail unless all functions have been marked as 'loginrequired' => false\n * in services.php\n * @param {Boolean} nosessionupdate Optional, defaults to false.\n * If true, the timemodified for the session will not be updated.\n * @param {Integer} timeout number of milliseconds to wait for a response. Defaults to no limit.\n * @param {Integer} cachekey This is used in order to identify the request. If this id changes then we\n * will be sending a different URL and any caching (eg. browser, proxy) knows that it\n * should perform another request and not use the cache. Note - this variable is only\n * used when we are calling 'service-nologin.php'. See MDL-65794.\n * @return {Promise[]} Array of promises that will be resolved when the ajax call returns.\n */\n call: function(requests, async, loginrequired, nosessionupdate, timeout, cachekey) {\n $(window).bind('beforeunload', function() {\n unloading = true;\n });\n var ajaxRequestData = [],\n i,\n promises = [],\n methodInfo = [],\n requestInfo = '';\n\n var maxUrlLength = 2000;\n\n if (typeof loginrequired === \"undefined\") {\n loginrequired = true;\n }\n if (typeof async === \"undefined\") {\n async = true;\n }\n if (typeof timeout === 'undefined') {\n timeout = 0;\n }\n if (typeof cachekey === 'undefined') {\n cachekey = null;\n } else {\n cachekey = parseInt(cachekey);\n if (cachekey <= 0) {\n cachekey = null;\n } else if (!cachekey) {\n cachekey = null;\n }\n }\n\n if (typeof nosessionupdate === \"undefined\") {\n nosessionupdate = false;\n }\n for (i = 0; i < requests.length; i++) {\n var request = requests[i];\n ajaxRequestData.push({\n index: i,\n methodname: request.methodname,\n args: request.args\n });\n request.nosessionupdate = nosessionupdate;\n request.deferred = $.Deferred();\n promises.push(request.deferred.promise());\n // Allow setting done and fail handlers as arguments.\n // This is just a shortcut for the calling code.\n if (typeof request.done !== \"undefined\") {\n request.deferred.done(request.done);\n }\n if (typeof request.fail !== \"undefined\") {\n request.deferred.fail(request.fail);\n }\n request.index = i;\n methodInfo.push(request.methodname);\n }\n\n if (methodInfo.length <= 5) {\n requestInfo = methodInfo.sort().join();\n } else {\n requestInfo = methodInfo.length + '-method-calls';\n }\n\n ajaxRequestData = JSON.stringify(ajaxRequestData);\n var settings = {\n type: 'POST',\n context: requests,\n dataType: 'json',\n processData: false,\n async: async,\n contentType: \"application/json\",\n timeout: timeout\n };\n\n var script = 'service.php';\n var url = config.wwwroot + '/lib/ajax/';\n if (!loginrequired) {\n script = 'service-nologin.php';\n url += script + '?info=' + requestInfo;\n if (cachekey) {\n url += '&cachekey=' + cachekey;\n settings.type = 'GET';\n }\n } else {\n url += script + '?sesskey=' + config.sesskey + '&info=' + requestInfo;\n }\n\n if (nosessionupdate) {\n url += '&nosessionupdate=true';\n }\n\n if (settings.type === 'POST') {\n settings.data = ajaxRequestData;\n } else {\n var urlUseGet = url + '&args=' + encodeURIComponent(ajaxRequestData);\n\n if (urlUseGet.length > maxUrlLength) {\n settings.type = 'POST';\n settings.data = ajaxRequestData;\n } else {\n url = urlUseGet;\n }\n }\n\n // Jquery deprecated done and fail with async=false so we need to do this 2 ways.\n if (async) {\n $.ajax(url, settings)\n .done(requestSuccess)\n .fail(requestFail);\n } else {\n settings.success = requestSuccess;\n settings.error = requestFail;\n $.ajax(url, settings);\n }\n\n return promises;\n }\n };\n});\n"],"file":"ajax.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/ajax.js"],"names":["define","$","config","Log","URL","unloading","requestSuccess","responses","requests","exception","i","request","response","nosessionupdate","error","length","deferred","reject","resolve","data","Error","errorcode","window","location","relativeUrl","forEach","requestFail","jqXHR","textStatus","call","async","loginrequired","timeout","cachekey","bind","ajaxRequestData","promises","methodInfo","requestInfo","parseInt","push","index","methodname","args","Deferred","promise","done","fail","sort","join","JSON","stringify","settings","type","context","dataType","processData","contentType","script","url","wwwroot","sesskey","urlUseGet","encodeURIComponent","ajax","success"],"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 .\n\n/**\n * Standard Ajax wrapper for Moodle. It calls the central Ajax script,\n * which can call any existing webservice using the current session.\n * In addition, it can batch multiple requests and return multiple responses.\n *\n * @module core/ajax\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(['jquery', 'core/config', 'core/log', 'core/url'], function($, config, Log, URL) {\n\n // Keeps track of when the user leaves the page so we know not to show an error.\n var unloading = false;\n\n /**\n * Success handler. Called when the ajax call succeeds. Checks each response and\n * resolves or rejects the deferred from that request.\n *\n * @method requestSuccess\n * @private\n * @param {Object[]} responses Array of responses containing error, exception and data attributes.\n */\n var requestSuccess = function(responses) {\n // Call each of the success handlers.\n var requests = this,\n exception = null,\n i = 0,\n request,\n response,\n nosessionupdate;\n\n if (responses.error) {\n // There was an error with the request as a whole.\n // We need to reject each promise.\n // Unfortunately this may lead to duplicate dialogues, but each Promise must be rejected.\n for (; i < requests.length; i++) {\n request = requests[i];\n request.deferred.reject(responses);\n }\n\n return;\n }\n\n for (i = 0; i < requests.length; i++) {\n request = requests[i];\n\n response = responses[i];\n // We may not have responses for all the requests.\n if (typeof response !== \"undefined\") {\n if (response.error === false) {\n // Call the done handler if it was provided.\n request.deferred.resolve(response.data);\n } else {\n exception = response.exception;\n nosessionupdate = requests[i].nosessionupdate;\n break;\n }\n } else {\n // This is not an expected case.\n exception = new Error('missing response');\n break;\n }\n }\n // Something failed, reject the remaining promises.\n if (exception !== null) {\n // Redirect to the login page.\n if (exception.errorcode === \"servicerequireslogin\" && !nosessionupdate) {\n window.location = URL.relativeUrl(\"/login/index.php\");\n } else {\n requests.forEach(function(request) {\n request.deferred.reject(exception);\n });\n }\n }\n };\n\n /**\n * Fail handler. Called when the ajax call fails. Rejects all deferreds.\n *\n * @method requestFail\n * @private\n * @param {jqXHR} jqXHR The ajax object.\n * @param {string} textStatus The status string.\n * @param {Error|Object} exception The error thrown.\n */\n var requestFail = function(jqXHR, textStatus, exception) {\n // Reject all the promises.\n var requests = this;\n\n var i = 0;\n for (i = 0; i < requests.length; i++) {\n var request = requests[i];\n\n if (unloading) {\n // No need to trigger an error because we are already navigating.\n Log.error(\"Page unloaded.\");\n Log.error(exception);\n } else {\n request.deferred.reject(exception);\n }\n }\n };\n\n return /** @alias module:core/ajax */ {\n // Public variables and functions.\n /**\n * Make a series of ajax requests and return all the responses.\n *\n * @method call\n * @param {Object[]} requests Array of requests with each containing methodname and args properties.\n * done and fail callbacks can be set for each element in the array, or the\n * can be attached to the promises returned by this function.\n * @param {Boolean} async Optional, defaults to true.\n * If false - this function will not return until the promises are resolved.\n * @param {Boolean} loginrequired Optional, defaults to true.\n * If false - this function will call the faster nologin ajax script - but\n * will fail unless all functions have been marked as 'loginrequired' => false\n * in services.php\n * @param {Boolean} nosessionupdate Optional, defaults to false.\n * If true, the timemodified for the session will not be updated.\n * @param {Integer} timeout number of milliseconds to wait for a response. Defaults to no limit.\n * @param {Integer} cachekey This is used in order to identify the request. If this id changes then we\n * will be sending a different URL and any caching (eg. browser, proxy) knows that it\n * should perform another request and not use the cache. Note - this variable is only\n * used when we are calling 'service-nologin.php'. See MDL-65794.\n * @return {Promise[]} Array of promises that will be resolved when the ajax call returns.\n */\n call: function(requests, async, loginrequired, nosessionupdate, timeout, cachekey) {\n $(window).bind('beforeunload', function() {\n unloading = true;\n });\n var ajaxRequestData = [],\n i,\n promises = [],\n methodInfo = [],\n requestInfo = '';\n\n var maxUrlLength = 2000;\n\n if (typeof loginrequired === \"undefined\") {\n loginrequired = true;\n }\n if (typeof async === \"undefined\") {\n async = true;\n }\n if (typeof timeout === 'undefined') {\n timeout = 0;\n }\n if (typeof cachekey === 'undefined') {\n cachekey = null;\n } else {\n cachekey = parseInt(cachekey);\n if (cachekey <= 0) {\n cachekey = null;\n } else if (!cachekey) {\n cachekey = null;\n }\n }\n\n if (typeof nosessionupdate === \"undefined\") {\n nosessionupdate = false;\n }\n for (i = 0; i < requests.length; i++) {\n var request = requests[i];\n ajaxRequestData.push({\n index: i,\n methodname: request.methodname,\n args: request.args\n });\n request.nosessionupdate = nosessionupdate;\n request.deferred = $.Deferred();\n promises.push(request.deferred.promise());\n // Allow setting done and fail handlers as arguments.\n // This is just a shortcut for the calling code.\n if (typeof request.done !== \"undefined\") {\n request.deferred.done(request.done);\n }\n if (typeof request.fail !== \"undefined\") {\n request.deferred.fail(request.fail);\n }\n request.index = i;\n methodInfo.push(request.methodname);\n }\n\n if (methodInfo.length <= 5) {\n requestInfo = methodInfo.sort().join();\n } else {\n requestInfo = methodInfo.length + '-method-calls';\n }\n\n ajaxRequestData = JSON.stringify(ajaxRequestData);\n var settings = {\n type: 'POST',\n context: requests,\n dataType: 'json',\n processData: false,\n async: async,\n contentType: \"application/json\",\n timeout: timeout\n };\n\n var script = 'service.php';\n var url = config.wwwroot + '/lib/ajax/';\n if (!loginrequired) {\n script = 'service-nologin.php';\n url += script + '?info=' + requestInfo;\n if (cachekey) {\n url += '&cachekey=' + cachekey;\n settings.type = 'GET';\n }\n } else {\n url += script + '?sesskey=' + config.sesskey + '&info=' + requestInfo;\n }\n\n if (nosessionupdate) {\n url += '&nosessionupdate=true';\n }\n\n if (settings.type === 'POST') {\n settings.data = ajaxRequestData;\n } else {\n var urlUseGet = url + '&args=' + encodeURIComponent(ajaxRequestData);\n\n if (urlUseGet.length > maxUrlLength) {\n settings.type = 'POST';\n settings.data = ajaxRequestData;\n } else {\n url = urlUseGet;\n }\n }\n\n // Jquery deprecated done and fail with async=false so we need to do this 2 ways.\n if (async) {\n $.ajax(url, settings)\n .done(requestSuccess)\n .fail(requestFail);\n } else {\n settings.success = requestSuccess;\n settings.error = requestFail;\n $.ajax(url, settings);\n }\n\n return promises;\n }\n };\n});\n"],"file":"ajax.min.js"} \ No newline at end of file diff --git a/lib/amd/build/auto_rows.min.js.map b/lib/amd/build/auto_rows.min.js.map index 73e40398b6e..6c6b66eaf64 100644 --- a/lib/amd/build/auto_rows.min.js.map +++ b/lib/amd/build/auto_rows.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/auto_rows.js"],"names":["define","$","SELECTORS","ELEMENT","EVENTS","ROW_CHANGE","calculateRows","element","currentRows","attr","minRows","data","maxRows","height","innerHeight","scrollHeight","rows","css","changeListener","e","target","trigger","init","root","on","bind","events"],"mappings":"AAyBAA,OAAM,kBAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,IACvBC,CAAAA,CAAS,CAAG,CACZC,OAAO,CAAE,kBADG,CADW,CAKvBC,CAAM,CAAG,CACTC,UAAU,CAAE,oBADH,CALc,CAiBvBC,CAAa,CAAG,SAASC,CAAT,CAAkB,IAC9BC,CAAAA,CAAW,CAAGD,CAAO,CAACE,IAAR,CAAa,MAAb,CADgB,CAE9BC,CAAO,CAAGH,CAAO,CAACI,IAAR,CAAa,UAAb,CAFoB,CAG9BC,CAAO,CAAGL,CAAO,CAACE,IAAR,CAAa,eAAb,CAHoB,CAK9BI,CAAM,CAAGN,CAAO,CAACM,MAAR,EALqB,CAM9BC,CAAW,CAAGP,CAAO,CAACO,WAAR,EANgB,CAS9BC,CAAY,CAAGR,CAAO,CAAC,CAAD,CAAP,CAAWQ,YATI,CAU9BC,CAAI,CAAG,CAACD,CAAY,EAHVD,CAAW,CAAGD,CAGJ,CAAb,GAA4BA,CAAM,CAAGL,CAArC,CAVuB,CAclCD,CAAO,CAACU,GAAR,CAAY,QAAZ,CAAsB,EAAtB,EAEA,GAAID,CAAI,CAAGN,CAAX,CAAoB,CAChB,MAAOA,CAAAA,CACV,CAFD,IAEO,IAAIE,CAAO,EAAII,CAAI,EAAIJ,CAAvB,CAAgC,CACnC,MAAOA,CAAAA,CACV,CAFM,IAEA,CACH,MAAOI,CAAAA,CACV,CACJ,CAxC0B,CAiDvBE,CAAc,CAAG,SAASC,CAAT,CAAY,IACzBZ,CAAAA,CAAO,CAAGN,CAAC,CAACkB,CAAC,CAACC,MAAH,CADc,CAEzBV,CAAO,CAAGH,CAAO,CAACI,IAAR,CAAa,UAAb,CAFe,CAGzBH,CAAW,CAAGD,CAAO,CAACE,IAAR,CAAa,MAAb,CAHW,CAK7B,GAAuB,WAAnB,QAAOC,CAAAA,CAAX,CAAoC,CAChCH,CAAO,CAACI,IAAR,CAAa,UAAb,CAAyBH,CAAzB,CACH,CAIDD,CAAO,CAACE,IAAR,CAAa,MAAb,CAAqB,CAArB,EACA,GAAIO,CAAAA,CAAI,CAAGV,CAAa,CAACC,CAAD,CAAxB,CACAA,CAAO,CAACE,IAAR,CAAa,MAAb,CAAqBO,CAArB,EAEA,GAAIA,CAAI,EAAIR,CAAZ,CAAyB,CACrBD,CAAO,CAACc,OAAR,CAAgBjB,CAAM,CAACC,UAAvB,CACH,CACJ,CAnE0B,CAoF3B,MAAqC,CACjCiB,IAAI,CATG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAe,CACtB,GAAItB,CAAC,CAACsB,CAAD,CAAD,CAAQZ,IAAR,CAAa,WAAb,CAAJ,CAA+B,CAC3BV,CAAC,CAACsB,CAAD,CAAD,CAAQC,EAAR,CAAW,sBAAX,CAAmCN,CAAc,CAACO,IAAf,CAAoB,IAApB,CAAnC,CACH,CAFD,IAEO,CACHxB,CAAC,CAACsB,CAAD,CAAD,CAAQC,EAAR,CAAW,sBAAX,CAAmCtB,CAAS,CAACC,OAA7C,CAAsDe,CAAc,CAACO,IAAf,CAAoB,IAApB,CAAtD,CACH,CACJ,CAEoC,CAEjCC,MAAM,CAAEtB,CAFyB,CAIxC,CAxFK,CAAN","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 .\n\n/**\n * Enhance a textarea with auto growing rows to fit the content.\n *\n * @module core/auto_rows\n * @class auto_rows\n * @package core\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.2\n */\ndefine(['jquery'], function($) {\n var SELECTORS = {\n ELEMENT: '[data-auto-rows]'\n };\n\n var EVENTS = {\n ROW_CHANGE: 'autorows:rowchange',\n };\n\n /**\n * Determine how many rows should be set for the given element.\n *\n * @method calculateRows\n * @param {jQuery} element The textarea element\n * @return {int} The number of rows for the element\n * @private\n */\n var calculateRows = function(element) {\n var currentRows = element.attr('rows');\n var minRows = element.data('min-rows');\n var maxRows = element.attr('data-max-rows');\n\n var height = element.height();\n var innerHeight = element.innerHeight();\n var padding = innerHeight - height;\n\n var scrollHeight = element[0].scrollHeight;\n var rows = (scrollHeight - padding) / (height / currentRows);\n\n // Remove the height styling to let the height be calculated automatically\n // based on the row attribute.\n element.css('height', '');\n\n if (rows < minRows) {\n return minRows;\n } else if (maxRows && rows >= maxRows) {\n return maxRows;\n } else {\n return rows;\n }\n };\n\n /**\n * Listener for change events to trigger resizing of the element.\n *\n * @method changeListener\n * @param {Event} e The triggered event.\n * @private\n */\n var changeListener = function(e) {\n var element = $(e.target);\n var minRows = element.data('min-rows');\n var currentRows = element.attr('rows');\n\n if (typeof minRows === \"undefined\") {\n element.data('min-rows', currentRows);\n }\n\n // Reset element to single row so that the scroll height of the\n // element is correctly calculated each time.\n element.attr('rows', 1);\n var rows = calculateRows(element);\n element.attr('rows', rows);\n\n if (rows != currentRows) {\n element.trigger(EVENTS.ROW_CHANGE);\n }\n };\n\n /**\n * Add the event listeners for all text areas within the given element.\n *\n * @method init\n * @param {jQuery|selector} root The container element of all enhanced text areas\n * @public\n */\n var init = function(root) {\n if ($(root).data('auto-rows')) {\n $(root).on('input propertychange', changeListener.bind(this));\n } else {\n $(root).on('input propertychange', SELECTORS.ELEMENT, changeListener.bind(this));\n }\n };\n\n return /** @module core/auto_rows */ {\n init: init,\n events: EVENTS,\n };\n});\n"],"file":"auto_rows.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/auto_rows.js"],"names":["define","$","SELECTORS","ELEMENT","EVENTS","ROW_CHANGE","calculateRows","element","currentRows","attr","minRows","data","maxRows","height","innerHeight","scrollHeight","rows","css","changeListener","e","target","trigger","init","root","on","bind","events"],"mappings":"AAwBAA,OAAM,kBAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,IACvBC,CAAAA,CAAS,CAAG,CACZC,OAAO,CAAE,kBADG,CADW,CAKvBC,CAAM,CAAG,CACTC,UAAU,CAAE,oBADH,CALc,CAiBvBC,CAAa,CAAG,SAASC,CAAT,CAAkB,IAC9BC,CAAAA,CAAW,CAAGD,CAAO,CAACE,IAAR,CAAa,MAAb,CADgB,CAE9BC,CAAO,CAAGH,CAAO,CAACI,IAAR,CAAa,UAAb,CAFoB,CAG9BC,CAAO,CAAGL,CAAO,CAACE,IAAR,CAAa,eAAb,CAHoB,CAK9BI,CAAM,CAAGN,CAAO,CAACM,MAAR,EALqB,CAM9BC,CAAW,CAAGP,CAAO,CAACO,WAAR,EANgB,CAS9BC,CAAY,CAAGR,CAAO,CAAC,CAAD,CAAP,CAAWQ,YATI,CAU9BC,CAAI,CAAG,CAACD,CAAY,EAHVD,CAAW,CAAGD,CAGJ,CAAb,GAA4BA,CAAM,CAAGL,CAArC,CAVuB,CAclCD,CAAO,CAACU,GAAR,CAAY,QAAZ,CAAsB,EAAtB,EAEA,GAAID,CAAI,CAAGN,CAAX,CAAoB,CAChB,MAAOA,CAAAA,CACV,CAFD,IAEO,IAAIE,CAAO,EAAII,CAAI,EAAIJ,CAAvB,CAAgC,CACnC,MAAOA,CAAAA,CACV,CAFM,IAEA,CACH,MAAOI,CAAAA,CACV,CACJ,CAxC0B,CAiDvBE,CAAc,CAAG,SAASC,CAAT,CAAY,IACzBZ,CAAAA,CAAO,CAAGN,CAAC,CAACkB,CAAC,CAACC,MAAH,CADc,CAEzBV,CAAO,CAAGH,CAAO,CAACI,IAAR,CAAa,UAAb,CAFe,CAGzBH,CAAW,CAAGD,CAAO,CAACE,IAAR,CAAa,MAAb,CAHW,CAK7B,GAAuB,WAAnB,QAAOC,CAAAA,CAAX,CAAoC,CAChCH,CAAO,CAACI,IAAR,CAAa,UAAb,CAAyBH,CAAzB,CACH,CAIDD,CAAO,CAACE,IAAR,CAAa,MAAb,CAAqB,CAArB,EACA,GAAIO,CAAAA,CAAI,CAAGV,CAAa,CAACC,CAAD,CAAxB,CACAA,CAAO,CAACE,IAAR,CAAa,MAAb,CAAqBO,CAArB,EAEA,GAAIA,CAAI,EAAIR,CAAZ,CAAyB,CACrBD,CAAO,CAACc,OAAR,CAAgBjB,CAAM,CAACC,UAAvB,CACH,CACJ,CAnE0B,CAoF3B,MAAqC,CACjCiB,IAAI,CATG,QAAPA,CAAAA,IAAO,CAASC,CAAT,CAAe,CACtB,GAAItB,CAAC,CAACsB,CAAD,CAAD,CAAQZ,IAAR,CAAa,WAAb,CAAJ,CAA+B,CAC3BV,CAAC,CAACsB,CAAD,CAAD,CAAQC,EAAR,CAAW,sBAAX,CAAmCN,CAAc,CAACO,IAAf,CAAoB,IAApB,CAAnC,CACH,CAFD,IAEO,CACHxB,CAAC,CAACsB,CAAD,CAAD,CAAQC,EAAR,CAAW,sBAAX,CAAmCtB,CAAS,CAACC,OAA7C,CAAsDe,CAAc,CAACO,IAAf,CAAoB,IAApB,CAAtD,CACH,CACJ,CAEoC,CAEjCC,MAAM,CAAEtB,CAFyB,CAIxC,CAxFK,CAAN","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 .\n\n/**\n * Enhance a textarea with auto growing rows to fit the content.\n *\n * @module core/auto_rows\n * @class auto_rows\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.2\n */\ndefine(['jquery'], function($) {\n var SELECTORS = {\n ELEMENT: '[data-auto-rows]'\n };\n\n var EVENTS = {\n ROW_CHANGE: 'autorows:rowchange',\n };\n\n /**\n * Determine how many rows should be set for the given element.\n *\n * @method calculateRows\n * @param {jQuery} element The textarea element\n * @return {int} The number of rows for the element\n * @private\n */\n var calculateRows = function(element) {\n var currentRows = element.attr('rows');\n var minRows = element.data('min-rows');\n var maxRows = element.attr('data-max-rows');\n\n var height = element.height();\n var innerHeight = element.innerHeight();\n var padding = innerHeight - height;\n\n var scrollHeight = element[0].scrollHeight;\n var rows = (scrollHeight - padding) / (height / currentRows);\n\n // Remove the height styling to let the height be calculated automatically\n // based on the row attribute.\n element.css('height', '');\n\n if (rows < minRows) {\n return minRows;\n } else if (maxRows && rows >= maxRows) {\n return maxRows;\n } else {\n return rows;\n }\n };\n\n /**\n * Listener for change events to trigger resizing of the element.\n *\n * @method changeListener\n * @param {Event} e The triggered event.\n * @private\n */\n var changeListener = function(e) {\n var element = $(e.target);\n var minRows = element.data('min-rows');\n var currentRows = element.attr('rows');\n\n if (typeof minRows === \"undefined\") {\n element.data('min-rows', currentRows);\n }\n\n // Reset element to single row so that the scroll height of the\n // element is correctly calculated each time.\n element.attr('rows', 1);\n var rows = calculateRows(element);\n element.attr('rows', rows);\n\n if (rows != currentRows) {\n element.trigger(EVENTS.ROW_CHANGE);\n }\n };\n\n /**\n * Add the event listeners for all text areas within the given element.\n *\n * @method init\n * @param {jQuery|selector} root The container element of all enhanced text areas\n * @public\n */\n var init = function(root) {\n if ($(root).data('auto-rows')) {\n $(root).on('input propertychange', changeListener.bind(this));\n } else {\n $(root).on('input propertychange', SELECTORS.ELEMENT, changeListener.bind(this));\n }\n };\n\n return /** @module core/auto_rows */ {\n init: init,\n events: EVENTS,\n };\n});\n"],"file":"auto_rows.min.js"} \ No newline at end of file diff --git a/lib/amd/build/autoscroll.min.js.map b/lib/amd/build/autoscroll.min.js.map index ee4da657e02..4b28e791c68 100644 --- a/lib/amd/build/autoscroll.min.js.map +++ b/lib/amd/build/autoscroll.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/autoscroll.js"],"names":["define","$","autoscroll","SCROLL_THRESHOLD","SCROLL_FREQUENCY","SCROLL_SPEED","scrollingId","scrollAmount","callback","start","window","on","mouseMove","touchMove","stop","off","stopScrolling","e","i","changedTouches","length","handleMove","clientX","clientY","Math","min","height","startScrolling","maxScroll","document","setInterval","y","scrollTop","offset","round","realOffset","clearInterval"],"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 .\n\n/*\n * JavaScript to provide automatic scrolling, e.g. during a drag operation.\n *\n * Note: this module is defined statically. It is a singleton. You\n * can only have one use of it active at any time. However, since this\n * is usually used in relation to drag-drop, and since you only ever\n * drag one thing at a time, this is not a problem in practice.\n *\n * @module core/autoscroll\n * @class autoscroll\n * @package core\n * @copyright 2016 The Open University\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.6\n */\ndefine(['jquery'], function($) {\n /**\n * @alias module:core/autoscroll\n */\n var autoscroll = {\n /**\n * Size of area near edge of screen that triggers scrolling.\n * @private\n */\n SCROLL_THRESHOLD: 30,\n\n /**\n * How frequently to scroll window.\n * @private\n */\n SCROLL_FREQUENCY: 1000 / 60,\n\n /**\n * How many pixels to scroll per unit (1 = max scroll 30).\n * @private\n */\n SCROLL_SPEED: 0.5,\n\n /**\n * Set if currently scrolling up/down.\n * @private\n */\n scrollingId: null,\n\n /**\n * Speed we are supposed to scroll (range 1 to SCROLL_THRESHOLD).\n * @private\n */\n scrollAmount: 0,\n\n /**\n * Optional callback called when it scrolls\n * @private\n */\n callback: null,\n\n /**\n * Starts automatically scrolling if user moves near edge of window.\n * This should be called in response to mouse down or touch start.\n *\n * @public\n * @param {Function} callback Optional callback that is called every time it scrolls\n */\n start: function(callback) {\n $(window).on('mousemove', autoscroll.mouseMove);\n $(window).on('touchmove', autoscroll.touchMove);\n autoscroll.callback = callback;\n },\n\n /**\n * Stops automatically scrolling. This should be called in response to mouse up or touch end.\n *\n * @public\n */\n stop: function() {\n $(window).off('mousemove', autoscroll.mouseMove);\n $(window).off('touchmove', autoscroll.touchMove);\n if (autoscroll.scrollingId !== null) {\n autoscroll.stopScrolling();\n }\n },\n\n /**\n * Event handler for touch move.\n *\n * @private\n * @param {Object} e Event\n */\n touchMove: function(e) {\n for (var i = 0; i < e.changedTouches.length; i++) {\n autoscroll.handleMove(e.changedTouches[i].clientX, e.changedTouches[i].clientY);\n }\n },\n\n /**\n * Event handler for mouse move.\n *\n * @private\n * @param {Object} e Event\n */\n mouseMove: function(e) {\n autoscroll.handleMove(e.clientX, e.clientY);\n },\n\n /**\n * Handles user moving.\n *\n * @private\n * @param {number} clientX X\n * @param {number} clientY Y\n */\n handleMove: function(clientX, clientY) {\n // If near the bottom or top, start auto-scrolling.\n if (clientY < autoscroll.SCROLL_THRESHOLD) {\n autoscroll.scrollAmount = -Math.min(autoscroll.SCROLL_THRESHOLD - clientY, autoscroll.SCROLL_THRESHOLD);\n } else if (clientY > $(window).height() - autoscroll.SCROLL_THRESHOLD) {\n autoscroll.scrollAmount = Math.min(clientY - ($(window).height() - autoscroll.SCROLL_THRESHOLD),\n autoscroll.SCROLL_THRESHOLD);\n } else {\n autoscroll.scrollAmount = 0;\n }\n if (autoscroll.scrollAmount && autoscroll.scrollingId === null) {\n autoscroll.startScrolling();\n } else if (!autoscroll.scrollAmount && autoscroll.scrollingId !== null) {\n autoscroll.stopScrolling();\n }\n },\n\n /**\n * Starts automatic scrolling.\n *\n * @private\n */\n startScrolling: function() {\n var maxScroll = $(document).height() - $(window).height();\n autoscroll.scrollingId = window.setInterval(function() {\n // Work out how much to scroll.\n var y = $(window).scrollTop();\n var offset = Math.round(autoscroll.scrollAmount * autoscroll.SCROLL_SPEED);\n if (y + offset < 0) {\n offset = -y;\n }\n if (y + offset > maxScroll) {\n offset = maxScroll - y;\n }\n if (offset === 0) {\n return;\n }\n\n // Scroll.\n $(window).scrollTop(y + offset);\n var realOffset = $(window).scrollTop() - y;\n if (realOffset === 0) {\n return;\n }\n\n // Inform callback\n if (autoscroll.callback) {\n autoscroll.callback(realOffset);\n }\n\n }, autoscroll.SCROLL_FREQUENCY);\n },\n\n /**\n * Stops the automatic scrolling.\n *\n * @private\n */\n stopScrolling: function() {\n window.clearInterval(autoscroll.scrollingId);\n autoscroll.scrollingId = null;\n }\n };\n\n return {\n /**\n * Starts automatic scrolling if user moves near edge of window.\n * This should be called in response to mouse down or touch start.\n *\n * @public\n * @param {Function} callback Optional callback that is called every time it scrolls\n */\n start: autoscroll.start,\n\n /**\n * Stops automatic scrolling. This should be called in response to mouse up or touch end.\n *\n * @public\n */\n stop: autoscroll.stop\n };\n\n});\n"],"file":"autoscroll.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/autoscroll.js"],"names":["define","$","autoscroll","SCROLL_THRESHOLD","SCROLL_FREQUENCY","SCROLL_SPEED","scrollingId","scrollAmount","callback","start","window","on","mouseMove","touchMove","stop","off","stopScrolling","e","i","changedTouches","length","handleMove","clientX","clientY","Math","min","height","startScrolling","maxScroll","document","setInterval","y","scrollTop","offset","round","realOffset","clearInterval"],"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 .\n\n/*\n * JavaScript to provide automatic scrolling, e.g. during a drag operation.\n *\n * Note: this module is defined statically. It is a singleton. You\n * can only have one use of it active at any time. However, since this\n * is usually used in relation to drag-drop, and since you only ever\n * drag one thing at a time, this is not a problem in practice.\n *\n * @module core/autoscroll\n * @class autoscroll\n * @copyright 2016 The Open University\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.6\n */\ndefine(['jquery'], function($) {\n /**\n * @alias module:core/autoscroll\n */\n var autoscroll = {\n /**\n * Size of area near edge of screen that triggers scrolling.\n * @private\n */\n SCROLL_THRESHOLD: 30,\n\n /**\n * How frequently to scroll window.\n * @private\n */\n SCROLL_FREQUENCY: 1000 / 60,\n\n /**\n * How many pixels to scroll per unit (1 = max scroll 30).\n * @private\n */\n SCROLL_SPEED: 0.5,\n\n /**\n * Set if currently scrolling up/down.\n * @private\n */\n scrollingId: null,\n\n /**\n * Speed we are supposed to scroll (range 1 to SCROLL_THRESHOLD).\n * @private\n */\n scrollAmount: 0,\n\n /**\n * Optional callback called when it scrolls\n * @private\n */\n callback: null,\n\n /**\n * Starts automatically scrolling if user moves near edge of window.\n * This should be called in response to mouse down or touch start.\n *\n * @public\n * @param {Function} callback Optional callback that is called every time it scrolls\n */\n start: function(callback) {\n $(window).on('mousemove', autoscroll.mouseMove);\n $(window).on('touchmove', autoscroll.touchMove);\n autoscroll.callback = callback;\n },\n\n /**\n * Stops automatically scrolling. This should be called in response to mouse up or touch end.\n *\n * @public\n */\n stop: function() {\n $(window).off('mousemove', autoscroll.mouseMove);\n $(window).off('touchmove', autoscroll.touchMove);\n if (autoscroll.scrollingId !== null) {\n autoscroll.stopScrolling();\n }\n },\n\n /**\n * Event handler for touch move.\n *\n * @private\n * @param {Object} e Event\n */\n touchMove: function(e) {\n for (var i = 0; i < e.changedTouches.length; i++) {\n autoscroll.handleMove(e.changedTouches[i].clientX, e.changedTouches[i].clientY);\n }\n },\n\n /**\n * Event handler for mouse move.\n *\n * @private\n * @param {Object} e Event\n */\n mouseMove: function(e) {\n autoscroll.handleMove(e.clientX, e.clientY);\n },\n\n /**\n * Handles user moving.\n *\n * @private\n * @param {number} clientX X\n * @param {number} clientY Y\n */\n handleMove: function(clientX, clientY) {\n // If near the bottom or top, start auto-scrolling.\n if (clientY < autoscroll.SCROLL_THRESHOLD) {\n autoscroll.scrollAmount = -Math.min(autoscroll.SCROLL_THRESHOLD - clientY, autoscroll.SCROLL_THRESHOLD);\n } else if (clientY > $(window).height() - autoscroll.SCROLL_THRESHOLD) {\n autoscroll.scrollAmount = Math.min(clientY - ($(window).height() - autoscroll.SCROLL_THRESHOLD),\n autoscroll.SCROLL_THRESHOLD);\n } else {\n autoscroll.scrollAmount = 0;\n }\n if (autoscroll.scrollAmount && autoscroll.scrollingId === null) {\n autoscroll.startScrolling();\n } else if (!autoscroll.scrollAmount && autoscroll.scrollingId !== null) {\n autoscroll.stopScrolling();\n }\n },\n\n /**\n * Starts automatic scrolling.\n *\n * @private\n */\n startScrolling: function() {\n var maxScroll = $(document).height() - $(window).height();\n autoscroll.scrollingId = window.setInterval(function() {\n // Work out how much to scroll.\n var y = $(window).scrollTop();\n var offset = Math.round(autoscroll.scrollAmount * autoscroll.SCROLL_SPEED);\n if (y + offset < 0) {\n offset = -y;\n }\n if (y + offset > maxScroll) {\n offset = maxScroll - y;\n }\n if (offset === 0) {\n return;\n }\n\n // Scroll.\n $(window).scrollTop(y + offset);\n var realOffset = $(window).scrollTop() - y;\n if (realOffset === 0) {\n return;\n }\n\n // Inform callback\n if (autoscroll.callback) {\n autoscroll.callback(realOffset);\n }\n\n }, autoscroll.SCROLL_FREQUENCY);\n },\n\n /**\n * Stops the automatic scrolling.\n *\n * @private\n */\n stopScrolling: function() {\n window.clearInterval(autoscroll.scrollingId);\n autoscroll.scrollingId = null;\n }\n };\n\n return {\n /**\n * Starts automatic scrolling if user moves near edge of window.\n * This should be called in response to mouse down or touch start.\n *\n * @public\n * @param {Function} callback Optional callback that is called every time it scrolls\n */\n start: autoscroll.start,\n\n /**\n * Stops automatic scrolling. This should be called in response to mouse up or touch end.\n *\n * @public\n */\n stop: autoscroll.stop\n };\n\n});\n"],"file":"autoscroll.min.js"} \ No newline at end of file diff --git a/lib/amd/build/backoff_timer.min.js.map b/lib/amd/build/backoff_timer.min.js.map index 81909b8cfea..9dda8c082f7 100644 --- a/lib/amd/build/backoff_timer.min.js.map +++ b/lib/amd/build/backoff_timer.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/backoff_timer.js"],"names":["define","BackoffTimer","callback","backoffFunction","backOffFunction","prototype","time","timeout","generateNextTime","newTime","reset","stop","window","clearTimeout","start","setTimeout","bind","restart","getIncrementalCallback","minamount","incrementamount","maxamount","timeoutamount"],"mappings":"AAyBAA,OAAM,sBAAC,UAAW,CAQd,GAAIC,CAAAA,CAAY,CAAG,SAASC,CAAT,CAAmBC,CAAnB,CAAoC,CACnD,KAAKD,QAAL,CAAgBA,CAAhB,CACA,KAAKE,eAAL,CAAuBD,CAC1B,CAHD,CAQAF,CAAY,CAACI,SAAb,CAAuBH,QAAvB,CAAkC,IAAlC,CAKAD,CAAY,CAACI,SAAb,CAAuBD,eAAvB,CAAyC,IAAzC,CAKAH,CAAY,CAACI,SAAb,CAAuBC,IAAvB,CAA8B,IAA9B,CAKAL,CAAY,CAACI,SAAb,CAAuBE,OAAvB,CAAiC,IAAjC,CAYAN,CAAY,CAACI,SAAb,CAAuBG,gBAAvB,CAA0C,UAAW,CACjD,GAAIC,CAAAA,CAAO,CAAG,KAAKL,eAAL,CAAqB,KAAKE,IAA1B,CAAd,CACA,KAAKA,IAAL,CAAYG,CAAZ,CAEA,MAAOA,CAAAA,CACV,CALD,CAaAR,CAAY,CAACI,SAAb,CAAuBK,KAAvB,CAA+B,UAAW,CACtC,KAAKJ,IAAL,CAAY,IAAZ,CACA,KAAKK,IAAL,GAEA,MAAO,KACV,CALD,CAaAV,CAAY,CAACI,SAAb,CAAuBM,IAAvB,CAA8B,UAAW,CACrC,GAAI,KAAKJ,OAAT,CAAkB,CACdK,MAAM,CAACC,YAAP,CAAoB,KAAKN,OAAzB,EACA,KAAKA,OAAL,CAAe,IAClB,CAED,MAAO,KACV,CAPD,CAqBAN,CAAY,CAACI,SAAb,CAAuBS,KAAvB,CAA+B,UAAW,CAEtC,GAAI,CAAC,KAAKP,OAAV,CAAmB,CACf,GAAID,CAAAA,CAAI,CAAG,KAAKE,gBAAL,EAAX,CACA,KAAKD,OAAL,CAAeK,MAAM,CAACG,UAAP,CAAkB,UAAW,CACxC,KAAKb,QAAL,GAEA,KAAKS,IAAL,GAEA,KAAKG,KAAL,EACH,CANgC,CAM/BE,IAN+B,CAM1B,IAN0B,CAAlB,CAMDV,CANC,CAOlB,CAED,MAAO,KACV,CAdD,CAuBAL,CAAY,CAACI,SAAb,CAAuBY,OAAvB,CAAiC,UAAW,CACxC,MAAO,MAAKP,KAAL,GAAaI,KAAb,EACV,CAFD,CAaCb,CAAY,CAACiB,sBAAb,CAAsC,SAASC,CAAT,CAAoBC,CAApB,CAAqCC,CAArC,CAAgDC,CAAhD,CAA+D,CAQlG,MAAO,UAAShB,CAAT,CAAe,CAClB,GAAI,CAACA,CAAL,CAAW,CACP,MAAOa,CAAAA,CACV,CAGD,GAAIb,CAAI,CAAGc,CAAP,CAAyBC,CAA7B,CAAwC,CACpC,MAAOC,CAAAA,CACV,CAED,MAAOhB,CAAAA,CAAI,CAAGc,CACjB,CACJ,CApBA,CAsBD,MAAOnB,CAAAA,CACV,CArJK,CAAN","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 .\n\n/**\n * A timer that will execute a callback with decreasing frequency. Useful for\n * doing polling on the server without overwhelming it with requests.\n *\n * @module core/backoff_timer\n * @class backoff_timer\n * @package core\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(function() {\n\n /**\n * Constructor for the back off timer.\n *\n * @param {function} callback The function to execute after each tick\n * @param {function} backoffFunction The function to determine what the next timeout value should be\n */\n var BackoffTimer = function(callback, backoffFunction) {\n this.callback = callback;\n this.backOffFunction = backoffFunction;\n };\n\n /**\n * @type {function} callback The function to execute after each tick\n */\n BackoffTimer.prototype.callback = null;\n\n /**\n * @type {function} backoffFunction The function to determine what the next timeout value should be\n */\n BackoffTimer.prototype.backOffFunction = null;\n\n /**\n * @type {int} time The timeout value to use\n */\n BackoffTimer.prototype.time = null;\n\n /**\n * @type {numeric} timeout The timeout identifier\n */\n BackoffTimer.prototype.timeout = null;\n\n /**\n * Generate the next timeout in the back off time sequence\n * for the timer.\n *\n * The back off function is called to calculate the next value.\n * It is given the current value and an array of all previous values.\n *\n * @method generateNextTime\n * @return {int} The new timeout value (in milliseconds)\n */\n BackoffTimer.prototype.generateNextTime = function() {\n var newTime = this.backOffFunction(this.time);\n this.time = newTime;\n\n return newTime;\n };\n\n /**\n * Stop the current timer and clear the previous time values\n *\n * @method reset\n * @return {object} this\n */\n BackoffTimer.prototype.reset = function() {\n this.time = null;\n this.stop();\n\n return this;\n };\n\n /**\n * Clear the current timeout, if one is set.\n *\n * @method stop\n * @return {object} this\n */\n BackoffTimer.prototype.stop = function() {\n if (this.timeout) {\n window.clearTimeout(this.timeout);\n this.timeout = null;\n }\n\n return this;\n };\n\n /**\n * Start the current timer by generating the new timeout value and\n * starting the ticks.\n *\n * This function recurses after each tick with a new timeout value\n * generated each time.\n *\n * The callback function is called after each tick.\n *\n * @method start\n * @return {object} this\n */\n BackoffTimer.prototype.start = function() {\n // If we haven't already started.\n if (!this.timeout) {\n var time = this.generateNextTime();\n this.timeout = window.setTimeout(function() {\n this.callback();\n // Clear the existing timer.\n this.stop();\n // Start the next timer.\n this.start();\n }.bind(this), time);\n }\n\n return this;\n };\n\n /**\n * Reset the timer and start it again from the initial timeout\n * values\n *\n * @method restart\n * @return {object} this\n */\n BackoffTimer.prototype.restart = function() {\n return this.reset().start();\n };\n\n /**\n * Returns an incremental function for the timer.\n *\n * @param {int} minamount The minimum amount of time we wait before checking\n * @param {int} incrementamount The amount to increment the timer by\n * @param {int} maxamount The max amount to ever increment to\n * @param {int} timeoutamount The timeout to use once we reach the max amount\n * @return {function}\n */\n BackoffTimer.getIncrementalCallback = function(minamount, incrementamount, maxamount, timeoutamount) {\n\n /**\n * An incremental function for the timer.\n *\n * @param {(int|null)} time The current timeout value or null if none set\n * @return {int} The new timeout value\n */\n return function(time) {\n if (!time) {\n return minamount;\n }\n\n // Don't go over the max amount.\n if (time + incrementamount > maxamount) {\n return timeoutamount;\n }\n\n return time + incrementamount;\n };\n };\n\n return BackoffTimer;\n});\n"],"file":"backoff_timer.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/backoff_timer.js"],"names":["define","BackoffTimer","callback","backoffFunction","backOffFunction","prototype","time","timeout","generateNextTime","newTime","reset","stop","window","clearTimeout","start","setTimeout","bind","restart","getIncrementalCallback","minamount","incrementamount","maxamount","timeoutamount"],"mappings":"AAwBAA,OAAM,sBAAC,UAAW,CAQd,GAAIC,CAAAA,CAAY,CAAG,SAASC,CAAT,CAAmBC,CAAnB,CAAoC,CACnD,KAAKD,QAAL,CAAgBA,CAAhB,CACA,KAAKE,eAAL,CAAuBD,CAC1B,CAHD,CAQAF,CAAY,CAACI,SAAb,CAAuBH,QAAvB,CAAkC,IAAlC,CAKAD,CAAY,CAACI,SAAb,CAAuBD,eAAvB,CAAyC,IAAzC,CAKAH,CAAY,CAACI,SAAb,CAAuBC,IAAvB,CAA8B,IAA9B,CAKAL,CAAY,CAACI,SAAb,CAAuBE,OAAvB,CAAiC,IAAjC,CAYAN,CAAY,CAACI,SAAb,CAAuBG,gBAAvB,CAA0C,UAAW,CACjD,GAAIC,CAAAA,CAAO,CAAG,KAAKL,eAAL,CAAqB,KAAKE,IAA1B,CAAd,CACA,KAAKA,IAAL,CAAYG,CAAZ,CAEA,MAAOA,CAAAA,CACV,CALD,CAaAR,CAAY,CAACI,SAAb,CAAuBK,KAAvB,CAA+B,UAAW,CACtC,KAAKJ,IAAL,CAAY,IAAZ,CACA,KAAKK,IAAL,GAEA,MAAO,KACV,CALD,CAaAV,CAAY,CAACI,SAAb,CAAuBM,IAAvB,CAA8B,UAAW,CACrC,GAAI,KAAKJ,OAAT,CAAkB,CACdK,MAAM,CAACC,YAAP,CAAoB,KAAKN,OAAzB,EACA,KAAKA,OAAL,CAAe,IAClB,CAED,MAAO,KACV,CAPD,CAqBAN,CAAY,CAACI,SAAb,CAAuBS,KAAvB,CAA+B,UAAW,CAEtC,GAAI,CAAC,KAAKP,OAAV,CAAmB,CACf,GAAID,CAAAA,CAAI,CAAG,KAAKE,gBAAL,EAAX,CACA,KAAKD,OAAL,CAAeK,MAAM,CAACG,UAAP,CAAkB,UAAW,CACxC,KAAKb,QAAL,GAEA,KAAKS,IAAL,GAEA,KAAKG,KAAL,EACH,CANgC,CAM/BE,IAN+B,CAM1B,IAN0B,CAAlB,CAMDV,CANC,CAOlB,CAED,MAAO,KACV,CAdD,CAuBAL,CAAY,CAACI,SAAb,CAAuBY,OAAvB,CAAiC,UAAW,CACxC,MAAO,MAAKP,KAAL,GAAaI,KAAb,EACV,CAFD,CAaCb,CAAY,CAACiB,sBAAb,CAAsC,SAASC,CAAT,CAAoBC,CAApB,CAAqCC,CAArC,CAAgDC,CAAhD,CAA+D,CAQlG,MAAO,UAAShB,CAAT,CAAe,CAClB,GAAI,CAACA,CAAL,CAAW,CACP,MAAOa,CAAAA,CACV,CAGD,GAAIb,CAAI,CAAGc,CAAP,CAAyBC,CAA7B,CAAwC,CACpC,MAAOC,CAAAA,CACV,CAED,MAAOhB,CAAAA,CAAI,CAAGc,CACjB,CACJ,CApBA,CAsBD,MAAOnB,CAAAA,CACV,CArJK,CAAN","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 .\n\n/**\n * A timer that will execute a callback with decreasing frequency. Useful for\n * doing polling on the server without overwhelming it with requests.\n *\n * @module core/backoff_timer\n * @class backoff_timer\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(function() {\n\n /**\n * Constructor for the back off timer.\n *\n * @param {function} callback The function to execute after each tick\n * @param {function} backoffFunction The function to determine what the next timeout value should be\n */\n var BackoffTimer = function(callback, backoffFunction) {\n this.callback = callback;\n this.backOffFunction = backoffFunction;\n };\n\n /**\n * @property {function} callback The function to execute after each tick\n */\n BackoffTimer.prototype.callback = null;\n\n /**\n * @property {function} backoffFunction The function to determine what the next timeout value should be\n */\n BackoffTimer.prototype.backOffFunction = null;\n\n /**\n * @property {int} time The timeout value to use\n */\n BackoffTimer.prototype.time = null;\n\n /**\n * @property {numeric} timeout The timeout identifier\n */\n BackoffTimer.prototype.timeout = null;\n\n /**\n * Generate the next timeout in the back off time sequence\n * for the timer.\n *\n * The back off function is called to calculate the next value.\n * It is given the current value and an array of all previous values.\n *\n * @method generateNextTime\n * @return {int} The new timeout value (in milliseconds)\n */\n BackoffTimer.prototype.generateNextTime = function() {\n var newTime = this.backOffFunction(this.time);\n this.time = newTime;\n\n return newTime;\n };\n\n /**\n * Stop the current timer and clear the previous time values\n *\n * @method reset\n * @return {object} this\n */\n BackoffTimer.prototype.reset = function() {\n this.time = null;\n this.stop();\n\n return this;\n };\n\n /**\n * Clear the current timeout, if one is set.\n *\n * @method stop\n * @return {object} this\n */\n BackoffTimer.prototype.stop = function() {\n if (this.timeout) {\n window.clearTimeout(this.timeout);\n this.timeout = null;\n }\n\n return this;\n };\n\n /**\n * Start the current timer by generating the new timeout value and\n * starting the ticks.\n *\n * This function recurses after each tick with a new timeout value\n * generated each time.\n *\n * The callback function is called after each tick.\n *\n * @method start\n * @return {object} this\n */\n BackoffTimer.prototype.start = function() {\n // If we haven't already started.\n if (!this.timeout) {\n var time = this.generateNextTime();\n this.timeout = window.setTimeout(function() {\n this.callback();\n // Clear the existing timer.\n this.stop();\n // Start the next timer.\n this.start();\n }.bind(this), time);\n }\n\n return this;\n };\n\n /**\n * Reset the timer and start it again from the initial timeout\n * values\n *\n * @method restart\n * @return {object} this\n */\n BackoffTimer.prototype.restart = function() {\n return this.reset().start();\n };\n\n /**\n * Returns an incremental function for the timer.\n *\n * @param {int} minamount The minimum amount of time we wait before checking\n * @param {int} incrementamount The amount to increment the timer by\n * @param {int} maxamount The max amount to ever increment to\n * @param {int} timeoutamount The timeout to use once we reach the max amount\n * @return {function}\n */\n BackoffTimer.getIncrementalCallback = function(minamount, incrementamount, maxamount, timeoutamount) {\n\n /**\n * An incremental function for the timer.\n *\n * @param {(int|null)} time The current timeout value or null if none set\n * @return {int} The new timeout value\n */\n return function(time) {\n if (!time) {\n return minamount;\n }\n\n // Don't go over the max amount.\n if (time + incrementamount > maxamount) {\n return timeoutamount;\n }\n\n return time + incrementamount;\n };\n };\n\n return BackoffTimer;\n});\n"],"file":"backoff_timer.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_axis.min.js.map b/lib/amd/build/chart_axis.min.js.map index 4944d3db32d..c579e4ab1ef 100644 --- a/lib/amd/build/chart_axis.min.js.map +++ b/lib/amd/build/chart_axis.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_axis.js"],"names":["define","Axis","prototype","POS_DEFAULT","POS_BOTTOM","POS_LEFT","POS_RIGHT","POS_TOP","_label","_labels","_max","_min","_position","_stepSize","create","obj","s","setPosition","position","setLabel","label","setStepSize","stepSize","setMax","max","setMin","min","setLabels","labels","getLabel","getLabels","getMax","getMin","getPosition","getStepSize","length","Error","isNaN"],"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 .\n\n/**\n * Chart axis.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_axis\n */\ndefine([], function() {\n\n /**\n * Chart axis class.\n *\n * This is used to represent an axis, whether X or Y.\n *\n * @alias module:core/chart_axis\n * @class\n */\n function Axis() {\n // Please eslint no-empty-function.\n }\n\n /**\n * Default axis position.\n * @const {Null}\n */\n Axis.prototype.POS_DEFAULT = null;\n\n /**\n * Bottom axis position.\n * @const {String}\n */\n Axis.prototype.POS_BOTTOM = 'bottom';\n\n /**\n * Left axis position.\n * @const {String}\n */\n Axis.prototype.POS_LEFT = 'left';\n\n /**\n * Right axis position.\n * @const {String}\n */\n Axis.prototype.POS_RIGHT = 'right';\n\n /**\n * Top axis position.\n * @const {String}\n */\n Axis.prototype.POS_TOP = 'top';\n\n /**\n * Label of the axis.\n * @type {String}\n * @protected\n */\n Axis.prototype._label = null;\n\n /**\n * Labels of the ticks.\n * @type {String[]}\n * @protected\n */\n Axis.prototype._labels = null;\n\n /**\n * Maximum value of the axis.\n * @type {Number}\n * @protected\n */\n Axis.prototype._max = null;\n\n /**\n * Minimum value of the axis.\n * @type {Number}\n * @protected\n */\n Axis.prototype._min = null;\n\n /**\n * Position of the axis.\n * @type {String}\n * @protected\n */\n Axis.prototype._position = null;\n\n /**\n * Steps on the axis.\n * @type {Number}\n * @protected\n */\n Axis.prototype._stepSize = null;\n\n /**\n * Create a new instance of an axis from serialised data.\n *\n * @static\n * @method create\n * @param {Object} obj The data of the axis.\n * @return {module:core/chart_axis}\n */\n Axis.prototype.create = function(obj) {\n var s = new Axis();\n s.setPosition(obj.position);\n s.setLabel(obj.label);\n s.setStepSize(obj.stepSize);\n s.setMax(obj.max);\n s.setMin(obj.min);\n s.setLabels(obj.labels);\n return s;\n };\n\n /**\n * Get the label of the axis.\n *\n * @method getLabel\n * @return {String}\n */\n Axis.prototype.getLabel = function() {\n return this._label;\n };\n\n /**\n * Get the labels of the ticks of the axis.\n *\n * @method getLabels\n * @return {String[]}\n */\n Axis.prototype.getLabels = function() {\n return this._labels;\n };\n\n /**\n * Get the maximum value of the axis.\n *\n * @method getMax\n * @return {Number}\n */\n Axis.prototype.getMax = function() {\n return this._max;\n };\n\n /**\n * Get the minimum value of the axis.\n *\n * @method getMin\n * @return {Number}\n */\n Axis.prototype.getMin = function() {\n return this._min;\n };\n\n /**\n * Get the position of the axis.\n *\n * @method getPosition\n * @return {String}\n */\n Axis.prototype.getPosition = function() {\n return this._position;\n };\n\n /**\n * Get the step size of the axis.\n *\n * @method getStepSize\n * @return {Number}\n */\n Axis.prototype.getStepSize = function() {\n return this._stepSize;\n };\n\n /**\n * Set the label of the axis.\n *\n * @method setLabel\n * @param {String} label The label.\n */\n Axis.prototype.setLabel = function(label) {\n this._label = label || null;\n };\n\n /**\n * Set the labels of the values on the axis.\n *\n * This automatically sets the [_stepSize]{@link module:core/chart_axis#_stepSize},\n * [_min]{@link module:core/chart_axis#_min} and [_max]{@link module:core/chart_axis#_max}\n * to define a scale from 0 to the number of labels when none of the previously\n * mentioned values have been modified.\n *\n * You can use other values so long that your values in a series are mapped\n * to the values represented by your _min, _max and _stepSize.\n *\n * @method setLabels\n * @param {String[]} labels The labels.\n */\n Axis.prototype.setLabels = function(labels) {\n this._labels = labels || null;\n\n // By default we set the grid according to the labels.\n if (this._labels !== null\n && this._stepSize === null\n && (this._min === null || this._min === 0)\n && this._max === null) {\n this.setStepSize(1);\n this.setMin(0);\n this.setMax(labels.length - 1);\n }\n };\n\n /**\n * Set the maximum value on the axis.\n *\n * When this is not set (or set to null) it is left for the output\n * library to best guess what should be used.\n *\n * @method setMax\n * @param {Number} max The value.\n */\n Axis.prototype.setMax = function(max) {\n this._max = typeof max !== 'undefined' ? max : null;\n };\n\n /**\n * Set the minimum value on the axis.\n *\n * When this is not set (or set to null) it is left for the output\n * library to best guess what should be used.\n *\n * @method setMin\n * @param {Number} min The value.\n */\n Axis.prototype.setMin = function(min) {\n this._min = typeof min !== 'undefined' ? min : null;\n };\n\n /**\n * Set the position of the axis.\n *\n * This does not validate whether or not the constant used is valid\n * as the axis itself is not aware whether it represents the X or Y axis.\n *\n * The output library has to have a fallback in case the values are incorrect.\n * When this is not set to {@link module:core/chart_axis#POS_DEFAULT} it is up\n * to the output library to choose what position fits best.\n *\n * @method setPosition\n * @param {String} position The value.\n */\n Axis.prototype.setPosition = function(position) {\n if (position != this.POS_DEFAULT\n && position != this.POS_BOTTOM\n && position != this.POS_LEFT\n && position != this.POS_RIGHT\n && position != this.POS_TOP) {\n throw new Error('Invalid axis position.');\n }\n this._position = position;\n };\n\n /**\n * Set the stepSize on the axis.\n *\n * This is used to determine where ticks are displayed on the axis between min and max.\n *\n * @method setStepSize\n * @param {Number} stepSize The value.\n */\n Axis.prototype.setStepSize = function(stepSize) {\n if (typeof stepSize === 'undefined' || stepSize === null) {\n stepSize = null;\n } else if (isNaN(Number(stepSize))) {\n throw new Error('Value for stepSize is not a number.');\n } else {\n stepSize = Number(stepSize);\n }\n\n this._stepSize = stepSize;\n };\n\n return Axis;\n\n});\n"],"file":"chart_axis.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_axis.js"],"names":["define","Axis","prototype","POS_DEFAULT","POS_BOTTOM","POS_LEFT","POS_RIGHT","POS_TOP","_label","_labels","_max","_min","_position","_stepSize","create","obj","s","setPosition","position","setLabel","label","setStepSize","stepSize","setMax","max","setMin","min","setLabels","labels","getLabel","getLabels","getMax","getMin","getPosition","getStepSize","length","Error","isNaN"],"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 .\n\n/**\n * Chart axis.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_axis\n */\ndefine([], function() {\n\n /**\n * Chart axis class.\n *\n * This is used to represent an axis, whether X or Y.\n *\n * @alias module:core/chart_axis\n * @class\n */\n function Axis() {\n // Please eslint no-empty-function.\n }\n\n /**\n * Default axis position.\n * @const {Null}\n */\n Axis.prototype.POS_DEFAULT = null;\n\n /**\n * Bottom axis position.\n * @const {String}\n */\n Axis.prototype.POS_BOTTOM = 'bottom';\n\n /**\n * Left axis position.\n * @const {String}\n */\n Axis.prototype.POS_LEFT = 'left';\n\n /**\n * Right axis position.\n * @const {String}\n */\n Axis.prototype.POS_RIGHT = 'right';\n\n /**\n * Top axis position.\n * @const {String}\n */\n Axis.prototype.POS_TOP = 'top';\n\n /**\n * Label of the axis.\n * @type {String}\n * @protected\n */\n Axis.prototype._label = null;\n\n /**\n * Labels of the ticks.\n * @type {String[]}\n * @protected\n */\n Axis.prototype._labels = null;\n\n /**\n * Maximum value of the axis.\n * @type {Number}\n * @protected\n */\n Axis.prototype._max = null;\n\n /**\n * Minimum value of the axis.\n * @type {Number}\n * @protected\n */\n Axis.prototype._min = null;\n\n /**\n * Position of the axis.\n * @type {String}\n * @protected\n */\n Axis.prototype._position = null;\n\n /**\n * Steps on the axis.\n * @type {Number}\n * @protected\n */\n Axis.prototype._stepSize = null;\n\n /**\n * Create a new instance of an axis from serialised data.\n *\n * @static\n * @method create\n * @param {Object} obj The data of the axis.\n * @return {module:core/chart_axis}\n */\n Axis.prototype.create = function(obj) {\n var s = new Axis();\n s.setPosition(obj.position);\n s.setLabel(obj.label);\n s.setStepSize(obj.stepSize);\n s.setMax(obj.max);\n s.setMin(obj.min);\n s.setLabels(obj.labels);\n return s;\n };\n\n /**\n * Get the label of the axis.\n *\n * @method getLabel\n * @return {String}\n */\n Axis.prototype.getLabel = function() {\n return this._label;\n };\n\n /**\n * Get the labels of the ticks of the axis.\n *\n * @method getLabels\n * @return {String[]}\n */\n Axis.prototype.getLabels = function() {\n return this._labels;\n };\n\n /**\n * Get the maximum value of the axis.\n *\n * @method getMax\n * @return {Number}\n */\n Axis.prototype.getMax = function() {\n return this._max;\n };\n\n /**\n * Get the minimum value of the axis.\n *\n * @method getMin\n * @return {Number}\n */\n Axis.prototype.getMin = function() {\n return this._min;\n };\n\n /**\n * Get the position of the axis.\n *\n * @method getPosition\n * @return {String}\n */\n Axis.prototype.getPosition = function() {\n return this._position;\n };\n\n /**\n * Get the step size of the axis.\n *\n * @method getStepSize\n * @return {Number}\n */\n Axis.prototype.getStepSize = function() {\n return this._stepSize;\n };\n\n /**\n * Set the label of the axis.\n *\n * @method setLabel\n * @param {String} label The label.\n */\n Axis.prototype.setLabel = function(label) {\n this._label = label || null;\n };\n\n /**\n * Set the labels of the values on the axis.\n *\n * This automatically sets the [_stepSize]{@link module:core/chart_axis#_stepSize},\n * [_min]{@link module:core/chart_axis#_min} and [_max]{@link module:core/chart_axis#_max}\n * to define a scale from 0 to the number of labels when none of the previously\n * mentioned values have been modified.\n *\n * You can use other values so long that your values in a series are mapped\n * to the values represented by your _min, _max and _stepSize.\n *\n * @method setLabels\n * @param {String[]} labels The labels.\n */\n Axis.prototype.setLabels = function(labels) {\n this._labels = labels || null;\n\n // By default we set the grid according to the labels.\n if (this._labels !== null\n && this._stepSize === null\n && (this._min === null || this._min === 0)\n && this._max === null) {\n this.setStepSize(1);\n this.setMin(0);\n this.setMax(labels.length - 1);\n }\n };\n\n /**\n * Set the maximum value on the axis.\n *\n * When this is not set (or set to null) it is left for the output\n * library to best guess what should be used.\n *\n * @method setMax\n * @param {Number} max The value.\n */\n Axis.prototype.setMax = function(max) {\n this._max = typeof max !== 'undefined' ? max : null;\n };\n\n /**\n * Set the minimum value on the axis.\n *\n * When this is not set (or set to null) it is left for the output\n * library to best guess what should be used.\n *\n * @method setMin\n * @param {Number} min The value.\n */\n Axis.prototype.setMin = function(min) {\n this._min = typeof min !== 'undefined' ? min : null;\n };\n\n /**\n * Set the position of the axis.\n *\n * This does not validate whether or not the constant used is valid\n * as the axis itself is not aware whether it represents the X or Y axis.\n *\n * The output library has to have a fallback in case the values are incorrect.\n * When this is not set to {@link module:core/chart_axis#POS_DEFAULT} it is up\n * to the output library to choose what position fits best.\n *\n * @method setPosition\n * @param {String} position The value.\n */\n Axis.prototype.setPosition = function(position) {\n if (position != this.POS_DEFAULT\n && position != this.POS_BOTTOM\n && position != this.POS_LEFT\n && position != this.POS_RIGHT\n && position != this.POS_TOP) {\n throw new Error('Invalid axis position.');\n }\n this._position = position;\n };\n\n /**\n * Set the stepSize on the axis.\n *\n * This is used to determine where ticks are displayed on the axis between min and max.\n *\n * @method setStepSize\n * @param {Number} stepSize The value.\n */\n Axis.prototype.setStepSize = function(stepSize) {\n if (typeof stepSize === 'undefined' || stepSize === null) {\n stepSize = null;\n } else if (isNaN(Number(stepSize))) {\n throw new Error('Value for stepSize is not a number.');\n } else {\n stepSize = Number(stepSize);\n }\n\n this._stepSize = stepSize;\n };\n\n return Axis;\n\n});\n"],"file":"chart_axis.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_bar.min.js.map b/lib/amd/build/chart_bar.min.js.map index 2db8f63d26b..ae1ccf94f42 100644 --- a/lib/amd/build/chart_bar.min.js.map +++ b/lib/amd/build/chart_bar.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_bar.js"],"names":["define","Base","Bar","prototype","constructor","apply","arguments","Object","create","_horizontal","_stacked","TYPE","Klass","data","chart","setHorizontal","horizontal","setStacked","stacked","_setDefaults","axis","getYAxis","setMin","getHorizontal","getStacked","getXAxis","getMin"],"mappings":"AAuBAA,OAAM,kBAAC,CAAC,iBAAD,CAAD,CAAsB,SAASC,CAAT,CAAe,CASvC,QAASC,CAAAA,CAAT,EAAe,CACXD,CAAI,CAACE,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,CACH,CACDJ,CAAG,CAACC,SAAJ,CAAgBI,MAAM,CAACC,MAAP,CAAcP,CAAI,CAACE,SAAnB,CAAhB,CAQAD,CAAG,CAACC,SAAJ,CAAcM,WAAd,IAQAP,CAAG,CAACC,SAAJ,CAAcO,QAAd,IAGAR,CAAG,CAACC,SAAJ,CAAcQ,IAAd,CAAqB,KAArB,CAGAT,CAAG,CAACC,SAAJ,CAAcK,MAAd,CAAuB,SAASI,CAAT,CAAgBC,CAAhB,CAAsB,CACzC,GAAIC,CAAAA,CAAK,CAAGb,CAAI,CAACE,SAAL,CAAeK,MAAf,CAAsBH,KAAtB,CAA4B,IAA5B,CAAkCC,SAAlC,CAAZ,CACAQ,CAAK,CAACC,aAAN,CAAoBF,CAAI,CAACG,UAAzB,EACAF,CAAK,CAACG,UAAN,CAAiBJ,CAAI,CAACK,OAAtB,EACA,MAAOJ,CAAAA,CACV,CALD,CAQAZ,CAAG,CAACC,SAAJ,CAAcgB,YAAd,CAA6B,UAAW,CACpClB,CAAI,CAACE,SAAL,CAAegB,YAAf,CAA4Bd,KAA5B,CAAkC,IAAlC,CAAwCC,SAAxC,EACA,GAAIc,CAAAA,CAAI,CAAG,KAAKC,QAAL,CAAc,CAAd,IAAX,CACAD,CAAI,CAACE,MAAL,CAAY,CAAZ,CACH,CAJD,CAWApB,CAAG,CAACC,SAAJ,CAAcoB,aAAd,CAA8B,UAAW,CACrC,MAAO,MAAKd,WACf,CAFD,CASAP,CAAG,CAACC,SAAJ,CAAcqB,UAAd,CAA2B,UAAW,CAClC,MAAO,MAAKd,QACf,CAFD,CAWAR,CAAG,CAACC,SAAJ,CAAcY,aAAd,CAA8B,SAASC,CAAT,CAAqB,CAC/C,GAAII,CAAAA,CAAI,CAAG,KAAKK,QAAL,CAAc,CAAd,IAAX,CACA,GAAsB,IAAlB,GAAAL,CAAI,CAACM,MAAL,EAAJ,CAA4B,CACxBN,CAAI,CAACE,MAAL,CAAY,CAAZ,CACH,CACD,KAAKb,WAAL,GAA2BO,CAC9B,CAND,CAcAd,CAAG,CAACC,SAAJ,CAAcc,UAAd,CAA2B,SAASC,CAAT,CAAkB,CACzC,KAAKR,QAAL,GAAwBQ,CAC3B,CAFD,CAIA,MAAOhB,CAAAA,CAEV,CA7FK,CAAN","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 .\n\n/**\n * Chart bar.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_bar\n */\ndefine(['core/chart_base'], function(Base) {\n\n /**\n * Bar chart.\n *\n * @alias module:core/chart_bar\n * @extends {module:core/chart_base}\n * @class\n */\n function Bar() {\n Base.prototype.constructor.apply(this, arguments);\n }\n Bar.prototype = Object.create(Base.prototype);\n\n /**\n * Whether the bars should be displayed horizontally or not.\n *\n * @type {Bool}\n * @protected\n */\n Bar.prototype._horizontal = false;\n\n /**\n * Whether the bars should be stacked or not.\n *\n * @type {Bool}\n * @protected\n */\n Bar.prototype._stacked = false;\n\n /** @override */\n Bar.prototype.TYPE = 'bar';\n\n /** @override */\n Bar.prototype.create = function(Klass, data) {\n var chart = Base.prototype.create.apply(this, arguments);\n chart.setHorizontal(data.horizontal);\n chart.setStacked(data.stacked);\n return chart;\n };\n\n /** @override */\n Bar.prototype._setDefaults = function() {\n Base.prototype._setDefaults.apply(this, arguments);\n var axis = this.getYAxis(0, true);\n axis.setMin(0);\n };\n\n /**\n * Get whether the bars should be displayed horizontally or not.\n *\n * @returns {Bool}\n */\n Bar.prototype.getHorizontal = function() {\n return this._horizontal;\n };\n\n /**\n * Get whether the bars should be stacked or not.\n *\n * @returns {Bool}\n */\n Bar.prototype.getStacked = function() {\n return this._stacked;\n };\n\n /**\n * Set whether the bars should be displayed horizontally or not.\n *\n * It sets the X Axis to zero if the min value is null.\n *\n * @param {Bool} horizontal True if the bars should be displayed horizontally, false otherwise.\n */\n Bar.prototype.setHorizontal = function(horizontal) {\n var axis = this.getXAxis(0, true);\n if (axis.getMin() === null) {\n axis.setMin(0);\n }\n this._horizontal = Boolean(horizontal);\n };\n\n /**\n * Set whether the bars should be stacked or not.\n *\n * @method setStacked\n * @param {Bool} stacked True if the chart should be stacked or false otherwise.\n */\n Bar.prototype.setStacked = function(stacked) {\n this._stacked = Boolean(stacked);\n };\n\n return Bar;\n\n});\n"],"file":"chart_bar.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_bar.js"],"names":["define","Base","Bar","prototype","constructor","apply","arguments","Object","create","_horizontal","_stacked","TYPE","Klass","data","chart","setHorizontal","horizontal","setStacked","stacked","_setDefaults","axis","getYAxis","setMin","getHorizontal","getStacked","getXAxis","getMin"],"mappings":"AAsBAA,OAAM,kBAAC,CAAC,iBAAD,CAAD,CAAsB,SAASC,CAAT,CAAe,CASvC,QAASC,CAAAA,CAAT,EAAe,CACXD,CAAI,CAACE,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,CACH,CACDJ,CAAG,CAACC,SAAJ,CAAgBI,MAAM,CAACC,MAAP,CAAcP,CAAI,CAACE,SAAnB,CAAhB,CAQAD,CAAG,CAACC,SAAJ,CAAcM,WAAd,IAQAP,CAAG,CAACC,SAAJ,CAAcO,QAAd,IAGAR,CAAG,CAACC,SAAJ,CAAcQ,IAAd,CAAqB,KAArB,CAGAT,CAAG,CAACC,SAAJ,CAAcK,MAAd,CAAuB,SAASI,CAAT,CAAgBC,CAAhB,CAAsB,CACzC,GAAIC,CAAAA,CAAK,CAAGb,CAAI,CAACE,SAAL,CAAeK,MAAf,CAAsBH,KAAtB,CAA4B,IAA5B,CAAkCC,SAAlC,CAAZ,CACAQ,CAAK,CAACC,aAAN,CAAoBF,CAAI,CAACG,UAAzB,EACAF,CAAK,CAACG,UAAN,CAAiBJ,CAAI,CAACK,OAAtB,EACA,MAAOJ,CAAAA,CACV,CALD,CAQAZ,CAAG,CAACC,SAAJ,CAAcgB,YAAd,CAA6B,UAAW,CACpClB,CAAI,CAACE,SAAL,CAAegB,YAAf,CAA4Bd,KAA5B,CAAkC,IAAlC,CAAwCC,SAAxC,EACA,GAAIc,CAAAA,CAAI,CAAG,KAAKC,QAAL,CAAc,CAAd,IAAX,CACAD,CAAI,CAACE,MAAL,CAAY,CAAZ,CACH,CAJD,CAWApB,CAAG,CAACC,SAAJ,CAAcoB,aAAd,CAA8B,UAAW,CACrC,MAAO,MAAKd,WACf,CAFD,CASAP,CAAG,CAACC,SAAJ,CAAcqB,UAAd,CAA2B,UAAW,CAClC,MAAO,MAAKd,QACf,CAFD,CAWAR,CAAG,CAACC,SAAJ,CAAcY,aAAd,CAA8B,SAASC,CAAT,CAAqB,CAC/C,GAAII,CAAAA,CAAI,CAAG,KAAKK,QAAL,CAAc,CAAd,IAAX,CACA,GAAsB,IAAlB,GAAAL,CAAI,CAACM,MAAL,EAAJ,CAA4B,CACxBN,CAAI,CAACE,MAAL,CAAY,CAAZ,CACH,CACD,KAAKb,WAAL,GAA2BO,CAC9B,CAND,CAcAd,CAAG,CAACC,SAAJ,CAAcc,UAAd,CAA2B,SAASC,CAAT,CAAkB,CACzC,KAAKR,QAAL,GAAwBQ,CAC3B,CAFD,CAIA,MAAOhB,CAAAA,CAEV,CA7FK,CAAN","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 .\n\n/**\n * Chart bar.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_bar\n */\ndefine(['core/chart_base'], function(Base) {\n\n /**\n * Bar chart.\n *\n * @alias module:core/chart_bar\n * @extends {module:core/chart_base}\n * @class\n */\n function Bar() {\n Base.prototype.constructor.apply(this, arguments);\n }\n Bar.prototype = Object.create(Base.prototype);\n\n /**\n * Whether the bars should be displayed horizontally or not.\n *\n * @type {Bool}\n * @protected\n */\n Bar.prototype._horizontal = false;\n\n /**\n * Whether the bars should be stacked or not.\n *\n * @type {Bool}\n * @protected\n */\n Bar.prototype._stacked = false;\n\n /** @override */\n Bar.prototype.TYPE = 'bar';\n\n /** @override */\n Bar.prototype.create = function(Klass, data) {\n var chart = Base.prototype.create.apply(this, arguments);\n chart.setHorizontal(data.horizontal);\n chart.setStacked(data.stacked);\n return chart;\n };\n\n /** @override */\n Bar.prototype._setDefaults = function() {\n Base.prototype._setDefaults.apply(this, arguments);\n var axis = this.getYAxis(0, true);\n axis.setMin(0);\n };\n\n /**\n * Get whether the bars should be displayed horizontally or not.\n *\n * @returns {Bool}\n */\n Bar.prototype.getHorizontal = function() {\n return this._horizontal;\n };\n\n /**\n * Get whether the bars should be stacked or not.\n *\n * @returns {Bool}\n */\n Bar.prototype.getStacked = function() {\n return this._stacked;\n };\n\n /**\n * Set whether the bars should be displayed horizontally or not.\n *\n * It sets the X Axis to zero if the min value is null.\n *\n * @param {Bool} horizontal True if the bars should be displayed horizontally, false otherwise.\n */\n Bar.prototype.setHorizontal = function(horizontal) {\n var axis = this.getXAxis(0, true);\n if (axis.getMin() === null) {\n axis.setMin(0);\n }\n this._horizontal = Boolean(horizontal);\n };\n\n /**\n * Set whether the bars should be stacked or not.\n *\n * @method setStacked\n * @param {Bool} stacked True if the chart should be stacked or false otherwise.\n */\n Bar.prototype.setStacked = function(stacked) {\n this._stacked = Boolean(stacked);\n };\n\n return Bar;\n\n});\n"],"file":"chart_bar.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_base.min.js.map b/lib/amd/build/chart_base.min.js.map index 8aab991edde..a0883a425d3 100644 --- a/lib/amd/build/chart_base.min.js.map +++ b/lib/amd/build/chart_base.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_base.js"],"names":["define","Series","Axis","Base","_series","_labels","_xaxes","_yaxes","_setDefaults","prototype","_legendOptions","_title","COLORSET","_configColorSet","TYPE","addSeries","series","_validateSeries","push","getColor","configColorSet","getConfigColorSet","setColor","length","create","Klass","data","Chart","setConfigColorSet","config_colorset","setLabels","labels","setTitle","title","legend_options","setLegendOptions","forEach","seriesData","axes","x","axisData","i","setXAxis","y","setYAxis","__getAxis","xy","index","createIfNotExists","setAxis","bind","axis","Error","getLabels","getLegendOptions","getSeries","getTitle","getType","getXAxes","getXAxis","getYAxes","getYAxis","colorset","legendOptions","_validateAxis","getCount"],"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 .\n\n/**\n * Chart base.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_base\n */\ndefine(['core/chart_series', 'core/chart_axis'], function(Series, Axis) {\n\n /**\n * Chart base.\n *\n * The constructor of a chart must never take any argument.\n *\n * {@link module:core/chart_base#_setDefault} to set the defaults on instantiation.\n *\n * @alias module:core/chart_base\n * @class\n */\n function Base() {\n this._series = [];\n this._labels = [];\n this._xaxes = [];\n this._yaxes = [];\n\n this._setDefaults();\n }\n\n /**\n * The series constituting this chart.\n *\n * @protected\n * @type {module:core/chart_series[]}\n */\n Base.prototype._series = null;\n\n /**\n * The labels of the X axis when categorised.\n *\n * @protected\n * @type {String[]}\n */\n Base.prototype._labels = null;\n\n /**\n * Options for chart legend display.\n *\n * @protected\n * @type {Object}\n */\n Base.prototype._legendOptions = null;\n\n /**\n * The title of the chart.\n *\n * @protected\n * @type {String}\n */\n Base.prototype._title = null;\n\n /**\n * The X axes.\n *\n * @protected\n * @type {module:core/chart_axis[]}\n */\n Base.prototype._xaxes = null;\n\n /**\n * The Y axes.\n *\n * @protected\n * @type {module:core/chart_axis[]}\n */\n Base.prototype._yaxes = null;\n\n /**\n * Colours to pick from when automatically assigning them.\n *\n * @const\n * @type {String[]}\n */\n Base.prototype.COLORSET = ['#f3c300', '#875692', '#f38400', '#a1caf1', '#be0032', '#c2b280', '#7f180d', '#008856',\n '#e68fac', '#0067a5'];\n\n /**\n * Set of colours defined by setting $CFG->chart_colorset to be picked when automatically assigning them.\n *\n * @type {String[]}\n * @protected\n */\n Base.prototype._configColorSet = null;\n\n /**\n * The type of chart.\n *\n * @abstract\n * @type {String}\n * @const\n */\n Base.prototype.TYPE = null;\n\n /**\n * Add a series to the chart.\n *\n * This will automatically assign a color to the series if it does not have one.\n *\n * @param {module:core/chart_series} series The series to add.\n */\n Base.prototype.addSeries = function(series) {\n this._validateSeries(series);\n this._series.push(series);\n\n // Give a default color from the set.\n if (series.getColor() === null) {\n var configColorSet = this.getConfigColorSet() || Base.prototype.COLORSET;\n series.setColor(configColorSet[this._series.length % configColorSet.length]);\n }\n };\n\n /**\n * Create a new instance of a chart from serialised data.\n *\n * the serialised attributes they offer and support.\n *\n * @static\n * @method create\n * @param {module:core/chart_base} Klass The class oject representing the type of chart to instantiate.\n * @param {Object} data The data of the chart.\n * @return {module:core/chart_base}\n */\n Base.prototype.create = function(Klass, data) {\n // TODO Not convinced about the usage of Klass here but I can't figure out a way\n // to have a reference to the class in the sub classes, in PHP I'd do new self().\n var Chart = new Klass();\n Chart.setConfigColorSet(data.config_colorset);\n Chart.setLabels(data.labels);\n Chart.setTitle(data.title);\n if (data.legend_options) {\n Chart.setLegendOptions(data.legend_options);\n }\n data.series.forEach(function(seriesData) {\n Chart.addSeries(Series.prototype.create(seriesData));\n });\n data.axes.x.forEach(function(axisData, i) {\n Chart.setXAxis(Axis.prototype.create(axisData), i);\n });\n data.axes.y.forEach(function(axisData, i) {\n Chart.setYAxis(Axis.prototype.create(axisData), i);\n });\n return Chart;\n };\n\n /**\n * Get an axis.\n *\n * @private\n * @param {String} xy Accepts the values 'x' or 'y'.\n * @param {Number} [index=0] The index of the axis of its type.\n * @param {Bool} [createIfNotExists=false] When true, create an instance if it does not exist.\n * @return {module:core/chart_axis}\n */\n Base.prototype.__getAxis = function(xy, index, createIfNotExists) {\n var axes = xy === 'x' ? this._xaxes : this._yaxes,\n setAxis = (xy === 'x' ? this.setXAxis : this.setYAxis).bind(this),\n axis;\n\n index = typeof index === 'undefined' ? 0 : index;\n createIfNotExists = typeof createIfNotExists === 'undefined' ? false : createIfNotExists;\n axis = axes[index];\n\n if (typeof axis === 'undefined') {\n if (!createIfNotExists) {\n throw new Error('Unknown axis.');\n }\n axis = new Axis();\n setAxis(axis, index);\n }\n\n return axis;\n };\n\n /**\n * Get colours defined by setting.\n *\n * @return {String[]}\n */\n Base.prototype.getConfigColorSet = function() {\n return this._configColorSet;\n };\n\n /**\n * Get the labels of the X axis.\n *\n * @return {String[]}\n */\n Base.prototype.getLabels = function() {\n return this._labels;\n };\n\n /**\n * Get whether to display the chart legend.\n *\n * @return {Bool}\n */\n Base.prototype.getLegendOptions = function() {\n return this._legendOptions;\n };\n\n /**\n * Get the series.\n *\n * @return {module:core/chart_series[]}\n */\n Base.prototype.getSeries = function() {\n return this._series;\n };\n\n /**\n * Get the title of the chart.\n *\n * @return {String}\n */\n Base.prototype.getTitle = function() {\n return this._title;\n };\n\n /**\n * Get the type of chart.\n *\n * @see module:core/chart_base#TYPE\n * @return {String}\n */\n Base.prototype.getType = function() {\n if (!this.TYPE) {\n throw new Error('The TYPE property has not been set.');\n }\n return this.TYPE;\n };\n\n /**\n * Get the X axes.\n *\n * @return {module:core/chart_axis[]}\n */\n Base.prototype.getXAxes = function() {\n return this._xaxes;\n };\n\n /**\n * Get an X axis.\n *\n * @param {Number} [index=0] The index of the axis.\n * @param {Bool} [createIfNotExists=false] Create the instance of it does not exist at index.\n * @return {module:core/chart_axis}\n */\n Base.prototype.getXAxis = function(index, createIfNotExists) {\n return this.__getAxis('x', index, createIfNotExists);\n };\n\n /**\n * Get the Y axes.\n *\n * @return {module:core/chart_axis[]}\n */\n Base.prototype.getYAxes = function() {\n return this._yaxes;\n };\n\n /**\n * Get an Y axis.\n *\n * @param {Number} [index=0] The index of the axis.\n * @param {Bool} [createIfNotExists=false] Create the instance of it does not exist at index.\n * @return {module:core/chart_axis}\n */\n Base.prototype.getYAxis = function(index, createIfNotExists) {\n return this.__getAxis('y', index, createIfNotExists);\n };\n\n /**\n * Set colours defined by setting.\n *\n * @param {String[]} colorset An array of css colours.\n * @protected\n */\n Base.prototype.setConfigColorSet = function(colorset) {\n this._configColorSet = colorset;\n };\n\n /**\n * Set the defaults for this chart type.\n *\n * Child classes can extend this to set defaults values on instantiation.\n *\n * emphasize and self-document the defaults values set by the chart type.\n *\n * @protected\n */\n Base.prototype._setDefaults = function() {\n // For the children to extend.\n };\n\n /**\n * Set the labels of the X axis.\n *\n * This requires for each series to contain strictly as many values as there\n * are labels.\n *\n * @param {String[]} labels The labels.\n */\n Base.prototype.setLabels = function(labels) {\n if (labels.length && this._series.length && this._series[0].length != labels.length) {\n throw new Error('Series must match label values.');\n }\n this._labels = labels;\n };\n\n /**\n * Set options for chart legend display.\n *\n * @param {Object} legendOptions\n */\n Base.prototype.setLegendOptions = function(legendOptions) {\n if (typeof legendOptions !== 'object') {\n throw new Error('Setting legend with non-object value:' + legendOptions);\n }\n this._legendOptions = legendOptions;\n };\n\n /**\n * Set the title of the chart.\n *\n * @param {String} title The title.\n */\n Base.prototype.setTitle = function(title) {\n this._title = title;\n };\n\n /**\n * Set an X axis.\n *\n * Note that this will override any predefined axis without warning.\n *\n * @param {module:core/chart_axis} axis The axis.\n * @param {Number} [index=0] The index of the axis.\n */\n Base.prototype.setXAxis = function(axis, index) {\n index = typeof index === 'undefined' ? 0 : index;\n this._validateAxis('x', axis, index);\n this._xaxes[index] = axis;\n };\n\n /**\n * Set a Y axis.\n *\n * Note that this will override any predefined axis without warning.\n *\n * @param {module:core/chart_axis} axis The axis.\n * @param {Number} [index=0] The index of the axis.\n */\n Base.prototype.setYAxis = function(axis, index) {\n index = typeof index === 'undefined' ? 0 : index;\n this._validateAxis('y', axis, index);\n this._yaxes[index] = axis;\n };\n\n /**\n * Validate an axis.\n *\n * @protected\n * @param {String} xy X or Y axis.\n * @param {module:core/chart_axis} axis The axis to validate.\n * @param {Number} [index=0] The index of the axis.\n */\n Base.prototype._validateAxis = function(xy, axis, index) {\n index = typeof index === 'undefined' ? 0 : index;\n if (index > 0) {\n var axes = xy == 'x' ? this._xaxes : this._yaxes;\n if (typeof axes[index - 1] === 'undefined') {\n throw new Error('Missing ' + xy + ' axis at index lower than ' + index);\n }\n }\n };\n\n /**\n * Validate a series.\n *\n * @protected\n * @param {module:core/chart_series} series The series to validate.\n */\n Base.prototype._validateSeries = function(series) {\n if (this._series.length && this._series[0].getCount() != series.getCount()) {\n throw new Error('Series do not have an equal number of values.');\n\n } else if (this._labels.length && this._labels.length != series.getCount()) {\n throw new Error('Series must match label values.');\n }\n };\n\n return Base;\n\n});\n"],"file":"chart_base.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_base.js"],"names":["define","Series","Axis","Base","_series","_labels","_xaxes","_yaxes","_setDefaults","prototype","_legendOptions","_title","COLORSET","_configColorSet","TYPE","addSeries","series","_validateSeries","push","getColor","configColorSet","getConfigColorSet","setColor","length","create","Klass","data","Chart","setConfigColorSet","config_colorset","setLabels","labels","setTitle","title","legend_options","setLegendOptions","forEach","seriesData","axes","x","axisData","i","setXAxis","y","setYAxis","__getAxis","xy","index","createIfNotExists","setAxis","bind","axis","Error","getLabels","getLegendOptions","getSeries","getTitle","getType","getXAxes","getXAxis","getYAxes","getYAxis","colorset","legendOptions","_validateAxis","getCount"],"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 .\n\n/**\n * Chart base.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_base\n */\ndefine(['core/chart_series', 'core/chart_axis'], function(Series, Axis) {\n\n /**\n * Chart base.\n *\n * The constructor of a chart must never take any argument.\n *\n * {@link module:core/chart_base#_setDefault} to set the defaults on instantiation.\n *\n * @alias module:core/chart_base\n * @class\n */\n function Base() {\n this._series = [];\n this._labels = [];\n this._xaxes = [];\n this._yaxes = [];\n\n this._setDefaults();\n }\n\n /**\n * The series constituting this chart.\n *\n * @protected\n * @type {module:core/chart_series[]}\n */\n Base.prototype._series = null;\n\n /**\n * The labels of the X axis when categorised.\n *\n * @protected\n * @type {String[]}\n */\n Base.prototype._labels = null;\n\n /**\n * Options for chart legend display.\n *\n * @protected\n * @type {Object}\n */\n Base.prototype._legendOptions = null;\n\n /**\n * The title of the chart.\n *\n * @protected\n * @type {String}\n */\n Base.prototype._title = null;\n\n /**\n * The X axes.\n *\n * @protected\n * @type {module:core/chart_axis[]}\n */\n Base.prototype._xaxes = null;\n\n /**\n * The Y axes.\n *\n * @protected\n * @type {module:core/chart_axis[]}\n */\n Base.prototype._yaxes = null;\n\n /**\n * Colours to pick from when automatically assigning them.\n *\n * @const\n * @type {String[]}\n */\n Base.prototype.COLORSET = ['#f3c300', '#875692', '#f38400', '#a1caf1', '#be0032', '#c2b280', '#7f180d', '#008856',\n '#e68fac', '#0067a5'];\n\n /**\n * Set of colours defined by setting $CFG->chart_colorset to be picked when automatically assigning them.\n *\n * @type {String[]}\n * @protected\n */\n Base.prototype._configColorSet = null;\n\n /**\n * The type of chart.\n *\n * @abstract\n * @type {String}\n * @const\n */\n Base.prototype.TYPE = null;\n\n /**\n * Add a series to the chart.\n *\n * This will automatically assign a color to the series if it does not have one.\n *\n * @param {module:core/chart_series} series The series to add.\n */\n Base.prototype.addSeries = function(series) {\n this._validateSeries(series);\n this._series.push(series);\n\n // Give a default color from the set.\n if (series.getColor() === null) {\n var configColorSet = this.getConfigColorSet() || Base.prototype.COLORSET;\n series.setColor(configColorSet[this._series.length % configColorSet.length]);\n }\n };\n\n /**\n * Create a new instance of a chart from serialised data.\n *\n * the serialised attributes they offer and support.\n *\n * @static\n * @method create\n * @param {module:core/chart_base} Klass The class oject representing the type of chart to instantiate.\n * @param {Object} data The data of the chart.\n * @return {module:core/chart_base}\n */\n Base.prototype.create = function(Klass, data) {\n // TODO Not convinced about the usage of Klass here but I can't figure out a way\n // to have a reference to the class in the sub classes, in PHP I'd do new self().\n var Chart = new Klass();\n Chart.setConfigColorSet(data.config_colorset);\n Chart.setLabels(data.labels);\n Chart.setTitle(data.title);\n if (data.legend_options) {\n Chart.setLegendOptions(data.legend_options);\n }\n data.series.forEach(function(seriesData) {\n Chart.addSeries(Series.prototype.create(seriesData));\n });\n data.axes.x.forEach(function(axisData, i) {\n Chart.setXAxis(Axis.prototype.create(axisData), i);\n });\n data.axes.y.forEach(function(axisData, i) {\n Chart.setYAxis(Axis.prototype.create(axisData), i);\n });\n return Chart;\n };\n\n /**\n * Get an axis.\n *\n * @private\n * @param {String} xy Accepts the values 'x' or 'y'.\n * @param {Number} [index=0] The index of the axis of its type.\n * @param {Bool} [createIfNotExists=false] When true, create an instance if it does not exist.\n * @return {module:core/chart_axis}\n */\n Base.prototype.__getAxis = function(xy, index, createIfNotExists) {\n var axes = xy === 'x' ? this._xaxes : this._yaxes,\n setAxis = (xy === 'x' ? this.setXAxis : this.setYAxis).bind(this),\n axis;\n\n index = typeof index === 'undefined' ? 0 : index;\n createIfNotExists = typeof createIfNotExists === 'undefined' ? false : createIfNotExists;\n axis = axes[index];\n\n if (typeof axis === 'undefined') {\n if (!createIfNotExists) {\n throw new Error('Unknown axis.');\n }\n axis = new Axis();\n setAxis(axis, index);\n }\n\n return axis;\n };\n\n /**\n * Get colours defined by setting.\n *\n * @return {String[]}\n */\n Base.prototype.getConfigColorSet = function() {\n return this._configColorSet;\n };\n\n /**\n * Get the labels of the X axis.\n *\n * @return {String[]}\n */\n Base.prototype.getLabels = function() {\n return this._labels;\n };\n\n /**\n * Get whether to display the chart legend.\n *\n * @return {Bool}\n */\n Base.prototype.getLegendOptions = function() {\n return this._legendOptions;\n };\n\n /**\n * Get the series.\n *\n * @return {module:core/chart_series[]}\n */\n Base.prototype.getSeries = function() {\n return this._series;\n };\n\n /**\n * Get the title of the chart.\n *\n * @return {String}\n */\n Base.prototype.getTitle = function() {\n return this._title;\n };\n\n /**\n * Get the type of chart.\n *\n * @see module:core/chart_base#TYPE\n * @return {String}\n */\n Base.prototype.getType = function() {\n if (!this.TYPE) {\n throw new Error('The TYPE property has not been set.');\n }\n return this.TYPE;\n };\n\n /**\n * Get the X axes.\n *\n * @return {module:core/chart_axis[]}\n */\n Base.prototype.getXAxes = function() {\n return this._xaxes;\n };\n\n /**\n * Get an X axis.\n *\n * @param {Number} [index=0] The index of the axis.\n * @param {Bool} [createIfNotExists=false] Create the instance of it does not exist at index.\n * @return {module:core/chart_axis}\n */\n Base.prototype.getXAxis = function(index, createIfNotExists) {\n return this.__getAxis('x', index, createIfNotExists);\n };\n\n /**\n * Get the Y axes.\n *\n * @return {module:core/chart_axis[]}\n */\n Base.prototype.getYAxes = function() {\n return this._yaxes;\n };\n\n /**\n * Get an Y axis.\n *\n * @param {Number} [index=0] The index of the axis.\n * @param {Bool} [createIfNotExists=false] Create the instance of it does not exist at index.\n * @return {module:core/chart_axis}\n */\n Base.prototype.getYAxis = function(index, createIfNotExists) {\n return this.__getAxis('y', index, createIfNotExists);\n };\n\n /**\n * Set colours defined by setting.\n *\n * @param {String[]} colorset An array of css colours.\n * @protected\n */\n Base.prototype.setConfigColorSet = function(colorset) {\n this._configColorSet = colorset;\n };\n\n /**\n * Set the defaults for this chart type.\n *\n * Child classes can extend this to set defaults values on instantiation.\n *\n * emphasize and self-document the defaults values set by the chart type.\n *\n * @protected\n */\n Base.prototype._setDefaults = function() {\n // For the children to extend.\n };\n\n /**\n * Set the labels of the X axis.\n *\n * This requires for each series to contain strictly as many values as there\n * are labels.\n *\n * @param {String[]} labels The labels.\n */\n Base.prototype.setLabels = function(labels) {\n if (labels.length && this._series.length && this._series[0].length != labels.length) {\n throw new Error('Series must match label values.');\n }\n this._labels = labels;\n };\n\n /**\n * Set options for chart legend display.\n *\n * @param {Object} legendOptions\n */\n Base.prototype.setLegendOptions = function(legendOptions) {\n if (typeof legendOptions !== 'object') {\n throw new Error('Setting legend with non-object value:' + legendOptions);\n }\n this._legendOptions = legendOptions;\n };\n\n /**\n * Set the title of the chart.\n *\n * @param {String} title The title.\n */\n Base.prototype.setTitle = function(title) {\n this._title = title;\n };\n\n /**\n * Set an X axis.\n *\n * Note that this will override any predefined axis without warning.\n *\n * @param {module:core/chart_axis} axis The axis.\n * @param {Number} [index=0] The index of the axis.\n */\n Base.prototype.setXAxis = function(axis, index) {\n index = typeof index === 'undefined' ? 0 : index;\n this._validateAxis('x', axis, index);\n this._xaxes[index] = axis;\n };\n\n /**\n * Set a Y axis.\n *\n * Note that this will override any predefined axis without warning.\n *\n * @param {module:core/chart_axis} axis The axis.\n * @param {Number} [index=0] The index of the axis.\n */\n Base.prototype.setYAxis = function(axis, index) {\n index = typeof index === 'undefined' ? 0 : index;\n this._validateAxis('y', axis, index);\n this._yaxes[index] = axis;\n };\n\n /**\n * Validate an axis.\n *\n * @protected\n * @param {String} xy X or Y axis.\n * @param {module:core/chart_axis} axis The axis to validate.\n * @param {Number} [index=0] The index of the axis.\n */\n Base.prototype._validateAxis = function(xy, axis, index) {\n index = typeof index === 'undefined' ? 0 : index;\n if (index > 0) {\n var axes = xy == 'x' ? this._xaxes : this._yaxes;\n if (typeof axes[index - 1] === 'undefined') {\n throw new Error('Missing ' + xy + ' axis at index lower than ' + index);\n }\n }\n };\n\n /**\n * Validate a series.\n *\n * @protected\n * @param {module:core/chart_series} series The series to validate.\n */\n Base.prototype._validateSeries = function(series) {\n if (this._series.length && this._series[0].getCount() != series.getCount()) {\n throw new Error('Series do not have an equal number of values.');\n\n } else if (this._labels.length && this._labels.length != series.getCount()) {\n throw new Error('Series must match label values.');\n }\n };\n\n return Base;\n\n});\n"],"file":"chart_base.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_builder.min.js.map b/lib/amd/build/chart_builder.min.js.map index d5d4fd9ec59..b4897c63058 100644 --- a/lib/amd/build/chart_builder.min.js.map +++ b/lib/amd/build/chart_builder.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_builder.js"],"names":["define","$","make","data","deferred","Deferred","require","type","Klass","instance","prototype","create","resolve","promise"],"mappings":"AAsBAA,OAAM,sBAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CA4B3B,MArBa,CAWTC,IAAI,CAAE,cAASC,CAAT,CAAe,CACjB,GAAIC,CAAAA,CAAQ,CAAGH,CAAC,CAACI,QAAF,EAAf,CACAC,OAAO,CAAC,CAAC,cAAgBH,CAAI,CAACI,IAAtB,CAAD,CAA8B,SAASC,CAAT,CAAgB,CACjD,GAAIC,CAAAA,CAAQ,CAAGD,CAAK,CAACE,SAAN,CAAgBC,MAAhB,CAAuBH,CAAvB,CAA8BL,CAA9B,CAAf,CACAC,CAAQ,CAACQ,OAAT,CAAiBH,CAAjB,CACH,CAHM,CAAP,CAIA,MAAOL,CAAAA,CAAQ,CAACS,OAAT,EACV,CAlBQ,CAuBhB,CA9BK,CAAN","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 .\n\n/**\n * Chart builder.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'], function($) {\n\n /**\n * Chart builder.\n *\n * @exports core/chart_builder\n */\n var module = {\n\n /**\n * Make a chart instance.\n *\n * This takes data, most likely generated in PHP, and creates a chart instance from it\n * deferring most of the logic to {@link module:core/chart_base.create}.\n *\n * @param {Object} data The data.\n * @return {Promise} A promise resolved with the chart instance.\n */\n make: function(data) {\n var deferred = $.Deferred();\n require(['core/chart_' + data.type], function(Klass) {\n var instance = Klass.prototype.create(Klass, data);\n deferred.resolve(instance);\n });\n return deferred.promise();\n }\n };\n\n return module;\n\n});\n"],"file":"chart_builder.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_builder.js"],"names":["define","$","make","data","deferred","Deferred","require","type","Klass","instance","prototype","create","resolve","promise"],"mappings":"AAqBAA,OAAM,sBAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CA4B3B,MArBa,CAWTC,IAAI,CAAE,cAASC,CAAT,CAAe,CACjB,GAAIC,CAAAA,CAAQ,CAAGH,CAAC,CAACI,QAAF,EAAf,CACAC,OAAO,CAAC,CAAC,cAAgBH,CAAI,CAACI,IAAtB,CAAD,CAA8B,SAASC,CAAT,CAAgB,CACjD,GAAIC,CAAAA,CAAQ,CAAGD,CAAK,CAACE,SAAN,CAAgBC,MAAhB,CAAuBH,CAAvB,CAA8BL,CAA9B,CAAf,CACAC,CAAQ,CAACQ,OAAT,CAAiBH,CAAjB,CACH,CAHM,CAAP,CAIA,MAAOL,CAAAA,CAAQ,CAACS,OAAT,EACV,CAlBQ,CAuBhB,CA9BK,CAAN","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 .\n\n/**\n * Chart builder.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery'], function($) {\n\n /**\n * Chart builder.\n *\n * @exports core/chart_builder\n */\n var module = {\n\n /**\n * Make a chart instance.\n *\n * This takes data, most likely generated in PHP, and creates a chart instance from it\n * deferring most of the logic to {@link module:core/chart_base.create}.\n *\n * @param {Object} data The data.\n * @return {Promise} A promise resolved with the chart instance.\n */\n make: function(data) {\n var deferred = $.Deferred();\n require(['core/chart_' + data.type], function(Klass) {\n var instance = Klass.prototype.create(Klass, data);\n deferred.resolve(instance);\n });\n return deferred.promise();\n }\n };\n\n return module;\n\n});\n"],"file":"chart_builder.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_line.min.js.map b/lib/amd/build/chart_line.min.js.map index 901707cc11d..6187fc3013a 100644 --- a/lib/amd/build/chart_line.min.js.map +++ b/lib/amd/build/chart_line.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_line.js"],"names":["define","Base","Line","prototype","constructor","apply","arguments","Object","create","TYPE","_smooth","Klass","data","chart","setSmooth","smooth","getSmooth"],"mappings":"AAuBAA,OAAM,mBAAC,CAAC,iBAAD,CAAD,CAAsB,SAASC,CAAT,CAAe,CASvC,QAASC,CAAAA,CAAT,EAAgB,CACZD,CAAI,CAACE,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,CACH,CACDJ,CAAI,CAACC,SAAL,CAAiBI,MAAM,CAACC,MAAP,CAAcP,CAAI,CAACE,SAAnB,CAAjB,CAGAD,CAAI,CAACC,SAAL,CAAeM,IAAf,CAAsB,MAAtB,CAUAP,CAAI,CAACC,SAAL,CAAeO,OAAf,IAGAR,CAAI,CAACC,SAAL,CAAeK,MAAf,CAAwB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAC1C,GAAIC,CAAAA,CAAK,CAAGZ,CAAI,CAACE,SAAL,CAAeK,MAAf,CAAsBH,KAAtB,CAA4B,IAA5B,CAAkCC,SAAlC,CAAZ,CACAO,CAAK,CAACC,SAAN,CAAgBF,CAAI,CAACG,MAArB,EACA,MAAOF,CAAAA,CACV,CAJD,CAYAX,CAAI,CAACC,SAAL,CAAea,SAAf,CAA2B,UAAW,CAClC,MAAO,MAAKN,OACf,CAFD,CAUAR,CAAI,CAACC,SAAL,CAAeW,SAAf,CAA2B,SAASC,CAAT,CAAiB,CACxC,KAAKL,OAAL,GAAuBK,CAC1B,CAFD,CAIA,MAAOb,CAAAA,CAEV,CAxDK,CAAN","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 .\n\n/**\n * Chart line.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_line\n */\ndefine(['core/chart_base'], function(Base) {\n\n /**\n * Line chart.\n *\n * @alias module:core/chart_line\n * @extends {module:core/chart_base}\n * @class\n */\n function Line() {\n Base.prototype.constructor.apply(this, arguments);\n }\n Line.prototype = Object.create(Base.prototype);\n\n /** @override */\n Line.prototype.TYPE = 'line';\n\n /**\n * Whether the line should be smooth or not.\n *\n * By default the chart lines are not smooth.\n *\n * @type {Bool}\n * @protected\n */\n Line.prototype._smooth = false;\n\n /** @override */\n Line.prototype.create = function(Klass, data) {\n var chart = Base.prototype.create.apply(this, arguments);\n chart.setSmooth(data.smooth);\n return chart;\n };\n\n /**\n * Get whether the line should be smooth or not.\n *\n * @method getSmooth\n * @returns {Bool}\n */\n Line.prototype.getSmooth = function() {\n return this._smooth;\n };\n\n /**\n * Set whether the line should be smooth or not.\n *\n * @method setSmooth\n * @param {Bool} smooth True if the line chart should be smooth, false otherwise.\n */\n Line.prototype.setSmooth = function(smooth) {\n this._smooth = Boolean(smooth);\n };\n\n return Line;\n\n});\n"],"file":"chart_line.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_line.js"],"names":["define","Base","Line","prototype","constructor","apply","arguments","Object","create","TYPE","_smooth","Klass","data","chart","setSmooth","smooth","getSmooth"],"mappings":"AAsBAA,OAAM,mBAAC,CAAC,iBAAD,CAAD,CAAsB,SAASC,CAAT,CAAe,CASvC,QAASC,CAAAA,CAAT,EAAgB,CACZD,CAAI,CAACE,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,CACH,CACDJ,CAAI,CAACC,SAAL,CAAiBI,MAAM,CAACC,MAAP,CAAcP,CAAI,CAACE,SAAnB,CAAjB,CAGAD,CAAI,CAACC,SAAL,CAAeM,IAAf,CAAsB,MAAtB,CAUAP,CAAI,CAACC,SAAL,CAAeO,OAAf,IAGAR,CAAI,CAACC,SAAL,CAAeK,MAAf,CAAwB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CAC1C,GAAIC,CAAAA,CAAK,CAAGZ,CAAI,CAACE,SAAL,CAAeK,MAAf,CAAsBH,KAAtB,CAA4B,IAA5B,CAAkCC,SAAlC,CAAZ,CACAO,CAAK,CAACC,SAAN,CAAgBF,CAAI,CAACG,MAArB,EACA,MAAOF,CAAAA,CACV,CAJD,CAYAX,CAAI,CAACC,SAAL,CAAea,SAAf,CAA2B,UAAW,CAClC,MAAO,MAAKN,OACf,CAFD,CAUAR,CAAI,CAACC,SAAL,CAAeW,SAAf,CAA2B,SAASC,CAAT,CAAiB,CACxC,KAAKL,OAAL,GAAuBK,CAC1B,CAFD,CAIA,MAAOb,CAAAA,CAEV,CAxDK,CAAN","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 .\n\n/**\n * Chart line.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_line\n */\ndefine(['core/chart_base'], function(Base) {\n\n /**\n * Line chart.\n *\n * @alias module:core/chart_line\n * @extends {module:core/chart_base}\n * @class\n */\n function Line() {\n Base.prototype.constructor.apply(this, arguments);\n }\n Line.prototype = Object.create(Base.prototype);\n\n /** @override */\n Line.prototype.TYPE = 'line';\n\n /**\n * Whether the line should be smooth or not.\n *\n * By default the chart lines are not smooth.\n *\n * @type {Bool}\n * @protected\n */\n Line.prototype._smooth = false;\n\n /** @override */\n Line.prototype.create = function(Klass, data) {\n var chart = Base.prototype.create.apply(this, arguments);\n chart.setSmooth(data.smooth);\n return chart;\n };\n\n /**\n * Get whether the line should be smooth or not.\n *\n * @method getSmooth\n * @returns {Bool}\n */\n Line.prototype.getSmooth = function() {\n return this._smooth;\n };\n\n /**\n * Set whether the line should be smooth or not.\n *\n * @method setSmooth\n * @param {Bool} smooth True if the line chart should be smooth, false otherwise.\n */\n Line.prototype.setSmooth = function(smooth) {\n this._smooth = Boolean(smooth);\n };\n\n return Line;\n\n});\n"],"file":"chart_line.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_output.min.js.map b/lib/amd/build/chart_output.min.js.map index 02868bb980f..8f24f07b6a1 100644 --- a/lib/amd/build/chart_output.min.js.map +++ b/lib/amd/build/chart_output.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_output.js"],"names":["define","Output"],"mappings":"AAwBAA,OAAM,qBAAC,CAAC,2BAAD,CAAD,CAAgC,SAASC,CAAT,CAAiB,CAQnD,MAFoBA,CAAAA,CAIvB,CAVK,CAAN","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 .\n\n/**\n * Chart output.\n *\n * Proxy to the default output module.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/chart_output_chartjs'], function(Output) {\n\n /**\n * @exports module:core/chart_output\n * @extends {module:core/chart_output_chartjs}\n */\n var defaultModule = Output;\n\n return defaultModule;\n\n});\n"],"file":"chart_output.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_output.js"],"names":["define","Output"],"mappings":"AAuBAA,OAAM,qBAAC,CAAC,2BAAD,CAAD,CAAgC,SAASC,CAAT,CAAiB,CAQnD,MAFoBA,CAAAA,CAIvB,CAVK,CAAN","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 .\n\n/**\n * Chart output.\n *\n * Proxy to the default output module.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/chart_output_chartjs'], function(Output) {\n\n /**\n * @exports module:core/chart_output\n * @extends {module:core/chart_output_chartjs}\n */\n var defaultModule = Output;\n\n return defaultModule;\n\n});\n"],"file":"chart_output.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_output_base.min.js.map b/lib/amd/build/chart_output_base.min.js.map index 34b383e6408..601154647c5 100644 --- a/lib/amd/build/chart_output_base.min.js.map +++ b/lib/amd/build/chart_output_base.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_output_base.js"],"names":["define","$","Base","node","chart","_node","_chart","prototype","update","Error"],"mappings":"AAyBAA,OAAM,0BAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAmB3B,QAASC,CAAAA,CAAT,CAAcC,CAAd,CAAoBC,CAApB,CAA2B,CACvB,KAAKC,KAAL,CAAaJ,CAAC,CAACE,CAAD,CAAd,CACA,KAAKG,MAAL,CAAcF,CACjB,CAYDF,CAAI,CAACK,SAAL,CAAeC,MAAf,CAAwB,UAAW,CAC/B,KAAM,IAAIC,CAAAA,KAAJ,CAAU,gBAAV,CACT,CAFD,CAIA,MAAOP,CAAAA,CAEV,CAxCK,CAAN","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 .\n\n/**\n * Chart output base.\n *\n * This takes a chart object and draws it.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_output_base\n */\ndefine(['jquery'], function($) {\n\n /**\n * Chart output base.\n *\n * The constructor of an output class must instantly generate and display the\n * chart. It is also the responsability of the output module to check that\n * the node received is of the appropriate type, if not a new node can be\n * added within.\n *\n * The output module has total control over the content of the node and can\n * clear it or output anything to it at will. A node should not be shared by\n * two simultaneous output modules.\n *\n * @class\n * @alias module:core/chart_output_base\n * @param {Node} node The node to output with/in.\n * @param {Chart} chart A chart object.\n */\n function Base(node, chart) {\n this._node = $(node);\n this._chart = chart;\n }\n\n /**\n * Update method.\n *\n * This is the public method through which an output instance in informed\n * that the chart instance has been updated and they need to update the\n * chart rendering.\n *\n * @abstract\n * @return {Void}\n */\n Base.prototype.update = function() {\n throw new Error('Not supported.');\n };\n\n return Base;\n\n});\n"],"file":"chart_output_base.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_output_base.js"],"names":["define","$","Base","node","chart","_node","_chart","prototype","update","Error"],"mappings":"AAwBAA,OAAM,0BAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAmB3B,QAASC,CAAAA,CAAT,CAAcC,CAAd,CAAoBC,CAApB,CAA2B,CACvB,KAAKC,KAAL,CAAaJ,CAAC,CAACE,CAAD,CAAd,CACA,KAAKG,MAAL,CAAcF,CACjB,CAYDF,CAAI,CAACK,SAAL,CAAeC,MAAf,CAAwB,UAAW,CAC/B,KAAM,IAAIC,CAAAA,KAAJ,CAAU,gBAAV,CACT,CAFD,CAIA,MAAOP,CAAAA,CAEV,CAxCK,CAAN","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 .\n\n/**\n * Chart output base.\n *\n * This takes a chart object and draws it.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_output_base\n */\ndefine(['jquery'], function($) {\n\n /**\n * Chart output base.\n *\n * The constructor of an output class must instantly generate and display the\n * chart. It is also the responsability of the output module to check that\n * the node received is of the appropriate type, if not a new node can be\n * added within.\n *\n * The output module has total control over the content of the node and can\n * clear it or output anything to it at will. A node should not be shared by\n * two simultaneous output modules.\n *\n * @class\n * @alias module:core/chart_output_base\n * @param {Node} node The node to output with/in.\n * @param {Chart} chart A chart object.\n */\n function Base(node, chart) {\n this._node = $(node);\n this._chart = chart;\n }\n\n /**\n * Update method.\n *\n * This is the public method through which an output instance in informed\n * that the chart instance has been updated and they need to update the\n * chart rendering.\n *\n * @abstract\n * @return {Void}\n */\n Base.prototype.update = function() {\n throw new Error('Not supported.');\n };\n\n return Base;\n\n});\n"],"file":"chart_output_base.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_output_chartjs.min.js.map b/lib/amd/build/chart_output_chartjs.min.js.map index 00452c680ef..81b805a84e0 100644 --- a/lib/amd/build/chart_output_chartjs.min.js.map +++ b/lib/amd/build/chart_output_chartjs.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_output_chartjs.js"],"names":["define","$","Chartjs","Axis","Bar","Base","Line","Pie","Series","makeAxisId","xy","index","Output","prototype","constructor","apply","arguments","_canvas","_node","prop","append","_build","Object","create","_config","_chartjs","_makeConfig","_cleanData","data","Array","map","value","html","text","_getChartType","type","_chart","getType","TYPE","getHorizontal","getDoughnut","_makeAxisConfig","axis","scaleData","id","getPosition","POS_DEFAULT","position","getLabel","scaleLabel","display","labelString","getStepSize","ticks","stepSize","getMax","max","getMin","min","config","labels","getLabels","datasets","_makeDatasetsConfig","options","title","getTitle","legendOptions","getLegendOptions","legend","getXAxes","forEach","i","axisLabels","scales","xAxes","callback","stacked","_isStacked","bind","getYAxes","yAxes","parseInt","tooltips","callbacks","label","_makeTooltip","sets","getSeries","series","colors","hasColoredValues","getColors","getColor","dataset","getValues","fill","getFill","backgroundColor","borderColor","lineTension","_isSmooth","getXAxis","xAxisID","getYAxis","yAxisID","tooltipItem","datasetIndex","serieLabel","serieLabels","chartData","tooltipData","tooltip","xLabel","yLabel","chartLabels","push","smooth","getSmooth","TYPE_LINE","getStacked","update","extend"],"mappings":"AAuBAA,OAAM,6BAAC,CACH,QADG,CAEH,cAFG,CAGH,iBAHG,CAIH,gBAJG,CAKH,wBALG,CAMH,iBANG,CAOH,gBAPG,CAQH,mBARG,CAAD,CASH,SAASC,CAAT,CAAYC,CAAZ,CAAqBC,CAArB,CAA2BC,CAA3B,CAAgCC,CAAhC,CAAsCC,CAAtC,CAA4CC,CAA5C,CAAiDC,CAAjD,CAAyD,CASxD,GAAIC,CAAAA,CAAU,CAAG,SAASC,CAAT,CAAaC,CAAb,CAAoB,CACjC,MAAO,QAAUD,CAAV,CAAe,GAAf,CAAqBC,CAC/B,CAFD,CAWA,QAASC,CAAAA,CAAT,EAAkB,CACdP,CAAI,CAACQ,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,EAGA,KAAKC,OAAL,CAAe,KAAKC,KAApB,CACA,GAAoC,QAAhC,OAAKD,OAAL,CAAaE,IAAb,CAAkB,SAAlB,CAAJ,CAA8C,CAC1C,KAAKF,OAAL,CAAehB,CAAC,CAAC,UAAD,CAAhB,CACA,KAAKiB,KAAL,CAAWE,MAAX,CAAkB,KAAKH,OAAvB,CACH,CAED,KAAKI,MAAL,EACH,CACDT,CAAM,CAACC,SAAP,CAAmBS,MAAM,CAACC,MAAP,CAAclB,CAAI,CAACQ,SAAnB,CAAnB,CAQAD,CAAM,CAACC,SAAP,CAAiBW,OAAjB,CAA2B,IAA3B,CAQAZ,CAAM,CAACC,SAAP,CAAiBY,QAAjB,CAA4B,IAA5B,CAQAb,CAAM,CAACC,SAAP,CAAiBI,OAAjB,CAA2B,IAA3B,CAOAL,CAAM,CAACC,SAAP,CAAiBQ,MAAjB,CAA0B,UAAW,CACjC,KAAKG,OAAL,CAAe,KAAKE,WAAL,EAAf,CACA,KAAKD,QAAL,CAAgB,GAAIvB,CAAAA,CAAJ,CAAY,KAAKe,OAAL,CAAa,CAAb,CAAZ,CAA6B,KAAKO,OAAlC,CACnB,CAHD,CAYAZ,CAAM,CAACC,SAAP,CAAiBc,UAAjB,CAA8B,SAASC,CAAT,CAAe,CACzC,GAAIA,CAAI,WAAYC,CAAAA,KAApB,CAA2B,CACvB,MAAOD,CAAAA,CAAI,CAACE,GAAL,CAAS,SAASC,CAAT,CAAgB,CAC5B,MAAO9B,CAAAA,CAAC,CAAC,QAAD,CAAD,CAAY+B,IAAZ,CAAiBD,CAAjB,EAAwBE,IAAxB,EACV,CAFM,CAGV,CAJD,IAIO,CACH,MAAOhC,CAAAA,CAAC,CAAC,QAAD,CAAD,CAAY+B,IAAZ,CAAiBJ,CAAjB,EAAuBK,IAAvB,EACV,CACJ,CARD,CAoBArB,CAAM,CAACC,SAAP,CAAiBqB,aAAjB,CAAiC,UAAW,CACxC,GAAIC,CAAAA,CAAI,CAAG,KAAKC,MAAL,CAAYC,OAAZ,EAAX,CAGA,GAAI,KAAKD,MAAL,CAAYC,OAAZ,KAA0BjC,CAAG,CAACS,SAAJ,CAAcyB,IAAxC,EAAgD,UAAKF,MAAL,CAAYG,aAAZ,EAApD,CAA0F,CACtFJ,CAAI,CAAG,eACV,CAFD,IAEO,IAAI,KAAKC,MAAL,CAAYC,OAAZ,KAA0B9B,CAAG,CAACM,SAAJ,CAAcyB,IAAxC,EAAgD,UAAKF,MAAL,CAAYI,WAAZ,EAApD,CAAwF,CAE3FL,CAAI,CAAG,UACV,CAED,MAAOA,CAAAA,CACV,CAZD,CAuBAvB,CAAM,CAACC,SAAP,CAAiB4B,eAAjB,CAAmC,SAASC,CAAT,CAAehC,CAAf,CAAmBC,CAAnB,CAA0B,CACzD,GAAIgC,CAAAA,CAAS,CAAG,CACZC,EAAE,CAAEnC,CAAU,CAACC,CAAD,CAAKC,CAAL,CADF,CAAhB,CAIA,GAAI+B,CAAI,CAACG,WAAL,KAAuB1C,CAAI,CAACU,SAAL,CAAeiC,WAA1C,CAAuD,CACnDH,CAAS,CAACI,QAAV,CAAqBL,CAAI,CAACG,WAAL,EACxB,CAED,GAAwB,IAApB,GAAAH,CAAI,CAACM,QAAL,EAAJ,CAA8B,CAC1BL,CAAS,CAACM,UAAV,CAAuB,CACnBC,OAAO,GADY,CAEnBC,WAAW,CAAE,KAAKxB,UAAL,CAAgBe,CAAI,CAACM,QAAL,EAAhB,CAFM,CAI1B,CAED,GAA2B,IAAvB,GAAAN,CAAI,CAACU,WAAL,EAAJ,CAAiC,CAC7BT,CAAS,CAACU,KAAV,CAAkBV,CAAS,CAACU,KAAV,EAAmB,EAArC,CACAV,CAAS,CAACU,KAAV,CAAgBC,QAAhB,CAA2BZ,CAAI,CAACU,WAAL,EAC9B,CAED,GAAsB,IAAlB,GAAAV,CAAI,CAACa,MAAL,EAAJ,CAA4B,CACxBZ,CAAS,CAACU,KAAV,CAAkBV,CAAS,CAACU,KAAV,EAAmB,EAArC,CACAV,CAAS,CAACU,KAAV,CAAgBG,GAAhB,CAAsBd,CAAI,CAACa,MAAL,EACzB,CAED,GAAsB,IAAlB,GAAAb,CAAI,CAACe,MAAL,EAAJ,CAA4B,CACxBd,CAAS,CAACU,KAAV,CAAkBV,CAAS,CAACU,KAAV,EAAmB,EAArC,CACAV,CAAS,CAACU,KAAV,CAAgBK,GAAhB,CAAsBhB,CAAI,CAACe,MAAL,EACzB,CAED,MAAOd,CAAAA,CACV,CAhCD,CAyCA/B,CAAM,CAACC,SAAP,CAAiBa,WAAjB,CAA+B,UAAW,IAClCiC,CAAAA,CAAM,CAAG,CACTxB,IAAI,CAAE,KAAKD,aAAL,EADG,CAETN,IAAI,CAAE,CACFgC,MAAM,CAAE,KAAKjC,UAAL,CAAgB,KAAKS,MAAL,CAAYyB,SAAZ,EAAhB,CADN,CAEFC,QAAQ,CAAE,KAAKC,mBAAL,EAFR,CAFG,CAMTC,OAAO,CAAE,CACLC,KAAK,CAAE,CACHf,OAAO,CAA6B,IAA3B,QAAKd,MAAL,CAAY8B,QAAZ,EADN,CAEHjC,IAAI,CAAE,KAAKN,UAAL,CAAgB,KAAKS,MAAL,CAAY8B,QAAZ,EAAhB,CAFH,CADF,CANA,CADyB,CAclCC,CAAa,CAAG,KAAK/B,MAAL,CAAYgC,gBAAZ,EAdkB,CAetC,GAAID,CAAJ,CAAmB,CACfR,CAAM,CAACK,OAAP,CAAeK,MAAf,CAAwBF,CAC3B,CAGD,KAAK/B,MAAL,CAAYkC,QAAZ,GAAuBC,OAAvB,CAA+B,SAAS7B,CAAT,CAAe8B,CAAf,CAAkB,CAC7C,GAAIC,CAAAA,CAAU,CAAG/B,CAAI,CAACmB,SAAL,EAAjB,CAEAF,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAwBf,CAAM,CAACK,OAAP,CAAeU,MAAf,EAAyB,EAAjD,CACAf,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBC,KAAtB,CAA8BhB,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBC,KAAtB,EAA+B,EAA7D,CACAhB,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBC,KAAtB,CAA4BH,CAA5B,EAAiC,KAAK/B,eAAL,CAAqBC,CAArB,CAA2B,GAA3B,CAAgC8B,CAAhC,CAAjC,CAEA,GAAmB,IAAf,GAAAC,CAAJ,CAAyB,CACrBd,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBC,KAAtB,CAA4BH,CAA5B,EAA+BnB,KAA/B,CAAqCuB,QAArC,CAAgD,SAAS7C,CAAT,CAAgBpB,CAAhB,CAAuB,CACnE,MAAO8D,CAAAA,CAAU,CAAC9D,CAAD,CAAV,EAAqB,EAC/B,CACJ,CACDgD,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBC,KAAtB,CAA4BH,CAA5B,EAA+BK,OAA/B,CAAyC,KAAKC,UAAL,EAC5C,CAb8B,CAa7BC,IAb6B,CAaxB,IAbwB,CAA/B,EAeA,KAAK3C,MAAL,CAAY4C,QAAZ,GAAuBT,OAAvB,CAA+B,SAAS7B,CAAT,CAAe8B,CAAf,CAAkB,CAC7C,GAAIC,CAAAA,CAAU,CAAG/B,CAAI,CAACmB,SAAL,EAAjB,CAEAF,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAwBf,CAAM,CAACK,OAAP,CAAeU,MAAf,EAAyB,EAAjD,CACAf,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBO,KAAtB,CAA8BtB,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBO,KAAtB,EAA+B,EAA7D,CACAtB,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBO,KAAtB,CAA4BT,CAA5B,EAAiC,KAAK/B,eAAL,CAAqBC,CAArB,CAA2B,GAA3B,CAAgC8B,CAAhC,CAAjC,CAEA,GAAmB,IAAf,GAAAC,CAAJ,CAAyB,CACrBd,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBO,KAAtB,CAA4BT,CAA5B,EAA+BnB,KAA/B,CAAqCuB,QAArC,CAAgD,SAAS7C,CAAT,CAAgB,CAC5D,MAAO0C,CAAAA,CAAU,CAACS,QAAQ,CAACnD,CAAD,CAAQ,EAAR,CAAT,CAAV,EAAmC,EAC7C,CACJ,CACD4B,CAAM,CAACK,OAAP,CAAeU,MAAf,CAAsBO,KAAtB,CAA4BT,CAA5B,EAA+BK,OAA/B,CAAyC,KAAKC,UAAL,EAC5C,CAb8B,CAa7BC,IAb6B,CAaxB,IAbwB,CAA/B,EAeApB,CAAM,CAACK,OAAP,CAAemB,QAAf,CAA0B,CACtBC,SAAS,CAAE,CACPC,KAAK,CAAE,KAAKC,YAAL,CAAkBP,IAAlB,CAAuB,IAAvB,CADA,CADW,CAA1B,CAMA,MAAOpB,CAAAA,CACV,CAzDD,CAiEA/C,CAAM,CAACC,SAAP,CAAiBkD,mBAAjB,CAAuC,UAAW,CAC9C,GAAIwB,CAAAA,CAAI,CAAG,KAAKnD,MAAL,CAAYoD,SAAZ,GAAwB1D,GAAxB,CAA4B,SAAS2D,CAAT,CAAiB,IAChDC,CAAAA,CAAM,CAAGD,CAAM,CAACE,gBAAP,GAA4BF,CAAM,CAACG,SAAP,EAA5B,CAAiDH,CAAM,CAACI,QAAP,EADV,CAEhDC,CAAO,CAAG,CACVT,KAAK,CAAE,KAAK1D,UAAL,CAAgB8D,CAAM,CAACzC,QAAP,EAAhB,CADG,CAEVpB,IAAI,CAAE6D,CAAM,CAACM,SAAP,EAFI,CAGV5D,IAAI,CAAEsD,CAAM,CAACpD,OAAP,EAHI,CAIV2D,IAAI,CAAEP,CAAM,CAACQ,OAAP,EAJI,CAKVC,eAAe,CAAER,CALP,CAOVS,WAAW,CAAE,KAAK/D,MAAL,CAAYC,OAAZ,IAAyB9B,CAAG,CAACM,SAAJ,CAAcyB,IAAvC,CAA8C,MAA9C,CAAuDoD,CAP1D,CAQVU,WAAW,CAAE,KAAKC,SAAL,CAAeZ,CAAf,EAAyB,EAAzB,CAA+B,CARlC,CAFsC,CAapD,GAA0B,IAAtB,GAAAA,CAAM,CAACa,QAAP,EAAJ,CAAgC,CAC5BR,CAAO,CAACS,OAAR,CAAkB9F,CAAU,CAAC,GAAD,CAAMgF,CAAM,CAACa,QAAP,EAAN,CAC/B,CACD,GAA0B,IAAtB,GAAAb,CAAM,CAACe,QAAP,EAAJ,CAAgC,CAC5BV,CAAO,CAACW,OAAR,CAAkBhG,CAAU,CAAC,GAAD,CAAMgF,CAAM,CAACe,QAAP,EAAN,CAC/B,CAED,MAAOV,CAAAA,CACV,CArBsC,CAqBrCf,IArBqC,CAqBhC,IArBgC,CAA5B,CAAX,CAsBA,MAAOQ,CAAAA,CACV,CAxBD,CAkCA3E,CAAM,CAACC,SAAP,CAAiByE,YAAjB,CAAgC,SAASoB,CAAT,CAAsB9E,CAAtB,CAA4B,IAGpD6D,CAAAA,CAAM,CAAG,KAAKrD,MAAL,CAAYoD,SAAZ,GAAwBkB,CAAW,CAACC,YAApC,CAH2C,CAIpDC,CAAU,CAAGnB,CAAM,CAACzC,QAAP,EAJuC,CAKpD6D,CAAW,CAAGpB,CAAM,CAAC5B,SAAP,EALsC,CAMpDiD,CAAS,CAAGlF,CAAI,CAACkC,QAAL,CAAc4C,CAAW,CAACC,YAA1B,EAAwC/E,IANA,CAOpDmF,CAAW,CAAGD,CAAS,CAACJ,CAAW,CAAC/F,KAAb,CAP6B,CAUpDqG,CAAO,CAAG,EAV0C,CAaxD,GAA0B,EAAtB,EAAAN,CAAW,CAACO,MAAZ,EAAkD,EAAtB,EAAAP,CAAW,CAACQ,MAA5C,CAA0D,CACtD,GAAIC,CAAAA,CAAW,CAAG,KAAKxF,UAAL,CAAgB,KAAKS,MAAL,CAAYyB,SAAZ,EAAhB,CAAlB,CACAmD,CAAO,CAACI,IAAR,CAAaD,CAAW,CAACT,CAAW,CAAC/F,KAAb,CAAxB,CACH,CAGD,GAAoB,IAAhB,GAAAkG,CAAJ,CAA0B,CACtBG,CAAO,CAACI,IAAR,CAAa,KAAKzF,UAAL,CAAgBkF,CAAW,CAACH,CAAW,CAAC/F,KAAb,CAA3B,CAAb,CACH,CAFD,IAEO,CACHqG,CAAO,CAACI,IAAR,CAAa,KAAKzF,UAAL,CAAgBiF,CAAhB,EAA8B,IAA9B,CAAqCG,CAAlD,CACH,CAED,MAAOC,CAAAA,CACV,CA1BD,CAmCApG,CAAM,CAACC,SAAP,CAAiBwF,SAAjB,CAA6B,SAASZ,CAAT,CAAiB,CAC1C,GAAI4B,CAAAA,CAAM,GAAV,CACA,GAAI,KAAKjF,MAAL,CAAYC,OAAZ,KAA0B/B,CAAI,CAACO,SAAL,CAAeyB,IAA7C,CAAmD,CAC/C+E,CAAM,CAAG5B,CAAM,CAAC6B,SAAP,EAAT,CACA,GAAe,IAAX,GAAAD,CAAJ,CAAqB,CACjBA,CAAM,CAAG,KAAKjF,MAAL,CAAYkF,SAAZ,EACZ,CACJ,CALD,IAKO,IAAI7B,CAAM,CAACpD,OAAP,KAAqB7B,CAAM,CAACK,SAAP,CAAiB0G,SAA1C,CAAqD,CACxDF,CAAM,CAAG5B,CAAM,CAAC6B,SAAP,EACZ,CAED,MAAOD,CAAAA,CACV,CAZD,CAoBAzG,CAAM,CAACC,SAAP,CAAiBiE,UAAjB,CAA8B,UAAW,CACrC,GAAID,CAAAA,CAAO,GAAX,CAGA,GAAI,KAAKzC,MAAL,CAAYC,OAAZ,KAA0BjC,CAAG,CAACS,SAAJ,CAAcyB,IAA5C,CAAkD,CAC9CuC,CAAO,CAAG,KAAKzC,MAAL,CAAYoF,UAAZ,EACb,CAED,MAAO3C,CAAAA,CACV,CATD,CAYAjE,CAAM,CAACC,SAAP,CAAiB4G,MAAjB,CAA0B,UAAW,CACjCxH,CAAC,CAACyH,MAAF,IAAe,KAAKlG,OAApB,CAA6B,KAAKE,WAAL,EAA7B,EACA,KAAKD,QAAL,CAAcgG,MAAd,EACH,CAHD,CAKA,MAAO7G,CAAAA,CAEV,CArVK,CAAN","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 .\n\n/**\n * Chart output for chart.js.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_output_chartjs\n */\ndefine([\n 'jquery',\n 'core/chartjs',\n 'core/chart_axis',\n 'core/chart_bar',\n 'core/chart_output_base',\n 'core/chart_line',\n 'core/chart_pie',\n 'core/chart_series'\n], function($, Chartjs, Axis, Bar, Base, Line, Pie, Series) {\n\n /**\n * Makes an axis ID.\n *\n * @param {String} xy Accepts 'x' and 'y'.\n * @param {Number} index The axis index.\n * @return {String}\n */\n var makeAxisId = function(xy, index) {\n return 'axis-' + xy + '-' + index;\n };\n\n /**\n * Chart output for Chart.js.\n *\n * @class\n * @alias module:core/chart_output_chartjs\n * @extends {module:core/chart_output_base}\n */\n function Output() {\n Base.prototype.constructor.apply(this, arguments);\n\n // Make sure that we've got a canvas tag.\n this._canvas = this._node;\n if (this._canvas.prop('tagName') != 'CANVAS') {\n this._canvas = $('');\n this._node.append(this._canvas);\n }\n\n this._build();\n }\n Output.prototype = Object.create(Base.prototype);\n\n /**\n * Reference to the chart config object.\n *\n * @type {Object}\n * @protected\n */\n Output.prototype._config = null;\n\n /**\n * Reference to the instance of chart.js.\n *\n * @type {Object}\n * @protected\n */\n Output.prototype._chartjs = null;\n\n /**\n * Reference to the canvas node.\n *\n * @type {Jquery}\n * @protected\n */\n Output.prototype._canvas = null;\n\n /**\n * Builds the config and the chart.\n *\n * @protected\n */\n Output.prototype._build = function() {\n this._config = this._makeConfig();\n this._chartjs = new Chartjs(this._canvas[0], this._config);\n };\n\n /**\n * Clean data.\n *\n * @param {(String|String[])} data A single string or an array of strings.\n * @returns {(String|String[])}\n * @protected\n */\n Output.prototype._cleanData = function(data) {\n if (data instanceof Array) {\n return data.map(function(value) {\n return $('').html(value).text();\n });\n } else {\n return $('').html(data).text();\n }\n };\n\n /**\n * Get the chart type and handles the Chart.js specific chart types.\n *\n * By default returns the current chart TYPE value. Also does the handling of specific chart types, for example\n * check if the bar chart should be horizontal and the pie chart should be displayed as a doughnut.\n *\n * @method getChartType\n * @returns {String} the chart type.\n * @protected\n */\n Output.prototype._getChartType = function() {\n var type = this._chart.getType();\n\n // Bars can be displayed vertically and horizontally, defining horizontalBar type.\n if (this._chart.getType() === Bar.prototype.TYPE && this._chart.getHorizontal() === true) {\n type = 'horizontalBar';\n } else if (this._chart.getType() === Pie.prototype.TYPE && this._chart.getDoughnut() === true) {\n // Pie chart can be displayed as doughnut.\n type = 'doughnut';\n }\n\n return type;\n };\n\n /**\n * Make the axis config.\n *\n * @protected\n * @param {module:core/chart_axis} axis The axis.\n * @param {String} xy Accepts 'x' or 'y'.\n * @param {Number} index The axis index.\n * @return {Object} The axis config.\n */\n Output.prototype._makeAxisConfig = function(axis, xy, index) {\n var scaleData = {\n id: makeAxisId(xy, index)\n };\n\n if (axis.getPosition() !== Axis.prototype.POS_DEFAULT) {\n scaleData.position = axis.getPosition();\n }\n\n if (axis.getLabel() !== null) {\n scaleData.scaleLabel = {\n display: true,\n labelString: this._cleanData(axis.getLabel())\n };\n }\n\n if (axis.getStepSize() !== null) {\n scaleData.ticks = scaleData.ticks || {};\n scaleData.ticks.stepSize = axis.getStepSize();\n }\n\n if (axis.getMax() !== null) {\n scaleData.ticks = scaleData.ticks || {};\n scaleData.ticks.max = axis.getMax();\n }\n\n if (axis.getMin() !== null) {\n scaleData.ticks = scaleData.ticks || {};\n scaleData.ticks.min = axis.getMin();\n }\n\n return scaleData;\n };\n\n /**\n * Make the config config.\n *\n * @protected\n * @param {module:core/chart_axis} axis The axis.\n * @return {Object} The axis config.\n */\n Output.prototype._makeConfig = function() {\n var config = {\n type: this._getChartType(),\n data: {\n labels: this._cleanData(this._chart.getLabels()),\n datasets: this._makeDatasetsConfig()\n },\n options: {\n title: {\n display: this._chart.getTitle() !== null,\n text: this._cleanData(this._chart.getTitle())\n }\n }\n };\n var legendOptions = this._chart.getLegendOptions();\n if (legendOptions) {\n config.options.legend = legendOptions;\n }\n\n\n this._chart.getXAxes().forEach(function(axis, i) {\n var axisLabels = axis.getLabels();\n\n config.options.scales = config.options.scales || {};\n config.options.scales.xAxes = config.options.scales.xAxes || [];\n config.options.scales.xAxes[i] = this._makeAxisConfig(axis, 'x', i);\n\n if (axisLabels !== null) {\n config.options.scales.xAxes[i].ticks.callback = function(value, index) {\n return axisLabels[index] || '';\n };\n }\n config.options.scales.xAxes[i].stacked = this._isStacked();\n }.bind(this));\n\n this._chart.getYAxes().forEach(function(axis, i) {\n var axisLabels = axis.getLabels();\n\n config.options.scales = config.options.scales || {};\n config.options.scales.yAxes = config.options.scales.yAxes || [];\n config.options.scales.yAxes[i] = this._makeAxisConfig(axis, 'y', i);\n\n if (axisLabels !== null) {\n config.options.scales.yAxes[i].ticks.callback = function(value) {\n return axisLabels[parseInt(value, 10)] || '';\n };\n }\n config.options.scales.yAxes[i].stacked = this._isStacked();\n }.bind(this));\n\n config.options.tooltips = {\n callbacks: {\n label: this._makeTooltip.bind(this)\n }\n };\n\n return config;\n };\n\n /**\n * Get the datasets configurations.\n *\n * @protected\n * @return {Object[]}\n */\n Output.prototype._makeDatasetsConfig = function() {\n var sets = this._chart.getSeries().map(function(series) {\n var colors = series.hasColoredValues() ? series.getColors() : series.getColor();\n var dataset = {\n label: this._cleanData(series.getLabel()),\n data: series.getValues(),\n type: series.getType(),\n fill: series.getFill(),\n backgroundColor: colors,\n // Pie charts look better without borders.\n borderColor: this._chart.getType() == Pie.prototype.TYPE ? '#fff' : colors,\n lineTension: this._isSmooth(series) ? 0.3 : 0\n };\n\n if (series.getXAxis() !== null) {\n dataset.xAxisID = makeAxisId('x', series.getXAxis());\n }\n if (series.getYAxis() !== null) {\n dataset.yAxisID = makeAxisId('y', series.getYAxis());\n }\n\n return dataset;\n }.bind(this));\n return sets;\n };\n\n /**\n * Get the chart data, add labels and rebuild the tooltip.\n *\n * @param {Object[]} tooltipItem The tooltip item data.\n * @param {Object[]} data The chart data.\n * @returns {String}\n * @protected\n */\n Output.prototype._makeTooltip = function(tooltipItem, data) {\n\n // Get series and chart data to rebuild the tooltip and add labels.\n var series = this._chart.getSeries()[tooltipItem.datasetIndex];\n var serieLabel = series.getLabel();\n var serieLabels = series.getLabels();\n var chartData = data.datasets[tooltipItem.datasetIndex].data;\n var tooltipData = chartData[tooltipItem.index];\n\n // Build default tooltip.\n var tooltip = [];\n\n // Pie and doughnut charts does not have axis.\n if (tooltipItem.xLabel == '' && tooltipItem.yLabel == '') {\n var chartLabels = this._cleanData(this._chart.getLabels());\n tooltip.push(chartLabels[tooltipItem.index]);\n }\n\n // Add series labels to the tooltip if any.\n if (serieLabels !== null) {\n tooltip.push(this._cleanData(serieLabels[tooltipItem.index]));\n } else {\n tooltip.push(this._cleanData(serieLabel) + ': ' + tooltipData);\n }\n\n return tooltip;\n };\n\n /**\n * Verify if the chart line is smooth or not.\n *\n * @protected\n * @param {module:core/chart_series} series The series.\n * @returns {Bool}\n */\n Output.prototype._isSmooth = function(series) {\n var smooth = false;\n if (this._chart.getType() === Line.prototype.TYPE) {\n smooth = series.getSmooth();\n if (smooth === null) {\n smooth = this._chart.getSmooth();\n }\n } else if (series.getType() === Series.prototype.TYPE_LINE) {\n smooth = series.getSmooth();\n }\n\n return smooth;\n };\n\n /**\n * Verify if the bar chart is stacked or not.\n *\n * @protected\n * @returns {Bool}\n */\n Output.prototype._isStacked = function() {\n var stacked = false;\n\n // Stacking is (currently) only supported for bar charts.\n if (this._chart.getType() === Bar.prototype.TYPE) {\n stacked = this._chart.getStacked();\n }\n\n return stacked;\n };\n\n /** @override */\n Output.prototype.update = function() {\n $.extend(true, this._config, this._makeConfig());\n this._chartjs.update();\n };\n\n return Output;\n\n});\n"],"file":"chart_output_chartjs.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_output_chartjs.js"],"names":["define","$","Chartjs","Axis","Bar","Base","Line","Pie","Series","makeAxisId","xy","index","Output","prototype","constructor","apply","arguments","_canvas","_node","prop","append","_build","Object","create","_config","_chartjs","_makeConfig","_cleanData","data","Array","map","value","html","text","_getChartType","type","_chart","getType","TYPE","getHorizontal","getDoughnut","_makeAxisConfig","axis","scaleData","id","getPosition","POS_DEFAULT","position","getLabel","scaleLabel","display","labelString","getStepSize","ticks","stepSize","getMax","max","getMin","min","config","labels","getLabels","datasets","_makeDatasetsConfig","options","title","getTitle","legendOptions","getLegendOptions","legend","getXAxes","forEach","i","axisLabels","scales","xAxes","callback","stacked","_isStacked","bind","getYAxes","yAxes","parseInt","tooltips","callbacks","label","_makeTooltip","sets","getSeries","series","colors","hasColoredValues","getColors","getColor","dataset","getValues","fill","getFill","backgroundColor","borderColor","lineTension","_isSmooth","getXAxis","xAxisID","getYAxis","yAxisID","tooltipItem","datasetIndex","serieLabel","serieLabels","chartData","tooltipData","tooltip","xLabel","yLabel","chartLabels","push","smooth","getSmooth","TYPE_LINE","getStacked","update","extend"],"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 .\n\n/**\n * Chart output for chart.js.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_output_chartjs\n */\ndefine([\n 'jquery',\n 'core/chartjs',\n 'core/chart_axis',\n 'core/chart_bar',\n 'core/chart_output_base',\n 'core/chart_line',\n 'core/chart_pie',\n 'core/chart_series'\n], function($, Chartjs, Axis, Bar, Base, Line, Pie, Series) {\n\n /**\n * Makes an axis ID.\n *\n * @param {String} xy Accepts 'x' and 'y'.\n * @param {Number} index The axis index.\n * @return {String}\n */\n var makeAxisId = function(xy, index) {\n return 'axis-' + xy + '-' + index;\n };\n\n /**\n * Chart output for Chart.js.\n *\n * @class\n * @alias module:core/chart_output_chartjs\n * @extends {module:core/chart_output_base}\n */\n function Output() {\n Base.prototype.constructor.apply(this, arguments);\n\n // Make sure that we've got a canvas tag.\n this._canvas = this._node;\n if (this._canvas.prop('tagName') != 'CANVAS') {\n this._canvas = $('');\n this._node.append(this._canvas);\n }\n\n this._build();\n }\n Output.prototype = Object.create(Base.prototype);\n\n /**\n * Reference to the chart config object.\n *\n * @type {Object}\n * @protected\n */\n Output.prototype._config = null;\n\n /**\n * Reference to the instance of chart.js.\n *\n * @type {Object}\n * @protected\n */\n Output.prototype._chartjs = null;\n\n /**\n * Reference to the canvas node.\n *\n * @type {Jquery}\n * @protected\n */\n Output.prototype._canvas = null;\n\n /**\n * Builds the config and the chart.\n *\n * @protected\n */\n Output.prototype._build = function() {\n this._config = this._makeConfig();\n this._chartjs = new Chartjs(this._canvas[0], this._config);\n };\n\n /**\n * Clean data.\n *\n * @param {(String|String[])} data A single string or an array of strings.\n * @returns {(String|String[])}\n * @protected\n */\n Output.prototype._cleanData = function(data) {\n if (data instanceof Array) {\n return data.map(function(value) {\n return $('').html(value).text();\n });\n } else {\n return $('').html(data).text();\n }\n };\n\n /**\n * Get the chart type and handles the Chart.js specific chart types.\n *\n * By default returns the current chart TYPE value. Also does the handling of specific chart types, for example\n * check if the bar chart should be horizontal and the pie chart should be displayed as a doughnut.\n *\n * @method getChartType\n * @returns {String} the chart type.\n * @protected\n */\n Output.prototype._getChartType = function() {\n var type = this._chart.getType();\n\n // Bars can be displayed vertically and horizontally, defining horizontalBar type.\n if (this._chart.getType() === Bar.prototype.TYPE && this._chart.getHorizontal() === true) {\n type = 'horizontalBar';\n } else if (this._chart.getType() === Pie.prototype.TYPE && this._chart.getDoughnut() === true) {\n // Pie chart can be displayed as doughnut.\n type = 'doughnut';\n }\n\n return type;\n };\n\n /**\n * Make the axis config.\n *\n * @protected\n * @param {module:core/chart_axis} axis The axis.\n * @param {String} xy Accepts 'x' or 'y'.\n * @param {Number} index The axis index.\n * @return {Object} The axis config.\n */\n Output.prototype._makeAxisConfig = function(axis, xy, index) {\n var scaleData = {\n id: makeAxisId(xy, index)\n };\n\n if (axis.getPosition() !== Axis.prototype.POS_DEFAULT) {\n scaleData.position = axis.getPosition();\n }\n\n if (axis.getLabel() !== null) {\n scaleData.scaleLabel = {\n display: true,\n labelString: this._cleanData(axis.getLabel())\n };\n }\n\n if (axis.getStepSize() !== null) {\n scaleData.ticks = scaleData.ticks || {};\n scaleData.ticks.stepSize = axis.getStepSize();\n }\n\n if (axis.getMax() !== null) {\n scaleData.ticks = scaleData.ticks || {};\n scaleData.ticks.max = axis.getMax();\n }\n\n if (axis.getMin() !== null) {\n scaleData.ticks = scaleData.ticks || {};\n scaleData.ticks.min = axis.getMin();\n }\n\n return scaleData;\n };\n\n /**\n * Make the config config.\n *\n * @protected\n * @param {module:core/chart_axis} axis The axis.\n * @return {Object} The axis config.\n */\n Output.prototype._makeConfig = function() {\n var config = {\n type: this._getChartType(),\n data: {\n labels: this._cleanData(this._chart.getLabels()),\n datasets: this._makeDatasetsConfig()\n },\n options: {\n title: {\n display: this._chart.getTitle() !== null,\n text: this._cleanData(this._chart.getTitle())\n }\n }\n };\n var legendOptions = this._chart.getLegendOptions();\n if (legendOptions) {\n config.options.legend = legendOptions;\n }\n\n\n this._chart.getXAxes().forEach(function(axis, i) {\n var axisLabels = axis.getLabels();\n\n config.options.scales = config.options.scales || {};\n config.options.scales.xAxes = config.options.scales.xAxes || [];\n config.options.scales.xAxes[i] = this._makeAxisConfig(axis, 'x', i);\n\n if (axisLabels !== null) {\n config.options.scales.xAxes[i].ticks.callback = function(value, index) {\n return axisLabels[index] || '';\n };\n }\n config.options.scales.xAxes[i].stacked = this._isStacked();\n }.bind(this));\n\n this._chart.getYAxes().forEach(function(axis, i) {\n var axisLabels = axis.getLabels();\n\n config.options.scales = config.options.scales || {};\n config.options.scales.yAxes = config.options.scales.yAxes || [];\n config.options.scales.yAxes[i] = this._makeAxisConfig(axis, 'y', i);\n\n if (axisLabels !== null) {\n config.options.scales.yAxes[i].ticks.callback = function(value) {\n return axisLabels[parseInt(value, 10)] || '';\n };\n }\n config.options.scales.yAxes[i].stacked = this._isStacked();\n }.bind(this));\n\n config.options.tooltips = {\n callbacks: {\n label: this._makeTooltip.bind(this)\n }\n };\n\n return config;\n };\n\n /**\n * Get the datasets configurations.\n *\n * @protected\n * @return {Object[]}\n */\n Output.prototype._makeDatasetsConfig = function() {\n var sets = this._chart.getSeries().map(function(series) {\n var colors = series.hasColoredValues() ? series.getColors() : series.getColor();\n var dataset = {\n label: this._cleanData(series.getLabel()),\n data: series.getValues(),\n type: series.getType(),\n fill: series.getFill(),\n backgroundColor: colors,\n // Pie charts look better without borders.\n borderColor: this._chart.getType() == Pie.prototype.TYPE ? '#fff' : colors,\n lineTension: this._isSmooth(series) ? 0.3 : 0\n };\n\n if (series.getXAxis() !== null) {\n dataset.xAxisID = makeAxisId('x', series.getXAxis());\n }\n if (series.getYAxis() !== null) {\n dataset.yAxisID = makeAxisId('y', series.getYAxis());\n }\n\n return dataset;\n }.bind(this));\n return sets;\n };\n\n /**\n * Get the chart data, add labels and rebuild the tooltip.\n *\n * @param {Object[]} tooltipItem The tooltip item data.\n * @param {Object[]} data The chart data.\n * @returns {String}\n * @protected\n */\n Output.prototype._makeTooltip = function(tooltipItem, data) {\n\n // Get series and chart data to rebuild the tooltip and add labels.\n var series = this._chart.getSeries()[tooltipItem.datasetIndex];\n var serieLabel = series.getLabel();\n var serieLabels = series.getLabels();\n var chartData = data.datasets[tooltipItem.datasetIndex].data;\n var tooltipData = chartData[tooltipItem.index];\n\n // Build default tooltip.\n var tooltip = [];\n\n // Pie and doughnut charts does not have axis.\n if (tooltipItem.xLabel == '' && tooltipItem.yLabel == '') {\n var chartLabels = this._cleanData(this._chart.getLabels());\n tooltip.push(chartLabels[tooltipItem.index]);\n }\n\n // Add series labels to the tooltip if any.\n if (serieLabels !== null) {\n tooltip.push(this._cleanData(serieLabels[tooltipItem.index]));\n } else {\n tooltip.push(this._cleanData(serieLabel) + ': ' + tooltipData);\n }\n\n return tooltip;\n };\n\n /**\n * Verify if the chart line is smooth or not.\n *\n * @protected\n * @param {module:core/chart_series} series The series.\n * @returns {Bool}\n */\n Output.prototype._isSmooth = function(series) {\n var smooth = false;\n if (this._chart.getType() === Line.prototype.TYPE) {\n smooth = series.getSmooth();\n if (smooth === null) {\n smooth = this._chart.getSmooth();\n }\n } else if (series.getType() === Series.prototype.TYPE_LINE) {\n smooth = series.getSmooth();\n }\n\n return smooth;\n };\n\n /**\n * Verify if the bar chart is stacked or not.\n *\n * @protected\n * @returns {Bool}\n */\n Output.prototype._isStacked = function() {\n var stacked = false;\n\n // Stacking is (currently) only supported for bar charts.\n if (this._chart.getType() === Bar.prototype.TYPE) {\n stacked = this._chart.getStacked();\n }\n\n return stacked;\n };\n\n /** @override */\n Output.prototype.update = function() {\n $.extend(true, this._config, this._makeConfig());\n this._chartjs.update();\n };\n\n return Output;\n\n});\n"],"file":"chart_output_chartjs.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_output_htmltable.min.js.map b/lib/amd/build/chart_output_htmltable.min.js.map index 21e305990e0..4fdca4c0a93 100644 --- a/lib/amd/build/chart_output_htmltable.min.js.map +++ b/lib/amd/build/chart_output_htmltable.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_output_htmltable.js"],"names":["define","$","Base","Output","prototype","constructor","apply","arguments","_build","Object","create","_node","empty","append","_makeTable","tbl","c","_chart","node","value","labels","getLabels","hasLabel","length","series","getSeries","seriesLabels","rowCount","getCount","addClass","getTitle","text","forEach","serie","getLabel","attr","rowId","serieId","getValues","update"],"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 .\n\n/**\n * Chart output for HTML table.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_output_htmltable\n */\ndefine([\n 'jquery',\n 'core/chart_output_base',\n], function($, Base) {\n\n /**\n * Render a chart as an HTML table.\n *\n * @class\n * @extends {module:core/chart_output_base}\n * @alias module:core/chart_output_htmltable\n */\n function Output() {\n Base.prototype.constructor.apply(this, arguments);\n this._build();\n }\n Output.prototype = Object.create(Base.prototype);\n\n /**\n * Attach the table to the document.\n *\n * @protected\n */\n Output.prototype._build = function() {\n this._node.empty();\n this._node.append(this._makeTable());\n };\n\n /**\n * Builds the table node.\n *\n * @protected\n * @return {Jquery}\n */\n Output.prototype._makeTable = function() {\n var tbl = $(''),\n c = this._chart,\n node,\n value,\n labels = c.getLabels(),\n hasLabel = labels.length > 0,\n series = c.getSeries(),\n seriesLabels,\n rowCount = series[0].getCount();\n\n // Identify the table.\n tbl.addClass('chart-output-htmltable generaltable');\n\n // Set the caption.\n if (c.getTitle() !== null) {\n tbl.append($('');\n if (hasLabel) {\n node.append($('');\n if (labels.length > 0) {\n node.append(\n $('
      ').text(c.getTitle()));\n }\n\n // Write the column headers.\n node = $('
      '));\n }\n series.forEach(function(serie) {\n node.append(\n $('')\n .text(serie.getLabel())\n .attr('scope', 'col')\n );\n });\n tbl.append(node);\n\n // Write rows.\n for (var rowId = 0; rowId < rowCount; rowId++) {\n node = $('
      ')\n .text(labels[rowId])\n .attr('scope', 'row')\n );\n }\n for (var serieId = 0; serieId < series.length; serieId++) {\n value = series[serieId].getValues()[rowId];\n seriesLabels = series[serieId].getLabels();\n if (seriesLabels !== null) {\n value = series[serieId].getLabels()[rowId];\n }\n node.append($('').text(value));\n }\n tbl.append(node);\n }\n\n return tbl;\n };\n\n /** @override */\n Output.prototype.update = function() {\n this._build();\n };\n\n return Output;\n\n});\n"],"file":"chart_output_htmltable.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_output_htmltable.js"],"names":["define","$","Base","Output","prototype","constructor","apply","arguments","_build","Object","create","_node","empty","append","_makeTable","tbl","c","_chart","node","value","labels","getLabels","hasLabel","length","series","getSeries","seriesLabels","rowCount","getCount","addClass","getTitle","text","forEach","serie","getLabel","attr","rowId","serieId","getValues","update"],"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 .\n\n/**\n * Chart output for HTML table.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_output_htmltable\n */\ndefine([\n 'jquery',\n 'core/chart_output_base',\n], function($, Base) {\n\n /**\n * Render a chart as an HTML table.\n *\n * @class\n * @extends {module:core/chart_output_base}\n * @alias module:core/chart_output_htmltable\n */\n function Output() {\n Base.prototype.constructor.apply(this, arguments);\n this._build();\n }\n Output.prototype = Object.create(Base.prototype);\n\n /**\n * Attach the table to the document.\n *\n * @protected\n */\n Output.prototype._build = function() {\n this._node.empty();\n this._node.append(this._makeTable());\n };\n\n /**\n * Builds the table node.\n *\n * @protected\n * @return {Jquery}\n */\n Output.prototype._makeTable = function() {\n var tbl = $(''),\n c = this._chart,\n node,\n value,\n labels = c.getLabels(),\n hasLabel = labels.length > 0,\n series = c.getSeries(),\n seriesLabels,\n rowCount = series[0].getCount();\n\n // Identify the table.\n tbl.addClass('chart-output-htmltable generaltable');\n\n // Set the caption.\n if (c.getTitle() !== null) {\n tbl.append($('');\n if (hasLabel) {\n node.append($('');\n if (labels.length > 0) {\n node.append(\n $(') where each draggable element has a drag handle.\n * The best practice is to use the template core/drag_handle:\n * $OUTPUT->render_from_template('core/drag_handle', ['movetitle' => get_string('movecontent', 'moodle', ELEMENTNAME)]);\n *\n * Attach this JS module to this list:\n *\n * Space between define and ( critical in comment but not allowed in code in order to function\n * correctly with Moodle's requirejs.php\n *\n * define (['jquery', 'core/sortable_list'], function($, SortableList) {\n * var list = new SortableList('ul.my-awesome-list'); // source list (usually
        or
      ) - selector or element\n *\n * // Listen to the events when element is dragged.\n * $('ul.my-awesome-list > *').on(SortableList.EVENTS.DROP, function(evt, info) {\n * console.log(info);\n * });\n *\n * // Advanced usage. Overwrite methods getElementName, getDestinationName, moveDialogueTitle, for example:\n * list.getElementName = function(element) {\n * return $.Deferred().resolve(element.attr('data-name'));\n * }\n * }\n *\n * More details: https://docs.moodle.org/dev/Sortable_list\n *\n * For the full list of possible parameters see var defaultParameters below.\n *\n * The following jQuery events are fired:\n * - SortableList.EVENTS.DRAGSTART : when user started dragging a list element\n * - SortableList.EVENTS.DRAG : when user dragged a list element to a new position\n * - SortableList.EVENTS.DROP : when user dropped a list element\n * - SortableList.EVENTS.DROPEND : when user finished dragging - either fired right after dropping or\n * if \"Esc\" was pressed during dragging\n *\n * @module core/sortable_list\n * @class sortable_list\n * @package core\n * @copyright 2018 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/log', 'core/autoscroll', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/notification'],\nfunction($, log, autoScroll, str, ModalFactory, ModalEvents, Notification) {\n\n /**\n * Default parameters\n *\n * @private\n * @type {Object}\n */\n var defaultParameters = {\n targetListSelector: null,\n moveHandlerSelector: '[data-drag-type=move]',\n isHorizontal: false,\n autoScroll: true\n };\n\n /**\n * Class names for different elements that may be changed during sorting\n *\n * @private\n * @type {Object}\n */\n var CSS = {\n keyboardDragClass: 'dragdrop-keyboard-drag',\n isDraggedClass: 'sortable-list-is-dragged',\n currentPositionClass: 'sortable-list-current-position',\n sourceListClass: 'sortable-list-source',\n targetListClass: 'sortable-list-target',\n overElementClass: 'sortable-list-over-element'\n };\n\n /**\n * Test the browser support for options objects on event listeners.\n * @return {Boolean}\n */\n var eventListenerOptionsSupported = function() {\n var passivesupported = false,\n options,\n testeventname = \"testpassiveeventoptions\";\n\n // Options support testing example from:\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n\n try {\n options = Object.defineProperty({}, \"passive\", {\n get: function() {\n passivesupported = true;\n }\n });\n\n // We use an event name that is not likely to conflict with any real event.\n document.addEventListener(testeventname, options, options);\n // We remove the event listener as we have tested the options already.\n document.removeEventListener(testeventname, options, options);\n } catch (err) {\n // It's already false.\n passivesupported = false;\n }\n return passivesupported;\n };\n\n /**\n * Allow to create non-passive touchstart listeners and prevent page scrolling when dragging\n * From: https://stackoverflow.com/a/48098097\n *\n * @type {Object}\n */\n var registerNotPassiveListeners = function(eventname) {\n return {\n setup: function(x, ns, handle) {\n if (ns.includes('notPassive')) {\n this.addEventListener(eventname, handle, {passive: false});\n return true;\n } else {\n return false;\n }\n }\n };\n };\n\n if (eventListenerOptionsSupported) {\n $.event.special.touchstart = registerNotPassiveListeners('touchstart');\n $.event.special.touchmove = registerNotPassiveListeners('touchmove');\n $.event.special.touchend = registerNotPassiveListeners('touchend');\n }\n\n /**\n * Initialise sortable list.\n *\n * @param {(String|jQuery|Element)} root JQuery/DOM element representing sortable list (i.e.
        ,
      ) or CSS selector\n * @param {Object} config Parameters for the list. See defaultParameters above for examples.\n * @property {(String|jQuery|Element)} config.targetListSelector target lists, by default same as root\n * @property {String} config.moveHandlerSelector CSS selector for a drag handle. By default '[data-drag-type=move]'\n * @property {String} config.targetListSelector CSS selector for target lists. By default the same as root\n * @property {(Boolean|Function)} config.isHorizontal Set to true if the list is horizontal\n * (can also be a callback with list as an argument)\n * @property {Boolean} config.autoScroll Engages autoscroll module for automatic vertical scrolling of the\n * whole page, by default true\n */\n var SortableList = function(root, config) {\n\n this.info = null;\n this.proxy = null;\n this.proxyDelta = null;\n this.dragCounter = 0;\n this.lastEvent = null;\n\n this.config = $.extend({}, defaultParameters, config || {});\n this.config.listSelector = root;\n if (!this.config.targetListSelector) {\n this.config.targetListSelector = root;\n }\n if (typeof this.config.listSelector === 'object') {\n // The root is an element on the page. Register a listener for this element.\n $(this.config.listSelector).on('mousedown touchstart.notPassive', $.proxy(this.dragStartHandler, this));\n } else {\n // The root is a CSS selector. Register a listener that picks up the element dynamically.\n $('body').on('mousedown touchstart.notPassive', this.config.listSelector, $.proxy(this.dragStartHandler, this));\n }\n if (this.config.moveHandlerSelector !== null) {\n $('body').on('click keypress', this.config.moveHandlerSelector, $.proxy(this.clickHandler, this));\n }\n\n };\n\n /**\n * Events fired by this entity\n *\n * @public\n * @type {Object}\n */\n SortableList.EVENTS = {\n DRAGSTART: 'sortablelist-dragstart',\n DRAG: 'sortablelist-drag',\n DROP: 'sortablelist-drop',\n DRAGEND: 'sortablelist-dragend'\n };\n\n /**\n * Resets the temporary classes assigned during dragging\n * @private\n */\n SortableList.prototype.resetDraggedClasses = function() {\n var classes = [\n CSS.isDraggedClass,\n CSS.currentPositionClass,\n CSS.overElementClass,\n CSS.targetListClass,\n ];\n for (var i in classes) {\n $('.' + classes[i]).removeClass(classes[i]);\n }\n if (this.proxy) {\n this.proxy.remove();\n this.proxy = $();\n }\n };\n\n /**\n * Calculates evt.pageX, evt.pageY, evt.clientX and evt.clientY\n *\n * For touch events pageX and pageY are taken from the first touch;\n * For the emulated mousemove event they are taken from the last real event.\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.calculatePositionOnPage = function(evt) {\n\n if (evt.originalEvent && evt.originalEvent.touches && evt.originalEvent.touches[0] !== undefined) {\n // This is a touchmove or touchstart event, get position from the first touch position.\n var touch = evt.originalEvent.touches[0];\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n }\n\n if (evt.pageX === undefined) {\n // Information is not present in case of touchend or when event was emulated by autoScroll.\n // Take the absolute mouse position from the last event.\n evt.pageX = this.lastEvent.pageX;\n evt.pageY = this.lastEvent.pageY;\n } else {\n this.lastEvent = evt;\n }\n\n if (evt.clientX === undefined) {\n // If not provided in event calculate relative mouse position.\n evt.clientX = Math.round(evt.pageX - $(window).scrollLeft());\n evt.clientY = Math.round(evt.pageY - $(window).scrollTop());\n }\n };\n\n /**\n * Handler from dragstart event\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.dragStartHandler = function(evt) {\n if (this.info !== null) {\n if (this.info.type === 'click' || this.info.type === 'touchend') {\n // Ignore double click.\n return;\n }\n // Mouse down or touch while already dragging, cancel previous dragging.\n this.moveElement(this.info.sourceList, this.info.sourceNextElement);\n this.finishDragging();\n }\n\n if (evt.type === 'mousedown' && evt.which !== 1) {\n // We only need left mouse click. If this is a mousedown event with right/middle click ignore it.\n return;\n }\n\n this.calculatePositionOnPage(evt);\n var movedElement = $(evt.target).closest($(evt.currentTarget).children());\n if (!movedElement.length) {\n // Can't find the element user wants to drag. They clicked on the list but outside of any element of the list.\n return;\n }\n\n // Check that we grabbed the element by the handle.\n if (this.config.moveHandlerSelector !== null) {\n if (!$(evt.target).closest(this.config.moveHandlerSelector, movedElement).length) {\n return;\n }\n }\n\n evt.stopPropagation();\n evt.preventDefault();\n\n // Information about moved element with original location.\n // This object is passed to event observers.\n this.dragCounter++;\n this.info = {\n element: movedElement,\n sourceNextElement: movedElement.next(),\n sourceList: movedElement.parent(),\n targetNextElement: movedElement.next(),\n targetList: movedElement.parent(),\n type: evt.type,\n dropped: false,\n startX: evt.pageX,\n startY: evt.pageY,\n startTime: new Date().getTime()\n };\n\n $(this.config.targetListSelector).addClass(CSS.targetListClass);\n\n var offset = movedElement.offset();\n movedElement.addClass(CSS.currentPositionClass);\n this.proxyDelta = {x: offset.left - evt.pageX, y: offset.top - evt.pageY};\n this.proxy = $();\n var thisDragCounter = this.dragCounter;\n setTimeout($.proxy(function() {\n // This mousedown event may in fact be a beginning of a 'click' event. Use timeout before showing the\n // dragged object so we can catch click event. When timeout finishes make sure that click event\n // has not happened during this half a second.\n // Verify dragcounter to make sure the user did not manage to do two very fast drag actions one after another.\n if (this.info === null || this.info.type === 'click' || this.info.type === 'keypress'\n || this.dragCounter !== thisDragCounter) {\n return;\n }\n\n // Create a proxy - the copy of the dragged element that moves together with a mouse.\n this.createProxy();\n }, this), 500);\n\n // Start drag.\n $(window).on('mousemove touchmove.notPassive mouseup touchend.notPassive', $.proxy(this.dragHandler, this));\n $(window).on('keypress', $.proxy(this.dragcancelHandler, this));\n\n // Start autoscrolling. Every time the page is scrolled emulate the mousemove event.\n if (this.config.autoScroll) {\n autoScroll.start(function() {\n $(window).trigger('mousemove');\n });\n }\n\n this.executeCallback(SortableList.EVENTS.DRAGSTART);\n };\n\n /**\n * Creates a \"proxy\" object - a copy of the element that is being moved that always follows the mouse\n * @private\n */\n SortableList.prototype.createProxy = function() {\n this.proxy = this.info.element.clone();\n this.info.sourceList.append(this.proxy);\n this.proxy.removeAttr('id').removeClass(CSS.currentPositionClass)\n .addClass(CSS.isDraggedClass).css({position: 'fixed'});\n this.proxy.offset({top: this.proxyDelta.y + this.lastEvent.pageY, left: this.proxyDelta.x + this.lastEvent.pageX});\n };\n\n /**\n * Handler for click event - when user clicks on the drag handler or presses Enter on keyboard\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.clickHandler = function(evt) {\n if (evt.type === 'keypress' && evt.originalEvent.keyCode !== 13 && evt.originalEvent.keyCode !== 32) {\n return;\n }\n if (this.info !== null) {\n // Ignore double click.\n return;\n }\n\n // Find the element that this draghandle belongs to.\n var clickedElement = $(evt.target).closest(this.config.moveHandlerSelector),\n sourceList = clickedElement.closest(this.config.listSelector),\n movedElement = clickedElement.closest(sourceList.children());\n if (!movedElement.length) {\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n\n // Store information about moved element with original location.\n this.dragCounter++;\n this.info = {\n element: movedElement,\n sourceNextElement: movedElement.next(),\n sourceList: sourceList,\n targetNextElement: movedElement.next(),\n targetList: sourceList,\n dropped: false,\n type: evt.type,\n startTime: new Date().getTime()\n };\n\n this.executeCallback(SortableList.EVENTS.DRAGSTART);\n this.displayMoveDialogue(clickedElement);\n };\n\n /**\n * Finds the position of the mouse inside the element - on the top, on the bottom, on the right or on the left\\\n *\n * Used to determine if the moved element should be moved after or before the current element\n *\n * @private\n * @param {Number} pageX\n * @param {Number} pageY\n * @param {jQuery} element\n * @returns {(Object|null)}\n */\n SortableList.prototype.getPositionInNode = function(pageX, pageY, element) {\n if (!element.length) {\n return null;\n }\n var node = element[0],\n offset = 0,\n rect = node.getBoundingClientRect(),\n y = pageY - (rect.top + window.scrollY),\n x = pageX - (rect.left + window.scrollX);\n if (x >= -offset && x <= rect.width + offset && y >= -offset && y <= rect.height + offset) {\n return {\n x: x,\n y: y,\n xRatio: rect.width ? (x / rect.width) : 0,\n yRatio: rect.height ? (y / rect.height) : 0\n };\n }\n return null;\n };\n\n /**\n * Check if list is horizontal\n *\n * @param {jQuery} element\n * @return {Boolean}\n */\n SortableList.prototype.isListHorizontal = function(element) {\n var isHorizontal = this.config.isHorizontal;\n if (isHorizontal === true || isHorizontal === false) {\n return isHorizontal;\n }\n return isHorizontal(element);\n };\n\n /**\n * Handler for events mousemove touchmove mouseup touchend\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.dragHandler = function(evt) {\n\n evt.preventDefault();\n evt.stopPropagation();\n\n this.calculatePositionOnPage(evt);\n\n // We can not use evt.target here because it will most likely be our proxy.\n // Move the proxy out of the way so we can find the element at the current mouse position.\n this.proxy.offset({top: -1000, left: -1000});\n // Find the element at the current mouse position.\n var element = $(document.elementFromPoint(evt.clientX, evt.clientY));\n\n // Find the list element and the list over the mouse position.\n var mainElement = this.info.element[0],\n isNotSelf = function() {\n return this !== mainElement;\n },\n current = element.closest('.' + CSS.targetListClass + ' > :not(.' + CSS.isDraggedClass + ')').filter(isNotSelf),\n currentList = element.closest('.' + CSS.targetListClass),\n proxy = this.proxy,\n isNotProxy = function() {\n return !proxy || !proxy.length || this !== proxy[0];\n };\n\n // Add the specified class to the list element we are hovering.\n $('.' + CSS.overElementClass).removeClass(CSS.overElementClass);\n current.addClass(CSS.overElementClass);\n\n // Move proxy to the current position.\n this.proxy.offset({top: this.proxyDelta.y + evt.pageY, left: this.proxyDelta.x + evt.pageX});\n\n if (currentList.length && !currentList.children().filter(isNotProxy).length) {\n // Mouse is over an empty list.\n this.moveElement(currentList, $());\n } else if (current.length === 1 && !this.info.element.find(current[0]).length) {\n // Mouse is over an element in a list - find whether we should move the current position\n // above or below this element.\n var coordinates = this.getPositionInNode(evt.pageX, evt.pageY, current);\n if (coordinates) {\n var parent = current.parent(),\n ratio = this.isListHorizontal(parent) ? coordinates.xRatio : coordinates.yRatio,\n subList = current.find('.' + CSS.targetListClass),\n subListEmpty = !subList.children().filter(isNotProxy).filter(isNotSelf).length;\n if (subList.length && subListEmpty && ratio > 0.2 && ratio < 0.8) {\n // This is an element that is a parent of an empty list and we are around the middle of this element.\n // Treat it as if we are over this empty list.\n this.moveElement(subList, $());\n } else if (ratio > 0.5) {\n // Insert after this element.\n this.moveElement(parent, current.next().filter(isNotProxy));\n } else {\n // Insert before this element.\n this.moveElement(parent, current);\n }\n }\n }\n\n if (evt.type === 'mouseup' || evt.type === 'touchend') {\n // Drop the moved element.\n this.info.endX = evt.pageX;\n this.info.endY = evt.pageY;\n this.info.endTime = new Date().getTime();\n this.info.dropped = true;\n this.info.positionChanged = this.hasPositionChanged(this.info);\n var oldinfo = this.info;\n this.executeCallback(SortableList.EVENTS.DROP);\n this.finishDragging();\n\n if (evt.type === 'touchend'\n && this.config.moveHandlerSelector !== null\n && (oldinfo.endTime - oldinfo.startTime < 500)\n && !oldinfo.positionChanged) {\n // The click event is not triggered on touch screens because we call preventDefault in touchstart handler.\n // If the touchend quickly followed touchstart without moving, consider it a \"click\".\n this.clickHandler(evt);\n }\n }\n };\n\n /**\n * Checks if the position of the dragged element in the list has changed\n *\n * @private\n * @param {Object} info\n * @return {Boolean}\n */\n SortableList.prototype.hasPositionChanged = function(info) {\n return info.sourceList[0] !== info.targetList[0] ||\n info.sourceNextElement.length !== info.targetNextElement.length ||\n (info.sourceNextElement.length && info.sourceNextElement[0] !== info.targetNextElement[0]);\n };\n\n /**\n * Moves the current position of the dragged element\n *\n * @private\n * @param {jQuery} parentElement\n * @param {jQuery} beforeElement\n */\n SortableList.prototype.moveElement = function(parentElement, beforeElement) {\n var dragEl = this.info.element;\n if (beforeElement.length && beforeElement[0] === dragEl[0]) {\n // Insert before the current position of the dragged element - nothing to do.\n return;\n }\n if (parentElement[0] === this.info.targetList[0] &&\n beforeElement.length === this.info.targetNextElement.length &&\n beforeElement[0] === this.info.targetNextElement[0]) {\n // Insert in the same location as the current position - nothing to do.\n return;\n }\n\n if (beforeElement.length) {\n // Move the dragged element before the specified element.\n parentElement[0].insertBefore(dragEl[0], beforeElement[0]);\n } else if (this.proxy && this.proxy.parent().length && this.proxy.parent()[0] === parentElement[0]) {\n // We need to move to the end of the list but the last element in this list is a proxy.\n // Always leave the proxy in the end of the list.\n parentElement[0].insertBefore(dragEl[0], this.proxy[0]);\n } else {\n // Insert in the end of a list (when proxy is in another list).\n parentElement[0].appendChild(dragEl[0]);\n }\n\n // Save the current position of the dragged element in the list.\n this.info.targetList = parentElement;\n this.info.targetNextElement = beforeElement;\n this.executeCallback(SortableList.EVENTS.DRAG);\n };\n\n /**\n * Finish dragging (when dropped or cancelled).\n * @private\n */\n SortableList.prototype.finishDragging = function() {\n this.resetDraggedClasses();\n if (this.config.autoScroll) {\n autoScroll.stop();\n }\n $(window).off('mousemove touchmove.notPassive mouseup touchend.notPassive', $.proxy(this.dragHandler, this));\n $(window).off('keypress', $.proxy(this.dragcancelHandler, this));\n this.executeCallback(SortableList.EVENTS.DRAGEND);\n this.info = null;\n };\n\n /**\n * Executes callback specified in sortable list parameters\n *\n * @private\n * @param {String} eventName\n */\n SortableList.prototype.executeCallback = function(eventName) {\n this.info.element.trigger(eventName, this.info);\n };\n\n /**\n * Handler from keypress event (cancel dragging when Esc is pressed)\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.dragcancelHandler = function(evt) {\n if (evt.type !== 'keypress' || evt.originalEvent.keyCode !== 27) {\n // Only cancel dragging when Esc was pressed.\n return;\n }\n // Dragging was cancelled. Return item to the original position.\n this.moveElement(this.info.sourceList, this.info.sourceNextElement);\n this.finishDragging();\n };\n\n /**\n * Returns the name of the current element to be used in the move dialogue\n *\n * @public\n * @param {jQuery} element\n * @return {Promise}\n */\n SortableList.prototype.getElementName = function(element) {\n return $.Deferred().resolve(element.text());\n };\n\n /**\n * Returns the label for the potential move destination, i.e. \"After ElementX\" or \"To the top of the list\"\n *\n * Note that we use \"after\" in the label for better UX\n *\n * @public\n * @param {jQuery} parentElement\n * @param {jQuery} afterElement\n * @return {Promise}\n */\n SortableList.prototype.getDestinationName = function(parentElement, afterElement) {\n if (!afterElement.length) {\n return str.get_string('movecontenttothetop', 'moodle');\n } else {\n return this.getElementName(afterElement)\n .then(function(name) {\n return str.get_string('movecontentafter', 'moodle', name);\n });\n }\n };\n\n /**\n * Returns the title for the move dialogue (\"Move elementY\")\n *\n * @public\n * @param {jQuery} element\n * @param {jQuery} handler\n * @return {Promise}\n */\n SortableList.prototype.getMoveDialogueTitle = function(element, handler) {\n if (handler.attr('title')) {\n return $.Deferred().resolve(handler.attr('title'));\n }\n return this.getElementName(element).then(function(name) {\n return str.get_string('movecontent', 'moodle', name);\n });\n };\n\n /**\n * Returns the list of possible move destinations\n *\n * @private\n * @return {Promise}\n */\n SortableList.prototype.getDestinationsList = function() {\n var addedLists = [],\n targets = $(this.config.targetListSelector),\n destinations = $(') where each draggable element has a drag handle.\n * The best practice is to use the template core/drag_handle:\n * $OUTPUT->render_from_template('core/drag_handle', ['movetitle' => get_string('movecontent', 'moodle', ELEMENTNAME)]);\n *\n * Attach this JS module to this list:\n *\n * Space between define and ( critical in comment but not allowed in code in order to function\n * correctly with Moodle's requirejs.php\n *\n * define (['jquery', 'core/sortable_list'], function($, SortableList) {\n * var list = new SortableList('ul.my-awesome-list'); // source list (usually
        or
      ) - selector or element\n *\n * // Listen to the events when element is dragged.\n * $('ul.my-awesome-list > *').on(SortableList.EVENTS.DROP, function(evt, info) {\n * console.log(info);\n * });\n *\n * // Advanced usage. Overwrite methods getElementName, getDestinationName, moveDialogueTitle, for example:\n * list.getElementName = function(element) {\n * return $.Deferred().resolve(element.attr('data-name'));\n * }\n * }\n *\n * More details: https://docs.moodle.org/dev/Sortable_list\n *\n * For the full list of possible parameters see var defaultParameters below.\n *\n * The following jQuery events are fired:\n * - SortableList.EVENTS.DRAGSTART : when user started dragging a list element\n * - SortableList.EVENTS.DRAG : when user dragged a list element to a new position\n * - SortableList.EVENTS.DROP : when user dropped a list element\n * - SortableList.EVENTS.DROPEND : when user finished dragging - either fired right after dropping or\n * if \"Esc\" was pressed during dragging\n *\n * @module core/sortable_list\n * @class sortable_list\n * @copyright 2018 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/log', 'core/autoscroll', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/notification'],\nfunction($, log, autoScroll, str, ModalFactory, ModalEvents, Notification) {\n\n /**\n * Default parameters\n *\n * @private\n * @type {Object}\n */\n var defaultParameters = {\n targetListSelector: null,\n moveHandlerSelector: '[data-drag-type=move]',\n isHorizontal: false,\n autoScroll: true\n };\n\n /**\n * Class names for different elements that may be changed during sorting\n *\n * @private\n * @type {Object}\n */\n var CSS = {\n keyboardDragClass: 'dragdrop-keyboard-drag',\n isDraggedClass: 'sortable-list-is-dragged',\n currentPositionClass: 'sortable-list-current-position',\n sourceListClass: 'sortable-list-source',\n targetListClass: 'sortable-list-target',\n overElementClass: 'sortable-list-over-element'\n };\n\n /**\n * Test the browser support for options objects on event listeners.\n * @return {Boolean}\n */\n var eventListenerOptionsSupported = function() {\n var passivesupported = false,\n options,\n testeventname = \"testpassiveeventoptions\";\n\n // Options support testing example from:\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n\n try {\n options = Object.defineProperty({}, \"passive\", {\n get: function() {\n passivesupported = true;\n }\n });\n\n // We use an event name that is not likely to conflict with any real event.\n document.addEventListener(testeventname, options, options);\n // We remove the event listener as we have tested the options already.\n document.removeEventListener(testeventname, options, options);\n } catch (err) {\n // It's already false.\n passivesupported = false;\n }\n return passivesupported;\n };\n\n /**\n * Allow to create non-passive touchstart listeners and prevent page scrolling when dragging\n * From: https://stackoverflow.com/a/48098097\n *\n * @type {Object}\n */\n var registerNotPassiveListeners = function(eventname) {\n return {\n setup: function(x, ns, handle) {\n if (ns.includes('notPassive')) {\n this.addEventListener(eventname, handle, {passive: false});\n return true;\n } else {\n return false;\n }\n }\n };\n };\n\n if (eventListenerOptionsSupported) {\n $.event.special.touchstart = registerNotPassiveListeners('touchstart');\n $.event.special.touchmove = registerNotPassiveListeners('touchmove');\n $.event.special.touchend = registerNotPassiveListeners('touchend');\n }\n\n /**\n * Initialise sortable list.\n *\n * @param {(String|jQuery|Element)} root JQuery/DOM element representing sortable list (i.e.
        ,
      ) or CSS selector\n * @param {Object} config Parameters for the list. See defaultParameters above for examples.\n * @property {(String|jQuery|Element)} config.targetListSelector target lists, by default same as root\n * @property {String} config.moveHandlerSelector CSS selector for a drag handle. By default '[data-drag-type=move]'\n * @property {String} config.targetListSelector CSS selector for target lists. By default the same as root\n * @property {(Boolean|Function)} config.isHorizontal Set to true if the list is horizontal\n * (can also be a callback with list as an argument)\n * @property {Boolean} config.autoScroll Engages autoscroll module for automatic vertical scrolling of the\n * whole page, by default true\n */\n var SortableList = function(root, config) {\n\n this.info = null;\n this.proxy = null;\n this.proxyDelta = null;\n this.dragCounter = 0;\n this.lastEvent = null;\n\n this.config = $.extend({}, defaultParameters, config || {});\n this.config.listSelector = root;\n if (!this.config.targetListSelector) {\n this.config.targetListSelector = root;\n }\n if (typeof this.config.listSelector === 'object') {\n // The root is an element on the page. Register a listener for this element.\n $(this.config.listSelector).on('mousedown touchstart.notPassive', $.proxy(this.dragStartHandler, this));\n } else {\n // The root is a CSS selector. Register a listener that picks up the element dynamically.\n $('body').on('mousedown touchstart.notPassive', this.config.listSelector, $.proxy(this.dragStartHandler, this));\n }\n if (this.config.moveHandlerSelector !== null) {\n $('body').on('click keypress', this.config.moveHandlerSelector, $.proxy(this.clickHandler, this));\n }\n\n };\n\n /**\n * Events fired by this entity\n *\n * @public\n * @type {Object}\n */\n SortableList.EVENTS = {\n DRAGSTART: 'sortablelist-dragstart',\n DRAG: 'sortablelist-drag',\n DROP: 'sortablelist-drop',\n DRAGEND: 'sortablelist-dragend'\n };\n\n /**\n * Resets the temporary classes assigned during dragging\n * @private\n */\n SortableList.prototype.resetDraggedClasses = function() {\n var classes = [\n CSS.isDraggedClass,\n CSS.currentPositionClass,\n CSS.overElementClass,\n CSS.targetListClass,\n ];\n for (var i in classes) {\n $('.' + classes[i]).removeClass(classes[i]);\n }\n if (this.proxy) {\n this.proxy.remove();\n this.proxy = $();\n }\n };\n\n /**\n * Calculates evt.pageX, evt.pageY, evt.clientX and evt.clientY\n *\n * For touch events pageX and pageY are taken from the first touch;\n * For the emulated mousemove event they are taken from the last real event.\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.calculatePositionOnPage = function(evt) {\n\n if (evt.originalEvent && evt.originalEvent.touches && evt.originalEvent.touches[0] !== undefined) {\n // This is a touchmove or touchstart event, get position from the first touch position.\n var touch = evt.originalEvent.touches[0];\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n }\n\n if (evt.pageX === undefined) {\n // Information is not present in case of touchend or when event was emulated by autoScroll.\n // Take the absolute mouse position from the last event.\n evt.pageX = this.lastEvent.pageX;\n evt.pageY = this.lastEvent.pageY;\n } else {\n this.lastEvent = evt;\n }\n\n if (evt.clientX === undefined) {\n // If not provided in event calculate relative mouse position.\n evt.clientX = Math.round(evt.pageX - $(window).scrollLeft());\n evt.clientY = Math.round(evt.pageY - $(window).scrollTop());\n }\n };\n\n /**\n * Handler from dragstart event\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.dragStartHandler = function(evt) {\n if (this.info !== null) {\n if (this.info.type === 'click' || this.info.type === 'touchend') {\n // Ignore double click.\n return;\n }\n // Mouse down or touch while already dragging, cancel previous dragging.\n this.moveElement(this.info.sourceList, this.info.sourceNextElement);\n this.finishDragging();\n }\n\n if (evt.type === 'mousedown' && evt.which !== 1) {\n // We only need left mouse click. If this is a mousedown event with right/middle click ignore it.\n return;\n }\n\n this.calculatePositionOnPage(evt);\n var movedElement = $(evt.target).closest($(evt.currentTarget).children());\n if (!movedElement.length) {\n // Can't find the element user wants to drag. They clicked on the list but outside of any element of the list.\n return;\n }\n\n // Check that we grabbed the element by the handle.\n if (this.config.moveHandlerSelector !== null) {\n if (!$(evt.target).closest(this.config.moveHandlerSelector, movedElement).length) {\n return;\n }\n }\n\n evt.stopPropagation();\n evt.preventDefault();\n\n // Information about moved element with original location.\n // This object is passed to event observers.\n this.dragCounter++;\n this.info = {\n element: movedElement,\n sourceNextElement: movedElement.next(),\n sourceList: movedElement.parent(),\n targetNextElement: movedElement.next(),\n targetList: movedElement.parent(),\n type: evt.type,\n dropped: false,\n startX: evt.pageX,\n startY: evt.pageY,\n startTime: new Date().getTime()\n };\n\n $(this.config.targetListSelector).addClass(CSS.targetListClass);\n\n var offset = movedElement.offset();\n movedElement.addClass(CSS.currentPositionClass);\n this.proxyDelta = {x: offset.left - evt.pageX, y: offset.top - evt.pageY};\n this.proxy = $();\n var thisDragCounter = this.dragCounter;\n setTimeout($.proxy(function() {\n // This mousedown event may in fact be a beginning of a 'click' event. Use timeout before showing the\n // dragged object so we can catch click event. When timeout finishes make sure that click event\n // has not happened during this half a second.\n // Verify dragcounter to make sure the user did not manage to do two very fast drag actions one after another.\n if (this.info === null || this.info.type === 'click' || this.info.type === 'keypress'\n || this.dragCounter !== thisDragCounter) {\n return;\n }\n\n // Create a proxy - the copy of the dragged element that moves together with a mouse.\n this.createProxy();\n }, this), 500);\n\n // Start drag.\n $(window).on('mousemove touchmove.notPassive mouseup touchend.notPassive', $.proxy(this.dragHandler, this));\n $(window).on('keypress', $.proxy(this.dragcancelHandler, this));\n\n // Start autoscrolling. Every time the page is scrolled emulate the mousemove event.\n if (this.config.autoScroll) {\n autoScroll.start(function() {\n $(window).trigger('mousemove');\n });\n }\n\n this.executeCallback(SortableList.EVENTS.DRAGSTART);\n };\n\n /**\n * Creates a \"proxy\" object - a copy of the element that is being moved that always follows the mouse\n * @private\n */\n SortableList.prototype.createProxy = function() {\n this.proxy = this.info.element.clone();\n this.info.sourceList.append(this.proxy);\n this.proxy.removeAttr('id').removeClass(CSS.currentPositionClass)\n .addClass(CSS.isDraggedClass).css({position: 'fixed'});\n this.proxy.offset({top: this.proxyDelta.y + this.lastEvent.pageY, left: this.proxyDelta.x + this.lastEvent.pageX});\n };\n\n /**\n * Handler for click event - when user clicks on the drag handler or presses Enter on keyboard\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.clickHandler = function(evt) {\n if (evt.type === 'keypress' && evt.originalEvent.keyCode !== 13 && evt.originalEvent.keyCode !== 32) {\n return;\n }\n if (this.info !== null) {\n // Ignore double click.\n return;\n }\n\n // Find the element that this draghandle belongs to.\n var clickedElement = $(evt.target).closest(this.config.moveHandlerSelector),\n sourceList = clickedElement.closest(this.config.listSelector),\n movedElement = clickedElement.closest(sourceList.children());\n if (!movedElement.length) {\n return;\n }\n\n evt.preventDefault();\n evt.stopPropagation();\n\n // Store information about moved element with original location.\n this.dragCounter++;\n this.info = {\n element: movedElement,\n sourceNextElement: movedElement.next(),\n sourceList: sourceList,\n targetNextElement: movedElement.next(),\n targetList: sourceList,\n dropped: false,\n type: evt.type,\n startTime: new Date().getTime()\n };\n\n this.executeCallback(SortableList.EVENTS.DRAGSTART);\n this.displayMoveDialogue(clickedElement);\n };\n\n /**\n * Finds the position of the mouse inside the element - on the top, on the bottom, on the right or on the left\\\n *\n * Used to determine if the moved element should be moved after or before the current element\n *\n * @private\n * @param {Number} pageX\n * @param {Number} pageY\n * @param {jQuery} element\n * @returns {(Object|null)}\n */\n SortableList.prototype.getPositionInNode = function(pageX, pageY, element) {\n if (!element.length) {\n return null;\n }\n var node = element[0],\n offset = 0,\n rect = node.getBoundingClientRect(),\n y = pageY - (rect.top + window.scrollY),\n x = pageX - (rect.left + window.scrollX);\n if (x >= -offset && x <= rect.width + offset && y >= -offset && y <= rect.height + offset) {\n return {\n x: x,\n y: y,\n xRatio: rect.width ? (x / rect.width) : 0,\n yRatio: rect.height ? (y / rect.height) : 0\n };\n }\n return null;\n };\n\n /**\n * Check if list is horizontal\n *\n * @param {jQuery} element\n * @return {Boolean}\n */\n SortableList.prototype.isListHorizontal = function(element) {\n var isHorizontal = this.config.isHorizontal;\n if (isHorizontal === true || isHorizontal === false) {\n return isHorizontal;\n }\n return isHorizontal(element);\n };\n\n /**\n * Handler for events mousemove touchmove mouseup touchend\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.dragHandler = function(evt) {\n\n evt.preventDefault();\n evt.stopPropagation();\n\n this.calculatePositionOnPage(evt);\n\n // We can not use evt.target here because it will most likely be our proxy.\n // Move the proxy out of the way so we can find the element at the current mouse position.\n this.proxy.offset({top: -1000, left: -1000});\n // Find the element at the current mouse position.\n var element = $(document.elementFromPoint(evt.clientX, evt.clientY));\n\n // Find the list element and the list over the mouse position.\n var mainElement = this.info.element[0],\n isNotSelf = function() {\n return this !== mainElement;\n },\n current = element.closest('.' + CSS.targetListClass + ' > :not(.' + CSS.isDraggedClass + ')').filter(isNotSelf),\n currentList = element.closest('.' + CSS.targetListClass),\n proxy = this.proxy,\n isNotProxy = function() {\n return !proxy || !proxy.length || this !== proxy[0];\n };\n\n // Add the specified class to the list element we are hovering.\n $('.' + CSS.overElementClass).removeClass(CSS.overElementClass);\n current.addClass(CSS.overElementClass);\n\n // Move proxy to the current position.\n this.proxy.offset({top: this.proxyDelta.y + evt.pageY, left: this.proxyDelta.x + evt.pageX});\n\n if (currentList.length && !currentList.children().filter(isNotProxy).length) {\n // Mouse is over an empty list.\n this.moveElement(currentList, $());\n } else if (current.length === 1 && !this.info.element.find(current[0]).length) {\n // Mouse is over an element in a list - find whether we should move the current position\n // above or below this element.\n var coordinates = this.getPositionInNode(evt.pageX, evt.pageY, current);\n if (coordinates) {\n var parent = current.parent(),\n ratio = this.isListHorizontal(parent) ? coordinates.xRatio : coordinates.yRatio,\n subList = current.find('.' + CSS.targetListClass),\n subListEmpty = !subList.children().filter(isNotProxy).filter(isNotSelf).length;\n if (subList.length && subListEmpty && ratio > 0.2 && ratio < 0.8) {\n // This is an element that is a parent of an empty list and we are around the middle of this element.\n // Treat it as if we are over this empty list.\n this.moveElement(subList, $());\n } else if (ratio > 0.5) {\n // Insert after this element.\n this.moveElement(parent, current.next().filter(isNotProxy));\n } else {\n // Insert before this element.\n this.moveElement(parent, current);\n }\n }\n }\n\n if (evt.type === 'mouseup' || evt.type === 'touchend') {\n // Drop the moved element.\n this.info.endX = evt.pageX;\n this.info.endY = evt.pageY;\n this.info.endTime = new Date().getTime();\n this.info.dropped = true;\n this.info.positionChanged = this.hasPositionChanged(this.info);\n var oldinfo = this.info;\n this.executeCallback(SortableList.EVENTS.DROP);\n this.finishDragging();\n\n if (evt.type === 'touchend'\n && this.config.moveHandlerSelector !== null\n && (oldinfo.endTime - oldinfo.startTime < 500)\n && !oldinfo.positionChanged) {\n // The click event is not triggered on touch screens because we call preventDefault in touchstart handler.\n // If the touchend quickly followed touchstart without moving, consider it a \"click\".\n this.clickHandler(evt);\n }\n }\n };\n\n /**\n * Checks if the position of the dragged element in the list has changed\n *\n * @private\n * @param {Object} info\n * @return {Boolean}\n */\n SortableList.prototype.hasPositionChanged = function(info) {\n return info.sourceList[0] !== info.targetList[0] ||\n info.sourceNextElement.length !== info.targetNextElement.length ||\n (info.sourceNextElement.length && info.sourceNextElement[0] !== info.targetNextElement[0]);\n };\n\n /**\n * Moves the current position of the dragged element\n *\n * @private\n * @param {jQuery} parentElement\n * @param {jQuery} beforeElement\n */\n SortableList.prototype.moveElement = function(parentElement, beforeElement) {\n var dragEl = this.info.element;\n if (beforeElement.length && beforeElement[0] === dragEl[0]) {\n // Insert before the current position of the dragged element - nothing to do.\n return;\n }\n if (parentElement[0] === this.info.targetList[0] &&\n beforeElement.length === this.info.targetNextElement.length &&\n beforeElement[0] === this.info.targetNextElement[0]) {\n // Insert in the same location as the current position - nothing to do.\n return;\n }\n\n if (beforeElement.length) {\n // Move the dragged element before the specified element.\n parentElement[0].insertBefore(dragEl[0], beforeElement[0]);\n } else if (this.proxy && this.proxy.parent().length && this.proxy.parent()[0] === parentElement[0]) {\n // We need to move to the end of the list but the last element in this list is a proxy.\n // Always leave the proxy in the end of the list.\n parentElement[0].insertBefore(dragEl[0], this.proxy[0]);\n } else {\n // Insert in the end of a list (when proxy is in another list).\n parentElement[0].appendChild(dragEl[0]);\n }\n\n // Save the current position of the dragged element in the list.\n this.info.targetList = parentElement;\n this.info.targetNextElement = beforeElement;\n this.executeCallback(SortableList.EVENTS.DRAG);\n };\n\n /**\n * Finish dragging (when dropped or cancelled).\n * @private\n */\n SortableList.prototype.finishDragging = function() {\n this.resetDraggedClasses();\n if (this.config.autoScroll) {\n autoScroll.stop();\n }\n $(window).off('mousemove touchmove.notPassive mouseup touchend.notPassive', $.proxy(this.dragHandler, this));\n $(window).off('keypress', $.proxy(this.dragcancelHandler, this));\n this.executeCallback(SortableList.EVENTS.DRAGEND);\n this.info = null;\n };\n\n /**\n * Executes callback specified in sortable list parameters\n *\n * @private\n * @param {String} eventName\n */\n SortableList.prototype.executeCallback = function(eventName) {\n this.info.element.trigger(eventName, this.info);\n };\n\n /**\n * Handler from keypress event (cancel dragging when Esc is pressed)\n *\n * @private\n * @param {Event} evt\n */\n SortableList.prototype.dragcancelHandler = function(evt) {\n if (evt.type !== 'keypress' || evt.originalEvent.keyCode !== 27) {\n // Only cancel dragging when Esc was pressed.\n return;\n }\n // Dragging was cancelled. Return item to the original position.\n this.moveElement(this.info.sourceList, this.info.sourceNextElement);\n this.finishDragging();\n };\n\n /**\n * Returns the name of the current element to be used in the move dialogue\n *\n * @public\n * @param {jQuery} element\n * @return {Promise}\n */\n SortableList.prototype.getElementName = function(element) {\n return $.Deferred().resolve(element.text());\n };\n\n /**\n * Returns the label for the potential move destination, i.e. \"After ElementX\" or \"To the top of the list\"\n *\n * Note that we use \"after\" in the label for better UX\n *\n * @public\n * @param {jQuery} parentElement\n * @param {jQuery} afterElement\n * @return {Promise}\n */\n SortableList.prototype.getDestinationName = function(parentElement, afterElement) {\n if (!afterElement.length) {\n return str.get_string('movecontenttothetop', 'moodle');\n } else {\n return this.getElementName(afterElement)\n .then(function(name) {\n return str.get_string('movecontentafter', 'moodle', name);\n });\n }\n };\n\n /**\n * Returns the title for the move dialogue (\"Move elementY\")\n *\n * @public\n * @param {jQuery} element\n * @param {jQuery} handler\n * @return {Promise}\n */\n SortableList.prototype.getMoveDialogueTitle = function(element, handler) {\n if (handler.attr('title')) {\n return $.Deferred().resolve(handler.attr('title'));\n }\n return this.getElementName(element).then(function(name) {\n return str.get_string('movecontent', 'moodle', name);\n });\n };\n\n /**\n * Returns the list of possible move destinations\n *\n * @private\n * @return {Promise}\n */\n SortableList.prototype.getDestinationsList = function() {\n var addedLists = [],\n targets = $(this.config.targetListSelector),\n destinations = $('
      ').text(c.getTitle()));\n }\n\n // Write the column headers.\n node = $('
      '));\n }\n series.forEach(function(serie) {\n node.append(\n $('')\n .text(serie.getLabel())\n .attr('scope', 'col')\n );\n });\n tbl.append(node);\n\n // Write rows.\n for (var rowId = 0; rowId < rowCount; rowId++) {\n node = $('
      ')\n .text(labels[rowId])\n .attr('scope', 'row')\n );\n }\n for (var serieId = 0; serieId < series.length; serieId++) {\n value = series[serieId].getValues()[rowId];\n seriesLabels = series[serieId].getLabels();\n if (seriesLabels !== null) {\n value = series[serieId].getLabels()[rowId];\n }\n node.append($('').text(value));\n }\n tbl.append(node);\n }\n\n return tbl;\n };\n\n /** @override */\n Output.prototype.update = function() {\n this._build();\n };\n\n return Output;\n\n});\n"],"file":"chart_output_htmltable.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_pie.min.js.map b/lib/amd/build/chart_pie.min.js.map index 524d1765aec..5af7778395b 100644 --- a/lib/amd/build/chart_pie.min.js.map +++ b/lib/amd/build/chart_pie.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_pie.js"],"names":["define","Base","Pie","prototype","constructor","apply","arguments","Object","create","TYPE","_doughnut","Klass","data","chart","setDoughnut","doughnut","addSeries","series","getColor","colors","configColorSet","getConfigColorSet","COLORSET","i","getCount","push","length","setColors","getDoughnut","_validateSeries","_series","Error"],"mappings":"AAuBAA,OAAM,kBAAC,CAAC,iBAAD,CAAD,CAAsB,SAASC,CAAT,CAAe,CASvC,QAASC,CAAAA,CAAT,EAAe,CACXD,CAAI,CAACE,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,CACH,CACDJ,CAAG,CAACC,SAAJ,CAAgBI,MAAM,CAACC,MAAP,CAAcP,CAAI,CAACE,SAAnB,CAAhB,CAGAD,CAAG,CAACC,SAAJ,CAAcM,IAAd,CAAqB,KAArB,CAQAP,CAAG,CAACC,SAAJ,CAAcO,SAAd,CAA0B,IAA1B,CAGAR,CAAG,CAACC,SAAJ,CAAcK,MAAd,CAAuB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CACzC,GAAIC,CAAAA,CAAK,CAAGZ,CAAI,CAACE,SAAL,CAAeK,MAAf,CAAsBH,KAAtB,CAA4B,IAA5B,CAAkCC,SAAlC,CAAZ,CACAO,CAAK,CAACC,WAAN,CAAkBF,CAAI,CAACG,QAAvB,EACA,MAAOF,CAAAA,CACV,CAJD,CAWAX,CAAG,CAACC,SAAJ,CAAca,SAAd,CAA0B,SAASC,CAAT,CAAiB,CACvC,GAA0B,IAAtB,GAAAA,CAAM,CAACC,QAAP,EAAJ,CAAgC,CAG5B,OAFIC,CAAAA,CAAM,CAAG,EAEb,CADIC,CAAc,CAAG,KAAKC,iBAAL,IAA4BpB,CAAI,CAACE,SAAL,CAAemB,QAChE,CAASC,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGN,CAAM,CAACO,QAAP,EAApB,CAAuCD,CAAC,EAAxC,CAA4C,CACxCJ,CAAM,CAACM,IAAP,CAAYL,CAAc,CAACG,CAAC,CAAGH,CAAc,CAACM,MAApB,CAA1B,CACH,CACDT,CAAM,CAACU,SAAP,CAAiBR,CAAjB,CACH,CACD,MAAOlB,CAAAA,CAAI,CAACE,SAAL,CAAea,SAAf,CAAyBX,KAAzB,CAA+B,IAA/B,CAAqCC,SAArC,CACV,CAVD,CAkBAJ,CAAG,CAACC,SAAJ,CAAcyB,WAAd,CAA4B,UAAW,CACnC,MAAO,MAAKlB,SACf,CAFD,CAUAR,CAAG,CAACC,SAAJ,CAAcW,WAAd,CAA4B,SAASC,CAAT,CAAmB,CAC3C,KAAKL,SAAL,GAAyBK,CAC5B,CAFD,CAYAb,CAAG,CAACC,SAAJ,CAAc0B,eAAd,CAAgC,UAAW,CACvC,GAA2B,CAAvB,OAAKC,OAAL,CAAaJ,MAAjB,CAA8B,CAC1B,KAAM,IAAIK,CAAAA,KAAJ,CAAU,oCAAV,CACT,CACD,MAAO9B,CAAAA,CAAI,CAACE,SAAL,CAAe0B,eAAf,CAA+BxB,KAA/B,CAAqC,IAArC,CAA2CC,SAA3C,CACV,CALD,CAOA,MAAOJ,CAAAA,CAEV,CAtFK,CAAN","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 .\n\n/**\n * Chart pie.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_pie\n */\ndefine(['core/chart_base'], function(Base) {\n\n /**\n * Pie chart.\n *\n * @class\n * @alias module:core/chart_pie\n * @extends {module:core/chart_base}\n */\n function Pie() {\n Base.prototype.constructor.apply(this, arguments);\n }\n Pie.prototype = Object.create(Base.prototype);\n\n /** @override */\n Pie.prototype.TYPE = 'pie';\n\n /**\n * Whether the chart should be displayed as doughnut or not.\n *\n * @type {Bool}\n * @protected\n */\n Pie.prototype._doughnut = null;\n\n /** @override */\n Pie.prototype.create = function(Klass, data) {\n var chart = Base.prototype.create.apply(this, arguments);\n chart.setDoughnut(data.doughnut);\n return chart;\n };\n\n /**\n * Overridden to add appropriate colors to the series.\n *\n * @override\n */\n Pie.prototype.addSeries = function(series) {\n if (series.getColor() === null) {\n var colors = [];\n var configColorSet = this.getConfigColorSet() || Base.prototype.COLORSET;\n for (var i = 0; i < series.getCount(); i++) {\n colors.push(configColorSet[i % configColorSet.length]);\n }\n series.setColors(colors);\n }\n return Base.prototype.addSeries.apply(this, arguments);\n };\n\n /**\n * Get whether the chart should be displayed as doughnut or not.\n *\n * @method getDoughnut\n * @returns {Bool}\n */\n Pie.prototype.getDoughnut = function() {\n return this._doughnut;\n };\n\n /**\n * Set whether the chart should be displayed as doughnut or not.\n *\n * @method setDoughnut\n * @param {Bool} doughnut True for doughnut type, false for pie.\n */\n Pie.prototype.setDoughnut = function(doughnut) {\n this._doughnut = Boolean(doughnut);\n };\n\n /**\n * Validate a series.\n *\n * Overrides parent implementation to validate that there is only\n * one series per chart instance.\n *\n * @override\n */\n Pie.prototype._validateSeries = function() {\n if (this._series.length >= 1) {\n throw new Error('Pie charts only support one serie.');\n }\n return Base.prototype._validateSeries.apply(this, arguments);\n };\n\n return Pie;\n\n});\n"],"file":"chart_pie.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_pie.js"],"names":["define","Base","Pie","prototype","constructor","apply","arguments","Object","create","TYPE","_doughnut","Klass","data","chart","setDoughnut","doughnut","addSeries","series","getColor","colors","configColorSet","getConfigColorSet","COLORSET","i","getCount","push","length","setColors","getDoughnut","_validateSeries","_series","Error"],"mappings":"AAsBAA,OAAM,kBAAC,CAAC,iBAAD,CAAD,CAAsB,SAASC,CAAT,CAAe,CASvC,QAASC,CAAAA,CAAT,EAAe,CACXD,CAAI,CAACE,SAAL,CAAeC,WAAf,CAA2BC,KAA3B,CAAiC,IAAjC,CAAuCC,SAAvC,CACH,CACDJ,CAAG,CAACC,SAAJ,CAAgBI,MAAM,CAACC,MAAP,CAAcP,CAAI,CAACE,SAAnB,CAAhB,CAGAD,CAAG,CAACC,SAAJ,CAAcM,IAAd,CAAqB,KAArB,CAQAP,CAAG,CAACC,SAAJ,CAAcO,SAAd,CAA0B,IAA1B,CAGAR,CAAG,CAACC,SAAJ,CAAcK,MAAd,CAAuB,SAASG,CAAT,CAAgBC,CAAhB,CAAsB,CACzC,GAAIC,CAAAA,CAAK,CAAGZ,CAAI,CAACE,SAAL,CAAeK,MAAf,CAAsBH,KAAtB,CAA4B,IAA5B,CAAkCC,SAAlC,CAAZ,CACAO,CAAK,CAACC,WAAN,CAAkBF,CAAI,CAACG,QAAvB,EACA,MAAOF,CAAAA,CACV,CAJD,CAWAX,CAAG,CAACC,SAAJ,CAAca,SAAd,CAA0B,SAASC,CAAT,CAAiB,CACvC,GAA0B,IAAtB,GAAAA,CAAM,CAACC,QAAP,EAAJ,CAAgC,CAG5B,OAFIC,CAAAA,CAAM,CAAG,EAEb,CADIC,CAAc,CAAG,KAAKC,iBAAL,IAA4BpB,CAAI,CAACE,SAAL,CAAemB,QAChE,CAASC,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGN,CAAM,CAACO,QAAP,EAApB,CAAuCD,CAAC,EAAxC,CAA4C,CACxCJ,CAAM,CAACM,IAAP,CAAYL,CAAc,CAACG,CAAC,CAAGH,CAAc,CAACM,MAApB,CAA1B,CACH,CACDT,CAAM,CAACU,SAAP,CAAiBR,CAAjB,CACH,CACD,MAAOlB,CAAAA,CAAI,CAACE,SAAL,CAAea,SAAf,CAAyBX,KAAzB,CAA+B,IAA/B,CAAqCC,SAArC,CACV,CAVD,CAkBAJ,CAAG,CAACC,SAAJ,CAAcyB,WAAd,CAA4B,UAAW,CACnC,MAAO,MAAKlB,SACf,CAFD,CAUAR,CAAG,CAACC,SAAJ,CAAcW,WAAd,CAA4B,SAASC,CAAT,CAAmB,CAC3C,KAAKL,SAAL,GAAyBK,CAC5B,CAFD,CAYAb,CAAG,CAACC,SAAJ,CAAc0B,eAAd,CAAgC,UAAW,CACvC,GAA2B,CAAvB,OAAKC,OAAL,CAAaJ,MAAjB,CAA8B,CAC1B,KAAM,IAAIK,CAAAA,KAAJ,CAAU,oCAAV,CACT,CACD,MAAO9B,CAAAA,CAAI,CAACE,SAAL,CAAe0B,eAAf,CAA+BxB,KAA/B,CAAqC,IAArC,CAA2CC,SAA3C,CACV,CALD,CAOA,MAAOJ,CAAAA,CAEV,CAtFK,CAAN","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 .\n\n/**\n * Chart pie.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_pie\n */\ndefine(['core/chart_base'], function(Base) {\n\n /**\n * Pie chart.\n *\n * @class\n * @alias module:core/chart_pie\n * @extends {module:core/chart_base}\n */\n function Pie() {\n Base.prototype.constructor.apply(this, arguments);\n }\n Pie.prototype = Object.create(Base.prototype);\n\n /** @override */\n Pie.prototype.TYPE = 'pie';\n\n /**\n * Whether the chart should be displayed as doughnut or not.\n *\n * @type {Bool}\n * @protected\n */\n Pie.prototype._doughnut = null;\n\n /** @override */\n Pie.prototype.create = function(Klass, data) {\n var chart = Base.prototype.create.apply(this, arguments);\n chart.setDoughnut(data.doughnut);\n return chart;\n };\n\n /**\n * Overridden to add appropriate colors to the series.\n *\n * @override\n */\n Pie.prototype.addSeries = function(series) {\n if (series.getColor() === null) {\n var colors = [];\n var configColorSet = this.getConfigColorSet() || Base.prototype.COLORSET;\n for (var i = 0; i < series.getCount(); i++) {\n colors.push(configColorSet[i % configColorSet.length]);\n }\n series.setColors(colors);\n }\n return Base.prototype.addSeries.apply(this, arguments);\n };\n\n /**\n * Get whether the chart should be displayed as doughnut or not.\n *\n * @method getDoughnut\n * @returns {Bool}\n */\n Pie.prototype.getDoughnut = function() {\n return this._doughnut;\n };\n\n /**\n * Set whether the chart should be displayed as doughnut or not.\n *\n * @method setDoughnut\n * @param {Bool} doughnut True for doughnut type, false for pie.\n */\n Pie.prototype.setDoughnut = function(doughnut) {\n this._doughnut = Boolean(doughnut);\n };\n\n /**\n * Validate a series.\n *\n * Overrides parent implementation to validate that there is only\n * one series per chart instance.\n *\n * @override\n */\n Pie.prototype._validateSeries = function() {\n if (this._series.length >= 1) {\n throw new Error('Pie charts only support one serie.');\n }\n return Base.prototype._validateSeries.apply(this, arguments);\n };\n\n return Pie;\n\n});\n"],"file":"chart_pie.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chart_series.min.js.map b/lib/amd/build/chart_series.min.js.map index b9b902a05b3..f69999c6537 100644 --- a/lib/amd/build/chart_series.min.js.map +++ b/lib/amd/build/chart_series.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chart_series.js"],"names":["define","Series","label","values","Error","length","_colors","_label","_values","prototype","TYPE_DEFAULT","TYPE_LINE","_fill","_labels","_smooth","_type","_xaxis","_yaxis","create","obj","s","setType","type","setXAxis","axes","x","setYAxis","y","setLabels","labels","colors","setColors","setColor","setFill","fill","setSmooth","smooth","getColor","getColors","getCount","getFill","getLabel","getLabels","getSmooth","getType","getValues","getXAxis","getYAxis","hasColoredValues","color","_validateLabels","index"],"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 .\n\n/**\n * Chart series.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_series\n */\ndefine([], function() {\n\n /**\n * Chart data series.\n *\n * @class\n * @alias module:core/chart_series\n * @param {String} label The series label.\n * @param {Number[]} values The values.\n */\n function Series(label, values) {\n if (typeof label !== 'string') {\n throw new Error('Invalid label for series.');\n\n } else if (typeof values !== 'object') {\n throw new Error('Values for a series must be an array.');\n\n } else if (values.length < 1) {\n throw new Error('Invalid values received for series.');\n }\n\n this._colors = [];\n this._label = label;\n this._values = values;\n }\n\n /**\n * The default type of series.\n *\n * @type {Null}\n * @const\n */\n Series.prototype.TYPE_DEFAULT = null;\n\n /**\n * Type of series 'line'.\n *\n * @type {String}\n * @const\n */\n Series.prototype.TYPE_LINE = 'line';\n\n /**\n * The colors of the series.\n *\n * @type {String[]}\n * @protected\n */\n Series.prototype._colors = null;\n\n /**\n * The fill mode of the series.\n *\n * @type {Object}\n * @protected\n */\n Series.prototype._fill = false;\n\n /**\n * The label of the series.\n *\n * @type {String}\n * @protected\n */\n Series.prototype._label = null;\n\n /**\n * The labels for the values of the series.\n *\n * @type {String[]}\n * @protected\n */\n Series.prototype._labels = null;\n\n /**\n * Whether the line of the serie should be smooth or not.\n *\n * @type {Bool}\n * @protected\n */\n Series.prototype._smooth = false;\n\n /**\n * The type of the series.\n *\n * @type {String}\n * @protected\n */\n Series.prototype._type = Series.prototype.TYPE_DEFAULT;\n\n /**\n * The values in the series.\n *\n * @type {Number[]}\n * @protected\n */\n Series.prototype._values = null;\n\n /**\n * The index of the X axis.\n *\n * @type {Number[]}\n * @protected\n */\n Series.prototype._xaxis = null;\n\n /**\n * The index of the Y axis.\n *\n * @type {Number[]}\n * @protected\n */\n Series.prototype._yaxis = null;\n\n /**\n * Create a new instance of a series from serialised data.\n *\n * @static\n * @method create\n * @param {Object} obj The data of the series.\n * @return {module:core/chart_series}\n */\n Series.prototype.create = function(obj) {\n var s = new Series(obj.label, obj.values);\n s.setType(obj.type);\n s.setXAxis(obj.axes.x);\n s.setYAxis(obj.axes.y);\n s.setLabels(obj.labels);\n\n // Colors are exported as an array with 1, or n values.\n if (obj.colors && obj.colors.length > 1) {\n s.setColors(obj.colors);\n } else {\n s.setColor(obj.colors[0]);\n }\n\n s.setFill(obj.fill);\n s.setSmooth(obj.smooth);\n return s;\n };\n\n /**\n * Get the color.\n *\n * @return {String}\n */\n Series.prototype.getColor = function() {\n return this._colors[0] || null;\n };\n\n /**\n * Get the colors for each value in the series.\n *\n * @return {String[]}\n */\n Series.prototype.getColors = function() {\n return this._colors;\n };\n\n /**\n * Get the number of values in the series.\n *\n * @return {Number}\n */\n Series.prototype.getCount = function() {\n return this._values.length;\n };\n\n /**\n * Get the fill mode of the series.\n *\n * @return {Object}\n */\n Series.prototype.getFill = function() {\n return this._fill;\n };\n\n /**\n * Get the series label.\n *\n * @return {String}\n */\n Series.prototype.getLabel = function() {\n return this._label;\n };\n\n /**\n * Get labels for the values of the series.\n *\n * @return {String[]}\n */\n Series.prototype.getLabels = function() {\n return this._labels;\n };\n\n /**\n * Get whether the line of the serie should be smooth or not.\n *\n * @returns {Bool}\n */\n Series.prototype.getSmooth = function() {\n return this._smooth;\n };\n\n /**\n * Get the series type.\n *\n * @return {String}\n */\n Series.prototype.getType = function() {\n return this._type;\n };\n\n /**\n * Get the series values.\n *\n * @return {Number[]}\n */\n Series.prototype.getValues = function() {\n return this._values;\n };\n\n /**\n * Get the index of the X axis.\n *\n * @return {Number}\n */\n Series.prototype.getXAxis = function() {\n return this._xaxis;\n };\n\n /**\n * Get the index of the Y axis.\n *\n * @return {Number}\n */\n Series.prototype.getYAxis = function() {\n return this._yaxis;\n };\n\n /**\n * Whether there is a color per value.\n *\n * @return {Bool}\n */\n Series.prototype.hasColoredValues = function() {\n return this._colors.length == this.getCount();\n };\n\n /**\n * Set the series color.\n *\n * @param {String} color A CSS-compatible color.\n */\n Series.prototype.setColor = function(color) {\n this._colors = [color];\n };\n\n /**\n * Set a color for each value in the series.\n *\n * @param {String[]} colors CSS-compatible colors.\n */\n Series.prototype.setColors = function(colors) {\n if (colors && colors.length != this.getCount()) {\n throw new Error('When setting multiple colors there must be one per value.');\n }\n this._colors = colors || [];\n };\n\n /**\n * Set the fill mode for the series.\n *\n * @param {Object} fill\n */\n Series.prototype.setFill = function(fill) {\n this._fill = typeof fill === 'undefined' ? null : fill;\n };\n\n /**\n * Set the labels for the values of the series.\n *\n * @param {String[]} labels the labels of the series values.\n */\n Series.prototype.setLabels = function(labels) {\n this._validateLabels(labels);\n labels = typeof labels === 'undefined' ? null : labels;\n this._labels = labels;\n };\n\n /**\n * Set Whether the line of the serie should be smooth or not.\n *\n * Only applicable for line chart or a line series, if null it assumes the chart default (not smooth).\n *\n * @param {Bool} smooth True if the lines should be smooth, false for tensioned lines.\n */\n Series.prototype.setSmooth = function(smooth) {\n smooth = typeof smooth === 'undefined' ? null : smooth;\n this._smooth = smooth;\n };\n\n /**\n * Set the type of the series.\n *\n * @param {String} type A type constant value.\n */\n Series.prototype.setType = function(type) {\n if (type != this.TYPE_DEFAULT && type != this.TYPE_LINE) {\n throw new Error('Invalid serie type.');\n }\n this._type = type || null;\n };\n\n /**\n * Set the index of the X axis.\n *\n * @param {Number} index The index.\n */\n Series.prototype.setXAxis = function(index) {\n this._xaxis = index || null;\n };\n\n\n /**\n * Set the index of the Y axis.\n *\n * @param {Number} index The index.\n */\n Series.prototype.setYAxis = function(index) {\n this._yaxis = index || null;\n };\n\n /**\n * Validate series labels.\n *\n * @protected\n * @param {String[]} labels The labels of the serie.\n */\n Series.prototype._validateLabels = function(labels) {\n if (labels && labels.length > 0 && labels.length != this.getCount()) {\n throw new Error('Series labels must match series values.');\n }\n };\n\n return Series;\n\n});\n"],"file":"chart_series.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chart_series.js"],"names":["define","Series","label","values","Error","length","_colors","_label","_values","prototype","TYPE_DEFAULT","TYPE_LINE","_fill","_labels","_smooth","_type","_xaxis","_yaxis","create","obj","s","setType","type","setXAxis","axes","x","setYAxis","y","setLabels","labels","colors","setColors","setColor","setFill","fill","setSmooth","smooth","getColor","getColors","getCount","getFill","getLabel","getLabels","getSmooth","getType","getValues","getXAxis","getYAxis","hasColoredValues","color","_validateLabels","index"],"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 .\n\n/**\n * Chart series.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @module core/chart_series\n */\ndefine([], function() {\n\n /**\n * Chart data series.\n *\n * @class\n * @alias module:core/chart_series\n * @param {String} label The series label.\n * @param {Number[]} values The values.\n */\n function Series(label, values) {\n if (typeof label !== 'string') {\n throw new Error('Invalid label for series.');\n\n } else if (typeof values !== 'object') {\n throw new Error('Values for a series must be an array.');\n\n } else if (values.length < 1) {\n throw new Error('Invalid values received for series.');\n }\n\n this._colors = [];\n this._label = label;\n this._values = values;\n }\n\n /**\n * The default type of series.\n *\n * @type {Null}\n * @const\n */\n Series.prototype.TYPE_DEFAULT = null;\n\n /**\n * Type of series 'line'.\n *\n * @type {String}\n * @const\n */\n Series.prototype.TYPE_LINE = 'line';\n\n /**\n * The colors of the series.\n *\n * @type {String[]}\n * @protected\n */\n Series.prototype._colors = null;\n\n /**\n * The fill mode of the series.\n *\n * @type {Object}\n * @protected\n */\n Series.prototype._fill = false;\n\n /**\n * The label of the series.\n *\n * @type {String}\n * @protected\n */\n Series.prototype._label = null;\n\n /**\n * The labels for the values of the series.\n *\n * @type {String[]}\n * @protected\n */\n Series.prototype._labels = null;\n\n /**\n * Whether the line of the serie should be smooth or not.\n *\n * @type {Bool}\n * @protected\n */\n Series.prototype._smooth = false;\n\n /**\n * The type of the series.\n *\n * @type {String}\n * @protected\n */\n Series.prototype._type = Series.prototype.TYPE_DEFAULT;\n\n /**\n * The values in the series.\n *\n * @type {Number[]}\n * @protected\n */\n Series.prototype._values = null;\n\n /**\n * The index of the X axis.\n *\n * @type {Number[]}\n * @protected\n */\n Series.prototype._xaxis = null;\n\n /**\n * The index of the Y axis.\n *\n * @type {Number[]}\n * @protected\n */\n Series.prototype._yaxis = null;\n\n /**\n * Create a new instance of a series from serialised data.\n *\n * @static\n * @method create\n * @param {Object} obj The data of the series.\n * @return {module:core/chart_series}\n */\n Series.prototype.create = function(obj) {\n var s = new Series(obj.label, obj.values);\n s.setType(obj.type);\n s.setXAxis(obj.axes.x);\n s.setYAxis(obj.axes.y);\n s.setLabels(obj.labels);\n\n // Colors are exported as an array with 1, or n values.\n if (obj.colors && obj.colors.length > 1) {\n s.setColors(obj.colors);\n } else {\n s.setColor(obj.colors[0]);\n }\n\n s.setFill(obj.fill);\n s.setSmooth(obj.smooth);\n return s;\n };\n\n /**\n * Get the color.\n *\n * @return {String}\n */\n Series.prototype.getColor = function() {\n return this._colors[0] || null;\n };\n\n /**\n * Get the colors for each value in the series.\n *\n * @return {String[]}\n */\n Series.prototype.getColors = function() {\n return this._colors;\n };\n\n /**\n * Get the number of values in the series.\n *\n * @return {Number}\n */\n Series.prototype.getCount = function() {\n return this._values.length;\n };\n\n /**\n * Get the fill mode of the series.\n *\n * @return {Object}\n */\n Series.prototype.getFill = function() {\n return this._fill;\n };\n\n /**\n * Get the series label.\n *\n * @return {String}\n */\n Series.prototype.getLabel = function() {\n return this._label;\n };\n\n /**\n * Get labels for the values of the series.\n *\n * @return {String[]}\n */\n Series.prototype.getLabels = function() {\n return this._labels;\n };\n\n /**\n * Get whether the line of the serie should be smooth or not.\n *\n * @returns {Bool}\n */\n Series.prototype.getSmooth = function() {\n return this._smooth;\n };\n\n /**\n * Get the series type.\n *\n * @return {String}\n */\n Series.prototype.getType = function() {\n return this._type;\n };\n\n /**\n * Get the series values.\n *\n * @return {Number[]}\n */\n Series.prototype.getValues = function() {\n return this._values;\n };\n\n /**\n * Get the index of the X axis.\n *\n * @return {Number}\n */\n Series.prototype.getXAxis = function() {\n return this._xaxis;\n };\n\n /**\n * Get the index of the Y axis.\n *\n * @return {Number}\n */\n Series.prototype.getYAxis = function() {\n return this._yaxis;\n };\n\n /**\n * Whether there is a color per value.\n *\n * @return {Bool}\n */\n Series.prototype.hasColoredValues = function() {\n return this._colors.length == this.getCount();\n };\n\n /**\n * Set the series color.\n *\n * @param {String} color A CSS-compatible color.\n */\n Series.prototype.setColor = function(color) {\n this._colors = [color];\n };\n\n /**\n * Set a color for each value in the series.\n *\n * @param {String[]} colors CSS-compatible colors.\n */\n Series.prototype.setColors = function(colors) {\n if (colors && colors.length != this.getCount()) {\n throw new Error('When setting multiple colors there must be one per value.');\n }\n this._colors = colors || [];\n };\n\n /**\n * Set the fill mode for the series.\n *\n * @param {Object} fill\n */\n Series.prototype.setFill = function(fill) {\n this._fill = typeof fill === 'undefined' ? null : fill;\n };\n\n /**\n * Set the labels for the values of the series.\n *\n * @param {String[]} labels the labels of the series values.\n */\n Series.prototype.setLabels = function(labels) {\n this._validateLabels(labels);\n labels = typeof labels === 'undefined' ? null : labels;\n this._labels = labels;\n };\n\n /**\n * Set Whether the line of the serie should be smooth or not.\n *\n * Only applicable for line chart or a line series, if null it assumes the chart default (not smooth).\n *\n * @param {Bool} smooth True if the lines should be smooth, false for tensioned lines.\n */\n Series.prototype.setSmooth = function(smooth) {\n smooth = typeof smooth === 'undefined' ? null : smooth;\n this._smooth = smooth;\n };\n\n /**\n * Set the type of the series.\n *\n * @param {String} type A type constant value.\n */\n Series.prototype.setType = function(type) {\n if (type != this.TYPE_DEFAULT && type != this.TYPE_LINE) {\n throw new Error('Invalid serie type.');\n }\n this._type = type || null;\n };\n\n /**\n * Set the index of the X axis.\n *\n * @param {Number} index The index.\n */\n Series.prototype.setXAxis = function(index) {\n this._xaxis = index || null;\n };\n\n\n /**\n * Set the index of the Y axis.\n *\n * @param {Number} index The index.\n */\n Series.prototype.setYAxis = function(index) {\n this._yaxis = index || null;\n };\n\n /**\n * Validate series labels.\n *\n * @protected\n * @param {String[]} labels The labels of the serie.\n */\n Series.prototype._validateLabels = function(labels) {\n if (labels && labels.length > 0 && labels.length != this.getCount()) {\n throw new Error('Series labels must match series values.');\n }\n };\n\n return Series;\n\n});\n"],"file":"chart_series.min.js"} \ No newline at end of file diff --git a/lib/amd/build/chartjs.min.js.map b/lib/amd/build/chartjs.min.js.map index 8e3f9891218..9fc85bfb8ac 100644 --- a/lib/amd/build/chartjs.min.js.map +++ b/lib/amd/build/chartjs.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/chartjs.js"],"names":["define","ChartJS"],"mappings":"AAsBAA,OAAM,gBAAC,CAAC,mBAAD,CAAD,CAAwB,SAASC,CAAT,CAAkB,CAC5C,MAAOA,CAAAA,CACV,CAFK,CAAN","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 .\n\n/**\n * Chart.js loader.\n *\n * @package core\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/chartjs-lazy'], function(ChartJS) {\n return ChartJS;\n});\n"],"file":"chartjs.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/chartjs.js"],"names":["define","ChartJS"],"mappings":"AAqBAA,OAAM,gBAAC,CAAC,mBAAD,CAAD,CAAwB,SAASC,CAAT,CAAkB,CAC5C,MAAOA,CAAAA,CACV,CAFK,CAAN","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 .\n\n/**\n * Chart.js loader.\n *\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['core/chartjs-lazy'], function(ChartJS) {\n return ChartJS;\n});\n"],"file":"chartjs.min.js"} \ No newline at end of file diff --git a/lib/amd/build/config.min.js.map b/lib/amd/build/config.min.js.map index fe10adc5ef6..f7a82a75239 100644 --- a/lib/amd/build/config.min.js.map +++ b/lib/amd/build/config.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/config.js"],"names":["define","M","cfg"],"mappings":"AAyBAA,OAAM,eAAC,UAAW,CAGd,MAAwCC,CAAAA,CAAC,CAACC,GAC7C,CAJK,CAAN","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 .\n\n/**\n * Expose the M.cfg global variable.\n *\n * @module core/config\n * @class config\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(function() {\n\n // This module exposes only the raw data from M.cfg;\n return /** @alias module:core/config */ M.cfg;\n});\n"],"file":"config.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/config.js"],"names":["define","M","cfg"],"mappings":"AAwBAA,OAAM,eAAC,UAAW,CAGd,MAAwCC,CAAAA,CAAC,CAACC,GAC7C,CAJK,CAAN","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 .\n\n/**\n * Expose the M.cfg global variable.\n *\n * @module core/config\n * @class config\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(function() {\n\n // This module exposes only the raw data from M.cfg;\n return /** @alias module:core/config */ M.cfg;\n});\n"],"file":"config.min.js"} \ No newline at end of file diff --git a/lib/amd/build/custom_interaction_events.min.js.map b/lib/amd/build/custom_interaction_events.min.js.map index 6d148be2fc5..6113e0086ad 100644 --- a/lib/amd/build/custom_interaction_events.min.js.map +++ b/lib/amd/build/custom_interaction_events.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/custom_interaction_events.js"],"names":["define","$","keyCodes","events","activate","keyboardActivate","escape","down","up","home","end","next","previous","asterix","scrollLock","scrollTop","scrollBottom","ctrlPageUp","ctrlPageDown","enter","accessibleChange","triggeredEvents","shouldAddEvent","eventType","include","length","indexOf","isModifierPressed","e","shiftKey","metaKey","altKey","ctrlKey","triggerEvent","eventName","eventTypeKey","hasOwnProperty","type","timeStamp","target","trigger","originalEvent","addKeyboardEvent","element","event","keyCode","off","on","addActivateListener","space","addKeyboardActivateListener","addEscapeListener","addDownListener","arrowDown","addUpListener","arrowUp","addHomeListener","addEndListener","addNextListener","attr","arrowLeft","arrowRight","addPreviousListener","addAsterixListener","addScrollTopListener","addScrollBottomListener","innerHeight","scrollHeight","addScrollLockListener","height","delta","detail","wheelDelta","stopPropagation","preventDefault","returnValue","addCtrlPageUpListener","pageUp","addCtrlPageDownListener","pageDown","addEnterListener","addAccessibleChangeListener","onMac","navigator","userAgent","touchEnabled","window","msMaxTouchPoints","setInitialValue","dataset","initValue","value","resetToInitialValue","checkAndTriggerAccessibleChange","nativeElement","get","addEventListener","which","ignoreChange","getHandlers","handlers","each","handler"],"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 .\n\n/**\n * This module provides a wrapper to encapsulate a lot of the common combinations of\n * user interaction we use in Moodle.\n *\n * @module core/custom_interaction_events\n * @class custom_interaction_events\n * @package core\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.2\n */\ndefine(['jquery', 'core/key_codes'], function($, keyCodes) {\n // The list of events provided by this module. Namespaced to avoid clashes.\n var events = {\n activate: 'cie:activate',\n keyboardActivate: 'cie:keyboardactivate',\n escape: 'cie:escape',\n down: 'cie:down',\n up: 'cie:up',\n home: 'cie:home',\n end: 'cie:end',\n next: 'cie:next',\n previous: 'cie:previous',\n asterix: 'cie:asterix',\n scrollLock: 'cie:scrollLock',\n scrollTop: 'cie:scrollTop',\n scrollBottom: 'cie:scrollBottom',\n ctrlPageUp: 'cie:ctrlPageUp',\n ctrlPageDown: 'cie:ctrlPageDown',\n enter: 'cie:enter',\n accessibleChange: 'cie:accessibleChange',\n };\n // Static cache of jQuery events that have been handled. This should\n // only be populated by JavaScript generated events (which will keep it\n // fairly small).\n var triggeredEvents = {};\n\n /**\n * Check if the caller has asked for the given event type to be\n * registered.\n *\n * @method shouldAddEvent\n * @private\n * @param {string} eventType name of the event (see events above)\n * @param {array} include the list of events to be added\n * @return {bool} true if the event should be added, false otherwise.\n */\n var shouldAddEvent = function(eventType, include) {\n include = include || [];\n\n if (include.length && include.indexOf(eventType) !== -1) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Check if any of the modifier keys have been pressed on the event.\n *\n * @method isModifierPressed\n * @private\n * @param {event} e jQuery event\n * @return {bool} true if shift, meta (command on Mac), alt or ctrl are pressed\n */\n var isModifierPressed = function(e) {\n return (e.shiftKey || e.metaKey || e.altKey || e.ctrlKey);\n };\n\n /**\n * Trigger the custom event for the given jQuery event.\n *\n * This function will only fire the custom event if one hasn't already been\n * fired for the jQuery event.\n *\n * This is to prevent multiple custom event handlers triggering multiple\n * custom events for a single jQuery event as it bubbles up the stack.\n *\n * @param {string} eventName The name of the custom event\n * @param {event} e The jQuery event\n * @return {void}\n */\n var triggerEvent = function(eventName, e) {\n var eventTypeKey = \"\";\n\n if (!e.hasOwnProperty('originalEvent')) {\n // This is a jQuery event generated from JavaScript not a browser event so\n // we need to build the cache key for the event.\n eventTypeKey = \"\" + eventName + e.type + e.timeStamp;\n\n if (!triggeredEvents.hasOwnProperty(eventTypeKey)) {\n // If we haven't seen this jQuery event before then fire a custom\n // event for it and remember the event for later.\n triggeredEvents[eventTypeKey] = true;\n $(e.target).trigger(eventName, [{originalEvent: e}]);\n }\n return;\n }\n\n eventTypeKey = \"triggeredCustom_\" + eventName;\n if (!e.originalEvent.hasOwnProperty(eventTypeKey)) {\n // If this is a jQuery event generated by the browser then set a\n // property on the original event to track that we've seen it before.\n // The property is set on the original event because it's the only part\n // of the jQuery event that is maintained through multiple event handlers.\n e.originalEvent[eventTypeKey] = true;\n $(e.target).trigger(eventName, [{originalEvent: e}]);\n return;\n }\n };\n\n /**\n * Register a keyboard event that ignores modifier keys.\n *\n * @method addKeyboardEvent\n * @private\n * @param {object} element A jQuery object of the element to bind events to\n * @param {string} event The custom interaction event name\n * @param {int} keyCode The key code.\n */\n var addKeyboardEvent = function(element, event, keyCode) {\n element.off('keydown.' + event).on('keydown.' + event, function(e) {\n if (!isModifierPressed(e)) {\n if (e.keyCode == keyCode) {\n triggerEvent(event, e);\n }\n }\n });\n };\n\n /**\n * Trigger the activate event on the given element if it is clicked or the enter\n * or space key are pressed without a modifier key.\n *\n * @method addActivateListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addActivateListener = function(element) {\n element.off('click.cie.activate').on('click.cie.activate', function(e) {\n triggerEvent(events.activate, e);\n });\n element.off('keydown.cie.activate').on('keydown.cie.activate', function(e) {\n if (!isModifierPressed(e)) {\n if (e.keyCode == keyCodes.enter || e.keyCode == keyCodes.space) {\n triggerEvent(events.activate, e);\n }\n }\n });\n };\n\n /**\n * Trigger the keyboard activate event on the given element if the enter\n * or space key are pressed without a modifier key.\n *\n * @method addKeyboardActivateListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addKeyboardActivateListener = function(element) {\n element.off('keydown.cie.keyboardactivate').on('keydown.cie.keyboardactivate', function(e) {\n if (!isModifierPressed(e)) {\n if (e.keyCode == keyCodes.enter || e.keyCode == keyCodes.space) {\n triggerEvent(events.keyboardActivate, e);\n }\n }\n });\n };\n\n /**\n * Trigger the escape event on the given element if the escape key is pressed\n * without a modifier key.\n *\n * @method addEscapeListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addEscapeListener = function(element) {\n addKeyboardEvent(element, events.escape, keyCodes.escape);\n };\n\n /**\n * Trigger the down event on the given element if the down arrow key is pressed\n * without a modifier key.\n *\n * @method addDownListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addDownListener = function(element) {\n addKeyboardEvent(element, events.down, keyCodes.arrowDown);\n };\n\n /**\n * Trigger the up event on the given element if the up arrow key is pressed\n * without a modifier key.\n *\n * @method addUpListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addUpListener = function(element) {\n addKeyboardEvent(element, events.up, keyCodes.arrowUp);\n };\n\n /**\n * Trigger the home event on the given element if the home key is pressed\n * without a modifier key.\n *\n * @method addHomeListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addHomeListener = function(element) {\n addKeyboardEvent(element, events.home, keyCodes.home);\n };\n\n /**\n * Trigger the end event on the given element if the end key is pressed\n * without a modifier key.\n *\n * @method addEndListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addEndListener = function(element) {\n addKeyboardEvent(element, events.end, keyCodes.end);\n };\n\n /**\n * Trigger the next event on the given element if the right arrow key is pressed\n * without a modifier key in LTR mode or left arrow key in RTL mode.\n *\n * @method addNextListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addNextListener = function(element) {\n // Left and right are flipped in RTL mode.\n var keyCode = $('html').attr('dir') == \"rtl\" ? keyCodes.arrowLeft : keyCodes.arrowRight;\n\n addKeyboardEvent(element, events.next, keyCode);\n };\n\n /**\n * Trigger the previous event on the given element if the left arrow key is pressed\n * without a modifier key in LTR mode or right arrow key in RTL mode.\n *\n * @method addPreviousListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addPreviousListener = function(element) {\n // Left and right are flipped in RTL mode.\n var keyCode = $('html').attr('dir') == \"rtl\" ? keyCodes.arrowRight : keyCodes.arrowLeft;\n\n addKeyboardEvent(element, events.previous, keyCode);\n };\n\n /**\n * Trigger the asterix event on the given element if the asterix key is pressed\n * without a modifier key.\n *\n * @method addAsterixListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addAsterixListener = function(element) {\n addKeyboardEvent(element, events.asterix, keyCodes.asterix);\n };\n\n\n /**\n * Trigger the scrollTop event on the given element if the user scrolls to\n * the top of the given element.\n *\n * @method addScrollTopListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addScrollTopListener = function(element) {\n element.off('scroll.cie.scrollTop').on('scroll.cie.scrollTop', function(e) {\n var scrollTop = element.scrollTop();\n if (scrollTop === 0) {\n triggerEvent(events.scrollTop, e);\n }\n });\n };\n\n /**\n * Trigger the scrollBottom event on the given element if the user scrolls to\n * the bottom of the given element.\n *\n * @method addScrollBottomListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addScrollBottomListener = function(element) {\n element.off('scroll.cie.scrollBottom').on('scroll.cie.scrollBottom', function(e) {\n var scrollTop = element.scrollTop();\n var innerHeight = element.innerHeight();\n var scrollHeight = element[0].scrollHeight;\n\n if (scrollTop + innerHeight >= scrollHeight) {\n triggerEvent(events.scrollBottom, e);\n }\n });\n };\n\n /**\n * Trigger the scrollLock event on the given element if the user scrolls to\n * the bottom or top of the given element.\n *\n * @method addScrollLockListener\n * @private\n * @param {jQuery} element jQuery object to add event listeners to\n */\n var addScrollLockListener = function(element) {\n // Lock mousewheel scrolling within the element to stop the annoying window scroll.\n element.off('DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock')\n .on('DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock', function(e) {\n var scrollTop = element.scrollTop();\n var scrollHeight = element[0].scrollHeight;\n var height = element.height();\n var delta = (e.type == 'DOMMouseScroll' ?\n e.originalEvent.detail * -40 :\n e.originalEvent.wheelDelta);\n var up = delta > 0;\n\n if (!up && -delta > scrollHeight - height - scrollTop) {\n // Scrolling down past the bottom.\n element.scrollTop(scrollHeight);\n e.stopPropagation();\n e.preventDefault();\n e.returnValue = false;\n // Fire the scroll lock event.\n triggerEvent(events.scrollLock, e);\n\n return false;\n } else if (up && delta > scrollTop) {\n // Scrolling up past the top.\n element.scrollTop(0);\n e.stopPropagation();\n e.preventDefault();\n e.returnValue = false;\n // Fire the scroll lock event.\n triggerEvent(events.scrollLock, e);\n\n return false;\n }\n\n return true;\n });\n };\n\n /**\n * Trigger the ctrlPageUp event on the given element if the user presses the\n * control and page up key.\n *\n * @method addCtrlPageUpListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addCtrlPageUpListener = function(element) {\n element.off('keydown.cie.ctrlpageup').on('keydown.cie.ctrlpageup', function(e) {\n if (e.ctrlKey) {\n if (e.keyCode == keyCodes.pageUp) {\n triggerEvent(events.ctrlPageUp, e);\n }\n }\n });\n };\n\n /**\n * Trigger the ctrlPageDown event on the given element if the user presses the\n * control and page down key.\n *\n * @method addCtrlPageDownListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addCtrlPageDownListener = function(element) {\n element.off('keydown.cie.ctrlpagedown').on('keydown.cie.ctrlpagedown', function(e) {\n if (e.ctrlKey) {\n if (e.keyCode == keyCodes.pageDown) {\n triggerEvent(events.ctrlPageDown, e);\n }\n }\n });\n };\n\n /**\n * Trigger the enter event on the given element if the enter key is pressed\n * without a modifier key.\n *\n * @method addEnterListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addEnterListener = function(element) {\n addKeyboardEvent(element, events.enter, keyCodes.enter);\n };\n\n /**\n * Trigger the AccessibleChange event on the given element if the value of the element is changed.\n *\n * @method addAccessibleChangeListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addAccessibleChangeListener = function(element) {\n var onMac = navigator.userAgent.indexOf('Macintosh') !== -1;\n var touchEnabled = ('ontouchstart' in window) || (('msMaxTouchPoints' in navigator) && (navigator.msMaxTouchPoints > 0));\n if (onMac || touchEnabled) {\n // On Mac devices, and touch-enabled devices, the change event seems to be handled correctly and\n // consistently at this time.\n element.on('change', function(e) {\n triggerEvent(events.accessibleChange, e);\n });\n } else {\n // Some browsers have non-normalised behaviour for handling the selection of values in a boxes as a single-select,\n // and make use of a dropdown of action links like the Bootstrap Dropdown menu.\n var setInitialValue = function(target) {\n target.dataset.initValue = target.value;\n };\n var resetToInitialValue = function(target) {\n if ('initValue' in target.dataset) {\n target.value = target.dataset.initValue;\n }\n };\n var checkAndTriggerAccessibleChange = function(e) {\n if (!('initValue' in e.target.dataset)) {\n // Some browsers trigger click before focus, therefore it is possible that initValue is undefined.\n // In this case it's likely that it's being focused for the first time and we should therefore not submit.\n return;\n }\n\n if (e.target.value !== e.target.dataset.initValue) {\n // Update the initValue when the event is triggered.\n // This means that if the click handler fires before the focus handler on a subsequent interaction\n // with the element, the currently dispalyed value will be the best guess current value.\n e.target.dataset.initValue = e.target.value;\n triggerEvent(events.accessibleChange, e);\n }\n };\n var nativeElement = element.get()[0];\n // The `focus` and `blur` events do not support bubbling. Use Event Capture instead.\n nativeElement.addEventListener('focus', function(e) {\n setInitialValue(e.target);\n }, true);\n nativeElement.addEventListener('blur', function(e) {\n checkAndTriggerAccessibleChange(e);\n }, true);\n element.on('keydown', function(e) {\n if ((e.which === keyCodes.enter)) {\n checkAndTriggerAccessibleChange(e);\n } else if (e.which === keyCodes.escape) {\n resetToInitialValue(e.target);\n e.target.dataset.ignoreChange = true;\n } else {\n // Firefox triggers a change event when using the keyboard to scroll through the selection.\n // Set a data- attribute that the change listener can use to ignore the change event where it was\n // generated from a keyboard change such as typing to complete a value, or using arrow keys.\n e.target.dataset.ignoreChange = true;\n\n }\n });\n element.on('change', function(e) {\n if (e.target.dataset.ignoreChange) {\n // This change event was triggered from a keyboard change which is not yet complete.\n // Do not trigger the accessibleChange event until the selection is completed using the [return]\n // key.\n return;\n }\n\n checkAndTriggerAccessibleChange(e);\n });\n element.on('keyup', function(e) {\n // The key has been lifted. Stop ignoring the change event.\n delete e.target.dataset.ignoreChange;\n });\n element.on('click', function(e) {\n checkAndTriggerAccessibleChange(e);\n });\n }\n };\n\n /**\n * Get the list of events and their handlers.\n *\n * @method getHandlers\n * @private\n * @return {object} object key of event names and value of handler functions\n */\n var getHandlers = function() {\n var handlers = {};\n\n handlers[events.activate] = addActivateListener;\n handlers[events.keyboardActivate] = addKeyboardActivateListener;\n handlers[events.escape] = addEscapeListener;\n handlers[events.down] = addDownListener;\n handlers[events.up] = addUpListener;\n handlers[events.home] = addHomeListener;\n handlers[events.end] = addEndListener;\n handlers[events.next] = addNextListener;\n handlers[events.previous] = addPreviousListener;\n handlers[events.asterix] = addAsterixListener;\n handlers[events.scrollLock] = addScrollLockListener;\n handlers[events.scrollTop] = addScrollTopListener;\n handlers[events.scrollBottom] = addScrollBottomListener;\n handlers[events.ctrlPageUp] = addCtrlPageUpListener;\n handlers[events.ctrlPageDown] = addCtrlPageDownListener;\n handlers[events.enter] = addEnterListener;\n handlers[events.accessibleChange] = addAccessibleChangeListener;\n\n return handlers;\n };\n\n /**\n * Add all of the listeners on the given element for the requested events.\n *\n * @method define\n * @public\n * @param {object} element the DOM element to register event listeners on\n * @param {array} include the array of events to be triggered\n */\n var define = function(element, include) {\n element = $(element);\n include = include || [];\n\n if (!element.length || !include.length) {\n return;\n }\n\n $.each(getHandlers(), function(eventType, handler) {\n if (shouldAddEvent(eventType, include)) {\n handler(element);\n }\n });\n };\n\n return /** @module core/custom_interaction_events */ {\n define: define,\n events: events,\n };\n});\n"],"file":"custom_interaction_events.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/custom_interaction_events.js"],"names":["define","$","keyCodes","events","activate","keyboardActivate","escape","down","up","home","end","next","previous","asterix","scrollLock","scrollTop","scrollBottom","ctrlPageUp","ctrlPageDown","enter","accessibleChange","triggeredEvents","shouldAddEvent","eventType","include","length","indexOf","isModifierPressed","e","shiftKey","metaKey","altKey","ctrlKey","triggerEvent","eventName","eventTypeKey","hasOwnProperty","type","timeStamp","target","trigger","originalEvent","addKeyboardEvent","element","event","keyCode","off","on","addActivateListener","space","addKeyboardActivateListener","addEscapeListener","addDownListener","arrowDown","addUpListener","arrowUp","addHomeListener","addEndListener","addNextListener","attr","arrowLeft","arrowRight","addPreviousListener","addAsterixListener","addScrollTopListener","addScrollBottomListener","innerHeight","scrollHeight","addScrollLockListener","height","delta","detail","wheelDelta","stopPropagation","preventDefault","returnValue","addCtrlPageUpListener","pageUp","addCtrlPageDownListener","pageDown","addEnterListener","addAccessibleChangeListener","onMac","navigator","userAgent","touchEnabled","window","msMaxTouchPoints","setInitialValue","dataset","initValue","value","resetToInitialValue","checkAndTriggerAccessibleChange","nativeElement","get","addEventListener","which","ignoreChange","getHandlers","handlers","each","handler"],"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 .\n\n/**\n * This module provides a wrapper to encapsulate a lot of the common combinations of\n * user interaction we use in Moodle.\n *\n * @module core/custom_interaction_events\n * @class custom_interaction_events\n * @copyright 2016 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.2\n */\ndefine(['jquery', 'core/key_codes'], function($, keyCodes) {\n // The list of events provided by this module. Namespaced to avoid clashes.\n var events = {\n activate: 'cie:activate',\n keyboardActivate: 'cie:keyboardactivate',\n escape: 'cie:escape',\n down: 'cie:down',\n up: 'cie:up',\n home: 'cie:home',\n end: 'cie:end',\n next: 'cie:next',\n previous: 'cie:previous',\n asterix: 'cie:asterix',\n scrollLock: 'cie:scrollLock',\n scrollTop: 'cie:scrollTop',\n scrollBottom: 'cie:scrollBottom',\n ctrlPageUp: 'cie:ctrlPageUp',\n ctrlPageDown: 'cie:ctrlPageDown',\n enter: 'cie:enter',\n accessibleChange: 'cie:accessibleChange',\n };\n // Static cache of jQuery events that have been handled. This should\n // only be populated by JavaScript generated events (which will keep it\n // fairly small).\n var triggeredEvents = {};\n\n /**\n * Check if the caller has asked for the given event type to be\n * registered.\n *\n * @method shouldAddEvent\n * @private\n * @param {string} eventType name of the event (see events above)\n * @param {array} include the list of events to be added\n * @return {bool} true if the event should be added, false otherwise.\n */\n var shouldAddEvent = function(eventType, include) {\n include = include || [];\n\n if (include.length && include.indexOf(eventType) !== -1) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Check if any of the modifier keys have been pressed on the event.\n *\n * @method isModifierPressed\n * @private\n * @param {event} e jQuery event\n * @return {bool} true if shift, meta (command on Mac), alt or ctrl are pressed\n */\n var isModifierPressed = function(e) {\n return (e.shiftKey || e.metaKey || e.altKey || e.ctrlKey);\n };\n\n /**\n * Trigger the custom event for the given jQuery event.\n *\n * This function will only fire the custom event if one hasn't already been\n * fired for the jQuery event.\n *\n * This is to prevent multiple custom event handlers triggering multiple\n * custom events for a single jQuery event as it bubbles up the stack.\n *\n * @param {string} eventName The name of the custom event\n * @param {event} e The jQuery event\n * @return {void}\n */\n var triggerEvent = function(eventName, e) {\n var eventTypeKey = \"\";\n\n if (!e.hasOwnProperty('originalEvent')) {\n // This is a jQuery event generated from JavaScript not a browser event so\n // we need to build the cache key for the event.\n eventTypeKey = \"\" + eventName + e.type + e.timeStamp;\n\n if (!triggeredEvents.hasOwnProperty(eventTypeKey)) {\n // If we haven't seen this jQuery event before then fire a custom\n // event for it and remember the event for later.\n triggeredEvents[eventTypeKey] = true;\n $(e.target).trigger(eventName, [{originalEvent: e}]);\n }\n return;\n }\n\n eventTypeKey = \"triggeredCustom_\" + eventName;\n if (!e.originalEvent.hasOwnProperty(eventTypeKey)) {\n // If this is a jQuery event generated by the browser then set a\n // property on the original event to track that we've seen it before.\n // The property is set on the original event because it's the only part\n // of the jQuery event that is maintained through multiple event handlers.\n e.originalEvent[eventTypeKey] = true;\n $(e.target).trigger(eventName, [{originalEvent: e}]);\n return;\n }\n };\n\n /**\n * Register a keyboard event that ignores modifier keys.\n *\n * @method addKeyboardEvent\n * @private\n * @param {object} element A jQuery object of the element to bind events to\n * @param {string} event The custom interaction event name\n * @param {int} keyCode The key code.\n */\n var addKeyboardEvent = function(element, event, keyCode) {\n element.off('keydown.' + event).on('keydown.' + event, function(e) {\n if (!isModifierPressed(e)) {\n if (e.keyCode == keyCode) {\n triggerEvent(event, e);\n }\n }\n });\n };\n\n /**\n * Trigger the activate event on the given element if it is clicked or the enter\n * or space key are pressed without a modifier key.\n *\n * @method addActivateListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addActivateListener = function(element) {\n element.off('click.cie.activate').on('click.cie.activate', function(e) {\n triggerEvent(events.activate, e);\n });\n element.off('keydown.cie.activate').on('keydown.cie.activate', function(e) {\n if (!isModifierPressed(e)) {\n if (e.keyCode == keyCodes.enter || e.keyCode == keyCodes.space) {\n triggerEvent(events.activate, e);\n }\n }\n });\n };\n\n /**\n * Trigger the keyboard activate event on the given element if the enter\n * or space key are pressed without a modifier key.\n *\n * @method addKeyboardActivateListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addKeyboardActivateListener = function(element) {\n element.off('keydown.cie.keyboardactivate').on('keydown.cie.keyboardactivate', function(e) {\n if (!isModifierPressed(e)) {\n if (e.keyCode == keyCodes.enter || e.keyCode == keyCodes.space) {\n triggerEvent(events.keyboardActivate, e);\n }\n }\n });\n };\n\n /**\n * Trigger the escape event on the given element if the escape key is pressed\n * without a modifier key.\n *\n * @method addEscapeListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addEscapeListener = function(element) {\n addKeyboardEvent(element, events.escape, keyCodes.escape);\n };\n\n /**\n * Trigger the down event on the given element if the down arrow key is pressed\n * without a modifier key.\n *\n * @method addDownListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addDownListener = function(element) {\n addKeyboardEvent(element, events.down, keyCodes.arrowDown);\n };\n\n /**\n * Trigger the up event on the given element if the up arrow key is pressed\n * without a modifier key.\n *\n * @method addUpListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addUpListener = function(element) {\n addKeyboardEvent(element, events.up, keyCodes.arrowUp);\n };\n\n /**\n * Trigger the home event on the given element if the home key is pressed\n * without a modifier key.\n *\n * @method addHomeListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addHomeListener = function(element) {\n addKeyboardEvent(element, events.home, keyCodes.home);\n };\n\n /**\n * Trigger the end event on the given element if the end key is pressed\n * without a modifier key.\n *\n * @method addEndListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addEndListener = function(element) {\n addKeyboardEvent(element, events.end, keyCodes.end);\n };\n\n /**\n * Trigger the next event on the given element if the right arrow key is pressed\n * without a modifier key in LTR mode or left arrow key in RTL mode.\n *\n * @method addNextListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addNextListener = function(element) {\n // Left and right are flipped in RTL mode.\n var keyCode = $('html').attr('dir') == \"rtl\" ? keyCodes.arrowLeft : keyCodes.arrowRight;\n\n addKeyboardEvent(element, events.next, keyCode);\n };\n\n /**\n * Trigger the previous event on the given element if the left arrow key is pressed\n * without a modifier key in LTR mode or right arrow key in RTL mode.\n *\n * @method addPreviousListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addPreviousListener = function(element) {\n // Left and right are flipped in RTL mode.\n var keyCode = $('html').attr('dir') == \"rtl\" ? keyCodes.arrowRight : keyCodes.arrowLeft;\n\n addKeyboardEvent(element, events.previous, keyCode);\n };\n\n /**\n * Trigger the asterix event on the given element if the asterix key is pressed\n * without a modifier key.\n *\n * @method addAsterixListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addAsterixListener = function(element) {\n addKeyboardEvent(element, events.asterix, keyCodes.asterix);\n };\n\n\n /**\n * Trigger the scrollTop event on the given element if the user scrolls to\n * the top of the given element.\n *\n * @method addScrollTopListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addScrollTopListener = function(element) {\n element.off('scroll.cie.scrollTop').on('scroll.cie.scrollTop', function(e) {\n var scrollTop = element.scrollTop();\n if (scrollTop === 0) {\n triggerEvent(events.scrollTop, e);\n }\n });\n };\n\n /**\n * Trigger the scrollBottom event on the given element if the user scrolls to\n * the bottom of the given element.\n *\n * @method addScrollBottomListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addScrollBottomListener = function(element) {\n element.off('scroll.cie.scrollBottom').on('scroll.cie.scrollBottom', function(e) {\n var scrollTop = element.scrollTop();\n var innerHeight = element.innerHeight();\n var scrollHeight = element[0].scrollHeight;\n\n if (scrollTop + innerHeight >= scrollHeight) {\n triggerEvent(events.scrollBottom, e);\n }\n });\n };\n\n /**\n * Trigger the scrollLock event on the given element if the user scrolls to\n * the bottom or top of the given element.\n *\n * @method addScrollLockListener\n * @private\n * @param {jQuery} element jQuery object to add event listeners to\n */\n var addScrollLockListener = function(element) {\n // Lock mousewheel scrolling within the element to stop the annoying window scroll.\n element.off('DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock')\n .on('DOMMouseScroll.cie.DOMMouseScrollLock mousewheel.cie.mousewheelLock', function(e) {\n var scrollTop = element.scrollTop();\n var scrollHeight = element[0].scrollHeight;\n var height = element.height();\n var delta = (e.type == 'DOMMouseScroll' ?\n e.originalEvent.detail * -40 :\n e.originalEvent.wheelDelta);\n var up = delta > 0;\n\n if (!up && -delta > scrollHeight - height - scrollTop) {\n // Scrolling down past the bottom.\n element.scrollTop(scrollHeight);\n e.stopPropagation();\n e.preventDefault();\n e.returnValue = false;\n // Fire the scroll lock event.\n triggerEvent(events.scrollLock, e);\n\n return false;\n } else if (up && delta > scrollTop) {\n // Scrolling up past the top.\n element.scrollTop(0);\n e.stopPropagation();\n e.preventDefault();\n e.returnValue = false;\n // Fire the scroll lock event.\n triggerEvent(events.scrollLock, e);\n\n return false;\n }\n\n return true;\n });\n };\n\n /**\n * Trigger the ctrlPageUp event on the given element if the user presses the\n * control and page up key.\n *\n * @method addCtrlPageUpListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addCtrlPageUpListener = function(element) {\n element.off('keydown.cie.ctrlpageup').on('keydown.cie.ctrlpageup', function(e) {\n if (e.ctrlKey) {\n if (e.keyCode == keyCodes.pageUp) {\n triggerEvent(events.ctrlPageUp, e);\n }\n }\n });\n };\n\n /**\n * Trigger the ctrlPageDown event on the given element if the user presses the\n * control and page down key.\n *\n * @method addCtrlPageDownListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addCtrlPageDownListener = function(element) {\n element.off('keydown.cie.ctrlpagedown').on('keydown.cie.ctrlpagedown', function(e) {\n if (e.ctrlKey) {\n if (e.keyCode == keyCodes.pageDown) {\n triggerEvent(events.ctrlPageDown, e);\n }\n }\n });\n };\n\n /**\n * Trigger the enter event on the given element if the enter key is pressed\n * without a modifier key.\n *\n * @method addEnterListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addEnterListener = function(element) {\n addKeyboardEvent(element, events.enter, keyCodes.enter);\n };\n\n /**\n * Trigger the AccessibleChange event on the given element if the value of the element is changed.\n *\n * @method addAccessibleChangeListener\n * @private\n * @param {object} element jQuery object to add event listeners to\n */\n var addAccessibleChangeListener = function(element) {\n var onMac = navigator.userAgent.indexOf('Macintosh') !== -1;\n var touchEnabled = ('ontouchstart' in window) || (('msMaxTouchPoints' in navigator) && (navigator.msMaxTouchPoints > 0));\n if (onMac || touchEnabled) {\n // On Mac devices, and touch-enabled devices, the change event seems to be handled correctly and\n // consistently at this time.\n element.on('change', function(e) {\n triggerEvent(events.accessibleChange, e);\n });\n } else {\n // Some browsers have non-normalised behaviour for handling the selection of values in a boxes as a single-select,\n // and make use of a dropdown of action links like the Bootstrap Dropdown menu.\n var setInitialValue = function(target) {\n target.dataset.initValue = target.value;\n };\n var resetToInitialValue = function(target) {\n if ('initValue' in target.dataset) {\n target.value = target.dataset.initValue;\n }\n };\n var checkAndTriggerAccessibleChange = function(e) {\n if (!('initValue' in e.target.dataset)) {\n // Some browsers trigger click before focus, therefore it is possible that initValue is undefined.\n // In this case it's likely that it's being focused for the first time and we should therefore not submit.\n return;\n }\n\n if (e.target.value !== e.target.dataset.initValue) {\n // Update the initValue when the event is triggered.\n // This means that if the click handler fires before the focus handler on a subsequent interaction\n // with the element, the currently dispalyed value will be the best guess current value.\n e.target.dataset.initValue = e.target.value;\n triggerEvent(events.accessibleChange, e);\n }\n };\n var nativeElement = element.get()[0];\n // The `focus` and `blur` events do not support bubbling. Use Event Capture instead.\n nativeElement.addEventListener('focus', function(e) {\n setInitialValue(e.target);\n }, true);\n nativeElement.addEventListener('blur', function(e) {\n checkAndTriggerAccessibleChange(e);\n }, true);\n element.on('keydown', function(e) {\n if ((e.which === keyCodes.enter)) {\n checkAndTriggerAccessibleChange(e);\n } else if (e.which === keyCodes.escape) {\n resetToInitialValue(e.target);\n e.target.dataset.ignoreChange = true;\n } else {\n // Firefox triggers a change event when using the keyboard to scroll through the selection.\n // Set a data- attribute that the change listener can use to ignore the change event where it was\n // generated from a keyboard change such as typing to complete a value, or using arrow keys.\n e.target.dataset.ignoreChange = true;\n\n }\n });\n element.on('change', function(e) {\n if (e.target.dataset.ignoreChange) {\n // This change event was triggered from a keyboard change which is not yet complete.\n // Do not trigger the accessibleChange event until the selection is completed using the [return]\n // key.\n return;\n }\n\n checkAndTriggerAccessibleChange(e);\n });\n element.on('keyup', function(e) {\n // The key has been lifted. Stop ignoring the change event.\n delete e.target.dataset.ignoreChange;\n });\n element.on('click', function(e) {\n checkAndTriggerAccessibleChange(e);\n });\n }\n };\n\n /**\n * Get the list of events and their handlers.\n *\n * @method getHandlers\n * @private\n * @return {object} object key of event names and value of handler functions\n */\n var getHandlers = function() {\n var handlers = {};\n\n handlers[events.activate] = addActivateListener;\n handlers[events.keyboardActivate] = addKeyboardActivateListener;\n handlers[events.escape] = addEscapeListener;\n handlers[events.down] = addDownListener;\n handlers[events.up] = addUpListener;\n handlers[events.home] = addHomeListener;\n handlers[events.end] = addEndListener;\n handlers[events.next] = addNextListener;\n handlers[events.previous] = addPreviousListener;\n handlers[events.asterix] = addAsterixListener;\n handlers[events.scrollLock] = addScrollLockListener;\n handlers[events.scrollTop] = addScrollTopListener;\n handlers[events.scrollBottom] = addScrollBottomListener;\n handlers[events.ctrlPageUp] = addCtrlPageUpListener;\n handlers[events.ctrlPageDown] = addCtrlPageDownListener;\n handlers[events.enter] = addEnterListener;\n handlers[events.accessibleChange] = addAccessibleChangeListener;\n\n return handlers;\n };\n\n /**\n * Add all of the listeners on the given element for the requested events.\n *\n * @method define\n * @public\n * @param {object} element the DOM element to register event listeners on\n * @param {array} include the array of events to be triggered\n */\n var define = function(element, include) {\n element = $(element);\n include = include || [];\n\n if (!element.length || !include.length) {\n return;\n }\n\n $.each(getHandlers(), function(eventType, handler) {\n if (shouldAddEvent(eventType, include)) {\n handler(element);\n }\n });\n };\n\n return /** @module core/custom_interaction_events */ {\n define: define,\n events: events,\n };\n});\n"],"file":"custom_interaction_events.min.js"} \ No newline at end of file diff --git a/lib/amd/build/dragdrop.min.js.map b/lib/amd/build/dragdrop.min.js.map index 7bf19d23d93..31ecb4a9f94 100644 --- a/lib/amd/build/dragdrop.min.js.map +++ b/lib/amd/build/dragdrop.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/dragdrop.js"],"names":["define","$","autoScroll","dragdrop","eventCaptureOptions","passive","capture","dragProxy","onMove","onDrop","initialPosition","initialX","initialY","touching","prepare","event","preventDefault","start","type","changedTouches","length","which","details","getEventXY","xy","x","y","offset","addEventSpecial","mouseMove","mouseUp","touchEnd","touchMove","identifier","Error","scroll","handler","window","addEventListener","ex","pageX","pageY","e","i","handleMove","current","topOffset","top","parseInt","css","leftOffset","left","maxY","document","height","outerHeight","maxX","width","outerWidth","initial","position","Math","max","min","handleEnd","removeEventListener","stop","currentPosition"],"mappings":"AA6BAA,OAAM,iBAAC,CAAC,QAAD,CAAW,iBAAX,CAAD,CAAgC,SAASC,CAAT,CAAYC,CAAZ,CAAwB,CAI1D,GAAIC,CAAAA,CAAQ,CAAG,CAKXC,mBAAmB,CAAE,CAACC,OAAO,GAAR,CAAiBC,OAAO,GAAxB,CALV,CAWXC,SAAS,CAAE,IAXA,CAiBXC,MAAM,CAAE,IAjBG,CAuBXC,MAAM,CAAE,IAvBG,CA4BXC,eAAe,CAAE,IA5BN,CAiCXC,QAAQ,CAAE,IAjCC,CAsCXC,QAAQ,CAAE,IAtCC,CA2CXC,QAAQ,CAAE,IA3CC,CAwDXC,OAAO,CAAE,iBAASC,CAAT,CAAgB,CACrBA,CAAK,CAACC,cAAN,GACA,GAAIC,CAAAA,CAAJ,CACA,GAAmB,YAAf,GAAAF,CAAK,CAACG,IAAV,CAAiC,CAG7BD,CAAK,CAA0B,IAAtB,GAAAd,CAAQ,CAACU,QAAV,EAA8D,CAA9B,CAAAE,CAAK,CAACI,cAAN,CAAqBC,MAChE,CAJD,IAIO,CAEHH,CAAK,CAAmB,CAAhB,GAAAF,CAAK,CAACM,KACjB,CACD,GAAIJ,CAAJ,CAAW,CACP,GAAIK,CAAAA,CAAO,CAAGnB,CAAQ,CAACoB,UAAT,CAAoBR,CAApB,CAAd,CACAO,CAAO,CAACL,KAAR,IACA,MAAOK,CAAAA,CACV,CAJD,IAIO,CACH,MAAO,CAACL,KAAK,GAAN,CACV,CACJ,CA1EU,CAgGXA,KAAK,CAAE,eAASF,CAAT,CAAgBR,CAAhB,CAA2BC,CAA3B,CAAmCC,CAAnC,CAA2C,CAC9C,GAAIe,CAAAA,CAAE,CAAGrB,CAAQ,CAACoB,UAAT,CAAoBR,CAApB,CAAT,CACAZ,CAAQ,CAACQ,QAAT,CAAoBa,CAAE,CAACC,CAAvB,CACAtB,CAAQ,CAACS,QAAT,CAAoBY,CAAE,CAACE,CAAvB,CACAvB,CAAQ,CAACO,eAAT,CAA2BH,CAAS,CAACoB,MAAV,EAA3B,CACAxB,CAAQ,CAACI,SAAT,CAAqBA,CAArB,CACAJ,CAAQ,CAACK,MAAT,CAAkBA,CAAlB,CACAL,CAAQ,CAACM,MAAT,CAAkBA,CAAlB,CAEA,OAAQM,CAAK,CAACG,IAAd,EACI,IAAK,WAAL,CAEIf,CAAQ,CAACyB,eAAT,CAAyB,WAAzB,CAAsCzB,CAAQ,CAAC0B,SAA/C,EACA1B,CAAQ,CAACyB,eAAT,CAAyB,SAAzB,CAAoCzB,CAAQ,CAAC2B,OAA7C,EACA,MACJ,IAAK,YAAL,CACI3B,CAAQ,CAACyB,eAAT,CAAyB,UAAzB,CAAqCzB,CAAQ,CAAC4B,QAA9C,EACA5B,CAAQ,CAACyB,eAAT,CAAyB,aAAzB,CAAwCzB,CAAQ,CAAC4B,QAAjD,EACA5B,CAAQ,CAACyB,eAAT,CAAyB,WAAzB,CAAsCzB,CAAQ,CAAC6B,SAA/C,EACA7B,CAAQ,CAACU,QAAT,CAAoBE,CAAK,CAACI,cAAN,CAAqB,CAArB,EAAwBc,UAA5C,CACA,MACJ,QACI,KAAM,IAAIC,CAAAA,KAAJ,CAAU,0BAA4BnB,CAAK,CAACG,IAA5C,CAAN,CAbR,CAeAhB,CAAU,CAACe,KAAX,CAAiBd,CAAQ,CAACgC,MAA1B,CACH,CAzHU,CAmIXP,eAAe,CAAE,yBAASb,CAAT,CAAgBqB,CAAhB,CAAyB,CACtC,GAAI,CACAC,MAAM,CAACC,gBAAP,CAAwBvB,CAAxB,CAA+BqB,CAA/B,CAAwCjC,CAAQ,CAACC,mBAAjD,CACH,CAAC,MAAOmC,CAAP,CAAW,CACTpC,CAAQ,CAACC,mBAAT,IACAiC,MAAM,CAACC,gBAAP,CAAwBvB,CAAxB,CAA+BqB,CAA/B,CAAwCjC,CAAQ,CAACC,mBAAjD,CACH,CACJ,CA1IU,CAmJXmB,UAAU,CAAE,oBAASR,CAAT,CAAgB,CACxB,OAAQA,CAAK,CAACG,IAAd,EACI,IAAK,YAAL,CACI,MAAO,CAACO,CAAC,CAAEV,CAAK,CAACI,cAAN,CAAqB,CAArB,EAAwBqB,KAA5B,CACCd,CAAC,CAAEX,CAAK,CAACI,cAAN,CAAqB,CAArB,EAAwBsB,KAD5B,CAAP,CAEJ,IAAK,WAAL,CACI,MAAO,CAAChB,CAAC,CAAEV,CAAK,CAACyB,KAAV,CAAiBd,CAAC,CAAEX,CAAK,CAAC0B,KAA1B,CAAP,CACJ,QACI,KAAM,IAAIP,CAAAA,KAAJ,CAAU,0BAA4BnB,CAAK,CAACG,IAA5C,CAAN,CAPR,CASH,CA7JU,CAqKXc,SAAS,CAAE,mBAASU,CAAT,CAAY,CACnBA,CAAC,CAAC1B,cAAF,GACA,IAAK,GAAI2B,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGD,CAAC,CAACvB,cAAF,CAAiBC,MAArC,CAA6CuB,CAAC,EAA9C,CAAkD,CAC9C,GAAID,CAAC,CAACvB,cAAF,CAAiBwB,CAAjB,EAAoBV,UAApB,GAAmC9B,CAAQ,CAACU,QAAhD,CAA0D,CACtDV,CAAQ,CAACyC,UAAT,CAAoBF,CAAC,CAACvB,cAAF,CAAiBwB,CAAjB,EAAoBH,KAAxC,CAA+CE,CAAC,CAACvB,cAAF,CAAiBwB,CAAjB,EAAoBF,KAAnE,CACH,CACJ,CACJ,CA5KU,CAoLXZ,SAAS,CAAE,mBAASa,CAAT,CAAY,CACnBvC,CAAQ,CAACyC,UAAT,CAAoBF,CAAC,CAACF,KAAtB,CAA6BE,CAAC,CAACD,KAA/B,CACH,CAtLU,CA+LXG,UAAU,CAAE,oBAASJ,CAAT,CAAgBC,CAAhB,CAAuB,IAE3BI,CAAAA,CAAO,CAAG1C,CAAQ,CAACI,SAAT,CAAmBoB,MAAnB,EAFiB,CAG3BmB,CAAS,CAAGD,CAAO,CAACE,GAAR,CAAcC,QAAQ,CAAC7C,CAAQ,CAACI,SAAT,CAAmB0C,GAAnB,CAAuB,KAAvB,CAAD,CAHP,CAI3BC,CAAU,CAAGL,CAAO,CAACM,IAAR,CAAeH,QAAQ,CAAC7C,CAAQ,CAACI,SAAT,CAAmB0C,GAAnB,CAAuB,MAAvB,CAAD,CAJT,CAK3BG,CAAI,CAAGnD,CAAC,CAACoD,QAAD,CAAD,CAAYC,MAAZ,GAAuBnD,CAAQ,CAACI,SAAT,CAAmBgD,WAAnB,EAAvB,CAA0DT,CALtC,CAM3BU,CAAI,CAAGvD,CAAC,CAACoD,QAAD,CAAD,CAAYI,KAAZ,GAAsBtD,CAAQ,CAACI,SAAT,CAAmBmD,UAAnB,EAAtB,CAAwDR,CANpC,CAS3BS,CAAO,CAAGxD,CAAQ,CAACO,eATQ,CAU3BkD,CAAQ,CAAG,CACXb,GAAG,CAAEc,IAAI,CAACC,GAAL,CAJE,CAAChB,CAIH,CAAee,IAAI,CAACE,GAAL,CAASX,CAAT,CAAeO,CAAO,CAACZ,GAAR,EAAeN,CAAK,CAAGtC,CAAQ,CAACS,QAAhC,EAA4CkC,CAA3D,CAAf,CADM,CAEXK,IAAI,CAAEU,IAAI,CAACC,GAAL,CAJC,CAACZ,CAIF,CAAeW,IAAI,CAACE,GAAL,CAASP,CAAT,CAAeG,CAAO,CAACR,IAAR,EAAgBX,CAAK,CAAGrC,CAAQ,CAACQ,QAAjC,EAA6CuC,CAA5D,CAAf,CAFK,CAVgB,CAc/B/C,CAAQ,CAACI,SAAT,CAAmB0C,GAAnB,CAAuBW,CAAvB,EAGAzD,CAAQ,CAACK,MAAT,CAAgBgC,CAAhB,CAAuBC,CAAvB,CAA8BtC,CAAQ,CAACI,SAAvC,CACH,CAjNU,CAyNXwB,QAAQ,CAAE,kBAASW,CAAT,CAAY,CAClBA,CAAC,CAAC1B,cAAF,GACA,IAAK,GAAI2B,CAAAA,CAAC,CAAG,CAAb,CAAgBA,CAAC,CAAGD,CAAC,CAACvB,cAAF,CAAiBC,MAArC,CAA6CuB,CAAC,EAA9C,CAAkD,CAC9C,GAAID,CAAC,CAACvB,cAAF,CAAiBwB,CAAjB,EAAoBV,UAApB,GAAmC9B,CAAQ,CAACU,QAAhD,CAA0D,CACtDV,CAAQ,CAAC6D,SAAT,CAAmBtB,CAAC,CAACvB,cAAF,CAAiBwB,CAAjB,EAAoBH,KAAvC,CAA8CE,CAAC,CAACvB,cAAF,CAAiBwB,CAAjB,EAAoBF,KAAlE,CACH,CACJ,CACJ,CAhOU,CAwOXX,OAAO,CAAE,iBAASY,CAAT,CAAY,CACjBvC,CAAQ,CAAC6D,SAAT,CAAmBtB,CAAC,CAACF,KAArB,CAA4BE,CAAC,CAACD,KAA9B,CACH,CA1OU,CAmPXuB,SAAS,CAAE,mBAASxB,CAAT,CAAgBC,CAAhB,CAAuB,CAC9B,GAA0B,IAAtB,GAAAtC,CAAQ,CAACU,QAAb,CAAgC,CAC5BwB,MAAM,CAAC4B,mBAAP,CAA2B,UAA3B,CAAuC9D,CAAQ,CAAC4B,QAAhD,CAA0D5B,CAAQ,CAACC,mBAAnE,EACAiC,MAAM,CAAC4B,mBAAP,CAA2B,aAA3B,CAA0C9D,CAAQ,CAAC4B,QAAnD,CAA6D5B,CAAQ,CAACC,mBAAtE,EACAiC,MAAM,CAAC4B,mBAAP,CAA2B,WAA3B,CAAwC9D,CAAQ,CAAC6B,SAAjD,CAA4D7B,CAAQ,CAACC,mBAArE,EACAD,CAAQ,CAACU,QAAT,CAAoB,IACvB,CALD,IAKO,CACHwB,MAAM,CAAC4B,mBAAP,CAA2B,WAA3B,CAAwC9D,CAAQ,CAAC0B,SAAjD,CAA4D1B,CAAQ,CAACC,mBAArE,EACAiC,MAAM,CAAC4B,mBAAP,CAA2B,SAA3B,CAAsC9D,CAAQ,CAAC2B,OAA/C,CAAwD3B,CAAQ,CAACC,mBAAjE,CACH,CACDF,CAAU,CAACgE,IAAX,GACA/D,CAAQ,CAACM,MAAT,CAAgB+B,CAAhB,CAAuBC,CAAvB,CAA8BtC,CAAQ,CAACI,SAAvC,CACH,CA/PU,CAuQX4B,MAAM,CAAE,gBAASR,CAAT,CAAiB,IAEjByB,CAAAA,CAAI,CAAGnD,CAAC,CAACoD,QAAD,CAAD,CAAYC,MAAZ,GAAuBnD,CAAQ,CAACI,SAAT,CAAmBgD,WAAnB,EAFb,CAGjBY,CAAe,CAAGhE,CAAQ,CAACI,SAAT,CAAmBoB,MAAnB,EAHD,CAIrBwC,CAAe,CAACpB,GAAhB,CAAsBc,IAAI,CAACE,GAAL,CAASX,CAAT,CAAee,CAAe,CAACpB,GAAhB,CAAsBpB,CAArC,CAAtB,CACAxB,CAAQ,CAACI,SAAT,CAAmB0C,GAAnB,CAAuBkB,CAAvB,CACH,CA7QU,CAAf,CAgRA,MAAO,CAWHrD,OAAO,CAAEX,CAAQ,CAACW,OAXf,CAgCHG,KAAK,CAAEd,CAAQ,CAACc,KAhCb,CAkCV,CAtTK,CAAN","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 .\n\n/*\n * JavaScript to handle drag operations, including automatic scrolling.\n *\n * Note: this module is defined statically. It is a singleton. You\n * can only have one use of it active at any time. However, you\n * can only drag one thing at a time, this is not a problem in practice.\n *\n * @module core/dragdrop\n * @class dragdrop\n * @package core\n * @copyright 2016 The Open University\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.6\n */\ndefine(['jquery', 'core/autoscroll'], function($, autoScroll) {\n /**\n * @alias module:core/dragdrop\n */\n var dragdrop = {\n /**\n * A boolean or options argument depending on whether browser supports passive events.\n * @private\n */\n eventCaptureOptions: {passive: false, capture: true},\n\n /**\n * Drag proxy if any.\n * @private\n */\n dragProxy: null,\n\n /**\n * Function called on move.\n * @private\n */\n onMove: null,\n\n /**\n * Function called on drop.\n * @private\n */\n onDrop: null,\n\n /**\n * Initial position of proxy at drag start.\n */\n initialPosition: null,\n\n /**\n * Initial page X of cursor at drag start.\n */\n initialX: null,\n\n /**\n * Initial page Y of cursor at drag start.\n */\n initialY: null,\n\n /**\n * If touch event is in progress, this will be the id, otherwise null\n */\n touching: null,\n\n /**\n * Prepares to begin a drag operation - call with a mousedown or touchstart event.\n *\n * If the returned object has 'start' true, then you can set up a drag proxy, and call\n * start. This function will call preventDefault automatically regardless of whether\n * starting or not.\n *\n * @public\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @return {Object} Object with start (boolean flag) and x, y (only if flag true) values\n */\n prepare: function(event) {\n event.preventDefault();\n var start;\n if (event.type === 'touchstart') {\n // For touch, start if there's at least one touch and we are not currently doing\n // a touch event.\n start = (dragdrop.touching === null) && event.changedTouches.length > 0;\n } else {\n // For mousedown, start if it's the left button.\n start = event.which === 1;\n }\n if (start) {\n var details = dragdrop.getEventXY(event);\n details.start = true;\n return details;\n } else {\n return {start: false};\n }\n },\n\n /**\n * Call to start a drag operation, in response to a mouse down or touch start event.\n * Normally call this after calling prepare and receiving start true (you can probably\n * skip prepare if only supporting drag not touch).\n *\n * Note: The caller is responsible for creating a 'drag proxy' which is the\n * thing that actually gets dragged. At present, this doesn't really work\n * properly unless it is added directly within the body tag.\n *\n * You also need to ensure that there is CSS so the proxy is absolutely positioned,\n * and styled to look like it is floating.\n *\n * You also need to absolutely position the proxy where you want it to start.\n *\n * @public\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @param {jQuery} dragProxy An absolute-positioned element for dragging\n * @param {Object} onMove Function that receives X and Y page locations for a move\n * @param {Object} onDrop Function that receives X and Y page locations when dropped\n */\n start: function(event, dragProxy, onMove, onDrop) {\n var xy = dragdrop.getEventXY(event);\n dragdrop.initialX = xy.x;\n dragdrop.initialY = xy.y;\n dragdrop.initialPosition = dragProxy.offset();\n dragdrop.dragProxy = dragProxy;\n dragdrop.onMove = onMove;\n dragdrop.onDrop = onDrop;\n\n switch (event.type) {\n case 'mousedown':\n // Cannot use jQuery 'on' because events need to not be passive.\n dragdrop.addEventSpecial('mousemove', dragdrop.mouseMove);\n dragdrop.addEventSpecial('mouseup', dragdrop.mouseUp);\n break;\n case 'touchstart':\n dragdrop.addEventSpecial('touchend', dragdrop.touchEnd);\n dragdrop.addEventSpecial('touchcancel', dragdrop.touchEnd);\n dragdrop.addEventSpecial('touchmove', dragdrop.touchMove);\n dragdrop.touching = event.changedTouches[0].identifier;\n break;\n default:\n throw new Error('Unexpected event type: ' + event.type);\n }\n autoScroll.start(dragdrop.scroll);\n },\n\n /**\n * Adds an event listener with special event capture options (capture, not passive). If the\n * browser does not support passive events, it will fall back to the boolean for capture.\n *\n * @private\n * @param {Object} event Event type string\n * @param {Object} handler Handler function\n */\n addEventSpecial: function(event, handler) {\n try {\n window.addEventListener(event, handler, dragdrop.eventCaptureOptions);\n } catch (ex) {\n dragdrop.eventCaptureOptions = true;\n window.addEventListener(event, handler, dragdrop.eventCaptureOptions);\n }\n },\n\n /**\n * Gets X/Y co-ordinates of an event, which can be either touchstart or mousedown.\n *\n * @private\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @return {Object} X/Y co-ordinates\n */\n getEventXY: function(event) {\n switch (event.type) {\n case 'touchstart':\n return {x: event.changedTouches[0].pageX,\n y: event.changedTouches[0].pageY};\n case 'mousedown':\n return {x: event.pageX, y: event.pageY};\n default:\n throw new Error('Unexpected event type: ' + event.type);\n }\n },\n\n /**\n * Event handler for touch move.\n *\n * @private\n * @param {Object} e Event\n */\n touchMove: function(e) {\n e.preventDefault();\n for (var i = 0; i < e.changedTouches.length; i++) {\n if (e.changedTouches[i].identifier === dragdrop.touching) {\n dragdrop.handleMove(e.changedTouches[i].pageX, e.changedTouches[i].pageY);\n }\n }\n },\n\n /**\n * Event handler for mouse move.\n *\n * @private\n * @param {Object} e Event\n */\n mouseMove: function(e) {\n dragdrop.handleMove(e.pageX, e.pageY);\n },\n\n /**\n * Shared handler for move event (mouse or touch).\n *\n * @private\n * @param {number} pageX X co-ordinate\n * @param {number} pageY Y co-ordinate\n */\n handleMove: function(pageX, pageY) {\n // Move the drag proxy, not letting you move it out of screen or window bounds.\n var current = dragdrop.dragProxy.offset();\n var topOffset = current.top - parseInt(dragdrop.dragProxy.css('top'));\n var leftOffset = current.left - parseInt(dragdrop.dragProxy.css('left'));\n var maxY = $(document).height() - dragdrop.dragProxy.outerHeight() - topOffset;\n var maxX = $(document).width() - dragdrop.dragProxy.outerWidth() - leftOffset;\n var minY = -topOffset;\n var minX = -leftOffset;\n var initial = dragdrop.initialPosition;\n var position = {\n top: Math.max(minY, Math.min(maxY, initial.top + (pageY - dragdrop.initialY) - topOffset)),\n left: Math.max(minX, Math.min(maxX, initial.left + (pageX - dragdrop.initialX) - leftOffset))\n };\n dragdrop.dragProxy.css(position);\n\n // Trigger move handler.\n dragdrop.onMove(pageX, pageY, dragdrop.dragProxy);\n },\n\n /**\n * Event handler for touch end.\n *\n * @private\n * @param {Object} e Event\n */\n touchEnd: function(e) {\n e.preventDefault();\n for (var i = 0; i < e.changedTouches.length; i++) {\n if (e.changedTouches[i].identifier === dragdrop.touching) {\n dragdrop.handleEnd(e.changedTouches[i].pageX, e.changedTouches[i].pageY);\n }\n }\n },\n\n /**\n * Event handler for mouse up.\n *\n * @private\n * @param {Object} e Event\n */\n mouseUp: function(e) {\n dragdrop.handleEnd(e.pageX, e.pageY);\n },\n\n /**\n * Shared handler for end drag (mouse or touch).\n *\n * @private\n * @param {number} pageX X\n * @param {number} pageY Y\n */\n handleEnd: function(pageX, pageY) {\n if (dragdrop.touching !== null) {\n window.removeEventListener('touchend', dragdrop.touchEnd, dragdrop.eventCaptureOptions);\n window.removeEventListener('touchcancel', dragdrop.touchEnd, dragdrop.eventCaptureOptions);\n window.removeEventListener('touchmove', dragdrop.touchMove, dragdrop.eventCaptureOptions);\n dragdrop.touching = null;\n } else {\n window.removeEventListener('mousemove', dragdrop.mouseMove, dragdrop.eventCaptureOptions);\n window.removeEventListener('mouseup', dragdrop.mouseUp, dragdrop.eventCaptureOptions);\n }\n autoScroll.stop();\n dragdrop.onDrop(pageX, pageY, dragdrop.dragProxy);\n },\n\n /**\n * Called when the page scrolls.\n *\n * @private\n * @param {number} offset Amount of scroll\n */\n scroll: function(offset) {\n // Move the proxy to match.\n var maxY = $(document).height() - dragdrop.dragProxy.outerHeight();\n var currentPosition = dragdrop.dragProxy.offset();\n currentPosition.top = Math.min(maxY, currentPosition.top + offset);\n dragdrop.dragProxy.css(currentPosition);\n }\n };\n\n return {\n /**\n * Prepares to begin a drag operation - call with a mousedown or touchstart event.\n *\n * If the returned object has 'start' true, then you can set up a drag proxy, and call\n * start. This function will call preventDefault automatically regardless of whether\n * starting or not.\n *\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @return {Object} Object with start (boolean flag) and x, y (only if flag true) values\n */\n prepare: dragdrop.prepare,\n\n /**\n * Call to start a drag operation, in response to a mouse down or touch start event.\n * Normally call this after calling prepare and receiving start true (you can probably\n * skip prepare if only supporting drag not touch).\n *\n * Note: The caller is responsible for creating a 'drag proxy' which is the\n * thing that actually gets dragged. At present, this doesn't really work\n * properly unless it is added directly within the body tag.\n *\n * You also need to ensure that there is CSS so the proxy is absolutely positioned,\n * and styled to look like it is floating.\n *\n * You also need to absolutely position the proxy where you want it to start.\n *\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @param {jQuery} dragProxy An absolute-positioned element for dragging\n * @param {Object} onMove Function that receives X and Y page locations for a move\n * @param {Object} onDrop Function that receives X and Y page locations when dropped\n */\n start: dragdrop.start\n };\n});\n"],"file":"dragdrop.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/dragdrop.js"],"names":["define","$","autoScroll","dragdrop","eventCaptureOptions","passive","capture","dragProxy","onMove","onDrop","initialPosition","initialX","initialY","touching","prepare","event","preventDefault","start","type","changedTouches","length","which","details","getEventXY","xy","x","y","offset","addEventSpecial","mouseMove","mouseUp","touchEnd","touchMove","identifier","Error","scroll","handler","window","addEventListener","ex","pageX","pageY","e","i","handleMove","current","topOffset","top","parseInt","css","leftOffset","left","maxY","document","height","outerHeight","maxX","width","outerWidth","initial","position","Math","max","min","handleEnd","removeEventListener","stop","currentPosition"],"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 .\n\n/*\n * JavaScript to handle drag operations, including automatic scrolling.\n *\n * Note: this module is defined statically. It is a singleton. You\n * can only have one use of it active at any time. However, you\n * can only drag one thing at a time, this is not a problem in practice.\n *\n * @module core/dragdrop\n * @class dragdrop\n * @copyright 2016 The Open University\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.6\n */\ndefine(['jquery', 'core/autoscroll'], function($, autoScroll) {\n /**\n * @alias module:core/dragdrop\n */\n var dragdrop = {\n /**\n * A boolean or options argument depending on whether browser supports passive events.\n * @private\n */\n eventCaptureOptions: {passive: false, capture: true},\n\n /**\n * Drag proxy if any.\n * @private\n */\n dragProxy: null,\n\n /**\n * Function called on move.\n * @private\n */\n onMove: null,\n\n /**\n * Function called on drop.\n * @private\n */\n onDrop: null,\n\n /**\n * Initial position of proxy at drag start.\n */\n initialPosition: null,\n\n /**\n * Initial page X of cursor at drag start.\n */\n initialX: null,\n\n /**\n * Initial page Y of cursor at drag start.\n */\n initialY: null,\n\n /**\n * If touch event is in progress, this will be the id, otherwise null\n */\n touching: null,\n\n /**\n * Prepares to begin a drag operation - call with a mousedown or touchstart event.\n *\n * If the returned object has 'start' true, then you can set up a drag proxy, and call\n * start. This function will call preventDefault automatically regardless of whether\n * starting or not.\n *\n * @public\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @return {Object} Object with start (boolean flag) and x, y (only if flag true) values\n */\n prepare: function(event) {\n event.preventDefault();\n var start;\n if (event.type === 'touchstart') {\n // For touch, start if there's at least one touch and we are not currently doing\n // a touch event.\n start = (dragdrop.touching === null) && event.changedTouches.length > 0;\n } else {\n // For mousedown, start if it's the left button.\n start = event.which === 1;\n }\n if (start) {\n var details = dragdrop.getEventXY(event);\n details.start = true;\n return details;\n } else {\n return {start: false};\n }\n },\n\n /**\n * Call to start a drag operation, in response to a mouse down or touch start event.\n * Normally call this after calling prepare and receiving start true (you can probably\n * skip prepare if only supporting drag not touch).\n *\n * Note: The caller is responsible for creating a 'drag proxy' which is the\n * thing that actually gets dragged. At present, this doesn't really work\n * properly unless it is added directly within the body tag.\n *\n * You also need to ensure that there is CSS so the proxy is absolutely positioned,\n * and styled to look like it is floating.\n *\n * You also need to absolutely position the proxy where you want it to start.\n *\n * @public\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @param {jQuery} dragProxy An absolute-positioned element for dragging\n * @param {Object} onMove Function that receives X and Y page locations for a move\n * @param {Object} onDrop Function that receives X and Y page locations when dropped\n */\n start: function(event, dragProxy, onMove, onDrop) {\n var xy = dragdrop.getEventXY(event);\n dragdrop.initialX = xy.x;\n dragdrop.initialY = xy.y;\n dragdrop.initialPosition = dragProxy.offset();\n dragdrop.dragProxy = dragProxy;\n dragdrop.onMove = onMove;\n dragdrop.onDrop = onDrop;\n\n switch (event.type) {\n case 'mousedown':\n // Cannot use jQuery 'on' because events need to not be passive.\n dragdrop.addEventSpecial('mousemove', dragdrop.mouseMove);\n dragdrop.addEventSpecial('mouseup', dragdrop.mouseUp);\n break;\n case 'touchstart':\n dragdrop.addEventSpecial('touchend', dragdrop.touchEnd);\n dragdrop.addEventSpecial('touchcancel', dragdrop.touchEnd);\n dragdrop.addEventSpecial('touchmove', dragdrop.touchMove);\n dragdrop.touching = event.changedTouches[0].identifier;\n break;\n default:\n throw new Error('Unexpected event type: ' + event.type);\n }\n autoScroll.start(dragdrop.scroll);\n },\n\n /**\n * Adds an event listener with special event capture options (capture, not passive). If the\n * browser does not support passive events, it will fall back to the boolean for capture.\n *\n * @private\n * @param {Object} event Event type string\n * @param {Object} handler Handler function\n */\n addEventSpecial: function(event, handler) {\n try {\n window.addEventListener(event, handler, dragdrop.eventCaptureOptions);\n } catch (ex) {\n dragdrop.eventCaptureOptions = true;\n window.addEventListener(event, handler, dragdrop.eventCaptureOptions);\n }\n },\n\n /**\n * Gets X/Y co-ordinates of an event, which can be either touchstart or mousedown.\n *\n * @private\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @return {Object} X/Y co-ordinates\n */\n getEventXY: function(event) {\n switch (event.type) {\n case 'touchstart':\n return {x: event.changedTouches[0].pageX,\n y: event.changedTouches[0].pageY};\n case 'mousedown':\n return {x: event.pageX, y: event.pageY};\n default:\n throw new Error('Unexpected event type: ' + event.type);\n }\n },\n\n /**\n * Event handler for touch move.\n *\n * @private\n * @param {Object} e Event\n */\n touchMove: function(e) {\n e.preventDefault();\n for (var i = 0; i < e.changedTouches.length; i++) {\n if (e.changedTouches[i].identifier === dragdrop.touching) {\n dragdrop.handleMove(e.changedTouches[i].pageX, e.changedTouches[i].pageY);\n }\n }\n },\n\n /**\n * Event handler for mouse move.\n *\n * @private\n * @param {Object} e Event\n */\n mouseMove: function(e) {\n dragdrop.handleMove(e.pageX, e.pageY);\n },\n\n /**\n * Shared handler for move event (mouse or touch).\n *\n * @private\n * @param {number} pageX X co-ordinate\n * @param {number} pageY Y co-ordinate\n */\n handleMove: function(pageX, pageY) {\n // Move the drag proxy, not letting you move it out of screen or window bounds.\n var current = dragdrop.dragProxy.offset();\n var topOffset = current.top - parseInt(dragdrop.dragProxy.css('top'));\n var leftOffset = current.left - parseInt(dragdrop.dragProxy.css('left'));\n var maxY = $(document).height() - dragdrop.dragProxy.outerHeight() - topOffset;\n var maxX = $(document).width() - dragdrop.dragProxy.outerWidth() - leftOffset;\n var minY = -topOffset;\n var minX = -leftOffset;\n var initial = dragdrop.initialPosition;\n var position = {\n top: Math.max(minY, Math.min(maxY, initial.top + (pageY - dragdrop.initialY) - topOffset)),\n left: Math.max(minX, Math.min(maxX, initial.left + (pageX - dragdrop.initialX) - leftOffset))\n };\n dragdrop.dragProxy.css(position);\n\n // Trigger move handler.\n dragdrop.onMove(pageX, pageY, dragdrop.dragProxy);\n },\n\n /**\n * Event handler for touch end.\n *\n * @private\n * @param {Object} e Event\n */\n touchEnd: function(e) {\n e.preventDefault();\n for (var i = 0; i < e.changedTouches.length; i++) {\n if (e.changedTouches[i].identifier === dragdrop.touching) {\n dragdrop.handleEnd(e.changedTouches[i].pageX, e.changedTouches[i].pageY);\n }\n }\n },\n\n /**\n * Event handler for mouse up.\n *\n * @private\n * @param {Object} e Event\n */\n mouseUp: function(e) {\n dragdrop.handleEnd(e.pageX, e.pageY);\n },\n\n /**\n * Shared handler for end drag (mouse or touch).\n *\n * @private\n * @param {number} pageX X\n * @param {number} pageY Y\n */\n handleEnd: function(pageX, pageY) {\n if (dragdrop.touching !== null) {\n window.removeEventListener('touchend', dragdrop.touchEnd, dragdrop.eventCaptureOptions);\n window.removeEventListener('touchcancel', dragdrop.touchEnd, dragdrop.eventCaptureOptions);\n window.removeEventListener('touchmove', dragdrop.touchMove, dragdrop.eventCaptureOptions);\n dragdrop.touching = null;\n } else {\n window.removeEventListener('mousemove', dragdrop.mouseMove, dragdrop.eventCaptureOptions);\n window.removeEventListener('mouseup', dragdrop.mouseUp, dragdrop.eventCaptureOptions);\n }\n autoScroll.stop();\n dragdrop.onDrop(pageX, pageY, dragdrop.dragProxy);\n },\n\n /**\n * Called when the page scrolls.\n *\n * @private\n * @param {number} offset Amount of scroll\n */\n scroll: function(offset) {\n // Move the proxy to match.\n var maxY = $(document).height() - dragdrop.dragProxy.outerHeight();\n var currentPosition = dragdrop.dragProxy.offset();\n currentPosition.top = Math.min(maxY, currentPosition.top + offset);\n dragdrop.dragProxy.css(currentPosition);\n }\n };\n\n return {\n /**\n * Prepares to begin a drag operation - call with a mousedown or touchstart event.\n *\n * If the returned object has 'start' true, then you can set up a drag proxy, and call\n * start. This function will call preventDefault automatically regardless of whether\n * starting or not.\n *\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @return {Object} Object with start (boolean flag) and x, y (only if flag true) values\n */\n prepare: dragdrop.prepare,\n\n /**\n * Call to start a drag operation, in response to a mouse down or touch start event.\n * Normally call this after calling prepare and receiving start true (you can probably\n * skip prepare if only supporting drag not touch).\n *\n * Note: The caller is responsible for creating a 'drag proxy' which is the\n * thing that actually gets dragged. At present, this doesn't really work\n * properly unless it is added directly within the body tag.\n *\n * You also need to ensure that there is CSS so the proxy is absolutely positioned,\n * and styled to look like it is floating.\n *\n * You also need to absolutely position the proxy where you want it to start.\n *\n * @param {Object} event Event (should be either mousedown or touchstart)\n * @param {jQuery} dragProxy An absolute-positioned element for dragging\n * @param {Object} onMove Function that receives X and Y page locations for a move\n * @param {Object} onDrop Function that receives X and Y page locations when dropped\n */\n start: dragdrop.start\n };\n});\n"],"file":"dragdrop.min.js"} \ No newline at end of file diff --git a/lib/amd/build/drawer_events.min.js.map b/lib/amd/build/drawer_events.min.js.map index 39f9a81873a..8f8b7290fda 100644 --- a/lib/amd/build/drawer_events.min.js.map +++ b/lib/amd/build/drawer_events.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/drawer_events.js"],"names":["DRAWER_SHOWN","DRAWER_HIDDEN"],"mappings":"8IAuBe,CACXA,YAAY,CAAE,cADH,CAEXC,aAAa,CAAE,eAFJ,C","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 .\n\n/**\n * Events for the drawer.\n *\n * @module core/drawer_events\n * @package core\n * @copyright 2019 Jun Pataleta \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n DRAWER_SHOWN: 'drawer-shown',\n DRAWER_HIDDEN: 'drawer-hidden',\n};\n"],"file":"drawer_events.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/drawer_events.js"],"names":["DRAWER_SHOWN","DRAWER_HIDDEN"],"mappings":"8IAsBe,CACXA,YAAY,CAAE,cADH,CAEXC,aAAa,CAAE,eAFJ,C","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 .\n\n/**\n * Events for the drawer.\n *\n * @module core/drawer_events\n * @copyright 2019 Jun Pataleta \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nexport default {\n DRAWER_SHOWN: 'drawer-shown',\n DRAWER_HIDDEN: 'drawer-hidden',\n};\n"],"file":"drawer_events.min.js"} \ No newline at end of file diff --git a/lib/amd/build/event.min.js.map b/lib/amd/build/event.min.js.map index 38e1a2d518d..954fda0fa51 100644 --- a/lib/amd/build/event.min.js.map +++ b/lib/amd/build/event.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/event.js"],"names":["define","$","Y","Events","FORM_FIELD_VALIDATION","getLegacyEvents","result","Deferred","use","resolve","window","M","core","event","promise","notifyFilterContentUpdated","nodes","document","trigger","FILTER_CONTENT_UPDATED","yuiNodes","NodeList","get","fire","notifyFormSubmitAjax","form","skipValidation","skipClientValidation","FORM_SUBMIT_AJAX","one","currentTarget","notifyEditorContentRestored","EDITOR_CONTENT_RESTORED"],"mappings":"AAyBAA,OAAM,cAAC,CAAC,QAAD,CAAW,UAAX,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAAe,CAElB,MAAuC,CAKnCC,MAAM,CAAE,CACJC,qBAAqB,CAAE,4BADnB,CAL2B,CAenCC,eAAe,CAAE,0BAAW,CACxB,GAAIC,CAAAA,CAAM,CAAGL,CAAC,CAACM,QAAF,EAAb,CACAL,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,UAAW,CAC3CF,CAAM,CAACG,OAAP,CAAeC,MAAM,CAACC,CAAP,CAASC,IAAT,CAAcC,KAA7B,CACH,CAFD,EAGA,MAAOP,CAAAA,CAAM,CAACQ,OAAP,EACV,CArBkC,CA6BnCC,0BAA0B,CAAE,oCAASC,CAAT,CAAgB,CACxCA,CAAK,CAAGf,CAAC,CAACe,CAAD,CAAT,CACAd,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,SAASN,CAAT,CAAY,CAE5CD,CAAC,CAACgB,QAAD,CAAD,CAAYC,OAAZ,CAAoBP,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAaM,sBAAjC,CAAyD,CAACH,CAAD,CAAzD,EAGA,GAAII,CAAAA,CAAQ,CAAG,GAAIlB,CAAAA,CAAC,CAACmB,QAAN,CAAeL,CAAK,CAACM,GAAN,EAAf,CAAf,CAGApB,CAAC,CAACqB,IAAF,CAAOZ,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAaM,sBAApB,CAA4C,CAACH,KAAK,CAAEI,CAAR,CAA5C,CACH,CATD,CAUH,CAzCkC,CAkDnCI,oBAAoB,CAAE,8BAASC,CAAT,CAAeC,CAAf,CAA+B,CAGjDA,CAAc,CAAGA,CAAc,IAA/B,CAEAxB,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,SAASN,CAAT,CAAY,CAC5C,GAAIwB,CAAJ,CAAoB,CAChBhB,MAAM,CAACiB,oBAAP,GACH,CAED1B,CAAC,CAACwB,CAAD,CAAD,CAAQP,OAAR,CAAgBP,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAae,gBAA7B,EAGA1B,CAAC,CAAC2B,GAAF,CAAMJ,CAAN,EAAYF,IAAZ,CAAiBZ,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAae,gBAA9B,CAAgD,CAACE,aAAa,CAAE5B,CAAC,CAAC2B,GAAF,CAAMJ,CAAN,CAAhB,CAAhD,EAEA,GAAIC,CAAJ,CAAoB,CAChBhB,MAAM,CAACiB,oBAAP,GACH,CACJ,CAbD,CAcH,CArEkC,CA6EnCI,2BAA2B,CAAE,sCAAW,CACpC7B,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,SAASN,CAAT,CAAY,CAE5CD,CAAC,CAACgB,QAAD,CAAD,CAAYC,OAAZ,CAAoBP,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAamB,uBAAjC,EAGA9B,CAAC,CAACqB,IAAF,CAAOZ,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAamB,uBAApB,CACH,CAND,CAOH,CArFkC,CAuF1C,CA1FK,CAAN","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 .\n\n/**\n * Global registry of core events that can be triggered/listened for.\n *\n * @module core/event\n * @package core\n * @class event\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\ndefine(['jquery', 'core/yui'],\n function($, Y) {\n\n return /** @alias module:core/event */ {\n\n\n // Public variables and functions.\n // These are AMD only events - no backwards compatibility for new things.\n Events: {\n FORM_FIELD_VALIDATION: \"core_form-field-validation\"\n },\n\n /**\n * Load the legacy YUI module which defines events in M.core.event and return it.\n *\n * @method getLegacyEvents\n * @return {Promise}\n */\n getLegacyEvents: function() {\n var result = $.Deferred();\n Y.use('event', 'moodle-core-event', function() {\n result.resolve(window.M.core.event);\n });\n return result.promise();\n },\n\n /**\n * Trigger an event using both JQuery and YUI\n *\n * @method notifyFilterContentUpdated\n * @param {string|JQuery} nodes - Selector or list of elements that were inserted.\n */\n notifyFilterContentUpdated: function(nodes) {\n nodes = $(nodes);\n Y.use('event', 'moodle-core-event', function(Y) {\n // Trigger it the JQuery way.\n $(document).trigger(M.core.event.FILTER_CONTENT_UPDATED, [nodes]);\n\n // Create a YUI NodeList from our JQuery Object.\n var yuiNodes = new Y.NodeList(nodes.get());\n\n // And again for YUI.\n Y.fire(M.core.event.FILTER_CONTENT_UPDATED, {nodes: yuiNodes});\n });\n },\n\n /**\n * Trigger an event using both JQuery and YUI\n *\n * @method notifyFormSubmittedAjax\n * @param {DOMElement} form\n * @param {boolean} skipValidation Submit the form without validation. E.g. \"Cancel\".\n */\n notifyFormSubmitAjax: function(form, skipValidation) {\n\n // Argument is optional.\n skipValidation = skipValidation || false;\n\n Y.use('event', 'moodle-core-event', function(Y) {\n if (skipValidation) {\n window.skipClientValidation = true;\n }\n // Trigger it the JQuery way.\n $(form).trigger(M.core.event.FORM_SUBMIT_AJAX);\n\n // And again for YUI.\n Y.one(form).fire(M.core.event.FORM_SUBMIT_AJAX, {currentTarget: Y.one(form)});\n\n if (skipValidation) {\n window.skipClientValidation = false;\n }\n });\n },\n\n /**\n * Trigger an event using both JQuery and YUI\n * This event alerts the world that the editor has restored some content.\n *\n * @method notifyEditorContentRestored\n */\n notifyEditorContentRestored: function() {\n Y.use('event', 'moodle-core-event', function(Y) {\n // Trigger it the JQuery way.\n $(document).trigger(M.core.event.EDITOR_CONTENT_RESTORED);\n\n // And again for YUI.\n Y.fire(M.core.event.EDITOR_CONTENT_RESTORED);\n });\n },\n };\n});\n"],"file":"event.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/event.js"],"names":["define","$","Y","Events","FORM_FIELD_VALIDATION","getLegacyEvents","result","Deferred","use","resolve","window","M","core","event","promise","notifyFilterContentUpdated","nodes","document","trigger","FILTER_CONTENT_UPDATED","yuiNodes","NodeList","get","fire","notifyFormSubmitAjax","form","skipValidation","skipClientValidation","FORM_SUBMIT_AJAX","one","currentTarget","notifyEditorContentRestored","EDITOR_CONTENT_RESTORED"],"mappings":"AAwBAA,OAAM,cAAC,CAAC,QAAD,CAAW,UAAX,CAAD,CACC,SAASC,CAAT,CAAYC,CAAZ,CAAe,CAElB,MAAuC,CAKnCC,MAAM,CAAE,CACJC,qBAAqB,CAAE,4BADnB,CAL2B,CAenCC,eAAe,CAAE,0BAAW,CACxB,GAAIC,CAAAA,CAAM,CAAGL,CAAC,CAACM,QAAF,EAAb,CACAL,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,UAAW,CAC3CF,CAAM,CAACG,OAAP,CAAeC,MAAM,CAACC,CAAP,CAASC,IAAT,CAAcC,KAA7B,CACH,CAFD,EAGA,MAAOP,CAAAA,CAAM,CAACQ,OAAP,EACV,CArBkC,CA6BnCC,0BAA0B,CAAE,oCAASC,CAAT,CAAgB,CACxCA,CAAK,CAAGf,CAAC,CAACe,CAAD,CAAT,CACAd,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,SAASN,CAAT,CAAY,CAE5CD,CAAC,CAACgB,QAAD,CAAD,CAAYC,OAAZ,CAAoBP,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAaM,sBAAjC,CAAyD,CAACH,CAAD,CAAzD,EAGA,GAAII,CAAAA,CAAQ,CAAG,GAAIlB,CAAAA,CAAC,CAACmB,QAAN,CAAeL,CAAK,CAACM,GAAN,EAAf,CAAf,CAGApB,CAAC,CAACqB,IAAF,CAAOZ,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAaM,sBAApB,CAA4C,CAACH,KAAK,CAAEI,CAAR,CAA5C,CACH,CATD,CAUH,CAzCkC,CAkDnCI,oBAAoB,CAAE,8BAASC,CAAT,CAAeC,CAAf,CAA+B,CAGjDA,CAAc,CAAGA,CAAc,IAA/B,CAEAxB,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,SAASN,CAAT,CAAY,CAC5C,GAAIwB,CAAJ,CAAoB,CAChBhB,MAAM,CAACiB,oBAAP,GACH,CAED1B,CAAC,CAACwB,CAAD,CAAD,CAAQP,OAAR,CAAgBP,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAae,gBAA7B,EAGA1B,CAAC,CAAC2B,GAAF,CAAMJ,CAAN,EAAYF,IAAZ,CAAiBZ,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAae,gBAA9B,CAAgD,CAACE,aAAa,CAAE5B,CAAC,CAAC2B,GAAF,CAAMJ,CAAN,CAAhB,CAAhD,EAEA,GAAIC,CAAJ,CAAoB,CAChBhB,MAAM,CAACiB,oBAAP,GACH,CACJ,CAbD,CAcH,CArEkC,CA6EnCI,2BAA2B,CAAE,sCAAW,CACpC7B,CAAC,CAACM,GAAF,CAAM,OAAN,CAAe,mBAAf,CAAoC,SAASN,CAAT,CAAY,CAE5CD,CAAC,CAACgB,QAAD,CAAD,CAAYC,OAAZ,CAAoBP,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAamB,uBAAjC,EAGA9B,CAAC,CAACqB,IAAF,CAAOZ,CAAC,CAACC,IAAF,CAAOC,KAAP,CAAamB,uBAApB,CACH,CAND,CAOH,CArFkC,CAuF1C,CA1FK,CAAN","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 .\n\n/**\n * Global registry of core events that can be triggered/listened for.\n *\n * @module core/event\n * @class event\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\ndefine(['jquery', 'core/yui'],\n function($, Y) {\n\n return /** @alias module:core/event */ {\n\n\n // Public variables and functions.\n // These are AMD only events - no backwards compatibility for new things.\n Events: {\n FORM_FIELD_VALIDATION: \"core_form-field-validation\"\n },\n\n /**\n * Load the legacy YUI module which defines events in M.core.event and return it.\n *\n * @method getLegacyEvents\n * @return {Promise}\n */\n getLegacyEvents: function() {\n var result = $.Deferred();\n Y.use('event', 'moodle-core-event', function() {\n result.resolve(window.M.core.event);\n });\n return result.promise();\n },\n\n /**\n * Trigger an event using both JQuery and YUI\n *\n * @method notifyFilterContentUpdated\n * @param {string|JQuery} nodes - Selector or list of elements that were inserted.\n */\n notifyFilterContentUpdated: function(nodes) {\n nodes = $(nodes);\n Y.use('event', 'moodle-core-event', function(Y) {\n // Trigger it the JQuery way.\n $(document).trigger(M.core.event.FILTER_CONTENT_UPDATED, [nodes]);\n\n // Create a YUI NodeList from our JQuery Object.\n var yuiNodes = new Y.NodeList(nodes.get());\n\n // And again for YUI.\n Y.fire(M.core.event.FILTER_CONTENT_UPDATED, {nodes: yuiNodes});\n });\n },\n\n /**\n * Trigger an event using both JQuery and YUI\n *\n * @method notifyFormSubmittedAjax\n * @param {DOMElement} form\n * @param {boolean} skipValidation Submit the form without validation. E.g. \"Cancel\".\n */\n notifyFormSubmitAjax: function(form, skipValidation) {\n\n // Argument is optional.\n skipValidation = skipValidation || false;\n\n Y.use('event', 'moodle-core-event', function(Y) {\n if (skipValidation) {\n window.skipClientValidation = true;\n }\n // Trigger it the JQuery way.\n $(form).trigger(M.core.event.FORM_SUBMIT_AJAX);\n\n // And again for YUI.\n Y.one(form).fire(M.core.event.FORM_SUBMIT_AJAX, {currentTarget: Y.one(form)});\n\n if (skipValidation) {\n window.skipClientValidation = false;\n }\n });\n },\n\n /**\n * Trigger an event using both JQuery and YUI\n * This event alerts the world that the editor has restored some content.\n *\n * @method notifyEditorContentRestored\n */\n notifyEditorContentRestored: function() {\n Y.use('event', 'moodle-core-event', function(Y) {\n // Trigger it the JQuery way.\n $(document).trigger(M.core.event.EDITOR_CONTENT_RESTORED);\n\n // And again for YUI.\n Y.fire(M.core.event.EDITOR_CONTENT_RESTORED);\n });\n },\n };\n});\n"],"file":"event.min.js"} \ No newline at end of file diff --git a/lib/amd/build/first.min.js.map b/lib/amd/build/first.min.js.map index 97014b6fa2a..aea32c1b249 100644 --- a/lib/amd/build/first.min.js.map +++ b/lib/amd/build/first.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/first.js"],"names":["define","$","document","bind","M","util","js_pending","js_complete"],"mappings":"AA6BAA,OAAM,cAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAC3BA,CAAC,CAACC,QAAD,CAAD,CAAYC,IAAZ,CAAiB,WAAjB,CAA8B,UAAW,CACrCC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,IAAlB,CACH,CAFD,EAEGH,IAFH,CAEQ,UAFR,CAEoB,UAAW,CAC3BC,CAAC,CAACC,IAAF,CAAOE,WAAP,CAAmB,IAAnB,CACH,CAJD,CAKH,CANK,CAAN","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 .\n\n/**\n * This is an empty module, that is required before all other modules.\n * Because every module is returned from a request for any other module, this\n * forces the loading of all modules with a single request.\n *\n * This function also sets up the listeners for ajax requests so we can tell\n * if any requests are still in progress.\n *\n * @module core/first\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(['jquery'], function($) {\n $(document).bind(\"ajaxStart\", function() {\n M.util.js_pending('jq');\n }).bind(\"ajaxStop\", function() {\n M.util.js_complete('jq');\n });\n});\n"],"file":"first.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/first.js"],"names":["define","$","document","bind","M","util","js_pending","js_complete"],"mappings":"AA4BAA,OAAM,cAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAC3BA,CAAC,CAACC,QAAD,CAAD,CAAYC,IAAZ,CAAiB,WAAjB,CAA8B,UAAW,CACrCC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,IAAlB,CACH,CAFD,EAEGH,IAFH,CAEQ,UAFR,CAEoB,UAAW,CAC3BC,CAAC,CAACC,IAAF,CAAOE,WAAP,CAAmB,IAAnB,CACH,CAJD,CAKH,CANK,CAAN","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 .\n\n/**\n * This is an empty module, that is required before all other modules.\n * Because every module is returned from a request for any other module, this\n * forces the loading of all modules with a single request.\n *\n * This function also sets up the listeners for ajax requests so we can tell\n * if any requests are still in progress.\n *\n * @module core/first\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(['jquery'], function($) {\n $(document).bind(\"ajaxStart\", function() {\n M.util.js_pending('jq');\n }).bind(\"ajaxStop\", function() {\n M.util.js_complete('jq');\n });\n});\n"],"file":"first.min.js"} \ No newline at end of file diff --git a/lib/amd/build/form-autocomplete.min.js.map b/lib/amd/build/form-autocomplete.min.js.map index 55950cf4395..03c7efc3890 100644 --- a/lib/amd/build/form-autocomplete.min.js.map +++ b/lib/amd/build/form-autocomplete.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/form-autocomplete.js"],"names":["define","$","log","str","templates","notification","LoadingIcon","Aria","KEYS","DOWN","ENTER","SPACE","ESCAPE","COMMA","UP","LEFT","RIGHT","uniqueId","Date","now","activateSelection","index","state","selectionElement","document","getElementById","selectionId","length","children","element","get","itemId","attr","Deferred","resolve","getActiveElementFromState","selectionRegion","activeId","activeElement","activeValue","find","updateActiveSelectionFromState","activeIndex","updateSelectionList","options","originalSelect","pendingKey","inputId","M","util","js_pending","items","newSelection","each","ele","prop","label","data","html","push","value","hasItemListChanged","js_complete","Promise","context","extend","render","then","js","replaceNodeContents","catch","exception","filter","item","indexOf","notifyChange","core_formchangechecker","set_form_changed","dispatchEvent","Event","deselectItem","selectedItemValue","remove","activateItem","inputElement","suggestionsElement","suggestionsId","globalIndex","scrollPos","offset","top","scrollTop","height","animate","promise","activateNextItem","current","activatePreviousSelection","selectionsElement","activateNextSelection","activatePreviousItem","closeSuggestions","hide","updateSuggestions","query","matchingElements","suggestions","option","innerHTML","searchquery","caseSensitive","toLocaleLowerCase","returnVal","replaceNode","unhide","show","node","text","tags","get_string","done","nosuggestionsstr","createItem","val","split","found","tagindex","tag","trim","multiple","append","createTextNode","selectCurrentItem","closeSuggestionsOnSelect","focus","updateAjax","e","ajaxHandler","pendingPromise","addPendingJSPromise","parentElement","selectId","parent","addIconToContainerRemoveOnCompletion","currentTarget","transport","selector","results","processedResults","processResults","existingValues","optionIndex","isArray","resultIndex","result","error","reject","addNavigation","on","pendingJsPromise","keyCode","showSuggestions","ajax","require","preventDefault","closest","window","setTimeout","focusElement","timeoutPromise","is","arrowElement","downArrowId","off","selectedItem","throttleTimeout","inProgress","handler","arguments","throttledHandler","clearTimeout","bind","last","key","enhance","placeholder","noSelectionString","templateOverrides","input","layout","selection","fail","debug","css","prepend","originalLabel","collectedjs","renderLayout","renderInput","renderDatalist","renderSelection","when","container","replaceWith","runTemplateJS"],"mappings":"AA0BAA,OAAM,0BACF,CAAC,QAAD,CAAW,UAAX,CAAuB,UAAvB,CAAmC,gBAAnC,CAAqD,mBAArD,CAA0E,kBAA1E,CAA8F,WAA9F,CADE,CAEN,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAAsBC,CAAtB,CAAiCC,CAAjC,CAA+CC,CAA/C,CAA4DC,CAA5D,CAAkE,IAI1DC,CAAAA,CAAI,CAAG,CACPC,IAAI,CAAE,EADC,CAEPC,KAAK,CAAE,EAFA,CAGPC,KAAK,CAAE,EAHA,CAIPC,MAAM,CAAE,EAJD,CAKPC,KAAK,CAAE,EALA,CAMPC,EAAE,CAAE,EANG,CAOPC,IAAI,CAAE,EAPC,CAQPC,KAAK,CAAE,EARA,CAJmD,CAe1DC,CAAQ,CAAGC,IAAI,CAACC,GAAL,EAf+C,CA0B1DC,CAAiB,CAAG,SAASC,CAAT,CAAgBC,CAAhB,CAAuB,IAEvCC,CAAAA,CAAgB,CAAGtB,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAFmB,CAKvCC,CAAM,CAAGJ,CAAgB,CAACK,QAAjB,CAA0B,sBAA1B,EAAkDD,MALpB,CAO3CN,CAAK,CAAGA,CAAK,CAAGM,CAAhB,CACA,MAAe,CAAR,CAAAN,CAAP,CAAkB,CACdA,CAAK,EAAIM,CACZ,CAV0C,GAYvCE,CAAAA,CAAO,CAAG5B,CAAC,CAACsB,CAAgB,CAACK,QAAjB,CAA0B,sBAA1B,EAAkDE,GAAlD,CAAsDT,CAAtD,CAAD,CAZ4B,CAcvCU,CAAM,CAAGT,CAAK,CAACI,WAAN,CAAoB,GAApB,CAA0BL,CAdI,CAiB3CE,CAAgB,CAACK,QAAjB,GAA4BI,IAA5B,CAAiC,uBAAjC,CAA0D,IAA1D,EAAgEA,IAAhE,CAAqE,IAArE,CAA2E,EAA3E,EAGAH,CAAO,CAACG,IAAR,CAAa,uBAAb,KAA4CA,IAA5C,CAAiD,IAAjD,CAAuDD,CAAvD,EAGAR,CAAgB,CAACS,IAAjB,CAAsB,uBAAtB,CAA+CD,CAA/C,EACAR,CAAgB,CAACS,IAAjB,CAAsB,mBAAtB,CAA2CH,CAAO,CAACG,IAAR,CAAa,YAAb,CAA3C,EAEA,MAAO/B,CAAAA,CAAC,CAACgC,QAAF,GAAaC,OAAb,EACV,CArD6D,CA6D1DC,CAAyB,CAAG,SAASb,CAAT,CAAgB,IACxCc,CAAAA,CAAe,CAAGnC,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CADqB,CAExCW,CAAQ,CAAGD,CAAe,CAACJ,IAAhB,CAAqB,uBAArB,CAF6B,CAI5C,GAAIK,CAAJ,CAAc,CACV,GAAIC,CAAAA,CAAa,CAAGrC,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBY,CAAxB,CAAD,CAArB,CACA,GAAIC,CAAa,CAACX,MAAlB,CAA0B,CAEtB,MAAOW,CAAAA,CACV,CACJ,CAED,GAAIC,CAAAA,CAAW,CAAGH,CAAe,CAACJ,IAAhB,CAAqB,mBAArB,CAAlB,CACA,MAAOI,CAAAA,CAAe,CAACI,IAAhB,CAAqB,iBAAkBD,CAAlB,CAAgC,KAArD,CACV,CA3E6D,CAkF1DE,CAA8B,CAAG,SAASnB,CAAT,CAAgB,IAC7CgB,CAAAA,CAAa,CAAGH,CAAyB,CAACb,CAAD,CADI,CAE7CiB,CAAW,CAAGD,CAAa,CAACN,IAAd,CAAmB,YAAnB,CAF+B,CAI7CI,CAAe,CAAGnC,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAJ0B,CAKjD,GAAIa,CAAJ,CAAiB,CAEb,GAAIG,CAAAA,CAAW,CAAGN,CAAe,CAACI,IAAhB,CAAqB,sBAArB,EAA6CnB,KAA7C,CAAmDiB,CAAnD,CAAlB,CAEA,GAAoB,CAAC,CAAjB,GAAAI,CAAJ,CAAwB,CACpBtB,CAAiB,CAACsB,CAAD,CAAcpB,CAAd,CAAjB,CACA,MACH,CACJ,CAIDF,CAAiB,CAAC,CAAD,CAAIE,CAAJ,CACpB,CApG6D,CAgH1DqB,CAAmB,CAAG,SAASC,CAAT,CAAkBtB,CAAlB,CAAyBuB,CAAzB,CAAyC,CAC/D,GAAIC,CAAAA,CAAU,CAAG,yCAA2CxB,CAAK,CAACyB,OAAlE,CACAC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkBJ,CAAlB,EAF+D,GAK3DK,CAAAA,CAAK,CAAG,EALmD,CAM3DC,CAAY,CAAGnD,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAN2C,CAO/DmB,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAAShC,CAAT,CAAgBiC,CAAhB,CAAqB,CACxD,GAAIrD,CAAC,CAACqD,CAAD,CAAD,CAAOC,IAAP,CAAY,UAAZ,CAAJ,CAA6B,CACzB,GAAIC,CAAAA,CAAJ,CACA,GAAIvD,CAAC,CAACqD,CAAD,CAAD,CAAOG,IAAP,CAAY,MAAZ,CAAJ,CAAyB,CACrBD,CAAK,CAAGvD,CAAC,CAACqD,CAAD,CAAD,CAAOG,IAAP,CAAY,MAAZ,CACX,CAFD,IAEO,CACHD,CAAK,CAAGvD,CAAC,CAACqD,CAAD,CAAD,CAAOI,IAAP,EACX,CACD,GAAc,EAAV,GAAAF,CAAJ,CAAkB,CACdL,CAAK,CAACQ,IAAN,CAAW,CAACH,KAAK,CAAEA,CAAR,CAAeI,KAAK,CAAE3D,CAAC,CAACqD,CAAD,CAAD,CAAOtB,IAAP,CAAY,OAAZ,CAAtB,CAAX,CACH,CACJ,CACJ,CAZD,EAcA,GAAI,CAAC6B,CAAkB,CAACvC,CAAD,CAAQ6B,CAAR,CAAvB,CAAuC,CACnCH,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,EACA,MAAOiB,CAAAA,OAAO,CAAC7B,OAAR,EACV,CAEDZ,CAAK,CAAC6B,KAAN,CAAcA,CAAd,CAEA,GAAIa,CAAAA,CAAO,CAAG/D,CAAC,CAACgE,MAAF,CAASrB,CAAT,CAAkBtB,CAAlB,CAAd,CAEA,MAAOlB,CAAAA,CAAS,CAAC8D,MAAV,CAAiBtB,CAAO,CAACxC,SAAR,CAAkB+C,KAAnC,CAA0Ca,CAA1C,EACNG,IADM,CACD,SAAST,CAAT,CAAeU,CAAf,CAAmB,CAErBhE,CAAS,CAACiE,mBAAV,CAA8BjB,CAA9B,CAA4CM,CAA5C,CAAkDU,CAAlD,EAEA3B,CAA8B,CAACnB,CAAD,CAGjC,CARM,EASN6C,IATM,CASD,UAAW,CACb,MAAOnB,CAAAA,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,CACV,CAXM,EAYNwB,KAZM,CAYAjE,CAAY,CAACkE,SAZb,CAaV,CA3J6D,CAmK1DV,CAAkB,CAAG,SAASvC,CAAT,CAAgB6B,CAAhB,CAAuB,CAC5C,GAAI7B,CAAK,CAAC6B,KAAN,CAAYxB,MAAZ,GAAuBwB,CAAK,CAACxB,MAAjC,CAAyC,CACrC,QACH,CAGD,MAAuE,EAAhE,CAAAL,CAAK,CAAC6B,KAAN,CAAYqB,MAAZ,CAAmB,SAAAC,CAAI,QAA4B,CAAC,CAAzB,GAAAtB,CAAK,CAACuB,OAAN,CAAcD,CAAd,CAAJ,CAAvB,EAAuD9C,MACjE,CA1K6D,CAiL1DgD,CAAY,CAAG,SAAS9B,CAAT,CAAyB,CACxC,GAAwC,WAApC,QAAOG,CAAAA,CAAC,CAAC4B,sBAAb,CAAqD,CACjD5B,CAAC,CAAC4B,sBAAF,CAAyBC,gBAAzB,EACH,CAIDhC,CAAc,CAAC,CAAD,CAAd,CAAkBiC,aAAlB,CAAgC,GAAIC,CAAAA,KAAJ,CAAU,QAAV,CAAhC,CACH,CAzL6D,CAsM1DC,CAAY,CAAG,SAASpC,CAAT,CAAkBtB,CAAlB,CAAyBmD,CAAzB,CAA+B5B,CAA/B,CAA+C,CAC9D,GAAIoC,CAAAA,CAAiB,CAAGhF,CAAC,CAACwE,CAAD,CAAD,CAAQzC,IAAR,CAAa,YAAb,CAAxB,CAGAa,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAAShC,CAAT,CAAgBiC,CAAhB,CAAqB,CACxD,GAAIrD,CAAC,CAACqD,CAAD,CAAD,CAAOtB,IAAP,CAAY,OAAZ,GAAwBiD,CAA5B,CAA+C,CAC3ChF,CAAC,CAACqD,CAAD,CAAD,CAAOC,IAAP,CAAY,UAAZ,KAEA,GAAItD,CAAC,CAACqD,CAAD,CAAD,CAAOtB,IAAP,CAAY,eAAZ,CAAJ,CAAkC,CAC9B/B,CAAC,CAACqD,CAAD,CAAD,CAAO4B,MAAP,EACH,CACJ,CACJ,CARD,EAUA,MAAOvC,CAAAA,CAAmB,CAACC,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAAnB,CACNsB,IADM,CACD,UAAW,CAEbQ,CAAY,CAAC9B,CAAD,CAGf,CANM,CAOV,CA3N6D,CAsO1DsC,CAAY,CAAG,SAAS9D,CAAT,CAAgBC,CAAhB,CAAuB,IAElC8D,CAAAA,CAAY,CAAGnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CAFkB,CAGlCsC,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAHY,CAMlC3D,CAAM,CAAG0D,CAAkB,CAACzD,QAAnB,CAA4B,qBAA5B,EAAmDD,MAN1B,CAQtCN,CAAK,CAAGA,CAAK,CAAGM,CAAhB,CACA,MAAe,CAAR,CAAAN,CAAP,CAAkB,CACdA,CAAK,EAAIM,CACZ,CAXqC,GAalCE,CAAAA,CAAO,CAAG5B,CAAC,CAACoF,CAAkB,CAACzD,QAAnB,CAA4B,qBAA5B,EAAmDE,GAAnD,CAAuDT,CAAvD,CAAD,CAbuB,CAelCkE,CAAW,CAAGtF,CAAC,CAACoF,CAAkB,CAACzD,QAAnB,CAA4B,eAA5B,CAAD,CAAD,CAAgDP,KAAhD,CAAsDQ,CAAtD,CAfoB,CAiBlCE,CAAM,CAAGT,CAAK,CAACgE,aAAN,CAAsB,GAAtB,CAA4BC,CAjBH,CAoBtCF,CAAkB,CAACzD,QAAnB,GAA8BI,IAA9B,CAAmC,eAAnC,KAA2DA,IAA3D,CAAgE,IAAhE,CAAsE,EAAtE,EAEAH,CAAO,CAACG,IAAR,CAAa,eAAb,KAAoCA,IAApC,CAAyC,IAAzC,CAA+CD,CAA/C,EAEAqD,CAAY,CAACpD,IAAb,CAAkB,uBAAlB,CAA2CD,CAA3C,EAGA,GAAIyD,CAAAA,CAAS,CAAG3D,CAAO,CAAC4D,MAAR,GAAiBC,GAAjB,CACCL,CAAkB,CAACI,MAAnB,GAA4BC,GAD7B,CAECL,CAAkB,CAACM,SAAnB,EAFD,CAGEN,CAAkB,CAACO,MAAnB,GAA8B,CAHhD,CAIA,MAAOP,CAAAA,CAAkB,CAACQ,OAAnB,CAA2B,CAC9BF,SAAS,CAAEH,CADmB,CAA3B,CAEJ,GAFI,EAECM,OAFD,EAGV,CAxQ6D,CAkR1DC,CAAgB,CAAG,SAASzE,CAAT,CAAgB,IAE/B+D,CAAAA,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAFS,CAI/BzD,CAAO,CAAGwD,CAAkB,CAACzD,QAAnB,CAA4B,sBAA5B,CAJqB,CAM/BoE,CAAO,CAAGX,CAAkB,CAACzD,QAAnB,CAA4B,qBAA5B,EAAmDP,KAAnD,CAAyDQ,CAAzD,CANqB,CAQnC,MAAOsD,CAAAA,CAAY,CAACa,CAAO,CAAG,CAAX,CAAc1E,CAAd,CACtB,CA3R6D,CAqS1D2E,CAAyB,CAAG,SAAS3E,CAAT,CAAgB,IAExC4E,CAAAA,CAAiB,CAAGjG,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAFmB,CAIxCG,CAAO,CAAGqE,CAAiB,CAACtE,QAAlB,CAA2B,yBAA3B,CAJ8B,CAK5C,GAAI,CAACC,CAAL,CAAc,CACV,MAAOT,CAAAA,CAAiB,CAAC,CAAD,CAAIE,CAAJ,CAC3B,CAED,GAAI0E,CAAAA,CAAO,CAAGE,CAAiB,CAACtE,QAAlB,CAA2B,sBAA3B,EAAmDP,KAAnD,CAAyDQ,CAAzD,CAAd,CAEA,MAAOT,CAAAA,CAAiB,CAAC4E,CAAO,CAAG,CAAX,CAAc1E,CAAd,CAC3B,CAjT6D,CA2T1D6E,CAAqB,CAAG,SAAS7E,CAAT,CAAgB,IAEpC4E,CAAAA,CAAiB,CAAGjG,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAFe,CAKpCG,CAAO,CAAGqE,CAAiB,CAACtE,QAAlB,CAA2B,yBAA3B,CAL0B,CAMpCoE,CAAO,CAAG,CAN0B,CAQxC,GAAInE,CAAJ,CAAa,CAETmE,CAAO,CAAGE,CAAiB,CAACtE,QAAlB,CAA2B,sBAA3B,EAAmDP,KAAnD,CAAyDQ,CAAzD,CAAV,CACAmE,CAAO,CAAGA,CAAO,CAAG,CACvB,CAJD,IAIO,CAEHA,CAAO,CAAG,CACb,CAED,MAAO5E,CAAAA,CAAiB,CAAC4E,CAAD,CAAU1E,CAAV,CAC3B,CA7U6D,CAuV1D8E,CAAoB,CAAG,SAAS9E,CAAT,CAAgB,IAEnC+D,CAAAA,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAFa,CAKnCzD,CAAO,CAAGwD,CAAkB,CAACzD,QAAnB,CAA4B,sBAA5B,CALyB,CAQnCoE,CAAO,CAAGX,CAAkB,CAACzD,QAAnB,CAA4B,qBAA5B,EAAmDP,KAAnD,CAAyDQ,CAAzD,CARyB,CAWvC,MAAOsD,CAAAA,CAAY,CAACa,CAAO,CAAG,CAAX,CAAc1E,CAAd,CACtB,CAnW6D,CA6W1D+E,CAAgB,CAAG,SAAS/E,CAAT,CAAgB,IAE/B8D,CAAAA,CAAY,CAAGnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CAFe,CAG/BsC,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAHS,CAKnC,GAA2C,MAAvC,GAAAF,CAAY,CAACpD,IAAb,CAAkB,eAAlB,CAAJ,CAAmD,CAE/CoD,CAAY,CAACpD,IAAb,CAAkB,eAAlB,IACH,CAEDoD,CAAY,CAACpD,IAAb,CAAkB,uBAAlB,CAA2CV,CAAK,CAACI,WAAjD,EAGAnB,CAAI,CAAC+F,IAAL,CAAUjB,CAAkB,CAACvD,GAAnB,EAAV,EACAuD,CAAkB,CAACiB,IAAnB,GAEA,MAAOrG,CAAAA,CAAC,CAACgC,QAAF,GAAaC,OAAb,EACV,CA9X6D,CA2Y1DqE,CAAiB,CAAG,SAAS3D,CAAT,CAAkBtB,CAAlB,CAAyBkF,CAAzB,CAAgC3D,CAAhC,CAAgD,CACpE,GAAIC,CAAAA,CAAU,CAAG,uCAAyCxB,CAAK,CAACyB,OAAhE,CACAC,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkBJ,CAAlB,EAFoE,GAKhEsC,CAAAA,CAAY,CAAGnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CALgD,CAMhEsC,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAN0C,CAShEmB,CAAgB,GATgD,CAWhEC,CAAW,CAAG,EAXkD,CAYpE7D,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAAShC,CAAT,CAAgBsF,CAAhB,CAAwB,CAC3D,GAAI,KAAA1G,CAAC,CAAC0G,CAAD,CAAD,CAAUpD,IAAV,CAAe,UAAf,CAAJ,CAAyC,CACrCmD,CAAW,CAACA,CAAW,CAAC/E,MAAb,CAAX,CAAkC,CAAC6B,KAAK,CAAEmD,CAAM,CAACC,SAAf,CAA0BhD,KAAK,CAAE3D,CAAC,CAAC0G,CAAD,CAAD,CAAU3E,IAAV,CAAe,OAAf,CAAjC,CACrC,CACJ,CAJD,EAZoE,GAmBhE6E,CAAAA,CAAW,CAAGvF,CAAK,CAACwF,aAAN,CAAsBN,CAAtB,CAA8BA,CAAK,CAACO,iBAAN,EAnBoB,CAoBhE/C,CAAO,CAAG/D,CAAC,CAACgE,MAAF,CAAS,CAACrB,OAAO,CAAE8D,CAAV,CAAT,CAAiC9D,CAAjC,CAA0CtB,CAA1C,CApBsD,CAqBhE0F,CAAS,CAAG5G,CAAS,CAAC8D,MAAV,CACZ,oCADY,CAEZF,CAFY,EAIfG,IAJe,CAIV,SAAST,CAAT,CAAeU,CAAf,CAAmB,CAErBhE,CAAS,CAAC6G,WAAV,CAAsB5B,CAAtB,CAA0C3B,CAA1C,CAAgDU,CAAhD,EAGAiB,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAAtB,CAGA/E,CAAI,CAAC2G,MAAL,CAAY7B,CAAkB,CAACvD,GAAnB,EAAZ,EACAuD,CAAkB,CAAC8B,IAAnB,GAGA9B,CAAkB,CAACzD,QAAnB,GAA8ByB,IAA9B,CAAmC,SAAShC,CAAT,CAAgB+F,CAAhB,CAAsB,CACrDA,CAAI,CAAGnH,CAAC,CAACmH,CAAD,CAAR,CACA,GAAKxE,CAAO,CAACkE,aAAR,EAA4D,CAAC,CAApC,CAAAM,CAAI,CAACC,IAAL,GAAY3C,OAAZ,CAAoBmC,CAApB,CAA1B,EACK,CAACjE,CAAO,CAACkE,aAAT,EAAiF,CAAC,CAAxD,CAAAM,CAAI,CAACC,IAAL,GAAYN,iBAAZ,GAAgCrC,OAAhC,CAAwCmC,CAAxC,CADnC,CAC+F,CAC3FtG,CAAI,CAAC2G,MAAL,CAAYE,CAAI,CAACtF,GAAL,EAAZ,EACAsF,CAAI,CAACD,IAAL,GACAV,CAAgB,GACnB,CALD,IAKO,CACHW,CAAI,CAACd,IAAL,GACA/F,CAAI,CAAC+F,IAAL,CAAUc,CAAI,CAACtF,GAAL,EAAV,CACH,CACJ,CAXD,EAaAsD,CAAY,CAACpD,IAAb,CAAkB,eAAlB,KACA,GAAIa,CAAc,CAACb,IAAf,CAAoB,aAApB,CAAJ,CAAwC,CAEpCqD,CAAkB,CAAC3B,IAAnB,CAAwBb,CAAc,CAACb,IAAf,CAAoB,aAApB,CAAxB,CACH,CAHD,IAGO,IAAIyE,CAAJ,CAAsB,CAIzB,GAAI,CAAC7D,CAAO,CAAC0E,IAAb,CAAmB,CACfnC,CAAY,CAAC,CAAD,CAAI7D,CAAJ,CACf,CACJ,CAPM,IAOA,CAEHnB,CAAG,CAACoH,UAAJ,CAAe,eAAf,CAAgC,MAAhC,EAAwCC,IAAxC,CAA6C,SAASC,CAAT,CAA2B,CACpEpC,CAAkB,CAAC3B,IAAnB,CAAwB+D,CAAxB,CACH,CAFD,CAGH,CAED,MAAOpC,CAAAA,CACV,CAhDe,EAiDflB,IAjDe,CAiDV,UAAW,CACb,MAAOnB,CAAAA,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,CACV,CAnDe,EAoDfwB,KApDe,CAoDTjE,CAAY,CAACkE,SApDJ,CArBoD,CA2EpE,MAAOyC,CAAAA,CACV,CAvd6D,CAme1DU,CAAU,CAAG,SAAS9E,CAAT,CAAkBtB,CAAlB,CAAyBuB,CAAzB,CAAyC,IAElDuC,CAAAA,CAAY,CAAGnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CAFkC,CAIlDyD,CAAK,CAAGpB,CAAY,CAACuC,GAAb,EAJ0C,CAKlDL,CAAI,CAAGd,CAAK,CAACoB,KAAN,CAAY,GAAZ,CAL2C,CAMlDC,CAAK,GAN6C,CAQtD5H,CAAC,CAACoD,IAAF,CAAOiE,CAAP,CAAa,SAASQ,CAAT,CAAmBC,CAAnB,CAAwB,CAEjCA,CAAG,CAAGA,CAAG,CAACC,IAAJ,EAAN,CACA,GAAY,EAAR,GAAAD,CAAJ,CAAgB,CACZ,GAAI,CAACnF,CAAO,CAACqF,QAAb,CAAuB,CACnBpF,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkC2B,IAAlC,CAAuC,UAAvC,IACH,CAEDV,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAAShC,CAAT,CAAgBiC,CAAhB,CAAqB,CACxD,GAAIrD,CAAC,CAACqD,CAAD,CAAD,CAAOtB,IAAP,CAAY,OAAZ,GAAwB+F,CAA5B,CAAiC,CAC7BF,CAAK,GAAL,CACA5H,CAAC,CAACqD,CAAD,CAAD,CAAOC,IAAP,CAAY,UAAZ,IACH,CACJ,CALD,EAOA,GAAI,CAACsE,CAAL,CAAY,CACR,GAAIlB,CAAAA,CAAM,CAAG1G,CAAC,CAAC,UAAD,CAAd,CACA0G,CAAM,CAACuB,MAAP,CAAc1G,QAAQ,CAAC2G,cAAT,CAAwBJ,CAAxB,CAAd,EACApB,CAAM,CAAC3E,IAAP,CAAY,OAAZ,CAAqB+F,CAArB,EACAlF,CAAc,CAACqF,MAAf,CAAsBvB,CAAtB,EACAA,CAAM,CAACpD,IAAP,CAAY,UAAZ,KAEAoD,CAAM,CAAC3E,IAAP,CAAY,eAAZ,IACH,CACJ,CACJ,CAzBD,EA2BA,MAAOW,CAAAA,CAAmB,CAACC,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAAnB,CACNsB,IADM,CACD,UAAW,CAEbQ,CAAY,CAAC9B,CAAD,CAGf,CANM,EAONsB,IAPM,CAOD,UAAW,CAEbiB,CAAY,CAACuC,GAAb,CAAiB,EAAjB,CAGH,CAZM,EAaNxD,IAbM,CAaD,UAAW,CAEb,MAAOkC,CAAAA,CAAgB,CAAC/E,CAAD,CAC1B,CAhBM,CAiBV,CAvhB6D,CAmiB1D8G,CAAiB,CAAG,SAASxF,CAAT,CAAkBtB,CAAlB,CAAyBuB,CAAzB,CAAyC,IAEzDuC,CAAAA,CAAY,CAAGnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CAFyC,CAGzDsC,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAHmC,CAMzDL,CAAiB,CAAGI,CAAkB,CAACzD,QAAnB,CAA4B,sBAA5B,EAAoDI,IAApD,CAAyD,YAAzD,CANqC,CAW7D,GAAI,CAACY,CAAO,CAACqF,QAAb,CAAuB,CACnBpF,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkC2B,IAAlC,CAAuC,UAAvC,IACH,CAEDV,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAAShC,CAAT,CAAgBiC,CAAhB,CAAqB,CACxD,GAAIrD,CAAC,CAACqD,CAAD,CAAD,CAAOtB,IAAP,CAAY,OAAZ,GAAwBiD,CAA5B,CAA+C,CAC3ChF,CAAC,CAACqD,CAAD,CAAD,CAAOC,IAAP,CAAY,UAAZ,IACH,CACJ,CAJD,EAMA,MAAOZ,CAAAA,CAAmB,CAACC,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAAnB,CACNsB,IADM,CACD,UAAW,CAEbQ,CAAY,CAAC9B,CAAD,CAGf,CANM,EAONsB,IAPM,CAOD,UAAW,CACb,GAAIvB,CAAO,CAACyF,wBAAZ,CAAsC,CAElCjD,CAAY,CAACuC,GAAb,CAAiB,EAAjB,EAEA,MAAOtB,CAAAA,CAAgB,CAAC/E,CAAD,CAC1B,CALD,IAKO,CAEH8D,CAAY,CAACkD,KAAb,GAEA,MAAO/B,CAAAA,CAAiB,CAAC3D,CAAD,CAAUtB,CAAV,CAAiB8D,CAAY,CAACuC,GAAb,EAAjB,CAAqC9E,CAArC,CAC3B,CACJ,CAnBM,CAoBV,CA5kB6D,CA0lB1D0F,CAAU,CAAG,SAASC,CAAT,CAAY5F,CAAZ,CAAqBtB,CAArB,CAA4BuB,CAA5B,CAA4C4F,CAA5C,CAAyD,IAClEC,CAAAA,CAAc,CAAGC,CAAmB,CAAC,YAAD,CAD8B,CAIlEC,CAAa,CAAG3I,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACuH,QAA9B,CAAD,CAAD,CAA2CC,MAA3C,EAJkD,CAKtExI,CAAW,CAACyI,oCAAZ,CAAiDH,CAAjD,CAAgEF,CAAhE,EAGA,GAAIlC,CAAAA,CAAK,CAAGvG,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBrB,GAAnB,EAAZ,CAEAc,CAAW,CAACQ,SAAZ,CAAsBrG,CAAO,CAACsG,QAA9B,CAAwC1C,CAAxC,CAA+C,SAAS2C,CAAT,CAAkB,IAEzDC,CAAAA,CAAgB,CAAGX,CAAW,CAACY,cAAZ,CAA2BzG,CAAO,CAACsG,QAAnC,CAA6CC,CAA7C,CAFsC,CAGzDG,CAAc,CAAG,EAHwC,CAM7D,GAAI,CAAC1G,CAAO,CAACqF,QAAb,CAAuB,CACnBpF,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCsD,MAAlC,EACH,CACDrC,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAASkG,CAAT,CAAsB5C,CAAtB,CAA8B,CACjEA,CAAM,CAAG1G,CAAC,CAAC0G,CAAD,CAAV,CACA,GAAI,CAACA,CAAM,CAACpD,IAAP,CAAY,UAAZ,CAAL,CAA8B,CAC1BoD,CAAM,CAACzB,MAAP,EACH,CAFD,IAEO,CACHoE,CAAc,CAAC3F,IAAf,CAA2BgD,CAAM,CAAC3E,IAAP,CAAY,OAAZ,CAA3B,IACH,CACJ,CAPD,EASA,GAAI,CAACY,CAAO,CAACqF,QAAT,EAAkE,CAA7C,GAAApF,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCD,MAA3D,CAAyE,CAIrE,GAAIgF,CAAAA,CAAM,CAAG1G,CAAC,CAAC,UAAD,CAAd,CACA4C,CAAc,CAACqF,MAAf,CAAsBvB,CAAtB,CACH,CACD,GAAI1G,CAAC,CAACuJ,OAAF,CAAUJ,CAAV,CAAJ,CAAiC,CAE7BnJ,CAAC,CAACoD,IAAF,CAAO+F,CAAP,CAAyB,SAASK,CAAT,CAAsBC,CAAtB,CAA8B,CACnD,GAAqD,CAAC,CAAlD,GAAAJ,CAAc,CAAC5E,OAAf,CAA8BgF,CAAM,CAAC9F,KAArC,IAAJ,CAAyD,CACrD,GAAI+C,CAAAA,CAAM,CAAG1G,CAAC,CAAC,UAAD,CAAd,CACA0G,CAAM,CAACuB,MAAP,CAAcwB,CAAM,CAAClG,KAArB,EACAmD,CAAM,CAAC3E,IAAP,CAAY,OAAZ,CAAqB0H,CAAM,CAAC9F,KAA5B,EACAf,CAAc,CAACqF,MAAf,CAAsBvB,CAAtB,CACH,CACJ,CAPD,EAQA9D,CAAc,CAACb,IAAf,CAAoB,aAApB,CAAmC,EAAnC,CACH,CAXD,IAWO,CAEHa,CAAc,CAACb,IAAf,CAAoB,aAApB,CAAmCoH,CAAnC,CACH,CAEDV,CAAc,CAACxG,OAAf,CAAuBqE,CAAiB,CAAC3D,CAAD,CAAUtB,CAAV,CAAiB,EAAjB,CAAqBuB,CAArB,CAAxC,CACH,CA1CD,CA0CG,SAAS8G,CAAT,CAAgB,CACfjB,CAAc,CAACkB,MAAf,CAAsBD,CAAtB,CACH,CA5CD,EA8CA,MAAOjB,CAAAA,CACV,CAnpB6D,CA8pB1DmB,CAAa,CAAG,SAASjH,CAAT,CAAkBtB,CAAlB,CAAyBuB,CAAzB,CAAyC,CAEzD,GAAIuC,CAAAA,CAAY,CAAGnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CAApB,CAEAqC,CAAY,CAAC0E,EAAb,CAAgB,SAAhB,CAA2B,SAAStB,CAAT,CAAY,CACnC,GAAIuB,CAAAA,CAAgB,CAAGpB,CAAmB,CAAC,iBAAmBrH,CAAK,CAACyB,OAAzB,CAAmC,GAAnC,CAAyCyF,CAAC,CAACwB,OAA5C,CAA1C,CAEA,OAAQxB,CAAC,CAACwB,OAAV,EACI,IAAKxJ,CAAAA,CAAI,CAACC,IAAV,CAEI,GAAI,CAACmC,CAAO,CAACqH,eAAb,CAA8B,CAE1BF,CAAgB,CAAC7H,OAAjB,GACA,QACH,CAJD,IAIO,IAA2C,MAAvC,GAAAkD,CAAY,CAACpD,IAAb,CAAkB,eAAlB,CAAJ,CAAmD,CACtD+H,CAAgB,CAAC7H,OAAjB,CAAyB6D,CAAgB,CAACzE,CAAD,CAAzC,CACH,CAFM,IAEA,CAEH,GAAI,CAAC8D,CAAY,CAACuC,GAAb,EAAD,EAAuB/E,CAAO,CAACsH,IAAnC,CAAyC,CACrCC,OAAO,CAAC,CAACvH,CAAO,CAACsH,IAAT,CAAD,CAAiB,SAASzB,CAAT,CAAsB,CAC1CsB,CAAgB,CAAC7H,OAAjB,CAAyBqG,CAAU,CAACC,CAAD,CAAI5F,CAAJ,CAAatB,CAAb,CAAoBuB,CAApB,CAAoC4F,CAApC,CAAnC,CACH,CAFM,CAGV,CAJD,IAIO,CAEHsB,CAAgB,CAAC7H,OAAjB,CAAyBqE,CAAiB,CAAC3D,CAAD,CAAUtB,CAAV,CAAiB8D,CAAY,CAACuC,GAAb,EAAjB,CAAqC9E,CAArC,CAA1C,CACH,CACJ,CAED2F,CAAC,CAAC4B,cAAF,GACA,SACJ,IAAK5J,CAAAA,CAAI,CAACM,EAAV,CAEIiJ,CAAgB,CAAC7H,OAAjB,CAAyBkE,CAAoB,CAAC9E,CAAD,CAA7C,EAGAkH,CAAC,CAAC4B,cAAF,GACA,SACJ,IAAK5J,CAAAA,CAAI,CAACE,KAAV,CACI,GAAI2E,CAAAA,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAA1B,CACA,GAA4C,MAAvC,GAAAF,CAAY,CAACpD,IAAb,CAAkB,eAAlB,CAAD,EACkE,CAA7D,CAAAqD,CAAkB,CAACzD,QAAnB,CAA4B,sBAA5B,EAAoDD,MAD7D,CAC0E,CAEtEoI,CAAgB,CAAC7H,OAAjB,CAAyBkG,CAAiB,CAACxF,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAA1C,CACH,CAJD,IAIO,IAAID,CAAO,CAAC0E,IAAZ,CAAkB,CAErByC,CAAgB,CAAC7H,OAAjB,CAAyBwF,CAAU,CAAC9E,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAAnC,CACH,CAHM,IAGA,CACHkH,CAAgB,CAAC7H,OAAjB,EACH,CAGDsG,CAAC,CAAC4B,cAAF,GACA,SACJ,IAAK5J,CAAAA,CAAI,CAACI,MAAV,CACI,GAA2C,MAAvC,GAAAwE,CAAY,CAACpD,IAAb,CAAkB,eAAlB,CAAJ,CAAmD,CAE/C+H,CAAgB,CAAC7H,OAAjB,CAAyBmE,CAAgB,CAAC/E,CAAD,CAAzC,CACH,CAHD,IAGO,CACHyI,CAAgB,CAAC7H,OAAjB,EACH,CAEDsG,CAAC,CAAC4B,cAAF,GACA,SAvDR,CAyDAL,CAAgB,CAAC7H,OAAjB,GACA,QACH,CA9DD,EAgEAkD,CAAY,CAAC0E,EAAb,CAAgB,UAAhB,CAA4B,SAAStB,CAAT,CAAY,CAEpC,GAAIA,CAAC,CAACwB,OAAF,GAAcxJ,CAAI,CAACK,KAAvB,CAA8B,CAC1B,GAAI+B,CAAO,CAAC0E,IAAZ,CAAkB,CAEdqB,CAAmB,CAAC,YAAcH,CAAC,CAACwB,OAAjB,CAAnB,CACC9H,OADD,CACSwF,CAAU,CAAC9E,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CADnB,CAEH,CAED2F,CAAC,CAAC4B,cAAF,GACA,QACH,CACD,QACH,CAbD,EAgBAhF,CAAY,CAACiF,OAAb,CAAqB,MAArB,EAA6BP,EAA7B,CAAgC,QAAhC,CAA0C,UAAW,CACjD,GAAIlH,CAAO,CAAC0E,IAAZ,CAAkB,CAEdqB,CAAmB,CAAC,0BAAD,CAAnB,CACCzG,OADD,CACSwF,CAAU,CAAC9E,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CADnB,CAEH,CAED,QACH,CARD,EASAuC,CAAY,CAAC0E,EAAb,CAAgB,MAAhB,CAAwB,UAAW,CAC/B,GAAIpB,CAAAA,CAAc,CAAGC,CAAmB,CAAC,wBAAD,CAAxC,CACA2B,MAAM,CAACC,UAAP,CAAkB,UAAW,IAErBC,CAAAA,CAAY,CAAGvK,CAAC,CAACuB,QAAQ,CAACc,aAAV,CAFK,CAGrBmI,CAAc,CAAGxK,CAAC,CAACgC,QAAF,EAHI,CASzB,GAAIuI,CAAY,CAACE,EAAb,CAAgBlJ,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAhB,CAAJ,CAAmE,CAC/DF,CAAY,CAACkD,KAAb,EACH,CAFD,IAEO,IAAI,CAACkC,CAAY,CAACE,EAAb,CAAgBtF,CAAhB,CAAD,EAAkCnF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACyB,OAA9B,CAAD,CAAD,CAA0CpB,MAAhF,CAAwF,CAC3F,GAAIiB,CAAO,CAAC0E,IAAZ,CAAkB,CACdmD,CAAc,CAACtG,IAAf,CAAoB,UAAW,CAC3B,MAAOuD,CAAAA,CAAU,CAAC9E,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CACpB,CAFD,EAGCyB,KAHD,EAIH,CACDmG,CAAc,CAACtG,IAAf,CAAoB,UAAW,CAC3B,MAAOkC,CAAAA,CAAgB,CAAC/E,CAAD,CAC1B,CAFD,EAGCgD,KAHD,EAIH,CAEDmG,CAAc,CAACtG,IAAf,CAAoB,UAAW,CAC3B,MAAOuE,CAAAA,CAAc,CAACxG,OAAf,EACV,CAFD,EAGCoC,KAHD,GAIAmG,CAAc,CAACvI,OAAf,EACH,CA7BD,CA6BG,GA7BH,CA8BH,CAhCD,EAiCA,GAAIU,CAAO,CAACqH,eAAZ,CAA6B,CACzB,GAAIU,CAAAA,CAAY,CAAG1K,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACsJ,WAA9B,CAAD,CAApB,CACAD,CAAY,CAACb,EAAb,CAAgB,OAAhB,CAAyB,SAAStB,CAAT,CAAY,CACjC,GAAIE,CAAAA,CAAc,CAAGC,CAAmB,CAAC,oCAAD,CAAxC,CAGAvD,CAAY,CAACkD,KAAb,GAGA,GAAI,CAAClD,CAAY,CAACuC,GAAb,EAAD,EAAuB/E,CAAO,CAACsH,IAAnC,CAAyC,CACrCC,OAAO,CAAC,CAACvH,CAAO,CAACsH,IAAT,CAAD,CAAiB,SAASzB,CAAT,CAAsB,CAC1CC,CAAc,CAACxG,OAAf,CAAuBqG,CAAU,CAACC,CAAD,CAAI5F,CAAJ,CAAatB,CAAb,CAAoBuB,CAApB,CAAoC4F,CAApC,CAAjC,CACH,CAFM,CAGV,CAJD,IAIO,CAEHC,CAAc,CAACxG,OAAf,CAAuBqE,CAAiB,CAAC3D,CAAD,CAAUtB,CAAV,CAAiB8D,CAAY,CAACuC,GAAb,EAAjB,CAAqC9E,CAArC,CAAxC,CACH,CACJ,CAfD,CAgBH,CAED,GAAIwC,CAAAA,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAA1B,CAEAD,CAAkB,CAACyD,MAAnB,GAA4BvF,IAA5B,CAAiC,SAAjC,CAA4C,IAA5C,EAAkDsH,GAAlD,CAAsD,OAAtD,EACAxF,CAAkB,CAACyD,MAAnB,GAA4BgB,EAA5B,CAA+B,OAA/B,YAA4CxI,CAAK,CAACgE,aAAlD,mBAAiF,SAASkD,CAAT,CAAY,IACrFE,CAAAA,CAAc,CAAGC,CAAmB,CAAC,0BAAD,CADiD,CAGrF9G,CAAO,CAAG5B,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBqB,OAAnB,CAA2B,eAA3B,CAH2E,CAIrFhF,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAJ+D,CAMrFU,CAAO,CAAGX,CAAkB,CAACzD,QAAnB,CAA4B,qBAA5B,EAAmDP,KAAnD,CAAyDQ,CAAzD,CAN2E,CASzFsD,CAAY,CAACa,CAAD,CAAU1E,CAAV,CAAZ,CACC6C,IADD,CACM,UAAW,CAEb,MAAOiE,CAAAA,CAAiB,CAACxF,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAC3B,CAJD,EAKCsB,IALD,CAKM,UAAW,CACb,MAAOuE,CAAAA,CAAc,CAACxG,OAAf,EACV,CAPD,EAQCoC,KARD,EASH,CAlBD,EAmBA,GAAI/C,CAAAA,CAAgB,CAAGtB,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAAxB,CAGAH,CAAgB,CAACuI,EAAjB,CAAoB,OAApB,CAA6B,eAA7B,CAA8C,SAAStB,CAAT,CAAY,CACtD,GAAIE,CAAAA,CAAc,CAAGC,CAAmB,CAAC,0BAAD,CAAxC,CAGAD,CAAc,CAACxG,OAAf,CAAuB8C,CAAY,CAACpC,CAAD,CAAUtB,CAAV,CAAiBrB,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAlB,CAAqCnG,CAArC,CAAnC,CACH,CALD,EAQAtB,CAAgB,CAACuI,EAAjB,CAAoB,OAApB,CAA6B,UAAW,CACpCrH,CAA8B,CAACnB,CAAD,CACjC,CAFD,EAKAC,CAAgB,CAACuI,EAAjB,CAAoB,SAApB,CAA+B,SAAStB,CAAT,CAAY,CACvC,GAAIE,CAAAA,CAAc,CAAGC,CAAmB,CAAC,6BAA+BH,CAAC,CAACwB,OAAlC,CAAxC,CACA,OAAQxB,CAAC,CAACwB,OAAV,EACI,IAAKxJ,CAAAA,CAAI,CAACQ,KAAV,CACA,IAAKR,CAAAA,CAAI,CAACC,IAAV,CAEI+H,CAAC,CAAC4B,cAAF,GAGA1B,CAAc,CAACxG,OAAf,CAAuBiE,CAAqB,CAAC7E,CAAD,CAA5C,EACA,OACJ,IAAKd,CAAAA,CAAI,CAACO,IAAV,CACA,IAAKP,CAAAA,CAAI,CAACM,EAAV,CAEI0H,CAAC,CAAC4B,cAAF,GAGA1B,CAAc,CAACxG,OAAf,CAAuB+D,CAAyB,CAAC3E,CAAD,CAAhD,EACA,OACJ,IAAKd,CAAAA,CAAI,CAACG,KAAV,CACA,IAAKH,CAAAA,CAAI,CAACE,KAAV,CAEI,GAAIoK,CAAAA,CAAY,CAAG7K,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACI,WAA9B,CAAD,CAAD,CAA8CE,QAA9C,CAAuD,yBAAvD,CAAnB,CACA,GAAIkJ,CAAJ,CAAkB,CACdtC,CAAC,CAAC4B,cAAF,GAGA1B,CAAc,CAACxG,OAAf,CAAuB8C,CAAY,CAACpC,CAAD,CAAUtB,CAAV,CAAiBwJ,CAAjB,CAA+BjI,CAA/B,CAAnC,CACH,CACD,OA3BR,CA+BA6F,CAAc,CAACxG,OAAf,EACH,CAlCD,EAoCA,GAAIU,CAAO,CAACqH,eAAZ,CAA6B,CAEzB7E,CAAY,CAAC0E,EAAb,CAAgB,OAAhB,CAAyB,SAAStB,CAAT,CAAY,CACjC,GAAIhC,CAAAA,CAAK,CAAGvG,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBrB,GAAnB,EAAZ,CACA1H,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBvF,IAAnB,CAAwB,YAAxB,CAAsC+C,CAAtC,CACH,CAHD,EAMA,GAAI5D,CAAO,CAACsH,IAAZ,CAAkB,CACdC,OAAO,CAAC,CAACvH,CAAO,CAACsH,IAAT,CAAD,CAAiB,SAASzB,CAAT,CAAsB,IAKtCsC,CAAAA,CAAe,CAAG,IALoB,CAMtCC,CAAU,GAN4B,CAOtClI,CAAU,CAAG,+BAPyB,CAQtCmI,CAAO,CAAG,SAASzC,CAAT,CAAY,CAEtBuC,CAAe,CAAG,IAAlB,CAGAC,CAAU,GAAV,CAGAzC,CAAU,CAACC,CAAD,CAAI5F,CAAJ,CAAatB,CAAb,CAAoBuB,CAApB,CAAoC4F,CAApC,CAAV,CACCtE,IADD,CACM,UAAW,CAMb,GAAI,OAAS4G,CAAb,CAA8B,CAE1B/H,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,CACH,CACDkI,CAAU,GAAV,CAEA,MAAOE,CAAAA,SAAS,CAAC,CAAD,CACnB,CAdD,EAeC5G,KAfD,CAeOjE,CAAY,CAACkE,SAfpB,CAgBH,CAhCyC,CAmCtC4G,CAAgB,CAAG,SAAS3C,CAAT,CAAY,CAC/B8B,MAAM,CAACc,YAAP,CAAoBL,CAApB,EACA,GAAIC,CAAJ,CAAgB,CAGZD,CAAe,CAAGT,MAAM,CAACC,UAAP,CAAkBY,CAAgB,CAACE,IAAjB,CAAsB,IAAtB,CAA4B7C,CAA5B,CAAlB,CAAkD,GAAlD,CAAlB,CACA,MACH,CAED,GAAwB,IAApB,GAAAuC,CAAJ,CAA8B,CAG1B/H,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkBJ,CAAlB,CACH,CAKDiI,CAAe,CAAGT,MAAM,CAACC,UAAP,CAAkBU,CAAO,CAACI,IAAR,CAAa,IAAb,CAAmB7C,CAAnB,CAAlB,CAAyC,GAAzC,CACrB,CAtDyC,CAyD1CpD,CAAY,CAAC0E,EAAb,CAAgB,OAAhB,CAAyB,SAAStB,CAAT,CAAY,IAC7BhC,CAAAA,CAAK,CAAGvG,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBrB,GAAnB,EADqB,CAE7B2D,CAAI,CAAGrL,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBvF,IAAnB,CAAwB,YAAxB,CAFsB,CAIjC,GAAI6H,CAAI,GAAK9E,CAAb,CAAoB,CAChB2E,CAAgB,CAAC3C,CAAD,CACnB,CACDvI,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBvF,IAAnB,CAAwB,YAAxB,CAAsC+C,CAAtC,CACH,CARD,CASH,CAlEM,CAmEV,CApED,IAoEO,CACHpB,CAAY,CAAC0E,EAAb,CAAgB,OAAhB,CAAyB,SAAStB,CAAT,CAAY,IAC7BhC,CAAAA,CAAK,CAAGvG,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBrB,GAAnB,EADqB,CAE7B2D,CAAI,CAAGrL,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBvF,IAAnB,CAAwB,YAAxB,CAFsB,CAQjC,GAAI6H,CAAI,GAAK9E,CAAb,CAAoB,CAChBD,CAAiB,CAAC3D,CAAD,CAAUtB,CAAV,CAAiBkF,CAAjB,CAAwB3D,CAAxB,CACpB,CACD5C,CAAC,CAACuI,CAAC,CAACQ,aAAH,CAAD,CAAmBvF,IAAnB,CAAwB,YAAxB,CAAsC+C,CAAtC,CACH,CAZD,CAaH,CACJ,CACJ,CAt9B6D,CA89B1DmC,CAAmB,CAAG,SAAS4C,CAAT,CAAc,CAChC,GAAIzI,CAAAA,CAAU,CAAG,qBAAuByI,CAAxC,CAEAvI,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkBJ,CAAlB,EAEA,GAAI4F,CAAAA,CAAc,CAAGzI,CAAC,CAACgC,QAAF,EAArB,CAEAyG,CAAc,CACbvE,IADD,CACM,UAAW,CACbnB,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,EAEA,MAAOoI,CAAAA,SAAS,CAAC,CAAD,CACnB,CALD,EAMC5G,KAND,CAMOjE,CAAY,CAACkE,SANpB,EAQA,MAAOmE,CAAAA,CACd,CA9+B6D,CAg/B9D,MAAmD,CAmB/C8C,OAAO,CAAE,iBAAStC,CAAT,CAAmB5B,CAAnB,CAAyB4C,CAAzB,CAA+BuB,CAA/B,CAA4C3E,CAA5C,CAA2DmD,CAA3D,CAA4EyB,CAA5E,CACSrD,CADT,CACmCsD,CADnC,CACsD,IAEvD/I,CAAAA,CAAO,CAAG,CACVsG,QAAQ,CAAEA,CADA,CAEV5B,IAAI,GAFM,CAGV4C,IAAI,GAHM,CAIVuB,WAAW,CAAEA,CAJH,CAKV3E,aAAa,GALH,CAMVmD,eAAe,GANL,CAOVyB,iBAAiB,CAAEA,CAPT,CAQVtL,SAAS,CAAEH,CAAC,CAACgE,MAAF,CAAS,CACZ2H,KAAK,CAAE,8BADK,CAEZzI,KAAK,CAAE,wCAFK,CAGZ0I,MAAM,CAAE,+BAHI,CAIZC,SAAS,CAAE,kCAJC,CAKZpF,WAAW,CAAE,oCALD,CAAT,CAMJiF,CANI,CARD,CAF6C,CAkBvD7I,CAAU,CAAG,sBAAwBoG,CAlBkB,CAmB3DlG,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkBJ,CAAlB,EACA,GAAoB,WAAhB,QAAOwE,CAAAA,CAAX,CAAiC,CAC7B1E,CAAO,CAAC0E,IAAR,CAAeA,CAClB,CACD,GAAoB,WAAhB,QAAO4C,CAAAA,CAAX,CAAiC,CAC7BtH,CAAO,CAACsH,IAAR,CAAeA,CAClB,CACD,GAA6B,WAAzB,QAAOpD,CAAAA,CAAX,CAA0C,CACtClE,CAAO,CAACkE,aAAR,CAAwBA,CAC3B,CACD,GAA+B,WAA3B,QAAOmD,CAAAA,CAAX,CAA4C,CACxCrH,CAAO,CAACqH,eAAR,CAA0BA,CAC7B,CACD,GAAiC,WAA7B,QAAOyB,CAAAA,CAAX,CAA8C,CAC1CvL,CAAG,CAACoH,UAAJ,CAAe,aAAf,CAA8B,MAA9B,EAAsCC,IAAtC,CAA2C,SAASkC,CAAT,CAAiB,CACxD9G,CAAO,CAAC8I,iBAAR,CAA4BhC,CAC/B,CAFD,EAEGqC,IAFH,CAEQ1L,CAAY,CAACkE,SAFrB,CAGH,CAGD,GAAI1B,CAAAA,CAAc,CAAG5C,CAAC,CAACiJ,CAAD,CAAtB,CACA,GAAI,CAACrG,CAAL,CAAqB,CACjB3C,CAAG,CAAC8L,KAAJ,CAAU,uBAAyB9C,CAAnC,EACAlG,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,EACA,QACH,CAEDvC,CAAI,CAAC+F,IAAL,CAAUzD,CAAc,CAACf,GAAf,EAAV,EACAe,CAAc,CAACoJ,GAAf,CAAmB,YAAnB,CAAiC,QAAjC,EAKA,GAAI3K,CAAAA,CAAK,CAAG,CACRuH,QAAQ,CAAEhG,CAAc,CAACb,IAAf,CAAoB,IAApB,CADF,CAERe,OAAO,CAAE,2BAA6B9B,CAF9B,CAGRqE,aAAa,CAAE,iCAAmCrE,CAH1C,CAIRS,WAAW,CAAE,+BAAiCT,CAJtC,CAKR2J,WAAW,CAAE,+BAAiC3J,CALtC,CAMRkC,KAAK,CAAE,EANC,CAAZ,CAUAlC,CAAQ,GAER2B,CAAO,CAACqF,QAAR,CAAmBpF,CAAc,CAACb,IAAf,CAAoB,UAApB,CAAnB,CACA,GAAI,CAACY,CAAO,CAACqF,QAAb,CAAuB,CAInBpF,CAAc,CAACqJ,OAAf,CAAuB,UAAvB,CACH,CAED,GAAwC,WAApC,QAAO7D,CAAAA,CAAX,CAAqD,CACjDzF,CAAO,CAACyF,wBAAR,CAAmCA,CACtC,CAFD,IAEO,CAEHzF,CAAO,CAACyF,wBAAR,CAAmC,CAACzF,CAAO,CAACqF,QAC/C,CA7E0D,GA+EvDkE,CAAAA,CAAa,CAAGlM,CAAC,CAAC,QAAUqB,CAAK,CAACuH,QAAhB,CAA2B,GAA5B,CA/EsC,CAiFvDnC,CAAW,CAAG,EAjFyC,CAkF3D7D,CAAc,CAACjB,QAAf,CAAwB,QAAxB,EAAkCyB,IAAlC,CAAuC,SAAShC,CAAT,CAAgBsF,CAAhB,CAAwB,CAC3DD,CAAW,CAACrF,CAAD,CAAX,CAAqB,CAACmC,KAAK,CAAEmD,CAAM,CAACC,SAAf,CAA0BhD,KAAK,CAAE3D,CAAC,CAAC0G,CAAD,CAAD,CAAU3E,IAAV,CAAe,OAAf,CAAjC,CACxB,CAFD,EAKA,GAAIgC,CAAAA,CAAO,CAAG/D,CAAC,CAACgE,MAAF,CAAS,EAAT,CAAarB,CAAb,CAAsBtB,CAAtB,CAAd,CACA0C,CAAO,CAACpB,OAAR,CAAkB8D,CAAlB,CACA1C,CAAO,CAACb,KAAR,CAAgB,EAAhB,CAzF2D,GA4FvDiJ,CAAAA,CAAW,CAAG,EA5FyC,CA8FvDC,CAAY,CAAGjM,CAAS,CAAC8D,MAAV,CAAiBtB,CAAO,CAACxC,SAAR,CAAkByL,MAAnC,CAA2C,EAA3C,EAClB1H,IADkB,CACb,SAAST,CAAT,CAAe,CACjB,MAAOzD,CAAAA,CAAC,CAACyD,CAAD,CACX,CAHkB,CA9FwC,CAmGvD4I,CAAW,CAAGlM,CAAS,CAAC8D,MAAV,CAAiBtB,CAAO,CAACxC,SAAR,CAAkBwL,KAAnC,CAA0C5H,CAA1C,EAAmDG,IAAnD,CAAwD,SAAST,CAAT,CAAeU,CAAf,CAAmB,CACzFgI,CAAW,EAAIhI,CAAf,CACA,MAAOnE,CAAAA,CAAC,CAACyD,CAAD,CACX,CAHiB,CAnGyC,CAwGvD6I,CAAc,CAAGnM,CAAS,CAAC8D,MAAV,CAAiBtB,CAAO,CAACxC,SAAR,CAAkBsG,WAAnC,CAAgD1C,CAAhD,EAAyDG,IAAzD,CAA8D,SAAST,CAAT,CAAeU,CAAf,CAAmB,CAClGgI,CAAW,EAAIhI,CAAf,CACA,MAAOnE,CAAAA,CAAC,CAACyD,CAAD,CACX,CAHoB,CAxGsC,CA6GvD8I,CAAe,CAAGpM,CAAS,CAAC8D,MAAV,CAAiBtB,CAAO,CAACxC,SAAR,CAAkB0L,SAAnC,CAA8C9H,CAA9C,EAAuDG,IAAvD,CAA4D,SAAST,CAAT,CAAeU,CAAf,CAAmB,CACjGgI,CAAW,EAAIhI,CAAf,CACA,MAAOnE,CAAAA,CAAC,CAACyD,CAAD,CACX,CAHqB,CA7GqC,CAkH3D,MAAOzD,CAAAA,CAAC,CAACwM,IAAF,CAAOJ,CAAP,CAAqBC,CAArB,CAAkCC,CAAlC,CAAkDC,CAAlD,EACNrI,IADM,CACD,SAAS0H,CAAT,CAAiBD,CAAjB,CAAwBlF,CAAxB,CAAqCoF,CAArC,CAAgD,CAClDjJ,CAAc,CAACyD,IAAf,GACA,GAAIoG,CAAAA,CAAS,CAAG7J,CAAc,CAACiG,MAAf,EAAhB,CAGA7I,CAAC,CAAC2L,CAAD,CAAD,CAASpJ,IAAT,CAAc,OAAd,EAAuBR,IAAvB,CAA4B,gBAA5B,CAA8C,cAA9C,EAEA0K,CAAS,CAACxE,MAAV,CAAiB2D,CAAjB,EACAa,CAAS,CAAClK,IAAV,CAAe,2CAAf,EAA0DmK,WAA1D,CAAsEf,CAAtE,EACAc,CAAS,CAAClK,IAAV,CAAe,iDAAf,EAAgEmK,WAAhE,CAA4EjG,CAA5E,EACAgG,CAAS,CAAClK,IAAV,CAAe,+CAAf,EAA8DmK,WAA9D,CAA0Eb,CAA1E,EAEA1L,CAAS,CAACwM,aAAV,CAAwBR,CAAxB,EAGAD,CAAa,CAACnK,IAAd,CAAmB,KAAnB,CAA0BV,CAAK,CAACyB,OAAhC,EAEA8G,CAAa,CAACjH,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAAb,CAEA,GAAIwC,CAAAA,CAAkB,CAAGpF,CAAC,CAACuB,QAAQ,CAACC,cAAT,CAAwBH,CAAK,CAACgE,aAA9B,CAAD,CAA1B,CAEAD,CAAkB,CAACiB,IAAnB,GACA/F,CAAI,CAAC+F,IAAL,CAAUjB,CAAkB,CAACvD,GAAnB,EAAV,CAGH,CA1BM,EA2BNqC,IA3BM,CA2BD,UAAW,CAEb,MAAOxB,CAAAA,CAAmB,CAACC,CAAD,CAAUtB,CAAV,CAAiBuB,CAAjB,CAC7B,CA9BM,EA+BNsB,IA/BM,CA+BD,UAAW,CACb,MAAOnB,CAAAA,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,CACV,CAjCM,EAkCNwB,KAlCM,CAkCA,SAASqF,CAAT,CAAgB,CACnB3G,CAAC,CAACC,IAAF,CAAOa,WAAP,CAAmBhB,CAAnB,EACAzC,CAAY,CAACkE,SAAb,CAAuBoF,CAAvB,CACH,CArCM,CAsCV,CA5K8C,CA8KtD,CAhqCK,CAAN","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 .\n\n/**\n * Autocomplete wrapper for select2 library.\n *\n * @module core/form-autocomplete\n * @class autocomplete\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\n/* globals require: false */\ndefine(\n ['jquery', 'core/log', 'core/str', 'core/templates', 'core/notification', 'core/loadingicon', 'core/aria'],\nfunction($, log, str, templates, notification, LoadingIcon, Aria) {\n\n // Private functions and variables.\n /** @var {Object} KEYS - List of keycode constants. */\n var KEYS = {\n DOWN: 40,\n ENTER: 13,\n SPACE: 32,\n ESCAPE: 27,\n COMMA: 44,\n UP: 38,\n LEFT: 37,\n RIGHT: 39\n };\n\n var uniqueId = Date.now();\n\n /**\n * Make an item in the selection list \"active\".\n *\n * @method activateSelection\n * @private\n * @param {Number} index The index in the current (visible) list of selection.\n * @param {Object} state State variables for this autocomplete element.\n * @return {Promise}\n */\n var activateSelection = function(index, state) {\n // Find the elements in the DOM.\n var selectionElement = $(document.getElementById(state.selectionId));\n\n // Count the visible items.\n var length = selectionElement.children('[aria-selected=true]').length;\n // Limit the index to the upper/lower bounds of the list (wrap in both directions).\n index = index % length;\n while (index < 0) {\n index += length;\n }\n // Find the specified element.\n var element = $(selectionElement.children('[aria-selected=true]').get(index));\n // Create an id we can assign to this element.\n var itemId = state.selectionId + '-' + index;\n\n // Deselect all the selections.\n selectionElement.children().attr('data-active-selection', null).attr('id', '');\n\n // Select only this suggestion and assign it the id.\n element.attr('data-active-selection', true).attr('id', itemId);\n\n // Tell the input field it has a new active descendant so the item is announced.\n selectionElement.attr('aria-activedescendant', itemId);\n selectionElement.attr('data-active-value', element.attr('data-value'));\n\n return $.Deferred().resolve();\n };\n\n /**\n * Get the actively selected element from the state object.\n *\n * @param {Object} state\n * @returns {jQuery}\n */\n var getActiveElementFromState = function(state) {\n var selectionRegion = $(document.getElementById(state.selectionId));\n var activeId = selectionRegion.attr('aria-activedescendant');\n\n if (activeId) {\n var activeElement = $(document.getElementById(activeId));\n if (activeElement.length) {\n // The active descendent still exists.\n return activeElement;\n }\n }\n\n var activeValue = selectionRegion.attr('data-active-value');\n return selectionRegion.find('[data-value=\"' + activeValue + '\"]');\n };\n\n /**\n * Update the active selection from the given state object.\n *\n * @param {Object} state\n */\n var updateActiveSelectionFromState = function(state) {\n var activeElement = getActiveElementFromState(state);\n var activeValue = activeElement.attr('data-value');\n\n var selectionRegion = $(document.getElementById(state.selectionId));\n if (activeValue) {\n // Find the index of the currently selected index.\n var activeIndex = selectionRegion.find('[aria-selected=true]').index(activeElement);\n\n if (activeIndex !== -1) {\n activateSelection(activeIndex, state);\n return;\n }\n }\n\n // Either the active index was not set, or it could not be found.\n // Select the first value instead.\n activateSelection(0, state);\n };\n\n /**\n * Update the element that shows the currently selected items.\n *\n * @method updateSelectionList\n * @private\n * @param {Object} options Original options for this autocomplete element.\n * @param {Object} state State variables for this autocomplete element.\n * @param {JQuery} originalSelect The JQuery object matching the hidden select list.\n * @return {Promise}\n */\n var updateSelectionList = function(options, state, originalSelect) {\n var pendingKey = 'form-autocomplete-updateSelectionList-' + state.inputId;\n M.util.js_pending(pendingKey);\n\n // Build up a valid context to re-render the template.\n var items = [];\n var newSelection = $(document.getElementById(state.selectionId));\n originalSelect.children('option').each(function(index, ele) {\n if ($(ele).prop('selected')) {\n var label;\n if ($(ele).data('html')) {\n label = $(ele).data('html');\n } else {\n label = $(ele).html();\n }\n if (label !== '') {\n items.push({label: label, value: $(ele).attr('value')});\n }\n }\n });\n\n if (!hasItemListChanged(state, items)) {\n M.util.js_complete(pendingKey);\n return Promise.resolve();\n }\n\n state.items = items;\n\n var context = $.extend(options, state);\n // Render the template.\n return templates.render(options.templates.items, context)\n .then(function(html, js) {\n // Add it to the page.\n templates.replaceNodeContents(newSelection, html, js);\n\n updateActiveSelectionFromState(state);\n\n return;\n })\n .then(function() {\n return M.util.js_complete(pendingKey);\n })\n .catch(notification.exception);\n };\n\n /**\n * Check whether the list of items stored in the state has changed.\n *\n * @param {Object} state\n * @param {Array} items\n */\n var hasItemListChanged = function(state, items) {\n if (state.items.length !== items.length) {\n return true;\n }\n\n // Check for any items in the state items which are not present in the new items list.\n return state.items.filter(item => items.indexOf(item) === -1).length > 0;\n };\n\n /**\n * Notify of a change in the selection.\n *\n * @param {jQuery} originalSelect The jQuery object matching the hidden select list.\n */\n var notifyChange = function(originalSelect) {\n if (typeof M.core_formchangechecker !== 'undefined') {\n M.core_formchangechecker.set_form_changed();\n }\n\n // Note, jQuery .change() was not working here. Better to\n // use plain JavaScript anyway.\n originalSelect[0].dispatchEvent(new Event('change'));\n };\n\n /**\n * Remove the given item from the list of selected things.\n *\n * @method deselectItem\n * @private\n * @param {Object} options Original options for this autocomplete element.\n * @param {Object} state State variables for this autocomplete element.\n * @param {Element} item The item to be deselected.\n * @param {Element} originalSelect The original select list.\n * @return {Promise}\n */\n var deselectItem = function(options, state, item, originalSelect) {\n var selectedItemValue = $(item).attr('data-value');\n\n // Look for a match, and toggle the selected property if there is a match.\n originalSelect.children('option').each(function(index, ele) {\n if ($(ele).attr('value') == selectedItemValue) {\n $(ele).prop('selected', false);\n // We remove newly created custom tags from the suggestions list when they are deselected.\n if ($(ele).attr('data-iscustom')) {\n $(ele).remove();\n }\n }\n });\n // Rerender the selection list.\n return updateSelectionList(options, state, originalSelect)\n .then(function() {\n // Notify that the selection changed.\n notifyChange(originalSelect);\n\n return;\n });\n };\n\n /**\n * Make an item in the suggestions \"active\" (about to be selected).\n *\n * @method activateItem\n * @private\n * @param {Number} index The index in the current (visible) list of suggestions.\n * @param {Object} state State variables for this instance of autocomplete.\n * @return {Promise}\n */\n var activateItem = function(index, state) {\n // Find the elements in the DOM.\n var inputElement = $(document.getElementById(state.inputId));\n var suggestionsElement = $(document.getElementById(state.suggestionsId));\n\n // Count the visible items.\n var length = suggestionsElement.children(':not([aria-hidden])').length;\n // Limit the index to the upper/lower bounds of the list (wrap in both directions).\n index = index % length;\n while (index < 0) {\n index += length;\n }\n // Find the specified element.\n var element = $(suggestionsElement.children(':not([aria-hidden])').get(index));\n // Find the index of this item in the full list of suggestions (including hidden).\n var globalIndex = $(suggestionsElement.children('[role=option]')).index(element);\n // Create an id we can assign to this element.\n var itemId = state.suggestionsId + '-' + globalIndex;\n\n // Deselect all the suggestions.\n suggestionsElement.children().attr('aria-selected', false).attr('id', '');\n // Select only this suggestion and assign it the id.\n element.attr('aria-selected', true).attr('id', itemId);\n // Tell the input field it has a new active descendant so the item is announced.\n inputElement.attr('aria-activedescendant', itemId);\n\n // Scroll it into view.\n var scrollPos = element.offset().top\n - suggestionsElement.offset().top\n + suggestionsElement.scrollTop()\n - (suggestionsElement.height() / 2);\n return suggestionsElement.animate({\n scrollTop: scrollPos\n }, 100).promise();\n };\n\n /**\n * Find the index of the current active suggestion, and activate the next one.\n *\n * @method activateNextItem\n * @private\n * @param {Object} state State variable for this auto complete element.\n * @return {Promise}\n */\n var activateNextItem = function(state) {\n // Find the list of suggestions.\n var suggestionsElement = $(document.getElementById(state.suggestionsId));\n // Find the active one.\n var element = suggestionsElement.children('[aria-selected=true]');\n // Find it's index.\n var current = suggestionsElement.children(':not([aria-hidden])').index(element);\n // Activate the next one.\n return activateItem(current + 1, state);\n };\n\n /**\n * Find the index of the current active selection, and activate the previous one.\n *\n * @method activatePreviousSelection\n * @private\n * @param {Object} state State variables for this instance of autocomplete.\n * @return {Promise}\n */\n var activatePreviousSelection = function(state) {\n // Find the list of selections.\n var selectionsElement = $(document.getElementById(state.selectionId));\n // Find the active one.\n var element = selectionsElement.children('[data-active-selection]');\n if (!element) {\n return activateSelection(0, state);\n }\n // Find it's index.\n var current = selectionsElement.children('[aria-selected=true]').index(element);\n // Activate the next one.\n return activateSelection(current - 1, state);\n };\n\n /**\n * Find the index of the current active selection, and activate the next one.\n *\n * @method activateNextSelection\n * @private\n * @param {Object} state State variables for this instance of autocomplete.\n * @return {Promise}\n */\n var activateNextSelection = function(state) {\n // Find the list of selections.\n var selectionsElement = $(document.getElementById(state.selectionId));\n\n // Find the active one.\n var element = selectionsElement.children('[data-active-selection]');\n var current = 0;\n\n if (element) {\n // The element was found. Determine the index and move to the next one.\n current = selectionsElement.children('[aria-selected=true]').index(element);\n current = current + 1;\n } else {\n // No selected item found. Move to the first.\n current = 0;\n }\n\n return activateSelection(current, state);\n };\n\n /**\n * Find the index of the current active suggestion, and activate the previous one.\n *\n * @method activatePreviousItem\n * @private\n * @param {Object} state State variables for this autocomplete element.\n * @return {Promise}\n */\n var activatePreviousItem = function(state) {\n // Find the list of suggestions.\n var suggestionsElement = $(document.getElementById(state.suggestionsId));\n\n // Find the active one.\n var element = suggestionsElement.children('[aria-selected=true]');\n\n // Find it's index.\n var current = suggestionsElement.children(':not([aria-hidden])').index(element);\n\n // Activate the previous one.\n return activateItem(current - 1, state);\n };\n\n /**\n * Close the list of suggestions.\n *\n * @method closeSuggestions\n * @private\n * @param {Object} state State variables for this autocomplete element.\n * @return {Promise}\n */\n var closeSuggestions = function(state) {\n // Find the elements in the DOM.\n var inputElement = $(document.getElementById(state.inputId));\n var suggestionsElement = $(document.getElementById(state.suggestionsId));\n\n if (inputElement.attr('aria-expanded') === \"true\") {\n // Announce the list of suggestions was closed.\n inputElement.attr('aria-expanded', false);\n }\n // Read the current list of selections.\n inputElement.attr('aria-activedescendant', state.selectionId);\n\n // Hide the suggestions list (from screen readers too).\n Aria.hide(suggestionsElement.get());\n suggestionsElement.hide();\n\n return $.Deferred().resolve();\n };\n\n /**\n * Rebuild the list of suggestions based on the current values in the select list, and the query.\n *\n * @method updateSuggestions\n * @private\n * @param {Object} options The original options for this autocomplete.\n * @param {Object} state The state variables for this autocomplete.\n * @param {String} query The current text for the search string.\n * @param {JQuery} originalSelect The JQuery object matching the hidden select list.\n * @return {Promise}\n */\n var updateSuggestions = function(options, state, query, originalSelect) {\n var pendingKey = 'form-autocomplete-updateSuggestions-' + state.inputId;\n M.util.js_pending(pendingKey);\n\n // Find the elements in the DOM.\n var inputElement = $(document.getElementById(state.inputId));\n var suggestionsElement = $(document.getElementById(state.suggestionsId));\n\n // Used to track if we found any visible suggestions.\n var matchingElements = false;\n // Options is used by the context when rendering the suggestions from a template.\n var suggestions = [];\n originalSelect.children('option').each(function(index, option) {\n if ($(option).prop('selected') !== true) {\n suggestions[suggestions.length] = {label: option.innerHTML, value: $(option).attr('value')};\n }\n });\n\n // Re-render the list of suggestions.\n var searchquery = state.caseSensitive ? query : query.toLocaleLowerCase();\n var context = $.extend({options: suggestions}, options, state);\n var returnVal = templates.render(\n 'core/form_autocomplete_suggestions',\n context\n )\n .then(function(html, js) {\n // We have the new template, insert it in the page.\n templates.replaceNode(suggestionsElement, html, js);\n\n // Get the element again.\n suggestionsElement = $(document.getElementById(state.suggestionsId));\n\n // Show it if it is hidden.\n Aria.unhide(suggestionsElement.get());\n suggestionsElement.show();\n\n // For each option in the list, hide it if it doesn't match the query.\n suggestionsElement.children().each(function(index, node) {\n node = $(node);\n if ((options.caseSensitive && node.text().indexOf(searchquery) > -1) ||\n (!options.caseSensitive && node.text().toLocaleLowerCase().indexOf(searchquery) > -1)) {\n Aria.unhide(node.get());\n node.show();\n matchingElements = true;\n } else {\n node.hide();\n Aria.hide(node.get());\n }\n });\n // If we found any matches, show the list.\n inputElement.attr('aria-expanded', true);\n if (originalSelect.attr('data-notice')) {\n // Display a notice rather than actual suggestions.\n suggestionsElement.html(originalSelect.attr('data-notice'));\n } else if (matchingElements) {\n // We only activate the first item in the list if tags is false,\n // because otherwise \"Enter\" would select the first item, instead of\n // creating a new tag.\n if (!options.tags) {\n activateItem(0, state);\n }\n } else {\n // Nothing matches. Tell them that.\n str.get_string('nosuggestions', 'form').done(function(nosuggestionsstr) {\n suggestionsElement.html(nosuggestionsstr);\n });\n }\n\n return suggestionsElement;\n })\n .then(function() {\n return M.util.js_complete(pendingKey);\n })\n .catch(notification.exception);\n\n return returnVal;\n };\n\n /**\n * Create a new item for the list (a tag).\n *\n * @method createItem\n * @private\n * @param {Object} options The original options for the autocomplete.\n * @param {Object} state State variables for the autocomplete.\n * @param {JQuery} originalSelect The JQuery object matching the hidden select list.\n * @return {Promise}\n */\n var createItem = function(options, state, originalSelect) {\n // Find the element in the DOM.\n var inputElement = $(document.getElementById(state.inputId));\n // Get the current text in the input field.\n var query = inputElement.val();\n var tags = query.split(',');\n var found = false;\n\n $.each(tags, function(tagindex, tag) {\n // If we can only select one at a time, deselect any current value.\n tag = tag.trim();\n if (tag !== '') {\n if (!options.multiple) {\n originalSelect.children('option').prop('selected', false);\n }\n // Look for an existing option in the select list that matches this new tag.\n originalSelect.children('option').each(function(index, ele) {\n if ($(ele).attr('value') == tag) {\n found = true;\n $(ele).prop('selected', true);\n }\n });\n // Only create the item if it's new.\n if (!found) {\n var option = $('