",
).body.innerHTML;
- const starterBrick = starterBrickFactory()();
- starterBrick.definition.containerSelector = ".menu";
- starterBrick.definition.attachMode = "watch";
+ const starterBrickDefinition = starterBrickFactory()();
+ starterBrickDefinition.definition.containerSelector = ".menu";
+ starterBrickDefinition.definition.attachMode = "watch";
- const extensionPoint = fromJS(getPlatform(), starterBrick);
+ const starterBrick = fromJS(getPlatform(), starterBrickDefinition);
- extensionPoint.registerModComponent(
+ starterBrick.registerModComponent(
modComponentFactory({
- extensionPointId: extensionPoint.id,
+ extensionPointId: starterBrick.id,
}),
);
- await extensionPoint.install();
- await extensionPoint.runModComponents({ reason: RunReason.MANUAL });
+ await starterBrick.install();
+ await starterBrick.runModComponents({ reason: RunReason.MANUAL });
expect(document.querySelectorAll("button")).toHaveLength(1);
$("div:first").append("");
@@ -374,26 +374,26 @@ describe("menuItemExtension", () => {
await tick();
expect(document.querySelectorAll("button")).toHaveLength(2);
- extensionPoint.uninstall();
+ starterBrick.uninstall();
});
it("once does not attach for new items", async () => {
// Test the quirky behavior of "once" mode when there are multiple elements on the page and the original menu
// is removed from the page
document.body.innerHTML = getDocument("").body.innerHTML;
- const starterBrick = starterBrickFactory()();
- starterBrick.definition.containerSelector = ".menu";
- starterBrick.definition.attachMode = "once";
+ const starterBrickDefinition = starterBrickFactory()();
+ starterBrickDefinition.definition.containerSelector = ".menu";
+ starterBrickDefinition.definition.attachMode = "once";
- const extensionPoint = fromJS(getPlatform(), starterBrick);
+ const starterBrick = fromJS(getPlatform(), starterBrickDefinition);
- extensionPoint.registerModComponent(
+ starterBrick.registerModComponent(
modComponentFactory({
- extensionPointId: extensionPoint.id,
+ extensionPointId: starterBrick.id,
}),
);
- const installPromise = extensionPoint.install();
+ const installPromise = starterBrick.install();
expect(document.querySelectorAll("button")).toHaveLength(0);
@@ -401,7 +401,7 @@ describe("menuItemExtension", () => {
await tick();
await tick();
await installPromise;
- await extensionPoint.runModComponents({ reason: RunReason.MANUAL });
+ await starterBrick.runModComponents({ reason: RunReason.MANUAL });
expect(document.querySelectorAll("button")).toHaveLength(1);
// 2 ticks were necessary in the watch test
@@ -418,6 +418,6 @@ describe("menuItemExtension", () => {
await tick();
expect(document.querySelectorAll("button")).toHaveLength(1);
- extensionPoint.uninstall();
+ starterBrick.uninstall();
});
});
diff --git a/src/starterBricks/menuItem/menuItemExtension.ts b/src/starterBricks/menuItem/menuItemStarterBrick.ts
similarity index 86%
rename from src/starterBricks/menuItem/menuItemExtension.ts
rename to src/starterBricks/menuItem/menuItemStarterBrick.ts
index 17a632927c..b52f6ad7d7 100644
--- a/src/starterBricks/menuItem/menuItemExtension.ts
+++ b/src/starterBricks/menuItem/menuItemStarterBrick.ts
@@ -88,7 +88,7 @@ import {
type AttachMode,
type MenuItemDefinition,
type MenuTargetMode,
-} from "@/starterBricks/menuItem/types";
+} from "@/starterBricks/menuItem/menuItemTypes";
import { assertNotNullish } from "@/utils/nullishUtils";
const DATA_ATTR = "data-pb-uuid";
@@ -126,20 +126,20 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC;
/**
- * Set of methods to call to cancel any DOM watchers associated with this extension point
+ * Set of methods to call to cancel any DOM watchers associated with this starter brick
*/
private readonly cancelController = new ReusableAbortController();
/**
- * True if the extension point has been uninstalled
+ * True if the starter brick has been uninstalled
*/
private uninstalled = false;
/**
- * Mapping from extension id to the set of menu items that have been clicked and still running.
+ * Mapping from component id to the set of menu items that have been clicked and still running.
* @see MenuItemStarterBrickConfig.synchronous
*/
- private readonly runningExtensionElements = new Map<
+ private readonly runningModComponentPageElements = new Map<
UUID,
WeakSet
>();
@@ -212,21 +212,21 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC x.id));
+ this.clearModComponentInterfaceAndEvents(
+ modComponents.map((x) => x.id),
+ );
// Release the menu element
element.removeAttribute(EXTENSION_POINT_DATA_ATTR);
} catch (error) {
@@ -291,9 +293,9 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC,
+ modComponent: ResolvedModComponent,
): Promise {
- return collectAllBricks(extension.config.action);
+ return collectAllBricks(modComponent.config.action);
}
/**
@@ -308,7 +310,7 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC {
if (this.uninstalled) {
- console.error("Menu item extension point is uninstalled", {
- extensionPointNonce: this.instanceNonce,
+ console.error("Menu item starter brick is uninstalled", {
+ starerBrickNonce: this.instanceNonce,
});
throw new Error(
"Cannot install menu item because starter brick was uninstalled",
@@ -447,25 +449,25 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC,
+ modComponent: ResolvedModComponent,
): JQuery;
- private async runExtension(
+ private async runModComponent(
menu: HTMLElement,
ctxtPromise: Promise | undefined,
- extension: ResolvedModComponent,
+ modComponent: ResolvedModComponent,
) {
- if (!extension.id) {
+ if (!modComponent.id) {
this.logger.error(`Refusing to run mod without id for ${this.id}`);
return;
}
- const extensionLogger = this.logger.childLogger(
- selectModComponentContext(extension),
+ const modComponentLogger = this.logger.childLogger(
+ selectModComponentContext(modComponent),
);
console.debug(
- `${this.instanceNonce}: running menuItem extension ${extension.id}`,
+ `${this.instanceNonce}: running menuItem mod component ${modComponent.id}`,
);
// Safe because menu is an HTMLElement, not a string
@@ -480,24 +482,24 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC {
let runningElements: WeakSet | undefined =
- this.runningExtensionElements.get(extension.id);
+ this.runningModComponentPageElements.get(modComponent.id);
if (runningElements == null) {
runningElements = new WeakSet([event.target]);
- this.runningExtensionElements.set(extension.id, runningElements);
+ this.runningModComponentPageElements.set(
+ modComponent.id,
+ runningElements,
+ );
} else {
if (synchronous && runningElements.has(event.target)) {
return;
@@ -581,7 +586,7 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC 0) {
// We don't need to unbind any click handlers because we're replacing the element completely.
console.debug(
- `Replacing existing menu item for ${extension.id} (${extension.label})`,
+ `Replacing existing menu item for ${modComponent.id} (${modComponent.label})`,
);
$existingItem.replaceWith($menuItem);
} else {
console.debug(
- `Adding new menu item ${extension.id} (${extension.label})`,
+ `Adding new menu item ${modComponent.id} (${modComponent.label})`,
);
this.addMenuItem($menu, $menuItem);
}
@@ -663,7 +668,7 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC {
// Don't re-install here. We're reinstalling the entire menu
console.debug(
- `Menu item for ${extension.id} was removed from the DOM`,
+ `Menu item for ${modComponent.id} was removed from the DOM`,
);
},
this.cancelController.signal,
@@ -698,11 +703,11 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC | undefined;
- for (const extension of this.modComponents) {
+ for (const modComponent of this.modComponents) {
// Run in order so that the order stays the same for where they get rendered. The service
// context is the only thing that's async as part of the initial configuration right now
- if (extensionIds != null && !extensionIds.includes(extension.id)) {
+ if (extensionIds != null && !extensionIds.includes(modComponent.id)) {
continue;
}
@@ -710,8 +715,8 @@ export abstract class MenuItemStarterBrickABC extends StarterBrickABC,
+ modComponent: ResolvedModComponent,
): JQuery {
const sanitizedHTML = sanitize(unsanitizedHTML);
@@ -940,7 +945,7 @@ export class RemoteMenuItemExtensionPoint extends MenuItemStarterBrickABC {
$root = $(sanitizedHTML);
}
- $root.attr(DATA_ATTR, extension.id);
+ $root.attr(DATA_ATTR, modComponent.id);
return $root;
}
@@ -960,5 +965,5 @@ export function fromJS(
throw new Error(`Expected type=menuItem, got ${type as string}`);
}
- return new RemoteMenuItemExtensionPoint(platform, config);
+ return new RemoteMenuItemStarterBrick(platform, config);
}
diff --git a/src/starterBricks/menuItem/types.ts b/src/starterBricks/menuItem/menuItemTypes.ts
similarity index 89%
rename from src/starterBricks/menuItem/types.ts
rename to src/starterBricks/menuItem/menuItemTypes.ts
index d07a5d47ab..cce8b02ffd 100644
--- a/src/starterBricks/menuItem/types.ts
+++ b/src/starterBricks/menuItem/menuItemTypes.ts
@@ -31,13 +31,13 @@ export type AttachMode =
export type MenuItemStarterBrickConfig = {
/**
- * The button caption to supply to the `caption` in the extension point template.
+ * The button caption to supply to the `caption` in the starter brick template.
* If `dynamicCaption` is true, can include template expressions.
*/
caption: string;
/**
- * (Optional) the icon to supply to the icon in the extension point template
+ * (Optional) the icon to supply to the icon in the starter brick template
*/
icon?: IconConfig;
@@ -63,7 +63,7 @@ export type MenuItemStarterBrickConfig = {
synchronous: boolean;
/**
- * (Experimental) message to show on error running the extension
+ * (Experimental) message to show on error running the component
*/
onError?: MessageConfig;
/**
@@ -71,7 +71,7 @@ export type MenuItemStarterBrickConfig = {
*/
onCancel?: MessageConfig;
/**
- * (Experimental) message to show on success when running the extension
+ * (Experimental) message to show on success when running the mod component
*/
onSuccess?: MessageConfig | boolean;
};
@@ -120,7 +120,7 @@ export interface MenuItemDefinition extends StarterBrickDefinitionProp {
*/
readerSelector?: string;
/**
- * The element to pass as the root to the readers and extension (default="document")
+ * The element to pass as the root to the readers and mod component (default="document")
* @since 1.7.16
* @see readerSelector
*/
@@ -131,7 +131,7 @@ export interface MenuItemDefinition extends StarterBrickDefinitionProp {
*/
shadowDOM?: ShadowDOM;
/**
- * Default options for ModComponentBases attached to the extension point
+ * Default options for ModComponentBases attached to the starter brick
*/
defaultOptions?: MenuDefaultOptions;
/**
diff --git a/src/store/checkAvailableInstalledExtensions.test.ts b/src/store/checkAvailableInstalledExtensions.test.ts
index ed898fa8a8..6e3364a24e 100644
--- a/src/store/checkAvailableInstalledExtensions.test.ts
+++ b/src/store/checkAvailableInstalledExtensions.test.ts
@@ -23,7 +23,7 @@ import { type ModComponentsRootState } from "@/store/extensionsTypes";
import { selectModComponentAvailability } from "@/pageEditor/slices/editorSelectors";
import { getInstalledExtensionPoints } from "@/contentScript/messenger/api";
import { validateRegistryId } from "@/types/helpers";
-import { RemoteMenuItemExtensionPoint } from "@/starterBricks/menuItem/menuItemExtension";
+import { RemoteMenuItemStarterBrick } from "@/starterBricks/menuItem/menuItemStarterBrick";
import { type StarterBrickDefinitionLike } from "@/starterBricks/types";
import { type Metadata } from "@/types/registryTypes";
import { RemoteQuickBarExtensionPoint } from "@/starterBricks/quickBar/quickBarExtension";
@@ -32,7 +32,7 @@ import { standaloneModDefinitionFactory } from "@/testUtils/factories/modCompone
import { metadataFactory } from "@/testUtils/factories/metadataFactory";
import { getCurrentInspectedURL } from "@/pageEditor/context/connection";
import { getPlatform } from "@/platform/platformContext";
-import { type MenuItemDefinition } from "@/starterBricks/menuItem/types";
+import { type MenuItemDefinition } from "@/starterBricks/menuItem/menuItemTypes";
import { type QuickBarDefinition } from "@/starterBricks/quickBar/types";
jest.mock("@/contentScript/messenger/api");
@@ -83,7 +83,7 @@ describe("checkAvailableInstalledExtensions", () => {
},
},
) as StarterBrickDefinitionLike;
- const availableButtonExtensionPoint = new RemoteMenuItemExtensionPoint(
+ const availableButtonExtensionPoint = new RemoteMenuItemStarterBrick(
getPlatform(),
availableButtonStarterBrickDefinition,
);
diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json
index f2e84c60d3..12c986dd69 100644
--- a/src/tsconfig.strictNullChecks.json
+++ b/src/tsconfig.strictNullChecks.json
@@ -1344,9 +1344,9 @@
"./starterBricks/factory.ts",
"./starterBricks/helpers.test.ts",
"./starterBricks/helpers.ts",
- "./starterBricks/menuItem/menuItemExtension.test.ts",
- "./starterBricks/menuItem/menuItemExtension.ts",
- "./starterBricks/menuItem/types.ts",
+ "./starterBricks/menuItem/menuItemStarterBrick.test.ts",
+ "./starterBricks/menuItem/menuItemStarterBrick.ts",
+ "./starterBricks/menuItem/menuItemTypes.ts",
"./starterBricks/panel/panelExtension.ts",
"./starterBricks/panel/types.ts",
"./starterBricks/quickBar/quickBarExtension.test.ts",