MDL-34671 Stop browser receiving escape keydown in modal dialogues
authorAndrew Robert Nicols <andrew.nicols@lancaster.ac.uk>
Mon, 28 Jan 2013 10:35:26 +0000 (10:35 +0000)
committerAndrew Robert Nicols <andrew.nicols@lancaster.ac.uk>
Mon, 28 Jan 2013 10:35:26 +0000 (10:35 +0000)
In certain modal dialogues, we listen on the Escape key to close a
dialogue. However, this is still passed to the browser. As a result, if the
browser is in full screen mode and that browser respects the escape key as
a means to exit full screen.

As a result, we need to ensure that we listen for the escape key at keydown
rather than keyup, and additionally prevent the default browser behaviour.

This is a workaround to http://yuilibrary.com/projects/yui3/ticket/2532616
and, should that issue be fixed, it should be removed.

course/yui/toolboxes/toolboxes.js
lib/yui/chooserdialogue/chooserdialogue.js

index 8c652e0..4e6ad15 100644 (file)
@@ -558,8 +558,9 @@ YUI.add('moodle-course-toolboxes', function(Y) {
             // Cancel the edit if we lose focus or the escape key is pressed
             thisevent = editor.on('blur', cancel_edittitle);
             listenevents.push(thisevent);
-            thisevent = Y.one('document').on('keyup', function(e) {
-                if (e.keyCode == 27) {
+            thisevent = Y.one('document').on('keydown', function(e) {
+                if (e.keyCode === 27) {
+                    e.preventDefault();
                     cancel_edittitle(e);
                 }
             });
index 6f8ceec..cb7d54a 100644 (file)
@@ -144,7 +144,7 @@ YUI.add('moodle-core-chooserdialogue', function(Y) {
             this.listenevents.push(thisevent);
 
             // Grab global keyup events and handle them
-            thisevent = Y.one('document').on('keyup', this.handle_key_press, this);
+            thisevent = Y.one('document').on('keydown', this.handle_key_press, this);
             this.listenevents.push(thisevent);
 
             // Add references to various elements we adjust