Chromium Code Reviews| 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 |