[module.json extensions] @UI.ToolbarItem.Provider Part 2
Bug: 1134103
Change-Id: I1674bd9bcc12f19aa51405d9fd8ef6a9c7965331
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2684120
Commit-Queue: Andres Olivares <[email protected]>
Reviewed-by: Tim van der Lippe <[email protected]>
diff --git a/front_end/elements/ClassesPaneWidget.js b/front_end/elements/ClassesPaneWidget.js
index bb23a5a..559a916 100644
--- a/front_end/elements/ClassesPaneWidget.js
+++ b/front_end/elements/ClassesPaneWidget.js
@@ -265,10 +265,14 @@
/** @type {!WeakMap<!SDK.DOMModel.DOMNode, !Map<string, boolean>>} */
const cachedClassesMap = new WeakMap();
+/** @type {!ButtonProvider} */
+let buttonProviderInstance;
+
/**
* @implements {UI.Toolbar.Provider}
*/
export class ButtonProvider {
+ /** @private */
constructor() {
this._button = new UI.Toolbar.ToolbarToggle(Common.UIString.UIString('Element Classes'), '');
this._button.setText('.cls');
@@ -277,6 +281,18 @@
this._view = new ClassesPaneWidget();
}
+ /**
+ * @param {{forceNew: ?boolean}} opts
+ */
+ static instance(opts = {forceNew: null}) {
+ const {forceNew} = opts;
+ if (!buttonProviderInstance || forceNew) {
+ buttonProviderInstance = new ButtonProvider();
+ }
+
+ return buttonProviderInstance;
+ }
+
_clicked() {
ElementsPanel.instance().showToolbarPane(!this._view.isShowing() ? this._view : null, this._button);
}
diff --git a/front_end/elements/ElementStatePaneWidget.js b/front_end/elements/ElementStatePaneWidget.js
index a6c2b12..3f858e0 100644
--- a/front_end/elements/ElementStatePaneWidget.js
+++ b/front_end/elements/ElementStatePaneWidget.js
@@ -125,10 +125,14 @@
}
}
+/** @type {!ButtonProvider} */
+let buttonProviderInstance;
+
/**
* @implements {UI.Toolbar.Provider}
*/
export class ButtonProvider {
+ /** @private */
constructor() {
this._button = new UI.Toolbar.ToolbarToggle(Common.UIString.UIString('Toggle Element State'), '');
this._button.setText(Common.UIString.UIString(':hov'));
@@ -137,6 +141,18 @@
this._view = new ElementStatePaneWidget();
}
+ /**
+ * @param {{forceNew: ?boolean}} opts
+ */
+ static instance(opts = {forceNew: null}) {
+ const {forceNew} = opts;
+ if (!buttonProviderInstance || forceNew) {
+ buttonProviderInstance = new ButtonProvider();
+ }
+
+ return buttonProviderInstance;
+ }
+
_clicked() {
ElementsPanel.instance().showToolbarPane(!this._view.isShowing() ? this._view : null, this._button);
}
diff --git a/front_end/elements/StylesSidebarPane.js b/front_end/elements/StylesSidebarPane.js
index 5adf097..4ebf4c6 100644
--- a/front_end/elements/StylesSidebarPane.js
+++ b/front_end/elements/StylesSidebarPane.js
@@ -3231,10 +3231,14 @@
}
}
+/** @type {!ButtonProvider} */
+let buttonProviderInstance;
+
/**
* @implements {UI.Toolbar.Provider}
*/
export class ButtonProvider {
+ /** @private */
constructor() {
this._button = new UI.Toolbar.ToolbarButton(Common.UIString.UIString('New Style Rule'), 'largeicon-add');
this._button.addEventListener(UI.Toolbar.ToolbarButton.Events.Click, this._clicked, this);
@@ -3256,6 +3260,18 @@
}
/**
+ * @param {{forceNew: ?boolean}} opts
+ */
+ static instance(opts = {forceNew: null}) {
+ const {forceNew} = opts;
+ if (!buttonProviderInstance || forceNew) {
+ buttonProviderInstance = new ButtonProvider();
+ }
+
+ return buttonProviderInstance;
+ }
+
+ /**
* @param {!Common.EventTarget.EventTargetEvent} event
*/
_clicked(event) {
diff --git a/front_end/elements/elements-meta.ts b/front_end/elements/elements-meta.ts
index a181531..bf08061 100644
--- a/front_end/elements/elements-meta.ts
+++ b/front_end/elements/elements-meta.ts
@@ -352,3 +352,52 @@
return Elements.ElementsPanel.CSSPropertyRevealer.instance();
},
});
+
+UI.Toolbar.registerToolbarItem({
+ async loadItem() {
+ const Elements = await loadElementsModule();
+ return Elements.ElementStatePaneWidget.ButtonProvider.instance();
+ },
+ order: 1,
+ location: UI.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR,
+ showLabel: undefined,
+ condition: undefined,
+ separator: undefined,
+ actionId: undefined,
+});
+
+UI.Toolbar.registerToolbarItem({
+ async loadItem() {
+ const Elements = await loadElementsModule();
+ return Elements.ClassesPaneWidget.ButtonProvider.instance();
+ },
+ order: 2,
+ location: UI.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR,
+ showLabel: undefined,
+ condition: undefined,
+ separator: undefined,
+ actionId: undefined,
+});
+
+UI.Toolbar.registerToolbarItem({
+ async loadItem() {
+ const Elements = await loadElementsModule();
+ return Elements.StylesSidebarPane.ButtonProvider.instance();
+ },
+ order: 100,
+ location: UI.Toolbar.ToolbarItemLocation.STYLES_SIDEBARPANE_TOOLBAR,
+ showLabel: undefined,
+ condition: undefined,
+ separator: undefined,
+ actionId: undefined,
+});
+
+UI.Toolbar.registerToolbarItem({
+ actionId: 'elements.toggle-element-search',
+ location: UI.Toolbar.ToolbarItemLocation.MAIN_TOOLBAR_LEFT,
+ order: 0,
+ showLabel: undefined,
+ condition: undefined,
+ separator: undefined,
+ loadItem: undefined,
+});
diff --git a/front_end/elements/module.json b/front_end/elements/module.json
index 3e83cd8..6ddedf1 100644
--- a/front_end/elements/module.json
+++ b/front_end/elements/module.json
@@ -17,24 +17,6 @@
"className": "Elements.DOMLinkifier.Linkifier"
},
{
- "type": "@UI.ToolbarItem.Provider",
- "className": "Elements.ElementStatePaneWidget.ButtonProvider",
- "order": 1,
- "location": "styles-sidebarpane-toolbar"
- },
- {
- "type": "@UI.ToolbarItem.Provider",
- "className": "Elements.ClassesPaneWidget.ButtonProvider",
- "order": 2,
- "location": "styles-sidebarpane-toolbar"
- },
- {
- "type": "@UI.ToolbarItem.Provider",
- "className": "Elements.StylesSidebarPane.ButtonProvider",
- "order": 100,
- "location": "styles-sidebarpane-toolbar"
- },
- {
"type": "@Elements.MarkerDecorator",
"className": "Elements.ElementsPanel.PseudoStateMarkerDecorator",
"marker": "pseudo-state-marker"
@@ -45,12 +27,6 @@
"marker": "hidden-marker",
"title": "Element is hidden",
"color": "#555"
- },
- {
- "type": "@UI.ToolbarItem.Provider",
- "actionId": "elements.toggle-element-search",
- "location": "main-toolbar-left",
- "order": 0
}
],
"dependencies": [