@teipublisher/pb-components 2.25.5 → 2.25.6

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 (128) 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 +3 -3
  4. package/CHANGELOG.md +8 -0
  5. package/Dockerfile +78 -70
  6. package/css/components.css +5 -5
  7. package/dist/demo/pb-drawer2.html +1 -1
  8. package/dist/demo/pb-leaflet-map.html +1 -1
  9. package/dist/demo/pb-repeat.html +1 -3
  10. package/dist/demo/pb-view3.html +1 -1
  11. package/dist/{paper-icon-button-0fb125c4.js → paper-icon-button-72125e67.js} +1 -1
  12. package/dist/pb-code-editor.js +25 -20
  13. package/dist/pb-component-docs.js +58 -54
  14. package/dist/pb-components-bundle.js +1827 -1520
  15. package/dist/pb-edit-app.js +167 -107
  16. package/dist/pb-elements.json +54 -54
  17. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  18. package/dist/pb-leaflet-map.js +23 -23
  19. package/dist/pb-mei.js +56 -41
  20. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  21. package/dist/pb-odd-editor.js +925 -758
  22. package/dist/pb-tify.js +2 -2
  23. package/dist/{vaadin-element-mixin-859a0132.js → vaadin-element-mixin-ad07ba25.js} +88 -61
  24. package/gh-pages.js +5 -3
  25. package/package.json +2 -2
  26. package/pb-elements.json +54 -54
  27. package/src/assets/components.css +5 -5
  28. package/src/authority/airtable.js +20 -21
  29. package/src/authority/anton.js +129 -129
  30. package/src/authority/custom.js +23 -21
  31. package/src/authority/geonames.js +38 -32
  32. package/src/authority/gnd.js +47 -42
  33. package/src/authority/kbga.js +137 -134
  34. package/src/authority/metagrid.js +44 -46
  35. package/src/authority/reconciliation.js +66 -67
  36. package/src/authority/registry.js +4 -4
  37. package/src/docs/pb-component-docs.js +2 -2
  38. package/src/docs/pb-component-view.js +5 -5
  39. package/src/docs/pb-components-list.js +2 -2
  40. package/src/docs/pb-demo-snippet.js +2 -2
  41. package/src/dts-client.js +299 -297
  42. package/src/dts-select-endpoint.js +90 -82
  43. package/src/parse-date-service.js +184 -135
  44. package/src/pb-ajax.js +171 -167
  45. package/src/pb-authority-lookup.js +96 -81
  46. package/src/pb-autocomplete.js +292 -280
  47. package/src/pb-blacklab-highlight.js +264 -259
  48. package/src/pb-blacklab-results.js +236 -221
  49. package/src/pb-browse-docs.js +540 -475
  50. package/src/pb-browse.js +68 -65
  51. package/src/pb-clipboard.js +79 -76
  52. package/src/pb-code-editor.js +110 -102
  53. package/src/pb-code-highlight.js +209 -204
  54. package/src/pb-codepen.js +79 -72
  55. package/src/pb-collapse.js +149 -146
  56. package/src/pb-combo-box.js +190 -190
  57. package/src/pb-components-bundle.js +1 -1
  58. package/src/pb-custom-form.js +150 -149
  59. package/src/pb-document.js +89 -90
  60. package/src/pb-download.js +208 -195
  61. package/src/pb-drawer.js +145 -148
  62. package/src/pb-edit-app.js +301 -229
  63. package/src/pb-edit-xml.js +99 -96
  64. package/src/pb-events.js +114 -107
  65. package/src/pb-facs-link.js +104 -102
  66. package/src/pb-facsimile.js +411 -413
  67. package/src/pb-formula.js +151 -153
  68. package/src/pb-geolocation.js +129 -131
  69. package/src/pb-grid-action.js +53 -56
  70. package/src/pb-grid.js +231 -228
  71. package/src/pb-highlight.js +140 -140
  72. package/src/pb-hotkeys.js +40 -42
  73. package/src/pb-i18n.js +101 -104
  74. package/src/pb-image-strip.js +84 -78
  75. package/src/pb-lang.js +83 -70
  76. package/src/pb-leaflet-map.js +488 -485
  77. package/src/pb-link.js +126 -124
  78. package/src/pb-load.js +431 -426
  79. package/src/pb-login.js +275 -254
  80. package/src/pb-manage-odds.js +364 -318
  81. package/src/pb-map-icon.js +89 -89
  82. package/src/pb-map-layer.js +85 -85
  83. package/src/pb-markdown.js +90 -99
  84. package/src/pb-media-query.js +74 -72
  85. package/src/pb-mei.js +306 -295
  86. package/src/pb-message.js +143 -130
  87. package/src/pb-mixin.js +269 -264
  88. package/src/pb-navigation.js +80 -82
  89. package/src/pb-observable.js +38 -38
  90. package/src/pb-odd-editor.js +1056 -958
  91. package/src/pb-odd-elementspec-editor.js +348 -297
  92. package/src/pb-odd-model-editor.js +1058 -898
  93. package/src/pb-odd-parameter-editor.js +200 -178
  94. package/src/pb-odd-rendition-editor.js +136 -124
  95. package/src/pb-page.js +432 -422
  96. package/src/pb-paginate.js +202 -190
  97. package/src/pb-panel.js +191 -179
  98. package/src/pb-popover-themes.js +7 -5
  99. package/src/pb-popover.js +296 -287
  100. package/src/pb-print-preview.js +127 -127
  101. package/src/pb-progress.js +49 -49
  102. package/src/pb-repeat.js +105 -104
  103. package/src/pb-restricted.js +84 -77
  104. package/src/pb-search.js +238 -221
  105. package/src/pb-select-feature.js +127 -120
  106. package/src/pb-select-odd.js +132 -124
  107. package/src/pb-select-template.js +89 -78
  108. package/src/pb-select.js +251 -227
  109. package/src/pb-split-list.js +179 -174
  110. package/src/pb-svg.js +80 -79
  111. package/src/pb-table-column.js +54 -54
  112. package/src/pb-table-grid.js +221 -203
  113. package/src/pb-tabs.js +61 -63
  114. package/src/pb-tify.js +154 -154
  115. package/src/pb-timeline.js +271 -229
  116. package/src/pb-toggle-feature.js +198 -185
  117. package/src/pb-upload.js +184 -174
  118. package/src/pb-version.js +30 -30
  119. package/src/pb-view-annotate.js +132 -98
  120. package/src/pb-view.js +1282 -1263
  121. package/src/pb-zoom.js +40 -40
  122. package/src/polymer-hack.js +1 -1
  123. package/src/search-result-service.js +256 -223
  124. package/src/seed-element.js +13 -20
  125. package/src/settings.js +4 -4
  126. package/src/theming.js +91 -91
  127. package/src/urls.js +289 -289
  128. package/src/utils.js +53 -51
@@ -1,213 +1,213 @@
1
1
  import { LitElement } from 'lit-element';
2
- import TomSelect from "tom-select";
2
+ import TomSelect from 'tom-select';
3
3
  import { pbMixin, waitOnce } from './pb-mixin.js';
4
4
  import { resolveURL } from './utils.js';
5
- import { get as i18n } from "./pb-i18n.js";
5
+ import { get as i18n } from './pb-i18n.js';
6
6
 
7
7
  function importTheme(theme) {
8
- if (document.getElementById('__pb-multi-select-css')) {
9
- return;
10
- }
11
- const themes = resolveURL('../css/tom-select');
12
- const link = document.createElement('link');
13
- link.id = '__pb-multi-select-css';
14
- link.href = `${themes}/tom-select.${theme}.min.css`;
15
- link.rel = 'stylesheet';
16
- document.head.appendChild(link);
8
+ if (document.getElementById('__pb-multi-select-css')) {
9
+ return;
10
+ }
11
+ const themes = resolveURL('../css/tom-select');
12
+ const link = document.createElement('link');
13
+ link.id = '__pb-multi-select-css';
14
+ link.href = `${themes}/tom-select.${theme}.min.css`;
15
+ link.rel = 'stylesheet';
16
+ document.head.appendChild(link);
17
17
  }
18
18
 
19
- const renderDefault = (data) =>
20
- data ? `<div>${i18n(data.text)}</div>` : '';
19
+ const renderDefault = data => (data ? `<div>${i18n(data.text)}</div>` : '');
21
20
 
22
21
  /**
23
22
  * Provides a combo box, i.e. a combination of an input with a dropdown.
24
23
  * Items to select from may be obtained from a remote data source.
25
- *
26
- * The form control to be used (either a select or input) should be passed
24
+ *
25
+ * The form control to be used (either a select or input) should be passed
27
26
  * in the content of the element. If no control is provided, a simple `<input>`
28
27
  * will be created.
29
- *
28
+ *
30
29
  */
31
30
  export class PbComboBox extends pbMixin(LitElement) {
32
- static get properties() {
33
- return {
34
- ...super.properties,
35
- /**
36
- * The placeholder text to display in the control. May contain text or an i18n key to be
37
- * translated automatically.
38
- */
39
- placeholder: {
40
- type: String
41
- },
42
- /**
43
- * A remote data source to use. The component will pass the text entered by the user
44
- * in parameter `query`. It expects a JSON array of objects with each object describing
45
- * one item:
46
- *
47
- * ```json
48
- * {
49
- * "text": "Text to show as label",
50
- * "value": "value-to-use"
51
- * }
52
- * ```
53
- */
54
- source: {
55
- type: String
56
- },
57
- /**
58
- * Automatically close the dropdown once the user made a selection
59
- */
60
- closeAfterSelect: {
61
- type: Boolean,
62
- attribute: 'close-after-select'
63
- },
64
- /**
65
- * Preload all items from the remote data source at startup
66
- * Must be of type string because tom-select supports setting
67
- * that property to "focus" (load data on focus)
68
- */
69
- preload: {
70
- type: String
71
- },
72
- /**
73
- * Name of the event to be emitted when the user leaves the form control
74
- */
75
- onBlur: {
76
- type: String,
77
- attribute: 'on-blur'
78
- },
79
- /**
80
- * Name of the event to be emitted when the value of the form control has changed
81
- */
82
- onChange: {
83
- type: String,
84
- attribute: 'on-change'
85
- }
86
- };
31
+ static get properties() {
32
+ return {
33
+ ...super.properties,
34
+ /**
35
+ * The placeholder text to display in the control. May contain text or an i18n key to be
36
+ * translated automatically.
37
+ */
38
+ placeholder: {
39
+ type: String,
40
+ },
41
+ /**
42
+ * A remote data source to use. The component will pass the text entered by the user
43
+ * in parameter `query`. It expects a JSON array of objects with each object describing
44
+ * one item:
45
+ *
46
+ * ```json
47
+ * {
48
+ * "text": "Text to show as label",
49
+ * "value": "value-to-use"
50
+ * }
51
+ * ```
52
+ */
53
+ source: {
54
+ type: String,
55
+ },
56
+ /**
57
+ * Automatically close the dropdown once the user made a selection
58
+ */
59
+ closeAfterSelect: {
60
+ type: Boolean,
61
+ attribute: 'close-after-select',
62
+ },
63
+ /**
64
+ * Preload all items from the remote data source at startup
65
+ * Must be of type string because tom-select supports setting
66
+ * that property to "focus" (load data on focus)
67
+ */
68
+ preload: {
69
+ type: String,
70
+ },
71
+ /**
72
+ * Name of the event to be emitted when the user leaves the form control
73
+ */
74
+ onBlur: {
75
+ type: String,
76
+ attribute: 'on-blur',
77
+ },
78
+ /**
79
+ * Name of the event to be emitted when the value of the form control has changed
80
+ */
81
+ onChange: {
82
+ type: String,
83
+ attribute: 'on-change',
84
+ },
85
+ };
86
+ }
87
+
88
+ get value() {
89
+ return this._select ? this._select.getValue() : null;
90
+ }
91
+
92
+ set value(value) {
93
+ if (!this._select) {
94
+ return;
87
95
  }
88
-
89
- get value() {
90
- return this._select ? this._select.getValue() : null;
91
- }
92
-
93
- set value(value) {
94
- if (!this._select) {
95
- return;
96
+ this._select.clear(true);
97
+ this._select.sync();
98
+
99
+ this._select.setValue(value, false);
100
+ this._select.sync();
101
+ }
102
+
103
+ /**
104
+ * Set a javascript function to be called whenever an item
105
+ * needs to be rendered. The function will be passed the data
106
+ * object of the current item as argument.
107
+ *
108
+ * @param {Function} callbackFunction
109
+ */
110
+ set renderItem(callbackFunction) {
111
+ this.renderFunction = callbackFunction;
112
+ }
113
+
114
+ constructor() {
115
+ super();
116
+ this.theme = 'default';
117
+ this.source = null;
118
+ this.closeAfterSelect = false;
119
+ this.preload = false;
120
+ this.renderFunction = renderDefault;
121
+ this.onBlur = 'pb-combo-box-blur';
122
+ this.onChange = 'pb-combo-box-change';
123
+ this.placeholder = '';
124
+ }
125
+
126
+ connectedCallback() {
127
+ super.connectedCallback();
128
+ this.subscribeTo('pb-i18n-update', () => {
129
+ if (this._select) {
130
+ this._select.settings.placeholder = i18n(this.placeholder);
131
+ this._select.inputState();
132
+
133
+ if (this.source) {
134
+ this._select.refreshOptions(false);
135
+ } else {
136
+ this._select.clearOptions();
137
+ this._select.sync();
96
138
  }
97
- this._select.clear(true);
98
- this._select.sync();
139
+ }
140
+ });
141
+ }
99
142
 
100
- this._select.setValue(value, false);
101
- this._select.sync();
102
- }
103
-
104
- /**
105
- * Set a javascript function to be called whenever an item
106
- * needs to be rendered. The function will be passed the data
107
- * object of the current item as argument.
108
- *
109
- * @param {Function} callbackFunction
110
- */
111
- set renderItem(callbackFunction) {
112
- this.renderFunction = callbackFunction;
113
- }
143
+ firstUpdated() {
144
+ importTheme(this.theme);
114
145
 
115
- constructor() {
116
- super();
117
- this.theme = 'default';
118
- this.source = null;
119
- this.closeAfterSelect = false;
120
- this.preload = false;
121
- this.renderFunction = renderDefault;
122
- this.onBlur = 'pb-combo-box-blur';
123
- this.onChange = 'pb-combo-box-change';
124
- this.placeholder = '';
125
- }
146
+ let input = this.querySelector('select,input');
126
147
 
127
- connectedCallback() {
128
- super.connectedCallback();
129
- this.subscribeTo('pb-i18n-update', () => {
130
- if (this._select) {
131
- this._select.settings.placeholder = i18n(this.placeholder);
132
- this._select.inputState();
133
-
134
- if (this.source) {
135
- this._select.refreshOptions(false);
136
- } else {
137
- this._select.clearOptions();
138
- this._select.sync();
139
- }
140
- }
141
- });
148
+ if (!input) {
149
+ // create input if none was passed
150
+ input = document.createElement('input');
151
+ this.appendChild(input);
142
152
  }
143
-
144
- firstUpdated() {
145
- importTheme(this.theme);
146
-
147
- let input = this.querySelector('select,input');
148
-
149
- if (!input) {
150
- // create input if none was passed
151
- input = document.createElement('input');
152
- this.appendChild(input);
153
+ input.autocomplete = false;
154
+
155
+ waitOnce('pb-page-ready', () => {
156
+ const options = {};
157
+ if (this.source) {
158
+ let controller = new AbortController();
159
+ const url = this.toAbsoluteURL(this.source);
160
+ options.labelField = 'text';
161
+ options.valueField = 'value';
162
+ options.searchField = [];
163
+ options.preload = this.preload;
164
+ // Make sure options are loaded even if the user clears the search field
165
+ if (this.preload) {
166
+ options.shouldLoad = () => true;
153
167
  }
154
- input.autocomplete = false;
155
-
156
- waitOnce('pb-page-ready', () => {
157
- const options = {};
158
- if (this.source) {
159
- let controller = new AbortController()
160
- const url = this.toAbsoluteURL(this.source);
161
- options.labelField = 'text';
162
- options.valueField = 'value';
163
- options.searchField = [];
164
- options.preload = this.preload;
165
- // Make sure options are loaded even if the user clears the search field
166
- if(this.preload) {
167
- options.shouldLoad = () => true
168
- }
169
- options.load = (query, callback) => {
170
- if (this._select) {
171
- // The default behaviour of tom-select is to keep existing items when loading
172
- // again from the source. We want to show only items the server provides, so
173
- // we need to clear "stale" items before fetching.
174
- this._select.clearOptions();
175
- }
176
- // Abort previous request (if any)
177
- if (controller) {
178
- controller.abort();
179
- }
180
- controller = new AbortController();
181
- fetch(`${url}?query=${encodeURIComponent(query)}`, {
182
- method: 'GET',
183
- mode: 'cors',
184
- credentials: 'same-origin',
185
- signal: controller.signal
186
- })
187
- .then(response => response.json())
188
- .then(json => {
189
- callback(json);
190
- }).catch(()=>{
191
- callback();
192
- });
193
- };
194
- options.render = {
195
- option: this.renderFunction,
196
- item: this.renderFunction
197
- };
198
- }
199
- options.placeholder = i18n(this.placeholder);
200
- options.closeAfterSelect = this.closeAfterSelect;
201
- options.onBlur = () => this.emitTo(this.onBlur, { value: this.value });
202
- options.onChange = () => this.emitTo(this.onChange, { value: this.value });
203
- // options.plugins = ['change_listener'];
204
-
205
- this._select = new TomSelect(input, options);
206
- });
207
- }
208
-
209
- createRenderRoot() {
210
- return this;
211
- }
168
+ options.load = (query, callback) => {
169
+ if (this._select) {
170
+ // The default behaviour of tom-select is to keep existing items when loading
171
+ // again from the source. We want to show only items the server provides, so
172
+ // we need to clear "stale" items before fetching.
173
+ this._select.clearOptions();
174
+ }
175
+ // Abort previous request (if any)
176
+ if (controller) {
177
+ controller.abort();
178
+ }
179
+ controller = new AbortController();
180
+ fetch(`${url}?query=${encodeURIComponent(query)}`, {
181
+ method: 'GET',
182
+ mode: 'cors',
183
+ credentials: 'same-origin',
184
+ signal: controller.signal,
185
+ })
186
+ .then(response => response.json())
187
+ .then(json => {
188
+ callback(json);
189
+ })
190
+ .catch(() => {
191
+ callback();
192
+ });
193
+ };
194
+ options.render = {
195
+ option: this.renderFunction,
196
+ item: this.renderFunction,
197
+ };
198
+ }
199
+ options.placeholder = i18n(this.placeholder);
200
+ options.closeAfterSelect = this.closeAfterSelect;
201
+ options.onBlur = () => this.emitTo(this.onBlur, { value: this.value });
202
+ options.onChange = () => this.emitTo(this.onChange, { value: this.value });
203
+ // options.plugins = ['change_listener'];
204
+
205
+ this._select = new TomSelect(input, options);
206
+ });
207
+ }
208
+
209
+ createRenderRoot() {
210
+ return this;
211
+ }
212
212
  }
213
- customElements.define('pb-combo-box', PbComboBox);
213
+ customElements.define('pb-combo-box', PbComboBox);
@@ -5,4 +5,4 @@ import '@polymer/paper-tooltip/paper-tooltip.js';
5
5
  import '@polymer/paper-fab';
6
6
  import '@polymer/paper-card';
7
7
  import './docs/pb-demo-snippet.js';
8
- import './pb-components.js';
8
+ import './pb-components.js';