@pageboard/html 0.12.7 → 0.12.9
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/elements/embed.js +1 -1
- package/elements/fieldsets.js +2 -2
- package/elements/image.js +0 -4
- package/elements/inputs.js +4 -4
- package/elements/media.js +1 -1
- package/package.json +1 -1
- package/ui/embed-helper.js +2 -1
- package/ui/embed.js +14 -3
- package/ui/fieldset-list.js +7 -0
- package/ui/form.js +6 -4
- package/ui/input-file.js +1 -1
- package/ui/media.js +12 -0
package/elements/embed.js
CHANGED
|
@@ -40,7 +40,7 @@ exports.embed = {
|
|
|
40
40
|
};
|
|
41
41
|
},
|
|
42
42
|
tag: 'iframe,element-embed',
|
|
43
|
-
html: `<element-embed data-
|
|
43
|
+
html: `<element-embed data-url="[url]" data-query="[query|as:query]" id="[id]">
|
|
44
44
|
<a aria-hidden="true" class="linkable" href="[$loc.pathname][$loc.search][id|pre:%23]">[linkable|prune:*]#</a>
|
|
45
45
|
<iframe loading="lazy" allowfullscreen frameborder="0" scrolling="no"></iframe>
|
|
46
46
|
</element-embed>`,
|
package/elements/fieldsets.js
CHANGED
|
@@ -6,7 +6,7 @@ exports.fieldset = {
|
|
|
6
6
|
context: 'form//',
|
|
7
7
|
properties: {
|
|
8
8
|
name: {
|
|
9
|
-
title: 'Show if input
|
|
9
|
+
title: 'Show if input[name]',
|
|
10
10
|
type: 'string',
|
|
11
11
|
format: 'singleline',
|
|
12
12
|
nullable: true,
|
|
@@ -29,7 +29,7 @@ exports.fieldset = {
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
contents: "fieldset_legend block+",
|
|
32
|
-
html: '<fieldset class="[plain]" data-name="[name
|
|
32
|
+
html: '<fieldset class="[plain]" data-name="[name]" data-value="[value]" is="element-fieldset"></fieldset>',
|
|
33
33
|
scripts: ["../ui/fieldset.js"],
|
|
34
34
|
stylesheets: ['../ui/fieldset.css']
|
|
35
35
|
};
|
package/elements/image.js
CHANGED
|
@@ -132,8 +132,6 @@ exports.image = {
|
|
|
132
132
|
class="[display.fit|or:none] [display.horizontal|or:] [display.vertical|or:]"
|
|
133
133
|
alt="[alt]"
|
|
134
134
|
data-src="[url]"
|
|
135
|
-
data-width="[url|meta:width]"
|
|
136
|
-
data-height="[url|meta:height]"
|
|
137
135
|
data-crop="[crop.x|or:50];[crop.y|or:50];[crop.width|or:100];[crop.height|or:100];[crop.zoom|or:100]"
|
|
138
136
|
>
|
|
139
137
|
<div block-content="legend"></div>
|
|
@@ -281,8 +279,6 @@ exports.inlineImage = {
|
|
|
281
279
|
tag: "img",
|
|
282
280
|
html: `<img is="element-img"
|
|
283
281
|
data-src="[url]"
|
|
284
|
-
data-width="[url|meta:width]"
|
|
285
|
-
data-height="[url|meta:height]"
|
|
286
282
|
data-crop="[crop.x];[crop.y];[crop.width];[crop.height];[crop.zoom]"
|
|
287
283
|
alt="" class="ui inline image
|
|
288
284
|
[display.avatar]
|
package/elements/inputs.js
CHANGED
|
@@ -323,8 +323,8 @@ exports.input_checkbox = {
|
|
|
323
323
|
<div class="ui [toggle] checkbox">
|
|
324
324
|
<input type="checkbox" required="[required]" disabled="[disabled]"
|
|
325
325
|
name="[name]" value="[value]" checked="[checked]"
|
|
326
|
-
id="for-[name][value|
|
|
327
|
-
<label block-content="label" for="for-[name][value|
|
|
326
|
+
id="for-[name][value|pre:-]" />
|
|
327
|
+
<label block-content="label" for="for-[name][value|pre:-]">Label</label>
|
|
328
328
|
</div>
|
|
329
329
|
</div>`,
|
|
330
330
|
stylesheets: [
|
|
@@ -370,8 +370,8 @@ exports.input_radio = {
|
|
|
370
370
|
<div class="ui radio checkbox">
|
|
371
371
|
<input type="radio" disabled="[disabled]"
|
|
372
372
|
name="[name]" value="[value|or:]" checked="[checked]"
|
|
373
|
-
id="for-[name][value|
|
|
374
|
-
<label block-content="label" for="for-[name][value|
|
|
373
|
+
id="for-[name][value|pre:-]" />
|
|
374
|
+
<label block-content="label" for="for-[name][value|pre:-]">Label</label>
|
|
375
375
|
</div>
|
|
376
376
|
</div>`,
|
|
377
377
|
stylesheets: [
|
package/elements/media.js
CHANGED
|
@@ -67,7 +67,7 @@ exports.video = {
|
|
|
67
67
|
},
|
|
68
68
|
html: `<video is="element-video" data-src="[url]" class="[display.fit|or:none]"
|
|
69
69
|
preload="metadata" autoplay="[autoplay]" loop="[loop]"
|
|
70
|
-
muted="[muted]" controls="[controls]"
|
|
70
|
+
muted="[muted]" controls="[controls]"></video>`,
|
|
71
71
|
scripts: [
|
|
72
72
|
'../ui/media.js'
|
|
73
73
|
],
|
package/package.json
CHANGED
package/ui/embed-helper.js
CHANGED
package/ui/embed.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
class HTMLElementEmbed extends Page.Element {
|
|
2
2
|
static defaults = {
|
|
3
3
|
src: null,
|
|
4
|
+
query: null,
|
|
4
5
|
hash: null
|
|
5
6
|
};
|
|
6
7
|
static revealRatio = 0.2;
|
|
@@ -12,6 +13,16 @@ class HTMLElementEmbed extends Page.Element {
|
|
|
12
13
|
get currentSrc() {
|
|
13
14
|
return this.querySelector('iframe')?.src ?? "about:blank";
|
|
14
15
|
}
|
|
16
|
+
patch(state) {
|
|
17
|
+
const meta = state.scope.$hrefs?.[this.options.src];
|
|
18
|
+
if (meta) {
|
|
19
|
+
this.title = meta.title;
|
|
20
|
+
if (meta.source) this.setAttribute('data-source', meta.source);
|
|
21
|
+
this.style.paddingBottom = `calc(${meta.height} / ${meta.width} * 100%)`;
|
|
22
|
+
} else {
|
|
23
|
+
console.warn("Missing href", this.options.src);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
15
26
|
consent(state) {
|
|
16
27
|
const consent = state.scope.$consent;
|
|
17
28
|
this.classList.toggle('denied', consent == "no");
|
|
@@ -26,7 +37,7 @@ class HTMLElementEmbed extends Page.Element {
|
|
|
26
37
|
|
|
27
38
|
const opts = this.options;
|
|
28
39
|
const prev = Page.parse(this.currentSrc);
|
|
29
|
-
const cur = Page.parse(
|
|
40
|
+
const cur = Page.parse(this.dataset.source || this.options.src || "about:blank");
|
|
30
41
|
cur.hash = opts.hash;
|
|
31
42
|
const curSrc = cur.toString();
|
|
32
43
|
|
|
@@ -55,8 +66,8 @@ class HTMLElementEmbed extends Page.Element {
|
|
|
55
66
|
this.classList.add('error');
|
|
56
67
|
}
|
|
57
68
|
handleAllMessage(e, state) {
|
|
58
|
-
if (!e.origin || !this.
|
|
59
|
-
if (this.
|
|
69
|
+
if (!e.origin || !this.currentSrc) return;
|
|
70
|
+
if (this.currentSrc?.startsWith(e.origin) == false) return;
|
|
60
71
|
if (this.receiveMessage) this.receiveMessage(e.data ?? {});
|
|
61
72
|
}
|
|
62
73
|
close() {
|
package/ui/fieldset-list.js
CHANGED
|
@@ -138,6 +138,13 @@ class HTMLElementFieldsetList extends Page.Element {
|
|
|
138
138
|
for (const node of inputs) {
|
|
139
139
|
const name = this.#incrementkey('[fielditem.index]', node.name);
|
|
140
140
|
if (name != null) {
|
|
141
|
+
const id = node.id;
|
|
142
|
+
if (id?.startsWith(`for-${node.name}`)) {
|
|
143
|
+
node.id = id.replace(node.name, name);
|
|
144
|
+
}
|
|
145
|
+
if (node.nextElementSibling?.htmlFor == id) {
|
|
146
|
+
node.nextElementSibling.htmlFor = node.id;
|
|
147
|
+
}
|
|
141
148
|
node.name = name;
|
|
142
149
|
}
|
|
143
150
|
}
|
package/ui/form.js
CHANGED
|
@@ -299,7 +299,7 @@ class HTMLElementForm extends Page.create(HTMLFormElement) {
|
|
|
299
299
|
if (loc.samePathname(state)) {
|
|
300
300
|
loc.query = { ...state.query, ...loc.query };
|
|
301
301
|
}
|
|
302
|
-
const nstate = this.ignoreInputChange
|
|
302
|
+
const nstate = this.ignoreInputChange && state.referrer
|
|
303
303
|
? state.replace(loc)
|
|
304
304
|
: state.push(loc);
|
|
305
305
|
nstate.catch(state => {
|
|
@@ -316,9 +316,11 @@ class HTMLElementForm extends Page.create(HTMLFormElement) {
|
|
|
316
316
|
const form = this;
|
|
317
317
|
form.classList.add('loading');
|
|
318
318
|
|
|
319
|
-
await Promise.all(
|
|
320
|
-
|
|
321
|
-
|
|
319
|
+
await Promise.all(
|
|
320
|
+
Array.from(form.elements)
|
|
321
|
+
.filter(node => Boolean(node.presubmit) && !node.disabled)
|
|
322
|
+
.map(input => input.presubmit(state))
|
|
323
|
+
);
|
|
322
324
|
|
|
323
325
|
const { scope } = state;
|
|
324
326
|
scope.$request = form.read(true);
|
package/ui/input-file.js
CHANGED
package/ui/media.js
CHANGED
|
@@ -31,6 +31,18 @@ class HTMLElementVideo extends HTMLElementMediaConstructor(Page.create(HTMLVideo
|
|
|
31
31
|
static defaults = {
|
|
32
32
|
dataSrc: null
|
|
33
33
|
};
|
|
34
|
+
patch(state) {
|
|
35
|
+
super.patch(state);
|
|
36
|
+
const { url } = this.options;
|
|
37
|
+
const meta = state.scope.$hrefs?.[url];
|
|
38
|
+
if (meta) {
|
|
39
|
+
this.title = meta.title;
|
|
40
|
+
this.width = meta.width;
|
|
41
|
+
this.height = meta.height;
|
|
42
|
+
} else {
|
|
43
|
+
console.warn("Missing href", url);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
34
46
|
}
|
|
35
47
|
Page.define('element-video', HTMLElementVideo, 'video');
|
|
36
48
|
|