Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Side by Side Diff: chrome/third_party/chromevox/extensions/searchvox/search_tools.js

Issue 274963004: Update latest ChromeVox from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 Google Inc. All Rights Reserved.
2
3 /**
4 * @fileoverview Uses ChromeVox API to access the search tools menu.
5 * @author peterxiao@google.com (Peter Xiao)
6 */
7
8 goog.provide('cvox.SearchTool');
9
10 goog.require('cvox.ChromeVox');
11 goog.require('cvox.DomUtil');
12 goog.require('cvox.Search');
13 goog.require('cvox.SearchConstants');
14 goog.require('cvox.SearchUtil');
15
16 /**
17 * @constructor
18 */
19 cvox.SearchTool = function() {
20 };
21
22 /**
23 * Index of the current menu in focus.
24 * @type {number}
25 */
26 cvox.SearchTool.menuIndex;
27
28 /**
29 * Array of menus.
30 * @type {Array.<Node>}
31 */
32 cvox.SearchTool.menus = [];
33
34 /**
35 * Index of the current menu item in focus.
36 * @type {number}
37 */
38 cvox.SearchTool.menuItemIndex;
39
40 /**
41 * Array of menu items for the current menu.
42 * @type {Array.<Node>}
43 */
44 cvox.SearchTool.menuItems = [];
45
46 /**
47 * Id of the clear button.
48 * @type {string}
49 */
50 cvox.SearchTool.CLEAR_ID = 'hdtb_rst';
51
52 /**
53 * Toggles a menu open / close by simulating a click.
54 */
55 cvox.SearchTool.toggleMenu = function() {
56 var menu = cvox.SearchTool.menus[cvox.SearchTool.menuIndex];
57 var menuDiv = menu.previousSibling;
58 cvox.DomUtil.clickElem(menuDiv, false, false, false);
59 };
60
61 /**
62 * Syncs the first item in the current menu to ChromeVox.
63 */
64 cvox.SearchTool.syncToMenu = function() {
65 cvox.SearchTool.menuItemIndex = 0;
66 cvox.SearchTool.toggleMenu();
67 cvox.SearchTool.populateMenuItems();
68 cvox.SearchTool.syncToMenuItem();
69 };
70
71 /**
72 * Syncs the current menu item to ChromeVox.
73 */
74 cvox.SearchTool.syncToMenuItem = function() {
75 var menuItem = cvox.SearchTool.menuItems[cvox.SearchTool.menuItemIndex];
76 cvox.ChromeVox.syncToNode(menuItem, true);
77 };
78
79 /**
80 * Fills in menuItems with the current menu's items.
81 */
82 cvox.SearchTool.populateMenuItems = function() {
83 var menu = cvox.SearchTool.menus[cvox.SearchTool.menuIndex];
84 cvox.SearchTool.menuItems = [];
85 /* For now, we just special case on the clear button. */
86 if (menu.id !== cvox.SearchTool.CLEAR_ID) {
87 var MENU_ITEM_SELECTOR = '.hdtbItm';
88 var menuItemNodeList = menu.querySelectorAll(MENU_ITEM_SELECTOR);
89 for (var i = 0; i < menuItemNodeList.length; i++) {
90 cvox.SearchTool.menuItems.push(menuItemNodeList.item(i));
91 }
92 } else {
93 cvox.SearchTool.menuItems = [];
94 cvox.SearchTool.menuItems.push(menu);
95 }
96 };
97
98 /**
99 * Fills in menus with the menus of the page.
100 */
101 cvox.SearchTool.populateMenus = function() {
102 var MENU_SELECTOR = '.hdtbU';
103 var menuDivs = document.querySelectorAll(MENU_SELECTOR);
104 for (var i = 0; i < menuDivs.length; i++) {
105 cvox.SearchTool.menus.push(menuDivs.item(i));
106 }
107
108 var clearDiv = document.getElementById(cvox.SearchTool.CLEAR_ID);
109 if (clearDiv) {
110 cvox.SearchTool.menus.push(clearDiv);
111 }
112 };
113
114 /**
115 * Switches focus to the tools interface, giving keyboard access.
116 */
117 cvox.SearchTool.activateTools = function() {
118 var MENU_BAR_SELECTOR = '#hdtbMenus';
119 var menuBar = document.querySelector(MENU_BAR_SELECTOR);
120 var MENUS_OPEN_CLASS = 'hdtb-td-o';
121 menuBar.className = MENUS_OPEN_CLASS;
122
123 cvox.SearchTool.populateMenus();
124 cvox.SearchTool.menuIndex = 0;
125 cvox.SearchTool.syncToMenu();
126 };
127
128 /**
129 * Goes to the link of the current menu item action.
130 */
131 cvox.SearchTool.gotoMenuItem = function() {
132 var menuItem = cvox.SearchTool.menuItems[cvox.SearchTool.menuItemIndex];
133 var LOCATION_INPUT_ID = '#lc-input';
134 var input = menuItem.querySelector(LOCATION_INPUT_ID);
135 /* Special case for setting location. */
136 if (input) {
137 input.focus();
138 return;
139 }
140
141 /* Custom Date Range. */
142 var CDR_ID = 'cdr_opt';
143 switch (menuItem.id) {
144 case cvox.SearchTool.CLEAR_ID:
145 window.location = menuItem.dataset.url;
146 break;
147 case CDR_ID:
148 var CDR_LINK_SELECTOR = '#cdrlnk';
149 var cdrLink = menuItem.querySelector(CDR_LINK_SELECTOR);
150 cvox.DomUtil.clickElem(cdrLink, false, false, false);
151 cvox.SearchTool.toggleMenu();
152 break;
153 default:
154 window.location = cvox.SearchUtil.extractURL(menuItem);
155 break;
156 }
157 };
158
159 /**
160 * Handles key events for the tools interface.
161 * @param {Event} evt Keydown event.
162 * @return {boolean} True if key was handled, false otherwise.
163 */
164 cvox.SearchTool.keyhandler = function(evt) {
165 if (cvox.SearchUtil.isSearchWidgetActive()) {
166 return false;
167 }
168
169 switch (evt.keyCode) {
170 case cvox.SearchConstants.KeyCode.UP:
171 cvox.SearchTool.menuItemIndex = cvox.SearchUtil.subOneWrap(
172 cvox.SearchTool.menuItemIndex, cvox.SearchTool.menuItems.length);
173 cvox.SearchTool.syncToMenuItem();
174 break;
175
176 case cvox.SearchConstants.KeyCode.DOWN:
177 cvox.SearchTool.menuItemIndex = cvox.SearchUtil.addOneWrap(
178 cvox.SearchTool.menuItemIndex, cvox.SearchTool.menuItems.length);
179 cvox.SearchTool.syncToMenuItem();
180 break;
181
182 case cvox.SearchConstants.KeyCode.LEFT:
183 cvox.SearchTool.toggleMenu();
184 cvox.SearchTool.menuIndex = cvox.SearchUtil.subOneWrap(
185 cvox.SearchTool.menuIndex, cvox.SearchTool.menus.length);
186 cvox.SearchTool.syncToMenu();
187 break;
188
189 case cvox.SearchConstants.KeyCode.RIGHT:
190 cvox.SearchTool.toggleMenu();
191 cvox.SearchTool.menuIndex = cvox.SearchUtil.addOneWrap(
192 cvox.SearchTool.menuIndex, cvox.SearchTool.menus.length);
193 cvox.SearchTool.syncToMenu();
194 break;
195
196 case cvox.SearchConstants.KeyCode.ENTER:
197 cvox.SearchTool.gotoMenuItem();
198 break;
199
200 default:
201 return false;
202 }
203 evt.preventDefault();
204 evt.stopPropagation();
205 return true;
206 };
OLDNEW
« no previous file with comments | « chrome/third_party/chromevox/extensions/searchvox/search.js ('k') | chrome/third_party/chromevox/extensions/searchvox/util.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698