From b8daa178de8f652e084aefc265b371e3db51447e Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Mon, 9 Jul 2018 11:43:28 +0800 Subject: [PATCH] MDL-43334 backup: Fix cancel JS The cancel button is a form element within a div that has the confirmcancel class. When we accept a cancel modal, we should attempt to click the most specific form element of the div, not the entire div. --- .../moodle-backup-confirmcancel-debug.js | 11 ++++++++++- .../moodle-backup-confirmcancel-min.js | 2 +- .../moodle-backup-confirmcancel.js | 11 ++++++++++- .../util/ui/yui/src/confirmcancel/js/confirmcancel.js | 11 ++++++++++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-debug.js b/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-debug.js index cdbd2063472..713ac2c2dc8 100644 --- a/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-debug.js +++ b/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-debug.js @@ -68,8 +68,17 @@ M.core_backup.confirmcancel = { // Detach the listeners for the confirm box so they don't fire again. new Y.EventHandle(M.core_backup.confirmcancel.listeners).detach(); + // The currentTarget is a div surrounding the form elements. Simulating a click on the div is + // not going to submit a form so we need to find the form element to click. + var element = e.currentTarget.one('input, select, button'); + // Simulate the original cancel button click. - e.currentTarget.simulate('click'); + if (element) { + element.simulate('click'); + } else { + // Backwards compatibility only. + e.currentTarget.simulate('click'); + } }, this); diff --git a/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-min.js b/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-min.js index db30391c0d4..20654afd15e 100644 --- a/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-min.js +++ b/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel-min.js @@ -1 +1 @@ -YUI.add("moodle-backup-confirmcancel",function(e,t){M.core_backup=M.core_backup||{},M.core_backup.confirmcancel={listeners:[],config:{},watch_cancel_buttons:function(t){this.config=t,this.listeners.push(e.one(e.config.doc.body).delegate("click",this.confirm_cancel,".confirmcancel",this))},confirm_cancel:function(t){t.preventDefault();var n=new M.core.confirm(this.config);n.on("complete-yes",function(){(new e.EventHandle(M.core_backup.confirmcancel.listeners)).detach(),t.currentTarget.simulate("click")},this),n.show()}}},"@VERSION@",{requires:["node","node-event-simulate","moodle-core-notification-confirm"]}); +YUI.add("moodle-backup-confirmcancel",function(e,t){M.core_backup=M.core_backup||{},M.core_backup.confirmcancel={listeners:[],config:{},watch_cancel_buttons:function(t){this.config=t,this.listeners.push(e.one(e.config.doc.body).delegate("click",this.confirm_cancel,".confirmcancel",this))},confirm_cancel:function(t){t.preventDefault();var n=new M.core.confirm(this.config);n.on("complete-yes",function(){(new e.EventHandle(M.core_backup.confirmcancel.listeners)).detach();var n=t.currentTarget.one("input, select, button");n?n.simulate("click"):t.currentTarget.simulate("click")},this),n.show()}}},"@VERSION@",{requires:["node","node-event-simulate","moodle-core-notification-confirm"]}); diff --git a/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel.js b/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel.js index cdbd2063472..713ac2c2dc8 100644 --- a/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel.js +++ b/backup/util/ui/yui/build/moodle-backup-confirmcancel/moodle-backup-confirmcancel.js @@ -68,8 +68,17 @@ M.core_backup.confirmcancel = { // Detach the listeners for the confirm box so they don't fire again. new Y.EventHandle(M.core_backup.confirmcancel.listeners).detach(); + // The currentTarget is a div surrounding the form elements. Simulating a click on the div is + // not going to submit a form so we need to find the form element to click. + var element = e.currentTarget.one('input, select, button'); + // Simulate the original cancel button click. - e.currentTarget.simulate('click'); + if (element) { + element.simulate('click'); + } else { + // Backwards compatibility only. + e.currentTarget.simulate('click'); + } }, this); diff --git a/backup/util/ui/yui/src/confirmcancel/js/confirmcancel.js b/backup/util/ui/yui/src/confirmcancel/js/confirmcancel.js index 488fe3aae5b..6d300562ec3 100644 --- a/backup/util/ui/yui/src/confirmcancel/js/confirmcancel.js +++ b/backup/util/ui/yui/src/confirmcancel/js/confirmcancel.js @@ -66,8 +66,17 @@ M.core_backup.confirmcancel = { // Detach the listeners for the confirm box so they don't fire again. new Y.EventHandle(M.core_backup.confirmcancel.listeners).detach(); + // The currentTarget is a div surrounding the form elements. Simulating a click on the div is + // not going to submit a form so we need to find the form element to click. + var element = e.currentTarget.one('input, select, button'); + // Simulate the original cancel button click. - e.currentTarget.simulate('click'); + if (element) { + element.simulate('click'); + } else { + // Backwards compatibility only. + e.currentTarget.simulate('click'); + } }, this);