| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @fileoverview Implements the setFocus function. | 6 * @fileoverview Implements the setFocus function. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 goog.provide('cvox.Focuser'); | 9 goog.provide('cvox.Focuser'); |
| 10 | 10 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 // with .focus() which causes the page to be redrawn incorrectly if | 66 // with .focus() which causes the page to be redrawn incorrectly if |
| 67 // not in setTimeout. | 67 // not in setTimeout. |
| 68 if (cvox.ChromeVoxEventSuspender.areEventsSuspended()) { | 68 if (cvox.ChromeVoxEventSuspender.areEventsSuspended()) { |
| 69 if (cvox.Focuser.shouldEnterSuspendEvents_(targetNode)) { | 69 if (cvox.Focuser.shouldEnterSuspendEvents_(targetNode)) { |
| 70 cvox.ChromeVoxEventSuspender.enterSuspendEvents(); | 70 cvox.ChromeVoxEventSuspender.enterSuspendEvents(); |
| 71 } | 71 } |
| 72 window.setTimeout(function() { | 72 window.setTimeout(function() { |
| 73 targetNode.focus(); | 73 targetNode.focus(); |
| 74 cvox.ChromeVoxEventSuspender.exitSuspendEvents(); | 74 cvox.ChromeVoxEventSuspender.exitSuspendEvents(); |
| 75 }, 0); | 75 }, 0); |
| 76 } | 76 } else { |
| 77 else { | |
| 78 window.setTimeout(function() { | 77 window.setTimeout(function() { |
| 79 targetNode.focus(); | 78 targetNode.focus(); |
| 80 }, 0); | 79 }, 0); |
| 81 } | 80 } |
| 82 } | 81 } |
| 83 } else if (document.activeElement && | 82 } else if ( |
| 84 document.activeElement.tagName != 'BODY') { | 83 document.activeElement && document.activeElement.tagName != 'BODY') { |
| 85 document.activeElement.blur(); | 84 document.activeElement.blur(); |
| 86 } | 85 } |
| 87 | 86 |
| 88 // Restore the selection, unless the focused item is a text box. | 87 // Restore the selection, unless the focused item is a text box. |
| 89 if (cvox.DomUtil.isInputTypeText(targetNode)) { | 88 if (cvox.DomUtil.isInputTypeText(targetNode)) { |
| 90 targetNode.select(); | 89 targetNode.select(); |
| 91 } else if (range) { | 90 } else if (range) { |
| 92 sel.removeAllRanges(); | 91 sel.removeAllRanges(); |
| 93 sel.addRange(range); | 92 sel.addRange(range); |
| 94 } | 93 } |
| 95 }; | 94 }; |
| 96 | 95 |
| 97 /** | 96 /** |
| 98 * Rules for whether or not enterSuspendEvents should be called. | 97 * Rules for whether or not enterSuspendEvents should be called. |
| 99 * In general, we should not enterSuspendEvents if the targetNode will get some | 98 * In general, we should not enterSuspendEvents if the targetNode will get some |
| 100 * special handlers attached when a focus event is received for it; otherwise, | 99 * special handlers attached when a focus event is received for it; otherwise, |
| 101 * the special handlers will not get attached. | 100 * the special handlers will not get attached. |
| 102 * | 101 * |
| 103 * @param {Node} targetNode The node that is being focused. | 102 * @param {Node} targetNode The node that is being focused. |
| 104 * @return {boolean} True if enterSuspendEvents should be called. | 103 * @return {boolean} True if enterSuspendEvents should be called. |
| 105 */ | 104 */ |
| 106 cvox.Focuser.shouldEnterSuspendEvents_ = function(targetNode){ | 105 cvox.Focuser.shouldEnterSuspendEvents_ = function(targetNode) { |
| 107 if (targetNode.constructor && targetNode.constructor == HTMLVideoElement) { | 106 if (targetNode.constructor && targetNode.constructor == HTMLVideoElement) { |
| 108 return false; | 107 return false; |
| 109 } | 108 } |
| 110 if (targetNode.hasAttribute) { | 109 if (targetNode.hasAttribute) { |
| 111 switch (targetNode.getAttribute('type')) { | 110 switch (targetNode.getAttribute('type')) { |
| 112 case 'time': | 111 case 'time': |
| 113 case 'date': | 112 case 'date': |
| 114 case 'week': | 113 case 'week': |
| 115 case 'month': | 114 case 'month': |
| 116 return false; | 115 return false; |
| 117 } | 116 } |
| 118 } | 117 } |
| 119 return true; | 118 return true; |
| 120 }; | 119 }; |
| OLD | NEW |