@schukai/monster 3.71.0 → 3.71.2
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/CHANGELOG.md +16 -0
- package/README.md +1 -8
- package/package.json +1 -1
- package/source/components/form/reload.mjs +211 -211
- package/test/web/test.html +0 -6
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
## [3.71.2] - 2024-06-25
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- data-monster-option-filter [#194](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/194)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## [3.71.1] - 2024-06-25
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- remove polifill [#218](https://gitlab.schukai.com/oss/libraries/javascript/monster/issues/218)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
5
21
|
## [3.71.0] - 2024-06-25
|
|
6
22
|
|
|
7
23
|
### Add Features
|
package/README.md
CHANGED
|
@@ -76,14 +76,7 @@ Voilà!
|
|
|
76
76
|
### Polyfill
|
|
77
77
|
|
|
78
78
|
While we strive to work around some browser bugs, generally, we do not use polyfills or feature detection.
|
|
79
|
-
However, many functions can be supplemented through
|
|
80
|
-
|
|
81
|
-
```html
|
|
82
|
-
<script id="polyfill"
|
|
83
|
-
src="https://polyfill.io/v3/polyfill.min.js?features=AbortController,Array.prototype.entries,Array.prototype.fill,Array.prototype.find,Array.prototype.includes,Array.prototype.keys,Array.prototype.sort,Array.prototype.values,atob,AudioContext,blissfuljs,Blob,CharacterData.prototype.nextElementSibling,CharacterData.prototype.previousElementSibling,CharacterData.prototype.remove,console,console.error,console.log,CSS.supports,CustomEvent,DocumentFragment,DocumentFragment.prototype.append,DocumentFragment.prototype.prepend,DOMRect,DOMTokenList,DOMTokenList.prototype.forEach,DOMTokenList.prototype.replace,Element.prototype.append,Element.prototype.getAttributeNames,Element.prototype.prepend,Element.prototype.remove,Element.prototype.scroll,Event,EventSource,fetch,Function.prototype.name,globalThis,HTMLDocument,HTMLPictureElement,HTMLTemplateElement,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.DateTimeFormat,Intl.NumberFormat,Intl.PluralRules,Map,Math.log2,MutationObserver,Node.prototype.contains,Node.prototype.getRootNode,Node.prototype.isConnected,Node.prototype.isSameNode,NodeList.prototype.forEach,Number.isFinite,Number.isInteger,Object.assign,Object.entries,Object.freeze,Object.getOwnPropertyNames,Object.prototype.toString,Reflect,Reflect.defineProperty,Reflect.get,Reflect.getOwnPropertyDescriptor,Reflect.setPrototypeOf,requestAnimationFrame,ResizeObserver,Set,String.prototype.includes,String.prototype.matchAll,String.prototype.padStart,Symbol,Symbol.for,Symbol.hasInstance,Symbol.iterator,TextDecoder,TextEncoder,Uint16Array,Uint8Array,URLSearchParams,WeakSet"
|
|
84
|
-
crossorigin="anonymous"
|
|
85
|
-
referrerpolicy="no-referrer"></script>
|
|
86
|
-
```
|
|
79
|
+
However, many functions can be supplemented through polyfills, thus enhancing compatibility.
|
|
87
80
|
|
|
88
81
|
## Questions
|
|
89
82
|
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"author":"schukai GmbH","dependencies":{"@floating-ui/dom":"^1.6.
|
|
1
|
+
{"author":"schukai GmbH","dependencies":{"@floating-ui/dom":"^1.6.6","@popperjs/core":"^2.11.8"},"description":"Monster is a simple library for creating fast, robust and lightweight websites.","homepage":"https://monsterjs.org/","keywords":["framework","web","dom","css","sass","mobile-first","app","front-end","templates","schukai","core","shopcloud","alvine","monster","buildmap","stack","observer","observable","uuid","node","nodelist","css-in-js","logger","log","theme"],"license":"AGPL 3.0","main":"source/monster.mjs","module":"source/monster.mjs","name":"@schukai/monster","repository":{"type":"git","url":"https://gitlab.schukai.com/oss/libraries/javascript/monster.git"},"type":"module","version":"3.71.2"}
|
|
@@ -12,24 +12,24 @@
|
|
|
12
12
|
* SPDX-License-Identifier: AGPL-3.0
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import {instanceSymbol} from "../../constants.mjs";
|
|
16
|
+
import {addAttributeToken} from "../../dom/attributes.mjs";
|
|
17
17
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
ATTRIBUTE_ERRORMESSAGE,
|
|
19
|
+
ATTRIBUTE_ROLE,
|
|
20
20
|
} from "../../dom/constants.mjs";
|
|
21
21
|
import {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
assembleMethodSymbol,
|
|
23
|
+
attributeObserverSymbol,
|
|
24
|
+
CustomElement,
|
|
25
|
+
initMethodSymbol,
|
|
26
|
+
registerCustomElement,
|
|
27
27
|
} from "../../dom/customelement.mjs";
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
28
|
+
import {isString} from "../../types/is.mjs";
|
|
29
|
+
import {ATTRIBUTE_FORM_RELOAD, ATTRIBUTE_FORM_URL} from "./constants.mjs";
|
|
30
|
+
import {loadAndAssignContent} from "./util/fetch.mjs";
|
|
31
31
|
|
|
32
|
-
export {
|
|
32
|
+
export {Reload};
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* @private
|
|
@@ -106,128 +106,128 @@ const intersectionObserverWasInitialized = Symbol("wasInitialized");
|
|
|
106
106
|
* @fires Monster.Components.event:monster-fetched
|
|
107
107
|
*/
|
|
108
108
|
class Reload extends CustomElement {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
109
|
+
/**
|
|
110
|
+
* This method is called by the `instanceof` operator.
|
|
111
|
+
* @returns {symbol}
|
|
112
|
+
* @since 2.1.0
|
|
113
|
+
*/
|
|
114
|
+
static get [instanceSymbol]() {
|
|
115
|
+
return Symbol.for("@schukai/monster/components/form/reload");
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* To set the options via the html tag the attribute `data-monster-options` must be used.
|
|
120
|
+
* @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
|
|
121
|
+
*
|
|
122
|
+
* The individual configuration values can be found in the table.
|
|
123
|
+
*
|
|
124
|
+
* @property {Object} templates Template definitions
|
|
125
|
+
* @property {string} templates.main Main template
|
|
126
|
+
* @property {string} url=undefined
|
|
127
|
+
* @property {string} reload=undefined currently the values defined are `onshow` and `always`. The default `onshow` removes the IntersectionObserver. This means that the content is only loaded once. reloading of the content does not occur.
|
|
128
|
+
* @property {string} filter=undefined dom selectors to search for elements, if undefined then everything is taken
|
|
129
|
+
* @property {Monster.Components.Form.Processor[]} processors
|
|
130
|
+
* @property {Object} fetch Fetch [see Using Fetch mozilla.org](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
|
|
131
|
+
* @property {String} fetch.redirect=error
|
|
132
|
+
* @property {String} fetch.method=GET
|
|
133
|
+
* @property {String} fetch.mode=same-origin
|
|
134
|
+
* @property {String} fetch.credentials=same-origin
|
|
135
|
+
* @property {Object} fetch.headers={"accept":"text/html"}}
|
|
136
|
+
*/
|
|
137
|
+
get defaults() {
|
|
138
|
+
return Object.assign(
|
|
139
|
+
{},
|
|
140
|
+
super.defaults,
|
|
141
|
+
{
|
|
142
|
+
templates: {
|
|
143
|
+
main: getTemplate.call(this),
|
|
144
|
+
},
|
|
145
|
+
shadowMode: null,
|
|
146
|
+
url: null,
|
|
147
|
+
reload: "onshow",
|
|
148
|
+
filter: null,
|
|
149
|
+
fetch: {
|
|
150
|
+
redirect: "error",
|
|
151
|
+
method: "GET",
|
|
152
|
+
mode: "same-origin",
|
|
153
|
+
credentials: "same-origin",
|
|
154
|
+
headers: {
|
|
155
|
+
accept: "text/html",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
initOptionsFromArguments.call(this),
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* This method determines which attributes are to be monitored by `attributeChangedCallback()`.
|
|
165
|
+
*
|
|
166
|
+
* @return {string[]}
|
|
167
|
+
*/
|
|
168
|
+
static get observedAttributes() {
|
|
169
|
+
const list = super.observedAttributes;
|
|
170
|
+
list.push(ATTRIBUTE_FORM_URL);
|
|
171
|
+
return list;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @return {void}
|
|
176
|
+
*/
|
|
177
|
+
[initMethodSymbol]() {
|
|
178
|
+
super[initMethodSymbol]();
|
|
179
|
+
|
|
180
|
+
// data-monster-options
|
|
181
|
+
this[attributeObserverSymbol][ATTRIBUTE_FORM_URL] = (url) => {
|
|
182
|
+
if (this.hasAttribute(ATTRIBUTE_FORM_URL)) {
|
|
183
|
+
this.setOption("url", new URL(url, document.location).toString());
|
|
184
|
+
} else {
|
|
185
|
+
this.setOption("url", undefined);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* This method is called internal and should not be called directly.
|
|
192
|
+
* @throws {Error} missing default slot
|
|
193
|
+
* @throws {Error} no shadow-root is defined
|
|
194
|
+
* @throws {Error} missing url
|
|
195
|
+
* @throws {Error} we won't be able to read the data
|
|
196
|
+
* @throws {Error} request failed
|
|
197
|
+
* @throws {Error} not found
|
|
198
|
+
* @throws {Error} undefined status or type
|
|
199
|
+
* @fires Monster.Components.event:monster-fetched
|
|
200
|
+
* @return {Monster.Components.Form.Form}
|
|
201
|
+
*/
|
|
202
|
+
[assembleMethodSymbol]() {
|
|
203
|
+
super[assembleMethodSymbol]();
|
|
204
|
+
initIntersectionObserver.call(this);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* This method is called internal and should not be called directly.
|
|
209
|
+
*
|
|
210
|
+
* @return {string}
|
|
211
|
+
*/
|
|
212
|
+
static getTag() {
|
|
213
|
+
return "monster-reload";
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* load content from url
|
|
218
|
+
*
|
|
219
|
+
* It is important to know that with this function the loading is executed
|
|
220
|
+
* directly. it is loaded as well when the element is not visible.
|
|
221
|
+
*
|
|
222
|
+
* @param {string|undefined} url
|
|
223
|
+
*/
|
|
224
|
+
fetch(url) {
|
|
225
|
+
if (isString(url) || url instanceof URL) {
|
|
226
|
+
this.setAttribute(ATTRIBUTE_FORM_URL, `${url}`);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return loadContent.call(this);
|
|
230
|
+
}
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
/**
|
|
@@ -241,19 +241,19 @@ class Reload extends CustomElement {
|
|
|
241
241
|
* @return {object}
|
|
242
242
|
*/
|
|
243
243
|
function initOptionsFromArguments() {
|
|
244
|
-
|
|
244
|
+
const options = {};
|
|
245
245
|
|
|
246
|
-
|
|
246
|
+
const url = this.getAttribute(ATTRIBUTE_FORM_URL);
|
|
247
247
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
if (isString(url)) {
|
|
249
|
+
options["url"] = new URL(url, document.location).toString();
|
|
250
|
+
}
|
|
251
251
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
if (this.hasAttribute(ATTRIBUTE_FORM_RELOAD)) {
|
|
253
|
+
options["reload"] = this.getAttribute(ATTRIBUTE_FORM_RELOAD).toLowerCase();
|
|
254
|
+
}
|
|
255
255
|
|
|
256
|
-
|
|
256
|
+
return options;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
/**
|
|
@@ -268,37 +268,37 @@ function initOptionsFromArguments() {
|
|
|
268
268
|
* @fires Monster.Components.event:monster-fetched
|
|
269
269
|
*/
|
|
270
270
|
function initIntersectionObserver() {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
271
|
+
if (this[intersectionObserverWasInitialized] === true) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
this[intersectionObserverWasInitialized] = true;
|
|
276
|
+
|
|
277
|
+
const options = {
|
|
278
|
+
threshold: [0.5],
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
const callback = (entries, observer) => {
|
|
282
|
+
for (const [, entry] of entries.entries()) {
|
|
283
|
+
if (entry.isIntersecting === true) {
|
|
284
|
+
// undefined or always do the same
|
|
285
|
+
if (this.getOption("reload") === "onshow") {
|
|
286
|
+
observer.disconnect();
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
try {
|
|
290
|
+
loadContent.call(this).catch((e) => {
|
|
291
|
+
addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
|
|
292
|
+
});
|
|
293
|
+
} catch (e) {
|
|
294
|
+
addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.toString());
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
const observer = new IntersectionObserver(callback, options);
|
|
301
|
+
observer.observe(this);
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
/**
|
|
@@ -318,41 +318,41 @@ function initIntersectionObserver() {
|
|
|
318
318
|
* @return {Promise}
|
|
319
319
|
*/
|
|
320
320
|
function loadContent() {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
321
|
+
const url = this.getOption("url", undefined);
|
|
322
|
+
if (!isString(url) || url === "") {
|
|
323
|
+
throw new Error("missing url");
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
const options = this.getOption("fetch", {});
|
|
327
|
+
|
|
328
|
+
let parentNode = this;
|
|
329
|
+
if (this.shadowRoot) {
|
|
330
|
+
parentNode = this.shadowRoot;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
let container = parentNode.querySelector(`[${ATTRIBUTE_ROLE}=container]`);
|
|
334
|
+
let currentDisplayMode = container?.style?.display;
|
|
335
|
+
|
|
336
|
+
if (currentDisplayMode === undefined) {
|
|
337
|
+
currentDisplayMode = "inherit";
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (!(container instanceof HTMLElement)) {
|
|
341
|
+
container = document.createElement("div");
|
|
342
|
+
container.style.display = "none";
|
|
343
|
+
container.setAttribute(ATTRIBUTE_ROLE, "container");
|
|
344
|
+
parentNode.appendChild(container);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return loadAndAssignContent(container, url, options, this.getOption("filter"))
|
|
348
|
+
.then(() => {
|
|
349
|
+
if (currentDisplayMode !== undefined) {
|
|
350
|
+
container.style.display = currentDisplayMode;
|
|
351
|
+
}
|
|
352
|
+
})
|
|
353
|
+
.catch((e) => {
|
|
354
|
+
throw e;
|
|
355
|
+
});
|
|
356
356
|
}
|
|
357
357
|
|
|
358
358
|
/**
|
|
@@ -360,7 +360,7 @@ function loadContent() {
|
|
|
360
360
|
* @return {string}
|
|
361
361
|
*/
|
|
362
362
|
function getTemplate() {
|
|
363
|
-
|
|
363
|
+
return this.innerHTML;
|
|
364
364
|
}
|
|
365
365
|
|
|
366
366
|
registerCustomElement(Reload);
|
package/test/web/test.html
CHANGED
|
@@ -5,12 +5,6 @@
|
|
|
5
5
|
<title>Mocha Monster</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="mocha.css"/>
|
|
8
|
-
<script id="polyfill" src="https://polyfill.io/v3/polyfill.min.js?features=AbortController,Array.prototype.entries,Array.prototype.fill,Array.prototype.find,Array.prototype.includes,Array.prototype.keys,Array.prototype.sort,Array.prototype.values,atob,AudioContext,blissfuljs,Blob,CharacterData.prototype.nextElementSibling,CharacterData.prototype.previousElementSibling,CharacterData.prototype.remove,console,console.error,console.log,CSS.supports,CustomEvent,DocumentFragment,DocumentFragment.prototype.append,DocumentFragment.prototype.prepend,DOMRect,DOMTokenList,DOMTokenList.prototype.forEach,DOMTokenList.prototype.replace,Element.prototype.append,Element.prototype.getAttributeNames,Element.prototype.prepend,Element.prototype.remove,Element.prototype.scroll,Event,EventSource,fetch,Function.prototype.name,globalThis,HTMLDocument,HTMLPictureElement,HTMLTemplateElement,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.DateTimeFormat,Intl.NumberFormat,Intl.PluralRules,Map,Math.log2,MutationObserver,Node.prototype.contains,Node.prototype.getRootNode,Node.prototype.isConnected,Node.prototype.isSameNode,NodeList.prototype.forEach,Number.isFinite,Number.isInteger,Object.assign,Object.entries,Object.freeze,Object.getOwnPropertyNames,Object.prototype.toString,Reflect,Reflect.defineProperty,Reflect.get,Reflect.getOwnPropertyDescriptor,Reflect.setPrototypeOf,requestAnimationFrame,ResizeObserver,Set,String.prototype.includes,String.prototype.matchAll,String.prototype.padStart,Symbol,Symbol.for,Symbol.hasInstance,Symbol.iterator,TextDecoder,TextEncoder,Uint16Array,Uint8Array,URLSearchParams,WeakSet"
|
|
9
|
-
src="https://polyfill.io/v3/polyfill.min.js?features=Array.from,Array.isArray,Array.prototype.entries,Array.prototype.every,Array.prototype.fill,Array.prototype.filter,Array.prototype.find,Array.prototype.forEach,Array.prototype.includes,Array.prototype.indexOf,Array.prototype.keys,Array.prototype.lastIndexOf,Array.prototype.map,Array.prototype.reduce,Array.prototype.some,Array.prototype.sort,Array.prototype.values,ArrayBuffer,atob,Blob,console,CustomEvent,DataView,Date.prototype.toISOString,document,Document,DocumentFragment,Element,Event,fetch,Function.prototype.bind,getComputedStyle,globalThis,HTMLDocument,HTMLTemplateElement,IntersectionObserver,Intl,JSON,Map,Math.log2,MutationObserver,Number.isFinite,Number.isInteger,Object.assign,Object.defineProperty,Object.entries,Object.freeze,Object.getOwnPropertyDescriptor,Object.getOwnPropertyNames,Object.getPrototypeOf,Object.keys,Promise,Reflect,Reflect.defineProperty,Reflect.get,Reflect.getOwnPropertyDescriptor,Reflect.setPrototypeOf,requestAnimationFrame,ResizeObserver,Set,String.prototype.endsWith,String.prototype.includes,String.prototype.matchAll,String.prototype.padStart,String.prototype.startsWith,String.prototype.trim,Symbol,Symbol.for,Symbol.hasInstance,Symbol.iterator,Uint16Array,Uint8Array,URL,WeakMap,WeakSet"
|
|
10
|
-
src="https://polyfill.io/v3/polyfill.min.js?features=Array.from,Array.isArray,Array.prototype.entries,Array.prototype.fill,Array.prototype.forEach,Array.prototype.indexOf,Array.prototype.keys,Array.prototype.lastIndexOf,Array.prototype.map,Array.prototype.reduce,Array.prototype.sort,ArrayBuffer,atob,DataView,document,DocumentFragment,Element,Event,globalThis,HTMLDocument,HTMLTemplateElement,JSON,Map,Math.log2,Number.isInteger,Object.assign,Object.defineProperty,Object.entries,Object.getOwnPropertyDescriptor,Object.getPrototypeOf,Object.keys,Promise,Reflect,Reflect.defineProperty,Reflect.get,Reflect.getOwnPropertyDescriptor,Reflect.setPrototypeOf,Set,String.prototype.endsWith,String.prototype.matchAll,String.prototype.padStart,String.prototype.startsWith,String.prototype.trim,Symbol,Symbol.iterator,WeakMap,WeakSet"
|
|
11
|
-
crossorigin="anonymous"
|
|
12
|
-
referrerpolicy="no-referrer"></script>
|
|
13
|
-
<script src="https://cdn.jsdelivr.net/npm/element-internals-polyfill"></script>
|
|
14
8
|
|
|
15
9
|
</head>
|
|
16
10
|
<body>
|