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 this._setBadgeElementHidden(badgeElement, false); |
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; |
101 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList.tog
gle('hidden', !this._setting.get()); | 102 iconElement.style.backgroundColor = ProductRegistry.BadgePool.colorForEntryN
ame(entryName); |
| 103 |
| 104 badgeElement.createChild('span', 'product-registry-badge-title').textContent
= entryName; |
| 105 this._setBadgeElementHidden(badgeElement, !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 if (!enabled) { |
107 for (var badgeElement of this._badgeElements.keys()) | 111 for (var badgeElement of this._badgeElements.keys()) |
108 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList
.add('hidden'); | 112 this._setBadgeElementHidden(badgeElement, true); |
109 return; | 113 return; |
110 } | 114 } |
111 for (var badgeElement of this._badgeElements.keys()) | 115 for (var badgeElement of this._badgeElements.keys()) |
112 this._renderBadge(badgeElement); | 116 this._renderBadge(badgeElement); |
113 } | 117 } |
114 | 118 |
115 /** | 119 /** |
116 * @param {!Element} badgeElement | 120 * @param {!Element} badgeElement |
| 121 * @param {boolean} hide |
| 122 */ |
| 123 _setBadgeElementHidden(badgeElement, hide) { |
| 124 badgeElement.parentNodeOrShadowHost().parentNodeOrShadowHost().classList.tog
gle('hidden', hide); |
| 125 } |
| 126 |
| 127 /** |
| 128 * @param {!Element} badgeElement |
117 */ | 129 */ |
118 async _showPopup(badgeElement) { | 130 async _showPopup(badgeElement) { |
119 if (!this._badgeElements.has(badgeElement)) | 131 if (!this._badgeElements.has(badgeElement)) |
120 return; | 132 return; |
121 | 133 |
122 var registry = await ProductRegistry.instance(); | 134 var registry = await ProductRegistry.instance(); |
123 var parsedUrl = await this._badgeElements.get(badgeElement)(); | 135 var parsedUrl = await this._badgeElements.get(badgeElement)(); |
124 var entryName = registry.nameForUrl(parsedUrl); | 136 var entryName = registry.nameForUrl(parsedUrl); |
125 | 137 |
126 var element = createElement('div'); | 138 var element = createElement('div'); |
(...skipping 22 matching lines...) Expand all Loading... |
149 * @return {string} | 161 * @return {string} |
150 */ | 162 */ |
151 static colorForEntryName(entryName) { | 163 static colorForEntryName(entryName) { |
152 if (!ProductRegistry.BadgePool._colorGenerator) { | 164 if (!ProductRegistry.BadgePool._colorGenerator) { |
153 ProductRegistry.BadgePool._colorGenerator = | 165 ProductRegistry.BadgePool._colorGenerator = |
154 new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, cou
nt: 3}, 80); | 166 new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, cou
nt: 3}, 80); |
155 } | 167 } |
156 return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName); | 168 return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName); |
157 } | 169 } |
158 }; | 170 }; |
OLD | NEW |