@compas-oscd/open-scd 0.34.1 → 0.34.2

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 (187) hide show
  1. package/dist/WizardDivider.d.ts +8 -0
  2. package/dist/Wizarding.d.ts +10 -0
  3. package/dist/Wizarding.js.map +1 -1
  4. package/dist/action-icon.d.ts +25 -0
  5. package/dist/action-pane.d.ts +25 -0
  6. package/dist/addons/Editor.d.ts +25 -0
  7. package/dist/addons/History.d.ts +86 -0
  8. package/dist/addons/Layout.d.ts +96 -0
  9. package/dist/addons/Settings.d.ts +68 -0
  10. package/dist/addons/Waiter.d.ts +14 -0
  11. package/dist/addons/Wizards.d.ts +15 -0
  12. package/dist/addons/editor/edit-action-to-v1-converter.d.ts +3 -0
  13. package/dist/addons/editor/edit-v1-to-v2-converter.d.ts +2 -0
  14. package/dist/addons/history/get-log-text.d.ts +5 -0
  15. package/dist/addons/menu-tabs/menu-tabs.d.ts +22 -0
  16. package/dist/addons/plugin-manager/custom-plugin-dialog.d.ts +28 -0
  17. package/dist/addons/plugin-manager/plugin-manager.d.ts +20 -0
  18. package/dist/filtered-list.d.ts +27 -0
  19. package/dist/finder-list.d.ts +37 -0
  20. package/dist/foundation/compare.d.ts +79 -0
  21. package/dist/foundation/dai.d.ts +30 -0
  22. package/dist/foundation/generators.d.ts +13 -0
  23. package/dist/foundation/ied.d.ts +22 -0
  24. package/dist/foundation/nsd.d.ts +4 -0
  25. package/dist/foundation/nsdoc.d.ts +14 -0
  26. package/dist/foundation/scl.d.ts +1 -0
  27. package/dist/foundation.d.ts +230 -0
  28. package/dist/icons/compare.d.ts +3 -0
  29. package/dist/icons/icons.d.ts +41 -0
  30. package/dist/icons/ied-icons.d.ts +3 -0
  31. package/dist/icons/lnode.d.ts +16 -0
  32. package/dist/open-scd.d.ts +131 -0
  33. package/dist/oscd-filter-button.d.ts +27 -0
  34. package/dist/plain-compare-list.d.ts +36 -0
  35. package/dist/plugin-tag.d.ts +6 -0
  36. package/dist/plugin.d.ts +23 -0
  37. package/dist/plugin.events.d.ts +15 -0
  38. package/dist/plugins.d.ts +3 -0
  39. package/dist/schemas.d.ts +58 -0
  40. package/dist/themes.d.ts +3 -0
  41. package/dist/translations/de.d.ts +2 -0
  42. package/dist/translations/en.d.ts +963 -0
  43. package/dist/translations/loader.d.ts +12 -0
  44. package/dist/wizard-checkbox.d.ts +37 -0
  45. package/dist/wizard-dialog.d.ts +45 -0
  46. package/dist/wizard-select.d.ts +31 -0
  47. package/dist/wizard-textfield.d.ts +50 -0
  48. package/dist/wizards.d.ts +23 -0
  49. package/package.json +1 -1
  50. package/dist/core/api/api.js +0 -7
  51. package/dist/core/api/api.js.map +0 -1
  52. package/dist/core/api/editor/subject.js +0 -22
  53. package/dist/core/api/editor/subject.js.map +0 -1
  54. package/dist/core/api/editor/xml-editor.js +0 -82
  55. package/dist/core/api/editor/xml-editor.js.map +0 -1
  56. package/dist/core/api/plugin-state-api.js +0 -27
  57. package/dist/core/api/plugin-state-api.js.map +0 -1
  58. package/dist/core/foundation/cyrb64.js +0 -26
  59. package/dist/core/foundation/cyrb64.js.map +0 -1
  60. package/dist/core/foundation/deprecated/edit-event.js +0 -44
  61. package/dist/core/foundation/deprecated/edit-event.js.map +0 -1
  62. package/dist/core/foundation/deprecated/editor.js +0 -94
  63. package/dist/core/foundation/deprecated/editor.js.map +0 -1
  64. package/dist/core/foundation/deprecated/history.js +0 -17
  65. package/dist/core/foundation/deprecated/history.js.map +0 -1
  66. package/dist/core/foundation/deprecated/open-event.js +0 -9
  67. package/dist/core/foundation/deprecated/open-event.js.map +0 -1
  68. package/dist/core/foundation/deprecated/settings.js +0 -19
  69. package/dist/core/foundation/deprecated/settings.js.map +0 -1
  70. package/dist/core/foundation/deprecated/validation.js +0 -8
  71. package/dist/core/foundation/deprecated/validation.js.map +0 -1
  72. package/dist/core/foundation/deprecated/waiter.js +0 -12
  73. package/dist/core/foundation/deprecated/waiter.js.map +0 -1
  74. package/dist/core/foundation/edit-completed-event.js +0 -11
  75. package/dist/core/foundation/edit-completed-event.js.map +0 -1
  76. package/dist/core/foundation/edit-event.js +0 -8
  77. package/dist/core/foundation/edit-event.js.map +0 -1
  78. package/dist/core/foundation/edit.js +0 -31
  79. package/dist/core/foundation/edit.js.map +0 -1
  80. package/dist/core/foundation/handle-edit.js +0 -151
  81. package/dist/core/foundation/handle-edit.js.map +0 -1
  82. package/dist/core/foundation/open-event.js +0 -8
  83. package/dist/core/foundation/open-event.js.map +0 -1
  84. package/dist/core/foundation/plugin.js +0 -2
  85. package/dist/core/foundation/plugin.js.map +0 -1
  86. package/dist/core/foundation.js +0 -14
  87. package/dist/core/foundation.js.map +0 -1
  88. package/dist/core/locales.js +0 -21
  89. package/dist/core/locales.js.map +0 -1
  90. package/dist/openscd/src/WizardDivider.js +0 -37
  91. package/dist/openscd/src/WizardDivider.js.map +0 -1
  92. package/dist/openscd/src/Wizarding.js +0 -38
  93. package/dist/openscd/src/Wizarding.js.map +0 -1
  94. package/dist/openscd/src/action-icon.js +0 -220
  95. package/dist/openscd/src/action-icon.js.map +0 -1
  96. package/dist/openscd/src/action-pane.js +0 -176
  97. package/dist/openscd/src/action-pane.js.map +0 -1
  98. package/dist/openscd/src/addons/Editor.js +0 -106
  99. package/dist/openscd/src/addons/Editor.js.map +0 -1
  100. package/dist/openscd/src/addons/History.js +0 -490
  101. package/dist/openscd/src/addons/History.js.map +0 -1
  102. package/dist/openscd/src/addons/Layout.js +0 -619
  103. package/dist/openscd/src/addons/Layout.js.map +0 -1
  104. package/dist/openscd/src/addons/Settings.js +0 -465
  105. package/dist/openscd/src/addons/Settings.js.map +0 -1
  106. package/dist/openscd/src/addons/Waiter.js +0 -45
  107. package/dist/openscd/src/addons/Waiter.js.map +0 -1
  108. package/dist/openscd/src/addons/Wizards.js +0 -48
  109. package/dist/openscd/src/addons/Wizards.js.map +0 -1
  110. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js +0 -96
  111. package/dist/openscd/src/addons/editor/edit-action-to-v1-converter.js.map +0 -1
  112. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js +0 -37
  113. package/dist/openscd/src/addons/editor/edit-v1-to-v2-converter.js.map +0 -1
  114. package/dist/openscd/src/addons/history/get-log-text.js +0 -26
  115. package/dist/openscd/src/addons/history/get-log-text.js.map +0 -1
  116. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js +0 -74
  117. package/dist/openscd/src/addons/menu-tabs/menu-tabs.js.map +0 -1
  118. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js +0 -177
  119. package/dist/openscd/src/addons/plugin-manager/custom-plugin-dialog.js.map +0 -1
  120. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js +0 -165
  121. package/dist/openscd/src/addons/plugin-manager/plugin-manager.js.map +0 -1
  122. package/dist/openscd/src/filtered-list.js +0 -168
  123. package/dist/openscd/src/filtered-list.js.map +0 -1
  124. package/dist/openscd/src/finder-list.js +0 -207
  125. package/dist/openscd/src/finder-list.js.map +0 -1
  126. package/dist/openscd/src/foundation/compare.js +0 -273
  127. package/dist/openscd/src/foundation/compare.js.map +0 -1
  128. package/dist/openscd/src/foundation/dai.js +0 -127
  129. package/dist/openscd/src/foundation/dai.js.map +0 -1
  130. package/dist/openscd/src/foundation/generators.js +0 -67
  131. package/dist/openscd/src/foundation/generators.js.map +0 -1
  132. package/dist/openscd/src/foundation/ied.js +0 -84
  133. package/dist/openscd/src/foundation/ied.js.map +0 -1
  134. package/dist/openscd/src/foundation/nsd.js +0 -13
  135. package/dist/openscd/src/foundation/nsd.js.map +0 -1
  136. package/dist/openscd/src/foundation/nsdoc.js +0 -180
  137. package/dist/openscd/src/foundation/nsdoc.js.map +0 -1
  138. package/dist/openscd/src/foundation/scl.js +0 -64
  139. package/dist/openscd/src/foundation/scl.js.map +0 -1
  140. package/dist/openscd/src/foundation.js +0 -1922
  141. package/dist/openscd/src/foundation.js.map +0 -1
  142. package/dist/openscd/src/icons/compare.js +0 -11
  143. package/dist/openscd/src/icons/compare.js.map +0 -1
  144. package/dist/openscd/src/icons/icons.js +0 -611
  145. package/dist/openscd/src/icons/icons.js.map +0 -1
  146. package/dist/openscd/src/icons/ied-icons.js +0 -11
  147. package/dist/openscd/src/icons/ied-icons.js.map +0 -1
  148. package/dist/openscd/src/icons/lnode.js +0 -50
  149. package/dist/openscd/src/icons/lnode.js.map +0 -1
  150. package/dist/openscd/src/open-scd.js +0 -483
  151. package/dist/openscd/src/open-scd.js.map +0 -1
  152. package/dist/openscd/src/oscd-filter-button.js +0 -89
  153. package/dist/openscd/src/oscd-filter-button.js.map +0 -1
  154. package/dist/openscd/src/plain-compare-list.js +0 -132
  155. package/dist/openscd/src/plain-compare-list.js.map +0 -1
  156. package/dist/openscd/src/plugin-tag.js +0 -23
  157. package/dist/openscd/src/plugin-tag.js.map +0 -1
  158. package/dist/openscd/src/plugin.events.js +0 -12
  159. package/dist/openscd/src/plugin.events.js.map +0 -1
  160. package/dist/openscd/src/plugin.js +0 -2
  161. package/dist/openscd/src/plugin.js.map +0 -1
  162. package/dist/openscd/src/plugins.js +0 -256
  163. package/dist/openscd/src/plugins.js.map +0 -1
  164. package/dist/openscd/src/schemas.js +0 -9325
  165. package/dist/openscd/src/schemas.js.map +0 -1
  166. package/dist/openscd/src/themes.js +0 -122
  167. package/dist/openscd/src/themes.js.map +0 -1
  168. package/dist/openscd/src/translations/de.js +0 -954
  169. package/dist/openscd/src/translations/de.js.map +0 -1
  170. package/dist/openscd/src/translations/en.js +0 -950
  171. package/dist/openscd/src/translations/en.js.map +0 -1
  172. package/dist/openscd/src/translations/loader.js +0 -10
  173. package/dist/openscd/src/translations/loader.js.map +0 -1
  174. package/dist/openscd/src/wizard-checkbox.js +0 -152
  175. package/dist/openscd/src/wizard-checkbox.js.map +0 -1
  176. package/dist/openscd/src/wizard-dialog.js +0 -374
  177. package/dist/openscd/src/wizard-dialog.js.map +0 -1
  178. package/dist/openscd/src/wizard-select.js +0 -115
  179. package/dist/openscd/src/wizard-select.js.map +0 -1
  180. package/dist/openscd/src/wizard-textfield.js +0 -191
  181. package/dist/openscd/src/wizard-textfield.js.map +0 -1
  182. package/dist/openscd/src/wizards.js +0 -196
  183. package/dist/openscd/src/wizards.js.map +0 -1
  184. package/dist/xml/src/foundation.js +0 -67
  185. package/dist/xml/src/foundation.js.map +0 -1
  186. package/dist/xml/src/index.js +0 -2
  187. package/dist/xml/src/index.js.map +0 -1
@@ -1,191 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { customElement, html, state, property, query, } from 'lit-element';
3
- import { get } from 'lit-translate';
4
- import '@material/mwc-icon-button';
5
- import '@material/mwc-list/mwc-list-item';
6
- import '@material/mwc-menu';
7
- import '@material/mwc-switch';
8
- import { TextField } from '@material/mwc-textfield';
9
- /** A potentially `nullable` `TextField` that allows for selection of an SI
10
- * `multiplier` if an SI `unit` is given.
11
- *
12
- * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/
13
- let WizardTextField = class WizardTextField extends TextField {
14
- get multiplier() {
15
- if (this.unit == '')
16
- return null;
17
- return (this.multipliers[this.multiplierIndex] ?? this.multipliers[0] ?? null);
18
- }
19
- set multiplier(value) {
20
- const index = this.multipliers.indexOf(value);
21
- if (index >= 0)
22
- this.multiplierIndex = index;
23
- this.suffix = (this.multiplier ?? '') + this.unit;
24
- }
25
- get null() {
26
- return this.nullable && this.isNull;
27
- }
28
- set null(value) {
29
- if (!this.nullable || value === this.isNull)
30
- return;
31
- this.isNull = value;
32
- if (this.null)
33
- this.disable();
34
- else
35
- this.enable();
36
- }
37
- /** Replacement for `value`, can only be `null` if [[`nullable`]]. */
38
- get maybeValue() {
39
- return this.null ? null : this.value;
40
- }
41
- set maybeValue(value) {
42
- if (value === null)
43
- this.null = true;
44
- else {
45
- this.null = false;
46
- this.value = value;
47
- }
48
- }
49
- selectMultiplier(se) {
50
- this.multiplier = this.multipliers[se.detail.index];
51
- }
52
- enable() {
53
- if (this.nulled === null)
54
- return;
55
- this.value = this.nulled;
56
- this.nulled = null;
57
- this.helperPersistent = false;
58
- this.disabled = false;
59
- }
60
- disable() {
61
- if (this.nulled !== null)
62
- return;
63
- this.nulled = this.value;
64
- this.value = this.defaultValue;
65
- this.helperPersistent = true;
66
- this.disabled = true;
67
- }
68
- async firstUpdated() {
69
- await super.firstUpdated();
70
- if (this.multiplierMenu)
71
- this.multiplierMenu.anchor =
72
- this.multiplierButton ?? null;
73
- }
74
- checkValidity() {
75
- if (this.reservedValues &&
76
- this.reservedValues.some(array => array === this.value)) {
77
- this.setCustomValidity(get('textfield.unique'));
78
- return false;
79
- }
80
- this.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM
81
- return super.checkValidity();
82
- }
83
- constructor() {
84
- super();
85
- /** Whether [[`maybeValue`]] may be `null` */
86
- this.nullable = false;
87
- /** Selectable SI multipliers for a non-empty [[`unit`]]. */
88
- this.multipliers = [null, ''];
89
- this.multiplierIndex = 0;
90
- /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].
91
- * Overrides `suffix`. */
92
- this.unit = '';
93
- this.isNull = false;
94
- /** The default `value` displayed if [[`maybeValue`]] is `null`. */
95
- this.defaultValue = '';
96
- /** Additional values that cause validation to fail. */
97
- this.reservedValues = [];
98
- // FIXME: workaround to allow disable of the whole component - need basic refactor
99
- this.disabledSwitch = false;
100
- this.nulled = null;
101
- this.disabledSwitch = this.hasAttribute('disabled');
102
- }
103
- renderUnitSelector() {
104
- if (this.multipliers.length && this.unit)
105
- return html `<div style="position:relative;">
106
- <mwc-icon-button
107
- style="margin:5px;"
108
- icon="more"
109
- ?disabled=${this.null || this.disabledSwitch}
110
- @click=${() => this.multiplierMenu?.show()}
111
- ></mwc-icon-button>
112
- <mwc-menu
113
- @selected=${this.selectMultiplier}
114
- fixed
115
- .anchor=${this.multiplierButton ?? null}
116
- >${this.renderMulplierList()}</mwc-menu
117
- >
118
- </div>`;
119
- else
120
- return html ``;
121
- }
122
- renderMulplierList() {
123
- return html `${this.multipliers.map(multiplier => html `<mwc-list-item ?selected=${multiplier === this.multiplier}
124
- >${multiplier === null
125
- ? get('textfield.noMultiplier')
126
- : multiplier}</mwc-list-item
127
- >`)}`;
128
- }
129
- renderSwitch() {
130
- if (this.nullable) {
131
- return html `<mwc-switch
132
- style="margin-left: 12px;"
133
- ?checked=${!this.null}
134
- ?disabled=${this.disabledSwitch}
135
- @change=${() => {
136
- this.null = !this.nullSwitch.checked;
137
- }}
138
- ></mwc-switch>`;
139
- }
140
- return html ``;
141
- }
142
- render() {
143
- return html `
144
- <div style="display: flex; flex-direction: row;">
145
- <div style="flex: auto;">${super.render()}</div>
146
- ${this.renderUnitSelector()}
147
- <div style="display: flex; align-items: center; height: 56px;">
148
- ${this.renderSwitch()}
149
- </div>
150
- </div>
151
- `;
152
- }
153
- };
154
- __decorate([
155
- property({ type: Boolean })
156
- ], WizardTextField.prototype, "nullable", void 0);
157
- __decorate([
158
- property({ type: Array })
159
- ], WizardTextField.prototype, "multipliers", void 0);
160
- __decorate([
161
- property({ type: String })
162
- ], WizardTextField.prototype, "multiplier", null);
163
- __decorate([
164
- property({ type: String })
165
- ], WizardTextField.prototype, "unit", void 0);
166
- __decorate([
167
- state()
168
- ], WizardTextField.prototype, "null", null);
169
- __decorate([
170
- property({ type: String })
171
- ], WizardTextField.prototype, "maybeValue", null);
172
- __decorate([
173
- property({ type: String })
174
- ], WizardTextField.prototype, "defaultValue", void 0);
175
- __decorate([
176
- property({ type: Array })
177
- ], WizardTextField.prototype, "reservedValues", void 0);
178
- __decorate([
179
- query('mwc-switch')
180
- ], WizardTextField.prototype, "nullSwitch", void 0);
181
- __decorate([
182
- query('mwc-menu')
183
- ], WizardTextField.prototype, "multiplierMenu", void 0);
184
- __decorate([
185
- query('mwc-icon-button')
186
- ], WizardTextField.prototype, "multiplierButton", void 0);
187
- WizardTextField = __decorate([
188
- customElement('wizard-textfield')
189
- ], WizardTextField);
190
- export { WizardTextField };
191
- //# sourceMappingURL=wizard-textfield.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizard-textfield.js","sourceRoot":"","sources":["../../../src/wizard-textfield.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n customElement,\n html,\n state,\n property,\n query,\n TemplateResult,\n} from 'lit-element';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon-button';\nimport '@material/mwc-list/mwc-list-item';\nimport '@material/mwc-menu';\nimport '@material/mwc-switch';\nimport { IconButton } from '@material/mwc-icon-button';\nimport { Menu } from '@material/mwc-menu';\nimport { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation';\nimport { Switch } from '@material/mwc-switch';\nimport { TextField } from '@material/mwc-textfield';\n\n/** A potentially `nullable` `TextField` that allows for selection of an SI\n * `multiplier` if an SI `unit` is given.\n *\n * NB: Use `maybeValue: string | null` instead of `value` if `nullable`!*/\n@customElement('wizard-textfield')\nexport class WizardTextField extends TextField {\n /** Whether [[`maybeValue`]] may be `null` */\n @property({ type: Boolean })\n nullable = false;\n /** Selectable SI multipliers for a non-empty [[`unit`]]. */\n @property({ type: Array })\n multipliers = [null, ''];\n private multiplierIndex = 0;\n @property({ type: String })\n get multiplier(): string | null {\n if (this.unit == '') return null;\n return (\n this.multipliers[this.multiplierIndex] ?? this.multipliers[0] ?? null\n );\n }\n set multiplier(value: string | null) {\n const index = this.multipliers.indexOf(value);\n if (index >= 0) this.multiplierIndex = index;\n this.suffix = (this.multiplier ?? '') + this.unit;\n }\n /** SI Unit, must be non-empty to allow for selecting a [[`multiplier`]].\n * Overrides `suffix`. */\n @property({ type: String })\n unit = '';\n private isNull = false;\n @state()\n private get null(): boolean {\n return this.nullable && this.isNull;\n }\n private set null(value: boolean) {\n if (!this.nullable || value === this.isNull) return;\n this.isNull = value;\n if (this.null) this.disable();\n else this.enable();\n }\n /** Replacement for `value`, can only be `null` if [[`nullable`]]. */\n @property({ type: String })\n get maybeValue(): string | null {\n return this.null ? null : this.value;\n }\n set maybeValue(value: string | null) {\n if (value === null) this.null = true;\n else {\n this.null = false;\n this.value = value;\n }\n }\n /** The default `value` displayed if [[`maybeValue`]] is `null`. */\n @property({ type: String })\n defaultValue = '';\n /** Additional values that cause validation to fail. */\n @property({ type: Array })\n reservedValues: string[] = [];\n\n // FIXME: workaround to allow disable of the whole component - need basic refactor\n private disabledSwitch = false;\n\n @query('mwc-switch') nullSwitch?: Switch;\n @query('mwc-menu') multiplierMenu?: Menu;\n @query('mwc-icon-button') multiplierButton?: IconButton;\n\n private nulled: string | null = null;\n\n private selectMultiplier(se: SingleSelectedEvent): void {\n this.multiplier = this.multipliers[se.detail.index];\n }\n\n private enable(): void {\n if (this.nulled === null) return;\n this.value = this.nulled;\n this.nulled = null;\n this.helperPersistent = false;\n this.disabled = false;\n }\n\n private disable(): void {\n if (this.nulled !== null) return;\n this.nulled = this.value;\n this.value = this.defaultValue;\n this.helperPersistent = true;\n this.disabled = true;\n }\n\n async firstUpdated(): Promise<void> {\n await super.firstUpdated();\n if (this.multiplierMenu)\n this.multiplierMenu.anchor =\n (this.multiplierButton as HTMLElement) ?? null;\n }\n\n checkValidity(): boolean {\n if (\n this.reservedValues &&\n this.reservedValues.some(array => array === this.value)\n ) {\n this.setCustomValidity(get('textfield.unique'));\n return false;\n }\n this.setCustomValidity(''); //Reset. Otherwise super.checkValidity always falseM\n return super.checkValidity();\n }\n\n constructor() {\n super();\n\n this.disabledSwitch = this.hasAttribute('disabled');\n }\n\n renderUnitSelector(): TemplateResult {\n if (this.multipliers.length && this.unit)\n return html`<div style=\"position:relative;\">\n <mwc-icon-button\n style=\"margin:5px;\"\n icon=\"more\"\n ?disabled=${this.null || this.disabledSwitch}\n @click=${() => this.multiplierMenu?.show()}\n ></mwc-icon-button>\n <mwc-menu\n @selected=${this.selectMultiplier}\n fixed\n .anchor=${this.multiplierButton ?? null}\n >${this.renderMulplierList()}</mwc-menu\n >\n </div>`;\n else return html``;\n }\n\n renderMulplierList(): TemplateResult {\n return html`${this.multipliers.map(\n multiplier =>\n html`<mwc-list-item ?selected=${multiplier === this.multiplier}\n >${multiplier === null\n ? get('textfield.noMultiplier')\n : multiplier}</mwc-list-item\n >`\n )}`;\n }\n\n renderSwitch(): TemplateResult {\n if (this.nullable) {\n return html`<mwc-switch\n style=\"margin-left: 12px;\"\n ?checked=${!this.null}\n ?disabled=${this.disabledSwitch}\n @change=${() => {\n this.null = !this.nullSwitch!.checked;\n }}\n ></mwc-switch>`;\n }\n return html``;\n }\n\n render(): TemplateResult {\n return html`\n <div style=\"display: flex; flex-direction: row;\">\n <div style=\"flex: auto;\">${super.render()}</div>\n ${this.renderUnitSelector()}\n <div style=\"display: flex; align-items: center; height: 56px;\">\n ${this.renderSwitch()}\n </div>\n </div>\n `;\n }\n}\n"]}
@@ -1,196 +0,0 @@
1
- import { html } from 'lit-element';
2
- import { repeat } from 'lit-html/directives/repeat';
3
- import { get } from 'lit-translate';
4
- import '@material/mwc-icon';
5
- import '@material/mwc-list';
6
- import '@material/mwc-list/mwc-check-list-item';
7
- import '@material/mwc-list/mwc-list-item';
8
- import { identity, isEqual, isSame, newWizardEvent, } from './foundation.js';
9
- function describe(element) {
10
- const id = identity(element);
11
- return typeof id === 'string' ? id.replace(/^>/, '') : get('unidentifiable');
12
- }
13
- function mergeWizardAction(attrDiffs, childDiffs, sink, source, options) {
14
- return (_, wizard) => {
15
- const actions = [];
16
- const checkList = wizard.shadowRoot.querySelector('mwc-list');
17
- const selectedAttrDiffs = checkList.selected
18
- .filter(item => item.classList.contains('attr'))
19
- .map(item => attrDiffs[item.value]);
20
- const newSink = sink.cloneNode(false);
21
- const parent = selectedAttrDiffs.length ? newSink : sink;
22
- if (selectedAttrDiffs.length) {
23
- if (sink.childElementCount === 0)
24
- newSink.textContent = sink.textContent;
25
- for (const [name, diff] of selectedAttrDiffs)
26
- if (name === 'value') {
27
- newSink.textContent = diff.theirs;
28
- }
29
- else if (diff.theirs === null)
30
- newSink.removeAttribute(name);
31
- else
32
- newSink.setAttribute(name, diff.theirs);
33
- actions.push({ old: { element: sink }, new: { element: newSink } });
34
- }
35
- let acted = false;
36
- const selectedChildDiffs = checkList.selected
37
- .filter(item => item.classList.contains('child'))
38
- .map(item => childDiffs[item.value]);
39
- if (selectedChildDiffs.length) {
40
- for (const diff of selectedChildDiffs)
41
- if (!diff.ours)
42
- actions.push({
43
- new: { parent, element: diff.theirs },
44
- });
45
- else if (!diff.theirs)
46
- actions.push({
47
- old: {
48
- parent,
49
- element: diff.ours,
50
- reference: diff.ours.nextSibling,
51
- },
52
- });
53
- else {
54
- acted = true;
55
- wizard.dispatchEvent(newWizardEvent(mergeWizard(diff.ours, diff.theirs, {
56
- ...options,
57
- title: undefined,
58
- })));
59
- }
60
- }
61
- if (actions.length === 0 && !acted)
62
- wizard.dispatchEvent(newWizardEvent());
63
- return [
64
- {
65
- actions,
66
- title: get('merge.log', {
67
- sink: describe(sink),
68
- source: describe(source),
69
- tag: sink.tagName,
70
- }),
71
- },
72
- ];
73
- };
74
- }
75
- export function mergeWizard(sink, source, options) {
76
- const attrDiffs = [];
77
- const ourText = sink.textContent ?? '';
78
- const theirText = source.textContent ?? '';
79
- if (sink.childElementCount === 0 &&
80
- source.childElementCount === 0 &&
81
- theirText !== ourText)
82
- attrDiffs.push(['value', { ours: ourText, theirs: theirText }]);
83
- const attributeNames = new Set(source.getAttributeNames().concat(sink.getAttributeNames()));
84
- for (const name of attributeNames)
85
- if (source.getAttribute(name) !== sink.getAttribute(name))
86
- attrDiffs.push([
87
- name,
88
- {
89
- theirs: source.getAttribute(name),
90
- ours: sink.getAttribute(name),
91
- },
92
- ]);
93
- const childDiffs = [];
94
- const ourChildren = Array.from(sink.children);
95
- const theirChildren = Array.from(source.children);
96
- theirChildren.forEach(theirs => {
97
- const twinIndex = ourChildren.findIndex(ourChild => isSame(theirs, ourChild));
98
- const ours = twinIndex > -1 ? ourChildren[twinIndex] : null;
99
- if (ours)
100
- ourChildren.splice(twinIndex, 1);
101
- if (ours && isEqual(theirs, ours))
102
- return;
103
- if (!ours || !isEqual(theirs, ours))
104
- childDiffs.push({ theirs, ours });
105
- });
106
- ourChildren.forEach(ours => childDiffs.push({ theirs: null, ours }));
107
- return [
108
- {
109
- title: options?.title ??
110
- get('merge.defaultTitle', {
111
- sink: describe(sink),
112
- source: describe(source),
113
- tag: sink.tagName,
114
- }),
115
- primary: {
116
- label: get('merge.title'),
117
- icon: 'merge_type',
118
- action: mergeWizardAction(attrDiffs, childDiffs, sink, source, options),
119
- auto: options?.auto?.(sink, source) ?? false,
120
- },
121
- content: [
122
- html `
123
- <mwc-list multi>
124
- ${repeat(attrDiffs, e => e, ([name, diff], index) => html `<mwc-check-list-item
125
- value=${index}
126
- class="attr"
127
- twoline
128
- left
129
- hasMeta
130
- .selected=${options?.selected?.(diff) ?? false}
131
- .disabled=${options?.disabled?.(diff) ?? false}
132
- style="--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours
133
- ? diff.theirs
134
- ? 'secondary'
135
- : 'error'
136
- : 'primary'});"
137
- >
138
- <span>${name}</span>
139
- <span slot="secondary"
140
- >${diff.ours ?? ''}
141
- ${diff.ours && diff.theirs ? html `&cularr;` : ' '}
142
- ${diff.theirs ?? ''}</span
143
- >
144
- <mwc-icon slot="meta"
145
- >${diff.ours
146
- ? diff.theirs
147
- ? 'edit'
148
- : 'delete'
149
- : 'add'}</mwc-icon
150
- >
151
- </mwc-check-list-item>`)}
152
- ${childDiffs.length
153
- ? html `<mwc-list-item noninteractive
154
- >${get('merge.children')}</mwc-list-item
155
- >
156
- <li padded divider role="separator"></li>`
157
- : ''}
158
- ${repeat(childDiffs, e => e, (diff, index) => html `<mwc-check-list-item
159
- value=${index}
160
- class="child"
161
- twoline
162
- left
163
- hasMeta
164
- .selected=${options?.selected?.(diff) ?? false}
165
- .disabled=${options?.disabled?.(diff) ?? false}
166
- style="--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours
167
- ? diff.theirs
168
- ? 'secondary'
169
- : 'error'
170
- : 'primary'});"
171
- >
172
- <span>${diff.ours?.tagName ?? diff.theirs?.tagName}</span>
173
- <span slot="secondary"
174
- >${diff.ours ? describe(diff.ours) : ''}
175
- ${diff.ours &&
176
- diff.theirs &&
177
- describe(diff.ours) + describe(diff.theirs)
178
- ? html `&cularr;`
179
- : ' '}
180
- ${diff.theirs ? describe(diff.theirs) : ''}</span
181
- >
182
- <mwc-icon slot="meta"
183
- >${diff.ours
184
- ? diff.theirs
185
- ? 'merge_type'
186
- : 'delete'
187
- : 'add'}</mwc-icon
188
- >
189
- </mwc-check-list-item>`)}
190
- </mwc-list>
191
- `,
192
- ],
193
- },
194
- ];
195
- }
196
- //# sourceMappingURL=wizards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wizards.js","sourceRoot":"","sources":["../../../src/wizards.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit-element';\nimport { repeat } from 'lit-html/directives/repeat';\nimport { get } from 'lit-translate';\n\nimport '@material/mwc-icon';\nimport '@material/mwc-list';\nimport '@material/mwc-list/mwc-check-list-item';\nimport '@material/mwc-list/mwc-list-item';\nimport { ListItem } from '@material/mwc-list/mwc-list-item';\n\nimport {\n identity,\n isEqual,\n isSame,\n newWizardEvent,\n Wizard,\n WizardActor,\n} from './foundation.js';\nimport { EditorAction, SimpleAction } from '@openscd/core/foundation/deprecated/editor.js';\ninterface MergeOptions {\n title?: string;\n selected?: (diff: Diff<Element | string>) => boolean;\n disabled?: (diff: Diff<Element | string>) => boolean;\n auto?: (sink: Element, source: Element) => boolean;\n}\n\nexport type Diff<T> =\n | { ours: T; theirs: null }\n | { ours: null; theirs: T }\n | { ours: T; theirs: T };\n\nfunction describe(element: Element): string {\n const id = identity(element);\n\n return typeof id === 'string' ? id.replace(/^>/, '') : get('unidentifiable');\n}\n\nfunction mergeWizardAction(\n attrDiffs: [string, Diff<string>][],\n childDiffs: Diff<Element>[],\n sink: Element,\n source: Element,\n options?: MergeOptions\n): WizardActor {\n return (_, wizard: Element): EditorAction[] => {\n const actions: SimpleAction[] = [];\n const checkList = wizard.shadowRoot!.querySelector('mwc-list')!;\n\n const selectedAttrDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('attr'))\n .map(item => attrDiffs[item.value as unknown as number]);\n\n const newSink = <Element>sink.cloneNode(false);\n const parent = selectedAttrDiffs.length ? newSink : sink;\n if (selectedAttrDiffs.length) {\n if (sink.childElementCount === 0) newSink.textContent = sink.textContent;\n for (const [name, diff] of selectedAttrDiffs)\n if (name === 'value') {\n newSink.textContent = diff.theirs;\n } else if (diff.theirs === null) newSink.removeAttribute(name);\n else newSink.setAttribute(name, diff.theirs);\n actions.push({ old: { element: sink }, new: { element: newSink } });\n }\n\n let acted = false;\n\n const selectedChildDiffs = (<ListItem[]>checkList.selected)\n .filter(item => item.classList.contains('child'))\n .map(item => childDiffs[item.value as unknown as number]);\n if (selectedChildDiffs.length) {\n for (const diff of selectedChildDiffs)\n if (!diff.ours)\n actions.push({\n new: { parent, element: diff.theirs },\n });\n else if (!diff.theirs)\n actions.push({\n old: {\n parent,\n element: diff.ours,\n reference: diff.ours.nextSibling,\n },\n });\n else {\n acted = true;\n wizard.dispatchEvent(\n newWizardEvent(\n mergeWizard(diff.ours, diff.theirs, {\n ...options,\n title: undefined,\n })\n )\n );\n }\n }\n\n if (actions.length === 0 && !acted) wizard.dispatchEvent(newWizardEvent());\n\n return [\n {\n actions,\n title: get('merge.log', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n },\n ];\n };\n}\n\nexport function mergeWizard(\n sink: Element,\n source: Element,\n options?: MergeOptions\n): Wizard {\n const attrDiffs: [string, Diff<string>][] = [];\n const ourText = sink.textContent ?? '';\n const theirText = source.textContent ?? '';\n\n if (\n sink.childElementCount === 0 &&\n source.childElementCount === 0 &&\n theirText !== ourText\n )\n attrDiffs.push(['value', { ours: ourText, theirs: theirText }]);\n\n const attributeNames = new Set(\n source.getAttributeNames().concat(sink.getAttributeNames())\n );\n\n for (const name of attributeNames)\n if (source.getAttribute(name) !== sink.getAttribute(name))\n attrDiffs.push([\n name,\n <Diff<string>>{\n theirs: source.getAttribute(name),\n ours: sink.getAttribute(name),\n },\n ]);\n\n const childDiffs: Diff<Element>[] = [];\n const ourChildren = Array.from(sink.children);\n const theirChildren = Array.from(source.children);\n\n theirChildren.forEach(theirs => {\n const twinIndex = ourChildren.findIndex(ourChild =>\n isSame(theirs, ourChild)\n );\n const ours = twinIndex > -1 ? ourChildren[twinIndex] : null;\n\n if (ours) ourChildren.splice(twinIndex, 1);\n if (ours && isEqual(theirs, ours)) return;\n\n if (!ours || !isEqual(theirs, ours)) childDiffs.push({ theirs, ours });\n });\n\n ourChildren.forEach(ours => childDiffs.push({ theirs: null, ours }));\n\n return [\n {\n title:\n options?.title ??\n get('merge.defaultTitle', {\n sink: describe(sink),\n source: describe(source),\n tag: sink.tagName,\n }),\n primary: {\n label: get('merge.title'),\n icon: 'merge_type',\n action: mergeWizardAction(attrDiffs, childDiffs, sink, source, options),\n auto: options?.auto?.(sink, source) ?? false,\n },\n content: [\n html`\n <mwc-list multi>\n ${repeat(\n attrDiffs,\n e => e,\n ([name, diff], index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"attr\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${name}</span>\n <span slot=\"secondary\"\n >${diff.ours ?? ''}\n ${diff.ours && diff.theirs ? html`&cularr;` : ' '}\n ${diff.theirs ?? ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'edit'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n ${childDiffs.length\n ? html`<mwc-list-item noninteractive\n >${get('merge.children')}</mwc-list-item\n >\n <li padded divider role=\"separator\"></li>`\n : ''}\n ${repeat(\n childDiffs,\n e => e,\n (diff, index) =>\n html`<mwc-check-list-item\n value=${index}\n class=\"child\"\n twoline\n left\n hasMeta\n .selected=${options?.selected?.(diff) ?? false}\n .disabled=${options?.disabled?.(diff) ?? false}\n style=\"--mdc-checkbox-checked-color: var(--mdc-theme-${diff.ours\n ? diff.theirs\n ? 'secondary'\n : 'error'\n : 'primary'});\"\n >\n <span>${diff.ours?.tagName ?? diff.theirs?.tagName}</span>\n <span slot=\"secondary\"\n >${diff.ours ? describe(diff.ours) : ''}\n ${diff.ours &&\n diff.theirs &&\n describe(diff.ours) + describe(diff.theirs)\n ? html`&cularr;`\n : ' '}\n ${diff.theirs ? describe(diff.theirs) : ''}</span\n >\n <mwc-icon slot=\"meta\"\n >${diff.ours\n ? diff.theirs\n ? 'merge_type'\n : 'delete'\n : 'add'}</mwc-icon\n >\n </mwc-check-list-item>`\n )}\n </mwc-list>\n `,\n ],\n },\n ];\n}\n"]}
@@ -1,67 +0,0 @@
1
- /**
2
- * @since 0.0.1
3
- *
4
- * @param Document - doc where the Element should be created
5
- * @param string Tag - Tagname of the element
6
- * @param Record<string, string | null> - Attributes to be added to the created element
7
- *
8
- * @returns a new [[`tag`]] element owned by [[`doc`]].
9
- */
10
- export function createElement(doc, tag, attrs) {
11
- const element = doc.createElementNS(doc.documentElement.namespaceURI, tag);
12
- Object.entries(attrs)
13
- .filter(([_, value]) => value !== null)
14
- .forEach(([name, value]) => element.setAttribute(name, value));
15
- return element;
16
- }
17
- /**
18
- * @since 0.0.1
19
- *
20
- * @param Element - element to be cloned
21
- * @params Record<string, string | null> - Attributes to be added
22
- *
23
- * @returns a clone of `element` with attributes set to values from `attrs`.
24
- */
25
- export function cloneElement(element, attrs) {
26
- const newElement = element.cloneNode(false);
27
- Object.entries(attrs).forEach(([name, value]) => {
28
- if (value === null)
29
- newElement.removeAttribute(name);
30
- else
31
- newElement.setAttribute(name, value);
32
- });
33
- return newElement;
34
- }
35
- export function getChildElementsByTagName(element, tag) {
36
- if (!element || !tag)
37
- return [];
38
- return Array.from(element.children).filter(element => element.tagName === tag);
39
- }
40
- /**
41
- * Format xml string in "pretty print" style and return as a string
42
- * @param xml - xml document as a string
43
- * @param tab - character to use as a tab
44
- * @returns string with pretty print formatting
45
- */
46
- export function formatXml(xml, tab) {
47
- let formatted = '', indent = '';
48
- if (!tab)
49
- tab = '\t';
50
- xml.split(/>\s*</).forEach(function (node) {
51
- if (node.match(/^\/\w/))
52
- indent = indent.substring(tab.length);
53
- formatted += indent + '<' + node + '>\r\n';
54
- if (node.match(/^<?\w[^>]*[^/]$/))
55
- indent += tab;
56
- });
57
- return formatted.substring(1, formatted.length - 3);
58
- }
59
- export function getUniqueElementName(parent, tagName, iteration = 1) {
60
- const newName = 'new' + tagName + iteration;
61
- const child = parent.querySelector(`:scope > ${tagName}[name="${newName}"]`);
62
- if (!child)
63
- return newName;
64
- else
65
- return getUniqueElementName(parent, tagName, ++iteration);
66
- }
67
- //# sourceMappingURL=foundation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../../../xml/src/foundation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAa,EACb,GAAW,EACX,KAAoC;IAEpC,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;SACtC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAM,CAAC,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,KAAoC;IAEpC,MAAM,UAAU,GAAY,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,IAAI,KAAK,KAAK,IAAI;YAAE,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;;YAChD,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAmC,EACnC,GAA8B;IAE9B,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACxC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,GAAG,CACnC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAY;IACjD,IAAI,SAAS,GAAG,EAAE,EAChB,MAAM,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC,GAAG;QAAE,GAAG,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAI,CAAC,MAAM,CAAC,CAAC;QAChE,SAAS,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAAE,MAAM,IAAI,GAAG,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAe,EACf,OAAe,EACf,SAAS,GAAG,CAAC;IAEb,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,YAAY,OAAO,UAAU,OAAO,IAAI,CAAC,CAAC;IAE7E,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;;QACtB,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC","sourcesContent":["/**\n * @since 0.0.1\n *\n * @param Document - doc where the Element should be created\n * @param string Tag - Tagname of the element\n * @param Record<string, string | null> - Attributes to be added to the created element\n *\n * @returns a new [[`tag`]] element owned by [[`doc`]].\n */\nexport function createElement(\n doc: Document,\n tag: string,\n attrs: Record<string, string | null>\n): Element {\n const element = doc.createElementNS(doc.documentElement.namespaceURI, tag);\n Object.entries(attrs)\n .filter(([_, value]) => value !== null)\n .forEach(([name, value]) => element.setAttribute(name, value!));\n return element;\n}\n\n/**\n * @since 0.0.1\n *\n * @param Element - element to be cloned\n * @params Record<string, string | null> - Attributes to be added\n *\n * @returns a clone of `element` with attributes set to values from `attrs`.\n */\nexport function cloneElement(\n element: Element,\n attrs: Record<string, string | null>\n): Element {\n const newElement = <Element>element.cloneNode(false);\n Object.entries(attrs).forEach(([name, value]) => {\n if (value === null) newElement.removeAttribute(name);\n else newElement.setAttribute(name, value);\n });\n return newElement;\n}\n\nexport function getChildElementsByTagName(\n element: Element | null | undefined,\n tag: string | null | undefined\n): Element[] {\n if (!element || !tag) return [];\n return Array.from(element.children).filter(\n element => element.tagName === tag\n );\n}\n\n/**\n * Format xml string in \"pretty print\" style and return as a string\n * @param xml - xml document as a string\n * @param tab - character to use as a tab\n * @returns string with pretty print formatting\n */\nexport function formatXml(xml: string, tab?: string): string {\n let formatted = '',\n indent = '';\n\n if (!tab) tab = '\\t';\n xml.split(/>\\s*</).forEach(function (node) {\n if (node.match(/^\\/\\w/)) indent = indent.substring(tab!.length);\n formatted += indent + '<' + node + '>\\r\\n';\n if (node.match(/^<?\\w[^>]*[^/]$/)) indent += tab;\n });\n return formatted.substring(1, formatted.length - 3);\n}\n\nexport function getUniqueElementName(\n parent: Element,\n tagName: string,\n iteration = 1\n): string {\n const newName = 'new' + tagName + iteration;\n const child = parent.querySelector(`:scope > ${tagName}[name=\"${newName}\"]`);\n\n if (!child) return newName;\n else return getUniqueElementName(parent, tagName, ++iteration);\n}\n"]}
@@ -1,2 +0,0 @@
1
- export { createElement, cloneElement, getUniqueElementName, getChildElementsByTagName, formatXml } from './foundation.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../xml/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export { createElement, cloneElement, getUniqueElementName, getChildElementsByTagName, formatXml } from './foundation.js';\n"]}