@teipublisher/pb-components 2.26.1-next.2 → 3.0.0

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 (154) hide show
  1. package/.github/workflows/main.yml +3 -3
  2. package/.github/workflows/node.js.yml +3 -3
  3. package/.github/workflows/release.js.yml +4 -4
  4. package/.releaserc.json +2 -2
  5. package/CHANGELOG.md +267 -9
  6. package/Dockerfile +78 -70
  7. package/css/components.css +5 -5
  8. package/css/leaflet/images/layers.png +0 -0
  9. package/dist/demo/components.css +46 -1
  10. package/dist/demo/pb-browse-docs2.html +1 -1
  11. package/dist/demo/pb-dialog.html +3 -5
  12. package/dist/demo/pb-drawer2.html +1 -1
  13. package/dist/demo/pb-facsimile.html +2 -2
  14. package/dist/demo/pb-grid.html +19 -6
  15. package/dist/demo/pb-leaflet-map.html +1 -1
  16. package/dist/demo/pb-login.html +0 -2
  17. package/dist/demo/pb-message.html +1 -2
  18. package/dist/demo/pb-progress.html +2 -2
  19. package/dist/demo/pb-repeat.html +1 -3
  20. package/dist/demo/pb-search.html +7 -4
  21. package/dist/demo/pb-search3.html +1 -1
  22. package/dist/demo/pb-search4.html +2 -2
  23. package/dist/demo/pb-view3.html +1 -1
  24. package/dist/{iron-form-3b8dcaa7.js → iron-form-dfb3e3b1.js} +95 -95
  25. package/dist/paper-checkbox-645e1077.js +200 -0
  26. package/dist/{paper-icon-button-b1d31571.js → paper-icon-button-984162bd.js} +1 -1
  27. package/dist/{paper-checkbox-515a5284.js → paper-inky-focus-behavior-fa16796b.js} +58 -247
  28. package/dist/{paper-listbox-a3b7175c.js → paper-listbox-5f5d1cec.js} +152 -162
  29. package/dist/pb-code-editor.js +25 -20
  30. package/dist/pb-component-docs.js +68 -64
  31. package/dist/pb-components-bundle.js +1983 -2293
  32. package/dist/pb-edit-app.js +167 -107
  33. package/dist/pb-elements.json +176 -120
  34. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  35. package/dist/pb-leaflet-map.js +23 -23
  36. package/dist/pb-mei.js +56 -41
  37. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  38. package/dist/pb-odd-editor.js +1023 -782
  39. package/dist/pb-tify.js +2 -2
  40. package/dist/vaadin-element-mixin-beb74ffd.js +545 -0
  41. package/gh-pages.js +5 -3
  42. package/i18n/common/en.json +6 -0
  43. package/i18n/common/pl.json +2 -2
  44. package/lib/openseadragon.min.js +6 -6
  45. package/package.json +3 -3
  46. package/pb-elements.json +176 -120
  47. package/src/assets/components.css +5 -5
  48. package/src/authority/airtable.js +20 -21
  49. package/src/authority/anton.js +129 -129
  50. package/src/authority/custom.js +23 -21
  51. package/src/authority/geonames.js +38 -32
  52. package/src/authority/gnd.js +50 -42
  53. package/src/authority/kbga.js +137 -134
  54. package/src/authority/metagrid.js +44 -46
  55. package/src/authority/reconciliation.js +66 -67
  56. package/src/authority/registry.js +4 -4
  57. package/src/docs/pb-component-docs.js +2 -2
  58. package/src/docs/pb-component-view.js +5 -5
  59. package/src/docs/pb-components-list.js +2 -2
  60. package/src/docs/pb-demo-snippet.js +2 -2
  61. package/src/dts-client.js +299 -297
  62. package/src/dts-select-endpoint.js +90 -82
  63. package/src/parse-date-service.js +184 -135
  64. package/src/pb-ajax.js +158 -171
  65. package/src/pb-authority-lookup.js +191 -156
  66. package/src/pb-autocomplete.js +292 -280
  67. package/src/pb-blacklab-highlight.js +264 -259
  68. package/src/pb-blacklab-results.js +236 -221
  69. package/src/pb-browse-docs.js +540 -475
  70. package/src/pb-browse.js +68 -65
  71. package/src/pb-clipboard.js +79 -76
  72. package/src/pb-code-editor.js +110 -102
  73. package/src/pb-code-highlight.js +209 -204
  74. package/src/pb-codepen.js +79 -72
  75. package/src/pb-collapse.js +211 -151
  76. package/src/pb-combo-box.js +190 -190
  77. package/src/pb-components-bundle.js +1 -1
  78. package/src/pb-components.js +1 -0
  79. package/src/pb-custom-form.js +173 -153
  80. package/src/pb-dialog.js +98 -62
  81. package/src/pb-document.js +89 -90
  82. package/src/pb-download.js +212 -196
  83. package/src/pb-drawer.js +145 -148
  84. package/src/pb-edit-app.js +301 -229
  85. package/src/pb-edit-xml.js +100 -97
  86. package/src/pb-events.js +114 -107
  87. package/src/pb-facs-link.js +104 -102
  88. package/src/pb-facsimile.js +474 -410
  89. package/src/pb-formula.js +151 -153
  90. package/src/pb-geolocation.js +129 -131
  91. package/src/pb-grid-action.js +53 -56
  92. package/src/pb-grid.js +231 -228
  93. package/src/pb-highlight.js +140 -140
  94. package/src/pb-hotkeys.js +40 -42
  95. package/src/pb-i18n.js +101 -104
  96. package/src/pb-image-strip.js +84 -78
  97. package/src/pb-lang.js +142 -57
  98. package/src/pb-leaflet-map.js +488 -485
  99. package/src/pb-link.js +126 -124
  100. package/src/pb-load.js +431 -429
  101. package/src/pb-login.js +299 -244
  102. package/src/pb-manage-odds.js +352 -336
  103. package/src/pb-map-icon.js +89 -89
  104. package/src/pb-map-layer.js +85 -85
  105. package/src/pb-markdown.js +90 -99
  106. package/src/pb-media-query.js +74 -72
  107. package/src/pb-mei.js +306 -295
  108. package/src/pb-message.js +139 -97
  109. package/src/pb-mixin.js +269 -264
  110. package/src/pb-navigation.js +80 -95
  111. package/src/pb-observable.js +38 -38
  112. package/src/pb-odd-editor.js +1054 -958
  113. package/src/pb-odd-elementspec-editor.js +349 -298
  114. package/src/pb-odd-model-editor.js +1075 -909
  115. package/src/pb-odd-parameter-editor.js +200 -178
  116. package/src/pb-odd-rendition-editor.js +136 -124
  117. package/src/pb-page.js +431 -422
  118. package/src/pb-paginate.js +228 -179
  119. package/src/pb-panel.js +198 -182
  120. package/src/pb-popover-themes.js +15 -8
  121. package/src/pb-popover.js +296 -287
  122. package/src/pb-print-preview.js +127 -127
  123. package/src/pb-progress.js +51 -51
  124. package/src/pb-repeat.js +105 -104
  125. package/src/pb-restricted.js +84 -77
  126. package/src/pb-search.js +256 -228
  127. package/src/pb-select-feature.js +127 -120
  128. package/src/pb-select-odd.js +132 -124
  129. package/src/pb-select-template.js +89 -78
  130. package/src/pb-select.js +251 -227
  131. package/src/pb-split-list.js +179 -174
  132. package/src/pb-svg.js +80 -79
  133. package/src/pb-table-column.js +54 -54
  134. package/src/pb-table-grid.js +221 -203
  135. package/src/pb-tabs.js +61 -63
  136. package/src/pb-tify.js +154 -154
  137. package/src/pb-timeline.js +382 -249
  138. package/src/pb-toggle-feature.js +195 -187
  139. package/src/pb-upload.js +184 -174
  140. package/src/pb-version.js +30 -30
  141. package/src/pb-view-annotate.js +135 -98
  142. package/src/pb-view.js +1282 -1270
  143. package/src/pb-zoom.js +127 -45
  144. package/src/polymer-hack.js +1 -1
  145. package/src/search-result-service.js +256 -223
  146. package/src/seed-element.js +13 -20
  147. package/src/settings.js +4 -4
  148. package/src/theming.js +98 -91
  149. package/src/urls.js +289 -289
  150. package/src/utils.js +53 -51
  151. package/css/pb-styles.css +0 -51
  152. package/dist/vaadin-element-mixin-6e4cee3a.js +0 -527
  153. package/src/assets/pb-styles.css +0 -51
  154. package/src/pb-light-dom.js +0 -40
@@ -1,29 +1,29 @@
1
1
  import { LitElement, html } from 'lit-element';
2
- import '@polymer/paper-checkbox';
3
2
  import { pbMixin, waitOnce } from './pb-mixin.js';
4
- import { registry } from "./urls.js";
3
+ import { registry } from './urls.js';
4
+ import { themableMixin } from './theming.js';
5
5
 
6
6
  /**
7
7
  * @param {{ selector: any; command: string; state: boolean; }} newConfig
8
8
  * @param {any[]} configs
9
9
  */
10
- export function addSelector(newConfig, configs) {
11
- const idx = configs.findIndex((item) => item.selector === newConfig.selector);
12
- if (idx > -1) {
13
- configs[idx] = newConfig;
14
- } else {
15
- configs.push(newConfig);
16
- }
10
+ export function addSelector(newConfig, configs) {
11
+ const idx = configs.findIndex(item => item.selector === newConfig.selector);
12
+ if (idx > -1) {
13
+ configs[idx] = newConfig;
14
+ } else {
15
+ configs.push(newConfig);
16
+ }
17
17
  }
18
18
 
19
19
  /**
20
20
  * Enable or disable a particular display feature by setting a predefined or custom parameter.
21
21
  * Toggling display features can be done server-side or client-side.
22
- *
22
+ *
23
23
  * It is important that `pb-toggle-feature` emits and subscribes to the same channel as the target `pb-view`.
24
- *
24
+ *
25
25
  * # Server side toggling
26
- *
26
+ *
27
27
  * You may set the following view parameters which correspond to the properties supported by `pb-view`:
28
28
  *
29
29
  * | Parameter | Description |
@@ -64,22 +64,22 @@ import { registry } from "./urls.js";
64
64
  * ```
65
65
  *
66
66
  * # Client side toggling
67
- *
67
+ *
68
68
  * The component can also be used to toggle features client-side, i.e. without requiring a server-roundtrip.
69
69
  * To enable this, the `selector` property should be set to a CSS3 selector targetting the HTML elements
70
70
  * to toggle. In `on` state, the selected elements will be assigned a class `.toggled`.
71
- *
71
+ *
72
72
  * ```html
73
73
  * <pb-toggle-feature name="normalized" selector=".choice,.choice-alternate,br">Normalized View</pb-toggle-feature>
74
74
  * ```
75
- *
75
+ *
76
76
  * Note that the name attribute is still required: it is used to determine if the feature is in on or off state by
77
77
  * looking at request parameters.
78
- *
78
+ *
79
79
  * Instead of toggling the class, you can also completely disable the elements selected - provided that they are
80
80
  * publisher components implementing the corresponding `command` method of `pb-mixin`. To disable elements instead of
81
81
  * toggling, set the `action` property to *disable*.
82
- *
82
+ *
83
83
  * ```html
84
84
  * <pb-toggle-feature name="plain" selector=".tei-foreign,pb-highlight,pb-popover" action="disable" default="off">Plain Reading View</pb-toggle-feature>
85
85
  * ```
@@ -88,193 +88,201 @@ import { registry } from "./urls.js";
88
88
  * @fires pb-global-toggle - Fired if property `global` is set. Will be caught by the surrounding `pb-page`
89
89
  * @fires pb-update - When received, sets the features passed from the event
90
90
  */
91
- export class PbToggleFeature extends pbMixin(LitElement) {
91
+ export class PbToggleFeature extends themableMixin(pbMixin(LitElement)) {
92
+ static get properties() {
93
+ return {
94
+ ...super.properties,
95
+ /**
96
+ * The name of the feature (required). This will correspond to the name of the custom parameter
97
+ * passed to the ODD.
98
+ */
99
+ name: {
100
+ type: String,
101
+ },
102
+ /**
103
+ * (optional) CSS selector: selects the elements to toggle client side (sets or unsets a
104
+ * CSS class `.toggled`). Setting this property will not trigger a reload as everything is
105
+ * handled by javascript.
106
+ */
107
+ selector: {
108
+ type: String,
109
+ },
110
+ /**
111
+ * In combination with a selector specifies the action to be taken, currently one of
112
+ * `toggle` (default) or `disable`.
113
+ */
114
+ action: {
115
+ type: String,
116
+ },
117
+ /**
118
+ * Value to set the parameter to when the feature is enabled.
119
+ */
120
+ on: {
121
+ type: String,
122
+ },
123
+ /**
124
+ * Value to set the parameter to when the feature is disabled.
125
+ */
126
+ off: {
127
+ type: String,
128
+ },
129
+ /**
130
+ * The default setting: either 'on' or 'off'
131
+ */
132
+ default: {
133
+ type: String,
134
+ },
135
+ /**
136
+ * Additional properties to set on the pb-view if toggle is in 'on' state.
137
+ * Possible properties are 'view', 'odd' and 'columnSeparator'.
138
+ */
139
+ propertiesOn: {
140
+ type: Object,
141
+ attribute: 'properties-on',
142
+ },
143
+ /**
144
+ * Additional properties to set on the pb-view if toggle is in 'off' state.
145
+ * Possible properties are 'view', 'odd' and 'columnSeparator'.
146
+ */
147
+ propertiesOff: {
148
+ type: Object,
149
+ attribute: 'properties-off',
150
+ },
151
+ checked: {
152
+ type: Boolean,
153
+ },
154
+ /**
155
+ * If set to false (the default), `pb-toggle-feature` will pass its properties to the
156
+ * connected view before this loads content for the first time. If true,
157
+ * `pb-toggle-feature` will initialize its state depending on the setting of the view.
158
+ * This only makes sense for the special properties 'view' and 'odd' though.
159
+ */
160
+ initFromView: {
161
+ type: Boolean,
162
+ attribute: 'init-from-view',
163
+ },
164
+ /**
165
+ * If set, toggle the state of elements which reside
166
+ * in the surrounding HTML context below `pb-page`
167
+ * (means: elements which are not inside a `pb-view` or `pb-load`).
168
+ */
169
+ global: {
170
+ type: Boolean,
171
+ },
172
+ };
173
+ }
92
174
 
93
- static get properties() {
94
- return {
95
- ...super.properties,
96
- /**
97
- * The name of the feature (required). This will correspond to the name of the custom parameter
98
- * passed to the ODD.
99
- */
100
- name: {
101
- type: String
102
- },
103
- /**
104
- * (optional) CSS selector: selects the elements to toggle client side (sets or unsets a
105
- * CSS class `.toggled`). Setting this property will not trigger a reload as everything is
106
- * handled by javascript.
107
- */
108
- selector: {
109
- type: String
110
- },
111
- /**
112
- * In combination with a selector specifies the action to be taken, currently one of
113
- * `toggle` (default) or `disable`.
114
- */
115
- action: {
116
- type: String
117
- },
118
- /**
119
- * Value to set the parameter to when the feature is enabled.
120
- */
121
- on: {
122
- type: String
123
- },
124
- /**
125
- * Value to set the parameter to when the feature is disabled.
126
- */
127
- off: {
128
- type: String
129
- },
130
- /**
131
- * The default setting: either 'on' or 'off'
132
- */
133
- default: {
134
- type: String
135
- },
136
- /**
137
- * Additional properties to set on the pb-view if toggle is in 'on' state.
138
- * Possible properties are 'view', 'odd' and 'columnSeparator'.
139
- */
140
- propertiesOn: {
141
- type: Object,
142
- attribute: 'properties-on'
143
- },
144
- /**
145
- * Additional properties to set on the pb-view if toggle is in 'off' state.
146
- * Possible properties are 'view', 'odd' and 'columnSeparator'.
147
- */
148
- propertiesOff: {
149
- type: Object,
150
- attribute: 'properties-off'
151
- },
152
- checked: {
153
- type: Boolean
154
- },
155
- /**
156
- * If set to false (the default), `pb-toggle-feature` will pass its properties to the
157
- * connected view before this loads content for the first time. If true,
158
- * `pb-toggle-feature` will initialize its state depending on the setting of the view.
159
- * This only makes sense for the special properties 'view' and 'odd' though.
160
- */
161
- initFromView: {
162
- type: Boolean,
163
- attribute: 'init-from-view'
164
- },
165
- /**
166
- * If set, toggle the state of elements which reside
167
- * in the surrounding HTML context below `pb-page`
168
- * (means: elements which are not inside a `pb-view` or `pb-load`).
169
- */
170
- global: {
171
- type: Boolean
172
- }
173
- };
174
- }
175
-
176
- constructor() {
177
- super();
178
- this.default = 'on';
179
- this.on = 'on';
180
- this.off = 'off';
181
- this.action = 'toggle';
182
- this.propertiesOn = {};
183
- this.propertiesOff = {};
184
- this.initFromView = false;
185
- this.global = false;
186
- }
175
+ constructor() {
176
+ super();
177
+ this.default = 'on';
178
+ this.on = 'on';
179
+ this.off = 'off';
180
+ this.action = 'toggle';
181
+ this.propertiesOn = {};
182
+ this.propertiesOff = {};
183
+ this.initFromView = false;
184
+ this.global = false;
185
+ }
187
186
 
188
- render() {
189
- return html`
190
- <paper-checkbox id="checkbox" @change="${this._changed}" .checked="${this.checked}" .disabled="${this.disabled}"><slot></slot></paper-checkbox>
187
+ render() {
188
+ return html`
189
+ <input type="checkbox" id="checkbox" @change="${this._changed}" .checked="${this.checked}" .disabled="${this.disabled}"></input>
190
+ <label for="checkbox"><slot></slot></label>
191
191
  `;
192
- }
192
+ }
193
193
 
194
- connectedCallback() {
195
- super.connectedCallback();
194
+ connectedCallback() {
195
+ super.connectedCallback();
196
196
 
197
- registry.subscribe(this, (state) => {
198
- const param = state[this.name];
199
- this._setChecked(param);
200
- });
197
+ registry.subscribe(this, state => {
198
+ const param = state[this.name];
199
+ this._setChecked(param);
200
+ });
201
201
 
202
- const param = registry.state[this.name];
203
- this._setChecked(param);
204
-
205
- const newState = {};
206
- newState[this.name] = this.checked ? this.on : this.off;
207
- registry.replace(this, newState);
208
- this._saveState();
202
+ const param = registry.state[this.name];
203
+ this._setChecked(param);
209
204
 
210
- this.signalReady();
205
+ const newState = {};
206
+ newState[this.name] = this.checked ? this.on : this.off;
207
+ registry.replace(this, newState);
208
+ this._saveState();
211
209
 
212
- waitOnce('pb-page-ready', () => {
213
- if (this.global) {
214
- this.dispatchEvent(new CustomEvent('pb-global-toggle', { detail: {
215
- selector: this.selector,
216
- command: this.action,
217
- state: this.checked
218
- }, bubbles: true, composed: true }));
219
- } else if (this.selector) {
220
- this.emitTo('pb-toggle', {refresh: false});
221
- }
222
- });
223
- }
210
+ this.signalReady();
224
211
 
225
- _setChecked(param) {
226
- if (typeof param !== 'undefined') {
227
- this.checked = param === this.on;
228
- } else {
229
- this.checked = this.default === this.on;
230
- }
212
+ waitOnce('pb-page-ready', () => {
213
+ if (this.global) {
214
+ this.dispatchEvent(
215
+ new CustomEvent('pb-global-toggle', {
216
+ detail: {
217
+ selector: this.selector,
218
+ command: this.action,
219
+ state: this.checked,
220
+ },
221
+ bubbles: true,
222
+ composed: true,
223
+ }),
224
+ );
225
+ } else if (this.selector) {
226
+ this.emitTo('pb-toggle', { refresh: false });
227
+ }
228
+ });
229
+ }
230
+
231
+ _setChecked(param) {
232
+ if (typeof param !== 'undefined') {
233
+ this.checked = param === this.on;
234
+ } else {
235
+ this.checked = this.default === this.on;
231
236
  }
237
+ }
232
238
 
233
- attributeChangedCallback(name, oldVal, newVal) {
234
- super.attributeChangedCallback(name, oldVal, newVal);
235
- switch (name) {
236
- case this.on:
237
- this.propertiesOn[this.name] = newVal;
238
- break;
239
- case this.off:
240
- this.propertiesOff[this.name] = newVal;
241
- break;
242
- default:
243
- break;
244
- }
239
+ attributeChangedCallback(name, oldVal, newVal) {
240
+ super.attributeChangedCallback(name, oldVal, newVal);
241
+ switch (name) {
242
+ case this.on:
243
+ this.propertiesOn[this.name] = newVal;
244
+ break;
245
+ case this.off:
246
+ this.propertiesOff[this.name] = newVal;
247
+ break;
248
+ default:
249
+ break;
245
250
  }
251
+ }
246
252
 
247
- _changed() {
248
- this.checked = this.shadowRoot.getElementById('checkbox').checked;
253
+ _changed() {
254
+ this.checked = this.shadowRoot.getElementById('checkbox').checked;
249
255
 
250
- this._saveState();
251
- if (!this.global) {
252
- this.emitTo('pb-toggle', {refresh: !this.selector});
253
- } else {
254
- const state = {};
255
- state[this.name] = this.checked ? this.on : this.off;
256
- registry.commit(this, state);
257
- }
256
+ this._saveState();
257
+ if (!this.global) {
258
+ this.emitTo('pb-toggle', { refresh: !this.selector });
259
+ } else {
260
+ const state = {};
261
+ state[this.name] = this.checked ? this.on : this.off;
262
+ registry.commit(this, state);
258
263
  }
264
+ }
259
265
 
260
- _saveState() {
261
- const state = registry.getState(this);
262
- state[this.name] = this.checked ? this.on : this.off;
263
- Object.assign(state, this.checked ? this.propertiesOn : this.propertiesOff);
264
- if (this.selector) {
265
- const config = {
266
- selector: this.selector,
267
- command: this.action,
268
- state: this.checked
269
- };
270
- if (this.global) {
271
- this.dispatchEvent(new CustomEvent('pb-global-toggle', { detail: config, bubbles: true, composed: true }));
272
- } else {
273
- state.selectors = state.selectors || [];
274
- addSelector(config, state.selectors);
275
- }
276
- }
266
+ _saveState() {
267
+ const state = registry.getState(this);
268
+ state[this.name] = this.checked ? this.on : this.off;
269
+ Object.assign(state, this.checked ? this.propertiesOn : this.propertiesOff);
270
+ if (this.selector) {
271
+ const config = {
272
+ selector: this.selector,
273
+ command: this.action,
274
+ state: this.checked,
275
+ };
276
+ if (this.global) {
277
+ this.dispatchEvent(
278
+ new CustomEvent('pb-global-toggle', { detail: config, bubbles: true, composed: true }),
279
+ );
280
+ } else {
281
+ state.selectors = state.selectors || [];
282
+ addSelector(config, state.selectors);
283
+ }
277
284
  }
285
+ }
278
286
  }
279
287
 
280
288
  customElements.define('pb-toggle-feature', PbToggleFeature);