OLD | NEW |
---|---|
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 Loading... | |
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 }; |
OLD | NEW |