From 33354d3b6f82245cb11d002095b9b61f38ca06e4 Mon Sep 17 00:00:00 2001 From: "bobbrose@google.com" Date: Wed, 7 Nov 2012 16:45:30 +0000 Subject: [PATCH] When is pressed on Dialog, ignore if tag is 'A' (anchor tag), as the user is trying to follow a link. R=ssaviano,nicksantos DELTA=29 (17 added, 0 deleted, 12 changed) Revision created by MOE tool push_codebase. MOE_MIGRATION=5777 git-svn-id: http://closure-library.googlecode.com/svn/trunk@2279 0b95b8e8-c90f-11de-9d4f-f947ee5921c8 --- closure/goog/deps.js | 2 +- closure/goog/ui/dialog.js | 8 +++++--- closure/goog/ui/dialog_test.html | 30 ++++++++++++++++++++++-------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/closure/goog/deps.js b/closure/goog/deps.js index c384f125..f3d23c29 100644 --- a/closure/goog/deps.js +++ b/closure/goog/deps.js @@ -669,7 +669,7 @@ goog.addDependency('ui/custombuttonrenderer.js', ['goog.ui.CustomButtonRenderer' goog.addDependency('ui/customcolorpalette.js', ['goog.ui.CustomColorPalette'], ['goog.color', 'goog.dom', 'goog.ui.ColorPalette']); goog.addDependency('ui/datepicker.js', ['goog.ui.DatePicker', 'goog.ui.DatePicker.Events', 'goog.ui.DatePickerEvent'], ['goog.date', 'goog.date.Date', 'goog.date.Interval', 'goog.dom', 'goog.dom.a11y', 'goog.dom.classes', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.events.KeyHandler.EventType', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols', 'goog.style', 'goog.ui.Component', 'goog.ui.IdGenerator']); goog.addDependency('ui/decorate.js', ['goog.ui.decorate'], ['goog.ui.registry']); -goog.addDependency('ui/dialog.js', ['goog.ui.Dialog', 'goog.ui.Dialog.ButtonSet', 'goog.ui.Dialog.ButtonSet.DefaultButtons', 'goog.ui.Dialog.DefaultButtonCaptions', 'goog.ui.Dialog.DefaultButtonKeys', 'goog.ui.Dialog.Event', 'goog.ui.Dialog.EventType'], ['goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.a11y', 'goog.dom.classes', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Dragger', 'goog.math.Rect', 'goog.structs', 'goog.structs.Map', 'goog.style', 'goog.ui.ModalPopup', 'goog.userAgent']); +goog.addDependency('ui/dialog.js', ['goog.ui.Dialog', 'goog.ui.Dialog.ButtonSet', 'goog.ui.Dialog.ButtonSet.DefaultButtons', 'goog.ui.Dialog.DefaultButtonCaptions', 'goog.ui.Dialog.DefaultButtonKeys', 'goog.ui.Dialog.Event', 'goog.ui.Dialog.EventType'], ['goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.a11y', 'goog.dom.a11y.Role', 'goog.dom.classes', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Dragger', 'goog.math.Rect', 'goog.structs', 'goog.structs.Map', 'goog.style', 'goog.ui.ModalPopup', 'goog.userAgent']); goog.addDependency('ui/dimensionpicker.js', ['goog.ui.DimensionPicker'], ['goog.events.EventType', 'goog.math.Size', 'goog.ui.Control', 'goog.ui.DimensionPickerRenderer', 'goog.ui.registry']); goog.addDependency('ui/dimensionpickerrenderer.js', ['goog.ui.DimensionPickerRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.i18n.bidi', 'goog.style', 'goog.ui.ControlRenderer', 'goog.userAgent']); goog.addDependency('ui/dragdropdetector.js', ['goog.ui.DragDropDetector', 'goog.ui.DragDropDetector.EventType', 'goog.ui.DragDropDetector.ImageDropEvent', 'goog.ui.DragDropDetector.LinkDropEvent'], ['goog.dom', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.userAgent']); diff --git a/closure/goog/ui/dialog.js b/closure/goog/ui/dialog.js index 7a253763..0a4fa31f 100644 --- a/closure/goog/ui/dialog.js +++ b/closure/goog/ui/dialog.js @@ -35,7 +35,9 @@ goog.require('goog.dom'); goog.require('goog.dom.NodeType'); goog.require('goog.dom.TagName'); goog.require('goog.dom.a11y'); +goog.require('goog.dom.a11y.Role'); goog.require('goog.dom.classes'); +goog.require('goog.events'); goog.require('goog.events.Event'); goog.require('goog.events.EventType'); goog.require('goog.events.KeyCodes'); @@ -1019,10 +1021,10 @@ goog.ui.Dialog.prototype.onKey_ = function(e) { var defaultKey = buttonSet.getDefault(); var defaultButton = defaultKey && buttonSet.getButton(defaultKey); - // Users may expect to hit enter on a TEXTAREA or a SELECT element. + // Users may expect to hit enter on a TEXTAREA, SELECT or an A element. var isSpecialFormElement = - (target.tagName == 'TEXTAREA' || target.tagName == 'SELECT') && - !target.disabled; + (target.tagName == 'TEXTAREA' || target.tagName == 'SELECT' || + target.tagName == 'A') && !target.disabled; if (defaultButton && !defaultButton.disabled && !isSpecialFormElement) { key = defaultKey; diff --git a/closure/goog/ui/dialog_test.html b/closure/goog/ui/dialog_test.html index 6dd8e071..ffa5429c 100644 --- a/closure/goog/ui/dialog_test.html +++ b/closure/goog/ui/dialog_test.html @@ -135,23 +135,37 @@ } function testEnterKeyDoesNothingOnSpecialFormElements() { - dialog.setContent(''); - var textarea = dialog.getContentElement(). - getElementsByTagName('TEXTAREA')[0]; + checkEnterKeyDoesNothingOnSpecialFormElement( + '', + 'TEXTAREA'); + + checkEnterKeyDoesNothingOnSpecialFormElement( + '', + 'SELECT'); + + checkEnterKeyDoesNothingOnSpecialFormElement( + 'Hello dialog', + 'A'); + } + + function checkEnterKeyDoesNothingOnSpecialFormElement(content, tagName) { + dialog.setContent(content); + var formElement = dialog.getContentElement(). + getElementsByTagName(tagName)[0]; var wasCalled = false; var callRecorder = function() { wasCalled = true; }; goog.events.listen(dialog, goog.ui.Dialog.EventType.SELECT, callRecorder); - // Enter does not fire on the enabled textarea. - goog.testing.events.fireKeySequence(textarea, + // Enter does not fire on the enabled form element. + goog.testing.events.fireKeySequence(formElement, goog.events.KeyCodes.ENTER); assertFalse(wasCalled); - // Enter fires on the disabled textarea. - textarea.disabled = true; - goog.testing.events.fireKeySequence(textarea, + // Enter fires on the disabled form element. + formElement.disabled = true; + goog.testing.events.fireKeySequence(formElement, goog.events.KeyCodes.ENTER); assertTrue(wasCalled); }