MDL-59858 amd: Focus on the element that actually triggers the modal
authorJun Pataleta <jun@moodle.com>
Tue, 3 Oct 2017 05:58:46 +0000 (13:58 +0800)
committerJun Pataleta <jun@moodle.com>
Mon, 6 Nov 2017 00:18:03 +0000 (13:18 +1300)
lib/amd/build/modal_factory.min.js
lib/amd/src/modal_factory.js

index 04cb7e1..d041bf7 100644 (file)
Binary files a/lib/amd/build/modal_factory.min.js and b/lib/amd/build/modal_factory.min.js differ
index 770ecdf..29acb94 100644 (file)
@@ -63,12 +63,15 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
      */
     var setUpTrigger = function(modalPromise, triggerElement) {
         if (typeof triggerElement != 'undefined') {
+            // The element that actually shows the modal.
+            var actualTriggerElement = null;
             if (Array.isArray(triggerElement)) {
                 var selector = triggerElement[1];
                 triggerElement = triggerElement[0];
 
                 CustomEvents.define(triggerElement, [CustomEvents.events.activate]);
                 triggerElement.on(CustomEvents.events.activate, selector, function(e, data) {
+                    actualTriggerElement = e.currentTarget;
                     modalPromise.then(function(modal) {
                         modal.show();
 
@@ -79,6 +82,7 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
             } else {
                 CustomEvents.define(triggerElement, [CustomEvents.events.activate]);
                 triggerElement.on(CustomEvents.events.activate, function(e, data) {
+                    actualTriggerElement = e.currentTarget;
                     modalPromise.then(function(modal) {
                         modal.show();
 
@@ -90,7 +94,10 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
 
             modalPromise.then(function(modal) {
                 modal.getRoot().on(ModalEvents.hidden, function() {
-                    triggerElement.focus();
+                    // Focus on the trigger element that actually launched the modal.
+                    if (actualTriggerElement !== null) {
+                        actualTriggerElement.focus();
+                    }
                 });
 
                 return modal;