@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-toggle-feature.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { LitElement, html } from 'lit
|
|
2
|
-
import '@polymer/paper-checkbox';
|
|
1
|
+
import { LitElement, html } from 'lit';
|
|
3
2
|
import { pbMixin, waitOnce } from './pb-mixin.js';
|
|
4
|
-
import { registry } from
|
|
3
|
+
import { registry } from './urls.js';
|
|
4
|
+
import { themableMixin } from './theming.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @param {{ selector: any; command: string; state: boolean; }} newConfig
|
|
8
8
|
* @param {any[]} configs
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
export function addSelector(newConfig, configs) {
|
|
11
|
+
const idx = configs.findIndex(item => item.selector === newConfig.selector);
|
|
12
|
+
if (idx > -1) {
|
|
13
|
+
configs[idx] = newConfig;
|
|
14
|
+
} else {
|
|
15
|
+
configs.push(newConfig);
|
|
16
|
+
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Enable or disable a particular display feature by setting a predefined or custom parameter.
|
|
21
21
|
* Toggling display features can be done server-side or client-side.
|
|
22
|
-
*
|
|
22
|
+
*
|
|
23
23
|
* It is important that `pb-toggle-feature` emits and subscribes to the same channel as the target `pb-view`.
|
|
24
|
-
*
|
|
24
|
+
*
|
|
25
25
|
* # Server side toggling
|
|
26
|
-
*
|
|
26
|
+
*
|
|
27
27
|
* You may set the following view parameters which correspond to the properties supported by `pb-view`:
|
|
28
28
|
*
|
|
29
29
|
* | Parameter | Description |
|
|
@@ -64,22 +64,22 @@ import { registry } from "./urls.js";
|
|
|
64
64
|
* ```
|
|
65
65
|
*
|
|
66
66
|
* # Client side toggling
|
|
67
|
-
*
|
|
67
|
+
*
|
|
68
68
|
* The component can also be used to toggle features client-side, i.e. without requiring a server-roundtrip.
|
|
69
69
|
* To enable this, the `selector` property should be set to a CSS3 selector targetting the HTML elements
|
|
70
70
|
* to toggle. In `on` state, the selected elements will be assigned a class `.toggled`.
|
|
71
|
-
*
|
|
71
|
+
*
|
|
72
72
|
* ```html
|
|
73
73
|
* <pb-toggle-feature name="normalized" selector=".choice,.choice-alternate,br">Normalized View</pb-toggle-feature>
|
|
74
74
|
* ```
|
|
75
|
-
*
|
|
75
|
+
*
|
|
76
76
|
* Note that the name attribute is still required: it is used to determine if the feature is in on or off state by
|
|
77
77
|
* looking at request parameters.
|
|
78
|
-
*
|
|
78
|
+
*
|
|
79
79
|
* Instead of toggling the class, you can also completely disable the elements selected - provided that they are
|
|
80
80
|
* publisher components implementing the corresponding `command` method of `pb-mixin`. To disable elements instead of
|
|
81
81
|
* toggling, set the `action` property to *disable*.
|
|
82
|
-
*
|
|
82
|
+
*
|
|
83
83
|
* ```html
|
|
84
84
|
* <pb-toggle-feature name="plain" selector=".tei-foreign,pb-highlight,pb-popover" action="disable" default="off">Plain Reading View</pb-toggle-feature>
|
|
85
85
|
* ```
|
|
@@ -88,193 +88,201 @@ import { registry } from "./urls.js";
|
|
|
88
88
|
* @fires pb-global-toggle - Fired if property `global` is set. Will be caught by the surrounding `pb-page`
|
|
89
89
|
* @fires pb-update - When received, sets the features passed from the event
|
|
90
90
|
*/
|
|
91
|
-
export class PbToggleFeature extends pbMixin(LitElement) {
|
|
91
|
+
export class PbToggleFeature extends themableMixin(pbMixin(LitElement)) {
|
|
92
|
+
static get properties() {
|
|
93
|
+
return {
|
|
94
|
+
...super.properties,
|
|
95
|
+
/**
|
|
96
|
+
* The name of the feature (required). This will correspond to the name of the custom parameter
|
|
97
|
+
* passed to the ODD.
|
|
98
|
+
*/
|
|
99
|
+
name: {
|
|
100
|
+
type: String,
|
|
101
|
+
},
|
|
102
|
+
/**
|
|
103
|
+
* (optional) CSS selector: selects the elements to toggle client side (sets or unsets a
|
|
104
|
+
* CSS class `.toggled`). Setting this property will not trigger a reload as everything is
|
|
105
|
+
* handled by javascript.
|
|
106
|
+
*/
|
|
107
|
+
selector: {
|
|
108
|
+
type: String,
|
|
109
|
+
},
|
|
110
|
+
/**
|
|
111
|
+
* In combination with a selector specifies the action to be taken, currently one of
|
|
112
|
+
* `toggle` (default) or `disable`.
|
|
113
|
+
*/
|
|
114
|
+
action: {
|
|
115
|
+
type: String,
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Value to set the parameter to when the feature is enabled.
|
|
119
|
+
*/
|
|
120
|
+
on: {
|
|
121
|
+
type: String,
|
|
122
|
+
},
|
|
123
|
+
/**
|
|
124
|
+
* Value to set the parameter to when the feature is disabled.
|
|
125
|
+
*/
|
|
126
|
+
off: {
|
|
127
|
+
type: String,
|
|
128
|
+
},
|
|
129
|
+
/**
|
|
130
|
+
* The default setting: either 'on' or 'off'
|
|
131
|
+
*/
|
|
132
|
+
default: {
|
|
133
|
+
type: String,
|
|
134
|
+
},
|
|
135
|
+
/**
|
|
136
|
+
* Additional properties to set on the pb-view if toggle is in 'on' state.
|
|
137
|
+
* Possible properties are 'view', 'odd' and 'columnSeparator'.
|
|
138
|
+
*/
|
|
139
|
+
propertiesOn: {
|
|
140
|
+
type: Object,
|
|
141
|
+
attribute: 'properties-on',
|
|
142
|
+
},
|
|
143
|
+
/**
|
|
144
|
+
* Additional properties to set on the pb-view if toggle is in 'off' state.
|
|
145
|
+
* Possible properties are 'view', 'odd' and 'columnSeparator'.
|
|
146
|
+
*/
|
|
147
|
+
propertiesOff: {
|
|
148
|
+
type: Object,
|
|
149
|
+
attribute: 'properties-off',
|
|
150
|
+
},
|
|
151
|
+
checked: {
|
|
152
|
+
type: Boolean,
|
|
153
|
+
},
|
|
154
|
+
/**
|
|
155
|
+
* If set to false (the default), `pb-toggle-feature` will pass its properties to the
|
|
156
|
+
* connected view before this loads content for the first time. If true,
|
|
157
|
+
* `pb-toggle-feature` will initialize its state depending on the setting of the view.
|
|
158
|
+
* This only makes sense for the special properties 'view' and 'odd' though.
|
|
159
|
+
*/
|
|
160
|
+
initFromView: {
|
|
161
|
+
type: Boolean,
|
|
162
|
+
attribute: 'init-from-view',
|
|
163
|
+
},
|
|
164
|
+
/**
|
|
165
|
+
* If set, toggle the state of elements which reside
|
|
166
|
+
* in the surrounding HTML context below `pb-page`
|
|
167
|
+
* (means: elements which are not inside a `pb-view` or `pb-load`).
|
|
168
|
+
*/
|
|
169
|
+
global: {
|
|
170
|
+
type: Boolean,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
92
174
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* (optional) CSS selector: selects the elements to toggle client side (sets or unsets a
|
|
105
|
-
* CSS class `.toggled`). Setting this property will not trigger a reload as everything is
|
|
106
|
-
* handled by javascript.
|
|
107
|
-
*/
|
|
108
|
-
selector: {
|
|
109
|
-
type: String
|
|
110
|
-
},
|
|
111
|
-
/**
|
|
112
|
-
* In combination with a selector specifies the action to be taken, currently one of
|
|
113
|
-
* `toggle` (default) or `disable`.
|
|
114
|
-
*/
|
|
115
|
-
action: {
|
|
116
|
-
type: String
|
|
117
|
-
},
|
|
118
|
-
/**
|
|
119
|
-
* Value to set the parameter to when the feature is enabled.
|
|
120
|
-
*/
|
|
121
|
-
on: {
|
|
122
|
-
type: String
|
|
123
|
-
},
|
|
124
|
-
/**
|
|
125
|
-
* Value to set the parameter to when the feature is disabled.
|
|
126
|
-
*/
|
|
127
|
-
off: {
|
|
128
|
-
type: String
|
|
129
|
-
},
|
|
130
|
-
/**
|
|
131
|
-
* The default setting: either 'on' or 'off'
|
|
132
|
-
*/
|
|
133
|
-
default: {
|
|
134
|
-
type: String
|
|
135
|
-
},
|
|
136
|
-
/**
|
|
137
|
-
* Additional properties to set on the pb-view if toggle is in 'on' state.
|
|
138
|
-
* Possible properties are 'view', 'odd' and 'columnSeparator'.
|
|
139
|
-
*/
|
|
140
|
-
propertiesOn: {
|
|
141
|
-
type: Object,
|
|
142
|
-
attribute: 'properties-on'
|
|
143
|
-
},
|
|
144
|
-
/**
|
|
145
|
-
* Additional properties to set on the pb-view if toggle is in 'off' state.
|
|
146
|
-
* Possible properties are 'view', 'odd' and 'columnSeparator'.
|
|
147
|
-
*/
|
|
148
|
-
propertiesOff: {
|
|
149
|
-
type: Object,
|
|
150
|
-
attribute: 'properties-off'
|
|
151
|
-
},
|
|
152
|
-
checked: {
|
|
153
|
-
type: Boolean
|
|
154
|
-
},
|
|
155
|
-
/**
|
|
156
|
-
* If set to false (the default), `pb-toggle-feature` will pass its properties to the
|
|
157
|
-
* connected view before this loads content for the first time. If true,
|
|
158
|
-
* `pb-toggle-feature` will initialize its state depending on the setting of the view.
|
|
159
|
-
* This only makes sense for the special properties 'view' and 'odd' though.
|
|
160
|
-
*/
|
|
161
|
-
initFromView: {
|
|
162
|
-
type: Boolean,
|
|
163
|
-
attribute: 'init-from-view'
|
|
164
|
-
},
|
|
165
|
-
/**
|
|
166
|
-
* If set, toggle the state of elements which reside
|
|
167
|
-
* in the surrounding HTML context below `pb-page`
|
|
168
|
-
* (means: elements which are not inside a `pb-view` or `pb-load`).
|
|
169
|
-
*/
|
|
170
|
-
global: {
|
|
171
|
-
type: Boolean
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
constructor() {
|
|
177
|
-
super();
|
|
178
|
-
this.default = 'on';
|
|
179
|
-
this.on = 'on';
|
|
180
|
-
this.off = 'off';
|
|
181
|
-
this.action = 'toggle';
|
|
182
|
-
this.propertiesOn = {};
|
|
183
|
-
this.propertiesOff = {};
|
|
184
|
-
this.initFromView = false;
|
|
185
|
-
this.global = false;
|
|
186
|
-
}
|
|
175
|
+
constructor() {
|
|
176
|
+
super();
|
|
177
|
+
this.default = 'on';
|
|
178
|
+
this.on = 'on';
|
|
179
|
+
this.off = 'off';
|
|
180
|
+
this.action = 'toggle';
|
|
181
|
+
this.propertiesOn = {};
|
|
182
|
+
this.propertiesOff = {};
|
|
183
|
+
this.initFromView = false;
|
|
184
|
+
this.global = false;
|
|
185
|
+
}
|
|
187
186
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
<
|
|
187
|
+
render() {
|
|
188
|
+
return html`
|
|
189
|
+
<input type="checkbox" id="checkbox" @change="${this._changed}" .checked="${this.checked}" .disabled="${this.disabled}"></input>
|
|
190
|
+
<label for="checkbox"><slot></slot></label>
|
|
191
191
|
`;
|
|
192
|
-
|
|
192
|
+
}
|
|
193
193
|
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
connectedCallback() {
|
|
195
|
+
super.connectedCallback();
|
|
196
196
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
197
|
+
registry.subscribe(this, state => {
|
|
198
|
+
const param = state[this.name];
|
|
199
|
+
this._setChecked(param);
|
|
200
|
+
});
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const newState = {};
|
|
206
|
-
newState[this.name] = this.checked ? this.on : this.off;
|
|
207
|
-
registry.replace(this, newState);
|
|
208
|
-
this._saveState();
|
|
202
|
+
const param = registry.state[this.name];
|
|
203
|
+
this._setChecked(param);
|
|
209
204
|
|
|
210
|
-
|
|
205
|
+
const newState = {};
|
|
206
|
+
newState[this.name] = this.checked ? this.on : this.off;
|
|
207
|
+
registry.replace(this, newState);
|
|
208
|
+
this._saveState();
|
|
211
209
|
|
|
212
|
-
|
|
213
|
-
if (this.global) {
|
|
214
|
-
this.dispatchEvent(new CustomEvent('pb-global-toggle', { detail: {
|
|
215
|
-
selector: this.selector,
|
|
216
|
-
command: this.action,
|
|
217
|
-
state: this.checked
|
|
218
|
-
}, bubbles: true, composed: true }));
|
|
219
|
-
} else if (this.selector) {
|
|
220
|
-
this.emitTo('pb-toggle', {refresh: false});
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
210
|
+
this.signalReady();
|
|
224
211
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
212
|
+
waitOnce('pb-page-ready', () => {
|
|
213
|
+
if (this.global) {
|
|
214
|
+
this.dispatchEvent(
|
|
215
|
+
new CustomEvent('pb-global-toggle', {
|
|
216
|
+
detail: {
|
|
217
|
+
selector: this.selector,
|
|
218
|
+
command: this.action,
|
|
219
|
+
state: this.checked,
|
|
220
|
+
},
|
|
221
|
+
bubbles: true,
|
|
222
|
+
composed: true,
|
|
223
|
+
}),
|
|
224
|
+
);
|
|
225
|
+
} else if (this.selector) {
|
|
226
|
+
this.emitTo('pb-toggle', { refresh: false });
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
_setChecked(param) {
|
|
232
|
+
if (typeof param !== 'undefined') {
|
|
233
|
+
this.checked = param === this.on;
|
|
234
|
+
} else {
|
|
235
|
+
this.checked = this.default === this.on;
|
|
231
236
|
}
|
|
237
|
+
}
|
|
232
238
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
239
|
+
attributeChangedCallback(name, oldVal, newVal) {
|
|
240
|
+
super.attributeChangedCallback(name, oldVal, newVal);
|
|
241
|
+
switch (name) {
|
|
242
|
+
case this.on:
|
|
243
|
+
this.propertiesOn[this.name] = newVal;
|
|
244
|
+
break;
|
|
245
|
+
case this.off:
|
|
246
|
+
this.propertiesOff[this.name] = newVal;
|
|
247
|
+
break;
|
|
248
|
+
default:
|
|
249
|
+
break;
|
|
245
250
|
}
|
|
251
|
+
}
|
|
246
252
|
|
|
247
|
-
|
|
248
|
-
|
|
253
|
+
_changed() {
|
|
254
|
+
this.checked = this.shadowRoot.getElementById('checkbox').checked;
|
|
249
255
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
256
|
+
this._saveState();
|
|
257
|
+
if (!this.global) {
|
|
258
|
+
this.emitTo('pb-toggle', { refresh: !this.selector });
|
|
259
|
+
} else {
|
|
260
|
+
const state = {};
|
|
261
|
+
state[this.name] = this.checked ? this.on : this.off;
|
|
262
|
+
registry.commit(this, state);
|
|
258
263
|
}
|
|
264
|
+
}
|
|
259
265
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
266
|
+
_saveState() {
|
|
267
|
+
const state = registry.getState(this);
|
|
268
|
+
state[this.name] = this.checked ? this.on : this.off;
|
|
269
|
+
Object.assign(state, this.checked ? this.propertiesOn : this.propertiesOff);
|
|
270
|
+
if (this.selector) {
|
|
271
|
+
const config = {
|
|
272
|
+
selector: this.selector,
|
|
273
|
+
command: this.action,
|
|
274
|
+
state: this.checked,
|
|
275
|
+
};
|
|
276
|
+
if (this.global) {
|
|
277
|
+
this.dispatchEvent(
|
|
278
|
+
new CustomEvent('pb-global-toggle', { detail: config, bubbles: true, composed: true }),
|
|
279
|
+
);
|
|
280
|
+
} else {
|
|
281
|
+
state.selectors = state.selectors || [];
|
|
282
|
+
addSelector(config, state.selectors);
|
|
283
|
+
}
|
|
277
284
|
}
|
|
285
|
+
}
|
|
278
286
|
}
|
|
279
287
|
|
|
280
288
|
customElements.define('pb-toggle-feature', PbToggleFeature);
|