From 98f0aebde64aa5c513ab2efc4667d37bdcedbe0a Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Thu, 17 Aug 2023 23:53:47 +0800 Subject: [PATCH] MDL-78324 gradereport_singleview: Update modal usage to drop factory use This change includes some additional simplifications to support this change, including conversion from done/fail to then/catch, and some simplification of Promise usage. There were a number of cases of nested Modal usage which have been removed. --- .../singleview/amd/build/bulkactions.min.js | 4 +- .../amd/build/bulkactions.min.js.map | 2 +- .../report/singleview/amd/src/bulkactions.js | 214 +++++++++--------- lib/amd/build/tag.min.js | 2 +- lib/amd/build/tag.min.js.map | 2 +- lib/amd/src/tag.js | 60 ++--- 6 files changed, 133 insertions(+), 151 deletions(-) diff --git a/grade/report/singleview/amd/build/bulkactions.min.js b/grade/report/singleview/amd/build/bulkactions.min.js index 572764203a8..66468955e04 100644 --- a/grade/report/singleview/amd/build/bulkactions.min.js +++ b/grade/report/singleview/amd/build/bulkactions.min.js @@ -1,10 +1,10 @@ -define("gradereport_singleview/bulkactions",["exports","core/pending","core/custom_interaction_events","core/modal_factory","core/templates","core/modal_events","core/str","core/notification","gradereport_singleview/selectors"],(function(_exports,_pending,_custom_interaction_events,_modal_factory,_templates,_modal_events,Str,_notification,_selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} +define("gradereport_singleview/bulkactions",["exports","core/pending","core/custom_interaction_events","core/modal_save_cancel","core/templates","core/modal_events","core/str","core/notification","gradereport_singleview/selectors"],(function(_exports,_pending,_custom_interaction_events,_modal_save_cancel,_templates,_modal_events,Str,_notification,_selectors){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Javascript module for bulk actions. * * @module gradereport_singleview/bulkactions * @copyright 2022 Ilya Tregubov * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal_factory=_interopRequireDefault(_modal_factory),_templates=_interopRequireDefault(_templates),_modal_events=_interopRequireDefault(_modal_events),Str=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Str),_notification=_interopRequireDefault(_notification),_selectors=_interopRequireDefault(_selectors);_exports.init=()=>{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=>{const events=["click",_custom_interaction_events.default.events.activate,_custom_interaction_events.default.events.keyboardActivate];_custom_interaction_events.default.define(document,events),events.forEach((event=>{document.addEventListener(event,(async e=>{const trigger=e.target.closest(_selectors.default.actions.bulkaction);if(trigger)if("overrideallgrades"===trigger.dataset.action||"overridenonegrades"===trigger.dataset.action){const override=document.querySelectorAll(_selectors.default.elements.override);"overridenonegrades"===trigger.dataset.action?Str.get_strings([{key:"removeoverride",component:"gradereport_singleview"},{key:"overridenoneconfirm",component:"gradereport_singleview"},{key:"removeoverridesave",component:"gradereport_singleview"},{key:"cancel",component:"moodle"}]).done((strings=>{_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(()=>{override.forEach((el=>{el.checked&&el.click()}))}))})).fail(_notification.default.exception):override.forEach((el=>{el.checked||el.click()}))}else if("excludeallgrades"===trigger.dataset.action||"excludenonegrades"===trigger.dataset.action){const exclude=document.querySelectorAll(_selectors.default.elements.exclude),checked="excludeallgrades"===trigger.dataset.action;exclude.forEach((el=>{el.checked=checked}))}else"bulklegend"===trigger.dataset.action&&Str.get_strings([{key:"bulklegend",component:"gradereport_singleview"},{key:"save",component:"moodle"}]).done((strings=>{_modal_factory.default.create({type:_modal_factory.default.types.SAVE_CANCEL,body:_templates.default.render("gradereport_singleview/bulkinsert",{id:"bulkinsertmodal",name:"bulkinsertmodal"}),title:strings[0]}).then((modal=>(modal.setSaveButtonText(strings[1]),modal.getFooter().find(_selectors.default.elements.modalsave).attr("disabled",!0),modal.getRoot().on(_modal_events.default.hidden,(()=>{modal.getRoot().remove()})),modal.getRoot().on("change",_selectors.default.elements.warningcheckbox,(e=>{if(e.preventDefault(),e.target.checked){modal.getRoot().find(_selectors.default.elements.modalformdata).removeClass("dimmed_text"),modal.getRoot().find(_selectors.default.elements.modalradio).removeAttr("disabled"),modal.getRoot().find(_selectors.default.elements.modalinput).removeAttr("disabled");modal.getRoot().find(_selectors.default.elements.modalradiochecked).val()&&modal.getFooter().find(_selectors.default.elements.modalsave).removeAttr("disabled")}else modal.getRoot().find(_selectors.default.elements.modalformdata).addClass("dimmed_text"),modal.getRoot().find(_selectors.default.elements.modalradio).attr("disabled",!0),modal.getRoot().find(_selectors.default.elements.modalinput).attr("disabled",!0),modal.getFooter().find(_selectors.default.elements.modalsave).attr("disabled",!0)})),modal.getRoot().on("change",_selectors.default.elements.modalradio,(e=>{e.preventDefault(),modal.getFooter().find(_selectors.default.elements.modalsave).removeAttr("disabled")})),modal.getRoot().on(_modal_events.default.save,(()=>{document.querySelector(_selectors.default.elements.enablebulkinsert).checked=!0;const formRadioData=modal.getRoot().find(_selectors.default.elements.modalradiochecked).val();document.querySelector(_selectors.default.elements.formradio).value=formRadioData;const formData=modal.getRoot().find(_selectors.default.elements.modalgrade).val();document.querySelector(_selectors.default.elements.formgrade).value=formData,document.querySelector(_selectors.default.elements.formsave).click()})),modal.show(),modal))).fail(_notification.default.exception)})).fail(_notification.default.exception)}))}))}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=_interopRequireDefault(_pending),_custom_interaction_events=_interopRequireDefault(_custom_interaction_events),_modal_save_cancel=_interopRequireDefault(_modal_save_cancel),_templates=_interopRequireDefault(_templates),_modal_events=_interopRequireDefault(_modal_events),Str=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Str),_notification=_interopRequireDefault(_notification),_selectors=_interopRequireDefault(_selectors);_exports.init=()=>{const pendingPromise=new _pending.default;registerListenerEvents(),pendingPromise.resolve()};const registerListenerEvents=()=>{const events=["click",_custom_interaction_events.default.events.activate,_custom_interaction_events.default.events.keyboardActivate];_custom_interaction_events.default.define(document,events),events.forEach((event=>{document.addEventListener(event,(async e=>{const trigger=e.target.closest(_selectors.default.actions.bulkaction);if(trigger)if("overrideallgrades"===trigger.dataset.action||"overridenonegrades"===trigger.dataset.action){const override=document.querySelectorAll(_selectors.default.elements.override);"overridenonegrades"===trigger.dataset.action?Str.get_strings([{key:"removeoverride",component:"gradereport_singleview"},{key:"overridenoneconfirm",component:"gradereport_singleview"},{key:"removeoverridesave",component:"gradereport_singleview"},{key:"cancel",component:"moodle"}]).then((strings=>_notification.default.confirm(strings[0],strings[1],strings[2],strings[3],(()=>{override.forEach((el=>{el.checked&&el.click()}))})))).catch(_notification.default.exception):override.forEach((el=>{el.checked||el.click()}))}else if("excludeallgrades"===trigger.dataset.action||"excludenonegrades"===trigger.dataset.action){const exclude=document.querySelectorAll(_selectors.default.elements.exclude),checked="excludeallgrades"===trigger.dataset.action;exclude.forEach((el=>{el.checked=checked}))}else"bulklegend"===trigger.dataset.action&&Str.get_strings([{key:"bulklegend",component:"gradereport_singleview"},{key:"save",component:"moodle"}]).then((strings=>_modal_save_cancel.default.create({body:_templates.default.render("gradereport_singleview/bulkinsert",{id:"bulkinsertmodal",name:"bulkinsertmodal"}),title:strings[0],buttons:{save:strings[1]},removeOnClose:!0,show:!0}))).then((modal=>(modal.getFooter().find(_selectors.default.elements.modalsave).attr("disabled",!0),modal.getRoot().on("change",_selectors.default.elements.warningcheckbox,(e=>{if(e.preventDefault(),e.target.checked){modal.getRoot().find(_selectors.default.elements.modalformdata).removeClass("dimmed_text"),modal.getRoot().find(_selectors.default.elements.modalradio).removeAttr("disabled"),modal.getRoot().find(_selectors.default.elements.modalinput).removeAttr("disabled");modal.getRoot().find(_selectors.default.elements.modalradiochecked).val()&&modal.getFooter().find(_selectors.default.elements.modalsave).removeAttr("disabled")}else modal.getRoot().find(_selectors.default.elements.modalformdata).addClass("dimmed_text"),modal.getRoot().find(_selectors.default.elements.modalradio).attr("disabled",!0),modal.getRoot().find(_selectors.default.elements.modalinput).attr("disabled",!0),modal.getFooter().find(_selectors.default.elements.modalsave).attr("disabled",!0)})),modal.getRoot().on("change",_selectors.default.elements.modalradio,(e=>{e.preventDefault(),modal.getFooter().find(_selectors.default.elements.modalsave).removeAttr("disabled")})),modal.getRoot().on(_modal_events.default.save,(()=>{document.querySelector(_selectors.default.elements.enablebulkinsert).checked=!0;const formRadioData=modal.getRoot().find(_selectors.default.elements.modalradiochecked).val();document.querySelector(_selectors.default.elements.formradio).value=formRadioData;const formData=modal.getRoot().find(_selectors.default.elements.modalgrade).val();document.querySelector(_selectors.default.elements.formgrade).value=formData,document.querySelector(_selectors.default.elements.formsave).click()})),modal))).catch(_notification.default.exception)}))}))}})); //# sourceMappingURL=bulkactions.min.js.map \ No newline at end of file diff --git a/grade/report/singleview/amd/build/bulkactions.min.js.map b/grade/report/singleview/amd/build/bulkactions.min.js.map index 7eb8f160d80..0125b7e9c27 100644 --- a/grade/report/singleview/amd/build/bulkactions.min.js.map +++ b/grade/report/singleview/amd/build/bulkactions.min.js.map @@ -1 +1 @@ -{"version":3,"file":"bulkactions.min.js","sources":["../src/bulkactions.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript module for bulk actions.\n *\n * @module gradereport_singleview/bulkactions\n * @copyright 2022 Ilya Tregubov \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Pending from 'core/pending';\nimport CustomEvents from \"core/custom_interaction_events\";\nimport ModalFactory from 'core/modal_factory';\nimport Templates from 'core/templates';\nimport ModalEvents from 'core/modal_events';\nimport * as Str from 'core/str';\nimport Notification from 'core/notification';\nimport selectors from 'gradereport_singleview/selectors';\n\n/**\n * Initialize module.\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n registerListenerEvents();\n pendingPromise.resolve();\n};\n\n/**\n * Register bulk actions related event listeners.\n *\n * @method registerListenerEvents\n */\nconst registerListenerEvents = () => {\n const events = [\n 'click',\n CustomEvents.events.activate,\n CustomEvents.events.keyboardActivate\n ];\n CustomEvents.define(document, events);\n\n // Register events.\n events.forEach((event) => {\n document.addEventListener(event, async(e) => {\n const trigger = e.target.closest(selectors.actions.bulkaction);\n\n if (trigger) {\n if ((trigger.dataset.action === 'overrideallgrades') || (trigger.dataset.action === 'overridenonegrades')) {\n const override = document.querySelectorAll(selectors.elements.override);\n\n if (trigger.dataset.action === 'overridenonegrades') {\n // Alert for removing all grade overrides on page.\n Str.get_strings([\n {key: 'removeoverride', component: 'gradereport_singleview'},\n {key: 'overridenoneconfirm', component: 'gradereport_singleview'},\n {key: 'removeoverridesave', component: 'gradereport_singleview'},\n {key: 'cancel', component: 'moodle'},\n ]).done((strings) => {\n Notification.confirm(\n strings[0],\n strings[1],\n strings[2],\n strings[3],\n () => {\n // Uncheck each override checkbox - this will make grade and feedback input fields disabled.\n override.forEach((el) => {\n if (el.checked) {\n el.click();\n }\n });\n });\n }).fail(Notification.exception);\n\n } else {\n // Check each override checkbox - this will make grade and feedback input fields enabled.\n override.forEach((el) => {\n if (!el.checked) {\n el.click();\n }\n });\n }\n } else if ((trigger.dataset.action === 'excludeallgrades') || (trigger.dataset.action === 'excludenonegrades')) {\n const exclude = document.querySelectorAll(selectors.elements.exclude);\n const checked = (trigger.dataset.action === 'excludeallgrades');\n // Uncheck or check each exclude checkbox.\n exclude.forEach((el) => {\n el.checked = checked;\n });\n } else if (trigger.dataset.action === 'bulklegend') {\n // Modal for bulk insert grades.\n Str.get_strings([\n {key: 'bulklegend', component: 'gradereport_singleview'},\n {key: 'save', component: 'moodle'},\n ]).done((strings) => {\n ModalFactory.create({\n type: ModalFactory.types.SAVE_CANCEL,\n body: Templates.render('gradereport_singleview/bulkinsert', {\n id: 'bulkinsertmodal',\n name: 'bulkinsertmodal'\n }),\n title: strings[0],\n }).then((modal) => {\n modal.setSaveButtonText(strings[1]);\n modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true);\n\n modal.getRoot().on(ModalEvents.hidden, () => {\n modal.getRoot().remove();\n });\n\n // We need to acknowledge that we understand risks of loosing data.\n // Only when acknowledge checkbox is checked we allow selecting insert options.\n modal.getRoot().on('change', selectors.elements.warningcheckbox,\n (e) => {\n e.preventDefault();\n if (e.target.checked) {\n modal.getRoot().find(selectors.elements.modalformdata).removeClass('dimmed_text');\n modal.getRoot().find(selectors.elements.modalradio).removeAttr('disabled');\n modal.getRoot().find(selectors.elements.modalinput).removeAttr('disabled');\n\n const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val();\n // We allow saving grades only when all needed data present on form.\n if (formRadioData) {\n modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled');\n }\n } else {\n modal.getRoot().find(selectors.elements.modalformdata).addClass('dimmed_text');\n modal.getRoot().find(selectors.elements.modalradio).attr('disabled', true);\n modal.getRoot().find(selectors.elements.modalinput).attr('disabled', true);\n modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true);\n }\n });\n\n // We allow saving grades only when all needed data present on form.\n modal.getRoot().on('change', selectors.elements.modalradio,\n (e) => {\n e.preventDefault();\n modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled');\n });\n\n modal.getRoot().on(ModalEvents.save, () => {\n // When save button is clicked in modal form we insert data from modal\n // into preexisted hidden bulk insert form and Save button for table form.\n document.querySelector(selectors.elements.enablebulkinsert).checked = true;\n const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val();\n const $select = document.querySelector(selectors.elements.formradio);\n $select.value = formRadioData;\n\n const formData = modal.getRoot().find(selectors.elements.modalgrade).val();\n document.querySelector(selectors.elements.formgrade).value = formData;\n document.querySelector(selectors.elements.formsave).click();\n });\n\n modal.show();\n\n return modal;\n }).fail(Notification.exception);\n }).fail(Notification.exception);\n }\n }\n });\n });\n};\n"],"names":["pendingPromise","Pending","registerListenerEvents","resolve","events","CustomEvents","activate","keyboardActivate","define","document","forEach","event","addEventListener","async","trigger","e","target","closest","selectors","actions","bulkaction","dataset","action","override","querySelectorAll","elements","Str","get_strings","key","component","done","strings","confirm","el","checked","click","fail","Notification","exception","exclude","create","type","ModalFactory","types","SAVE_CANCEL","body","Templates","render","id","name","title","then","modal","setSaveButtonText","getFooter","find","modalsave","attr","getRoot","on","ModalEvents","hidden","remove","warningcheckbox","preventDefault","modalformdata","removeClass","modalradio","removeAttr","modalinput","modalradiochecked","val","addClass","save","querySelector","enablebulkinsert","formRadioData","formradio","value","formData","modalgrade","formgrade","formsave","show"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bulkactions.min.js","sources":["../src/bulkactions.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Javascript module for bulk actions.\n *\n * @module gradereport_singleview/bulkactions\n * @copyright 2022 Ilya Tregubov \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Pending from 'core/pending';\nimport CustomEvents from \"core/custom_interaction_events\";\nimport ModalSaveCancel from 'core/modal_save_cancel';\nimport Templates from 'core/templates';\nimport ModalEvents from 'core/modal_events';\nimport * as Str from 'core/str';\nimport Notification from 'core/notification';\nimport selectors from 'gradereport_singleview/selectors';\n\n/**\n * Initialize module.\n */\nexport const init = () => {\n const pendingPromise = new Pending();\n registerListenerEvents();\n pendingPromise.resolve();\n};\n\n/**\n * Register bulk actions related event listeners.\n *\n * @method registerListenerEvents\n */\nconst registerListenerEvents = () => {\n const events = [\n 'click',\n CustomEvents.events.activate,\n CustomEvents.events.keyboardActivate\n ];\n CustomEvents.define(document, events);\n\n // Register events.\n events.forEach((event) => {\n document.addEventListener(event, async(e) => {\n const trigger = e.target.closest(selectors.actions.bulkaction);\n\n if (!trigger) {\n return;\n }\n if ((trigger.dataset.action === 'overrideallgrades') || (trigger.dataset.action === 'overridenonegrades')) {\n const override = document.querySelectorAll(selectors.elements.override);\n\n if (trigger.dataset.action === 'overridenonegrades') {\n // Alert for removing all grade overrides on page.\n Str.get_strings([\n {key: 'removeoverride', component: 'gradereport_singleview'},\n {key: 'overridenoneconfirm', component: 'gradereport_singleview'},\n {key: 'removeoverridesave', component: 'gradereport_singleview'},\n {key: 'cancel', component: 'moodle'},\n ])\n .then((strings) => {\n return Notification.confirm(\n strings[0],\n strings[1],\n strings[2],\n strings[3],\n () => {\n // Uncheck each override checkbox - this will make grade and feedback input fields disabled.\n override.forEach((el) => {\n if (el.checked) {\n el.click();\n }\n });\n });\n })\n .catch(Notification.exception);\n\n } else {\n // Check each override checkbox - this will make grade and feedback input fields enabled.\n override.forEach((el) => {\n if (!el.checked) {\n el.click();\n }\n });\n }\n } else if ((trigger.dataset.action === 'excludeallgrades') || (trigger.dataset.action === 'excludenonegrades')) {\n const exclude = document.querySelectorAll(selectors.elements.exclude);\n const checked = (trigger.dataset.action === 'excludeallgrades');\n // Uncheck or check each exclude checkbox.\n exclude.forEach((el) => {\n el.checked = checked;\n });\n } else if (trigger.dataset.action === 'bulklegend') {\n // Modal for bulk insert grades.\n Str.get_strings([\n {key: 'bulklegend', component: 'gradereport_singleview'},\n {key: 'save', component: 'moodle'},\n ])\n .then((strings) => {\n return ModalSaveCancel.create({\n body: Templates.render('gradereport_singleview/bulkinsert', {\n id: 'bulkinsertmodal',\n name: 'bulkinsertmodal'\n }),\n title: strings[0],\n buttons: {\n save: strings[1],\n },\n removeOnClose: true,\n show: true,\n });\n })\n .then((modal) => {\n modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true);\n\n // We need to acknowledge that we understand risks of loosing data.\n // Only when acknowledge checkbox is checked we allow selecting insert options.\n modal.getRoot().on('change', selectors.elements.warningcheckbox,\n (e) => {\n e.preventDefault();\n if (e.target.checked) {\n modal.getRoot().find(selectors.elements.modalformdata).removeClass('dimmed_text');\n modal.getRoot().find(selectors.elements.modalradio).removeAttr('disabled');\n modal.getRoot().find(selectors.elements.modalinput).removeAttr('disabled');\n\n const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val();\n // We allow saving grades only when all needed data present on form.\n if (formRadioData) {\n modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled');\n }\n } else {\n modal.getRoot().find(selectors.elements.modalformdata).addClass('dimmed_text');\n modal.getRoot().find(selectors.elements.modalradio).attr('disabled', true);\n modal.getRoot().find(selectors.elements.modalinput).attr('disabled', true);\n modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true);\n }\n });\n\n // We allow saving grades only when all needed data present on form.\n modal.getRoot().on('change', selectors.elements.modalradio, (e) => {\n e.preventDefault();\n modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled');\n });\n\n modal.getRoot().on(ModalEvents.save, () => {\n // When save button is clicked in modal form we insert data from modal\n // into preexisted hidden bulk insert form and Save button for table form.\n document.querySelector(selectors.elements.enablebulkinsert).checked = true;\n const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val();\n const $select = document.querySelector(selectors.elements.formradio);\n $select.value = formRadioData;\n\n const formData = modal.getRoot().find(selectors.elements.modalgrade).val();\n document.querySelector(selectors.elements.formgrade).value = formData;\n document.querySelector(selectors.elements.formsave).click();\n });\n\n return modal;\n })\n .catch(Notification.exception);\n }\n });\n });\n};\n"],"names":["pendingPromise","Pending","registerListenerEvents","resolve","events","CustomEvents","activate","keyboardActivate","define","document","forEach","event","addEventListener","async","trigger","e","target","closest","selectors","actions","bulkaction","dataset","action","override","querySelectorAll","elements","Str","get_strings","key","component","then","strings","Notification","confirm","el","checked","click","catch","exception","exclude","ModalSaveCancel","create","body","Templates","render","id","name","title","buttons","save","removeOnClose","show","modal","getFooter","find","modalsave","attr","getRoot","on","warningcheckbox","preventDefault","modalformdata","removeClass","modalradio","removeAttr","modalinput","modalradiochecked","val","addClass","ModalEvents","querySelector","enablebulkinsert","formRadioData","formradio","value","formData","modalgrade","formgrade","formsave"],"mappings":"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"} \ No newline at end of file diff --git a/grade/report/singleview/amd/src/bulkactions.js b/grade/report/singleview/amd/src/bulkactions.js index 0fa9bca8c33..ba6b7cda522 100644 --- a/grade/report/singleview/amd/src/bulkactions.js +++ b/grade/report/singleview/amd/src/bulkactions.js @@ -23,7 +23,7 @@ import Pending from 'core/pending'; import CustomEvents from "core/custom_interaction_events"; -import ModalFactory from 'core/modal_factory'; +import ModalSaveCancel from 'core/modal_save_cancel'; import Templates from 'core/templates'; import ModalEvents from 'core/modal_events'; import * as Str from 'core/str'; @@ -57,118 +57,120 @@ const registerListenerEvents = () => { document.addEventListener(event, async(e) => { const trigger = e.target.closest(selectors.actions.bulkaction); - if (trigger) { - if ((trigger.dataset.action === 'overrideallgrades') || (trigger.dataset.action === 'overridenonegrades')) { - const override = document.querySelectorAll(selectors.elements.override); + if (!trigger) { + return; + } + if ((trigger.dataset.action === 'overrideallgrades') || (trigger.dataset.action === 'overridenonegrades')) { + const override = document.querySelectorAll(selectors.elements.override); - if (trigger.dataset.action === 'overridenonegrades') { - // Alert for removing all grade overrides on page. - Str.get_strings([ - {key: 'removeoverride', component: 'gradereport_singleview'}, - {key: 'overridenoneconfirm', component: 'gradereport_singleview'}, - {key: 'removeoverridesave', component: 'gradereport_singleview'}, - {key: 'cancel', component: 'moodle'}, - ]).done((strings) => { - Notification.confirm( - strings[0], - strings[1], - strings[2], - strings[3], - () => { - // Uncheck each override checkbox - this will make grade and feedback input fields disabled. - override.forEach((el) => { - if (el.checked) { - el.click(); - } - }); - }); - }).fail(Notification.exception); - - } else { - // Check each override checkbox - this will make grade and feedback input fields enabled. - override.forEach((el) => { - if (!el.checked) { - el.click(); - } - }); - } - } else if ((trigger.dataset.action === 'excludeallgrades') || (trigger.dataset.action === 'excludenonegrades')) { - const exclude = document.querySelectorAll(selectors.elements.exclude); - const checked = (trigger.dataset.action === 'excludeallgrades'); - // Uncheck or check each exclude checkbox. - exclude.forEach((el) => { - el.checked = checked; - }); - } else if (trigger.dataset.action === 'bulklegend') { - // Modal for bulk insert grades. + if (trigger.dataset.action === 'overridenonegrades') { + // Alert for removing all grade overrides on page. Str.get_strings([ - {key: 'bulklegend', component: 'gradereport_singleview'}, - {key: 'save', component: 'moodle'}, - ]).done((strings) => { - ModalFactory.create({ - type: ModalFactory.types.SAVE_CANCEL, - body: Templates.render('gradereport_singleview/bulkinsert', { - id: 'bulkinsertmodal', - name: 'bulkinsertmodal' - }), - title: strings[0], - }).then((modal) => { - modal.setSaveButtonText(strings[1]); - modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true); - - modal.getRoot().on(ModalEvents.hidden, () => { - modal.getRoot().remove(); - }); - - // We need to acknowledge that we understand risks of loosing data. - // Only when acknowledge checkbox is checked we allow selecting insert options. - modal.getRoot().on('change', selectors.elements.warningcheckbox, - (e) => { - e.preventDefault(); - if (e.target.checked) { - modal.getRoot().find(selectors.elements.modalformdata).removeClass('dimmed_text'); - modal.getRoot().find(selectors.elements.modalradio).removeAttr('disabled'); - modal.getRoot().find(selectors.elements.modalinput).removeAttr('disabled'); - - const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val(); - // We allow saving grades only when all needed data present on form. - if (formRadioData) { - modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled'); - } - } else { - modal.getRoot().find(selectors.elements.modalformdata).addClass('dimmed_text'); - modal.getRoot().find(selectors.elements.modalradio).attr('disabled', true); - modal.getRoot().find(selectors.elements.modalinput).attr('disabled', true); - modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true); + {key: 'removeoverride', component: 'gradereport_singleview'}, + {key: 'overridenoneconfirm', component: 'gradereport_singleview'}, + {key: 'removeoverridesave', component: 'gradereport_singleview'}, + {key: 'cancel', component: 'moodle'}, + ]) + .then((strings) => { + return Notification.confirm( + strings[0], + strings[1], + strings[2], + strings[3], + () => { + // Uncheck each override checkbox - this will make grade and feedback input fields disabled. + override.forEach((el) => { + if (el.checked) { + el.click(); } }); - - // We allow saving grades only when all needed data present on form. - modal.getRoot().on('change', selectors.elements.modalradio, - (e) => { - e.preventDefault(); - modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled'); - }); - - modal.getRoot().on(ModalEvents.save, () => { - // When save button is clicked in modal form we insert data from modal - // into preexisted hidden bulk insert form and Save button for table form. - document.querySelector(selectors.elements.enablebulkinsert).checked = true; - const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val(); - const $select = document.querySelector(selectors.elements.formradio); - $select.value = formRadioData; - - const formData = modal.getRoot().find(selectors.elements.modalgrade).val(); - document.querySelector(selectors.elements.formgrade).value = formData; - document.querySelector(selectors.elements.formsave).click(); }); + }) + .catch(Notification.exception); - modal.show(); - - return modal; - }).fail(Notification.exception); - }).fail(Notification.exception); + } else { + // Check each override checkbox - this will make grade and feedback input fields enabled. + override.forEach((el) => { + if (!el.checked) { + el.click(); + } + }); } + } else if ((trigger.dataset.action === 'excludeallgrades') || (trigger.dataset.action === 'excludenonegrades')) { + const exclude = document.querySelectorAll(selectors.elements.exclude); + const checked = (trigger.dataset.action === 'excludeallgrades'); + // Uncheck or check each exclude checkbox. + exclude.forEach((el) => { + el.checked = checked; + }); + } else if (trigger.dataset.action === 'bulklegend') { + // Modal for bulk insert grades. + Str.get_strings([ + {key: 'bulklegend', component: 'gradereport_singleview'}, + {key: 'save', component: 'moodle'}, + ]) + .then((strings) => { + return ModalSaveCancel.create({ + body: Templates.render('gradereport_singleview/bulkinsert', { + id: 'bulkinsertmodal', + name: 'bulkinsertmodal' + }), + title: strings[0], + buttons: { + save: strings[1], + }, + removeOnClose: true, + show: true, + }); + }) + .then((modal) => { + modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true); + + // We need to acknowledge that we understand risks of loosing data. + // Only when acknowledge checkbox is checked we allow selecting insert options. + modal.getRoot().on('change', selectors.elements.warningcheckbox, + (e) => { + e.preventDefault(); + if (e.target.checked) { + modal.getRoot().find(selectors.elements.modalformdata).removeClass('dimmed_text'); + modal.getRoot().find(selectors.elements.modalradio).removeAttr('disabled'); + modal.getRoot().find(selectors.elements.modalinput).removeAttr('disabled'); + + const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val(); + // We allow saving grades only when all needed data present on form. + if (formRadioData) { + modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled'); + } + } else { + modal.getRoot().find(selectors.elements.modalformdata).addClass('dimmed_text'); + modal.getRoot().find(selectors.elements.modalradio).attr('disabled', true); + modal.getRoot().find(selectors.elements.modalinput).attr('disabled', true); + modal.getFooter().find(selectors.elements.modalsave).attr('disabled', true); + } + }); + + // We allow saving grades only when all needed data present on form. + modal.getRoot().on('change', selectors.elements.modalradio, (e) => { + e.preventDefault(); + modal.getFooter().find(selectors.elements.modalsave).removeAttr('disabled'); + }); + + modal.getRoot().on(ModalEvents.save, () => { + // When save button is clicked in modal form we insert data from modal + // into preexisted hidden bulk insert form and Save button for table form. + document.querySelector(selectors.elements.enablebulkinsert).checked = true; + const formRadioData = modal.getRoot().find(selectors.elements.modalradiochecked).val(); + const $select = document.querySelector(selectors.elements.formradio); + $select.value = formRadioData; + + const formData = modal.getRoot().find(selectors.elements.modalgrade).val(); + document.querySelector(selectors.elements.formgrade).value = formData; + document.querySelector(selectors.elements.formsave).click(); + }); + + return modal; + }) + .catch(Notification.exception); } }); }); diff --git a/lib/amd/build/tag.min.js b/lib/amd/build/tag.min.js index 89d35609428..328a923d1b6 100644 --- a/lib/amd/build/tag.min.js +++ b/lib/amd/build/tag.min.js @@ -6,6 +6,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.0 */ -define("core/tag",["jquery","core/ajax","core/templates","core/notification","core/str","core/modal_factory","core/modal_events","core/pending"],(function($,ajax,templates,notification,str,ModalFactory,ModalEvents,Pending){return{initTagindexPage:function(){$("body").delegate(".tagarea[data-ta] a[data-quickload=1]","click",(function(e){var pendingPromise=new Pending("core/tag:initTagindexPage");e.preventDefault();var target=$(this),query=target[0].search.replace(/^\?/,""),tagarea=target.closest(".tagarea[data-ta]"),args=query.split("&").reduce((function(s,c){var t=c.split("=");return s[t[0]]=decodeURIComponent(t[1]),s}),{});ajax.call([{methodname:"core_tag_get_tagindex",args:{tagindex:args}}])[0].then((function(data){return templates.render("core_tag/index",data)})).then((function(html,js){templates.replaceNode(tagarea,html,js)})).always(pendingPromise.resolve).catch(notification.exception)}))},initManagePage:function(){$("body").on("updated","[data-inplaceeditable]",(function(e){var pendingPromise=new Pending("core/tag:initManagePage");if(str.get_strings([{key:"selecttag",component:"core_tag"},{key:"now",component:"core"}]).then((function(result){$('label[for="tagselect'+e.ajaxreturn.itemid+'"]').html(result[0]),$(e.target).closest("tr").find("td.col-timemodified").html(result[1])})).always(pendingPromise.resolve).catch(notification.exception),"tagflag"===e.ajaxreturn.itemtype){var row=$(e.target).closest("tr");"0"===e.ajaxreturn.value?row.removeClass("table-warning"):row.addClass("table-warning")}})),$(".tag-management-table").delegate("a.tagdelete","click",(function(e){var pendingPromise=new Pending("core/tag:tagdelete");e.preventDefault();var href=$(this).attr("href");str.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetag",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)})),$("#tag-management-delete").click((function(e){var form=$(this).closest("form").get(0);if($(form).find("input[data-togglegroup='tags-manage'][data-toggle='slave']:checked").length){var pendingPromise=new Pending("core/tag:tag-management-delete"),tempElement=$("").attr("name",this.name);e.preventDefault(),str.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetags",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){tempElement.appendTo(form),form.submit()}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$("#tag-management-combine").click((function(e){var pendingPromise=new Pending("core/tag:tag-management-combine");e.preventDefault();var form=$(this).closest("form").get(0),tags=$(form).find("input[data-togglegroup='tags-manage'][data-toggle='slave']:checked");if(tags.length<=1)str.get_strings([{key:"combineselected",component:"tag"},{key:"selectmultipletags",component:"tag"},{key:"ok"}]).then((function(s){return notification.alert(s[0],s[1],s[2])})).always(pendingPromise.resolve).catch(notification.exception);else{var tempElement=$("").attr("name",this.name),saveButtonText="",tagOptions=[];tags.each((function(){var tagid=$(this).val(),tagname=$(".inplaceeditable[data-itemtype=tagname][data-itemid="+tagid+"]").attr("data-value");tagOptions.push({id:tagid,name:tagname})})),str.get_strings([{key:"combineselected",component:"tag"},{key:"continue",component:"core"}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={tags:tagOptions};return ModalFactory.create({title:modalTitle,body:templates.render("core_tag/combine_tags",templateContext),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(saveButtonText),modal})).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),tempElement.appendTo(form);var maintag=$("input[name=maintag]:checked","#combinetags_form").val();$("").attr("name","maintag").attr("value",maintag).appendTo(form),form.submit()})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),$("#combinetags_form input[type=radio]").first().focus().prop("checked",!0)})).always(pendingPromise.resolve).catch(notification.exception)}})),$("body").on("updatefailed","[data-inplaceeditable][data-itemtype=tagname]",(function(e){var exception=e.exception,newvalue=e.newvalue,tagid=$(e.target).attr("data-itemid");if("namesalreadybeeingused"===exception.errorcode){var pendingPromise=new Pending("core/tag:updatefailed");e.preventDefault(),str.get_strings([{key:"confirm",component:"core"},{key:"nameuseddocombine",component:"tag"},{key:"yes",component:"core"},{key:"cancel",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=window.location.href+"&newname="+encodeURIComponent(newvalue)+"&tagid="+encodeURIComponent(tagid)+"&action=renamecombine&sesskey="+M.cfg.sesskey}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$("body").on("click","a[data-action=addstandardtag]",(function(e){var pendingPromise=new Pending("core/tag:addstandardtag");return e.preventDefault(),ModalFactory.create({title:str.get_string("addotags","tag"),body:templates.render("core_tag/add_tags",{actionurl:window.location.href,sesskey:M.cfg.sesskey}),type:ModalFactory.types.SAVE_CANCEL}).then((function(modal){modal.setSaveButtonText(str.get_string("continue","core")),modal.getRoot().on(ModalEvents.save,(function(e){var tagsInput=$(e.currentTarget).find("#id_tagslist"),name=tagsInput.val().trim();tagsInput.val(name);var tagsForm=$("#addtags_form");return tagsForm.on("submit",(function(e){var form=$("#addtags_form");!1===form[0].checkValidity()&&(e.preventDefault(),e.stopPropagation()),form.addClass("was-validated"),$('[data-region="tagslistinput"]').addClass("error");var errorMessage=$("#id_tagslist_error_message");errorMessage.removeAttr("hidden"),errorMessage.addClass("help-block")})),tagsForm.submit(),!1})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show()})).always(pendingPromise.resolve).catch(notification.exception)}))},initManageCollectionsPage:function(){$("body").on("updated","[data-inplaceeditable]",(function(e){var areaid,collid,pendingPromise=new Pending("core/tag:initManageCollectionsPage-updated"),ajaxreturn=e.ajaxreturn;"core_tag"===ajaxreturn.component&&"tagareaenable"===ajaxreturn.itemtype&&(areaid=$(this).attr("data-itemid"),$(".tag-collections-table ul[data-collectionid] li[data-areaid="+areaid+"]").hide(),"1"===ajaxreturn.value?($(this).closest("tr").removeClass("dimmed_text"),collid=$(this).closest("tr").find('[data-itemtype="tagareacollection"]').attr("data-value"),$(".tag-collections-table ul[data-collectionid="+collid+"] li[data-areaid="+areaid+"]").show()):$(this).closest("tr").addClass("dimmed_text")),"core_tag"===ajaxreturn.component&&"tagareacollection"===ajaxreturn.itemtype&&(areaid=$(this).attr("data-itemid"),$(".tag-collections-table ul[data-collectionid] li[data-areaid="+areaid+"]").hide(),collid=$(this).attr("data-value"),"1"===$(this).closest("tr").find('[data-itemtype="tagareaenable"]').attr("data-value")&&$(".tag-collections-table ul[data-collectionid="+collid+"] li[data-areaid="+areaid+"]").show()),pendingPromise.resolve()})),$("body").on("click",".addtagcoll > a",(function(e){var pendingPromise=new Pending("core/tag:initManageCollectionsPage-addtagcoll");e.preventDefault();var href=$(this).attr("data-url"),saveButtonText="";str.get_strings([{key:"addtagcoll",component:"tag"},{key:"create",component:"core"}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={actionurl:href,sesskey:M.cfg.sesskey};return ModalFactory.create({title:modalTitle,body:templates.render("core_tag/add_tag_collection",templateContext),type:ModalFactory.types.SAVE_CANCEL})})).then((function(modal){return modal.setSaveButtonText(saveButtonText),modal.getRoot().on(ModalEvents.save,(function(e){var collectionInput=$(e.currentTarget).find("#addtagcoll_name"),name=collectionInput.val().trim();collectionInput.val(name);var form=$("#addtagcoll_form");return form.on("submit",(function(e){!1===form[0].checkValidity()&&(e.preventDefault(),e.stopPropagation()),form.addClass("was-validated"),$('[data-region="addtagcoll_nameinput"]').addClass("error");var errorMessage=$("#id_addtagcoll_name_error_message");errorMessage.removeAttr("hidden"),errorMessage.addClass("help-block")})),form.submit(),!1})),modal.getRoot().on(ModalEvents.hidden,(function(){modal.destroy()})),modal.show(),modal})).always(pendingPromise.resolve).catch(notification.exception)})),$("body").on("click",".tag-collections-table .action_delete",(function(e){var pendingPromise=new Pending("core/tag:initManageCollectionsPage-action_delete");e.preventDefault();var href=$(this).attr("data-url")+"&sesskey="+M.cfg.sesskey;str.get_strings([{key:"delete"},{key:"suredeletecoll",component:"tag",param:$(this).attr("data-collname")},{key:"yes"},{key:"no"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)}))}}})); +define("core/tag",["jquery","core/ajax","core/templates","core/notification","core/str","core/modal_save_cancel","core/modal_events","core/pending"],(function($,ajax,templates,notification,str,SaveCancelModal,ModalEvents,Pending){return{initTagindexPage:function(){$("body").delegate(".tagarea[data-ta] a[data-quickload=1]","click",(function(e){var pendingPromise=new Pending("core/tag:initTagindexPage");e.preventDefault();var target=$(this),query=target[0].search.replace(/^\?/,""),tagarea=target.closest(".tagarea[data-ta]"),args=query.split("&").reduce((function(s,c){var t=c.split("=");return s[t[0]]=decodeURIComponent(t[1]),s}),{});ajax.call([{methodname:"core_tag_get_tagindex",args:{tagindex:args}}])[0].then((function(data){return templates.render("core_tag/index",data)})).then((function(html,js){templates.replaceNode(tagarea,html,js)})).always(pendingPromise.resolve).catch(notification.exception)}))},initManagePage:function(){$("body").on("updated","[data-inplaceeditable]",(function(e){var pendingPromise=new Pending("core/tag:initManagePage");if(str.get_strings([{key:"selecttag",component:"core_tag"},{key:"now",component:"core"}]).then((function(result){$('label[for="tagselect'+e.ajaxreturn.itemid+'"]').html(result[0]),$(e.target).closest("tr").find("td.col-timemodified").html(result[1])})).always(pendingPromise.resolve).catch(notification.exception),"tagflag"===e.ajaxreturn.itemtype){var row=$(e.target).closest("tr");"0"===e.ajaxreturn.value?row.removeClass("table-warning"):row.addClass("table-warning")}})),$(".tag-management-table").delegate("a.tagdelete","click",(function(e){var pendingPromise=new Pending("core/tag:tagdelete");e.preventDefault();var href=$(this).attr("href");str.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetag",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)})),$("#tag-management-delete").click((function(e){var form=$(this).closest("form").get(0);if($(form).find("input[data-togglegroup='tags-manage'][data-toggle='slave']:checked").length){var pendingPromise=new Pending("core/tag:tag-management-delete"),tempElement=$("").attr("name",this.name);e.preventDefault(),str.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetags",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){tempElement.appendTo(form),form.submit()}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$("#tag-management-combine").click((function(e){var pendingPromise=new Pending("core/tag:tag-management-combine");e.preventDefault();var form=$(this).closest("form").get(0),tags=$(form).find("input[data-togglegroup='tags-manage'][data-toggle='slave']:checked");if(tags.length<=1)str.get_strings([{key:"combineselected",component:"tag"},{key:"selectmultipletags",component:"tag"},{key:"ok"}]).then((function(s){return notification.alert(s[0],s[1],s[2])})).always(pendingPromise.resolve).catch(notification.exception);else{var tempElement=$("").attr("name",this.name),saveButtonText="",tagOptions=[];tags.each((function(){var tagid=$(this).val(),tagname=$(".inplaceeditable[data-itemtype=tagname][data-itemid="+tagid+"]").attr("data-value");tagOptions.push({id:tagid,name:tagname})})),str.get_strings([{key:"combineselected",component:"tag"},{key:"continue",component:"core"}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={tags:tagOptions};return SaveCancelModal.create({title:modalTitle,body:templates.render("core_tag/combine_tags",templateContext),buttons:{save:saveButtonText},show:!0,removeOnClose:!0})})).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){e.preventDefault(),tempElement.appendTo(form);var maintag=$("input[name=maintag]:checked","#combinetags_form").val();$("").attr("name","maintag").attr("value",maintag).appendTo(form),form.submit()})),$("#combinetags_form input[type=radio]").first().focus().prop("checked",!0)})).always(pendingPromise.resolve).catch(notification.exception)}})),$("body").on("updatefailed","[data-inplaceeditable][data-itemtype=tagname]",(function(e){var exception=e.exception,newvalue=e.newvalue,tagid=$(e.target).attr("data-itemid");if("namesalreadybeeingused"===exception.errorcode){var pendingPromise=new Pending("core/tag:updatefailed");e.preventDefault(),str.get_strings([{key:"confirm",component:"core"},{key:"nameuseddocombine",component:"tag"},{key:"yes",component:"core"},{key:"cancel",component:"core"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=window.location.href+"&newname="+encodeURIComponent(newvalue)+"&tagid="+encodeURIComponent(tagid)+"&action=renamecombine&sesskey="+M.cfg.sesskey}))})).always(pendingPromise.resolve).catch(notification.exception)}})),$("body").on("click","a[data-action=addstandardtag]",(function(e){var pendingPromise=new Pending("core/tag:addstandardtag");return e.preventDefault(),SaveCancelModal.create({title:str.get_string("addotags","tag"),body:templates.render("core_tag/add_tags",{actionurl:window.location.href,sesskey:M.cfg.sesskey}),buttons:{save:str.get_string("continue","core")},show:!0,removeOnClose:!0}).then((function(modal){modal.getRoot().on(ModalEvents.save,(function(e){var tagsInput=$(e.currentTarget).find("#id_tagslist"),name=tagsInput.val().trim();tagsInput.val(name);var tagsForm=$("#addtags_form");return tagsForm.on("submit",(function(e){var form=$("#addtags_form");!1===form[0].checkValidity()&&(e.preventDefault(),e.stopPropagation()),form.addClass("was-validated"),$('[data-region="tagslistinput"]').addClass("error");var errorMessage=$("#id_tagslist_error_message");errorMessage.removeAttr("hidden"),errorMessage.addClass("help-block")})),tagsForm.submit(),!1}))})).always(pendingPromise.resolve).catch(notification.exception)}))},initManageCollectionsPage:function(){$("body").on("updated","[data-inplaceeditable]",(function(e){var areaid,collid,pendingPromise=new Pending("core/tag:initManageCollectionsPage-updated"),ajaxreturn=e.ajaxreturn;"core_tag"===ajaxreturn.component&&"tagareaenable"===ajaxreturn.itemtype&&(areaid=$(this).attr("data-itemid"),$(".tag-collections-table ul[data-collectionid] li[data-areaid="+areaid+"]").hide(),"1"===ajaxreturn.value?($(this).closest("tr").removeClass("dimmed_text"),collid=$(this).closest("tr").find('[data-itemtype="tagareacollection"]').attr("data-value"),$(".tag-collections-table ul[data-collectionid="+collid+"] li[data-areaid="+areaid+"]").show()):$(this).closest("tr").addClass("dimmed_text")),"core_tag"===ajaxreturn.component&&"tagareacollection"===ajaxreturn.itemtype&&(areaid=$(this).attr("data-itemid"),$(".tag-collections-table ul[data-collectionid] li[data-areaid="+areaid+"]").hide(),collid=$(this).attr("data-value"),"1"===$(this).closest("tr").find('[data-itemtype="tagareaenable"]').attr("data-value")&&$(".tag-collections-table ul[data-collectionid="+collid+"] li[data-areaid="+areaid+"]").show()),pendingPromise.resolve()})),$("body").on("click",".addtagcoll > a",(function(e){var pendingPromise=new Pending("core/tag:initManageCollectionsPage-addtagcoll");e.preventDefault();var href=$(this).attr("data-url"),saveButtonText="";str.get_strings([{key:"addtagcoll",component:"tag"},{key:"create",component:"core"}]).then((function(langStrings){var modalTitle=langStrings[0];saveButtonText=langStrings[1];var templateContext={actionurl:href,sesskey:M.cfg.sesskey};return SaveCancelModal.create({title:modalTitle,body:templates.render("core_tag/add_tag_collection",templateContext),buttons:{save:saveButtonText},show:!0,removeOnClose:!0})})).then((function(modal){return modal.getRoot().on(ModalEvents.save,(function(e){var collectionInput=$(e.currentTarget).find("#addtagcoll_name"),name=collectionInput.val().trim();collectionInput.val(name);var form=$("#addtagcoll_form");return form.on("submit",(function(e){!1===form[0].checkValidity()&&(e.preventDefault(),e.stopPropagation()),form.addClass("was-validated"),$('[data-region="addtagcoll_nameinput"]').addClass("error");var errorMessage=$("#id_addtagcoll_name_error_message");errorMessage.removeAttr("hidden"),errorMessage.addClass("help-block")})),form.submit(),!1})),modal})).always(pendingPromise.resolve).catch(notification.exception)})),$("body").on("click",".tag-collections-table .action_delete",(function(e){var pendingPromise=new Pending("core/tag:initManageCollectionsPage-action_delete");e.preventDefault();var href=$(this).attr("data-url")+"&sesskey="+M.cfg.sesskey;str.get_strings([{key:"delete"},{key:"suredeletecoll",component:"tag",param:$(this).attr("data-collname")},{key:"yes"},{key:"no"}]).then((function(s){return notification.confirm(s[0],s[1],s[2],s[3],(function(){window.location.href=href}))})).always(pendingPromise.resolve).catch(notification.exception)}))}}})); //# sourceMappingURL=tag.min.js.map \ No newline at end of file diff --git a/lib/amd/build/tag.min.js.map b/lib/amd/build/tag.min.js.map index 9c1771b058d..2a5295636c7 100644 --- a/lib/amd/build/tag.min.js.map +++ b/lib/amd/build/tag.min.js.map @@ -1 +1 @@ -{"version":3,"file":"tag.min.js","sources":["../src/tag.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * AJAX helper for the tag management page.\n *\n * @module core/tag\n * @copyright 2015 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/templates',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/pending',\n], function(\n $,\n ajax,\n templates,\n notification,\n str,\n ModalFactory,\n ModalEvents,\n Pending\n) {\n return /** @alias module:core/tag */ {\n\n /**\n * Initialises tag index page.\n *\n * @method initTagindexPage\n */\n initTagindexPage: function() {\n // Click handler for changing tag type.\n $('body').delegate('.tagarea[data-ta] a[data-quickload=1]', 'click', function(e) {\n var pendingPromise = new Pending('core/tag:initTagindexPage');\n\n e.preventDefault();\n var target = $(this);\n var query = target[0].search.replace(/^\\?/, '');\n var tagarea = target.closest('.tagarea[data-ta]');\n var args = query.split('&').reduce(function(s, c) {\n var t = c.split('=');\n s[t[0]] = decodeURIComponent(t[1]);\n return s;\n }, {});\n\n ajax.call([{\n methodname: 'core_tag_get_tagindex',\n args: {tagindex: args}\n }])[0]\n .then(function(data) {\n return templates.render('core_tag/index', data);\n })\n .then(function(html, js) {\n templates.replaceNode(tagarea, html, js);\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag management page.\n *\n * @method initManagePage\n */\n initManagePage: function() {\n // Set cell 'time modified' to 'now' when any of the element is updated in this row.\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var pendingPromise = new Pending('core/tag:initManagePage');\n\n str.get_strings([\n {\n key: 'selecttag',\n component: 'core_tag',\n },\n {\n key: 'now',\n component: 'core',\n },\n ])\n .then(function(result) {\n $('label[for=\"tagselect' + e.ajaxreturn.itemid + '\"]').html(result[0]);\n $(e.target).closest('tr').find('td.col-timemodified').html(result[1]);\n\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n\n if (e.ajaxreturn.itemtype === 'tagflag') {\n var row = $(e.target).closest('tr');\n if (e.ajaxreturn.value === '0') {\n row.removeClass('table-warning');\n } else {\n row.addClass('table-warning');\n }\n }\n });\n\n // Confirmation for single tag delete link.\n $('.tag-management-table').delegate('a.tagdelete', 'click', function(e) {\n var pendingPromise = new Pending('core/tag:tagdelete');\n\n e.preventDefault();\n var href = $(this).attr('href');\n str.get_strings([\n {key: 'delete', component: 'core'},\n {key: 'confirmdeletetag', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // Confirmation for bulk tag delete button.\n $(\"#tag-management-delete\").click(function(e) {\n var form = $(this).closest('form').get(0);\n\n var cnt = $(form).find(\"input[data-togglegroup='tags-manage'][data-toggle='slave']:checked\").length;\n if (!cnt) {\n return;\n }\n\n var pendingPromise = new Pending('core/tag:tag-management-delete');\n var tempElement = $(\"\").attr('name', this.name);\n e.preventDefault();\n str.get_strings([\n {key: 'delete', component: 'core'},\n {key: 'confirmdeletetags', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n tempElement.appendTo(form);\n form.submit();\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // Confirmation for bulk tag combine button.\n $(\"#tag-management-combine\").click(function(e) {\n var pendingPromise = new Pending('core/tag:tag-management-combine');\n\n e.preventDefault();\n var form = $(this).closest('form').get(0);\n var tags = $(form).find(\"input[data-togglegroup='tags-manage'][data-toggle='slave']:checked\");\n\n if (tags.length <= 1) {\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'selectmultipletags', component: 'tag'},\n {key: 'ok'},\n ])\n .then(function(s) {\n return notification.alert(s[0], s[1], s[2]);\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n\n return;\n }\n\n var tempElement = $(\"\").attr('name', this.name);\n var saveButtonText = '';\n var tagOptions = [];\n tags.each(function() {\n var tagid = $(this).val(),\n tagname = $('.inplaceeditable[data-itemtype=tagname][data-itemid=' + tagid + ']').attr('data-value');\n tagOptions.push({\n id: tagid,\n name: tagname\n });\n });\n\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'continue', component: 'core'}\n ])\n .then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n tags: tagOptions\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/combine_tags', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n })\n .then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n return modal;\n })\n .then(function(modal) {\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n e.preventDefault();\n\n // Append this temp element in the form in the tags list, not the form in the modal. Confusing, right?!?\n tempElement.appendTo(form);\n // Get the selected tag from the modal.\n var maintag = $('input[name=maintag]:checked', '#combinetags_form').val();\n // Append this in the tags list form.\n $(\"\").attr('name', 'maintag').attr('value', maintag).appendTo(form);\n // Submit the tags list form.\n form.submit();\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 // Tick the first option.\n $('#combinetags_form input[type=radio]').first().focus().prop('checked', true);\n\n return;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // When user changes tag name to some name that already exists suggest to combine the tags.\n $('body').on('updatefailed', '[data-inplaceeditable][data-itemtype=tagname]', function(e) {\n var exception = e.exception; // The exception object returned by the callback.\n var newvalue = e.newvalue; // The value that user tried to udpated the element to.\n var tagid = $(e.target).attr('data-itemid');\n if (exception.errorcode === 'namesalreadybeeingused') {\n var pendingPromise = new Pending('core/tag:updatefailed');\n\n e.preventDefault(); // This will prevent default error dialogue.\n str.get_strings([\n {key: 'confirm', component: 'core'},\n {key: 'nameuseddocombine', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'cancel', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = window.location.href + \"&newname=\" + encodeURIComponent(newvalue) +\n \"&tagid=\" + encodeURIComponent(tagid) +\n '&action=renamecombine&sesskey=' + M.cfg.sesskey;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n }\n });\n\n // Form for adding standard tags.\n $('body').on('click', 'a[data-action=addstandardtag]', function(e) {\n var pendingPromise = new Pending('core/tag:addstandardtag');\n e.preventDefault();\n\n return ModalFactory.create({\n title: str.get_string('addotags', 'tag'),\n body: templates.render('core_tag/add_tags', {\n actionurl: window.location.href,\n sesskey: M.cfg.sesskey\n }),\n type: ModalFactory.types.SAVE_CANCEL\n })\n .then(function(modal) {\n modal.setSaveButtonText(str.get_string('continue', 'core'));\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var tagsInput = $(e.currentTarget).find('#id_tagslist');\n var name = tagsInput.val().trim();\n\n // Set the text field's value to the trimmed value.\n tagsInput.val(name);\n\n // Add submit event listener to the form.\n var tagsForm = $('#addtags_form');\n tagsForm.on('submit', function(e) {\n // Validate the form.\n var form = $('#addtags_form');\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"tagslistinput\"]').addClass('error');\n var errorMessage = $('#id_tagslist_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n tagsForm.submit();\n\n return 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;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag collection management page.\n *\n * @method initManageCollectionsPage\n */\n initManageCollectionsPage: function() {\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-updated');\n\n var ajaxreturn = e.ajaxreturn,\n areaid, collid, isenabled;\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n isenabled = ajaxreturn.value;\n if (isenabled === '1') {\n $(this).closest('tr').removeClass('dimmed_text');\n collid = $(this).closest('tr').find('[data-itemtype=\"tagareacollection\"]').attr(\"data-value\");\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n } else {\n $(this).closest('tr').addClass('dimmed_text');\n }\n }\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareacollection') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n collid = $(this).attr('data-value');\n isenabled = $(this).closest('tr').find('[data-itemtype=\"tagareaenable\"]').attr(\"data-value\");\n if (isenabled === \"1\") {\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n }\n }\n\n pendingPromise.resolve();\n });\n\n $('body').on('click', '.addtagcoll > a', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-addtagcoll');\n\n e.preventDefault();\n var keys = [\n {\n key: 'addtagcoll',\n component: 'tag'\n },\n {\n key: 'create',\n component: 'core'\n }\n ];\n\n var href = $(this).attr('data-url');\n var saveButtonText = '';\n str.get_strings(keys)\n .then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n actionurl: href,\n sesskey: M.cfg.sesskey\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/add_tag_collection', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n })\n .then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var collectionInput = $(e.currentTarget).find('#addtagcoll_name');\n var name = collectionInput.val().trim();\n // Set the text field's value to the trimmed value.\n collectionInput.val(name);\n\n // Add submit event listener to the form.\n var form = $('#addtagcoll_form');\n form.on('submit', function(e) {\n // Validate the form.\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"addtagcoll_nameinput\"]').addClass('error');\n var errorMessage = $('#id_addtagcoll_name_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n form.submit();\n\n return 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 modal;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n $('body').on('click', '.tag-collections-table .action_delete', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-action_delete');\n\n e.preventDefault();\n var href = $(this).attr('data-url') + '&sesskey=' + M.cfg.sesskey;\n str.get_strings([\n {key: 'delete'},\n {key: 'suredeletecoll', component: 'tag', param: $(this).attr('data-collname')},\n {key: 'yes'},\n {key: 'no'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n };\n});\n"],"names":["define","$","ajax","templates","notification","str","ModalFactory","ModalEvents","Pending","initTagindexPage","delegate","e","pendingPromise","preventDefault","target","this","query","search","replace","tagarea","closest","args","split","reduce","s","c","t","decodeURIComponent","call","methodname","tagindex","then","data","render","html","js","replaceNode","always","resolve","catch","exception","initManagePage","on","get_strings","key","component","result","ajaxreturn","itemid","find","itemtype","row","value","removeClass","addClass","href","attr","confirm","window","location","click","form","get","length","tempElement","name","appendTo","submit","tags","alert","saveButtonText","tagOptions","each","tagid","val","tagname","push","id","langStrings","modalTitle","templateContext","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","save","maintag","hidden","destroy","show","first","focus","prop","newvalue","errorcode","encodeURIComponent","M","cfg","sesskey","get_string","actionurl","tagsInput","currentTarget","trim","tagsForm","checkValidity","stopPropagation","errorMessage","removeAttr","initManageCollectionsPage","areaid","collid","hide","collectionInput","param"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tag.min.js","sources":["../src/tag.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * AJAX helper for the tag management page.\n *\n * @module core/tag\n * @copyright 2015 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/templates',\n 'core/notification',\n 'core/str',\n 'core/modal_save_cancel',\n 'core/modal_events',\n 'core/pending',\n], function(\n $,\n ajax,\n templates,\n notification,\n str,\n SaveCancelModal,\n ModalEvents,\n Pending\n) {\n return /** @alias module:core/tag */ {\n\n /**\n * Initialises tag index page.\n *\n * @method initTagindexPage\n */\n initTagindexPage: function() {\n // Click handler for changing tag type.\n $('body').delegate('.tagarea[data-ta] a[data-quickload=1]', 'click', function(e) {\n var pendingPromise = new Pending('core/tag:initTagindexPage');\n\n e.preventDefault();\n var target = $(this);\n var query = target[0].search.replace(/^\\?/, '');\n var tagarea = target.closest('.tagarea[data-ta]');\n var args = query.split('&').reduce(function(s, c) {\n var t = c.split('=');\n s[t[0]] = decodeURIComponent(t[1]);\n return s;\n }, {});\n\n ajax.call([{\n methodname: 'core_tag_get_tagindex',\n args: {tagindex: args}\n }])[0]\n .then(function(data) {\n return templates.render('core_tag/index', data);\n })\n .then(function(html, js) {\n templates.replaceNode(tagarea, html, js);\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag management page.\n *\n * @method initManagePage\n */\n initManagePage: function() {\n // Set cell 'time modified' to 'now' when any of the element is updated in this row.\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var pendingPromise = new Pending('core/tag:initManagePage');\n\n str.get_strings([\n {\n key: 'selecttag',\n component: 'core_tag',\n },\n {\n key: 'now',\n component: 'core',\n },\n ])\n .then(function(result) {\n $('label[for=\"tagselect' + e.ajaxreturn.itemid + '\"]').html(result[0]);\n $(e.target).closest('tr').find('td.col-timemodified').html(result[1]);\n\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n\n if (e.ajaxreturn.itemtype === 'tagflag') {\n var row = $(e.target).closest('tr');\n if (e.ajaxreturn.value === '0') {\n row.removeClass('table-warning');\n } else {\n row.addClass('table-warning');\n }\n }\n });\n\n // Confirmation for single tag delete link.\n $('.tag-management-table').delegate('a.tagdelete', 'click', function(e) {\n var pendingPromise = new Pending('core/tag:tagdelete');\n\n e.preventDefault();\n var href = $(this).attr('href');\n str.get_strings([\n {key: 'delete', component: 'core'},\n {key: 'confirmdeletetag', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // Confirmation for bulk tag delete button.\n $(\"#tag-management-delete\").click(function(e) {\n var form = $(this).closest('form').get(0);\n\n var cnt = $(form).find(\"input[data-togglegroup='tags-manage'][data-toggle='slave']:checked\").length;\n if (!cnt) {\n return;\n }\n\n var pendingPromise = new Pending('core/tag:tag-management-delete');\n var tempElement = $(\"\").attr('name', this.name);\n e.preventDefault();\n str.get_strings([\n {key: 'delete', component: 'core'},\n {key: 'confirmdeletetags', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n tempElement.appendTo(form);\n form.submit();\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // Confirmation for bulk tag combine button.\n $(\"#tag-management-combine\").click(function(e) {\n var pendingPromise = new Pending('core/tag:tag-management-combine');\n\n e.preventDefault();\n var form = $(this).closest('form').get(0);\n var tags = $(form).find(\"input[data-togglegroup='tags-manage'][data-toggle='slave']:checked\");\n\n if (tags.length <= 1) {\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'selectmultipletags', component: 'tag'},\n {key: 'ok'},\n ])\n .then(function(s) {\n return notification.alert(s[0], s[1], s[2]);\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n\n return;\n }\n\n var tempElement = $(\"\").attr('name', this.name);\n var saveButtonText = '';\n var tagOptions = [];\n tags.each(function() {\n var tagid = $(this).val(),\n tagname = $('.inplaceeditable[data-itemtype=tagname][data-itemid=' + tagid + ']').attr('data-value');\n tagOptions.push({\n id: tagid,\n name: tagname\n });\n });\n\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'continue', component: 'core'}\n ])\n .then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n tags: tagOptions\n };\n return SaveCancelModal.create({\n title: modalTitle,\n body: templates.render('core_tag/combine_tags', templateContext),\n buttons: {\n save: saveButtonText,\n },\n show: true,\n removeOnClose: true,\n });\n })\n .then(function(modal) {\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n e.preventDefault();\n\n // Append this temp element in the form in the tags list, not the form in the modal. Confusing, right?!?\n tempElement.appendTo(form);\n // Get the selected tag from the modal.\n var maintag = $('input[name=maintag]:checked', '#combinetags_form').val();\n // Append this in the tags list form.\n $(\"\").attr('name', 'maintag').attr('value', maintag).appendTo(form);\n // Submit the tags list form.\n form.submit();\n });\n\n // Tick the first option.\n $('#combinetags_form input[type=radio]').first().focus().prop('checked', true);\n\n return;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // When user changes tag name to some name that already exists suggest to combine the tags.\n $('body').on('updatefailed', '[data-inplaceeditable][data-itemtype=tagname]', function(e) {\n var exception = e.exception; // The exception object returned by the callback.\n var newvalue = e.newvalue; // The value that user tried to udpated the element to.\n var tagid = $(e.target).attr('data-itemid');\n if (exception.errorcode === 'namesalreadybeeingused') {\n var pendingPromise = new Pending('core/tag:updatefailed');\n\n e.preventDefault(); // This will prevent default error dialogue.\n str.get_strings([\n {key: 'confirm', component: 'core'},\n {key: 'nameuseddocombine', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'cancel', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = window.location.href + \"&newname=\" + encodeURIComponent(newvalue) +\n \"&tagid=\" + encodeURIComponent(tagid) +\n '&action=renamecombine&sesskey=' + M.cfg.sesskey;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n }\n });\n\n // Form for adding standard tags.\n $('body').on('click', 'a[data-action=addstandardtag]', function(e) {\n var pendingPromise = new Pending('core/tag:addstandardtag');\n e.preventDefault();\n\n return SaveCancelModal.create({\n title: str.get_string('addotags', 'tag'),\n body: templates.render('core_tag/add_tags', {\n actionurl: window.location.href,\n sesskey: M.cfg.sesskey\n }),\n buttons: {\n save: str.get_string('continue', 'core'),\n },\n show: true,\n removeOnClose: true,\n })\n .then(function(modal) {\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var tagsInput = $(e.currentTarget).find('#id_tagslist');\n var name = tagsInput.val().trim();\n\n // Set the text field's value to the trimmed value.\n tagsInput.val(name);\n\n // Add submit event listener to the form.\n var tagsForm = $('#addtags_form');\n tagsForm.on('submit', function(e) {\n // Validate the form.\n var form = $('#addtags_form');\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"tagslistinput\"]').addClass('error');\n var errorMessage = $('#id_tagslist_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n tagsForm.submit();\n\n return false;\n });\n\n return;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag collection management page.\n *\n * @method initManageCollectionsPage\n */\n initManageCollectionsPage: function() {\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-updated');\n\n var ajaxreturn = e.ajaxreturn,\n areaid, collid, isenabled;\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n isenabled = ajaxreturn.value;\n if (isenabled === '1') {\n $(this).closest('tr').removeClass('dimmed_text');\n collid = $(this).closest('tr').find('[data-itemtype=\"tagareacollection\"]').attr(\"data-value\");\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n } else {\n $(this).closest('tr').addClass('dimmed_text');\n }\n }\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareacollection') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n collid = $(this).attr('data-value');\n isenabled = $(this).closest('tr').find('[data-itemtype=\"tagareaenable\"]').attr(\"data-value\");\n if (isenabled === \"1\") {\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n }\n }\n\n pendingPromise.resolve();\n });\n\n $('body').on('click', '.addtagcoll > a', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-addtagcoll');\n\n e.preventDefault();\n var keys = [\n {\n key: 'addtagcoll',\n component: 'tag'\n },\n {\n key: 'create',\n component: 'core'\n }\n ];\n\n var href = $(this).attr('data-url');\n var saveButtonText = '';\n str.get_strings(keys)\n .then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n actionurl: href,\n sesskey: M.cfg.sesskey\n };\n return SaveCancelModal.create({\n title: modalTitle,\n body: templates.render('core_tag/add_tag_collection', templateContext),\n buttons: {\n save: saveButtonText,\n },\n show: true,\n removeOnClose: true,\n });\n })\n .then(function(modal) {\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var collectionInput = $(e.currentTarget).find('#addtagcoll_name');\n var name = collectionInput.val().trim();\n // Set the text field's value to the trimmed value.\n collectionInput.val(name);\n\n // Add submit event listener to the form.\n var form = $('#addtagcoll_form');\n form.on('submit', function(e) {\n // Validate the form.\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"addtagcoll_nameinput\"]').addClass('error');\n var errorMessage = $('#id_addtagcoll_name_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n form.submit();\n\n return false;\n });\n\n return modal;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n $('body').on('click', '.tag-collections-table .action_delete', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-action_delete');\n\n e.preventDefault();\n var href = $(this).attr('data-url') + '&sesskey=' + M.cfg.sesskey;\n str.get_strings([\n {key: 'delete'},\n {key: 'suredeletecoll', component: 'tag', param: $(this).attr('data-collname')},\n {key: 'yes'},\n {key: 'no'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n };\n});\n"],"names":["define","$","ajax","templates","notification","str","SaveCancelModal","ModalEvents","Pending","initTagindexPage","delegate","e","pendingPromise","preventDefault","target","this","query","search","replace","tagarea","closest","args","split","reduce","s","c","t","decodeURIComponent","call","methodname","tagindex","then","data","render","html","js","replaceNode","always","resolve","catch","exception","initManagePage","on","get_strings","key","component","result","ajaxreturn","itemid","find","itemtype","row","value","removeClass","addClass","href","attr","confirm","window","location","click","form","get","length","tempElement","name","appendTo","submit","tags","alert","saveButtonText","tagOptions","each","tagid","val","tagname","push","id","langStrings","modalTitle","templateContext","create","title","body","buttons","save","show","removeOnClose","modal","getRoot","maintag","first","focus","prop","newvalue","errorcode","encodeURIComponent","M","cfg","sesskey","get_string","actionurl","tagsInput","currentTarget","trim","tagsForm","checkValidity","stopPropagation","errorMessage","removeAttr","initManageCollectionsPage","areaid","collid","hide","collectionInput","param"],"mappings":"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"} \ No newline at end of file diff --git a/lib/amd/src/tag.js b/lib/amd/src/tag.js index 23ae3e95b0e..02b65aab4ed 100644 --- a/lib/amd/src/tag.js +++ b/lib/amd/src/tag.js @@ -27,7 +27,7 @@ define([ 'core/templates', 'core/notification', 'core/str', - 'core/modal_factory', + 'core/modal_save_cancel', 'core/modal_events', 'core/pending', ], function( @@ -36,7 +36,7 @@ define([ templates, notification, str, - ModalFactory, + SaveCancelModal, ModalEvents, Pending ) { @@ -211,17 +211,16 @@ define([ var templateContext = { tags: tagOptions }; - return ModalFactory.create({ + return SaveCancelModal.create({ title: modalTitle, body: templates.render('core_tag/combine_tags', templateContext), - type: ModalFactory.types.SAVE_CANCEL + buttons: { + save: saveButtonText, + }, + show: true, + removeOnClose: true, }); }) - .then(function(modal) { - modal.setSaveButtonText(saveButtonText); - - return modal; - }) .then(function(modal) { // Handle save event. @@ -238,13 +237,6 @@ define([ form.submit(); }); - // Handle hidden event. - modal.getRoot().on(ModalEvents.hidden, function() { - // Destroy when hidden. - modal.destroy(); - }); - - modal.show(); // Tick the first option. $('#combinetags_form input[type=radio]').first().focus().prop('checked', true); @@ -287,17 +279,19 @@ define([ var pendingPromise = new Pending('core/tag:addstandardtag'); e.preventDefault(); - return ModalFactory.create({ + return SaveCancelModal.create({ title: str.get_string('addotags', 'tag'), body: templates.render('core_tag/add_tags', { actionurl: window.location.href, sesskey: M.cfg.sesskey }), - type: ModalFactory.types.SAVE_CANCEL + buttons: { + save: str.get_string('continue', 'core'), + }, + show: true, + removeOnClose: true, }) .then(function(modal) { - modal.setSaveButtonText(str.get_string('continue', 'core')); - // Handle save event. modal.getRoot().on(ModalEvents.save, function(e) { var tagsInput = $(e.currentTarget).find('#id_tagslist'); @@ -330,14 +324,6 @@ define([ return false; }); - // Handle hidden event. - modal.getRoot().on(ModalEvents.hidden, function() { - // Destroy when hidden. - modal.destroy(); - }); - - modal.show(); - return; }) @@ -407,15 +393,17 @@ define([ actionurl: href, sesskey: M.cfg.sesskey }; - return ModalFactory.create({ + return SaveCancelModal.create({ title: modalTitle, body: templates.render('core_tag/add_tag_collection', templateContext), - type: ModalFactory.types.SAVE_CANCEL + buttons: { + save: saveButtonText, + }, + show: true, + removeOnClose: true, }); }) .then(function(modal) { - modal.setSaveButtonText(saveButtonText); - // Handle save event. modal.getRoot().on(ModalEvents.save, function(e) { var collectionInput = $(e.currentTarget).find('#addtagcoll_name'); @@ -446,14 +434,6 @@ define([ return false; }); - // Handle hidden event. - modal.getRoot().on(ModalEvents.hidden, function() { - // Destroy when hidden. - modal.destroy(); - }); - - modal.show(); - return modal; })