OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 /** |
| 6 * @fileoverview Support for omnibox behavior in offline mode or when API |
| 7 * features are not supported on the server. |
| 8 */ |
| 9 |
| 10 // ========================================================== |
| 11 // Enums. |
| 12 // ========================================================== |
| 13 |
| 14 /** |
| 15 * Possible behaviors for navigateContentWindow. |
| 16 * @enum {number} |
| 17 */ |
| 18 var WindowOpenDisposition = { |
| 19 CURRENT_TAB: 1, |
| 20 NEW_BACKGROUND_TAB: 2 |
| 21 }; |
| 22 |
| 23 /** |
| 24 * The JavaScript button event value for a middle click. |
| 25 * @type {number} |
| 26 * @const |
| 27 */ |
| 28 var MIDDLE_MOUSE_BUTTON = 1; |
| 29 |
5 // ============================================================================= | 30 // ============================================================================= |
6 // Util functions | 31 // Util functions |
7 // ============================================================================= | 32 // ============================================================================= |
8 | 33 |
9 /** | 34 /** |
10 * The maximum number of suggestions to show. | 35 * The maximum number of suggestions to show. |
11 * @type {number} | 36 * @type {number} |
12 * @const | 37 * @const |
13 */ | 38 */ |
14 var MAX_SUGGESTIONS_TO_SHOW = 5; | 39 var MAX_SUGGESTIONS_TO_SHOW = 5; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 suggestionDiv.classList.add('suggestion'); | 71 suggestionDiv.classList.add('suggestion'); |
47 if (select) | 72 if (select) |
48 suggestionDiv.classList.add('selected'); | 73 suggestionDiv.classList.add('selected'); |
49 | 74 |
50 var contentsContainer = document.createElement('div'); | 75 var contentsContainer = document.createElement('div'); |
51 contentsContainer.className = 'contents'; | 76 contentsContainer.className = 'contents'; |
52 var contents = suggestion.combinedNode; | 77 var contents = suggestion.combinedNode; |
53 contentsContainer.appendChild(contents); | 78 contentsContainer.appendChild(contents); |
54 suggestionDiv.appendChild(contentsContainer); | 79 suggestionDiv.appendChild(contentsContainer); |
55 var restrictedId = suggestion.rid; | 80 var restrictedId = suggestion.rid; |
56 suggestionDiv.onclick = function() { | 81 suggestionDiv.onclick = function(event) { |
57 handleSuggestionClick(restrictedId); | 82 handleSuggestionClick(restrictedId, event); |
58 }; | 83 }; |
59 | 84 |
60 restrictedIds.push(restrictedId); | 85 restrictedIds.push(restrictedId); |
61 box.appendChild(suggestionDiv); | 86 box.appendChild(suggestionDiv); |
62 } | 87 } |
63 | 88 |
64 /** | 89 /** |
65 * Renders the input suggestions. | 90 * Renders the input suggestions. |
66 * @param {Array} nativeSuggestions An array of native suggestions to render. | 91 * @param {Array} nativeSuggestions An array of native suggestions to render. |
67 */ | 92 */ |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 style.textContent = | 211 style.textContent = |
187 '.suggestion {' + | 212 '.suggestion {' + |
188 ' -webkit-margin-start: ' + apiHandle.startMargin + 'px;' + | 213 ' -webkit-margin-start: ' + apiHandle.startMargin + 'px;' + |
189 ' -webkit-margin-end: ' + apiHandle.endMargin + 'px;' + | 214 ' -webkit-margin-end: ' + apiHandle.endMargin + 'px;' + |
190 ' font: ' + apiHandle.fontSize + 'px "' + apiHandle.font + '";' + | 215 ' font: ' + apiHandle.fontSize + 'px "' + apiHandle.font + '";' + |
191 '}'; | 216 '}'; |
192 document.querySelector('head').appendChild(style); | 217 document.querySelector('head').appendChild(style); |
193 } | 218 } |
194 | 219 |
195 /** | 220 /** |
| 221 * Extract the desired navigation behavior from a click event. |
| 222 * @param {Event} event The click event. |
| 223 * @return {WindowOpenDisposition} The desired behavior for |
| 224 * navigateContentWindow. |
| 225 */ |
| 226 function getDispositionFromClick(event) { |
| 227 if (event.button == MIDDLE_MOUSE_BUTTON) |
| 228 return WindowOpenDisposition.NEW_BACKGROUND_TAB; |
| 229 return WindowOpenDisposition.CURRENT_TAB; |
| 230 } |
| 231 |
| 232 /** |
196 * Handles suggestion clicks. | 233 * Handles suggestion clicks. |
197 * @param {integer} restrictedId The restricted id of the suggestion being | 234 * @param {integer} restrictedId The restricted id of the suggestion being |
198 * clicked. | 235 * clicked. |
| 236 * @param {Event} event The click event. |
199 */ | 237 */ |
200 function handleSuggestionClick(restrictedId) { | 238 function handleSuggestionClick(restrictedId, event) { |
201 clearSuggestions(); | 239 clearSuggestions(); |
202 getApiObjectHandle().navigateContentWindow(restrictedId); | 240 getApiObjectHandle().navigateContentWindow(restrictedId, |
| 241 getDispositionFromClick(event)); |
203 } | 242 } |
204 | 243 |
205 /** | 244 /** |
206 * chrome.searchBox.onkeypress implementation. | 245 * chrome.searchBox.onkeypress implementation. |
207 * @param {Object} e The key being pressed. | 246 * @param {Object} e The key being pressed. |
208 */ | 247 */ |
209 function handleKeyPress(e) { | 248 function handleKeyPress(e) { |
210 switch (e.keyCode) { | 249 switch (e.keyCode) { |
211 case 38: // Up arrow | 250 case 38: // Up arrow |
212 updateSelectedSuggestion(false); | 251 updateSelectedSuggestion(false); |
(...skipping 18 matching lines...) Expand all Loading... |
231 apiHandle.onnativesuggestions = handleNativeSuggestions; | 270 apiHandle.onnativesuggestions = handleNativeSuggestions; |
232 apiHandle.onkeypress = handleKeyPress; | 271 apiHandle.onkeypress = handleKeyPress; |
233 apiHandle.onsubmit = onSubmit; | 272 apiHandle.onsubmit = onSubmit; |
234 appendSuggestionStyles(); | 273 appendSuggestionStyles(); |
235 | 274 |
236 if (apiHandle.nativeSuggestions.length) | 275 if (apiHandle.nativeSuggestions.length) |
237 handleNativeSuggestions(); | 276 handleNativeSuggestions(); |
238 } | 277 } |
239 | 278 |
240 document.addEventListener('DOMContentLoaded', setUpApi); | 279 document.addEventListener('DOMContentLoaded', setUpApi); |
OLD | NEW |