mirror of
https://github.com/moodle/moodle.git
synced 2025-04-14 04:52:36 +02:00
MDL-82373 core_grades: Address random failures when editing gradebook
This commit is contained in:
parent
78ccdc9939
commit
1f0d1e60a0
4
grade/amd/build/gradebooksetup_forms.min.js
vendored
4
grade/amd/build/gradebooksetup_forms.min.js
vendored
@ -1,10 +1,10 @@
|
||||
define("core_grades/gradebooksetup_forms",["exports","core_form/modalform","core/str","core/notification","core_form/changechecker"],(function(_exports,_modalform,_str,_notification,FormChangeChecker){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("core_grades/gradebooksetup_forms",["exports","core_form/modalform","core/str","core/notification","core_form/changechecker","core/pending"],(function(_exports,_modalform,_str,_notification,FormChangeChecker,_pending){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}}
|
||||
/**
|
||||
* Prints the add item gradebook form
|
||||
*
|
||||
* @module core_grades
|
||||
* @copyright 2023 Mathew May <mathew.solutions>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification),FormChangeChecker=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}(FormChangeChecker);const Selectors_advancedFormLink="a.showadvancedform";_exports.init=()=>{document.addEventListener("click",(event=>{const args={};let formClass=null,title=null,trigger=null;if(event.target.closest('[data-trigger="add-item-form"]')?(event.preventDefault(),trigger=event.target.closest('[data-trigger="add-item-form"]'),formClass="core_grades\\form\\add_item",title="-1"===trigger.getAttribute("data-itemid")?(0,_str.getString)("newitem","core_grades"):(0,_str.getString)("itemsedit","core_grades"),args.itemid=trigger.getAttribute("data-itemid")):event.target.closest('[data-trigger="add-category-form"]')?(event.preventDefault(),trigger=event.target.closest('[data-trigger="add-category-form"]'),formClass="core_grades\\form\\add_category",title="-1"===trigger.getAttribute("data-category")?(0,_str.getString)("newcategory","core_grades"):(0,_str.getString)("categoryedit","core_grades"),args.category=trigger.getAttribute("data-category")):event.target.closest('[data-trigger="add-outcome-form"]')&&(event.preventDefault(),trigger=event.target.closest('[data-trigger="add-outcome-form"]'),formClass="core_grades\\form\\add_outcome",title="-1"===trigger.getAttribute("data-itemid")?(0,_str.getString)("newoutcomeitem","core_grades"):(0,_str.getString)("outcomeitemsedit","core_grades"),args.itemid=trigger.getAttribute("data-itemid")),trigger){args.courseid=trigger.getAttribute("data-courseid"),args.gpr_plugin=trigger.getAttribute("data-gprplugin");const modalForm=new _modalform.default({modalConfig:{title:title},formClass:formClass,args:args,saveButtonText:(0,_str.getString)("save","core"),returnFocus:trigger});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=>{event.detail.result?window.location.assign(event.detail.url):_notification.default.addNotification({type:"error",message:(0,_str.getString)("saving_failed","core_grades")})})),modalForm.show()}const showAdvancedForm=event.target.closest(Selectors_advancedFormLink);if(showAdvancedForm){event.preventDefault();const form=event.target.closest("form");form.action=showAdvancedForm.href,FormChangeChecker.disableAllChecks(),form.submit()}}))}}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification),FormChangeChecker=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}(FormChangeChecker),_pending=_interopRequireDefault(_pending);const Selectors_advancedFormLink="a.showadvancedform";_exports.init=()=>{document.addEventListener("click",(event=>{const triggerData=(event=>{if(event.target.closest('[data-trigger="add-item-form"]')){const trigger=event.target.closest('[data-trigger="add-item-form"]');return{trigger:trigger,formClass:"core_grades\\form\\add_item",titleKey:"-1"===trigger.getAttribute("data-itemid")?"newitem":"itemsedit",args:{itemid:trigger.getAttribute("data-itemid")}}}if(event.target.closest('[data-trigger="add-category-form"]')){const trigger=event.target.closest('[data-trigger="add-category-form"]');return{trigger:trigger,formClass:"core_grades\\form\\add_category",titleKey:"-1"===trigger.getAttribute("data-category")?"newcategory":"categoryedit",args:{category:trigger.getAttribute("data-category")}}}if(event.target.closest('[data-trigger="add-outcome-form"]')){const trigger=event.target.closest('[data-trigger="add-outcome-form"]');return{trigger:trigger,formClass:"core_grades\\form\\add_outcome",titleKey:"-1"===trigger.getAttribute("data-itemid")?"newoutcomeitem":"outcomeitemsedit",args:{itemid:trigger.getAttribute("data-itemid")}}}return null})(event);if(triggerData){event.preventDefault();const pendingPromise=new _pending.default("core_grades:add_item:".concat(triggerData.args.itemid)),{trigger:trigger,formClass:formClass,titleKey:titleKey,args:args}=triggerData;args.courseid=trigger.getAttribute("data-courseid"),args.gpr_plugin=trigger.getAttribute("data-gprplugin");const modalForm=new _modalform.default({modalConfig:{title:(0,_str.getString)(titleKey,"core_grades")},formClass:formClass,args:args,saveButtonText:(0,_str.getString)("save","core"),returnFocus:trigger});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=>{event.detail.result?(new _pending.default("core_grades:form_submitted"),window.location.assign(event.detail.url)):_notification.default.addNotification({type:"error",message:(0,_str.getString)("saving_failed","core_grades")})})),modalForm.show(),pendingPromise.resolve()}const showAdvancedForm=event.target.closest(Selectors_advancedFormLink);if(showAdvancedForm){event.preventDefault(),new _pending.default("core_grades:show_advanced_form");const form=event.target.closest("form");form.action=showAdvancedForm.href,FormChangeChecker.disableAllChecks(),form.submit()}}))}}));
|
||||
|
||||
//# sourceMappingURL=gradebooksetup_forms.min.js.map
|
File diff suppressed because one or more lines are too long
@ -25,52 +25,68 @@ import ModalForm from 'core_form/modalform';
|
||||
import {getString} from 'core/str';
|
||||
import Notification from 'core/notification';
|
||||
import * as FormChangeChecker from 'core_form/changechecker';
|
||||
import PendingPromise from 'core/pending';
|
||||
|
||||
const Selectors = {
|
||||
advancedFormLink: 'a.showadvancedform'
|
||||
};
|
||||
|
||||
const getDetailsFromEvent = (event) => {
|
||||
if (event.target.closest('[data-trigger="add-item-form"]')) {
|
||||
const trigger = event.target.closest('[data-trigger="add-item-form"]');
|
||||
|
||||
return {
|
||||
trigger,
|
||||
formClass: 'core_grades\\form\\add_item',
|
||||
titleKey: trigger.getAttribute('data-itemid') === '-1' ? 'newitem' : 'itemsedit',
|
||||
args: {
|
||||
itemid: trigger.getAttribute('data-itemid'),
|
||||
},
|
||||
};
|
||||
} else if (event.target.closest('[data-trigger="add-category-form"]')) {
|
||||
const trigger = event.target.closest('[data-trigger="add-category-form"]');
|
||||
return {
|
||||
trigger,
|
||||
formClass: 'core_grades\\form\\add_category',
|
||||
titleKey: trigger.getAttribute('data-category') === '-1' ? 'newcategory' : 'categoryedit',
|
||||
args: {
|
||||
category: trigger.getAttribute('data-category'),
|
||||
},
|
||||
};
|
||||
} else if (event.target.closest('[data-trigger="add-outcome-form"]')) {
|
||||
const trigger = event.target.closest('[data-trigger="add-outcome-form"]');
|
||||
return {
|
||||
trigger,
|
||||
formClass: 'core_grades\\form\\add_outcome',
|
||||
titleKey: trigger.getAttribute('data-itemid') === '-1' ? 'newoutcomeitem' : 'outcomeitemsedit',
|
||||
args: {
|
||||
itemid: trigger.getAttribute('data-itemid'),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize module
|
||||
*/
|
||||
export const init = () => {
|
||||
// Sometimes the trigger does not exist, so lets conditionally add it.
|
||||
document.addEventListener('click', event => {
|
||||
const args = {};
|
||||
const triggerData = getDetailsFromEvent(event);
|
||||
|
||||
let formClass = null;
|
||||
let title = null;
|
||||
let trigger = null;
|
||||
if (event.target.closest('[data-trigger="add-item-form"]')) {
|
||||
if (triggerData) {
|
||||
event.preventDefault();
|
||||
trigger = event.target.closest('[data-trigger="add-item-form"]');
|
||||
formClass = 'core_grades\\form\\add_item';
|
||||
title = trigger.getAttribute('data-itemid') === '-1' ?
|
||||
getString('newitem', 'core_grades') : getString('itemsedit', 'core_grades');
|
||||
args.itemid = trigger.getAttribute('data-itemid');
|
||||
} else if (event.target.closest('[data-trigger="add-category-form"]')) {
|
||||
event.preventDefault();
|
||||
trigger = event.target.closest('[data-trigger="add-category-form"]');
|
||||
formClass = 'core_grades\\form\\add_category';
|
||||
title = trigger.getAttribute('data-category') === '-1' ?
|
||||
getString('newcategory', 'core_grades') : getString('categoryedit', 'core_grades');
|
||||
args.category = trigger.getAttribute('data-category');
|
||||
} else if (event.target.closest('[data-trigger="add-outcome-form"]')) {
|
||||
event.preventDefault();
|
||||
trigger = event.target.closest('[data-trigger="add-outcome-form"]');
|
||||
formClass = 'core_grades\\form\\add_outcome';
|
||||
title = trigger.getAttribute('data-itemid') === '-1' ?
|
||||
getString('newoutcomeitem', 'core_grades') : getString('outcomeitemsedit', 'core_grades');
|
||||
args.itemid = trigger.getAttribute('data-itemid');
|
||||
}
|
||||
const pendingPromise = new PendingPromise(`core_grades:add_item:${triggerData.args.itemid}`);
|
||||
|
||||
if (trigger) {
|
||||
const {trigger, formClass, titleKey, args} = triggerData;
|
||||
args.courseid = trigger.getAttribute('data-courseid');
|
||||
args.gpr_plugin = trigger.getAttribute('data-gprplugin');
|
||||
|
||||
const modalForm = new ModalForm({
|
||||
modalConfig: {
|
||||
title: title,
|
||||
title: getString(titleKey, 'core_grades'),
|
||||
},
|
||||
formClass: formClass,
|
||||
args: args,
|
||||
@ -81,6 +97,7 @@ export const init = () => {
|
||||
// Show a toast notification when the form is submitted.
|
||||
modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, event => {
|
||||
if (event.detail.result) {
|
||||
new PendingPromise('core_grades:form_submitted');
|
||||
window.location.assign(event.detail.url);
|
||||
} else {
|
||||
Notification.addNotification({
|
||||
@ -91,11 +108,16 @@ export const init = () => {
|
||||
});
|
||||
|
||||
modalForm.show();
|
||||
pendingPromise.resolve();
|
||||
}
|
||||
|
||||
const showAdvancedForm = event.target.closest(Selectors.advancedFormLink);
|
||||
if (showAdvancedForm) { // Navigate to the advanced form page and cary over any entered data.
|
||||
if (showAdvancedForm) {
|
||||
// Navigate to the advanced form page and cary over any entered data.
|
||||
event.preventDefault();
|
||||
|
||||
// Do not resolve this pendingPromise - it will be cleared when the page changes.
|
||||
new PendingPromise('core_grades:show_advanced_form');
|
||||
const form = event.target.closest('form');
|
||||
form.action = showAdvancedForm.href;
|
||||
// Disable the form change checker as we are going to carry over the data to the advanced form.
|
||||
|
@ -74,11 +74,16 @@ class behat_grade extends behat_base {
|
||||
'link', '.modal-dialog', 'css_element']);
|
||||
}
|
||||
|
||||
|
||||
$this->execute("behat_forms::i_set_the_following_fields_to_these_values", $data);
|
||||
if ($this->getSession()->getPage()->find('xpath', './/button[@data-action="save"]')) {
|
||||
$container = $this->get_selected_node("core_grades > gradeitem modal", "form");
|
||||
$node = $this->find('xpath', './/button[@data-action="save"]', false, $container);
|
||||
$node->press();
|
||||
$this->execute('behat_general::i_click_on_in_the', [
|
||||
'.//button[@data-action="save"]',
|
||||
'xpath',
|
||||
$container,
|
||||
'NodeElement',
|
||||
]);
|
||||
} else {
|
||||
$savechanges = get_string('savechanges', 'grades');
|
||||
$this->execute('behat_forms::press_button', $this->escape($savechanges));
|
||||
|
Loading…
x
Reference in New Issue
Block a user