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

Side by Side Diff: ui/webui/resources/js/util.js

Issue 2163893003: Start sending auxclick instead of click for non-primary buttons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Another rebase Created 4 years, 4 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
« no previous file with comments | « tools/metrics/histograms/histograms.xml ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 // <include src="assert.js"> 5 // <include src="assert.js">
6 6
7 /** 7 /**
8 * Alias for document.getElementById. Found elements must be HTMLElements. 8 * Alias for document.getElementById. Found elements must be HTMLElements.
9 * @param {string} id The ID of the element to find. 9 * @param {string} id The ID of the element to find.
10 * @return {HTMLElement} The found element or null if not found. 10 * @return {HTMLElement} The found element or null if not found.
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 * @return {!HTMLElement} the Element. 205 * @return {!HTMLElement} the Element.
206 */ 206 */
207 function queryRequiredElement(selectors, opt_context) { 207 function queryRequiredElement(selectors, opt_context) {
208 var element = (opt_context || document).querySelector(selectors); 208 var element = (opt_context || document).querySelector(selectors);
209 return assertInstanceof(element, HTMLElement, 209 return assertInstanceof(element, HTMLElement,
210 'Missing required element: ' + selectors); 210 'Missing required element: ' + selectors);
211 } 211 }
212 212
213 // Handle click on a link. If the link points to a chrome: or file: url, then 213 // Handle click on a link. If the link points to a chrome: or file: url, then
214 // call into the browser to do the navigation. 214 // call into the browser to do the navigation.
215 document.addEventListener('click', function(e) { 215 ['click', 'auxclick'].forEach(function(eventName) {
216 if (e.defaultPrevented) 216 document.addEventListener(eventName, function(e) {
217 return; 217 if (e.defaultPrevented)
218 return;
218 219
219 var eventPath = e.path; 220 var eventPath = e.path;
220 var anchor = null; 221 var anchor = null;
221 if (eventPath) { 222 if (eventPath) {
222 for (var i = 0; i < eventPath.length; i++) { 223 for (var i = 0; i < eventPath.length; i++) {
223 var element = eventPath[i]; 224 var element = eventPath[i];
224 if (element.tagName === 'A' && element.href) { 225 if (element.tagName === 'A' && element.href) {
225 anchor = element; 226 anchor = element;
226 break; 227 break;
228 }
227 } 229 }
228 } 230 }
229 }
230 231
231 // Fallback if Event.path is not available. 232 // Fallback if Event.path is not available.
232 var el = e.target; 233 var el = e.target;
233 if (!anchor && el.nodeType == Node.ELEMENT_NODE && 234 if (!anchor && el.nodeType == Node.ELEMENT_NODE &&
234 el.webkitMatchesSelector('A, A *')) { 235 el.webkitMatchesSelector('A, A *')) {
235 while (el.tagName != 'A') { 236 while (el.tagName != 'A') {
236 el = el.parentElement; 237 el = el.parentElement;
238 }
239 anchor = el;
237 } 240 }
238 anchor = el;
239 }
240 241
241 if (!anchor) 242 if (!anchor)
242 return; 243 return;
243 244
244 anchor = /** @type {!HTMLAnchorElement} */(anchor); 245 anchor = /** @type {!HTMLAnchorElement} */(anchor);
245 if ((anchor.protocol == 'file:' || anchor.protocol == 'about:') && 246 if ((anchor.protocol == 'file:' || anchor.protocol == 'about:') &&
246 (e.button == 0 || e.button == 1)) { 247 (e.button == 0 || e.button == 1)) {
247 chrome.send('navigateToUrl', [ 248 chrome.send('navigateToUrl', [
248 anchor.href, 249 anchor.href,
249 anchor.target, 250 anchor.target,
250 e.button, 251 e.button,
251 e.altKey, 252 e.altKey,
252 e.ctrlKey, 253 e.ctrlKey,
253 e.metaKey, 254 e.metaKey,
254 e.shiftKey 255 e.shiftKey
255 ]); 256 ]);
256 e.preventDefault(); 257 e.preventDefault();
257 } 258 }
259 });
258 }); 260 });
259 261
260 /** 262 /**
261 * Creates a new URL which is the old URL with a GET param of key=value. 263 * Creates a new URL which is the old URL with a GET param of key=value.
262 * @param {string} url The base URL. There is not sanity checking on the URL so 264 * @param {string} url The base URL. There is not sanity checking on the URL so
263 * it must be passed in a proper format. 265 * it must be passed in a proper format.
264 * @param {string} key The key of the param. 266 * @param {string} key The key of the param.
265 * @param {string} value The value of the param. 267 * @param {string} value The value of the param.
266 * @return {string} The new URL. 268 * @return {string} The new URL.
267 */ 269 */
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 case 0xdb: return '['; 452 case 0xdb: return '[';
451 case 0xdd: return ']'; 453 case 0xdd: return ']';
452 } 454 }
453 return 'Unidentified'; 455 return 'Unidentified';
454 } 456 }
455 }); 457 });
456 } else { 458 } else {
457 window.console.log("KeyboardEvent.Key polyfill not required"); 459 window.console.log("KeyboardEvent.Key polyfill not required");
458 } 460 }
459 // </if> /* is_ios */ 461 // </if> /* is_ios */
OLDNEW
« no previous file with comments | « tools/metrics/histograms/histograms.xml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698