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

Side by Side Diff: chrome/browser/resources/extensions/extension_list.js

Issue 484033003: Open embedded extension options from the extension action context menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move tab opening code from chrome_pages to ExtensionTabUtil Created 6 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
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="extension_error.js"> 5 <include src="extension_error.js">
6 6
7 cr.define('options', function() { 7 cr.define('options', function() {
8 'use strict'; 8 'use strict';
9 9
10 /** 10 /**
(...skipping 15 matching lines...) Expand all
26 * @type {Object.<string, string>} A map from extension id to last reloaded 26 * @type {Object.<string, string>} A map from extension id to last reloaded
27 * timestamp. The timestamp is recorded when the user click the 'Reload' 27 * timestamp. The timestamp is recorded when the user click the 'Reload'
28 * link. It is used to refresh the icon of an unpacked extension. 28 * link. It is used to refresh the icon of an unpacked extension.
29 * This persists between calls to decorate. 29 * This persists between calls to decorate.
30 */ 30 */
31 var extensionReloadedTimestamp = {}; 31 var extensionReloadedTimestamp = {};
32 32
33 ExtensionsList.prototype = { 33 ExtensionsList.prototype = {
34 __proto__: HTMLDivElement.prototype, 34 __proto__: HTMLDivElement.prototype,
35 35
36 /**
37 * Indicates whether an embedded options page that was navigated to through
38 * the '?options=' URL query has been shown to the user. This is necessary
39 * to prevent showExtensionNodes_ from opening the options more than once.
Devlin 2014/08/19 22:20:41 Can this happen?
ericzeng 2014/08/19 22:47:51 Yes, I was getting weird behavior where showExtens
40 * @type {boolean}
41 * @private
42 */
43 optionsShown_: false,
44
36 /** @override */ 45 /** @override */
37 decorate: function() { 46 decorate: function() {
38 this.textContent = ''; 47 this.textContent = '';
39 48
40 this.showExtensionNodes_(); 49 this.showExtensionNodes_();
41 }, 50 },
42 51
43 getIdQueryParam_: function() { 52 getIdQueryParam_: function() {
44 return parseQueryParams(document.location)['id']; 53 return parseQueryParams(document.location)['id'];
45 }, 54 },
46 55
56 getOptionsQueryParam_: function() {
57 return parseQueryParams(document.location)['options'];
58 },
59
47 /** 60 /**
48 * Creates all extension items from scratch. 61 * Creates all extension items from scratch.
49 * @private 62 * @private
50 */ 63 */
51 showExtensionNodes_: function() { 64 showExtensionNodes_: function() {
52 // Iterate over the extension data and add each item to the list. 65 // Iterate over the extension data and add each item to the list.
53 this.data_.extensions.forEach(this.createNode_, this); 66 this.data_.extensions.forEach(this.createNode_, this);
54 67
55 var idToHighlight = this.getIdQueryParam_(); 68 var idToHighlight = this.getIdQueryParam_();
56 if (idToHighlight && $(idToHighlight)) { 69 if (idToHighlight && $(idToHighlight)) {
Devlin 2014/08/19 22:20:41 no brackets around single-line ifs.
ericzeng 2014/08/19 22:47:51 Done.
57 // Scroll offset should be calculated slightly higher than the actual 70 this.scrollToNode_(idToHighlight);
58 // offset of the element being scrolled to, so that it ends up not all 71 }
59 // the way at the top. That way it is clear that there are more elements 72
60 // above the element being scrolled to. 73 var idToOpenOptions = this.getOptionsQueryParam_();
61 var scrollFudge = 1.2; 74 if (idToOpenOptions && $(idToOpenOptions) && !this.optionsShown_) {
62 var scrollTop = $(idToHighlight).offsetTop - scrollFudge * 75 this.scrollToNode_(idToOpenOptions);
63 $(idToHighlight).clientHeight; 76 $(idToOpenOptions).querySelector('.options-link').click();
64 setScrollTopForDocument(document, scrollTop); 77 this.optionsShown_ = true;
65 } 78 }
66 79
67 if (this.data_.extensions.length == 0) 80 if (this.data_.extensions.length == 0)
68 this.classList.add('empty-extension-list'); 81 this.classList.add('empty-extension-list');
69 else 82 else
70 this.classList.remove('empty-extension-list'); 83 this.classList.remove('empty-extension-list');
71 }, 84 },
72 85
73 /** 86 /**
87 * Scrolls the page down to the extension node with the given id.
88 * @param {string} extensionId The id of the extension to scroll to.
89 * @private
90 */
91 scrollToNode_: function(extensionId) {
92 // Scroll offset should be calculated slightly higher than the actual
93 // offset of the element being scrolled to, so that it ends up not all
94 // the way at the top. That way it is clear that there are more elements
95 // above the element being scrolled to.
96 var scrollFudge = 1.2;
97 var scrollTop = $(extensionId).offsetTop - scrollFudge *
98 $(extensionId).clientHeight;
99 setScrollTopForDocument(document, scrollTop);
100 },
101
102 /**
74 * Synthesizes and initializes an HTML element for the extension metadata 103 * Synthesizes and initializes an HTML element for the extension metadata
75 * given in |extension|. 104 * given in |extension|.
76 * @param {Object} extension A dictionary of extension metadata. 105 * @param {Object} extension A dictionary of extension metadata.
77 * @private 106 * @private
78 */ 107 */
79 createNode_: function(extension) { 108 createNode_: function(extension) {
80 var template = $('template-collection').querySelector( 109 var template = $('template-collection').querySelector(
81 '.extension-list-item-wrapper'); 110 '.extension-list-item-wrapper');
82 var node = template.cloneNode(true); 111 var node = template.cloneNode(true);
83 node.id = extension.id; 112 node.id = extension.id;
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 topScroll -= pad / 2; 443 topScroll -= pad / 2;
415 setScrollTopForDocument(document, topScroll); 444 setScrollTopForDocument(document, topScroll);
416 } 445 }
417 }, 446 },
418 }; 447 };
419 448
420 return { 449 return {
421 ExtensionsList: ExtensionsList 450 ExtensionsList: ExtensionsList
422 }; 451 };
423 }); 452 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698