@teipublisher/pb-components 2.26.0-next-3.12 → 2.26.0-next-3.13

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 (132) 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 +30 -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-progress.html +2 -2
  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 +1937 -1782
  16. package/dist/pb-edit-app.js +167 -107
  17. package/dist/pb-elements.json +45 -45
  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 +923 -756
  23. package/dist/pb-tify.js +2 -2
  24. package/dist/{vaadin-element-mixin-49ab4037.js → vaadin-element-mixin-84fb7d82.js} +178 -163
  25. package/gh-pages.js +5 -3
  26. package/i18n/common/pl.json +2 -2
  27. package/lib/openseadragon.min.js +1 -1
  28. package/package.json +2 -2
  29. package/pb-elements.json +45 -45
  30. package/src/assets/components.css +5 -5
  31. package/src/authority/airtable.js +20 -21
  32. package/src/authority/anton.js +129 -129
  33. package/src/authority/custom.js +23 -21
  34. package/src/authority/geonames.js +38 -32
  35. package/src/authority/gnd.js +47 -42
  36. package/src/authority/kbga.js +137 -134
  37. package/src/authority/metagrid.js +44 -46
  38. package/src/authority/reconciliation.js +66 -67
  39. package/src/authority/registry.js +4 -4
  40. package/src/docs/pb-component-docs.js +2 -2
  41. package/src/docs/pb-component-view.js +5 -5
  42. package/src/docs/pb-components-list.js +2 -2
  43. package/src/docs/pb-demo-snippet.js +2 -2
  44. package/src/dts-client.js +299 -297
  45. package/src/dts-select-endpoint.js +90 -82
  46. package/src/parse-date-service.js +184 -135
  47. package/src/pb-ajax.js +150 -146
  48. package/src/pb-authority-lookup.js +183 -146
  49. package/src/pb-autocomplete.js +292 -280
  50. package/src/pb-blacklab-highlight.js +264 -259
  51. package/src/pb-blacklab-results.js +236 -221
  52. package/src/pb-browse-docs.js +540 -475
  53. package/src/pb-browse.js +68 -65
  54. package/src/pb-clipboard.js +79 -76
  55. package/src/pb-code-editor.js +110 -102
  56. package/src/pb-code-highlight.js +209 -204
  57. package/src/pb-codepen.js +79 -72
  58. package/src/pb-collapse.js +212 -207
  59. package/src/pb-combo-box.js +190 -190
  60. package/src/pb-components-bundle.js +1 -1
  61. package/src/pb-custom-form.js +151 -149
  62. package/src/pb-dialog.js +94 -85
  63. package/src/pb-document.js +89 -90
  64. package/src/pb-download.js +210 -198
  65. package/src/pb-drawer.js +145 -148
  66. package/src/pb-edit-app.js +301 -229
  67. package/src/pb-edit-xml.js +98 -96
  68. package/src/pb-events.js +114 -107
  69. package/src/pb-facs-link.js +104 -102
  70. package/src/pb-facsimile.js +411 -413
  71. package/src/pb-formula.js +151 -153
  72. package/src/pb-geolocation.js +129 -131
  73. package/src/pb-grid-action.js +53 -56
  74. package/src/pb-grid.js +231 -228
  75. package/src/pb-highlight.js +140 -140
  76. package/src/pb-hotkeys.js +40 -42
  77. package/src/pb-i18n.js +101 -104
  78. package/src/pb-image-strip.js +84 -78
  79. package/src/pb-lang.js +132 -128
  80. package/src/pb-leaflet-map.js +488 -485
  81. package/src/pb-link.js +126 -124
  82. package/src/pb-load.js +431 -426
  83. package/src/pb-login.js +291 -248
  84. package/src/pb-manage-odds.js +364 -318
  85. package/src/pb-map-icon.js +89 -89
  86. package/src/pb-map-layer.js +85 -85
  87. package/src/pb-markdown.js +90 -99
  88. package/src/pb-media-query.js +74 -72
  89. package/src/pb-mei.js +306 -295
  90. package/src/pb-message.js +144 -144
  91. package/src/pb-mixin.js +269 -264
  92. package/src/pb-navigation.js +80 -82
  93. package/src/pb-observable.js +38 -38
  94. package/src/pb-odd-editor.js +1053 -955
  95. package/src/pb-odd-elementspec-editor.js +348 -297
  96. package/src/pb-odd-model-editor.js +1061 -901
  97. package/src/pb-odd-parameter-editor.js +200 -178
  98. package/src/pb-odd-rendition-editor.js +136 -124
  99. package/src/pb-page.js +431 -421
  100. package/src/pb-paginate.js +202 -190
  101. package/src/pb-panel.js +191 -179
  102. package/src/pb-popover-themes.js +7 -5
  103. package/src/pb-popover.js +296 -287
  104. package/src/pb-print-preview.js +127 -127
  105. package/src/pb-progress.js +51 -51
  106. package/src/pb-repeat.js +105 -104
  107. package/src/pb-restricted.js +84 -77
  108. package/src/pb-search.js +252 -241
  109. package/src/pb-select-feature.js +127 -120
  110. package/src/pb-select-odd.js +132 -124
  111. package/src/pb-select-template.js +89 -78
  112. package/src/pb-select.js +251 -227
  113. package/src/pb-split-list.js +179 -174
  114. package/src/pb-svg.js +80 -79
  115. package/src/pb-table-column.js +54 -54
  116. package/src/pb-table-grid.js +221 -203
  117. package/src/pb-tabs.js +61 -63
  118. package/src/pb-tify.js +154 -154
  119. package/src/pb-timeline.js +271 -229
  120. package/src/pb-toggle-feature.js +182 -175
  121. package/src/pb-upload.js +184 -174
  122. package/src/pb-version.js +30 -30
  123. package/src/pb-view-annotate.js +132 -98
  124. package/src/pb-view.js +1289 -1270
  125. package/src/pb-zoom.js +75 -59
  126. package/src/polymer-hack.js +1 -1
  127. package/src/search-result-service.js +256 -223
  128. package/src/seed-element.js +13 -20
  129. package/src/settings.js +4 -4
  130. package/src/theming.js +96 -96
  131. package/src/urls.js +289 -289
  132. package/src/utils.js +53 -51
package/src/pb-upload.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LitElement, html, css } from 'lit-element';
2
2
  import { pbMixin, waitOnce } from './pb-mixin.js';
3
- import { translate } from "./pb-i18n.js";
4
- import { getCSSProperty } from "./utils.js";
3
+ import { translate } from './pb-i18n.js';
4
+ import { getCSSProperty } from './utils.js';
5
5
  import '@vaadin/vaadin-upload';
6
6
  import '@polymer/paper-button';
7
7
  import '@polymer/paper-icon-button';
@@ -14,190 +14,200 @@ import '@polymer/paper-icon-button';
14
14
  * @fires pb-load - Fired after the upload has completed
15
15
  * @fires pb-collection - when received, sets the upload collection to the one passed from the event
16
16
  * @fires pb-refresh-odds - Fired if an ODD file was uploaded
17
- *
17
+ *
18
18
  * @cssprop [--pb-upload-button-icon=icons:file-upload] - icon to show in the upload button
19
19
  * @cssprop [--pb-upload-drop-icon] - icon to show next to the drop label text (none by default)
20
20
  */
21
21
  export class PbUpload extends pbMixin(LitElement) {
22
- static get properties() {
23
- return {
24
- ...super.properties,
25
- /**
26
- * the server-side script to handle the upload
27
- */
28
- target: {
29
- type: String
30
- },
31
- /**
32
- * a comma-separated list of file suffixes to accept for upload
33
- * (by default: .xml,.tei,.odd,.docx)
34
- */
35
- accept: {
36
- type: String
37
- },
38
- _files: {
39
- type: Object
40
- },
41
- /**
42
- * the event to emit when the upload has completed (default: 'pb-load')
43
- */
44
- event: {
45
- type: String
46
- }
47
- };
48
- }
22
+ static get properties() {
23
+ return {
24
+ ...super.properties,
25
+ /**
26
+ * the server-side script to handle the upload
27
+ */
28
+ target: {
29
+ type: String,
30
+ },
31
+ /**
32
+ * a comma-separated list of file suffixes to accept for upload
33
+ * (by default: .xml,.tei,.odd,.docx)
34
+ */
35
+ accept: {
36
+ type: String,
37
+ },
38
+ _files: {
39
+ type: Object,
40
+ },
41
+ /**
42
+ * the event to emit when the upload has completed (default: 'pb-load')
43
+ */
44
+ event: {
45
+ type: String,
46
+ },
47
+ };
48
+ }
49
49
 
50
- constructor() {
51
- super();
52
- this._files = new Map();
53
- this.event = 'pb-load';
54
- }
50
+ constructor() {
51
+ super();
52
+ this._files = new Map();
53
+ this.event = 'pb-load';
54
+ }
55
55
 
56
- connectedCallback() {
57
- if (super.connectedCallback) {
58
- super.connectedCallback();
59
- }
60
- this.subscribeTo('pb-collection', (ev) => {
61
- this.target = ev.detail.collection;
62
- });
56
+ connectedCallback() {
57
+ if (super.connectedCallback) {
58
+ super.connectedCallback();
63
59
  }
60
+ this.subscribeTo('pb-collection', ev => {
61
+ this.target = ev.detail.collection;
62
+ });
63
+ }
64
64
 
65
- firstUpdated() {
66
- super.firstUpdated();
67
- const uploader = this.shadowRoot.getElementById('uploader');
68
- uploader.addEventListener('upload-before', (event) => {
69
- this.emitTo('pb-start-update');
70
- const {file} = event.detail;
71
- // clear list of uploaded files
72
- this._files.set(file.name, file);
73
- this.requestUpdate();
65
+ firstUpdated() {
66
+ super.firstUpdated();
67
+ const uploader = this.shadowRoot.getElementById('uploader');
68
+ uploader.addEventListener('upload-before', event => {
69
+ this.emitTo('pb-start-update');
70
+ const { file } = event.detail;
71
+ // clear list of uploaded files
72
+ this._files.set(file.name, file);
73
+ this.requestUpdate();
74
74
 
75
- if (this.minApiVersion('1.0.0') && this.target) {
76
- file.uploadTarget = `${uploader.target}${encodeURIComponent(this.target)}`;
77
- }
78
- });
79
- uploader.addEventListener('upload-request', (event) => {
80
- if (this.target && this.lessThanApiVersion('1.0.0')) {
81
- event.detail.formData.append('root', this.target);
82
- }
83
- });
84
- uploader.addEventListener('upload-error', (event) => {
85
- this.emitTo('pb-end-update');
86
- // eslint-disable-next-line no-param-reassign
87
- event.detail.file.error = event.detail.xhr.responseText;
88
- this.requestUpdate();
89
- });
90
- uploader.addEventListener('upload-success', () => {
91
- let done = true;
92
- const oddsUploaded = [];
93
- uploader.files.forEach((file) => {
94
- if (!(file.complete || file.error || file.aborted)) {
95
- done = false;
96
- } else if (/^.*\.odd$/.test(file.name)) {
97
- oddsUploaded.push(file.name);
98
- }
99
- this.requestUpdate();
100
- });
101
- if (done) {
102
- this.emitTo('pb-end-update');
103
- this.emitTo(this.event);
104
- if (oddsUploaded.length > 0) {
105
- this.emitTo('pb-refresh-odds', { 'odds': oddsUploaded });
106
- }
107
- }
108
- });
109
- waitOnce('pb-page-ready', () => {
110
- if (this.minApiVersion('1.0.0')) {
111
- uploader.target = `${this.getEndpoint()}/api/upload/`;
112
- } else {
113
- uploader.target = `${this.getEndpoint()}/modules/lib/upload.xql`;
114
- }
115
- });
116
- }
75
+ if (this.minApiVersion('1.0.0') && this.target) {
76
+ file.uploadTarget = `${uploader.target}${encodeURIComponent(this.target)}`;
77
+ }
78
+ });
79
+ uploader.addEventListener('upload-request', event => {
80
+ if (this.target && this.lessThanApiVersion('1.0.0')) {
81
+ event.detail.formData.append('root', this.target);
82
+ }
83
+ });
84
+ uploader.addEventListener('upload-error', event => {
85
+ this.emitTo('pb-end-update');
86
+ // eslint-disable-next-line no-param-reassign
87
+ event.detail.file.error = event.detail.xhr.responseText;
88
+ this.requestUpdate();
89
+ });
90
+ uploader.addEventListener('upload-success', () => {
91
+ let done = true;
92
+ const oddsUploaded = [];
93
+ uploader.files.forEach(file => {
94
+ if (!(file.complete || file.error || file.aborted)) {
95
+ done = false;
96
+ } else if (/^.*\.odd$/.test(file.name)) {
97
+ oddsUploaded.push(file.name);
98
+ }
99
+ this.requestUpdate();
100
+ });
101
+ if (done) {
102
+ this.emitTo('pb-end-update');
103
+ this.emitTo(this.event);
104
+ if (oddsUploaded.length > 0) {
105
+ this.emitTo('pb-refresh-odds', { odds: oddsUploaded });
106
+ }
107
+ }
108
+ });
109
+ waitOnce('pb-page-ready', () => {
110
+ if (this.minApiVersion('1.0.0')) {
111
+ uploader.target = `${this.getEndpoint()}/api/upload/`;
112
+ } else {
113
+ uploader.target = `${this.getEndpoint()}/modules/lib/upload.xql`;
114
+ }
115
+ });
116
+ }
117
117
 
118
- render() {
119
- const uploadIcon = getCSSProperty(this, '--pb-upload-button-icon', 'icons:file-upload');
120
- const dropLabelIcon = getCSSProperty(this, '--pb-upload-drop-icon', null);
121
- return html`
122
- <vaadin-upload id="uploader" accept="${this.accept}" method="post" tabindex="-1" form-data-name="files[]"
123
- with-credentials>
124
- ${ dropLabelIcon ? html`<iron-icon slot="drop-label-icon" icon="${dropLabelIcon}"></iron-icon>` : html`<span slot="drop-label-icon"></span>` }
125
- <span slot="drop-label">${translate('upload.drop', { accept: this.accept })}</span>
126
- <paper-button id="uploadBtn" slot="add-button">
127
- ${ uploadIcon ? html`<iron-icon icon="${uploadIcon}"></iron-icon>` : null }
128
- ${translate('upload.upload')}
129
- </paper-button>
130
- <div slot="file-list">
131
- <ul>
132
- ${
133
- this._files.size > 0 ? html`
134
- <li class="close">
135
- <paper-icon-button icon="icons:clear" @click="${this.clearList}"></paper-icon-button>
136
- </li>` : ''
137
- }
138
- ${ this.renderFiles() }
139
- </ul>
140
- </div>
141
- </vaadin-upload>
142
- `;
143
- }
118
+ render() {
119
+ const uploadIcon = getCSSProperty(this, '--pb-upload-button-icon', 'icons:file-upload');
120
+ const dropLabelIcon = getCSSProperty(this, '--pb-upload-drop-icon', null);
121
+ return html`
122
+ <vaadin-upload
123
+ id="uploader"
124
+ accept="${this.accept}"
125
+ method="post"
126
+ tabindex="-1"
127
+ form-data-name="files[]"
128
+ with-credentials
129
+ >
130
+ ${dropLabelIcon
131
+ ? html`<iron-icon slot="drop-label-icon" icon="${dropLabelIcon}"></iron-icon>`
132
+ : html`<span slot="drop-label-icon"></span>`}
133
+ <span slot="drop-label">${translate('upload.drop', { accept: this.accept })}</span>
134
+ <paper-button id="uploadBtn" slot="add-button">
135
+ ${uploadIcon ? html`<iron-icon icon="${uploadIcon}"></iron-icon>` : null}
136
+ ${translate('upload.upload')}
137
+ </paper-button>
138
+ <div slot="file-list">
139
+ <ul>
140
+ ${this._files.size > 0
141
+ ? html` <li class="close">
142
+ <paper-icon-button
143
+ icon="icons:clear"
144
+ @click="${this.clearList}"
145
+ ></paper-icon-button>
146
+ </li>`
147
+ : ''}
148
+ ${this.renderFiles()}
149
+ </ul>
150
+ </div>
151
+ </vaadin-upload>
152
+ `;
153
+ }
144
154
 
145
- renderFiles() {
146
- const rows = [];
147
- for (const file of this._files.values()) {
148
- let icon = 'icons:hourglass-empty';
149
- if (file.complete) {
150
- icon = 'icons:check';
151
- } else if (file.error || file.aborted) {
152
- icon = 'icons:error-outline';
153
- }
154
- const fileName = /.docx/.test(file.name) ? `${file.name}.xml` : file.name;
155
- let link;
156
- if (this.target) {
157
- link = `${this.target}/${fileName}`;
158
- } else {
159
- link = fileName;
160
- }
161
- rows.push(html`
162
- <li>
163
- <iron-icon icon="${icon}"></iron-icon>
164
- ${ file.error ? file.name : html`<a href="${link}">${file.name}</a>` }
165
- </li>
166
- `);
167
- if (file.error) {
168
- rows.push(html`
169
- <li class="error" part="error">${JSON.parse(file.error).description}</li>
170
- `);
171
- }
172
- }
173
- return rows;
155
+ renderFiles() {
156
+ const rows = [];
157
+ for (const file of this._files.values()) {
158
+ let icon = 'icons:hourglass-empty';
159
+ if (file.complete) {
160
+ icon = 'icons:check';
161
+ } else if (file.error || file.aborted) {
162
+ icon = 'icons:error-outline';
163
+ }
164
+ const fileName = /.docx/.test(file.name) ? `${file.name}.xml` : file.name;
165
+ let link;
166
+ if (this.target) {
167
+ link = `${this.target}/${fileName}`;
168
+ } else {
169
+ link = fileName;
170
+ }
171
+ rows.push(html`
172
+ <li>
173
+ <iron-icon icon="${icon}"></iron-icon>
174
+ ${file.error ? file.name : html`<a href="${link}">${file.name}</a>`}
175
+ </li>
176
+ `);
177
+ if (file.error) {
178
+ rows.push(html`
179
+ <li class="error" part="error">${JSON.parse(file.error).description}</li>
180
+ `);
181
+ }
174
182
  }
183
+ return rows;
184
+ }
175
185
 
176
- clearList() {
177
- this._files.clear();
178
- this.requestUpdate();
179
- }
186
+ clearList() {
187
+ this._files.clear();
188
+ this.requestUpdate();
189
+ }
180
190
 
181
- static get styles() {
182
- return css`
183
- ul {
184
- list-style: none;
185
- margin: 0;
186
- padding: 0;
187
- }
188
- li {
189
- margin-top: 8px;
190
- }
191
- .close {
192
- text-align: right;
193
- }
194
- .error {
195
- color: red;
196
- }
197
- #uploadBtn iron-icon {
198
- padding-right: 8px;
199
- }
200
- `;
201
- }
191
+ static get styles() {
192
+ return css`
193
+ ul {
194
+ list-style: none;
195
+ margin: 0;
196
+ padding: 0;
197
+ }
198
+ li {
199
+ margin-top: 8px;
200
+ }
201
+ .close {
202
+ text-align: right;
203
+ }
204
+ .error {
205
+ color: red;
206
+ }
207
+ #uploadBtn iron-icon {
208
+ padding-right: 8px;
209
+ }
210
+ `;
211
+ }
202
212
  }
203
- customElements.define('pb-upload', PbUpload);
213
+ customElements.define('pb-upload', PbUpload);
package/src/pb-version.js CHANGED
@@ -9,40 +9,40 @@ const PB_COMPONENTS_VERSION = null;
9
9
  * from `package.json` at build time.
10
10
  */
11
11
  export class PbVersion extends LitElement {
12
- static get properties() {
13
- return {
14
- version: {
15
- type: String,
16
- reflect: true
17
- },
18
- ...super.properties
19
- };
20
- }
12
+ static get properties() {
13
+ return {
14
+ version: {
15
+ type: String,
16
+ reflect: true,
17
+ },
18
+ ...super.properties,
19
+ };
20
+ }
21
21
 
22
- constructor() {
23
- super();
22
+ constructor() {
23
+ super();
24
24
 
25
- this.version = PB_COMPONENTS_VERSION;
26
- }
25
+ this.version = PB_COMPONENTS_VERSION;
26
+ }
27
27
 
28
- connectedCallback() {
29
- super.connectedCallback();
30
- if (!this.version) {
31
- const pkg = resolveURL('../package.json');
32
- fetch(pkg)
33
- .then((response) => response.json())
34
- .then((data) => {
35
- this.version = data.version;
36
- });
37
- }
28
+ connectedCallback() {
29
+ super.connectedCallback();
30
+ if (!this.version) {
31
+ const pkg = resolveURL('../package.json');
32
+ fetch(pkg)
33
+ .then(response => response.json())
34
+ .then(data => {
35
+ this.version = data.version;
36
+ });
38
37
  }
38
+ }
39
39
 
40
- render() {
41
- return html`<span>${this.version ? this.version : 'unknown' }</span>`;
42
- }
40
+ render() {
41
+ return html`<span>${this.version ? this.version : 'unknown'}</span>`;
42
+ }
43
43
 
44
- createRenderRoot() {
45
- return this;
46
- }
44
+ createRenderRoot() {
45
+ return this;
46
+ }
47
47
  }
48
- customElements.define('pb-version', PbVersion);
48
+ customElements.define('pb-version', PbVersion);