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

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: 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=} showName
15 * @return {!Element} 16 * @return {!Element}
16 */ 17 */
17 badgeForFrame(frame) { 18 badgeForFrame(frame, showName) {
18 return this._badgeForFrameOrUrl(this._resolveUrl.bind(this, frame)); 19 return this._badgeForFrameOrUrl(this._resolveUrl.bind(this, frame), showName );
19 } 20 }
20 21
21 /** 22 /**
22 * @param {!Common.ParsedURL} parsedUrl 23 * @param {!Common.ParsedURL} parsedUrl
24 * @param {boolean=} showName
23 * @return {!Element} 25 * @return {!Element}
24 */ 26 */
25 badgeForURL(parsedUrl) { 27 badgeForURL(parsedUrl, showName) {
26 return this._badgeForFrameOrUrl(() => Promise.resolve(parsedUrl)); 28 return this._badgeForFrameOrUrl(() => Promise.resolve(parsedUrl), showName);
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=} showName
35 * @return {!Element} 38 * @return {!Element}
36 */ 39 */
37 _badgeForFrameOrUrl(urlResolver) { 40 _badgeForFrameOrUrl(urlResolver, showName) {
38 var element = createElement('span'); 41 var element = createElement('span');
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 hidden'); 43 var badgeElement = root.createChild('span');
41 badgeElement.setAttribute('data-initial', ' '); 44 badgeElement.classList.toggle('hide-badge-title', !showName);
pfeldman 2017/05/18 20:18:33 'hide'
alph 2017/05/18 22:56:02 Done.
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} element
76 */ 77 */
77 async _renderBadge(badgeElement) { 78 async _renderBadge(element) {
pfeldman 2017/05/18 20:18:33 I thought you could do it in one line.
alph 2017/05/18 22:56:02 I can't
78 var registry = await ProductRegistry.instance(); 79 var registry = await ProductRegistry.instance();
79 if (!this._badgeElements.has(badgeElement)) 80 if (!this._badgeElements.has(element))
80 return; 81 return;
81 var parsedUrl = await this._badgeElements.get(badgeElement)(); 82 element.removeChildren();
83 element.classList.add('hidden');
84
85 var parsedUrl = await this._badgeElements.get(element)();
82 var entryName = registry.nameForUrl(parsedUrl); 86 var entryName = registry.nameForUrl(parsedUrl);
87 if (!entryName)
88 return;
83 89
84 if (!entryName) { 90 var tokens = entryName.replace(/[a-z]*/g, '').split(' ');
85 badgeElement.setAttribute('data-initial', ' '); 91 var label = tokens.length > 1 ? tokens[0][0] + tokens[1][0] : entryName;
86 badgeElement.title = '';
87 badgeElement.style.removeProperty('background-color');
88 return;
89 }
90 92
91 var label; 93 var badgeElement = element.createChild('span', 'product-registry-badge monos pace');
92 var tokens = entryName.replace(/[a-z]*/g, '').split(' ');
93 if (tokens.length > 1)
94 label = tokens[0][0] + tokens[1][0];
95 else
96 label = entryName;
97
98 badgeElement.setAttribute('data-initial', label.substring(0, 2).toUpperCase( )); 94 badgeElement.setAttribute('data-initial', label.substring(0, 2).toUpperCase( ));
99 badgeElement.title = entryName; 95 badgeElement.title = entryName;
100 badgeElement.style.backgroundColor = ProductRegistry.BadgePool.colorForEntry Name(entryName); 96 badgeElement.style.backgroundColor = ProductRegistry.BadgePool.colorForEntry Name(entryName);
101 badgeElement.classList.toggle('hidden', !this._setting.get()); 97
98 element.createChild('span', 'badge-title').textContent = entryName;
99 element.classList.toggle('hidden', !this._setting.get());
102 } 100 }
103 101
104 _settingUpdated() { 102 _settingUpdated() {
105 var enabled = this._setting.get(); 103 var enabled = this._setting.get();
106 if (!enabled) { 104 if (!enabled) {
107 for (var badgeElement of this._badgeElements.keys()) 105 for (var badgeElement of this._badgeElements.keys())
108 badgeElement.classList.add('hidden'); 106 badgeElement.classList.add('hidden');
109 return; 107 return;
110 } 108 }
111 for (var badgeElement of this._badgeElements.keys()) 109 for (var badgeElement of this._badgeElements.keys())
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 * @return {string} 147 * @return {string}
150 */ 148 */
151 static colorForEntryName(entryName) { 149 static colorForEntryName(entryName) {
152 if (!ProductRegistry.BadgePool._colorGenerator) { 150 if (!ProductRegistry.BadgePool._colorGenerator) {
153 ProductRegistry.BadgePool._colorGenerator = 151 ProductRegistry.BadgePool._colorGenerator =
154 new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, cou nt: 3}, 80); 152 new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, cou nt: 3}, 80);
155 } 153 }
156 return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName); 154 return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName);
157 } 155 }
158 }; 156 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698