@teipublisher/pb-components 2.26.1-next.3 → 3.0.0-next-4.1
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.
- package/.github/workflows/docker-cypress.yml +54 -0
- package/.github/workflows/main.yml +6 -4
- package/.github/workflows/node.js.yml +56 -21
- package/.github/workflows/release.js.yml +19 -17
- package/.releaserc.json +1 -1
- package/CHANGELOG.md +346 -11
- package/Dockerfile +78 -70
- package/README.md +112 -4
- package/css/components.css +5 -5
- package/css/gridjs/mermaid.min.css +1 -1
- package/css/leaflet/Control.Geocoder.css +1 -126
- package/css/leaflet/images/layers.png +0 -0
- package/css/tify/tify.css +6 -5
- package/css/tom-select/tom-select.bootstrap4.min.css +1 -1
- package/css/tom-select/tom-select.bootstrap5.min.css +1 -1
- package/css/tom-select/tom-select.default.min.css +1 -1
- package/css/tom-select/tom-select.default.min.css.map +1 -0
- package/css/tom-select/tom-select.min.css +1 -1
- package/cypress.config.js +84 -0
- package/dist/api.html +1 -1
- package/dist/css/design-system.css +607 -0
- package/dist/demo/bundle-test.html +4 -3
- package/dist/demo/components.css +46 -1
- package/dist/demo/design-system.html +710 -0
- package/dist/demo/dts-client.html +2 -2
- package/dist/demo/pb-autocomplete.html +23 -11
- package/dist/demo/pb-autocomplete2.html +66 -55
- package/dist/demo/pb-autocomplete3.html +17 -8
- package/dist/demo/pb-blacklab-highlight.html +28 -11
- package/dist/demo/pb-blacklab-results.html +3 -2
- package/dist/demo/pb-browse-docs.html +24 -24
- package/dist/demo/pb-browse-docs2.html +3 -3
- package/dist/demo/pb-clipboard.html +32 -28
- package/dist/demo/pb-code-editor.html +6 -6
- package/dist/demo/pb-code-highlight.html +63 -63
- package/dist/demo/pb-codepen.html +1 -1
- package/dist/demo/pb-collapse.html +1 -1
- package/dist/demo/pb-collapse2.html +2 -2
- package/dist/demo/pb-combo-box.html +135 -130
- package/dist/demo/pb-custom-form.html +64 -55
- package/dist/demo/pb-dialog.html +12 -6
- package/dist/demo/pb-document.html +1 -1
- package/dist/demo/pb-download.html +68 -59
- package/dist/demo/pb-drawer.html +67 -46
- package/dist/demo/pb-drawer2.html +65 -58
- package/dist/demo/pb-edit-app.html +2 -2
- package/dist/demo/pb-edit-xml.html +1 -1
- package/dist/demo/pb-facsimile-2.html +26 -11
- package/dist/demo/pb-facsimile-3.html +25 -10
- package/dist/demo/pb-facsimile-dedup-test-2.html +48 -0
- package/dist/demo/pb-facsimile-dedup-test.html +48 -0
- package/dist/demo/pb-facsimile.html +4 -4
- package/dist/demo/pb-formula.html +1 -1
- package/dist/demo/pb-grid.html +22 -8
- package/dist/demo/pb-highlight.html +2 -2
- package/dist/demo/pb-i18n-simple.html +1 -0
- package/dist/demo/pb-i18n.html +15 -5
- package/dist/demo/pb-image-strip-standalone.html +2 -2
- package/dist/demo/pb-image-strip-view.html +2 -2
- package/dist/demo/pb-leaflet-map.html +3 -3
- package/dist/demo/pb-leaflet-map2.html +2 -2
- package/dist/demo/pb-leaflet-map3.html +3 -3
- package/dist/demo/pb-link.html +1 -1
- package/dist/demo/pb-load.html +2 -6
- package/dist/demo/pb-login.html +1 -3
- package/dist/demo/pb-manage-odds.html +9 -4
- package/dist/demo/pb-markdown.html +1 -1
- package/dist/demo/pb-media-query.html +2 -2
- package/dist/demo/pb-mei.html +2 -2
- package/dist/demo/pb-mei2.html +2 -2
- package/dist/demo/pb-message.html +2 -3
- package/dist/demo/pb-odd-editor.html +54 -52
- package/dist/demo/pb-page-header.html +27 -0
- package/dist/demo/pb-popover.html +1 -1
- package/dist/demo/pb-print-preview.html +2 -2
- package/dist/demo/pb-progress.html +4 -4
- package/dist/demo/pb-repeat.html +32 -36
- package/dist/demo/pb-search.html +16 -5
- package/dist/demo/pb-search2.html +4 -4
- package/dist/demo/pb-search3.html +3 -3
- package/dist/demo/pb-search4.html +3 -3
- package/dist/demo/pb-select-feature.html +4 -4
- package/dist/demo/pb-select-feature2.html +4 -4
- package/dist/demo/pb-select-feature3.html +2 -2
- package/dist/demo/pb-select-i18n.html +58 -53
- package/dist/demo/pb-select-odd.html +1 -1
- package/dist/demo/pb-select.html +190 -75
- package/dist/demo/pb-select2.html +91 -37
- package/dist/demo/pb-select3.html +109 -41
- package/dist/demo/pb-svg.html +1 -1
- package/dist/demo/pb-table-grid.html +26 -15
- package/dist/demo/pb-tabs.html +15 -7
- package/dist/demo/pb-tify.html +7 -7
- package/dist/demo/pb-timeline.html +1 -1
- package/dist/demo/pb-timeline2.html +1 -1
- package/dist/demo/pb-toggle-feature.html +26 -23
- package/dist/demo/pb-toggle-feature2.html +4 -4
- package/dist/demo/pb-toggle-feature3.html +2 -2
- package/dist/demo/pb-toggle-feature4.html +56 -54
- package/dist/demo/pb-version.html +2 -2
- package/dist/demo/pb-view.html +78 -40
- package/dist/demo/pb-view2.html +69 -46
- package/dist/demo/pb-view3.html +53 -48
- package/dist/demo/pb-view4.html +70 -49
- package/dist/demo/pb-zoom.html +2 -2
- package/dist/{es-global-bridge-d8ce175d.js → es-global-bridge-D8ZcUcx_.js} +0 -4
- package/dist/focus-mixin-VCsFap6b.js +768 -0
- package/dist/images/icons.svg +217 -0
- package/dist/jinn-codemirror-DETLdm08.js +1 -0
- package/dist/lib/openseadragon.min.js +80 -0
- package/dist/lib/openseadragon.min.js.map +1 -0
- package/dist/pb-code-editor.js +25 -20
- package/dist/pb-component-docs.js +414 -3225
- package/dist/pb-components-bundle.js +3046 -4402
- package/dist/pb-dialog-tklYGWfc.js +121 -0
- package/dist/pb-edit-app.js +208 -107
- package/dist/pb-elements.json +716 -249
- package/dist/pb-facsimile.js +46 -0
- package/dist/pb-i18n-C0NDma4h.js +1 -0
- package/dist/pb-leaflet-map.js +23 -23
- package/dist/pb-mei.js +152 -134
- package/dist/pb-mixin-DHoWQheB.js +1 -0
- package/dist/pb-odd-editor.js +1671 -1231
- package/dist/pb-tify.js +1 -27
- package/dist/unsafe-html-D5VGo9Oq.js +1 -0
- package/dist/urls-BEONu_g4.js +1 -0
- package/eslint.config.mjs +92 -0
- package/gh-pages.js +5 -3
- package/i18n/common/en.json +6 -0
- package/i18n/common/pl.json +2 -2
- package/images/icons.svg +217 -0
- package/index.html +0 -5
- package/lib/leaflet-src.js.map +1 -0
- package/lib/leaflet.markercluster-src.js.map +1 -0
- package/lib/openseadragon.min.js +6 -6
- package/package.json +56 -81
- package/pb-elements.json +716 -249
- package/rollup.config.mjs +312 -0
- package/src/assets/components.css +5 -5
- package/src/assets/design-system.css +607 -0
- package/src/authority/airtable.js +20 -21
- package/src/authority/anton.js +129 -129
- package/src/authority/custom.js +70 -27
- package/src/authority/geonames.js +38 -32
- package/src/authority/gnd.js +50 -42
- package/src/authority/kbga.js +136 -134
- package/src/authority/metagrid.js +44 -46
- package/src/authority/reconciliation.js +66 -68
- package/src/authority/registry.js +4 -4
- package/src/docs/demo-utils.js +91 -0
- package/src/docs/pb-component-docs.js +287 -147
- package/src/docs/pb-component-view.js +380 -273
- package/src/docs/pb-components-list.js +115 -51
- package/src/docs/pb-demo-snippet.js +199 -174
- package/src/dts-client.js +306 -303
- package/src/dts-select-endpoint.js +125 -85
- package/src/parse-date-service.js +184 -135
- package/src/pb-ajax.js +175 -173
- package/src/pb-authority-lookup.js +198 -158
- package/src/pb-autocomplete.js +731 -313
- package/src/pb-blacklab-highlight.js +266 -260
- package/src/pb-blacklab-results.js +230 -225
- package/src/pb-browse-docs.js +601 -484
- package/src/pb-browse.js +68 -65
- package/src/pb-clipboard.js +97 -76
- package/src/pb-code-editor.js +111 -103
- package/src/pb-code-highlight.js +234 -204
- package/src/pb-codepen.js +81 -73
- package/src/pb-collapse.js +265 -152
- package/src/pb-combo-box.js +191 -191
- package/src/pb-components-bundle.js +1 -7
- package/src/pb-components.js +2 -6
- package/src/pb-custom-form.js +230 -141
- package/src/pb-dialog.js +99 -63
- package/src/pb-document.js +118 -91
- package/src/pb-download.js +214 -198
- package/src/pb-drawer.js +146 -149
- package/src/pb-edit-app.js +471 -240
- package/src/pb-edit-xml.js +101 -98
- package/src/pb-events.js +126 -107
- package/src/pb-facs-link.js +130 -101
- package/src/pb-facsimile.js +494 -410
- package/src/pb-fetch.js +389 -0
- package/src/pb-formula.js +152 -154
- package/src/pb-geolocation.js +130 -132
- package/src/pb-grid-action.js +59 -56
- package/src/pb-grid.js +388 -228
- package/src/pb-highlight.js +142 -142
- package/src/pb-hotkeys.js +40 -42
- package/src/pb-i18n.js +115 -127
- package/src/pb-icon-button.js +108 -0
- package/src/pb-icon.js +283 -0
- package/src/pb-image-strip.js +85 -79
- package/src/pb-lang.js +142 -57
- package/src/pb-leaflet-map.js +551 -483
- package/src/pb-link.js +132 -126
- package/src/pb-load.js +495 -428
- package/src/pb-login.js +303 -248
- package/src/pb-manage-odds.js +384 -338
- package/src/pb-map-icon.js +90 -90
- package/src/pb-map-layer.js +86 -86
- package/src/pb-markdown.js +107 -110
- package/src/pb-media-query.js +75 -73
- package/src/pb-mei.js +523 -303
- package/src/pb-message.js +144 -98
- package/src/pb-mixin.js +268 -265
- package/src/pb-navigation.js +83 -96
- package/src/pb-observable.js +39 -39
- package/src/pb-odd-editor.js +1209 -948
- package/src/pb-odd-elementspec-editor.js +375 -310
- package/src/pb-odd-model-editor.js +1189 -941
- package/src/pb-odd-parameter-editor.js +269 -170
- package/src/pb-odd-rendition-editor.js +184 -131
- package/src/pb-page.js +451 -422
- package/src/pb-paginate.js +260 -178
- package/src/pb-panel.js +217 -183
- package/src/pb-popover-themes.js +16 -9
- package/src/pb-popover.js +297 -288
- package/src/pb-print-preview.js +128 -128
- package/src/pb-progress.js +52 -52
- package/src/pb-repeat.js +141 -108
- package/src/pb-restricted.js +85 -78
- package/src/pb-search.js +258 -230
- package/src/pb-select-feature.js +210 -126
- package/src/pb-select-odd.js +184 -118
- package/src/pb-select-template.js +113 -78
- package/src/pb-select.js +330 -229
- package/src/pb-split-list.js +181 -176
- package/src/pb-svg.js +81 -80
- package/src/pb-table-column.js +55 -55
- package/src/pb-table-grid.js +334 -205
- package/src/pb-tabs.js +238 -61
- package/src/pb-tify.js +3331 -126
- package/src/pb-timeline.js +394 -255
- package/src/pb-toggle-feature.js +196 -188
- package/src/pb-upload.js +201 -176
- package/src/pb-version.js +22 -34
- package/src/pb-view-annotate.js +138 -102
- package/src/pb-view.js +1722 -1272
- package/src/pb-zoom.js +144 -46
- package/src/search-result-service.js +256 -223
- package/src/seed-element.js +14 -22
- package/src/settings.js +4 -4
- package/src/theming.js +98 -91
- package/src/urls.js +403 -289
- package/src/utils.js +53 -51
- package/vite.config.js +86 -0
- package/css/pb-styles.css +0 -51
- package/dist/iron-form-3b8dcaa7.js +0 -210
- package/dist/jinn-codemirror-da0e2d1f.js +0 -1
- package/dist/paper-checkbox-515a5284.js +0 -1597
- package/dist/paper-icon-button-b1d31571.js +0 -398
- package/dist/paper-listbox-a3b7175c.js +0 -1265
- package/dist/pb-i18n-0611135a.js +0 -1
- package/dist/pb-mixin-b1caa22e.js +0 -158
- package/dist/polymer-hack.js +0 -1
- package/dist/vaadin-element-mixin-fe4a4883.js +0 -527
- package/lib/Control.Geocoder.min.js +0 -2
- package/lib/Control.Geocoder.min.js.map +0 -1
- package/src/assets/pb-styles.css +0 -51
- package/src/pb-light-dom.js +0 -41
- package/src/polymer-hack.js +0 -6
package/src/pb-formula.js
CHANGED
|
@@ -1,118 +1,116 @@
|
|
|
1
|
-
import { LitElement, html, css } from 'lit
|
|
2
|
-
import
|
|
3
|
-
import { translate } from
|
|
1
|
+
import { LitElement, html, css } from 'lit';
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
45
|
-
if (
|
|
46
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
+
'&': '&',
|
|
69
|
+
'<': '<',
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
159
|
+
constructor() {
|
|
160
|
+
super();
|
|
161
|
+
this.display = false;
|
|
162
|
+
}
|
|
165
163
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
|
|
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);
|
package/src/pb-geolocation.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { html, css } from 'lit
|
|
2
|
-
import { PbHighlight } from
|
|
3
|
-
|
|
1
|
+
import { html, css } from 'lit';
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
constructor() {
|
|
57
|
+
super();
|
|
58
|
+
this.event = 'mouseover';
|
|
59
|
+
this.auto = false;
|
|
60
|
+
this.zoom = null;
|
|
61
|
+
}
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
connectedCallback() {
|
|
64
|
+
super.connectedCallback();
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
111
|
+
static get styles() {
|
|
112
|
+
return css`
|
|
113
|
+
:host {
|
|
114
|
+
display: inline;
|
|
115
|
+
cursor: pointer;
|
|
116
|
+
}
|
|
122
117
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
100% {
|
|
128
|
-
background-color: var(--pb-highlight-color, #F9E976);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
118
|
+
[name='popup'] {
|
|
119
|
+
display: none;
|
|
120
|
+
}
|
|
131
121
|
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
143
|
+
.highlight-off {
|
|
144
|
+
background-color: inherit;
|
|
145
|
+
}
|
|
146
|
+
`;
|
|
147
|
+
}
|
|
150
148
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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);
|