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

Side by Side Diff: chrome/browser/resources/options/password_manager_list.js

Issue 1477133002: Enables opening an origin from password exceptions list ("Never save" list) with keyboard. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 | « no previous file | 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 cr.define('options.passwordManager', function() { 5 cr.define('options.passwordManager', function() {
6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; 6 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
7 /** @const */ var DeletableItemList = options.DeletableItemList; 7 /** @const */ var DeletableItemList = options.DeletableItemList;
8 /** @const */ var DeletableItem = options.DeletableItem; 8 /** @const */ var DeletableItem = options.DeletableItem;
9 /** @const */ var List = cr.ui.List; 9 /** @const */ var List = cr.ui.List;
10 10
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 url = url.replace(/[^A-Za-z0-9]+$/, ''); 60 url = url.replace(/[^A-Za-z0-9]+$/, '');
61 return url; 61 return url;
62 } 62 }
63 63
64 PasswordListItem.prototype = { 64 PasswordListItem.prototype = {
65 __proto__: DeletableItem.prototype, 65 __proto__: DeletableItem.prototype,
66 66
67 /** @override */ 67 /** @override */
68 decorate: function() { 68 decorate: function() {
69 DeletableItem.prototype.decorate.call(this); 69 DeletableItem.prototype.decorate.call(this);
70 var deletableItem = this;
70 71
71 // The URL of the site. 72 // The URL of the site.
72 var urlDiv = this.ownerDocument.createElement('div'); 73 var urlDiv = this.ownerDocument.createElement('div');
73 urlDiv.className = 'favicon-cell left-elided-url url'; 74 urlDiv.className = 'favicon-cell left-elided-url url';
74 urlDiv.setAttribute( 75 urlDiv.setAttribute(
75 'title', getTitleForPasswordOrigin(this.url, this.isUrlSecure)); 76 'title', getTitleForPasswordOrigin(this.url, this.isUrlSecure));
76 var urlLink = this.ownerDocument.createElement('a'); 77 var urlLink = this.ownerDocument.createElement('a');
77 urlLink.href = this.url; 78 urlLink.href = this.url;
78 urlLink.setAttribute('target', '_blank'); 79 urlLink.setAttribute('target', '_blank');
79 urlLink.textContent = this.shownUrl.split('').reverse().join(''); 80 urlLink.textContent = this.shownUrl.split('').reverse().join('');
81 urlLink.addEventListener('focus', function() {
82 deletableItem.handleFocus();
Evan Stade 2015/11/30 18:23:36 urlLink.addEventListener('focus', function() { t
kolos1 2015/12/01 09:00:13 Thanks. Done.
83 });
80 urlDiv.appendChild(urlLink); 84 urlDiv.appendChild(urlLink);
81 urlDiv.style.backgroundImage = getFaviconImageSet( 85 urlDiv.style.backgroundImage = getFaviconImageSet(
82 'origin/' + this.url, 16); 86 'origin/' + this.url, 16);
83 this.contentElement.appendChild(urlDiv); 87 this.contentElement.appendChild(urlDiv);
84 this.urlLink = urlLink; 88 this.urlLink = urlLink;
85 89
86 // The stored username. 90 // The stored username.
87 var usernameDiv = this.ownerDocument.createElement('div'); 91 var usernameDiv = this.ownerDocument.createElement('div');
88 usernameDiv.className = 'name'; 92 usernameDiv.className = 'name';
89 usernameDiv.title = this.username; 93 usernameDiv.title = this.username;
90 this.contentElement.appendChild(usernameDiv); 94 this.contentElement.appendChild(usernameDiv);
91 var usernameInput = this.ownerDocument.createElement('input'); 95 var usernameInput = this.ownerDocument.createElement('input');
92 usernameInput.type = 'text'; 96 usernameInput.type = 'text';
93 usernameInput.className = 'inactive-item'; 97 usernameInput.className = 'inactive-item';
94 usernameInput.readOnly = true; 98 usernameInput.readOnly = true;
95 usernameInput.value = this.username; 99 usernameInput.value = this.username;
100 usernameInput.addEventListener('focus', function() {
101 deletableItem.handleFocus();
102 });
96 usernameDiv.appendChild(usernameInput); 103 usernameDiv.appendChild(usernameInput);
97 this.usernameField = usernameInput; 104 this.usernameField = usernameInput;
98 105
99 if (this.federation) { 106 if (this.federation) {
100 // The federation. 107 // The federation.
101 var federationDiv = this.ownerDocument.createElement('div'); 108 var federationDiv = this.ownerDocument.createElement('div');
102 federationDiv.className = 'federation'; 109 federationDiv.className = 'federation';
103 federationDiv.textContent = this.federation; 110 federationDiv.textContent = this.federation;
104 this.contentElement.appendChild(federationDiv); 111 this.contentElement.appendChild(federationDiv);
105 } else { 112 } else {
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 } 317 }
311 318
312 PasswordExceptionsListItem.prototype = { 319 PasswordExceptionsListItem.prototype = {
313 __proto__: DeletableItem.prototype, 320 __proto__: DeletableItem.prototype,
314 321
315 /** 322 /**
316 * Call when an element is decorated as a list item. 323 * Call when an element is decorated as a list item.
317 */ 324 */
318 decorate: function() { 325 decorate: function() {
319 DeletableItem.prototype.decorate.call(this); 326 DeletableItem.prototype.decorate.call(this);
327 var deletableItem = this;
320 328
321 // The URL of the site. 329 // The URL of the site.
322 var urlDiv = this.ownerDocument.createElement('div'); 330 var urlDiv = this.ownerDocument.createElement('div');
323 urlDiv.className = 'url'; 331 urlDiv.className = 'url';
324 urlDiv.classList.add('favicon-cell'); 332 urlDiv.classList.add('favicon-cell');
325 urlDiv.classList.add('left-elided-url'); 333 urlDiv.classList.add('left-elided-url');
326 urlDiv.setAttribute( 334 urlDiv.setAttribute(
327 'title', getTitleForPasswordOrigin(this.url, this.isUrlSecure)); 335 'title', getTitleForPasswordOrigin(this.url, this.isUrlSecure));
328 var urlLink = this.ownerDocument.createElement('a'); 336 var urlLink = this.ownerDocument.createElement('a');
329 urlLink.href = this.url; 337 urlLink.href = this.url;
330 urlLink.textContent = this.shownUrl.split('').reverse().join(''); 338 urlLink.textContent = this.shownUrl.split('').reverse().join('');
331 urlLink.setAttribute('target', '_blank'); 339 urlLink.setAttribute('target', '_blank');
340 urlLink.addEventListener('focus', function() {
341 deletableItem.handleFocus();
342 });
343 this.urlLink = urlLink;
332 urlDiv.appendChild(urlLink); 344 urlDiv.appendChild(urlLink);
333 urlDiv.style.backgroundImage = getFaviconImageSet( 345 urlDiv.style.backgroundImage = getFaviconImageSet(
334 'origin/' + this.url, 16); 346 'origin/' + this.url, 16);
335 urlLink.tabIndex = -1;
336 this.contentElement.appendChild(urlDiv); 347 this.contentElement.appendChild(urlDiv);
337 }, 348 },
338 349
350 /** @override */
351 selectionChanged: function() {
352 if (this.selected) {
353 this.setFocusable_(true);
354 this.urlLink.focus();
355 } else {
356 this.setFocusable_(false);
357 }
358 },
359
360 /**
361 * Set the focusability of this row.
362 * @param {boolean} focusable
363 * @private
364 */
365 setFocusable_: function(focusable) {
366 var tabIndex = focusable ? 0 : -1;
367 this.urlLink.tabIndex = tabIndex;
368 this.closeButtonElement.tabIndex = tabIndex;
369 },
370
339 /** 371 /**
340 * Get the url for the entry. 372 * Get the url for the entry.
341 * @type {string} 373 * @type {string}
342 */ 374 */
343 get url() { 375 get url() {
344 return this.dataItem[ORIGIN_FIELD]; 376 return this.dataItem[ORIGIN_FIELD];
345 }, 377 },
346 set url(url) { 378 set url(url) {
347 this.dataItem[ORIGIN_FIELD] = url; 379 this.dataItem[ORIGIN_FIELD] = url;
348 }, 380 },
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 PasswordExceptionsList: PasswordExceptionsList, 518 PasswordExceptionsList: PasswordExceptionsList,
487 ORIGIN_FIELD: ORIGIN_FIELD, 519 ORIGIN_FIELD: ORIGIN_FIELD,
488 SHOWN_URL_FIELD: SHOWN_URL_FIELD, 520 SHOWN_URL_FIELD: SHOWN_URL_FIELD,
489 IS_SECURE_FIELD: IS_SECURE_FIELD, 521 IS_SECURE_FIELD: IS_SECURE_FIELD,
490 USERNAME_FIELD: USERNAME_FIELD, 522 USERNAME_FIELD: USERNAME_FIELD,
491 PASSWORD_FIELD: PASSWORD_FIELD, 523 PASSWORD_FIELD: PASSWORD_FIELD,
492 FEDERATION_FIELD: FEDERATION_FIELD, 524 FEDERATION_FIELD: FEDERATION_FIELD,
493 ORIGINAL_INDEX_FIELD: ORIGINAL_INDEX_FIELD 525 ORIGINAL_INDEX_FIELD: ORIGINAL_INDEX_FIELD
494 }; 526 };
495 }); 527 });
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698