@teipublisher/pb-components 2.25.4 → 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 (130) 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 +1 -1
  5. package/CHANGELOG.md +15 -0
  6. package/Dockerfile +78 -70
  7. package/css/components.css +5 -5
  8. package/dist/demo/pb-drawer2.html +1 -1
  9. package/dist/demo/pb-leaflet-map.html +1 -1
  10. package/dist/demo/pb-repeat.html +1 -3
  11. package/dist/demo/pb-view3.html +1 -1
  12. package/dist/{paper-icon-button-0fb125c4.js → paper-icon-button-72125e67.js} +1 -1
  13. package/dist/pb-code-editor.js +25 -20
  14. package/dist/pb-component-docs.js +58 -54
  15. package/dist/pb-components-bundle.js +1827 -1520
  16. package/dist/pb-edit-app.js +167 -107
  17. package/dist/pb-elements.json +54 -54
  18. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  19. package/dist/pb-leaflet-map.js +23 -23
  20. package/dist/pb-mei.js +56 -41
  21. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  22. package/dist/pb-odd-editor.js +925 -758
  23. package/dist/pb-tify.js +2 -2
  24. package/dist/{vaadin-element-mixin-859a0132.js → vaadin-element-mixin-ad07ba25.js} +88 -61
  25. package/gh-pages.js +5 -3
  26. package/i18n/common/pl.json +2 -2
  27. package/package.json +2 -2
  28. package/pb-elements.json +54 -54
  29. package/src/assets/components.css +5 -5
  30. package/src/authority/airtable.js +20 -21
  31. package/src/authority/anton.js +129 -129
  32. package/src/authority/custom.js +23 -21
  33. package/src/authority/geonames.js +38 -32
  34. package/src/authority/gnd.js +47 -42
  35. package/src/authority/kbga.js +137 -134
  36. package/src/authority/metagrid.js +44 -46
  37. package/src/authority/reconciliation.js +66 -67
  38. package/src/authority/registry.js +4 -4
  39. package/src/docs/pb-component-docs.js +2 -2
  40. package/src/docs/pb-component-view.js +5 -5
  41. package/src/docs/pb-components-list.js +2 -2
  42. package/src/docs/pb-demo-snippet.js +2 -2
  43. package/src/dts-client.js +299 -297
  44. package/src/dts-select-endpoint.js +90 -82
  45. package/src/parse-date-service.js +184 -135
  46. package/src/pb-ajax.js +171 -167
  47. package/src/pb-authority-lookup.js +96 -81
  48. package/src/pb-autocomplete.js +292 -280
  49. package/src/pb-blacklab-highlight.js +264 -259
  50. package/src/pb-blacklab-results.js +236 -221
  51. package/src/pb-browse-docs.js +540 -475
  52. package/src/pb-browse.js +68 -65
  53. package/src/pb-clipboard.js +79 -76
  54. package/src/pb-code-editor.js +110 -102
  55. package/src/pb-code-highlight.js +209 -204
  56. package/src/pb-codepen.js +79 -72
  57. package/src/pb-collapse.js +149 -146
  58. package/src/pb-combo-box.js +190 -190
  59. package/src/pb-components-bundle.js +1 -1
  60. package/src/pb-custom-form.js +150 -149
  61. package/src/pb-document.js +89 -90
  62. package/src/pb-download.js +208 -195
  63. package/src/pb-drawer.js +145 -148
  64. package/src/pb-edit-app.js +301 -229
  65. package/src/pb-edit-xml.js +99 -96
  66. package/src/pb-events.js +114 -107
  67. package/src/pb-facs-link.js +104 -102
  68. package/src/pb-facsimile.js +411 -413
  69. package/src/pb-formula.js +151 -153
  70. package/src/pb-geolocation.js +129 -131
  71. package/src/pb-grid-action.js +53 -56
  72. package/src/pb-grid.js +231 -228
  73. package/src/pb-highlight.js +140 -140
  74. package/src/pb-hotkeys.js +40 -42
  75. package/src/pb-i18n.js +101 -104
  76. package/src/pb-image-strip.js +84 -78
  77. package/src/pb-lang.js +83 -70
  78. package/src/pb-leaflet-map.js +488 -485
  79. package/src/pb-link.js +126 -124
  80. package/src/pb-load.js +431 -426
  81. package/src/pb-login.js +275 -254
  82. package/src/pb-manage-odds.js +364 -318
  83. package/src/pb-map-icon.js +89 -89
  84. package/src/pb-map-layer.js +85 -85
  85. package/src/pb-markdown.js +90 -99
  86. package/src/pb-media-query.js +74 -72
  87. package/src/pb-mei.js +306 -295
  88. package/src/pb-message.js +143 -130
  89. package/src/pb-mixin.js +269 -264
  90. package/src/pb-navigation.js +80 -82
  91. package/src/pb-observable.js +38 -38
  92. package/src/pb-odd-editor.js +1056 -958
  93. package/src/pb-odd-elementspec-editor.js +348 -297
  94. package/src/pb-odd-model-editor.js +1058 -898
  95. package/src/pb-odd-parameter-editor.js +200 -178
  96. package/src/pb-odd-rendition-editor.js +136 -124
  97. package/src/pb-page.js +432 -422
  98. package/src/pb-paginate.js +202 -190
  99. package/src/pb-panel.js +191 -179
  100. package/src/pb-popover-themes.js +7 -5
  101. package/src/pb-popover.js +296 -287
  102. package/src/pb-print-preview.js +127 -127
  103. package/src/pb-progress.js +49 -49
  104. package/src/pb-repeat.js +105 -104
  105. package/src/pb-restricted.js +84 -77
  106. package/src/pb-search.js +238 -221
  107. package/src/pb-select-feature.js +127 -120
  108. package/src/pb-select-odd.js +132 -124
  109. package/src/pb-select-template.js +89 -78
  110. package/src/pb-select.js +251 -227
  111. package/src/pb-split-list.js +179 -174
  112. package/src/pb-svg.js +80 -79
  113. package/src/pb-table-column.js +54 -54
  114. package/src/pb-table-grid.js +221 -203
  115. package/src/pb-tabs.js +61 -63
  116. package/src/pb-tify.js +154 -154
  117. package/src/pb-timeline.js +271 -229
  118. package/src/pb-toggle-feature.js +198 -185
  119. package/src/pb-upload.js +184 -174
  120. package/src/pb-version.js +30 -30
  121. package/src/pb-view-annotate.js +132 -98
  122. package/src/pb-view.js +1282 -1263
  123. package/src/pb-zoom.js +40 -40
  124. package/src/polymer-hack.js +1 -1
  125. package/src/search-result-service.js +256 -223
  126. package/src/seed-element.js +13 -20
  127. package/src/settings.js +4 -4
  128. package/src/theming.js +91 -91
  129. package/src/urls.js +289 -289
  130. package/src/utils.js +53 -51
package/src/pb-tabs.js CHANGED
@@ -2,88 +2,86 @@ import { LitElement, html, css } from 'lit-element';
2
2
  import '@polymer/paper-tabs';
3
3
  import '@polymer/iron-pages';
4
4
  import { pbMixin, waitOnce } from './pb-mixin.js';
5
- import { registry } from "./urls.js";
6
-
5
+ import { registry } from './urls.js';
7
6
 
8
7
  /**
9
8
  * Combines a row of tabs with associated content.
10
- *
9
+ *
11
10
  * @slot tab - tab area
12
11
  * @slot page - page area
13
12
  * @csspart pages - wrapper around the tab pages
14
- * @fires pb-tab - fired if selected tab changes. Details contain number of
13
+ * @fires pb-tab - fired if selected tab changes. Details contain number of
15
14
  * selected tab in propery `selected`.
16
15
  */
17
16
  export class PbTabs extends pbMixin(LitElement) {
18
- static get properties() {
19
- return {
20
- ...super.properties,
21
- selected: {
22
- type: Number,
23
- reflect: true
24
- }
25
- };
26
- }
17
+ static get properties() {
18
+ return {
19
+ ...super.properties,
20
+ selected: {
21
+ type: Number,
22
+ reflect: true,
23
+ },
24
+ };
25
+ }
27
26
 
28
- constructor() {
29
- super();
27
+ constructor() {
28
+ super();
30
29
 
31
- this.selected = 0;
32
- this._initialized = false;
33
- }
34
-
35
- connectedCallback() {
36
- super.connectedCallback();
30
+ this.selected = 0;
31
+ this._initialized = false;
32
+ }
37
33
 
38
- waitOnce('pb-page-ready', () => {
39
- this.selected = registry.state.tab || 0;
34
+ connectedCallback() {
35
+ super.connectedCallback();
40
36
 
41
- registry.subscribe(this, (state) => {
42
- this.selected = state.tab;
43
- });
37
+ waitOnce('pb-page-ready', () => {
38
+ this.selected = registry.state.tab || 0;
44
39
 
45
- });
46
- }
40
+ registry.subscribe(this, state => {
41
+ this.selected = state.tab;
42
+ });
43
+ });
44
+ }
47
45
 
48
- firstUpdated() {
49
- super.firstUpdated();
50
- this.emitTo('pb-tab', { selected: this.selected });
51
- }
46
+ firstUpdated() {
47
+ super.firstUpdated();
48
+ this.emitTo('pb-tab', { selected: this.selected });
49
+ }
52
50
 
53
- _switchTab(ev) {
54
- const current = parseInt(ev.detail.value, 10);
55
- if (this.selected === current) {
56
- return;
57
- }
51
+ _switchTab(ev) {
52
+ const current = parseInt(ev.detail.value, 10);
53
+ if (this.selected === current) {
54
+ return;
55
+ }
58
56
 
59
- this.emitTo('pb-tab', { selected: current });
57
+ this.emitTo('pb-tab', { selected: current });
60
58
 
61
- this.selected = current;
62
- if (this._initialized) {
63
- registry.commit(this, { tab: this.selected });
64
- } else {
65
- registry.replace(this, { tab: this.selected });
66
- }
67
- this._initialized = true;
59
+ this.selected = current;
60
+ if (this._initialized) {
61
+ registry.commit(this, { tab: this.selected });
62
+ } else {
63
+ registry.replace(this, { tab: this.selected });
68
64
  }
65
+ this._initialized = true;
66
+ }
69
67
 
70
- render() {
71
- return html`
72
- <paper-tabs id="tabs" selected="${this.selected || 0 }" @selected-changed="${this._switchTab}">
73
- <slot name="tab"></slot>
74
- </paper-tabs>
75
- <iron-pages part="pages" selected="${this.selected}">
76
- <slot name="page"></slot>
77
- </iron-pages>
78
- `;
79
- }
68
+ render() {
69
+ return html`
70
+ <paper-tabs id="tabs" selected="${this.selected || 0}" @selected-changed="${this._switchTab}">
71
+ <slot name="tab"></slot>
72
+ </paper-tabs>
73
+ <iron-pages part="pages" selected="${this.selected}">
74
+ <slot name="page"></slot>
75
+ </iron-pages>
76
+ `;
77
+ }
80
78
 
81
- static get styles() {
82
- return css`
83
- :host {
84
- display: block;
85
- }
86
- `;
87
- }
79
+ static get styles() {
80
+ return css`
81
+ :host {
82
+ display: block;
83
+ }
84
+ `;
85
+ }
88
86
  }
89
- customElements.define('pb-tabs', PbTabs);
87
+ customElements.define('pb-tabs', PbTabs);
package/src/pb-tify.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { LitElement } from 'lit-element';
2
- import "tify";
2
+ import 'tify';
3
3
  import { pbMixin, waitOnce } from './pb-mixin.js';
4
4
  import { resolveURL } from './utils.js';
5
5
 
6
6
  function _injectStylesheet(path) {
7
- const style = document.querySelector(`link#pb-tify`);
8
- if (!style) {
9
- const elem = document.createElement('link');
10
- elem.type = 'text/css';
11
- elem.rel = 'stylesheet';
12
- elem.id = `pb-tify`;
13
- elem.href = `${resolveURL(path)}/tify.css`;
14
- document.head.appendChild(elem);
15
- }
7
+ const style = document.querySelector(`link#pb-tify`);
8
+ if (!style) {
9
+ const elem = document.createElement('link');
10
+ elem.type = 'text/css';
11
+ elem.rel = 'stylesheet';
12
+ elem.id = `pb-tify`;
13
+ elem.href = `${resolveURL(path)}/tify.css`;
14
+ document.head.appendChild(elem);
15
+ }
16
16
  }
17
17
 
18
18
  /**
@@ -26,170 +26,170 @@ function _injectStylesheet(path) {
26
26
  * `order` property in the event (see `pb-facs-link`). Page counts start at 1.
27
27
  */
28
28
  export class PbTify extends pbMixin(LitElement) {
29
- static get properties() {
30
- return {
31
- /**
32
- * URL pointing to a IIIF presentation manifest. Relative paths
33
- * are interpreted relative to the API endpoint.
34
- */
35
- manifest: {
36
- type: String
37
- },
38
- ...super.properties
39
- };
29
+ static get properties() {
30
+ return {
31
+ /**
32
+ * URL pointing to a IIIF presentation manifest. Relative paths
33
+ * are interpreted relative to the API endpoint.
34
+ */
35
+ manifest: {
36
+ type: String,
37
+ },
38
+ ...super.properties,
39
+ };
40
+ }
41
+
42
+ constructor() {
43
+ super();
44
+ this.cssPath = '../css/tify';
45
+ this._initialPages = null;
46
+ this._currentPage = null;
47
+ }
48
+
49
+ attributeChangedCallback(name, oldVal, newVal) {
50
+ super.attributeChangedCallback(name, oldVal, newVal);
51
+
52
+ if (name === 'manifest' && newVal) {
53
+ this.manifest = newVal;
54
+ this._initViewer();
40
55
  }
56
+ }
41
57
 
42
- constructor() {
43
- super();
44
- this.cssPath = '../css/tify';
45
- this._initialPages = null;
46
- this._currentPage = null;
47
- }
58
+ async connectedCallback() {
59
+ super.connectedCallback();
60
+
61
+ _injectStylesheet(this.cssPath);
48
62
 
49
- attributeChangedCallback(name, oldVal, newVal) {
50
- super.attributeChangedCallback(name, oldVal, newVal);
51
-
52
- if (name === 'manifest' && newVal) {
53
- this.manifest = newVal;
54
- this._initViewer();
63
+ this._container = document.createElement('div');
64
+ this._container.style.height = '100%';
65
+ this._container.style.width = '100%';
66
+ this.appendChild(this._container);
67
+
68
+ this.subscribeTo('pb-show-annotation', ev => {
69
+ if (ev.detail) {
70
+ this._initialPages = ev.detail.order ? Number(ev.detail.order) : Number.POSITIVE_INFINITY;
71
+ if (this._initialPages === Number.POSITIVE_INFINITY) {
72
+ this._initialPages = 1;
73
+ }
74
+ const url = ev.detail.file || ev.detail.url;
75
+ if (url && url !== this.manifest) {
76
+ this.manifest = ev.detail.file;
77
+ this._initViewer();
78
+ // check if tify is already initialized
79
+ } else if (this._setPage) {
80
+ this._setPage(this._initialPages);
55
81
  }
56
- }
57
82
 
58
- async connectedCallback() {
59
- super.connectedCallback();
60
-
61
- _injectStylesheet(this.cssPath);
62
-
63
- this._container = document.createElement('div');
64
- this._container.style.height = '100%';
65
- this._container.style.width = '100%';
66
- this.appendChild(this._container);
67
-
68
- this.subscribeTo('pb-show-annotation', (ev) => {
69
- if (ev.detail) {
70
- this._initialPages = ev.detail.order ? Number(ev.detail.order) : Number.POSITIVE_INFINITY;
71
- if (this._initialPages === Number.POSITIVE_INFINITY) {
72
- this._initialPages = 1;
73
- }
74
- const url = ev.detail.file || ev.detail.url;
75
- if (url && url !== this.manifest) {
76
- this.manifest = ev.detail.file;
77
- this._initViewer();
78
- // check if tify is already initialized
79
- } else if (this._setPage) {
80
- this._setPage(this._initialPages);
81
- }
82
-
83
- if (ev.detail.coordinates) {
84
- this._addOverlay(ev.detail.coordinates);
85
- }
86
- }
87
- });
88
-
89
- this.signalReady();
90
- }
83
+ if (ev.detail.coordinates) {
84
+ this._addOverlay(ev.detail.coordinates);
85
+ }
86
+ }
87
+ });
91
88
 
92
- firstUpdated() {
93
- super.firstUpdated();
89
+ this.signalReady();
90
+ }
94
91
 
95
- waitOnce('pb-page-ready', () => {
96
- this._initViewer();
97
- });
98
- }
92
+ firstUpdated() {
93
+ super.firstUpdated();
99
94
 
100
- _initViewer() {
101
- if (!this.manifest) {
102
- return;
103
- }
95
+ waitOnce('pb-page-ready', () => {
96
+ this._initViewer();
97
+ });
98
+ }
104
99
 
105
- if (this._tify) {
106
- this._tify.destroy();
107
- }
100
+ _initViewer() {
101
+ if (!this.manifest) {
102
+ return;
103
+ }
108
104
 
109
- this._tify = new Tify({
110
- manifestUrl: this.toAbsoluteURL(this.manifest, this.getEndpoint())
111
- });
112
- this._tify.ready.then(() => {
113
- // open initial page if set earlier via pb-load-facsimile event
114
- if (this._initialPages) {
115
- this._tify.setPage(this._initialPages);
116
- }
117
-
118
- // extend tify's setPage function to allow emitting an event
119
- const {app} = this._tify;
120
- const originalSetPage = app.setPage;
121
-
122
- app.setPage = (pages) => {
123
- const page = Array.isArray(pages) ? pages[0] : pages;
124
- if(this._currentPage === page) {
125
- return;
126
- }
127
-
128
- const canvas = app.$root.canvases[page - 1];
129
-
130
- this._switchPage(canvas);
131
- originalSetPage(pages);
132
- this._currentPage = page;
133
- };
134
-
135
- this._setPage = app.setPage;
136
- });
137
-
138
- this._tify.mount(this._container);
105
+ if (this._tify) {
106
+ this._tify.destroy();
139
107
  }
140
108
 
141
- _switchPage(canvas) {
142
- const rendering = canvas.rendering;
143
- if (rendering && rendering.length > 0) {
144
- const url = new URL(rendering[0]['@id']);
145
- const params = {};
146
- url.searchParams.forEach((value, key) => {
147
- params[key] = value;
148
- })
149
- console.log('<pb-tify> page changed, emitting refresh with params %o', params);
150
- this.emitTo('pb-refresh', params);
109
+ this._tify = new Tify({
110
+ manifestUrl: this.toAbsoluteURL(this.manifest, this.getEndpoint()),
111
+ });
112
+ this._tify.ready.then(() => {
113
+ // open initial page if set earlier via pb-load-facsimile event
114
+ if (this._initialPages) {
115
+ this._tify.setPage(this._initialPages);
116
+ }
117
+
118
+ // extend tify's setPage function to allow emitting an event
119
+ const { app } = this._tify;
120
+ const originalSetPage = app.setPage;
121
+
122
+ app.setPage = pages => {
123
+ const page = Array.isArray(pages) ? pages[0] : pages;
124
+ if (this._currentPage === page) {
125
+ return;
151
126
  }
127
+
128
+ const canvas = app.$root.canvases[page - 1];
129
+
130
+ this._switchPage(canvas);
131
+ originalSetPage(pages);
132
+ this._currentPage = page;
133
+ };
134
+
135
+ this._setPage = app.setPage;
136
+ });
137
+
138
+ this._tify.mount(this._container);
139
+ }
140
+
141
+ _switchPage(canvas) {
142
+ const { rendering } = canvas;
143
+ if (rendering && rendering.length > 0) {
144
+ const url = new URL(rendering[0]['@id']);
145
+ const params = {};
146
+ url.searchParams.forEach((value, key) => {
147
+ params[key] = value;
148
+ });
149
+ console.log('<pb-tify> page changed, emitting refresh with params %o', params);
150
+ this.emitTo('pb-refresh', params);
152
151
  }
152
+ }
153
153
 
154
- _addOverlay(coordinates) {
155
- if (!Array.isArray(coordinates) || coordinates.length !== 4) {
156
- console.error('coords incomplete or missing (array of 4 numbers expected)', coordinates);
157
- return;
158
- }
154
+ _addOverlay(coordinates) {
155
+ if (!Array.isArray(coordinates) || coordinates.length !== 4) {
156
+ console.error('coords incomplete or missing (array of 4 numbers expected)', coordinates);
157
+ return;
158
+ }
159
159
 
160
- const { viewer } = this._tify;
161
- const { viewport } = viewer;
162
- const overlayId = 'runtime-overlay';
163
-
164
- if(this.overlay) {
165
- viewer.removeOverlay(this.overlay);
166
- }
160
+ const { viewer } = this._tify;
161
+ const { viewport } = viewer;
162
+ const overlayId = 'runtime-overlay';
167
163
 
168
- const viewportBounds = viewport.getBounds();
164
+ if (this.overlay) {
165
+ viewer.removeOverlay(this.overlay);
166
+ }
169
167
 
170
- const [x1, y1, w, h] = coordinates;
171
- const rect = viewport.imageToViewportRectangle(x1, y1, w, h);
168
+ const viewportBounds = viewport.getBounds();
172
169
 
173
- // Scroll into view if necessary
174
- if (!viewportBounds.containsPoint(rect.getTopLeft())) {
175
- viewer.viewport.panTo(rect.getCenter());
176
- }
170
+ const [x1, y1, w, h] = coordinates;
171
+ const rect = viewport.imageToViewportRectangle(x1, y1, w, h);
177
172
 
178
- // Add overlay to viewer
179
- const overlay = document.createElement('div');
180
- this.overlay = overlay
181
- overlay.id = overlayId;
182
- overlay.style.border = 'var(--pb-facsimile-border, none)';
183
- overlay.style.outline = 'var(--pb-facsimile-outline, 4px solid rgba(0, 0, 128, 0.5))';
184
- overlay.style.background = 'var(--pb-facsimile-background, rgba(0, 0, 128, 0.05))';
185
- viewer.addOverlay({
186
- element: overlay,
187
- location: rect
188
- });
173
+ // Scroll into view if necessary
174
+ if (!viewportBounds.containsPoint(rect.getTopLeft())) {
175
+ viewer.viewport.panTo(rect.getCenter());
189
176
  }
190
177
 
191
- createRenderRoot() {
192
- return this;
193
- }
178
+ // Add overlay to viewer
179
+ const overlay = document.createElement('div');
180
+ this.overlay = overlay;
181
+ overlay.id = overlayId;
182
+ overlay.style.border = 'var(--pb-facsimile-border, none)';
183
+ overlay.style.outline = 'var(--pb-facsimile-outline, 4px solid rgba(0, 0, 128, 0.5))';
184
+ overlay.style.background = 'var(--pb-facsimile-background, rgba(0, 0, 128, 0.05))';
185
+ viewer.addOverlay({
186
+ element: overlay,
187
+ location: rect,
188
+ });
189
+ }
190
+
191
+ createRenderRoot() {
192
+ return this;
193
+ }
194
194
  }
195
- customElements.define('pb-tify', PbTify);
195
+ customElements.define('pb-tify', PbTify);