@teipublisher/pb-components 2.26.1-next.3 → 3.0.0
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/main.yml +3 -3
- package/.github/workflows/node.js.yml +3 -3
- package/.github/workflows/release.js.yml +4 -4
- package/.releaserc.json +2 -2
- package/CHANGELOG.md +262 -11
- package/Dockerfile +78 -70
- package/css/components.css +5 -5
- package/css/leaflet/images/layers.png +0 -0
- package/dist/demo/components.css +46 -1
- package/dist/demo/pb-browse-docs2.html +1 -1
- package/dist/demo/pb-dialog.html +3 -5
- package/dist/demo/pb-drawer2.html +1 -1
- package/dist/demo/pb-facsimile.html +2 -2
- package/dist/demo/pb-grid.html +19 -6
- package/dist/demo/pb-leaflet-map.html +1 -1
- package/dist/demo/pb-login.html +0 -2
- package/dist/demo/pb-message.html +1 -2
- package/dist/demo/pb-progress.html +2 -2
- package/dist/demo/pb-repeat.html +1 -3
- package/dist/demo/pb-search.html +7 -4
- package/dist/demo/pb-search3.html +1 -1
- package/dist/demo/pb-search4.html +2 -2
- package/dist/demo/pb-view3.html +1 -1
- package/dist/{iron-form-3b8dcaa7.js → iron-form-dfb3e3b1.js} +95 -95
- package/dist/paper-checkbox-645e1077.js +200 -0
- package/dist/{paper-icon-button-b1d31571.js → paper-icon-button-984162bd.js} +1 -1
- package/dist/{paper-checkbox-515a5284.js → paper-inky-focus-behavior-fa16796b.js} +58 -247
- package/dist/{paper-listbox-a3b7175c.js → paper-listbox-5f5d1cec.js} +152 -162
- package/dist/pb-code-editor.js +25 -20
- package/dist/pb-component-docs.js +68 -64
- package/dist/pb-components-bundle.js +1983 -2293
- package/dist/pb-edit-app.js +167 -107
- package/dist/pb-elements.json +176 -120
- package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
- package/dist/pb-leaflet-map.js +23 -23
- package/dist/pb-mei.js +56 -41
- package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
- package/dist/pb-odd-editor.js +1023 -782
- package/dist/pb-tify.js +2 -2
- package/dist/vaadin-element-mixin-beb74ffd.js +545 -0
- package/gh-pages.js +5 -3
- package/i18n/common/en.json +6 -0
- package/i18n/common/pl.json +2 -2
- package/lib/openseadragon.min.js +6 -6
- package/package.json +3 -3
- package/pb-elements.json +176 -120
- package/src/assets/components.css +5 -5
- package/src/authority/airtable.js +20 -21
- package/src/authority/anton.js +129 -129
- package/src/authority/custom.js +23 -21
- package/src/authority/geonames.js +38 -32
- package/src/authority/gnd.js +50 -42
- package/src/authority/kbga.js +137 -134
- package/src/authority/metagrid.js +44 -46
- package/src/authority/reconciliation.js +66 -67
- package/src/authority/registry.js +4 -4
- package/src/docs/pb-component-docs.js +2 -2
- package/src/docs/pb-component-view.js +5 -5
- package/src/docs/pb-components-list.js +2 -2
- package/src/docs/pb-demo-snippet.js +2 -2
- package/src/dts-client.js +299 -297
- package/src/dts-select-endpoint.js +90 -82
- package/src/parse-date-service.js +184 -135
- package/src/pb-ajax.js +158 -171
- package/src/pb-authority-lookup.js +191 -156
- package/src/pb-autocomplete.js +292 -280
- package/src/pb-blacklab-highlight.js +264 -259
- package/src/pb-blacklab-results.js +236 -221
- package/src/pb-browse-docs.js +540 -475
- package/src/pb-browse.js +68 -65
- package/src/pb-clipboard.js +79 -76
- package/src/pb-code-editor.js +110 -102
- package/src/pb-code-highlight.js +209 -204
- package/src/pb-codepen.js +79 -72
- package/src/pb-collapse.js +211 -151
- package/src/pb-combo-box.js +190 -190
- package/src/pb-components-bundle.js +1 -1
- package/src/pb-components.js +1 -0
- package/src/pb-custom-form.js +173 -153
- package/src/pb-dialog.js +98 -62
- package/src/pb-document.js +89 -90
- package/src/pb-download.js +212 -196
- package/src/pb-drawer.js +145 -148
- package/src/pb-edit-app.js +301 -229
- package/src/pb-edit-xml.js +100 -97
- package/src/pb-events.js +114 -107
- package/src/pb-facs-link.js +104 -102
- package/src/pb-facsimile.js +474 -410
- package/src/pb-formula.js +151 -153
- package/src/pb-geolocation.js +129 -131
- package/src/pb-grid-action.js +53 -56
- package/src/pb-grid.js +231 -228
- package/src/pb-highlight.js +140 -140
- package/src/pb-hotkeys.js +40 -42
- package/src/pb-i18n.js +101 -104
- package/src/pb-image-strip.js +84 -78
- package/src/pb-lang.js +142 -57
- package/src/pb-leaflet-map.js +488 -485
- package/src/pb-link.js +126 -124
- package/src/pb-load.js +431 -429
- package/src/pb-login.js +299 -244
- package/src/pb-manage-odds.js +352 -336
- package/src/pb-map-icon.js +89 -89
- package/src/pb-map-layer.js +85 -85
- package/src/pb-markdown.js +90 -99
- package/src/pb-media-query.js +74 -72
- package/src/pb-mei.js +306 -295
- package/src/pb-message.js +139 -97
- package/src/pb-mixin.js +269 -264
- package/src/pb-navigation.js +80 -95
- package/src/pb-observable.js +38 -38
- package/src/pb-odd-editor.js +1054 -958
- package/src/pb-odd-elementspec-editor.js +349 -298
- package/src/pb-odd-model-editor.js +1075 -909
- package/src/pb-odd-parameter-editor.js +200 -178
- package/src/pb-odd-rendition-editor.js +136 -124
- package/src/pb-page.js +431 -422
- package/src/pb-paginate.js +228 -179
- package/src/pb-panel.js +198 -182
- package/src/pb-popover-themes.js +15 -8
- package/src/pb-popover.js +296 -287
- package/src/pb-print-preview.js +127 -127
- package/src/pb-progress.js +51 -51
- package/src/pb-repeat.js +105 -104
- package/src/pb-restricted.js +84 -77
- package/src/pb-search.js +256 -228
- package/src/pb-select-feature.js +127 -120
- package/src/pb-select-odd.js +132 -124
- package/src/pb-select-template.js +89 -78
- package/src/pb-select.js +251 -227
- package/src/pb-split-list.js +179 -174
- package/src/pb-svg.js +80 -79
- package/src/pb-table-column.js +54 -54
- package/src/pb-table-grid.js +221 -203
- package/src/pb-tabs.js +61 -63
- package/src/pb-tify.js +154 -154
- package/src/pb-timeline.js +382 -249
- package/src/pb-toggle-feature.js +195 -187
- package/src/pb-upload.js +184 -174
- package/src/pb-version.js +30 -30
- package/src/pb-view-annotate.js +135 -98
- package/src/pb-view.js +1282 -1270
- package/src/pb-zoom.js +127 -45
- package/src/polymer-hack.js +1 -1
- package/src/search-result-service.js +256 -223
- package/src/seed-element.js +13 -20
- package/src/settings.js +4 -4
- package/src/theming.js +98 -91
- package/src/urls.js +289 -289
- package/src/utils.js +53 -51
- package/css/pb-styles.css +0 -51
- package/dist/vaadin-element-mixin-fe4a4883.js +0 -527
- package/src/assets/pb-styles.css +0 -51
- package/src/pb-light-dom.js +0 -41
package/src/pb-map-icon.js
CHANGED
|
@@ -1,101 +1,101 @@
|
|
|
1
1
|
import { LitElement } from 'lit-element';
|
|
2
2
|
|
|
3
3
|
function sizeConverter(value, type) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
try {
|
|
5
|
+
return value.split(/\s*,\s*/).map(s => parseInt(s, 10));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
console.error(`<pb-map-icon> Invalid size specified: ${value}`);
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Configure a map icon type to be used for markers.
|
|
12
|
+
* Configure a map icon type to be used for markers.
|
|
13
13
|
* Should be nested inside `pb-leaflet-map`.
|
|
14
14
|
*
|
|
15
15
|
*/
|
|
16
16
|
export class PbMapIcon extends LitElement {
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
+
static get properties() {
|
|
18
|
+
return {
|
|
19
|
+
/**
|
|
20
|
+
* Name of the icon. Set to 'active' to configure the icon used for
|
|
21
|
+
* places which were target of a previous `pb-geolocation` event (i.e. are currently 'active').
|
|
22
|
+
*/
|
|
23
|
+
name: {
|
|
24
|
+
type: String,
|
|
25
|
+
},
|
|
26
|
+
/**
|
|
27
|
+
* The URL to load the icon from. Should be relative to the path set via the `imagesPath` property on `pb-leaflet-map`.
|
|
28
|
+
*/
|
|
29
|
+
iconUrl: {
|
|
30
|
+
type: String,
|
|
31
|
+
attribute: 'icon-url',
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* Size of the icon as comma-separated string, i.e. 'height, width'.
|
|
35
|
+
*/
|
|
36
|
+
iconSize: {
|
|
37
|
+
type: Array,
|
|
38
|
+
converter: sizeConverter,
|
|
39
|
+
attribute: 'icon-size',
|
|
40
|
+
},
|
|
41
|
+
/**
|
|
42
|
+
* Anchor position of the icon as comma-separated string, i.e. 'height, width'.
|
|
43
|
+
*/
|
|
44
|
+
iconAnchor: {
|
|
45
|
+
type: Array,
|
|
46
|
+
converter: sizeConverter,
|
|
47
|
+
attribute: 'icon-anchor',
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* The URL to load the shadow icon from. Should be relative to the path set via the `imagesPath` property on `pb-leaflet-map`.
|
|
51
|
+
*/
|
|
52
|
+
shadowUrl: {
|
|
53
|
+
type: String,
|
|
54
|
+
attribute: 'shadow-url',
|
|
55
|
+
},
|
|
56
|
+
/**
|
|
57
|
+
* Size of the shadow icon as comma-separated string, i.e. 'height, width'.
|
|
58
|
+
*/
|
|
59
|
+
shadowSize: {
|
|
60
|
+
type: Array,
|
|
61
|
+
converter: sizeConverter,
|
|
62
|
+
attribute: 'shadow-size',
|
|
63
|
+
},
|
|
64
|
+
/**
|
|
65
|
+
* Anchor position of the shadow icon as comma-separated string, i.e. 'height, width'.
|
|
66
|
+
*/
|
|
67
|
+
shadowAnchor: {
|
|
68
|
+
type: Array,
|
|
69
|
+
converter: sizeConverter,
|
|
70
|
+
attribute: 'shadow-anchor',
|
|
71
|
+
},
|
|
72
|
+
/**
|
|
73
|
+
* Anchor position of the popup as comma-separated string, i.e. 'height, width'.
|
|
74
|
+
*/
|
|
75
|
+
popupAncor: {
|
|
76
|
+
type: Array,
|
|
77
|
+
converter: sizeConverter,
|
|
78
|
+
attribute: 'popup-anchor',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
83
|
+
constructor() {
|
|
84
|
+
super();
|
|
85
|
+
this.name = 'default';
|
|
86
|
+
this.type = 'image';
|
|
87
|
+
this.iconUrl = null;
|
|
88
|
+
}
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
90
|
+
get options() {
|
|
91
|
+
const options = {};
|
|
92
|
+
Object.keys(PbMapIcon.properties).forEach(key => {
|
|
93
|
+
if (this[key]) {
|
|
94
|
+
options[key] = this[key];
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
console.log('<pb-map-icon> Options: %o', options);
|
|
98
|
+
return options;
|
|
99
|
+
}
|
|
100
100
|
}
|
|
101
|
-
customElements.define('pb-map-icon', PbMapIcon);
|
|
101
|
+
customElements.define('pb-map-icon', PbMapIcon);
|
package/src/pb-map-layer.js
CHANGED
|
@@ -7,92 +7,92 @@ const ignore = ['type', 'url', 'label', 'base', 'show'];
|
|
|
7
7
|
*
|
|
8
8
|
*/
|
|
9
9
|
export class PbMapLayer extends LitElement {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
10
|
+
static get properties() {
|
|
11
|
+
return {
|
|
12
|
+
/**
|
|
13
|
+
* Type of the layer: either 'tile' or 'geojson'
|
|
14
|
+
*/
|
|
15
|
+
type: {
|
|
16
|
+
type: String,
|
|
17
|
+
},
|
|
18
|
+
/**
|
|
19
|
+
* The URL (or URL template) to load layer data from
|
|
20
|
+
*/
|
|
21
|
+
url: {
|
|
22
|
+
type: String,
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Set to indicate that this is a base layer
|
|
26
|
+
*/
|
|
27
|
+
base: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* Display the layer on the map upon initialization
|
|
32
|
+
*/
|
|
33
|
+
show: {
|
|
34
|
+
type: Boolean,
|
|
35
|
+
},
|
|
36
|
+
/**
|
|
37
|
+
* A label for the layer to be shown in the layer control
|
|
38
|
+
*/
|
|
39
|
+
label: {
|
|
40
|
+
type: String,
|
|
41
|
+
},
|
|
42
|
+
attribution: {
|
|
43
|
+
type: String,
|
|
44
|
+
},
|
|
45
|
+
minZoom: {
|
|
46
|
+
type: Number,
|
|
47
|
+
attribute: 'min-zoom',
|
|
48
|
+
},
|
|
49
|
+
maxZoom: {
|
|
50
|
+
type: Number,
|
|
51
|
+
attribute: 'max-zoom',
|
|
52
|
+
},
|
|
53
|
+
zoomOffset: {
|
|
54
|
+
type: Number,
|
|
55
|
+
attribute: 'zoom-offset',
|
|
56
|
+
},
|
|
57
|
+
opacity: {
|
|
58
|
+
type: Number,
|
|
59
|
+
},
|
|
60
|
+
tileSize: {
|
|
61
|
+
type: Number,
|
|
62
|
+
},
|
|
63
|
+
id: {
|
|
64
|
+
type: String,
|
|
65
|
+
},
|
|
66
|
+
accessToken: {
|
|
67
|
+
type: String,
|
|
68
|
+
attribute: 'access-token',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
constructor() {
|
|
74
|
+
super();
|
|
75
|
+
this.type = 'tile';
|
|
76
|
+
this.url = null;
|
|
77
|
+
}
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
get options() {
|
|
80
|
+
const options = {};
|
|
81
|
+
Object.keys(PbMapLayer.properties).forEach(key => {
|
|
82
|
+
if (ignore.indexOf(key) < 0 && this[key]) {
|
|
83
|
+
options[key] = this[key];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
console.log('<pb-leaflet-map-layer> Options: %o', options);
|
|
87
|
+
return options;
|
|
88
|
+
}
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
async data() {
|
|
91
|
+
return new Promise(resolve => {
|
|
92
|
+
fetch(this.url)
|
|
93
|
+
.then(response => response.json())
|
|
94
|
+
.then(json => resolve(json));
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
97
|
}
|
|
98
|
-
customElements.define('pb-map-layer', PbMapLayer);
|
|
98
|
+
customElements.define('pb-map-layer', PbMapLayer);
|
package/src/pb-markdown.js
CHANGED
|
@@ -1,139 +1,130 @@
|
|
|
1
1
|
import { LitElement, html, css } from 'lit-element';
|
|
2
2
|
import { unsafeHTML } from 'lit-html/directives/unsafe-html.js';
|
|
3
|
-
import { pbMixin, waitOnce } from './pb-mixin.js';
|
|
4
3
|
import * as marked from 'marked/lib/marked.js';
|
|
4
|
+
import { pbMixin, waitOnce } from './pb-mixin.js';
|
|
5
5
|
import './pb-code-highlight.js';
|
|
6
6
|
|
|
7
7
|
const renderer = new window.marked.Renderer();
|
|
8
8
|
renderer.code = function code(code, infostring, escaped) {
|
|
9
|
-
|
|
9
|
+
return `<pb-code-highlight language="${infostring}" line-numbers>
|
|
10
10
|
<template>${code}</template>
|
|
11
11
|
</pb-code-highlight>`;
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
window.marked.setOptions({
|
|
15
|
-
|
|
15
|
+
renderer,
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
function removeIndent(input) {
|
|
19
|
-
|
|
19
|
+
const indents = input.match(/^[^\S]*(?=\S)/gm);
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
return input;
|
|
21
|
+
if (!indents || !indents[0].length) return input;
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
indents.sort((a, b) => a.length - b.length);
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
return input;
|
|
25
|
+
if (!indents[0].length) return input;
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
return input.replace(RegExp(`^${indents[0]}`, 'gm'), '');
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
/**
|
|
33
31
|
* A component to render markdown. Content to render may either
|
|
34
|
-
*
|
|
32
|
+
*
|
|
35
33
|
* 1. be specified via the `content` property
|
|
36
34
|
* 2. included in the body of the element
|
|
37
35
|
* 3. loaded from an external URL
|
|
38
|
-
*
|
|
36
|
+
*
|
|
39
37
|
* Using option 2, if the markdown includes embedded HTML, make sure to wrap
|
|
40
38
|
* the content into an `template` HTML element to prevent the browser from interpreting
|
|
41
39
|
* it.
|
|
42
|
-
*
|
|
40
|
+
*
|
|
43
41
|
* Using option 3, you can either specify an absolute or relative URL. Relative URLs
|
|
44
42
|
* will be interpreted relative to the endpoint set by `pb-page`.
|
|
45
43
|
*/
|
|
46
44
|
export class PbMarkdown extends pbMixin(LitElement) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
45
|
+
static get properties() {
|
|
46
|
+
return {
|
|
47
|
+
/**
|
|
48
|
+
* The markdown content to be rendered. If undefined,
|
|
49
|
+
* markdown will be taken from the content of the element
|
|
50
|
+
* or loaded from the specified URL.
|
|
51
|
+
*/
|
|
52
|
+
content: {
|
|
53
|
+
type: String,
|
|
54
|
+
},
|
|
55
|
+
/**
|
|
56
|
+
* An absolute or relative URL to load the markdown from.
|
|
57
|
+
*/
|
|
58
|
+
url: {
|
|
59
|
+
type: String,
|
|
60
|
+
},
|
|
61
|
+
...super.properties,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
constructor() {
|
|
66
|
+
super();
|
|
67
|
+
this._url = null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
set url(value) {
|
|
71
|
+
this._url = value;
|
|
72
|
+
waitOnce('pb-page-ready', options => {
|
|
73
|
+
this._load(options.endpoint);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
connectedCallback() {
|
|
78
|
+
super.connectedCallback();
|
|
79
|
+
this.style.display = 'block';
|
|
80
|
+
|
|
81
|
+
if (!this.content) {
|
|
82
|
+
const content = document.createElement('div');
|
|
83
|
+
for (let i = 0; i < this.childNodes.length; i++) {
|
|
84
|
+
const node = this.childNodes[i];
|
|
85
|
+
content.appendChild(document.importNode(node.content || node, true));
|
|
86
|
+
}
|
|
87
|
+
this.content = removeIndent(content.innerHTML);
|
|
77
88
|
}
|
|
78
89
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
this.subscribeTo('pb-zoom', ev => {
|
|
91
|
+
this.zoom(ev.detail.direction);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
_load(server) {
|
|
96
|
+
const url = this.toAbsoluteURL(this._url, server);
|
|
97
|
+
fetch(url, { credentials: 'same-origin' })
|
|
98
|
+
.then(response => response.text())
|
|
99
|
+
.catch(() => {
|
|
100
|
+
console.error('<pb-markdown> failed to load content from %s', url.toString());
|
|
101
|
+
return Promise.resolve(this.content);
|
|
102
|
+
})
|
|
103
|
+
.then(text => {
|
|
104
|
+
this.content = text;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
createRenderRoot() {
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
render() {
|
|
113
|
+
if (!this.content) {
|
|
114
|
+
return null;
|
|
97
115
|
}
|
|
116
|
+
return html`<div>${unsafeHTML(window.marked(this.content))}</div>`;
|
|
117
|
+
}
|
|
98
118
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
.then((response) => response.text())
|
|
103
|
-
.catch(() => {
|
|
104
|
-
console.error(
|
|
105
|
-
"<pb-markdown> failed to load content from %s",
|
|
106
|
-
url.toString()
|
|
107
|
-
);
|
|
108
|
-
return Promise.resolve(this.content);
|
|
109
|
-
})
|
|
110
|
-
.then((text) => {
|
|
111
|
-
this.content = text;
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
createRenderRoot() {
|
|
116
|
-
return this;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
render() {
|
|
120
|
-
if (!this.content) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
return html`<div>${unsafeHTML(window.marked(this.content))}</div>`;
|
|
124
|
-
}
|
|
119
|
+
zoom(direction) {
|
|
120
|
+
const fontSize = window.getComputedStyle(this).getPropertyValue('font-size');
|
|
121
|
+
const size = parseInt(fontSize.replace(/^(\d+)px/, '$1'));
|
|
125
122
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const size = parseInt(fontSize.replace(/^(\d+)px/, "$1"));
|
|
131
|
-
|
|
132
|
-
if (direction === "in") {
|
|
133
|
-
this.style.fontSize = size + 1 + "px";
|
|
134
|
-
} else {
|
|
135
|
-
this.style.fontSize = size - 1 + "px";
|
|
136
|
-
}
|
|
123
|
+
if (direction === 'in') {
|
|
124
|
+
this.style.fontSize = `${size + 1}px`;
|
|
125
|
+
} else {
|
|
126
|
+
this.style.fontSize = `${size - 1}px`;
|
|
137
127
|
}
|
|
128
|
+
}
|
|
138
129
|
}
|
|
139
|
-
customElements.define('pb-markdown', PbMarkdown);
|
|
130
|
+
customElements.define('pb-markdown', PbMarkdown);
|