@compas-oscd/open-scd 0.34.0 → 0.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/WizardDivider.js +37 -0
  2. package/dist/WizardDivider.js.map +1 -0
  3. package/dist/Wizarding.js +38 -0
  4. package/dist/Wizarding.js.map +1 -0
  5. package/dist/action-icon.js +220 -0
  6. package/dist/action-icon.js.map +1 -0
  7. package/dist/action-pane.js +176 -0
  8. package/dist/action-pane.js.map +1 -0
  9. package/dist/addons/Editor.js +106 -0
  10. package/dist/addons/Editor.js.map +1 -0
  11. package/dist/addons/History.js +490 -0
  12. package/dist/addons/History.js.map +1 -0
  13. package/dist/addons/Layout.js +619 -0
  14. package/dist/addons/Layout.js.map +1 -0
  15. package/dist/addons/Settings.js +465 -0
  16. package/dist/addons/Settings.js.map +1 -0
  17. package/dist/addons/Waiter.js +45 -0
  18. package/dist/addons/Waiter.js.map +1 -0
  19. package/dist/addons/Wizards.js +48 -0
  20. package/dist/addons/Wizards.js.map +1 -0
  21. package/dist/addons/editor/edit-action-to-v1-converter.js +96 -0
  22. package/dist/addons/editor/edit-action-to-v1-converter.js.map +1 -0
  23. package/dist/addons/editor/edit-v1-to-v2-converter.js +37 -0
  24. package/dist/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
  25. package/dist/addons/history/get-log-text.js +26 -0
  26. package/dist/addons/history/get-log-text.js.map +1 -0
  27. package/dist/addons/menu-tabs/menu-tabs.js +74 -0
  28. package/dist/addons/menu-tabs/menu-tabs.js.map +1 -0
  29. package/dist/addons/plugin-manager/custom-plugin-dialog.js +177 -0
  30. package/dist/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
  31. package/dist/addons/plugin-manager/plugin-manager.js +165 -0
  32. package/dist/addons/plugin-manager/plugin-manager.js.map +1 -0
  33. package/dist/core/api/api.js +7 -0
  34. package/dist/core/api/api.js.map +1 -0
  35. package/dist/core/api/editor/subject.js +22 -0
  36. package/dist/core/api/editor/subject.js.map +1 -0
  37. package/dist/core/api/editor/xml-editor.js +82 -0
  38. package/dist/core/api/editor/xml-editor.js.map +1 -0
  39. package/dist/core/api/plugin-state-api.js +27 -0
  40. package/dist/core/api/plugin-state-api.js.map +1 -0
  41. package/dist/core/foundation/cyrb64.js +26 -0
  42. package/dist/core/foundation/cyrb64.js.map +1 -0
  43. package/dist/core/foundation/deprecated/edit-event.js +44 -0
  44. package/dist/core/foundation/deprecated/edit-event.js.map +1 -0
  45. package/dist/core/foundation/deprecated/editor.js +94 -0
  46. package/dist/core/foundation/deprecated/editor.js.map +1 -0
  47. package/dist/core/foundation/deprecated/history.js +17 -0
  48. package/dist/core/foundation/deprecated/history.js.map +1 -0
  49. package/dist/core/foundation/deprecated/open-event.js +9 -0
  50. package/dist/core/foundation/deprecated/open-event.js.map +1 -0
  51. package/dist/core/foundation/deprecated/settings.js +19 -0
  52. package/dist/core/foundation/deprecated/settings.js.map +1 -0
  53. package/dist/core/foundation/deprecated/validation.js +8 -0
  54. package/dist/core/foundation/deprecated/validation.js.map +1 -0
  55. package/dist/core/foundation/deprecated/waiter.js +12 -0
  56. package/dist/core/foundation/deprecated/waiter.js.map +1 -0
  57. package/dist/core/foundation/edit-completed-event.js +11 -0
  58. package/dist/core/foundation/edit-completed-event.js.map +1 -0
  59. package/dist/core/foundation/edit-event.js +8 -0
  60. package/dist/core/foundation/edit-event.js.map +1 -0
  61. package/dist/core/foundation/edit.js +31 -0
  62. package/dist/core/foundation/edit.js.map +1 -0
  63. package/dist/core/foundation/handle-edit.js +151 -0
  64. package/dist/core/foundation/handle-edit.js.map +1 -0
  65. package/dist/core/foundation/open-event.js +8 -0
  66. package/dist/core/foundation/open-event.js.map +1 -0
  67. package/dist/core/foundation/plugin.js +2 -0
  68. package/dist/core/foundation/plugin.js.map +1 -0
  69. package/dist/core/foundation.js +14 -0
  70. package/dist/core/foundation.js.map +1 -0
  71. package/dist/core/locales.js +21 -0
  72. package/dist/core/locales.js.map +1 -0
  73. package/dist/filtered-list.js +168 -0
  74. package/dist/filtered-list.js.map +1 -0
  75. package/dist/finder-list.js +207 -0
  76. package/dist/finder-list.js.map +1 -0
  77. package/dist/foundation/compare.js +273 -0
  78. package/dist/foundation/compare.js.map +1 -0
  79. package/dist/foundation/dai.js +127 -0
  80. package/dist/foundation/dai.js.map +1 -0
  81. package/dist/foundation/generators.js +67 -0
  82. package/dist/foundation/generators.js.map +1 -0
  83. package/dist/foundation/ied.js +84 -0
  84. package/dist/foundation/ied.js.map +1 -0
  85. package/dist/foundation/nsd.js +13 -0
  86. package/dist/foundation/nsd.js.map +1 -0
  87. package/dist/foundation/nsdoc.js +180 -0
  88. package/dist/foundation/nsdoc.js.map +1 -0
  89. package/dist/foundation/scl.js +64 -0
  90. package/dist/foundation/scl.js.map +1 -0
  91. package/dist/foundation.js +1922 -0
  92. package/dist/foundation.js.map +1 -0
  93. package/dist/icons/compare.js +11 -0
  94. package/dist/icons/compare.js.map +1 -0
  95. package/dist/icons/icons.js +611 -0
  96. package/dist/icons/icons.js.map +1 -0
  97. package/dist/icons/ied-icons.js +11 -0
  98. package/dist/icons/ied-icons.js.map +1 -0
  99. package/dist/icons/lnode.js +50 -0
  100. package/dist/icons/lnode.js.map +1 -0
  101. package/dist/open-scd.js +483 -0
  102. package/dist/open-scd.js.map +1 -0
  103. package/dist/openscd/src/WizardDivider.js +37 -0
  104. package/dist/openscd/src/WizardDivider.js.map +1 -0
  105. package/dist/openscd/src/Wizarding.js +38 -0
  106. package/dist/openscd/src/Wizarding.js.map +1 -0
  107. package/dist/openscd/src/action-icon.js +220 -0
  108. package/dist/openscd/src/action-icon.js.map +1 -0
  109. package/dist/openscd/src/action-pane.js +176 -0
  110. package/dist/openscd/src/action-pane.js.map +1 -0
  111. package/dist/openscd/src/addons/Editor.js +106 -0
  112. package/dist/openscd/src/addons/Editor.js.map +1 -0
  113. package/dist/openscd/src/addons/History.js +490 -0
  114. package/dist/openscd/src/addons/History.js.map +1 -0
  115. package/dist/openscd/src/addons/Layout.js +619 -0
  116. package/dist/openscd/src/addons/Layout.js.map +1 -0
  117. package/dist/openscd/src/addons/Settings.js +465 -0
  118. package/dist/openscd/src/addons/Settings.js.map +1 -0
  119. package/dist/openscd/src/addons/Waiter.js +45 -0
  120. package/dist/openscd/src/addons/Waiter.js.map +1 -0
  121. package/dist/openscd/src/addons/Wizards.js +48 -0
  122. package/dist/openscd/src/addons/Wizards.js.map +1 -0
  123. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js +96 -0
  124. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js.map +1 -0
  125. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js +37 -0
  126. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
  127. package/dist/openscd/src/addons/history/get-log-text.js +26 -0
  128. package/dist/openscd/src/addons/history/get-log-text.js.map +1 -0
  129. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js +74 -0
  130. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js.map +1 -0
  131. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js +177 -0
  132. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
  133. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js +165 -0
  134. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js.map +1 -0
  135. package/dist/openscd/src/filtered-list.js +168 -0
  136. package/dist/openscd/src/filtered-list.js.map +1 -0
  137. package/dist/openscd/src/finder-list.js +207 -0
  138. package/dist/openscd/src/finder-list.js.map +1 -0
  139. package/dist/openscd/src/foundation/compare.js +273 -0
  140. package/dist/openscd/src/foundation/compare.js.map +1 -0
  141. package/dist/openscd/src/foundation/dai.js +127 -0
  142. package/dist/openscd/src/foundation/dai.js.map +1 -0
  143. package/dist/openscd/src/foundation/generators.js +67 -0
  144. package/dist/openscd/src/foundation/generators.js.map +1 -0
  145. package/dist/openscd/src/foundation/ied.js +84 -0
  146. package/dist/openscd/src/foundation/ied.js.map +1 -0
  147. package/dist/openscd/src/foundation/nsd.js +13 -0
  148. package/dist/openscd/src/foundation/nsd.js.map +1 -0
  149. package/dist/openscd/src/foundation/nsdoc.js +180 -0
  150. package/dist/openscd/src/foundation/nsdoc.js.map +1 -0
  151. package/dist/openscd/src/foundation/scl.js +64 -0
  152. package/dist/openscd/src/foundation/scl.js.map +1 -0
  153. package/dist/openscd/src/foundation.js +1922 -0
  154. package/dist/openscd/src/foundation.js.map +1 -0
  155. package/dist/openscd/src/icons/compare.js +11 -0
  156. package/dist/openscd/src/icons/compare.js.map +1 -0
  157. package/dist/openscd/src/icons/icons.js +611 -0
  158. package/dist/openscd/src/icons/icons.js.map +1 -0
  159. package/dist/openscd/src/icons/ied-icons.js +11 -0
  160. package/dist/openscd/src/icons/ied-icons.js.map +1 -0
  161. package/dist/openscd/src/icons/lnode.js +50 -0
  162. package/dist/openscd/src/icons/lnode.js.map +1 -0
  163. package/dist/openscd/src/open-scd.js +483 -0
  164. package/dist/openscd/src/open-scd.js.map +1 -0
  165. package/dist/openscd/src/oscd-filter-button.js +89 -0
  166. package/dist/openscd/src/oscd-filter-button.js.map +1 -0
  167. package/dist/openscd/src/plain-compare-list.js +132 -0
  168. package/dist/openscd/src/plain-compare-list.js.map +1 -0
  169. package/dist/openscd/src/plugin-tag.js +23 -0
  170. package/dist/openscd/src/plugin-tag.js.map +1 -0
  171. package/dist/openscd/src/plugin.events.js +12 -0
  172. package/dist/openscd/src/plugin.events.js.map +1 -0
  173. package/dist/openscd/src/plugin.js +2 -0
  174. package/dist/openscd/src/plugin.js.map +1 -0
  175. package/dist/openscd/src/plugins.js +256 -0
  176. package/dist/openscd/src/plugins.js.map +1 -0
  177. package/dist/openscd/src/schemas.js +9325 -0
  178. package/dist/openscd/src/schemas.js.map +1 -0
  179. package/dist/openscd/src/themes.js +122 -0
  180. package/dist/openscd/src/themes.js.map +1 -0
  181. package/dist/openscd/src/translations/de.js +954 -0
  182. package/dist/openscd/src/translations/de.js.map +1 -0
  183. package/dist/openscd/src/translations/en.js +950 -0
  184. package/dist/openscd/src/translations/en.js.map +1 -0
  185. package/dist/openscd/src/translations/loader.js +10 -0
  186. package/dist/openscd/src/translations/loader.js.map +1 -0
  187. package/dist/openscd/src/wizard-checkbox.js +152 -0
  188. package/dist/openscd/src/wizard-checkbox.js.map +1 -0
  189. package/dist/openscd/src/wizard-dialog.js +374 -0
  190. package/dist/openscd/src/wizard-dialog.js.map +1 -0
  191. package/dist/openscd/src/wizard-select.js +115 -0
  192. package/dist/openscd/src/wizard-select.js.map +1 -0
  193. package/dist/openscd/src/wizard-textfield.js +191 -0
  194. package/dist/openscd/src/wizard-textfield.js.map +1 -0
  195. package/dist/openscd/src/wizards.js +196 -0
  196. package/dist/openscd/src/wizards.js.map +1 -0
  197. package/dist/oscd-filter-button.js +89 -0
  198. package/dist/oscd-filter-button.js.map +1 -0
  199. package/dist/plain-compare-list.js +132 -0
  200. package/dist/plain-compare-list.js.map +1 -0
  201. package/dist/plugin-tag.js +23 -0
  202. package/dist/plugin-tag.js.map +1 -0
  203. package/dist/plugin.events.js +12 -0
  204. package/dist/plugin.events.js.map +1 -0
  205. package/dist/plugin.js +2 -0
  206. package/dist/plugin.js.map +1 -0
  207. package/dist/plugins.js +256 -0
  208. package/dist/plugins.js.map +1 -0
  209. package/dist/schemas.js +9325 -0
  210. package/dist/schemas.js.map +1 -0
  211. package/dist/themes.js +122 -0
  212. package/dist/themes.js.map +1 -0
  213. package/dist/translations/de.js +954 -0
  214. package/dist/translations/de.js.map +1 -0
  215. package/dist/translations/en.js +950 -0
  216. package/dist/translations/en.js.map +1 -0
  217. package/dist/translations/loader.js +10 -0
  218. package/dist/translations/loader.js.map +1 -0
  219. package/dist/wizard-checkbox.js +152 -0
  220. package/dist/wizard-checkbox.js.map +1 -0
  221. package/dist/wizard-dialog.js +374 -0
  222. package/dist/wizard-dialog.js.map +1 -0
  223. package/dist/wizard-select.js +115 -0
  224. package/dist/wizard-select.js.map +1 -0
  225. package/dist/wizard-textfield.js +191 -0
  226. package/dist/wizard-textfield.js.map +1 -0
  227. package/dist/wizards.js +196 -0
  228. package/dist/wizards.js.map +1 -0
  229. package/dist/xml/src/foundation.js +67 -0
  230. package/dist/xml/src/foundation.js.map +1 -0
  231. package/dist/xml/src/index.js +2 -0
  232. package/dist/xml/src/index.js.map +1 -0
  233. package/package.json +99 -4
@@ -0,0 +1,48 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, state, query, customElement, LitElement, property, } from 'lit-element';
3
+ import '../wizard-dialog.js';
4
+ /** `LitElement` mixin that adds a `workflow` property which [[`Wizard`]]s are
5
+ * queued onto on incoming [[`WizardEvent`]]s, first come first displayed. */
6
+ let OscdWizards = class OscdWizards extends LitElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ /** FIFO queue of [[`Wizard`]]s to display. */
10
+ this.workflow = [];
11
+ }
12
+ onWizard(we) {
13
+ const wizard = we.detail.wizard;
14
+ if (wizard === null)
15
+ this.workflow.shift();
16
+ else if (we.detail.subwizard)
17
+ this.workflow.unshift(wizard);
18
+ else
19
+ this.workflow.push(wizard);
20
+ this.requestUpdate('workflow');
21
+ this.updateComplete.then(() => this.wizardUI.updateComplete.then(() => this.wizardUI.dialog?.updateComplete.then(() => this.wizardUI.dialog?.focus())));
22
+ }
23
+ connectedCallback() {
24
+ super.connectedCallback();
25
+ this.host.addEventListener('wizard', this.onWizard.bind(this));
26
+ this.host.addEventListener('editor-action', () => this.wizardUI.requestUpdate());
27
+ }
28
+ render() {
29
+ return html `<slot></slot>
30
+ <wizard-dialog .wizard=${this.workflow[0]?.() ?? []}></wizard-dialog>`;
31
+ }
32
+ };
33
+ __decorate([
34
+ property({
35
+ type: Object,
36
+ })
37
+ ], OscdWizards.prototype, "host", void 0);
38
+ __decorate([
39
+ state()
40
+ ], OscdWizards.prototype, "workflow", void 0);
41
+ __decorate([
42
+ query('wizard-dialog')
43
+ ], OscdWizards.prototype, "wizardUI", void 0);
44
+ OscdWizards = __decorate([
45
+ customElement('oscd-wizards')
46
+ ], OscdWizards);
47
+ export { OscdWizards };
48
+ //# sourceMappingURL=Wizards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wizards.js","sourceRoot":"","sources":["../../../../src/addons/Wizards.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,IAAI,EACJ,KAAK,EAEL,KAAK,EACL,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,aAAa,CAAC;AAGrB,OAAO,qBAAqB,CAAC;AAG7B;6EAC6E;AAEtE,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QAML,8CAA8C;QAE9C,aAAQ,GAAoB,EAAE,CAAC;IAgCjC,CAAC;IA5BS,QAAQ,CAAC,EAAe;QAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aACtC,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;YACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAC9B,CACF,CACF,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE,CAC/C,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAC9B,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;+BACgB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC;IAC3E,CAAC;CACF,CAAA;AApCC;IAHC,QAAQ,CAAC;QACR,IAAI,EAAE,MAAM;KACb,CAAC;yCACiB;AAInB;IADC,KAAK,EAAE;6CACuB;AAEP;IAAvB,KAAK,CAAC,eAAe,CAAC;6CAAyB;AAVrC,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAwCvB;SAxCY,WAAW","sourcesContent":["import {\n html,\n state,\n TemplateResult,\n query,\n customElement,\n LitElement,\n property,\n} from 'lit-element';\nimport { WizardEvent, WizardFactory } from '../foundation.js';\n\nimport '../wizard-dialog.js';\nimport { WizardDialog } from '../wizard-dialog.js';\n\n/** `LitElement` mixin that adds a `workflow` property which [[`Wizard`]]s are\n * queued onto on incoming [[`WizardEvent`]]s, first come first displayed. */\n@customElement('oscd-wizards')\nexport class OscdWizards extends LitElement {\n @property({\n type: Object,\n })\n host!: HTMLElement;\n\n /** FIFO queue of [[`Wizard`]]s to display. */\n @state()\n workflow: WizardFactory[] = [];\n\n @query('wizard-dialog') wizardUI!: WizardDialog;\n\n private onWizard(we: WizardEvent) {\n const wizard = we.detail.wizard;\n if (wizard === null) this.workflow.shift();\n else if (we.detail.subwizard) this.workflow.unshift(wizard);\n else this.workflow.push(wizard);\n this.requestUpdate('workflow');\n this.updateComplete.then(() =>\n this.wizardUI.updateComplete.then(() =>\n this.wizardUI.dialog?.updateComplete.then(() =>\n this.wizardUI.dialog?.focus()\n )\n )\n );\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.host.addEventListener('wizard', this.onWizard.bind(this));\n this.host.addEventListener('editor-action', () =>\n this.wizardUI.requestUpdate()\n );\n }\n\n render(): TemplateResult {\n return html`<slot></slot>\n <wizard-dialog .wizard=${this.workflow[0]?.() ?? []}></wizard-dialog>`;\n }\n}\n"]}
@@ -0,0 +1,96 @@
1
+ import { isCreate, isDelete, isMove, isReplace, isSimple, isUpdate } from '@openscd/core/foundation/deprecated/editor.js';
2
+ import { getReference } from '../../foundation.js';
3
+ export function convertEditActiontoV1(action) {
4
+ if (isSimple(action)) {
5
+ return convertSimpleAction(action);
6
+ }
7
+ else {
8
+ return action.actions.map(convertSimpleAction);
9
+ }
10
+ }
11
+ function convertSimpleAction(action) {
12
+ if (isCreate(action)) {
13
+ return convertCreate(action);
14
+ }
15
+ else if (isDelete(action)) {
16
+ return convertDelete(action);
17
+ }
18
+ else if (isUpdate(action)) {
19
+ return convertUpdate(action);
20
+ }
21
+ else if (isMove(action)) {
22
+ return convertMove(action);
23
+ }
24
+ else if (isReplace(action)) {
25
+ return convertReplace(action);
26
+ }
27
+ throw new Error('Unknown action type');
28
+ }
29
+ function convertCreate(action) {
30
+ let reference = null;
31
+ if (action.new.reference === undefined &&
32
+ action.new.element instanceof Element &&
33
+ action.new.parent instanceof Element) {
34
+ reference = getReference(action.new.parent, action.new.element.tagName);
35
+ }
36
+ else {
37
+ reference = action.new.reference ?? null;
38
+ }
39
+ return {
40
+ parent: action.new.parent,
41
+ node: action.new.element,
42
+ reference
43
+ };
44
+ }
45
+ function convertDelete(action) {
46
+ return {
47
+ node: action.old.element
48
+ };
49
+ }
50
+ function convertUpdate(action) {
51
+ const oldAttributesToRemove = {};
52
+ Array.from(action.element.attributes).forEach(attr => {
53
+ oldAttributesToRemove[attr.name] = null;
54
+ });
55
+ const attributes = {
56
+ ...oldAttributesToRemove,
57
+ ...action.newAttributes
58
+ };
59
+ return {
60
+ element: action.element,
61
+ attributes
62
+ };
63
+ }
64
+ function convertMove(action) {
65
+ if (action.new.reference === undefined) {
66
+ action.new.reference = getReference(action.new.parent, action.old.element.tagName);
67
+ }
68
+ return {
69
+ parent: action.new.parent,
70
+ node: action.old.element,
71
+ reference: action.new.reference ?? null
72
+ };
73
+ }
74
+ function convertReplace(action) {
75
+ const oldChildren = action.old.element.children;
76
+ // We have to clone the children, because otherwise undoing the action would remove the children from the old element, because append removes the old parent
77
+ const copiedChildren = Array.from(oldChildren).map(e => e.cloneNode(true));
78
+ const newNode = action.new.element.cloneNode(true);
79
+ newNode.append(...Array.from(copiedChildren));
80
+ const parent = action.old.element.parentElement;
81
+ if (!parent) {
82
+ throw new Error('Replace action called without parent in old element');
83
+ }
84
+ const reference = action.old.element.nextSibling;
85
+ const remove = { node: action.old.element };
86
+ const insert = {
87
+ parent,
88
+ node: newNode,
89
+ reference
90
+ };
91
+ return [
92
+ remove,
93
+ insert
94
+ ];
95
+ }
96
+ //# sourceMappingURL=edit-action-to-v1-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-action-to-v1-converter.js","sourceRoot":"","sources":["../../../../../src/addons/editor/edit-action-to-v1-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Create,\n Delete,\n EditorAction,\n isCreate,\n isDelete,\n isMove,\n isReplace,\n isSimple,\n isUpdate,\n Move,\n Replace,\n SimpleAction,\n Update\n} from '@openscd/core/foundation/deprecated/editor.js';\nimport { Edit, Insert, Remove, Update as UpdateV2 } from '@openscd/core';\nimport { getReference, SCLTag } from '../../foundation.js';\n\n\nexport function convertEditActiontoV1(action: EditorAction): Edit {\n if (isSimple(action)) {\n return convertSimpleAction(action);\n } else {\n return action.actions.map(convertSimpleAction);\n }\n}\n\nfunction convertSimpleAction(action: SimpleAction): Edit {\n if (isCreate(action)) {\n return convertCreate(action);\n } else if (isDelete(action)) {\n return convertDelete(action);\n } else if (isUpdate(action)) {\n return convertUpdate(action);\n } else if (isMove(action)) {\n return convertMove(action);\n } else if (isReplace(action)) {\n return convertReplace(action);\n }\n\n throw new Error('Unknown action type');\n}\n\nfunction convertCreate(action: Create): Insert {\n let reference: Node | null = null;\n if (\n action.new.reference === undefined &&\n action.new.element instanceof Element &&\n action.new.parent instanceof Element\n ) {\n reference = getReference(\n action.new.parent,\n <SCLTag>action.new.element.tagName\n );\n } else {\n reference = action.new.reference ?? null; \n }\n\n return {\n parent: action.new.parent,\n node: action.new.element,\n reference\n };\n}\n\nfunction convertDelete(action: Delete): Remove {\n return {\n node: action.old.element\n };\n}\n\nfunction convertUpdate(action: Update): UpdateV2 {\n const oldAttributesToRemove: Record<string, string | null> = {};\n Array.from(action.element.attributes).forEach(attr => {\n oldAttributesToRemove[attr.name] = null;\n });\n\n const attributes = {\n ...oldAttributesToRemove,\n ...action.newAttributes\n };\n\n return {\n element: action.element,\n attributes\n };\n}\n\nfunction convertMove(action: Move): Insert {\n if (action.new.reference === undefined) {\n action.new.reference = getReference(\n action.new.parent,\n <SCLTag>action.old.element.tagName\n );\n }\n\n return {\n parent: action.new.parent,\n node: action.old.element,\n reference: action.new.reference ?? null\n }\n}\n\nfunction convertReplace(action: Replace): Edit {\n const oldChildren = action.old.element.children;\n // We have to clone the children, because otherwise undoing the action would remove the children from the old element, because append removes the old parent\n const copiedChildren = Array.from(oldChildren).map(e => e.cloneNode(true));\n\n const newNode = action.new.element.cloneNode(true) as Element;\n newNode.append(...Array.from(copiedChildren));\n const parent = action.old.element.parentElement;\n\n if (!parent) {\n throw new Error('Replace action called without parent in old element');\n }\n\n const reference = action.old.element.nextSibling;\n\n const remove: Remove = { node: action.old.element };\n const insert: Insert = {\n parent,\n node: newNode,\n reference\n };\n\n return [\n remove,\n insert\n ];\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import { isComplex, isInsert, isNamespaced, isRemove, isUpdate } from '@openscd/core';
2
+ export function convertEditV1toV2(edit) {
3
+ if (isComplex(edit)) {
4
+ return edit.map(convertEditV1toV2);
5
+ }
6
+ else if (isRemove(edit)) {
7
+ return edit;
8
+ }
9
+ else if (isInsert(edit)) {
10
+ return edit;
11
+ }
12
+ else if (isUpdate(edit)) {
13
+ return convertUpdate(edit);
14
+ }
15
+ else {
16
+ throw new Error('Unknown edit type');
17
+ }
18
+ }
19
+ function convertUpdate(edit) {
20
+ const attributes = {};
21
+ const attributesNS = {};
22
+ Object.entries(edit.attributes).forEach(([key, value]) => {
23
+ if (isNamespaced(value)) {
24
+ const ns = value.namespaceURI;
25
+ if (!ns)
26
+ return;
27
+ if (!attributesNS[ns]) {
28
+ attributesNS[ns] = {};
29
+ }
30
+ attributesNS[ns][key] = value.value;
31
+ }
32
+ else
33
+ attributes[key] = value;
34
+ });
35
+ return { element: edit.element, attributes, attributesNS };
36
+ }
37
+ //# sourceMappingURL=edit-v1-to-v2-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-v1-to-v2-converter.js","sourceRoot":"","sources":["../../../../../src/addons/editor/edit-v1-to-v2-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AAE5G,MAAM,UAAU,iBAAiB,CAAC,IAAU;IAC1C,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;KACpC;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,IAAc,CAAC;KACvB;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,IAAc,CAAC;KACvB;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;KAC5B;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;KACtC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAA2C,EAAE,CAAC;IAC9D,MAAM,YAAY,GAEd,EAAE,CAAC;IAEP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACvD,IAAI,YAAY,CAAC,KAAM,CAAC,EAAE;YACxB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,EAAE;gBAAE,OAAO;YAEhB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;gBACrB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;aACvB;YACD,YAAY,CAAC,EAAE,CAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;SACtC;;YAAM,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAC7D,CAAC","sourcesContent":["import { Edit, EditV2, isComplex, isInsert, isNamespaced, isRemove, isUpdate, Update } from '@openscd/core';\n\nexport function convertEditV1toV2(edit: Edit): EditV2 {\n if (isComplex(edit)) {\n return edit.map(convertEditV1toV2);\n } else if (isRemove(edit)) {\n return edit as EditV2;\n } else if (isInsert(edit)) {\n return edit as EditV2;\n } else if (isUpdate(edit)) {\n return convertUpdate(edit);\n } else {\n throw new Error('Unknown edit type');\n }\n}\n\nfunction convertUpdate(edit: Update): EditV2 {\n const attributes: Partial<Record<string, string | null>> = {};\n const attributesNS: Partial<\n Record<string, Partial<Record<string, string | null>>>\n > = {};\n\n Object.entries(edit.attributes).forEach(([key, value]) => {\n if (isNamespaced(value!)) {\n const ns = value.namespaceURI;\n if (!ns) return;\n\n if (!attributesNS[ns]) {\n attributesNS[ns] = {};\n }\n attributesNS[ns]![key] = value.value;\n } else attributes[key] = value;\n });\n\n return { element: edit.element, attributes, attributesNS };\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { isInsertV2, isRemoveV2, isSetAttributesV2, isSetTextContentV2, isComplexV2 } from '@openscd/core';
2
+ import { get } from 'lit-translate';
3
+ export const getLogText = (edit) => {
4
+ if (isInsertV2(edit)) {
5
+ const name = edit.node instanceof Element ?
6
+ edit.node.tagName :
7
+ get('editing.node');
8
+ return { title: get('editing.created', { name }) };
9
+ }
10
+ else if (isSetAttributesV2(edit) || isSetTextContentV2(edit)) {
11
+ const name = edit.element.tagName;
12
+ return { title: get('editing.updated', { name }) };
13
+ }
14
+ else if (isRemoveV2(edit)) {
15
+ const name = edit.node instanceof Element ?
16
+ edit.node.tagName :
17
+ get('editing.node');
18
+ return { title: get('editing.deleted', { name }) };
19
+ }
20
+ else if (isComplexV2(edit)) {
21
+ const message = edit.map(e => getLogText(e)).map(({ title }) => title).join(', ');
22
+ return { title: get('editing.complex'), message };
23
+ }
24
+ return { title: '' };
25
+ };
26
+ //# sourceMappingURL=get-log-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-log-text.js","sourceRoot":"","sources":["../../../../../src/addons/history/get-log-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAuC,EAAE;IAC9E,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,GAAG,CAAC,cAAc,CAAC,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACpD;SAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACpD;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,GAAG,CAAC,cAAc,CAAC,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;KACpD;SAAM,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;KACnD;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACvB,CAAC,CAAA","sourcesContent":["import {\n EditV2,\n isInsertV2,\n isRemoveV2,\n isSetAttributesV2,\n isSetTextContentV2,\n isComplexV2\n} from '@openscd/core';\nimport { get } from 'lit-translate';\n\nexport const getLogText = (edit: EditV2): { title: string, message?: string } => {\n if (isInsertV2(edit)) {\n const name = edit.node instanceof Element ?\n edit.node.tagName :\n get('editing.node');\n return { title: get('editing.created', { name }) };\n } else if (isSetAttributesV2(edit) || isSetTextContentV2(edit)) {\n const name = edit.element.tagName;\n return { title: get('editing.updated', { name }) };\n } else if (isRemoveV2(edit)) {\n const name = edit.node instanceof Element ?\n edit.node.tagName :\n get('editing.node');\n return { title: get('editing.deleted', { name }) };\n } else if (isComplexV2(edit)) {\n const message = edit.map(e => getLogText(e)).map(({ title }) => title).join(', ');\n return { title: get('editing.complex'), message };\n }\n \n return { title: '' };\n}\n"]}
@@ -0,0 +1,74 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement, html, LitElement, property, state, css } from 'lit-element';
3
+ import '@material/mwc-list';
4
+ import '@material/mwc-tab';
5
+ import '@material/mwc-tab-bar';
6
+ import '@material/mwc-button';
7
+ let OscdMenuTabs = class OscdMenuTabs extends LitElement {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.editors = [];
11
+ this.activeTabIndex = 0;
12
+ }
13
+ get activeEditor() { return this._activeEditor; }
14
+ set activeEditor(editor) {
15
+ this._activeEditor = editor;
16
+ const editorIndex = this.editors.findIndex(e => e.name === editor?.name && e.src === editor?.src);
17
+ this.activeTabIndex = editorIndex > -1 ? editorIndex : 0;
18
+ this.requestUpdate();
19
+ }
20
+ ;
21
+ render() {
22
+ if (this.editors.length === 0) {
23
+ return html ``;
24
+ }
25
+ return html `
26
+ <mwc-tab-bar
27
+ @MDCTabBar:activated=${this.handleActivatedEditorTab}
28
+ activeIndex=${this.activeTabIndex}
29
+ >
30
+ ${this.editors.map(EditorTab)}
31
+ </mwc-tab-bar>
32
+ `;
33
+ }
34
+ handleActivatedEditorTab(e) {
35
+ const tabIndex = e.detail.index;
36
+ const editor = this.editors[tabIndex];
37
+ this.activeTabIndex = tabIndex;
38
+ this.dispatchActivateEditor(editor);
39
+ }
40
+ dispatchActivateEditor(editor) {
41
+ const newEvent = new CustomEvent(TabActivatedEventKey, {
42
+ detail: { editor },
43
+ composed: true,
44
+ bubbles: true
45
+ });
46
+ this.dispatchEvent(newEvent);
47
+ }
48
+ };
49
+ OscdMenuTabs.styles = css `
50
+ mwc-tab {
51
+ background-color: var(--primary);
52
+ --mdc-theme-primary: var(--mdc-theme-on-primary);
53
+ }
54
+ `;
55
+ __decorate([
56
+ property({ type: Array })
57
+ ], OscdMenuTabs.prototype, "editors", void 0);
58
+ __decorate([
59
+ property({ type: Object })
60
+ ], OscdMenuTabs.prototype, "activeEditor", null);
61
+ __decorate([
62
+ state()
63
+ ], OscdMenuTabs.prototype, "activeTabIndex", void 0);
64
+ OscdMenuTabs = __decorate([
65
+ customElement('oscd-menu-tabs')
66
+ ], OscdMenuTabs);
67
+ export { OscdMenuTabs };
68
+ function EditorTab({ name, icon }) {
69
+ return html `
70
+ <mwc-tab label=${name} icon=${icon || 'edit'}> </mwc-tab>
71
+ `;
72
+ }
73
+ export const TabActivatedEventKey = 'oscd-editor-tab-activated';
74
+ //# sourceMappingURL=menu-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-tabs.js","sourceRoot":"","sources":["../../../../../src/addons/menu-tabs/menu-tabs.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,UAAU,EACV,QAAQ,EAER,KAAK,EAEL,GAAG,EACJ,MAAM,aAAa,CAAC;AAErB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAQvB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAEsB,YAAO,GAAa,EAAE,CAAC;QAUjC,mBAAc,GAAG,CAAC,CAAC;IAqCtC,CAAC;IA7C6B,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,CAAC,MAA0B;QACzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC;QAClG,IAAI,CAAC,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAAA,CAAC;IAIF,MAAM;QACJ,IAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAC;YAAE,OAAO,IAAI,CAAA,EAAE,CAAC;SAAE;QAE/C,OAAO,IAAI,CAAA;;+BAEgB,IAAI,CAAC,wBAAwB;sBACtC,IAAI,CAAC,cAAc;;UAE9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,SAAS,CAAG;;KAEpC,CAAA;IACH,CAAC;IASO,wBAAwB,CAAC,CAAc;QAC7C,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEO,sBAAsB,CAAE,MAAc;QAC5C,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,oBAAoB,EAAE;YACrD,MAAM,EAAE,EAAE,MAAM,EAAE;YAClB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC9B,CAAC;;AArBM,mBAAM,GAAG,GAAG,CAAA;;;;;GAKlB,CAAA;AA9B0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;6CAAwB;AAEtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAAkD;AAQpE;IAAR,KAAK,EAAE;oDAA4B;AAZzB,YAAY;IADxB,aAAa,CAAC,gBAAgB,CAAC;GACnB,YAAY,CAiDxB;SAjDY,YAAY;AAmDzB,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAU;IACvC,OAAO,IAAI,CAAA;qBACQ,IAAI,SAAS,IAAI,IAAI,MAAM;GAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAA","sourcesContent":["import {\n customElement,\n html,\n LitElement,\n property,\n query,\n state,\n TemplateResult,\n css\n} from 'lit-element';\n\nimport '@material/mwc-list';\nimport '@material/mwc-tab';\nimport '@material/mwc-tab-bar';\nimport '@material/mwc-button';\n\nimport {\n Plugin,\n} from \"../../plugin.js\"\n\n\n@customElement('oscd-menu-tabs')\nexport class OscdMenuTabs extends LitElement {\n\n @property({ type: Array }) editors: Plugin[] = [];\n _activeEditor: Plugin | undefined;\n @property({ type: Object }) get activeEditor() { return this._activeEditor; }\n set activeEditor(editor: Plugin | undefined) {\n this._activeEditor = editor;\n const editorIndex = this.editors.findIndex(e => e.name === editor?.name && e.src === editor?.src);\n this.activeTabIndex = editorIndex > -1 ? editorIndex : 0;\n this.requestUpdate();\n };\n\n @state() private activeTabIndex = 0;\n\n render(){\n if(this.editors.length === 0){ return html``; }\n\n return html`\n <mwc-tab-bar\n @MDCTabBar:activated=${this.handleActivatedEditorTab}\n activeIndex=${this.activeTabIndex}\n >\n ${ this.editors.map( EditorTab ) }\n </mwc-tab-bar>\n `\n }\n\n static styles = css`\n mwc-tab {\n background-color: var(--primary);\n --mdc-theme-primary: var(--mdc-theme-on-primary);\n }\n `\n\n private handleActivatedEditorTab(e: CustomEvent): void {\n const tabIndex = e.detail.index;\n const editor = this.editors[tabIndex];\n this.activeTabIndex = tabIndex;\n this.dispatchActivateEditor(editor);\n }\n\n private dispatchActivateEditor( editor: Plugin ){\n const newEvent = new CustomEvent(TabActivatedEventKey, {\n detail: { editor },\n composed: true,\n bubbles: true\n })\n this.dispatchEvent(newEvent)\n }\n}\n\nfunction EditorTab({ name, icon }: Plugin): TemplateResult {\n return html`\n <mwc-tab label=${name} icon=${icon || 'edit'}> </mwc-tab>\n `;\n}\n\nexport const TabActivatedEventKey = 'oscd-editor-tab-activated'\nexport type TabActivatedEvent = CustomEvent<TabActivatedEventDetail>;\nexport type TabActivatedEventDetail = { editor: Plugin }\n"]}
@@ -0,0 +1,177 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement, html, LitElement, query, css, } from 'lit-element';
3
+ import { get } from 'lit-translate';
4
+ import { newAddExternalPluginEvent, pluginIcons } from '../../open-scd.js';
5
+ import { menuPosition } from "../../plugin.js";
6
+ import '@material/mwc-dialog';
7
+ import '@material/mwc-drawer';
8
+ import '@material/mwc-list';
9
+ import '@material/mwc-select';
10
+ import '@material/mwc-switch';
11
+ import '@material/mwc-textfield';
12
+ let OscdCustomPluginDialog = class OscdCustomPluginDialog extends LitElement {
13
+ render() {
14
+ return html `
15
+ <mwc-dialog id="dialog" heading="${get('plugins.add.heading')}">
16
+ <div style="display: flex; flex-direction: column; row-gap: 8px;">
17
+ <p style="color:var(--mdc-theme-error);">
18
+ ${get('plugins.add.warning')}
19
+ </p>
20
+ <mwc-textfield
21
+ label="${get('plugins.add.name')}"
22
+ helper="${get('plugins.add.nameHelper')}"
23
+ required
24
+ id="pluginNameInput"
25
+ ></mwc-textfield>
26
+ <mwc-list id="pluginKindList">
27
+ <mwc-radio-list-item
28
+ id="editor"
29
+ value="editor"
30
+ hasMeta
31
+ selected
32
+ left
33
+ >
34
+ ${get('plugins.editor')}
35
+ <mwc-icon slot="meta">
36
+ ${pluginIcons['editor']}
37
+ </mwc-icon>
38
+ </mwc-radio-list-item>
39
+ <mwc-radio-list-item value="menu" hasMeta left>
40
+ ${get('plugins.menu')}
41
+ <mwc-icon slot="meta">
42
+ ${pluginIcons['menu']}
43
+ </mwc-icon>
44
+ </mwc-radio-list-item>
45
+ <div id="menudetails">
46
+ <mwc-formfield
47
+ id="enabledefault"
48
+ label="${get('plugins.requireDoc')}"
49
+ >
50
+ <mwc-switch id="requireDoc" checked></mwc-switch>
51
+ </mwc-formfield>
52
+ <mwc-select id="positionList" value="middle" fixedpositionList>
53
+ ${Object.values(menuPosition).map(menutype => html `<mwc-list-item value="${menutype}"
54
+ >${get('plugins.' + menutype)}</mwc-list-item
55
+ >`)}
56
+ </mwc-select>
57
+ </div>
58
+ <style>
59
+ #menudetails {
60
+ display: none;
61
+ padding: 20px;
62
+ padding-left: 50px;
63
+ }
64
+ #pluginKindList [value="menu"][selected] ~ #menudetails {
65
+ display: grid;
66
+ }
67
+ #enabledefault {
68
+ padding-bottom: 20px;
69
+ }
70
+ #positionList {
71
+ max-width: 250px;
72
+ }
73
+ </style>
74
+ <mwc-radio-list-item id="validator" value="validator" hasMeta left>
75
+ ${get('plugins.validator')}
76
+ <mwc-icon slot="meta">
77
+ ${pluginIcons['validator']}
78
+ </mwc-icon>
79
+ </mwc-radio-list-item>
80
+ </mwc-list>
81
+ <mwc-textfield
82
+ label="${get('plugins.add.src')}"
83
+ helper="${get('plugins.add.srcHelper')}"
84
+ placeholder="http://example.com/plugin.js"
85
+ type="url"
86
+ required
87
+ id="pluginSrcInput">
88
+ </mwc-textfield>
89
+ </div>
90
+ <mwc-button
91
+ slot="secondaryAction"
92
+ dialogAction="close"
93
+ label="${get('cancel')}">
94
+ </mwc-button>
95
+ <mwc-button
96
+ id="addButton"
97
+ slot="primaryAction"
98
+ icon="add"
99
+ label="${get('add')}"
100
+ trailingIcon
101
+ @click=${() => this.handleAddPlugin()}>
102
+ </mwc-button>
103
+ </mwc-dialog>
104
+ `;
105
+ }
106
+ close() {
107
+ this.dialog.close();
108
+ }
109
+ show() {
110
+ this.dialog.show();
111
+ }
112
+ get open() {
113
+ return this.dialog.open;
114
+ }
115
+ handleAddPlugin() {
116
+ if (!(this.pluginSrcInput.checkValidity() &&
117
+ this.pluginNameInput.checkValidity() &&
118
+ this.pluginKindList.selected &&
119
+ this.requireDoc &&
120
+ this.positionList.selected))
121
+ return;
122
+ this.dispatchEvent(newAddExternalPluginEvent({
123
+ src: this.pluginSrcInput.value,
124
+ name: this.pluginNameInput.value,
125
+ kind: this.pluginKindList.selected.value,
126
+ requireDoc: this.requireDoc.checked,
127
+ position: this.positionList.value,
128
+ active: true,
129
+ // this is an added plugin and will be remove by reset either way
130
+ activeByDefault: false,
131
+ }));
132
+ this.requestUpdate();
133
+ this.dialog.close();
134
+ }
135
+ };
136
+ OscdCustomPluginDialog.styles = css `
137
+
138
+ mwc-dialog {
139
+ --mdc-dialog-max-width: 98vw;
140
+ }
141
+
142
+ mwc-dialog > form {
143
+ display: flex;
144
+ flex-direction: column;
145
+ }
146
+
147
+ mwc-dialog > form > * {
148
+ display: block;
149
+ margin-top: 16px;
150
+ }
151
+ `;
152
+ __decorate([
153
+ query('#dialog')
154
+ ], OscdCustomPluginDialog.prototype, "dialog", void 0);
155
+ __decorate([
156
+ query('#pluginSrcInput')
157
+ ], OscdCustomPluginDialog.prototype, "pluginSrcInput", void 0);
158
+ __decorate([
159
+ query('#pluginNameInput')
160
+ ], OscdCustomPluginDialog.prototype, "pluginNameInput", void 0);
161
+ __decorate([
162
+ query('#pluginKindList')
163
+ ], OscdCustomPluginDialog.prototype, "pluginKindList", void 0);
164
+ __decorate([
165
+ query('#requireDoc')
166
+ ], OscdCustomPluginDialog.prototype, "requireDoc", void 0);
167
+ __decorate([
168
+ query('#positionList')
169
+ ], OscdCustomPluginDialog.prototype, "positionList", void 0);
170
+ __decorate([
171
+ query('#addButton')
172
+ ], OscdCustomPluginDialog.prototype, "addButton", void 0);
173
+ OscdCustomPluginDialog = __decorate([
174
+ customElement('oscd-custom-plugin-dialog')
175
+ ], OscdCustomPluginDialog);
176
+ export { OscdCustomPluginDialog };
177
+ //# sourceMappingURL=custom-plugin-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-plugin-dialog.js","sourceRoot":"","sources":["../../../../../src/addons/plugin-manager/custom-plugin-dialog.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport {\n customElement,\n html,\n LitElement,\n query,\n TemplateResult,\n css,\n} from 'lit-element';\nimport { get } from 'lit-translate';\nimport {\n newAddExternalPluginEvent,\n pluginIcons\n} from '../../open-scd.js';\n\nimport {\n MenuPosition,\n menuPosition,\n PluginKind\n} from \"../../plugin.js\";\n\nimport type { Button } from '@material/mwc-button';\nimport type { Dialog } from '@material/mwc-dialog';\nimport { List } from '@material/mwc-list';\nimport type { ListItem } from '@material/mwc-list/mwc-list-item';\nimport type { Select } from '@material/mwc-select';\nimport type { Switch } from '@material/mwc-switch';\nimport type { TextField } from '@material/mwc-textfield';\n\nimport '@material/mwc-dialog';\nimport '@material/mwc-drawer';\nimport '@material/mwc-list';\nimport '@material/mwc-select';\nimport '@material/mwc-switch';\nimport '@material/mwc-textfield';\n\n\n@customElement('oscd-custom-plugin-dialog')\nexport class OscdCustomPluginDialog extends LitElement {\n\n @query('#dialog') dialog!: Dialog\n @query('#pluginSrcInput') pluginSrcInput!: TextField\n @query('#pluginNameInput') pluginNameInput!: TextField\n @query('#pluginKindList') pluginKindList!: List\n @query('#requireDoc') requireDoc!: Switch\n @query('#positionList') positionList!: Select\n @query('#addButton') addButton!: Button\n\n render(): TemplateResult {\n return html`\n <mwc-dialog id=\"dialog\" heading=\"${get('plugins.add.heading')}\">\n <div style=\"display: flex; flex-direction: column; row-gap: 8px;\">\n <p style=\"color:var(--mdc-theme-error);\">\n ${get('plugins.add.warning')}\n </p>\n <mwc-textfield\n label=\"${get('plugins.add.name')}\"\n helper=\"${get('plugins.add.nameHelper')}\"\n required\n id=\"pluginNameInput\"\n ></mwc-textfield>\n <mwc-list id=\"pluginKindList\">\n <mwc-radio-list-item\n id=\"editor\"\n value=\"editor\"\n hasMeta\n selected\n left\n >\n ${get('plugins.editor')}\n <mwc-icon slot=\"meta\">\n ${pluginIcons['editor']}\n </mwc-icon>\n </mwc-radio-list-item>\n <mwc-radio-list-item value=\"menu\" hasMeta left>\n ${get('plugins.menu')}\n <mwc-icon slot=\"meta\">\n ${pluginIcons['menu']}\n </mwc-icon>\n </mwc-radio-list-item>\n <div id=\"menudetails\">\n <mwc-formfield\n id=\"enabledefault\"\n label=\"${get('plugins.requireDoc')}\"\n >\n <mwc-switch id=\"requireDoc\" checked></mwc-switch>\n </mwc-formfield>\n <mwc-select id=\"positionList\" value=\"middle\" fixedpositionList>\n ${Object.values(menuPosition).map(\n menutype =>\n html`<mwc-list-item value=\"${menutype}\"\n >${get('plugins.' + menutype)}</mwc-list-item\n >`\n )}\n </mwc-select>\n </div>\n <style>\n #menudetails {\n display: none;\n padding: 20px;\n padding-left: 50px;\n }\n #pluginKindList [value=\"menu\"][selected] ~ #menudetails {\n display: grid;\n }\n #enabledefault {\n padding-bottom: 20px;\n }\n #positionList {\n max-width: 250px;\n }\n </style>\n <mwc-radio-list-item id=\"validator\" value=\"validator\" hasMeta left>\n ${get('plugins.validator')}\n <mwc-icon slot=\"meta\">\n ${pluginIcons['validator']}\n </mwc-icon>\n </mwc-radio-list-item>\n </mwc-list>\n <mwc-textfield\n label=\"${get('plugins.add.src')}\"\n helper=\"${get('plugins.add.srcHelper')}\"\n placeholder=\"http://example.com/plugin.js\"\n type=\"url\"\n required\n id=\"pluginSrcInput\">\n </mwc-textfield>\n </div>\n <mwc-button\n slot=\"secondaryAction\"\n dialogAction=\"close\"\n label=\"${get('cancel')}\">\n </mwc-button>\n <mwc-button\n id=\"addButton\"\n slot=\"primaryAction\"\n icon=\"add\"\n label=\"${get('add')}\"\n trailingIcon\n @click=${() => this.handleAddPlugin()}>\n </mwc-button>\n </mwc-dialog>\n `;\n }\n\n static styles = css`\n\n mwc-dialog {\n --mdc-dialog-max-width: 98vw;\n }\n\n mwc-dialog > form {\n display: flex;\n flex-direction: column;\n }\n\n mwc-dialog > form > * {\n display: block;\n margin-top: 16px;\n }\n `\n\n public close(){\n this.dialog.close()\n }\n\n public show(){\n this.dialog.show()\n }\n\n get open(){\n return this.dialog.open\n }\n\n private handleAddPlugin() {\n\n if (\n !(\n this.pluginSrcInput.checkValidity() &&\n this.pluginNameInput.checkValidity() &&\n this.pluginKindList.selected &&\n this.requireDoc &&\n this.positionList.selected\n )\n )\n return;\n\n this.dispatchEvent(\n newAddExternalPluginEvent({\n src: this.pluginSrcInput.value,\n name: this.pluginNameInput.value,\n kind: <PluginKind>(<ListItem>this.pluginKindList.selected).value,\n requireDoc: this.requireDoc.checked,\n position: <MenuPosition>this.positionList.value,\n active: true,\n // this is an added plugin and will be remove by reset either way\n activeByDefault: false,\n })\n );\n\n this.requestUpdate();\n this.dialog.close();\n }\n\n}\n\n\n"]}