Skip to content

Commit

Permalink
fix: openscd forgets disabled plugins (#1618)
Browse files Browse the repository at this point in the history
  • Loading branch information
trusz authored Feb 6, 2025
1 parent dc78329 commit c39cd6c
Show file tree
Hide file tree
Showing 11 changed files with 1,359 additions and 81 deletions.
117 changes: 116 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/openscd/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,4 @@
],
"commitUrlFormat": "https://github.com/openscd/open-scd/commits/{{hash}}"
}
}
}
14 changes: 9 additions & 5 deletions packages/openscd/src/open-scd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ export class OpenSCD extends LitElement {

private resetPlugins(): void {
this.storePlugins(
(builtinPlugins as Plugin[]).concat(this.parsedPlugins).map(plugin => {
(this.getBuiltInPlugins() as Plugin[]).concat(this.parsedPlugins).map(plugin => {
return {
...plugin,
installed: plugin.default ?? false,
Expand Down Expand Up @@ -316,7 +316,7 @@ export class OpenSCD extends LitElement {
const isBuiltIn = !plugin?.official
if (!isBuiltIn){ return plugin };

const builtInPlugin = [...builtinPlugins, ...this.parsedPlugins]
const builtInPlugin = [...this.getBuiltInPlugins(), ...this.parsedPlugins]
.find(p => p.src === plugin.src);

return <Plugin>{
Expand Down Expand Up @@ -367,14 +367,14 @@ export class OpenSCD extends LitElement {
const localPluginConfigs = this.getPluginConfigsFromLocalStorage()

const overwritesOfBultInPlugins = localPluginConfigs.filter((p) => {
return builtinPlugins.some(b => b.src === p.src)
return this.getBuiltInPlugins().some(b => b.src === p.src)
})

const userInstalledPlugins = localPluginConfigs.filter((p) => {
return !builtinPlugins.some(b => b.src === p.src)
return !this.getBuiltInPlugins().some(b => b.src === p.src)
})

const mergedBuiltInPlugins = builtinPlugins.map((builtInPlugin) => {
const mergedBuiltInPlugins = this.getBuiltInPlugins().map((builtInPlugin) => {
const noopOverwrite = {}
const overwrite = overwritesOfBultInPlugins
.find(p => p.src === builtInPlugin.src)
Expand Down Expand Up @@ -404,6 +404,10 @@ export class OpenSCD extends LitElement {
this.storePlugins(newPlugins);
}

protected getBuiltInPlugins(): CorePlugin[] {
return builtinPlugins as CorePlugin[]
}

private addContent(plugin: Omit<Plugin, 'content'>): Plugin {
const tag = this.pluginTag(plugin.src);

Expand Down
2 changes: 1 addition & 1 deletion packages/openscd/src/plugins.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
function generatePluginPath(plugin: string): string {
export function generatePluginPath(plugin: string): string {
return location.origin+location.pathname+plugin;
}

Expand Down
18 changes: 16 additions & 2 deletions packages/openscd/test/mock-open-scd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,23 @@ import {
html,
queryAssignedNodes,
query,
property
} from 'lit-element';
import { OscdWizards } from '../src/addons/Wizards.js';
import { WizardFactory } from '../src/foundation.js';
import { OpenSCD } from '../src/open-scd.js';
import { WizardDialog } from '../src/wizard-dialog.js';
import { OscdHistory } from '../src/addons/History.js';
import { OscdLayout } from '../src/addons/Layout.js';
// import type { Plugin } from '@openscd/core';
import { Plugin } from '../src/plugin';

@customElement('mock-open-scd')
export class MockOpenSCD extends OpenSCD {

@property({ attribute: false })
mockPlugins: Plugin[] = []

@queryAssignedNodes()
_plugins!: Array<HTMLElement>;

Expand All @@ -32,10 +39,17 @@ export class MockOpenSCD extends OpenSCD {

render(): TemplateResult {
return html`
${this.renderHosting()}
${super.render()}`;
${this.renderHosting()}
${super.render()}
`;
}

protected getBuiltInPlugins(): Plugin[]{
return this.mockPlugins;
}



getPlugin<T extends HTMLElement>(name: string): T | undefined {
return this._plugins.find(
p => p.tagName.toLowerCase() === name.toLowerCase()
Expand Down
Loading

0 comments on commit c39cd6c

Please sign in to comment.