Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 The ChromeVox panel and menus. | 6 * @fileoverview The ChromeVox panel and menus. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 goog.provide('Panel'); | 9 goog.provide('Panel'); |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 /** @type {Element} @private */ | 30 /** @type {Element} @private */ |
| 31 this.speechContainer_ = $('speech-container'); | 31 this.speechContainer_ = $('speech-container'); |
| 32 | 32 |
| 33 /** @type {Element} @private */ | 33 /** @type {Element} @private */ |
| 34 this.speechElement_ = $('speech'); | 34 this.speechElement_ = $('speech'); |
| 35 | 35 |
| 36 /** @type {Element} @private */ | 36 /** @type {Element} @private */ |
| 37 this.brailleContainer_ = $('braille-container'); | 37 this.brailleContainer_ = $('braille-container'); |
| 38 | 38 |
| 39 /** @type {Element} @private */ | 39 /** @type {Element} @private */ |
| 40 this.searchContainer_ = $('search-container'); | |
| 41 | |
| 42 /** @type {Element} @private */ | |
| 43 this.searchInput_ = $('search'); | |
| 44 | |
| 45 /** @type {Element} @private */ | |
| 40 this.brailleTextElement_ = $('braille-text'); | 46 this.brailleTextElement_ = $('braille-text'); |
| 41 | 47 |
| 42 /** @type {Element} @private */ | 48 /** @type {Element} @private */ |
| 43 this.brailleCellsElement_ = $('braille-cells'); | 49 this.brailleCellsElement_ = $('braille-cells'); |
| 44 | 50 |
| 45 /** | 51 /** |
| 46 * The array of top-level menus. | 52 * The array of top-level menus. |
| 47 * @type {!Array<PanelMenu>} | 53 * @type {!Array<PanelMenu>} |
| 48 * @private | 54 * @private |
| 49 */ | 55 */ |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 66 | 72 |
| 67 /** | 73 /** |
| 68 * A callback function to be executed to perform the action from selecting | 74 * A callback function to be executed to perform the action from selecting |
| 69 * a menu item after the menu has been closed and focus has been restored | 75 * a menu item after the menu has been closed and focus has been restored |
| 70 * to the page or wherever it was previously. | 76 * to the page or wherever it was previously. |
| 71 * @type {?Function} | 77 * @type {?Function} |
| 72 * @private | 78 * @private |
| 73 */ | 79 */ |
| 74 this.pendingCallback_ = null; | 80 this.pendingCallback_ = null; |
| 75 | 81 |
| 82 /** | |
| 83 * True if we're currently in incremental search mode. | |
| 84 * @type {boolean} | |
| 85 * @private | |
| 86 */ | |
| 87 this.searching_ = false; | |
| 88 | |
| 76 Panel.updateFromPrefs(); | 89 Panel.updateFromPrefs(); |
| 77 | 90 |
| 78 Msgs.addTranslatedMessagesToDom(document); | 91 Msgs.addTranslatedMessagesToDom(document); |
| 79 | 92 |
| 80 window.addEventListener('storage', function(event) { | 93 window.addEventListener('storage', function(event) { |
| 81 if (event.key == 'brailleCaptions') { | 94 if (event.key == 'brailleCaptions') { |
| 82 Panel.updateFromPrefs(); | 95 Panel.updateFromPrefs(); |
| 83 } | 96 } |
| 84 }, false); | 97 }, false); |
| 85 | 98 |
| 86 window.addEventListener('message', function(message) { | 99 window.addEventListener('message', function(message) { |
| 87 var command = JSON.parse(message.data); | 100 var command = JSON.parse(message.data); |
| 88 Panel.exec(/** @type {PanelCommand} */(command)); | 101 Panel.exec(/** @type {PanelCommand} */(command)); |
| 89 }, false); | 102 }, false); |
| 90 | 103 |
| 91 $('menus_button').addEventListener('mousedown', Panel.onOpenMenus, false); | 104 $('menus_button').addEventListener('mousedown', Panel.onOpenMenus, false); |
| 92 $('options').addEventListener('click', Panel.onOptions, false); | 105 $('options').addEventListener('click', Panel.onOptions, false); |
| 93 $('close').addEventListener('click', Panel.onClose, false); | 106 $('close').addEventListener('click', Panel.onClose, false); |
| 94 | 107 |
| 95 document.addEventListener('keydown', Panel.onKeyDown, false); | 108 document.addEventListener('keydown', Panel.onKeyDown, false); |
| 96 document.addEventListener('mouseup', Panel.onMouseUp, false); | 109 document.addEventListener('mouseup', Panel.onMouseUp, false); |
| 110 | |
| 111 Panel.searchInput_.addEventListener('blur', Panel.onSearchInputBlur, false); | |
| 97 }; | 112 }; |
| 98 | 113 |
| 99 /** | 114 /** |
| 100 * Update the display based on prefs. | 115 * Update the display based on prefs. |
| 101 */ | 116 */ |
| 102 Panel.updateFromPrefs = function() { | 117 Panel.updateFromPrefs = function() { |
| 118 if (Panel.searching_) { | |
| 119 this.speechContainer_.style.display = 'none'; | |
| 120 this.brailleContainer_.style.display = 'none'; | |
| 121 this.searchContainer_.style.display = 'block'; | |
| 122 return; | |
| 123 } | |
| 124 | |
| 125 this.speechContainer_.style.display = 'block'; | |
| 126 this.brailleContainer_.style.display = 'block'; | |
| 127 this.searchContainer_.style.display = 'none'; | |
| 128 | |
| 103 if (localStorage['brailleCaptions'] === String(true)) { | 129 if (localStorage['brailleCaptions'] === String(true)) { |
| 104 this.speechContainer_.style.visibility = 'hidden'; | 130 this.speechContainer_.style.visibility = 'hidden'; |
| 105 this.brailleContainer_.style.visibility = 'visible'; | 131 this.brailleContainer_.style.visibility = 'visible'; |
| 106 } else { | 132 } else { |
| 107 this.speechContainer_.style.visibility = 'visible'; | 133 this.speechContainer_.style.visibility = 'visible'; |
| 108 this.brailleContainer_.style.visibility = 'hidden'; | 134 this.brailleContainer_.style.visibility = 'hidden'; |
| 109 } | 135 } |
| 110 }; | 136 }; |
| 111 | 137 |
| 112 /** | 138 /** |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 301 }); | 327 }); |
| 302 | 328 |
| 303 // Activate the first menu. | 329 // Activate the first menu. |
| 304 Panel.activateMenu(Panel.menus_[0]); | 330 Panel.activateMenu(Panel.menus_[0]); |
| 305 }; | 331 }; |
| 306 | 332 |
| 307 /** Open incremental search. */ | 333 /** Open incremental search. */ |
| 308 Panel.onSearch = function() { | 334 Panel.onSearch = function() { |
| 309 Panel.clearMenus(); | 335 Panel.clearMenus(); |
| 310 Panel.pendingCallback_ = null; | 336 Panel.pendingCallback_ = null; |
| 337 Panel.searching_ = true; | |
| 338 Panel.updateFromPrefs(); | |
| 311 | 339 |
| 312 window.location = '#focus'; | 340 window.location = '#focus'; |
| 313 | 341 |
| 314 ISearchUI.get($('search')); | 342 ISearchUI.get(Panel.searchInput_); |
| 315 }; | 343 }; |
| 316 | 344 |
| 317 /** | 345 /** |
| 318 * Clear any previous menus. The menus are all regenerated each time the | 346 * Clear any previous menus. The menus are all regenerated each time the |
| 319 * menus are opened. | 347 * menus are opened. |
| 320 */ | 348 */ |
| 321 Panel.clearMenus = function() { | 349 Panel.clearMenus = function() { |
| 322 while (this.menus_.length) { | 350 while (this.menus_.length) { |
| 323 var menu = this.menus_.pop(); | 351 var menu = this.menus_.pop(); |
| 324 $('menu-bar').removeChild(menu.menuBarItemElement); | 352 $('menu-bar').removeChild(menu.menuBarItemElement); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 456 default: | 484 default: |
| 457 // Don't mark this event as handled. | 485 // Don't mark this event as handled. |
| 458 return; | 486 return; |
| 459 } | 487 } |
| 460 | 488 |
| 461 event.preventDefault(); | 489 event.preventDefault(); |
| 462 event.stopPropagation(); | 490 event.stopPropagation(); |
| 463 }; | 491 }; |
| 464 | 492 |
| 465 /** | 493 /** |
| 494 * Called when focus leaves the search input. | |
| 495 */ | |
| 496 Panel.onSearchInputBlur = function() { | |
| 497 if (Panel.searching_) { | |
| 498 if (document.activeElement != Panel.searchInput_ || !document.hasFocus()) { | |
| 499 Panel.searching_ = false; | |
| 500 if (window.location == '#focus') | |
| 501 window.location = '#'; | |
| 502 Panel.updateFromPrefs(); | |
| 503 Panel.searchInput_.value = ''; | |
|
David Tseng
2016/03/08 21:28:51
I thought it was kind of interesting to have the p
dmazzoni
2016/03/08 21:34:21
Yeah, we might want to make it more nuanced, but a
| |
| 504 } | |
| 505 } | |
| 506 }; | |
| 507 | |
| 508 /** | |
| 466 * Open the ChromeVox Options. | 509 * Open the ChromeVox Options. |
| 467 */ | 510 */ |
| 468 Panel.onOptions = function() { | 511 Panel.onOptions = function() { |
| 469 var bkgnd = | 512 var bkgnd = |
| 470 chrome.extension.getBackgroundPage()['global']['backgroundObj']; | 513 chrome.extension.getBackgroundPage()['global']['backgroundObj']; |
| 471 bkgnd['showOptionsPage'](); | 514 bkgnd['showOptionsPage'](); |
| 472 window.location = '#'; | 515 window.location = '#'; |
| 473 }; | 516 }; |
| 474 | 517 |
| 475 /** | 518 /** |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 500 var bkgnd = | 543 var bkgnd = |
| 501 chrome.extension.getBackgroundPage()['global']['backgroundObj']; | 544 chrome.extension.getBackgroundPage()['global']['backgroundObj']; |
| 502 bkgnd['endExcursion'](); | 545 bkgnd['endExcursion'](); |
| 503 if (Panel.pendingCallback_) | 546 if (Panel.pendingCallback_) |
| 504 Panel.pendingCallback_(); | 547 Panel.pendingCallback_(); |
| 505 }; | 548 }; |
| 506 | 549 |
| 507 window.addEventListener('load', function() { | 550 window.addEventListener('load', function() { |
| 508 Panel.init(); | 551 Panel.init(); |
| 509 }, false); | 552 }, false); |
| OLD | NEW |