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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/product_registry/BadgePool.js

Issue 2886393003: DevTools: Use badges to render products in timeline details. (Closed)
Patch Set: addressing comments Created 3 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 ProductRegistry.BadgePool = class { 5 ProductRegistry.BadgePool = class {
6 constructor() { 6 constructor() {
7 this._setting = Common.settings.moduleSetting('product_registry.badges-visib le'); 7 this._setting = Common.settings.moduleSetting('product_registry.badges-visib le');
8 this._setting.addChangeListener(this._settingUpdated.bind(this)); 8 this._setting.addChangeListener(this._settingUpdated.bind(this));
9 /** @type {!Map<!Element, function():!Promise<!Common.ParsedURL>>}*/ 9 /** @type {!Map<!Element, function():!Promise<!Common.ParsedURL>>}*/
10 this._badgeElements = new Map(); 10 this._badgeElements = new Map();
11 } 11 }
12 12
13 /** 13 /**
14 * @param {!SDK.ResourceTreeFrame} frame 14 * @param {!SDK.ResourceTreeFrame} frame
15 * @param {boolean=} showTitle
15 * @return {!Element} 16 * @return {!Element}
16 */ 17 */
17 badgeForFrame(frame) { 18 badgeForFrame(frame, showTitle) {
18 return this._badgeForFrameOrUrl(this._resolveUrl.bind(this, frame)); 19 return this._badgeForFrameOrUrl(this._resolveUrl.bind(this, frame), showTitl e);
19 } 20 }
20 21
21 /** 22 /**
22 * @param {!Common.ParsedURL} parsedUrl 23 * @param {!Common.ParsedURL} parsedUrl
24 * @param {boolean=} showTitle
23 * @return {!Element} 25 * @return {!Element}
24 */ 26 */
25 badgeForURL(parsedUrl) { 27 badgeForURL(parsedUrl, showTitle) {
26 return this._badgeForFrameOrUrl(() => Promise.resolve(parsedUrl)); 28 return this._badgeForFrameOrUrl(() => Promise.resolve(parsedUrl), showTitle) ;
27 } 29 }
28 30
29 reset() { 31 reset() {
30 this._badgeElements.clear(); 32 this._badgeElements.clear();
31 } 33 }
32 34
33 /** 35 /**
34 * @param {function():!Promise<!Common.ParsedURL>} urlResolver 36 * @param {function():!Promise<!Common.ParsedURL>} urlResolver
37 * @param {boolean=} showTitle
35 * @return {!Element} 38 * @return {!Element}
36 */ 39 */
37 _badgeForFrameOrUrl(urlResolver) { 40 _badgeForFrameOrUrl(urlResolver, showTitle) {
38 var element = createElementWithClass('span', 'hidden'); 41 var element = createElementWithClass('span', 'hidden');
39 var root = UI.createShadowRootWithCoreStyles(element, 'product_registry/badg e.css'); 42 var root = UI.createShadowRootWithCoreStyles(element, 'product_registry/badg e.css');
40 var badgeElement = root.createChild('span', 'product-registry-badge monospac e'); 43 var badgeElement = root.createChild('span');
41 badgeElement.setAttribute('data-initial', ' '); 44 badgeElement.classList.toggle('hide-badge-title', !showTitle);
42 badgeElement.title = '';
43 badgeElement.addEventListener('mousedown', event => event.consume()); 45 badgeElement.addEventListener('mousedown', event => event.consume());
44 badgeElement.addEventListener('click', event => { 46 badgeElement.addEventListener('click', event => {
45 this._showPopup(badgeElement); 47 this._showPopup(badgeElement);
46 event.consume(); 48 event.consume();
47 }, false); 49 }, false);
48
49 this._badgeElements.set(badgeElement, urlResolver); 50 this._badgeElements.set(badgeElement, urlResolver);
50 if (this._setting.get()) 51 if (this._setting.get())
51 this._renderBadge(badgeElement); 52 this._renderBadge(badgeElement);
52 return element; 53 return element;
53 } 54 }
54 55
55 /** 56 /**
56 * @param {?SDK.ResourceTreeFrame} frame 57 * @param {?SDK.ResourceTreeFrame} frame
57 * @return {!Promise<!Common.ParsedURL>} 58 * @return {!Promise<!Common.ParsedURL>}
58 */ 59 */
59 async _resolveUrl(frame) { 60 async _resolveUrl(frame) {
60 var registry = await ProductRegistry.instance(); 61 var registry = await ProductRegistry.instance();
61 var parsedUrl = new Common.ParsedURL(frame.url); 62 var parsedUrl = new Common.ParsedURL(frame.url);
62 var entry = registry.entryForUrl(parsedUrl); 63 var entry = registry.entryForUrl(parsedUrl);
63 if (!entry) { 64 if (!entry) {
64 frame.findCreationCallFrame(callFrame => { 65 frame.findCreationCallFrame(callFrame => {
65 if (!callFrame.url) 66 if (!callFrame.url)
66 return false; 67 return false;
67 parsedUrl = new Common.ParsedURL(callFrame.url); 68 parsedUrl = new Common.ParsedURL(callFrame.url);
68 return !!registry.entryForUrl(parsedUrl); 69 return !!registry.entryForUrl(parsedUrl);
69 }); 70 });
70 } 71 }
71 return parsedUrl; 72 return parsedUrl;
72 } 73 }
73 74
74 /** 75 /**
75 * @param {!Element} badgeElement 76 * @param {!Element} badgeElement
76 */ 77 */
77 async _renderBadge(badgeElement) { 78 async _renderBadge(badgeElement) {
78 var registry = await ProductRegistry.instance();
79 if (!this._badgeElements.has(badgeElement)) 79 if (!this._badgeElements.has(badgeElement))
80 return; 80 return;
81 var parsedUrl = await this._badgeElements.get(badgeElement)(); 81 if (badgeElement.children.length) {
82 var entryName = registry.nameForUrl(parsedUrl); 82 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList.r emove('hidden');
pfeldman 2017/05/18 23:50:36 extract method?
83
84 if (!entryName) {
85 badgeElement.setAttribute('data-initial', ' ');
86 badgeElement.title = '';
87 badgeElement.style.removeProperty('background-color');
88 return; 83 return;
89 } 84 }
90 85
86 var parsedUrl = await this._badgeElements.get(badgeElement)();
87 var registry = await ProductRegistry.instance();
88 var entryName = registry.nameForUrl(parsedUrl);
89 if (!entryName)
90 return;
91
92 var tokens = entryName.replace(/[a-z]*/g, '').split(' ');
91 var label; 93 var label;
92 var tokens = entryName.replace(/[a-z]*/g, '').split(' ');
93 if (tokens.length > 1) 94 if (tokens.length > 1)
94 label = tokens[0][0] + tokens[1][0]; 95 label = tokens[0][0] + tokens[1][0];
95 else 96 else
96 label = entryName; 97 label = entryName;
97 98
98 badgeElement.setAttribute('data-initial', label.substring(0, 2).toUpperCase( )); 99 var iconElement = badgeElement.createChild('span', 'product-registry-badge m onospace');
99 badgeElement.title = entryName; 100 iconElement.setAttribute('data-initial', label.substring(0, 2).toUpperCase() );
100 badgeElement.style.backgroundColor = ProductRegistry.BadgePool.colorForEntry Name(entryName); 101 iconElement.title = entryName;
102 iconElement.style.backgroundColor = ProductRegistry.BadgePool.colorForEntryN ame(entryName);
103
104 badgeElement.createChild('span', 'product-registry-badge-title').textContent = entryName;
101 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList.tog gle('hidden', !this._setting.get()); 105 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList.tog gle('hidden', !this._setting.get());
102 } 106 }
103 107
104 _settingUpdated() { 108 _settingUpdated() {
105 var enabled = this._setting.get(); 109 var enabled = this._setting.get();
106 if (!enabled) { 110 for (var badgeElement of this._badgeElements.keys()) {
107 for (var badgeElement of this._badgeElements.keys()) 111 if (enabled)
pfeldman 2017/05/18 23:50:36 don't!
112 this._renderBadge(badgeElement);
113 else
108 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList .add('hidden'); 114 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList .add('hidden');
109 return;
110 } 115 }
111 for (var badgeElement of this._badgeElements.keys())
112 this._renderBadge(badgeElement);
113 } 116 }
114 117
115 /** 118 /**
116 * @param {!Element} badgeElement 119 * @param {!Element} badgeElement
117 */ 120 */
118 async _showPopup(badgeElement) { 121 async _showPopup(badgeElement) {
119 if (!this._badgeElements.has(badgeElement)) 122 if (!this._badgeElements.has(badgeElement))
120 return; 123 return;
121 124
122 var registry = await ProductRegistry.instance(); 125 var registry = await ProductRegistry.instance();
(...skipping 26 matching lines...) Expand all
149 * @return {string} 152 * @return {string}
150 */ 153 */
151 static colorForEntryName(entryName) { 154 static colorForEntryName(entryName) {
152 if (!ProductRegistry.BadgePool._colorGenerator) { 155 if (!ProductRegistry.BadgePool._colorGenerator) {
153 ProductRegistry.BadgePool._colorGenerator = 156 ProductRegistry.BadgePool._colorGenerator =
154 new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, cou nt: 3}, 80); 157 new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, cou nt: 3}, 80);
155 } 158 }
156 return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName); 159 return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName);
157 } 160 }
158 }; 161 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698