@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
package/src/pb-formula.js CHANGED
@@ -1,118 +1,116 @@
1
1
  import { LitElement, html, css } from 'lit-element';
2
- import "@lrnwebcomponents/es-global-bridge";
3
- import { translate } from "./pb-i18n.js";
2
+ import '@lrnwebcomponents/es-global-bridge';
3
+ import { translate } from './pb-i18n.js';
4
4
 
5
5
  /** Import external script dynamically */
6
6
  function _import(name, location) {
7
- window.ESGlobalBridge.requestAvailability();
8
- return new Promise(resolve => {
9
- window.ESGlobalBridge.instance.load(name, location);
10
- window.addEventListener(
11
- `es-bridge-${name}-loaded`,
12
- () => resolve(),
13
- { once: true }
14
- );
15
- });
7
+ window.ESGlobalBridge.requestAvailability();
8
+ return new Promise(resolve => {
9
+ window.ESGlobalBridge.instance.load(name, location);
10
+ window.addEventListener(`es-bridge-${name}-loaded`, () => resolve(), { once: true });
11
+ });
16
12
  }
17
13
 
18
14
  /**
19
15
  * Update the stylesheet required by MathJax.
20
16
  * Needs to be done after typesetting has completed.
21
- *
22
- * @param {Element} context
23
- * @param {Element} styles
17
+ *
18
+ * @param {Element} context
19
+ * @param {Element} styles
24
20
  */
25
21
  function _updateStyles(context, styles) {
26
- let root = context.getRootNode();
27
- if (root.nodeType === Node.DOCUMENT_NODE) {
28
- root = root.head;
29
- } else {
30
- // fonts need to be declared outside shadow root, so extract
31
- // all font-faces and put them into a style in the header
32
- const elem = document.querySelector(`style#${styles.id}`);
33
- if (elem) {
34
- elem.parentNode.removeChild(elem);
35
- }
36
- const fonts = styles.innerHTML.match(/@font-face[^{]+{.*?}/gs);
37
- if (fonts) {
38
- const style = document.createElement('style');
39
- style.id = styles.id;
40
- style.appendChild(document.createTextNode(fonts.join('\n')));
41
- document.head.appendChild(style);
42
- }
22
+ let root = context.getRootNode();
23
+ if (root.nodeType === Node.DOCUMENT_NODE) {
24
+ root = root.head;
25
+ } else {
26
+ // fonts need to be declared outside shadow root, so extract
27
+ // all font-faces and put them into a style in the header
28
+ const elem = document.querySelector(`style#${styles.id}`);
29
+ if (elem) {
30
+ elem.parentNode.removeChild(elem);
43
31
  }
44
- const oldStyles = root.querySelector(`#${styles.id}`);
45
- if (oldStyles) {
46
- oldStyles.parentNode.removeChild(oldStyles);
32
+ const fonts = styles.innerHTML.match(/@font-face[^{]+{.*?}/gs);
33
+ if (fonts) {
34
+ const style = document.createElement('style');
35
+ style.id = styles.id;
36
+ style.appendChild(document.createTextNode(fonts.join('\n')));
37
+ document.head.appendChild(style);
47
38
  }
48
- root.appendChild(styles);
39
+ }
40
+ const oldStyles = root.querySelector(`#${styles.id}`);
41
+ if (oldStyles) {
42
+ oldStyles.parentNode.removeChild(oldStyles);
43
+ }
44
+ root.appendChild(styles);
49
45
  }
50
46
 
51
47
  /**
52
48
  * Iterate through the given `pb-formula` elements and typeset the math.
53
49
  */
54
50
  function _initMath(context, formulas) {
55
- formulas.forEach((formula) => {
56
- if (formula.hasChildNodes()) {
57
- const display = formula.hasAttribute('display') || false;
58
- const mathml = formula.querySelector('math');
59
- const options = window.MathJax.getMetricsFor(formula.parentNode, display);
60
- options.display = display;
61
- let chtml;
62
- let source;
63
- if (mathml) {
64
- source = mathml.outerHTML;
65
- chtml = window.MathJax.mathml2chtml(source, options);
66
- } else {
67
- window.MathJax.texReset();
68
- source = formula.innerHTML.replaceAll(/&\w+;/g, function (m) {
69
- return {
70
- '&': '&',
71
- '&lt;' : '<'
72
- }[m];
73
- });
74
- chtml = window.MathJax.tex2chtml(source, options);
75
- }
76
- formula.innerHTML = '';
77
- formula.appendChild(chtml);
78
- formula.setAttribute('loaded', 'loaded');
79
- formula.setAttribute('source', source);
80
- }
81
- });
82
- _updateStyles(context, window.MathJax.chtmlStylesheet());
51
+ formulas.forEach(formula => {
52
+ if (formula.hasChildNodes()) {
53
+ const display = formula.hasAttribute('display') || false;
54
+ const mathml = formula.querySelector('math');
55
+ const options = window.MathJax.getMetricsFor(formula.parentNode, display);
56
+ options.display = display;
57
+ let chtml;
58
+ let source;
59
+ if (mathml) {
60
+ source = mathml.outerHTML;
61
+ chtml = window.MathJax.mathml2chtml(source, options);
62
+ } else {
63
+ window.MathJax.texReset();
64
+ source = formula.innerHTML.replaceAll(
65
+ /&\w+;/g,
66
+ m =>
67
+ ({
68
+ '&amp;': '&',
69
+ '&lt;': '<',
70
+ }[m]),
71
+ );
72
+ chtml = window.MathJax.tex2chtml(source, options);
73
+ }
74
+ formula.innerHTML = '';
75
+ formula.appendChild(chtml);
76
+ formula.setAttribute('loaded', 'loaded');
77
+ formula.setAttribute('source', source);
78
+ }
79
+ });
80
+ _updateStyles(context, window.MathJax.chtmlStylesheet());
83
81
  }
84
82
 
85
83
  /**
86
84
  * Search the passed in element for `pb-formula` elements and
87
85
  * render them via MathJax.
88
- *
86
+ *
89
87
  * Formulas need to be processed sequentially or the output will
90
88
  * be screwed up. Therefore we cannot call MathJax asynchronously
91
89
  * but need to do it from this central controller.
92
- *
90
+ *
93
91
  * @param {Element} elem the root element to process
94
92
  */
95
93
  export function typesetMath(elem) {
96
- const formulas = elem.querySelectorAll('pb-formula');
97
- console.log(`<pb-formula> Found ${formulas.length} elements to typeset ...`);
98
- if (formulas.length > 0) {
99
- if (window.MathJax) {
100
- _initMath(elem, formulas);
101
- return;
102
- }
103
- const showMenu = elem.querySelector('pb-formula[menu]');
104
- window.MathJax = {
105
- startup: {
106
- typeset: false, // Perform initial typeset?
107
- pageReady: () => _initMath(elem, formulas) // Called when MathJax and page are ready
108
- },
109
- options: {
110
- enableMenu: showMenu !== null
111
- }
112
- };
113
-
114
- _import('MathJax', 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js');
94
+ const formulas = elem.querySelectorAll('pb-formula');
95
+ console.log(`<pb-formula> Found ${formulas.length} elements to typeset ...`);
96
+ if (formulas.length > 0) {
97
+ if (window.MathJax) {
98
+ _initMath(elem, formulas);
99
+ return;
115
100
  }
101
+ const showMenu = elem.querySelector('pb-formula[menu]');
102
+ window.MathJax = {
103
+ startup: {
104
+ typeset: false, // Perform initial typeset?
105
+ pageReady: () => _initMath(elem, formulas), // Called when MathJax and page are ready
106
+ },
107
+ options: {
108
+ enableMenu: showMenu !== null,
109
+ },
110
+ };
111
+
112
+ _import('MathJax', 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js');
113
+ }
116
114
  }
117
115
 
118
116
  /**
@@ -121,84 +119,84 @@ export function typesetMath(elem) {
121
119
  * pass it the root context which should be searched for `pb-notation` elements. The function will
122
120
  * then do the actual typesetting. The reason for this is that formulas need to be typeset synchronously, i.e. one
123
121
  * after the other.
124
- *
122
+ *
125
123
  * The component detects automatically if the formula to typeset is in TeX notation or MathML.
126
- *
124
+ *
127
125
  * @slot - should contain math in TeX notation or MathML
128
126
  */
129
127
  export class PbFormula extends LitElement {
130
- static get properties() {
131
- return {
132
- /**
133
- * TeX notation only: render the formula in display mode, i.e. as block level element.
134
- */
135
- display: {
136
- type: Boolean
137
- },
138
- /**
139
- * Option: if set, enable the MathJax context menu. This affects **all** formulas
140
- * in the context (the page or pb-view), not just the current component!
141
- */
142
- menu: {
143
- type: Boolean
144
- },
145
- /**
146
- * Will be set once the element has been typeset.
147
- */
148
- loaded: {
149
- type: Boolean
150
- },
151
- /**
152
- * Will contain the source notation once the element has been typeset.
153
- */
154
- source: {
155
- type: String
156
- },
157
- ...super.properties
158
- };
159
- }
128
+ static get properties() {
129
+ return {
130
+ /**
131
+ * TeX notation only: render the formula in display mode, i.e. as block level element.
132
+ */
133
+ display: {
134
+ type: Boolean,
135
+ },
136
+ /**
137
+ * Option: if set, enable the MathJax context menu. This affects **all** formulas
138
+ * in the context (the page or pb-view), not just the current component!
139
+ */
140
+ menu: {
141
+ type: Boolean,
142
+ },
143
+ /**
144
+ * Will be set once the element has been typeset.
145
+ */
146
+ loaded: {
147
+ type: Boolean,
148
+ },
149
+ /**
150
+ * Will contain the source notation once the element has been typeset.
151
+ */
152
+ source: {
153
+ type: String,
154
+ },
155
+ ...super.properties,
156
+ };
157
+ }
160
158
 
161
- constructor() {
162
- super();
163
- this.display = false;
164
- }
159
+ constructor() {
160
+ super();
161
+ this.display = false;
162
+ }
165
163
 
166
- attributeChangedCallback(name, oldVal, newVal) {
167
- super.attributeChangedCallback(name, oldVal, newVal);
168
- switch(name) {
169
- case 'loaded':
170
- this.loaded = true;
171
- break;
172
- case 'source':
173
- this.source = newVal;
174
- break;
175
- default:
176
- break;
177
- }
164
+ attributeChangedCallback(name, oldVal, newVal) {
165
+ super.attributeChangedCallback(name, oldVal, newVal);
166
+ switch (name) {
167
+ case 'loaded':
168
+ this.loaded = true;
169
+ break;
170
+ case 'source':
171
+ this.source = newVal;
172
+ break;
173
+ default:
174
+ break;
178
175
  }
176
+ }
179
177
 
180
- render() {
181
- if (!this.hasChildNodes()) {
182
- return null;
183
- }
184
- if (!this.loaded) {
185
- return html`<span class="loading">${translate('dialogs.loading')}</span>`;
186
- }
187
- return html`<div id="content" class="${this.display ? 'block' : ''}"><slot></slot></div>`;
178
+ render() {
179
+ if (!this.hasChildNodes()) {
180
+ return null;
188
181
  }
189
-
190
- static get styles() {
191
- return css`
192
- :host {
193
- display: inline-block;
194
- }
195
- .block {
196
- display: block;
197
- }
198
- .loading {
199
- color: #808080;
200
- }
201
- `;
182
+ if (!this.loaded) {
183
+ return html`<span class="loading">${translate('dialogs.loading')}</span>`;
202
184
  }
185
+ return html`<div id="content" class="${this.display ? 'block' : ''}"><slot></slot></div>`;
186
+ }
187
+
188
+ static get styles() {
189
+ return css`
190
+ :host {
191
+ display: inline-block;
192
+ }
193
+ .block {
194
+ display: block;
195
+ }
196
+ .loading {
197
+ color: #808080;
198
+ }
199
+ `;
200
+ }
203
201
  }
204
202
  customElements.define('pb-formula', PbFormula);
@@ -1,13 +1,12 @@
1
1
  import { html, css } from 'lit-element';
2
- import { PbHighlight } from "./pb-highlight.js";
3
-
2
+ import { PbHighlight } from './pb-highlight.js';
4
3
 
5
4
  /**
6
5
  * Represents a geo location. Extends `pb-highlight`, but sends an additional `pb-geolocation` event
7
6
  * on mouseover.
8
- *
7
+ *
9
8
  * For `pb-leaflet-map` to show markers for `pb-geolocation` elements, make sure that map subscribes to the channel
10
- * into which `pb-geolocation`s emit and that map is loaded before the emitting component, e.g. `pb-view`, by specifying
9
+ * into which `pb-geolocation`s emit and that map is loaded before the emitting component, e.g. `pb-view`, by specifying
11
10
  * `wait-for` property.
12
11
  *
13
12
  * @slot - default unnamed slot for content. May also contain an option `<template>` element for content to be shown in a popup
@@ -15,145 +14,144 @@ import { PbHighlight } from "./pb-highlight.js";
15
14
  * @cssprop --pb-highlight-color - Background color to highlight an element
16
15
  */
17
16
  export class PbGeolocation extends PbHighlight {
18
- static get properties() {
19
- return {
20
- ...super.properties,
21
- longitude: {
22
- type: Number
23
- },
24
- latitude: {
25
- type: Number
26
- },
27
- /**
28
- * Optional label for the place, e.g. to display a marker
29
- */
30
- label: {
31
- type: String
32
- },
33
- /**
34
- * Name of the event which triggers a pb-geolocation event, e.g. 'click'.
35
- * Default is 'mouseover'.
36
- */
37
- event: {
38
- type: String
39
- },
40
- /**
41
- * Zoom level to use for the map if it centers on the location.
42
- */
43
- zoom: {
44
- type: Number
45
- },
46
- /**
47
- * If set, add location to a map automatically upon load by
48
- * emitting an event. If not set, locations are only added when
49
- * the configured event is triggered.
50
- */
51
- auto: {
52
- type: Boolean
53
- }
54
- };
55
- }
17
+ static get properties() {
18
+ return {
19
+ ...super.properties,
20
+ longitude: {
21
+ type: Number,
22
+ },
23
+ latitude: {
24
+ type: Number,
25
+ },
26
+ /**
27
+ * Optional label for the place, e.g. to display a marker
28
+ */
29
+ label: {
30
+ type: String,
31
+ },
32
+ /**
33
+ * Name of the event which triggers a pb-geolocation event, e.g. 'click'.
34
+ * Default is 'mouseover'.
35
+ */
36
+ event: {
37
+ type: String,
38
+ },
39
+ /**
40
+ * Zoom level to use for the map if it centers on the location.
41
+ */
42
+ zoom: {
43
+ type: Number,
44
+ },
45
+ /**
46
+ * If set, add location to a map automatically upon load by
47
+ * emitting an event. If not set, locations are only added when
48
+ * the configured event is triggered.
49
+ */
50
+ auto: {
51
+ type: Boolean,
52
+ },
53
+ };
54
+ }
56
55
 
57
- constructor() {
58
- super();
59
- this.event = 'mouseover';
60
- this.auto = false;
61
- this.zoom = null;
62
- }
56
+ constructor() {
57
+ super();
58
+ this.event = 'mouseover';
59
+ this.auto = false;
60
+ this.zoom = null;
61
+ }
63
62
 
64
- connectedCallback() {
65
- super.connectedCallback();
63
+ connectedCallback() {
64
+ super.connectedCallback();
66
65
 
67
- if (this.event) {
68
- this.addEventListener(this.event, () =>
69
- this.emitTo('pb-geolocation', {
70
- coordinates: {
71
- latitude: this.latitude,
72
- longitude: this.longitude
73
- },
74
- label: this.label,
75
- zoom: this.zoom,
76
- popup: this.popup,
77
- element: this,
78
- event: this.event
79
- })
80
- );
81
- }
82
- if (this.auto) {
83
- this.waitForChannel(() => {
84
- this.emitTo('pb-geolocation', {
85
- coordinates: {
86
- latitude: this.latitude,
87
- longitude: this.longitude
88
- },
89
- label: this.label,
90
- popup: this.popup,
91
- fitBounds: true,
92
- element: this
93
- });
94
- });
95
- }
66
+ if (this.event) {
67
+ this.addEventListener(this.event, () =>
68
+ this.emitTo('pb-geolocation', {
69
+ coordinates: {
70
+ latitude: this.latitude,
71
+ longitude: this.longitude,
72
+ },
73
+ label: this.label,
74
+ zoom: this.zoom,
75
+ popup: this.popup,
76
+ element: this,
77
+ event: this.event,
78
+ }),
79
+ );
96
80
  }
97
-
98
- render() {
99
- return html`<span id="content"><slot></slot></span>`;
81
+ if (this.auto) {
82
+ this.waitForChannel(() => {
83
+ this.emitTo('pb-geolocation', {
84
+ coordinates: {
85
+ latitude: this.latitude,
86
+ longitude: this.longitude,
87
+ },
88
+ label: this.label,
89
+ popup: this.popup,
90
+ fitBounds: true,
91
+ element: this,
92
+ });
93
+ });
100
94
  }
95
+ }
101
96
 
102
- get popup() {
103
- const template = this.querySelector('template');
104
- if (template) {
105
- const wrapper = document.createElement('div');
106
- wrapper.appendChild(template.content.cloneNode(true));
107
- return wrapper;
108
- }
109
- return null;
110
- }
97
+ render() {
98
+ return html`<span id="content"><slot></slot></span>`;
99
+ }
111
100
 
112
- static get styles() {
113
- return css`
114
- :host {
115
- display: inline;
116
- cursor: pointer;
117
- }
101
+ get popup() {
102
+ const template = this.querySelector('template');
103
+ if (template) {
104
+ const wrapper = document.createElement('div');
105
+ wrapper.appendChild(template.content.cloneNode(true));
106
+ return wrapper;
107
+ }
108
+ return null;
109
+ }
118
110
 
119
- [name="popup"] {
120
- display: none;
121
- }
111
+ static get styles() {
112
+ return css`
113
+ :host {
114
+ display: inline;
115
+ cursor: pointer;
116
+ }
122
117
 
123
- @keyframes keyFrameBackgroundColorIn {
124
- 0% {
125
- background-color: inherit;
126
- }
127
- 100% {
128
- background-color: var(--pb-highlight-color, #F9E976);
129
- }
130
- }
118
+ [name='popup'] {
119
+ display: none;
120
+ }
131
121
 
132
- #content {
133
- display: inline;
134
- }
122
+ @keyframes keyFrameBackgroundColorIn {
123
+ 0% {
124
+ background-color: inherit;
125
+ }
126
+ 100% {
127
+ background-color: var(--pb-highlight-color, #f9e976);
128
+ }
129
+ }
135
130
 
136
- .highlight-on {
137
- background-color: var(--pb-highlight-color, #F9E976);
138
- animation-name: keyFrameBackgroundColorIn;
139
- animation-duration: 500ms;
140
- animation-iteration-count: 1;
141
- animation-timing-function: ease-in;
131
+ #content {
132
+ display: inline;
133
+ }
142
134
 
143
- }
135
+ .highlight-on {
136
+ background-color: var(--pb-highlight-color, #f9e976);
137
+ animation-name: keyFrameBackgroundColorIn;
138
+ animation-duration: 500ms;
139
+ animation-iteration-count: 1;
140
+ animation-timing-function: ease-in;
141
+ }
144
142
 
145
- .highlight-off {
146
- background-color: inherit;
147
- }
148
- `;
149
- }
143
+ .highlight-off {
144
+ background-color: inherit;
145
+ }
146
+ `;
147
+ }
150
148
 
151
- /**
152
- * Fired on mouseover
153
- *
154
- * @event pb-geolocation
155
- * @param {Object} coordinates an object with two properties: latitude and longitude
156
- * @param {String} label an optional label for the place
157
- */
149
+ /**
150
+ * Fired on mouseover
151
+ *
152
+ * @event pb-geolocation
153
+ * @param {Object} coordinates an object with two properties: latitude and longitude
154
+ * @param {String} label an optional label for the place
155
+ */
158
156
  }
159
- customElements.define('pb-geolocation', PbGeolocation);
157
+ customElements.define('pb-geolocation', PbGeolocation);