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.
This commit is contained in:
Andrew Nicols
2023-09-09 00:04:03 +08:00
parent 5d9761c655
commit 98f0aebde6
6 changed files with 133 additions and 151 deletions
+2 -2
View File
@@ -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 <ilya@moodle.com>
* @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
File diff suppressed because one or more lines are too long
+108 -106
View File
@@ -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);
}
});
});
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+20 -40
View File
@@ -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;
})