haori 0.59.4 → 0.59.5
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/README.ja.md +1 -1
- package/README.md +1 -1
- package/dist/haori.cjs.js +18 -18
- package/dist/haori.es.js +439 -410
- package/dist/haori.iife.js +18 -18
- package/dist/index.d.ts +25 -3
- package/package.json +1 -1
package/dist/haori.es.js
CHANGED
|
@@ -120,7 +120,7 @@ const ee = class ee {
|
|
|
120
120
|
ee._prefix = "data-", ee._runtime = He, ee._strictBind = !1;
|
|
121
121
|
let c = ee;
|
|
122
122
|
typeof document < "u" && (document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", c.detect) : c.detect());
|
|
123
|
-
class
|
|
123
|
+
class g {
|
|
124
124
|
/**
|
|
125
125
|
* 開発モードでのみコンソールに情報を出力します。
|
|
126
126
|
*
|
|
@@ -164,11 +164,11 @@ const Rt = /^[A-Za-z_$][A-Za-z0-9_$]*(\.[A-Za-z_$][A-Za-z0-9_$]*)*$/, Ge = "new:
|
|
|
164
164
|
static register(e, t) {
|
|
165
165
|
const r = typeof e == "string" ? e.trim() : "";
|
|
166
166
|
if (r === "") {
|
|
167
|
-
|
|
167
|
+
g.error("[Haori]", "Enhancer name is required.");
|
|
168
168
|
return;
|
|
169
169
|
}
|
|
170
170
|
if (!t || typeof t.init != "function") {
|
|
171
|
-
|
|
171
|
+
g.error("[Haori]", `Enhancer "${r}" must have an init function.`);
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
x.enhancers.set(r, t), x.warnedUnknownNames.delete(r), typeof document < "u" && document.body && x.forEachTarget(document.body, (i) => {
|
|
@@ -369,7 +369,7 @@ const Rt = /^[A-Za-z_$][A-Za-z0-9_$]*(\.[A-Za-z_$][A-Za-z0-9_$]*)*$/, Ge = "new:
|
|
|
369
369
|
*/
|
|
370
370
|
static resolveGlobal(e) {
|
|
371
371
|
if (!Rt.test(e))
|
|
372
|
-
return
|
|
372
|
+
return g.error(
|
|
373
373
|
"[Haori]",
|
|
374
374
|
`${c.prefix}enhance-new accepts a dot-separated global reference only: ${e}`
|
|
375
375
|
), null;
|
|
@@ -382,7 +382,7 @@ const Rt = /^[A-Za-z_$][A-Za-z0-9_$]*(\.[A-Za-z_$][A-Za-z0-9_$]*)*$/, Ge = "new:
|
|
|
382
382
|
if (t = t[r], t === void 0)
|
|
383
383
|
break;
|
|
384
384
|
}
|
|
385
|
-
return typeof t != "function" ? (V.isEnabled() && !x.warnedMissingGlobals.has(e) && (x.warnedMissingGlobals.add(e),
|
|
385
|
+
return typeof t != "function" ? (V.isEnabled() && !x.warnedMissingGlobals.has(e) && (x.warnedMissingGlobals.add(e), g.warn(
|
|
386
386
|
"[Haori]",
|
|
387
387
|
`${c.prefix}enhance-new could not resolve the global reference (load the library before Haori runs): ${e}`
|
|
388
388
|
)), null) : t;
|
|
@@ -394,7 +394,7 @@ const Rt = /^[A-Za-z_$][A-Za-z0-9_$]*(\.[A-Za-z_$][A-Za-z0-9_$]*)*$/, Ge = "new:
|
|
|
394
394
|
* @returns 戻り値はありません。
|
|
395
395
|
*/
|
|
396
396
|
static warnUnknownName(e) {
|
|
397
|
-
!V.isEnabled() || x.warnedUnknownNames.has(e) || (x.warnedUnknownNames.add(e),
|
|
397
|
+
!V.isEnabled() || x.warnedUnknownNames.has(e) || (x.warnedUnknownNames.add(e), g.warn(
|
|
398
398
|
"[Haori]",
|
|
399
399
|
`Enhancer "${e}" is not registered yet; the declaration is kept pending and applied when it is registered (Haori.enhancers.register('${e}', {init(el) {...}})).`
|
|
400
400
|
));
|
|
@@ -414,7 +414,7 @@ const Rt = /^[A-Za-z_$][A-Za-z0-9_$]*(\.[A-Za-z_$][A-Za-z0-9_$]*)*$/, Ge = "new:
|
|
|
414
414
|
try {
|
|
415
415
|
t();
|
|
416
416
|
} catch (i) {
|
|
417
|
-
|
|
417
|
+
g.error("[Haori]", `${e} failed:`, i);
|
|
418
418
|
}
|
|
419
419
|
};
|
|
420
420
|
x.mutationCapture ? x.mutationCapture(r) : r();
|
|
@@ -555,16 +555,16 @@ function ct(b, e, t = {}) {
|
|
|
555
555
|
a.add(d);
|
|
556
556
|
for (let d = Math.max(0, i - n); d <= Math.min(r - 1, i + n); d += 1)
|
|
557
557
|
a.add(d);
|
|
558
|
-
const o = Array.from(a).sort((d,
|
|
558
|
+
const o = Array.from(a).sort((d, m) => d - m), l = [];
|
|
559
559
|
let u = null;
|
|
560
560
|
for (const d of o) {
|
|
561
561
|
if (u !== null && d - u > 1)
|
|
562
562
|
if (d - u === 2) {
|
|
563
|
-
const
|
|
563
|
+
const m = u + 1;
|
|
564
564
|
l.push({
|
|
565
|
-
page:
|
|
566
|
-
label:
|
|
567
|
-
active:
|
|
565
|
+
page: m,
|
|
566
|
+
label: m + 1,
|
|
567
|
+
active: m === i,
|
|
568
568
|
ellipsis: !1
|
|
569
569
|
});
|
|
570
570
|
} else
|
|
@@ -578,7 +578,7 @@ function ct(b, e, t = {}) {
|
|
|
578
578
|
}
|
|
579
579
|
return l;
|
|
580
580
|
}
|
|
581
|
-
const Ft = /^(\d{4})-(\d{1,2})$/,
|
|
581
|
+
const Ft = /^(\d{4})-(\d{1,2})$/, kt = 1200;
|
|
582
582
|
function xe(b, e) {
|
|
583
583
|
const t = Number(b);
|
|
584
584
|
return Number.isFinite(t) ? Math.trunc(t) : e;
|
|
@@ -595,7 +595,7 @@ function Oe(b, e) {
|
|
|
595
595
|
const n = Number.isFinite(e) ? Math.trunc(e) : 0, s = r * 12 + (i - 1) + n, a = Math.floor(s / 12), o = s - a * 12 + 1;
|
|
596
596
|
return `${String(a).padStart(4, "0")}-${ue(o)}`;
|
|
597
597
|
}
|
|
598
|
-
function
|
|
598
|
+
function Nt(b) {
|
|
599
599
|
if (typeof b == "string" && b.trim() !== "")
|
|
600
600
|
return Oe(b, 0);
|
|
601
601
|
const e = /* @__PURE__ */ new Date();
|
|
@@ -605,10 +605,10 @@ function ut(b, e) {
|
|
|
605
605
|
const t = Math.trunc(Number(b));
|
|
606
606
|
if (!Number.isFinite(t) || t < 0)
|
|
607
607
|
return [];
|
|
608
|
-
const r =
|
|
608
|
+
const r = Nt(e);
|
|
609
609
|
if (r === "")
|
|
610
610
|
return [];
|
|
611
|
-
const i = Math.min(t,
|
|
611
|
+
const i = Math.min(t, kt), n = [];
|
|
612
612
|
for (let s = 0; s <= i; s += 1) {
|
|
613
613
|
const a = Oe(r, -s);
|
|
614
614
|
n.push({ targetMonth: a, label: a.replace(/-/g, "/") });
|
|
@@ -738,13 +738,13 @@ class We {
|
|
|
738
738
|
const r = await t.task();
|
|
739
739
|
t.resolve(r);
|
|
740
740
|
} catch (r) {
|
|
741
|
-
t.reject(r),
|
|
741
|
+
t.reject(r), g.error("[Haori]", `Task ${t.timestamp} failed:`, r);
|
|
742
742
|
}
|
|
743
743
|
if (performance.now() - e > this.MAX_BUDGET)
|
|
744
744
|
break;
|
|
745
745
|
}
|
|
746
746
|
} catch (e) {
|
|
747
|
-
|
|
747
|
+
g.error("[Haori]", "Error processing queue:", e);
|
|
748
748
|
} finally {
|
|
749
749
|
this.processing = !1, this.queue.length > 0 && this.scheduleProcessing();
|
|
750
750
|
}
|
|
@@ -979,7 +979,7 @@ const R = class R {
|
|
|
979
979
|
const t = e.filter(
|
|
980
980
|
(r) => !this.loggedUnusableBindingKeys.has(r)
|
|
981
981
|
);
|
|
982
|
-
t.length !== 0 && (t.forEach((r) => this.loggedUnusableBindingKeys.add(r)),
|
|
982
|
+
t.length !== 0 && (t.forEach((r) => this.loggedUnusableBindingKeys.add(r)), g.warn(
|
|
983
983
|
"[Haori]",
|
|
984
984
|
`Binding key(s) that cannot be used as identifiers are excluded from expressions: ${t.join(", ")}. Read them as haori.data['key'], or use ${c.prefix}form-object to collect nested values.`
|
|
985
985
|
));
|
|
@@ -1123,7 +1123,7 @@ let ${e.join(", ")};`;
|
|
|
1123
1123
|
if (this.loggedBlockedIdentifierExpressions.has(e))
|
|
1124
1124
|
return;
|
|
1125
1125
|
const t = this.detectForbiddenIdentifiers(e);
|
|
1126
|
-
t.length !== 0 && (this.loggedBlockedIdentifierExpressions.add(e),
|
|
1126
|
+
t.length !== 0 && (this.loggedBlockedIdentifierExpressions.add(e), g.warn(
|
|
1127
1127
|
"[Haori]",
|
|
1128
1128
|
"Expression references blocked identifier(s): " + t.join(", ") + ". These are blocked in expressions and evaluate to undefined (often the cause of an empty result). Use spread {...a, ...b} instead of Object.assign.",
|
|
1129
1129
|
e
|
|
@@ -1265,7 +1265,7 @@ let ${e.join(", ")};`;
|
|
|
1265
1265
|
static recordUnresolvedIdentifiers(e, t) {
|
|
1266
1266
|
if (!(e.length === 0 || this.evaluatingForDiagnosis)) {
|
|
1267
1267
|
if (c.strictBind) {
|
|
1268
|
-
|
|
1268
|
+
g.error(
|
|
1269
1269
|
"[Haori]",
|
|
1270
1270
|
"Expression references key(s) that are not in the binding data: " + e.join(", ") + ". The result is treated as an unresolved reference.",
|
|
1271
1271
|
t
|
|
@@ -1296,7 +1296,7 @@ let ${e.join(", ")};`;
|
|
|
1296
1296
|
if (this.pendingUnresolvedIdentifiers.size === 0)
|
|
1297
1297
|
return;
|
|
1298
1298
|
const e = Array.from(this.pendingUnresolvedIdentifiers);
|
|
1299
|
-
this.pendingUnresolvedIdentifiers.clear(),
|
|
1299
|
+
this.pendingUnresolvedIdentifiers.clear(), g.warn(
|
|
1300
1300
|
"[Haori]",
|
|
1301
1301
|
"Expression key(s) were never provided by any binding: " + e.join(", ") + ". They are treated as unresolved references (rendered as empty). Check for typos if this is unexpected."
|
|
1302
1302
|
);
|
|
@@ -1379,7 +1379,7 @@ let ${e.join(", ")};`;
|
|
|
1379
1379
|
${t}`;
|
|
1380
1380
|
this.loggedScopeMissingIdentifiers.has(s) || (this.loggedScopeMissingIdentifiers.add(s), i.push(n));
|
|
1381
1381
|
}
|
|
1382
|
-
i.length !== 0 &&
|
|
1382
|
+
i.length !== 0 && g.warn(
|
|
1383
1383
|
"[Haori]",
|
|
1384
1384
|
`Expression key(s) are missing from this scope but are provided in another scope: ${i.join(", ")}. A binding is visible only to the target element itself and its descendants, so bind the response to this element or one of its ancestors (data-fetch-bind / data-{event}-bind):`,
|
|
1385
1385
|
t
|
|
@@ -1448,18 +1448,18 @@ ${t}`;
|
|
|
1448
1448
|
*/
|
|
1449
1449
|
static evaluateDetailed(e, t = {}) {
|
|
1450
1450
|
if (this.scheduleForbiddenBindingValueCacheReset(), e.trim() === "")
|
|
1451
|
-
return
|
|
1451
|
+
return g.warn("[Haori]", e, "Expression is empty"), { value: null, unresolvedReference: !1 };
|
|
1452
1452
|
if (this.containsDangerousPatterns(e)) {
|
|
1453
1453
|
const d = this.detectDisallowedKeywords(e);
|
|
1454
1454
|
if (d.length > 0) {
|
|
1455
|
-
const
|
|
1456
|
-
|
|
1455
|
+
const m = d.some((y) => y === "function" || y === "return") ? " Statement keywords are not allowed in expressions; use an arrow function such as `x => ({key: value})` instead of `function(x){ return {key: value}; }`." : " These are statement keywords and cannot be used in expressions.";
|
|
1456
|
+
g.warn(
|
|
1457
1457
|
"[Haori]",
|
|
1458
1458
|
e,
|
|
1459
|
-
"Expression uses disallowed keyword(s): " + d.join(", ") + "." +
|
|
1459
|
+
"Expression uses disallowed keyword(s): " + d.join(", ") + "." + m
|
|
1460
1460
|
);
|
|
1461
1461
|
} else
|
|
1462
|
-
|
|
1462
|
+
g.warn(
|
|
1463
1463
|
"[Haori]",
|
|
1464
1464
|
e,
|
|
1465
1465
|
"Expression contains dangerous patterns"
|
|
@@ -1469,7 +1469,7 @@ ${t}`;
|
|
|
1469
1469
|
const r = this.collectForbiddenKeys(t);
|
|
1470
1470
|
if (r.length > 0) {
|
|
1471
1471
|
const d = r.join(",");
|
|
1472
|
-
this.loggedForbiddenKeySignatures.has(d) || (this.loggedForbiddenKeySignatures.add(d), this.scheduleForbiddenKeyLogReset(),
|
|
1472
|
+
this.loggedForbiddenKeySignatures.has(d) || (this.loggedForbiddenKeySignatures.add(d), this.scheduleForbiddenKeyLogReset(), g.error(
|
|
1473
1473
|
"[Haori]",
|
|
1474
1474
|
"Binding keys are reserved and ignored: " + r.join(", ") + ". These collide with blocked global/prototype names and cannot be used as top-level binding keys; the remaining keys are still evaluated."
|
|
1475
1475
|
));
|
|
@@ -1480,7 +1480,7 @@ ${t}`;
|
|
|
1480
1480
|
/* @__PURE__ */ new WeakSet(),
|
|
1481
1481
|
i
|
|
1482
1482
|
))
|
|
1483
|
-
return
|
|
1483
|
+
return g.warn(
|
|
1484
1484
|
"[Haori]",
|
|
1485
1485
|
t,
|
|
1486
1486
|
"Binded values contain forbidden values"
|
|
@@ -1491,7 +1491,7 @@ ${t}`;
|
|
|
1491
1491
|
), s = this.BUILTIN_REFERENCE_PATTERN.test(
|
|
1492
1492
|
n
|
|
1493
1493
|
);
|
|
1494
|
-
s && this.BUILTIN_NAMESPACE in t &&
|
|
1494
|
+
s && this.BUILTIN_NAMESPACE in t && g.warn(
|
|
1495
1495
|
"[Haori]",
|
|
1496
1496
|
`Binding key "${this.BUILTIN_NAMESPACE}" is reserved for built-in helpers; the bound value is ignored in expressions.`
|
|
1497
1497
|
);
|
|
@@ -1511,7 +1511,7 @@ ${t}`;
|
|
|
1511
1511
|
if (V.isEnabled()) {
|
|
1512
1512
|
const d = this.extractBoundIdentifiers(e);
|
|
1513
1513
|
this.recordScopeMissingIdentifiers(
|
|
1514
|
-
d.size === 0 ? l : l.filter((
|
|
1514
|
+
d.size === 0 ? l : l.filter((m) => !d.has(m)),
|
|
1515
1515
|
e
|
|
1516
1516
|
);
|
|
1517
1517
|
}
|
|
@@ -1520,20 +1520,20 @@ ${t}`;
|
|
|
1520
1520
|
});
|
|
1521
1521
|
const u = o ? [] : l;
|
|
1522
1522
|
for (let d = 0; d <= this.MAX_IDENTIFIER_RECOVERY_COUNT; d += 1) {
|
|
1523
|
-
const
|
|
1523
|
+
const m = this.prepareEvaluator(
|
|
1524
1524
|
e,
|
|
1525
1525
|
a,
|
|
1526
1526
|
u
|
|
1527
1527
|
);
|
|
1528
|
-
if (
|
|
1528
|
+
if (m.compileFailed || m.evaluator === null)
|
|
1529
1529
|
return { value: null, unresolvedReference: !1 };
|
|
1530
1530
|
try {
|
|
1531
1531
|
const y = [], E = this.wrapBoundValues(a);
|
|
1532
|
-
|
|
1533
|
-
y.push(E[
|
|
1532
|
+
m.bindKeys.forEach((k) => {
|
|
1533
|
+
y.push(E[k]);
|
|
1534
1534
|
});
|
|
1535
1535
|
const A = this.withBlockedPropertyAccess(
|
|
1536
|
-
() =>
|
|
1536
|
+
() => m.evaluator(...y)
|
|
1537
1537
|
);
|
|
1538
1538
|
return A === void 0 && this.warnBlockedIdentifiers(e), {
|
|
1539
1539
|
value: A,
|
|
@@ -1561,10 +1561,10 @@ ${t}`;
|
|
|
1561
1561
|
e
|
|
1562
1562
|
), { value: void 0, unresolvedReference: !0 });
|
|
1563
1563
|
}
|
|
1564
|
-
return
|
|
1564
|
+
return g.error("[Haori]", "Expression evaluation error:", e, y), y instanceof ReferenceError ? { value: void 0, unresolvedReference: !0 } : { value: null, unresolvedReference: !1 };
|
|
1565
1565
|
}
|
|
1566
1566
|
}
|
|
1567
|
-
return
|
|
1567
|
+
return g.error(
|
|
1568
1568
|
"[Haori]",
|
|
1569
1569
|
"Failed to recover missing identifiers:",
|
|
1570
1570
|
e,
|
|
@@ -1596,12 +1596,12 @@ ${t}`;
|
|
|
1596
1596
|
evaluator: u,
|
|
1597
1597
|
compileFailed: !1
|
|
1598
1598
|
};
|
|
1599
|
-
const d = this.buildAssignments(n),
|
|
1599
|
+
const d = this.buildAssignments(n), m = this.buildShadowDeclarations(o), y = this.toGuardedMemberExpression(
|
|
1600
1600
|
this.toOptionalChainExpression(e)
|
|
1601
1601
|
), E = d ? `"use strict";
|
|
1602
1602
|
${d};
|
|
1603
|
-
return (${y});${
|
|
1604
|
-
return (${y});${
|
|
1603
|
+
return (${y});${m}` : `"use strict";
|
|
1604
|
+
return (${y});${m}`;
|
|
1605
1605
|
try {
|
|
1606
1606
|
return u = new Function(...n, E), this.EXPRESSION_CACHE.set(l, u), this.compileFailedExpressions.delete(e), {
|
|
1607
1607
|
bindKeys: n,
|
|
@@ -1609,11 +1609,11 @@ return (${y});${g}`;
|
|
|
1609
1609
|
compileFailed: !1
|
|
1610
1610
|
};
|
|
1611
1611
|
} catch (A) {
|
|
1612
|
-
return o.length > 0 ? (
|
|
1612
|
+
return o.length > 0 ? (g.warn(
|
|
1613
1613
|
"[Haori]",
|
|
1614
1614
|
"Failed to shadow undeclared identifier(s): " + o.join(", ") + ". Falling back to evaluation without shadowing.",
|
|
1615
1615
|
e
|
|
1616
|
-
), this.prepareEvaluator(e, t, [])) : (
|
|
1616
|
+
), this.prepareEvaluator(e, t, [])) : (g.error("[Haori]", "Failed to compile expression:", e, A), this.compileFailedExpressions.add(e), {
|
|
1617
1617
|
bindKeys: n,
|
|
1618
1618
|
evaluator: null,
|
|
1619
1619
|
compileFailed: !0
|
|
@@ -2590,8 +2590,8 @@ const ge = "data-haori-if-disabled", Xe = "input, select, textarea, button, fiel
|
|
|
2590
2590
|
let r = 0, i = 0;
|
|
2591
2591
|
const n = (l, u, d) => {
|
|
2592
2592
|
r += d.totalDurationMs, i += d.calls;
|
|
2593
|
-
const
|
|
2594
|
-
if (
|
|
2593
|
+
const m = t.get(l);
|
|
2594
|
+
if (m === void 0) {
|
|
2595
2595
|
t.set(l, {
|
|
2596
2596
|
where: u,
|
|
2597
2597
|
template: d.template,
|
|
@@ -2604,10 +2604,10 @@ const ge = "data-haori-if-disabled", Xe = "input, select, textarea, button, fiel
|
|
|
2604
2604
|
});
|
|
2605
2605
|
return;
|
|
2606
2606
|
}
|
|
2607
|
-
|
|
2608
|
-
|
|
2607
|
+
m.elements += 1, m.calls += d.calls, m.totalDurationMs += d.totalDurationMs, m.maxDurationMs = Math.max(
|
|
2608
|
+
m.maxDurationMs,
|
|
2609
2609
|
d.maxDurationMs
|
|
2610
|
-
), d.totalDurationMs >
|
|
2610
|
+
), d.totalDurationMs > m.representativeDurationMs && (m.where = u, m.representativeDurationMs = d.totalDurationMs);
|
|
2611
2611
|
};
|
|
2612
2612
|
P.snapshot().forEach((l) => {
|
|
2613
2613
|
l.attributes.forEach((u) => {
|
|
@@ -2655,7 +2655,7 @@ ${u.template}`,
|
|
|
2655
2655
|
const n = String(i + 1).padStart(2), s = r.totalDurationMs.toFixed(1).padStart(9), a = `${r.sharePercent.toFixed(1)}%`.padStart(6), o = String(r.calls).padStart(6), l = String(r.elements).padStart(4), u = r.maxDurationMs.toFixed(1).padStart(8);
|
|
2656
2656
|
return `${n}. ${s}ms ${a} calls=${o} elements=${l} max=${u}ms ${r.where} ${r.template}`;
|
|
2657
2657
|
});
|
|
2658
|
-
|
|
2658
|
+
g.info(
|
|
2659
2659
|
"[Haori][evaluation-profile]",
|
|
2660
2660
|
`total=${e.totalDurationMs.toFixed(1)}ms calls=${e.totalCalls} declarations=${e.entryCount}
|
|
2661
2661
|
` + t.join(`
|
|
@@ -2877,7 +2877,7 @@ const de = class de {
|
|
|
2877
2877
|
t = new je(e);
|
|
2878
2878
|
break;
|
|
2879
2879
|
default:
|
|
2880
|
-
return
|
|
2880
|
+
return g.warn("[Haori]", "Unsupported node type:", e.nodeType), null;
|
|
2881
2881
|
}
|
|
2882
2882
|
return t;
|
|
2883
2883
|
}
|
|
@@ -3118,7 +3118,7 @@ const w = class w extends T {
|
|
|
3118
3118
|
removeChild(e) {
|
|
3119
3119
|
const t = this.children.indexOf(e);
|
|
3120
3120
|
if (t < 0) {
|
|
3121
|
-
|
|
3121
|
+
g.warn("[Haori]", "Child fragment not found.", e);
|
|
3122
3122
|
return;
|
|
3123
3123
|
}
|
|
3124
3124
|
this.children.splice(t, 1), e.setParent(null);
|
|
@@ -3192,7 +3192,7 @@ const w = class w extends T {
|
|
|
3192
3192
|
* 付け直しで描画済みの DOM から作り直すことになり、描いた結果を宣言として読み込み
|
|
3193
3193
|
* ます(仕様「監視対象」の「走査した要素を外部のスクリプトが DOM の中で移したり、
|
|
3194
3194
|
* 外して後で戻したりしても、宣言は保ちます」)。付け直しでは `Core.addNode()` が
|
|
3195
|
-
*
|
|
3195
|
+
* この断片をそのまま木へつなぎ直して走査します。
|
|
3196
3196
|
*
|
|
3197
3197
|
* DOM は既に動いているため、DOM からの除去は行いません(同じ親の中で順を変えた
|
|
3198
3198
|
* 場合、ノードはまだ親の下にあります)。外部ライブラリ連携は、DOM から外れる要素と
|
|
@@ -3212,7 +3212,7 @@ const w = class w extends T {
|
|
|
3212
3212
|
* 外部ライブラリが配下に生成した DOM ごと取り込んでフォーム値の収集に載せます
|
|
3213
3213
|
* (仕様「`data-external`」の「付け直した場合も、配下は走査した時点の構成のまま
|
|
3214
3214
|
* 扱う」、課題 #42)。子の断片・属性・キャッシュ登録は保ち、付け直しでは
|
|
3215
|
-
* `Core.addNode()`
|
|
3215
|
+
* `Core.addNode()` がこの断片をそのまま木へつなぎ直して走査します。バインドデータの
|
|
3216
3216
|
* キャッシュは、付け直しで親を設定するとき(`setParent()`)に部分木ごと捨てられる
|
|
3217
3217
|
* ため、ここでは捨てません(捨てる行を外しても結果が変わらないことを確認済み)。
|
|
3218
3218
|
*
|
|
@@ -3657,7 +3657,7 @@ const w = class w extends T {
|
|
|
3657
3657
|
if (i instanceof HTMLInputElement && i.type === "file")
|
|
3658
3658
|
return e === null || e === "" ? (this.value = null, i.value === "" ? Promise.resolve() : z.enqueue(() => {
|
|
3659
3659
|
i.value = "";
|
|
3660
|
-
})) : (
|
|
3660
|
+
})) : (g.warn(
|
|
3661
3661
|
"[Haori]",
|
|
3662
3662
|
"A value cannot be assigned to input[type=file]; only clearing is supported.",
|
|
3663
3663
|
i
|
|
@@ -3678,7 +3678,7 @@ const w = class w extends T {
|
|
|
3678
3678
|
Array.isArray(e) ? e.join(",") : e,
|
|
3679
3679
|
t,
|
|
3680
3680
|
r
|
|
3681
|
-
) : (
|
|
3681
|
+
) : (g.warn(
|
|
3682
3682
|
"[Haori]",
|
|
3683
3683
|
"setValue is not supported for this element type.",
|
|
3684
3684
|
i
|
|
@@ -4087,7 +4087,7 @@ const w = class w extends T {
|
|
|
4087
4087
|
if (!V.isEnabled())
|
|
4088
4088
|
return;
|
|
4089
4089
|
const n = `${e} ${r}`;
|
|
4090
|
-
w.loggedUnresolvedAttributes.has(n) || (w.loggedUnresolvedAttributes.add(n),
|
|
4090
|
+
w.loggedUnresolvedAttributes.has(n) || (w.loggedUnresolvedAttributes.add(n), g.warn(
|
|
4091
4091
|
"[Haori]",
|
|
4092
4092
|
`Attribute "${t}" was not applied because the expression has an unresolved reference; the attribute is removed and the synchronized value is emptied: ${e}="${r}"`,
|
|
4093
4093
|
i
|
|
@@ -4110,7 +4110,7 @@ const w = class w extends T {
|
|
|
4110
4110
|
*/
|
|
4111
4111
|
static warnTypeMismatchedComparison(e, t, r, i) {
|
|
4112
4112
|
const n = `${e} ${t}`;
|
|
4113
|
-
w.loggedTypeMismatchedComparisons.has(n) || (w.loggedTypeMismatchedComparisons.add(n),
|
|
4113
|
+
w.loggedTypeMismatchedComparisons.has(n) || (w.loggedTypeMismatchedComparisons.add(n), g.warn(
|
|
4114
4114
|
"[Haori]",
|
|
4115
4115
|
`The strict comparison compares different types (${r.left} vs ${r.right}), so it is always false even though the values match. Align the types (for example with ${c.prefix}value-type) or compare converted values: ${e}="${t}"`,
|
|
4116
4116
|
i
|
|
@@ -4290,7 +4290,7 @@ const w = class w extends T {
|
|
|
4290
4290
|
if (!V.isEnabled())
|
|
4291
4291
|
return;
|
|
4292
4292
|
const i = e instanceof HTMLInputElement ? `[type=${e.type}]` : "", n = `${e.tagName}${i} ${t} ${r}`;
|
|
4293
|
-
w.loggedValueTypeDeclarations.has(n) || (w.loggedValueTypeDeclarations.add(n),
|
|
4293
|
+
w.loggedValueTypeDeclarations.has(n) || (w.loggedValueTypeDeclarations.add(n), g.warn(
|
|
4294
4294
|
"Haori",
|
|
4295
4295
|
`${c.prefix}value-type="${t}" を無視しました(${r}):`,
|
|
4296
4296
|
e
|
|
@@ -4560,7 +4560,7 @@ const w = class w extends T {
|
|
|
4560
4560
|
element: l,
|
|
4561
4561
|
rawName: e,
|
|
4562
4562
|
template: r
|
|
4563
|
-
}), d = o.isEvaluate || o.isRawEvaluate,
|
|
4563
|
+
}), d = o.isEvaluate || o.isRawEvaluate, m = e === t && w.BOOLEAN_ATTRIBUTES.has(t.toLowerCase()), y = o.isSingleExpression(), E = fe.joinEvaluateResults(u.results), A = u.results.length === 1 ? u.results[0] : E, k = t === "value" && w.resolveDeclaredValueType(l) === "boolean", M = A === !1 && !k, q = !o.isForceEvaluation() && (t !== e ? u.hasUnresolvedReference || A === null || A === void 0 || M : m ? u.hasUnresolvedReference || A === null || A === void 0 || A === !1 : y ? u.hasUnresolvedReference || A === null || A === void 0 || M : d && E === "");
|
|
4564
4564
|
if (q && u.hasUnresolvedReference && w.warnUnresolvedAttribute(
|
|
4565
4565
|
e,
|
|
4566
4566
|
t,
|
|
@@ -4578,7 +4578,7 @@ const w = class w extends T {
|
|
|
4578
4578
|
l
|
|
4579
4579
|
);
|
|
4580
4580
|
}
|
|
4581
|
-
const I = o.isForceEvaluation() ? r : y ? A : E, K = i && o.isEvaluate && t === "value" && w.isValuePropertyTarget(l), J = l.getRootNode(), re = this.userEditSequence, H = K && w.isUserEditableValue(l) && (l === J.activeElement || this.hasPendingUserEdit()), _ = q || I === null || I === !1 && !
|
|
4581
|
+
const I = o.isForceEvaluation() ? r : y ? A : E, K = i && o.isEvaluate && t === "value" && w.isValuePropertyTarget(l), J = l.getRootNode(), re = this.userEditSequence, H = K && w.isUserEditableValue(l) && (l === J.activeElement || this.hasPendingUserEdit()), _ = q || I === null || I === !1 && !k ? null : String(I), G = e !== t && l.getAttribute(e) !== r, D = _ === null ? l.hasAttribute(t) : l.getAttribute(t) !== _, $ = _ === null ? "" : _, Z = K && !H && l.value !== $, Q = t === "checked" && l instanceof HTMLInputElement && (l.type === "checkbox" || l.type === "radio"), se = t === "selected" && l instanceof HTMLOptionElement, ce = J.activeElement, W = ce !== null && (Q && l === ce || se && l.closest("select") === ce) || (Q || se) && this.hasPendingCheckableUserEdit(se), Y = this.getCheckableUserEditSequence(se), X = _ !== null, Ee = Q && o.isEvaluate && !W && l.checked !== X, Ie = se && o.isEvaluate && !W && l.selected !== X;
|
|
4582
4582
|
if (!G && !D && !Z && !Ee && !Ie)
|
|
4583
4583
|
return K && !H && (this.value = this.normalizeValueForElement(
|
|
4584
4584
|
l,
|
|
@@ -4746,43 +4746,72 @@ const w = class w extends T {
|
|
|
4746
4746
|
if (this.isSkipMutationNode(e.getTarget()))
|
|
4747
4747
|
return Promise.resolve();
|
|
4748
4748
|
if (e === this)
|
|
4749
|
-
return
|
|
4749
|
+
return g.error("[Haori]", "Cannot insert element as child of itself"), Promise.reject(new Error("Self-insertion not allowed"));
|
|
4750
4750
|
const i = /* @__PURE__ */ new Set();
|
|
4751
4751
|
let n = this.parent;
|
|
4752
4752
|
for (; n; )
|
|
4753
4753
|
i.add(n), n = n.getParent();
|
|
4754
4754
|
if (i.has(e))
|
|
4755
|
-
return
|
|
4756
|
-
const s =
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4755
|
+
return g.error("[Haori]", "Cannot create circular reference"), Promise.reject(new Error("Circular reference detected"));
|
|
4756
|
+
const s = this.linkChild(
|
|
4757
|
+
e,
|
|
4758
|
+
t,
|
|
4759
|
+
r
|
|
4760
|
+
), a = this.skipMutationNodes;
|
|
4761
|
+
return this.skipMutationNodes = !0, this.holdSkipMutationNode(e.getTarget()), z.enqueue(() => {
|
|
4762
|
+
this.target.insertBefore(e.getTarget(), s);
|
|
4763
|
+
}).finally(() => {
|
|
4764
|
+
this.skipMutationNodes = a, this.releaseSkipMutationNode(e.getTarget());
|
|
4765
|
+
});
|
|
4766
|
+
}
|
|
4767
|
+
/**
|
|
4768
|
+
* 監視が観測した追加を、DOM を動かさずに内部の木へ反映します。
|
|
4769
|
+
*
|
|
4770
|
+
* ノードは既に DOM 上の追加された位置にあります。DOM から外して付け直すと、開いた
|
|
4771
|
+
* popover・`showModal()` で開いた `<dialog>` のモーダル状態・フォーカスが失われます
|
|
4772
|
+
* (仕様「監視対象」の「外部のスクリプトが DOM に追加したノードは、追加された位置の
|
|
4773
|
+
* まま取り込み、DOM から外して付け直すことはしません」)。
|
|
4774
|
+
*
|
|
4775
|
+
* @param newChild 追加された子ノード
|
|
4776
|
+
* @param referenceChild 追加された位置の次の子ノード(末尾の場合は null)
|
|
4777
|
+
* @returns 戻り値はありません。
|
|
4778
|
+
*/
|
|
4779
|
+
attachObserved(e, t) {
|
|
4780
|
+
this.linkChild(e, t);
|
|
4781
|
+
}
|
|
4782
|
+
/**
|
|
4783
|
+
* 子ノードを内部の木の参照ノードの前へつなぎます。DOM は操作しません。
|
|
4784
|
+
*
|
|
4785
|
+
* @param newChild 新しい子ノード
|
|
4786
|
+
* @param referenceChild 参照ノード(末尾の場合は null)
|
|
4787
|
+
* @param referenceNodeOverride DOM で挿入する位置の次のノード(省略時は参照ノード)
|
|
4788
|
+
* @returns DOM で挿入する位置の次のノード
|
|
4789
|
+
*/
|
|
4790
|
+
linkChild(e, t, r) {
|
|
4791
|
+
const i = e.getParent() === this;
|
|
4792
|
+
let n = -1, s = -1;
|
|
4793
|
+
i && (n = this.children.indexOf(e), t !== null && (s = this.children.indexOf(t)));
|
|
4794
|
+
const a = e.getParent();
|
|
4795
|
+
a !== null && a.removeChild(e);
|
|
4796
|
+
let o = r === void 0 ? t?.getTarget() || null : r;
|
|
4762
4797
|
if (t === null)
|
|
4763
4798
|
this.children.push(e);
|
|
4764
4799
|
else {
|
|
4765
|
-
let
|
|
4766
|
-
if (
|
|
4767
|
-
const
|
|
4800
|
+
let l;
|
|
4801
|
+
if (i ? n !== -1 && n < s ? l = s - 1 : l = s : l = this.children.indexOf(t), l === -1) {
|
|
4802
|
+
const u = this.resolveInsertionPointFromDom(
|
|
4768
4803
|
t,
|
|
4769
4804
|
!1
|
|
4770
4805
|
);
|
|
4771
|
-
|
|
4806
|
+
u === null ? (g.warn(
|
|
4772
4807
|
"[Haori]",
|
|
4773
4808
|
"Reference child not found in children.",
|
|
4774
4809
|
t
|
|
4775
|
-
), this.children.push(e)) : (this.children.splice(
|
|
4810
|
+
), this.children.push(e)) : (this.children.splice(u.index, 0, e), o = u.referenceNode);
|
|
4776
4811
|
} else
|
|
4777
|
-
this.children.splice(
|
|
4812
|
+
this.children.splice(l, 0, e);
|
|
4778
4813
|
}
|
|
4779
|
-
e.setParent(this), e.setMounted(this.mounted);
|
|
4780
|
-
const d = this.skipMutationNodes;
|
|
4781
|
-
return this.skipMutationNodes = !0, this.holdSkipMutationNode(e.getTarget()), z.enqueue(() => {
|
|
4782
|
-
this.target.insertBefore(e.getTarget(), u);
|
|
4783
|
-
}).finally(() => {
|
|
4784
|
-
this.skipMutationNodes = d, this.releaseSkipMutationNode(e.getTarget());
|
|
4785
|
-
});
|
|
4814
|
+
return e.setParent(this), e.setMounted(this.mounted), o;
|
|
4786
4815
|
}
|
|
4787
4816
|
/**
|
|
4788
4817
|
* 指定した参照ノードの後に子ノードを挿入します。
|
|
@@ -4800,7 +4829,7 @@ const w = class w extends T {
|
|
|
4800
4829
|
t,
|
|
4801
4830
|
!0
|
|
4802
4831
|
);
|
|
4803
|
-
return i === null ? (
|
|
4832
|
+
return i === null ? (g.warn(
|
|
4804
4833
|
"[Haori]",
|
|
4805
4834
|
"Reference child not found in children.",
|
|
4806
4835
|
t
|
|
@@ -5256,7 +5285,7 @@ const Pe = class Pe {
|
|
|
5256
5285
|
*/
|
|
5257
5286
|
checkRawExpressions() {
|
|
5258
5287
|
for (let e = 0; e < this.contents.length; e++)
|
|
5259
|
-
this.contents[e].type === 2 && this.contents.length > 1 && (
|
|
5288
|
+
this.contents[e].type === 2 && this.contents.length > 1 && (g.error(
|
|
5260
5289
|
"[Haori]",
|
|
5261
5290
|
"Raw expressions are not allowed in multi-content expressions."
|
|
5262
5291
|
), this.contents[e].type = 1);
|
|
@@ -5312,7 +5341,7 @@ const Pe = class Pe {
|
|
|
5312
5341
|
} else
|
|
5313
5342
|
n.push(l.text);
|
|
5314
5343
|
} catch (u) {
|
|
5315
|
-
|
|
5344
|
+
g.error(
|
|
5316
5345
|
"[Haori]",
|
|
5317
5346
|
`Error evaluating ${i} expression: ${l.text}`,
|
|
5318
5347
|
u
|
|
@@ -5407,7 +5436,7 @@ const ie = class ie extends fe {
|
|
|
5407
5436
|
(i) => this.forceEvaluation && i.type === 0 || i.type === 1 || i.type === 2,
|
|
5408
5437
|
"attribute"
|
|
5409
5438
|
);
|
|
5410
|
-
return this.forceEvaluation && r.results.length > 1 ? (
|
|
5439
|
+
return this.forceEvaluation && r.results.length > 1 ? (g.error(
|
|
5411
5440
|
"[Haori]",
|
|
5412
5441
|
"each or if expressions must have a single content.",
|
|
5413
5442
|
r.results
|
|
@@ -5495,7 +5524,7 @@ const Se = class Se {
|
|
|
5495
5524
|
*/
|
|
5496
5525
|
static openDialog(e) {
|
|
5497
5526
|
return z.enqueue(() => {
|
|
5498
|
-
e instanceof HTMLDialogElement ? (Se.clearMessagesSync(e), e.showModal()) :
|
|
5527
|
+
e instanceof HTMLDialogElement ? (Se.clearMessagesSync(e), e.showModal()) : g.error("[Haori]", "Element is not a dialog: ", e);
|
|
5499
5528
|
}, !0);
|
|
5500
5529
|
}
|
|
5501
5530
|
/**
|
|
@@ -5505,7 +5534,7 @@ const Se = class Se {
|
|
|
5505
5534
|
*/
|
|
5506
5535
|
static closeDialog(e) {
|
|
5507
5536
|
return z.enqueue(() => {
|
|
5508
|
-
e instanceof HTMLDialogElement ? e.close() :
|
|
5537
|
+
e instanceof HTMLDialogElement ? e.close() : g.error("[Haori]", "Element is not a dialog: ", e);
|
|
5509
5538
|
}, !0);
|
|
5510
5539
|
}
|
|
5511
5540
|
/**
|
|
@@ -5926,7 +5955,7 @@ const h = class h {
|
|
|
5926
5955
|
return;
|
|
5927
5956
|
const t = e.getAttribute(`${c.prefix}form-name`);
|
|
5928
5957
|
if (!t) {
|
|
5929
|
-
|
|
5958
|
+
g.warn(
|
|
5930
5959
|
"Haori",
|
|
5931
5960
|
`${c.prefix}form-name evaluated to an empty key; the field falls back to the name attribute or is not collected.`,
|
|
5932
5961
|
e.getTarget()
|
|
@@ -6337,11 +6366,11 @@ const h = class h {
|
|
|
6337
6366
|
const u = h.resolveCollectedValue(e), d = h.isFileInput(e) && Array.isArray(u) ? u : [u];
|
|
6338
6367
|
Array.isArray(t[String(n)]) ? t[String(n)].push(...d) : t[String(n)] = d;
|
|
6339
6368
|
} else if (h.isGroupedCheckable(e)) {
|
|
6340
|
-
const u = e.getTarget(), d = u instanceof HTMLInputElement ? u.checked : !0,
|
|
6369
|
+
const u = e.getTarget(), d = u instanceof HTMLInputElement ? u.checked : !0, m = u instanceof HTMLInputElement ? u.value : e.getValue(), y = d ? m : null, E = String(n);
|
|
6341
6370
|
y === null ? E in t || (t[E] = null) : t[E] === null || t[E] === void 0 ? t[E] = y : Array.isArray(t[E]) ? t[E].push(y) : t[E] = [t[E], y];
|
|
6342
6371
|
} else
|
|
6343
6372
|
t[String(n)] = h.resolveCollectedValue(e);
|
|
6344
|
-
s &&
|
|
6373
|
+
s && g.warn(
|
|
6345
6374
|
"Haori",
|
|
6346
6375
|
`Element cannot have both ${c.prefix}form-object and name attributes.`
|
|
6347
6376
|
);
|
|
@@ -6349,20 +6378,20 @@ const h = class h {
|
|
|
6349
6378
|
h.getPartValues(u, t, r, i);
|
|
6350
6379
|
} else if (s) {
|
|
6351
6380
|
const u = {}, d = i === null ? null : /* @__PURE__ */ new Set();
|
|
6352
|
-
for (const
|
|
6381
|
+
for (const m of e.getChildElementFragments())
|
|
6353
6382
|
h.getPartValues(
|
|
6354
|
-
|
|
6383
|
+
m,
|
|
6355
6384
|
u,
|
|
6356
6385
|
r,
|
|
6357
6386
|
d
|
|
6358
6387
|
);
|
|
6359
|
-
d !== null && h.registerCollectedExcludedKeys(u, d), Object.keys(u).length > 0 ? t[String(s)] = u : i !== null && (d?.size ?? 0) > 0 && i.add(String(s)), a &&
|
|
6388
|
+
d !== null && h.registerCollectedExcludedKeys(u, d), Object.keys(u).length > 0 ? t[String(s)] = u : i !== null && (d?.size ?? 0) > 0 && i.add(String(s)), a && g.warn(
|
|
6360
6389
|
"Haori",
|
|
6361
6390
|
`Element cannot have both ${c.prefix}form-list and ${c.prefix}form-object attributes.`
|
|
6362
6391
|
);
|
|
6363
6392
|
} else if (a) {
|
|
6364
6393
|
const u = [], d = [];
|
|
6365
|
-
let
|
|
6394
|
+
let m = !1;
|
|
6366
6395
|
for (const y of e.getChildElementFragments()) {
|
|
6367
6396
|
const E = {}, A = i === null ? null : /* @__PURE__ */ new Set();
|
|
6368
6397
|
h.getPartValues(
|
|
@@ -6370,7 +6399,7 @@ const h = class h {
|
|
|
6370
6399
|
E,
|
|
6371
6400
|
r,
|
|
6372
6401
|
A
|
|
6373
|
-
), A !== null && h.registerCollectedExcludedKeys(E, A), Object.keys(E).length > 0 ? (
|
|
6402
|
+
), A !== null && h.registerCollectedExcludedKeys(E, A), Object.keys(E).length > 0 ? (m = !0, u.push(E), d.push(y.getListKey())) : r !== null && (u.push({}), d.push(y.getListKey()));
|
|
6374
6403
|
}
|
|
6375
6404
|
if (r === null) {
|
|
6376
6405
|
const y = e.getAttribute(`${c.prefix}each-key`);
|
|
@@ -6380,7 +6409,7 @@ const h = class h {
|
|
|
6380
6409
|
d,
|
|
6381
6410
|
h.isCollectedListFromEachSource(e)
|
|
6382
6411
|
), h.warnDerivedRowsWithoutKey(e), t[String(a)] = u;
|
|
6383
|
-
} else
|
|
6412
|
+
} else m && (t[String(a)] = u);
|
|
6384
6413
|
} else
|
|
6385
6414
|
for (const u of e.getChildElementFragments())
|
|
6386
6415
|
h.getPartValues(u, t, r, i);
|
|
@@ -6539,7 +6568,7 @@ const h = class h {
|
|
|
6539
6568
|
if (!V.isEnabled() || r == null)
|
|
6540
6569
|
return;
|
|
6541
6570
|
const i = e.getTarget(), n = h.warnedArgOwnerNotRecord.get(i);
|
|
6542
|
-
n?.has(t) || (n ? n.add(t) : h.warnedArgOwnerNotRecord.set(i, /* @__PURE__ */ new Set([t])),
|
|
6571
|
+
n?.has(t) || (n ? n.add(t) : h.warnedArgOwnerNotRecord.set(i, /* @__PURE__ */ new Set([t])), g.warn(
|
|
6543
6572
|
"[Haori]",
|
|
6544
6573
|
`${c.prefix}form-arg="${t}" のキーを祖先が${Array.isArray(r) ? "配列" : `${typeof r} 型の値`}で持っています。${c.prefix}form-arg はそのキーの配下に入力欄が対応することを宣言するため、値はレコード(オブジェクト)である必要があります。このままでは収集値がそのキーへ直接入り、値の型が変わります。`
|
|
6545
6574
|
));
|
|
@@ -6656,9 +6685,9 @@ const h = class h {
|
|
|
6656
6685
|
return r.querySelectorAll(o).forEach((l) => {
|
|
6657
6686
|
if (!(l instanceof HTMLElement))
|
|
6658
6687
|
return;
|
|
6659
|
-
let u = null, d = !1,
|
|
6660
|
-
for (;
|
|
6661
|
-
|
|
6688
|
+
let u = null, d = !1, m = l;
|
|
6689
|
+
for (; m && m !== r; )
|
|
6690
|
+
m.hasAttribute(`${c.prefix}form-detach`) && (d = !0), (m.hasAttribute(n) || m.hasAttribute(s)) && (u = m), m = m.parentElement;
|
|
6662
6691
|
if (d)
|
|
6663
6692
|
return;
|
|
6664
6693
|
const y = u ?? l, E = y.getAttribute(n) || y.getAttribute(s) || y.getAttribute(`${c.prefix}form-name`) || y.getAttribute("name");
|
|
@@ -6691,7 +6720,7 @@ const h = class h {
|
|
|
6691
6720
|
static applyOneCustomValidity(e, t) {
|
|
6692
6721
|
const r = e.getTarget();
|
|
6693
6722
|
if (!(r instanceof HTMLInputElement) && !(r instanceof HTMLSelectElement) && !(r instanceof HTMLTextAreaElement)) {
|
|
6694
|
-
|
|
6723
|
+
g.warn(
|
|
6695
6724
|
"Haori",
|
|
6696
6725
|
`${t} は入力要素にのみ指定できます: ${r.tagName}`
|
|
6697
6726
|
);
|
|
@@ -6707,7 +6736,7 @@ const h = class h {
|
|
|
6707
6736
|
n
|
|
6708
6737
|
);
|
|
6709
6738
|
if (s.unresolvedReference) {
|
|
6710
|
-
|
|
6739
|
+
g.warn(
|
|
6711
6740
|
"Haori",
|
|
6712
6741
|
`${t} の参照が解決できないため無効として扱います: ${i}`
|
|
6713
6742
|
), r.setCustomValidity(h.resolveValidityMessage(e));
|
|
@@ -6753,7 +6782,7 @@ const h = class h {
|
|
|
6753
6782
|
if (!V.isEnabled() || !e)
|
|
6754
6783
|
return;
|
|
6755
6784
|
const r = `${c.prefix}validity`;
|
|
6756
|
-
(e.hasAttribute(r) || e.getTarget().querySelector(`[${r}]`) !== null) &&
|
|
6785
|
+
(e.hasAttribute(r) || e.getTarget().querySelector(`[${r}]`) !== null) && g.warn(
|
|
6757
6786
|
"Haori",
|
|
6758
6787
|
`${r} は指定されていますが検証は行われません(${t})。${c.prefix}{event}-validate を指定するか、${c.prefix}{event}-if を使用してください。`
|
|
6759
6788
|
);
|
|
@@ -6813,7 +6842,7 @@ const h = class h {
|
|
|
6813
6842
|
* @param reason 退いた理由
|
|
6814
6843
|
*/
|
|
6815
6844
|
static warnPositionalRowFallback(e) {
|
|
6816
|
-
!V.isEnabled() || h.warnedPositionalRowFallbacks.has(e) || (h.warnedPositionalRowFallbacks.add(e),
|
|
6845
|
+
!V.isEnabled() || h.warnedPositionalRowFallbacks.has(e) || (h.warnedPositionalRowFallbacks.add(e), g.warn(
|
|
6817
6846
|
"[Haori]",
|
|
6818
6847
|
`${c.prefix}form-list の行を出現順で対応付けます(${e})。配列と画面の行数・並びが一致していない場合、行の値を取り違えます。`
|
|
6819
6848
|
));
|
|
@@ -6836,7 +6865,7 @@ const h = class h {
|
|
|
6836
6865
|
if (!V.isEnabled() || e.getRawAttribute(`${c.prefix}each-key`) !== null)
|
|
6837
6866
|
return;
|
|
6838
6867
|
const t = e.getRawAttribute(`${c.prefix}each`);
|
|
6839
|
-
t === null || h.resolveLeadingPath(t) !== null || h.warnedDerivedRowsWithoutKey.has(t) || (h.warnedDerivedRowsWithoutKey.add(t),
|
|
6868
|
+
t === null || h.resolveLeadingPath(t) !== null || h.warnedDerivedRowsWithoutKey.has(t) || (h.warnedDerivedRowsWithoutKey.add(t), g.warn(
|
|
6840
6869
|
"[Haori]",
|
|
6841
6870
|
`${c.prefix}each="${t}" の一覧を ${c.prefix}form-list で収集していますが、${c.prefix}each-key がありません。行と配列要素を出現順で対応付けるため、画面に出ていない要素があると行の値を取り違えます。${c.prefix}each-key を宣言してください。`
|
|
6842
6871
|
));
|
|
@@ -7474,16 +7503,16 @@ const h = class h {
|
|
|
7474
7503
|
const o = [];
|
|
7475
7504
|
if (e.hasAttribute(`${c.prefix}form-detach`) && !r)
|
|
7476
7505
|
return Promise.resolve();
|
|
7477
|
-
const l = h.resolveFieldName(e), u = e.getAttribute(`${c.prefix}form-object`), d = e.getAttribute(`${c.prefix}form-list`),
|
|
7506
|
+
const l = h.resolveFieldName(e), u = e.getAttribute(`${c.prefix}form-object`), d = e.getAttribute(`${c.prefix}form-list`), m = e.hasAttribute(`${c.prefix}form-list`);
|
|
7478
7507
|
if (l) {
|
|
7479
7508
|
const y = t[String(l)], E = n && h.hasResolvedDeclarativeState(e), A = n && typeof y > "u" && !h.isDeclarativeStateBound(e);
|
|
7480
|
-
let
|
|
7481
|
-
if (E ?
|
|
7482
|
-
return (
|
|
7509
|
+
let k = y;
|
|
7510
|
+
if (E ? k = void 0 : A && (k = null), h.isFileInput(e))
|
|
7511
|
+
return (k === null || k === "") && o.push(
|
|
7483
7512
|
h.applyFragmentValue(e, null, i, a)
|
|
7484
7513
|
), Promise.all(o).then(() => {
|
|
7485
7514
|
});
|
|
7486
|
-
if (
|
|
7515
|
+
if (m && Array.isArray(k) && // チェックボックスグループと複数選択 select は配列そのものを状態として
|
|
7487
7516
|
// 解釈する(後続の分岐)。位置で配ると選択状態を決められないため、
|
|
7488
7517
|
// `data-form-list` を併記していても従来どおりそちらへ渡す。
|
|
7489
7518
|
!h.isGroupedCheckable(e) && !h.isMultipleSelect(e)) {
|
|
@@ -7491,20 +7520,20 @@ const h = class h {
|
|
|
7491
7520
|
s.set(M, q + 1), o.push(
|
|
7492
7521
|
h.applyFragmentValue(
|
|
7493
7522
|
e,
|
|
7494
|
-
|
|
7523
|
+
k[q] ?? null,
|
|
7495
7524
|
i,
|
|
7496
7525
|
a
|
|
7497
7526
|
)
|
|
7498
7527
|
);
|
|
7499
|
-
} else typeof
|
|
7528
|
+
} else typeof k > "u" || (Array.isArray(k) && h.isGroupedCheckable(e) || Array.isArray(k) && h.isMultipleSelect(e) || typeof k == "string" || typeof k == "number" || typeof k == "boolean" || k === null ? o.push(
|
|
7500
7529
|
h.applyFragmentValue(
|
|
7501
7530
|
e,
|
|
7502
|
-
|
|
7531
|
+
k,
|
|
7503
7532
|
i,
|
|
7504
7533
|
a
|
|
7505
7534
|
)
|
|
7506
7535
|
) : o.push(
|
|
7507
|
-
h.applyFragmentValue(e, String(
|
|
7536
|
+
h.applyFragmentValue(e, String(k), i, a)
|
|
7508
7537
|
));
|
|
7509
7538
|
} else if (u) {
|
|
7510
7539
|
const y = t[String(u)];
|
|
@@ -7526,13 +7555,13 @@ const h = class h {
|
|
|
7526
7555
|
} else if (d) {
|
|
7527
7556
|
const y = t[String(d)];
|
|
7528
7557
|
if (Array.isArray(y)) {
|
|
7529
|
-
const E = e.getChildElementFragments(), A = e.getAttribute(`${c.prefix}each-key`),
|
|
7558
|
+
const E = e.getChildElementFragments(), A = e.getAttribute(`${c.prefix}each-key`), k = h.isCollectedListFromEachSource(e) ? h.pairRowsWithItems(
|
|
7530
7559
|
E,
|
|
7531
7560
|
y,
|
|
7532
7561
|
A == null ? null : String(A)
|
|
7533
7562
|
) : null;
|
|
7534
7563
|
for (let M = 0; M < E.length; M++) {
|
|
7535
|
-
const q = E[M], I =
|
|
7564
|
+
const q = E[M], I = k ? k[M] : y.length > M ? y[M] : null;
|
|
7536
7565
|
o.push(
|
|
7537
7566
|
// 行ごとに values が切り替わるので出現位置も行単位で数える。
|
|
7538
7567
|
h.setPartValues(
|
|
@@ -7876,9 +7905,9 @@ const h = class h {
|
|
|
7876
7905
|
if (n === o) {
|
|
7877
7906
|
const l = i.substring(s + 1, a), u = Number(l);
|
|
7878
7907
|
if (isNaN(u))
|
|
7879
|
-
|
|
7908
|
+
g.error("Haori", `Invalid index: ${i}`);
|
|
7880
7909
|
else {
|
|
7881
|
-
const d = e.getChildElementFragments().filter((
|
|
7910
|
+
const d = e.getChildElementFragments().filter((m) => m.hasAttribute(`${c.prefix}row`));
|
|
7882
7911
|
u < d.length && r.push(
|
|
7883
7912
|
...h.findFragmentByKeyParts(d[u], t.slice(1))
|
|
7884
7913
|
);
|
|
@@ -8242,7 +8271,7 @@ class j {
|
|
|
8242
8271
|
try {
|
|
8243
8272
|
return Array.from(r.querySelectorAll(e));
|
|
8244
8273
|
} catch (i) {
|
|
8245
|
-
return
|
|
8274
|
+
return g.error(
|
|
8246
8275
|
"Haori",
|
|
8247
8276
|
`Invalid selector: ${e} (${t})`,
|
|
8248
8277
|
i
|
|
@@ -8300,7 +8329,7 @@ class j {
|
|
|
8300
8329
|
try {
|
|
8301
8330
|
return r.querySelector(e);
|
|
8302
8331
|
} catch (i) {
|
|
8303
|
-
return
|
|
8332
|
+
return g.error(
|
|
8304
8333
|
"Haori",
|
|
8305
8334
|
`Invalid selector: ${e} (${t})`,
|
|
8306
8335
|
i
|
|
@@ -8308,7 +8337,7 @@ class j {
|
|
|
8308
8337
|
}
|
|
8309
8338
|
}
|
|
8310
8339
|
}
|
|
8311
|
-
const
|
|
8340
|
+
const N = class N {
|
|
8312
8341
|
/**
|
|
8313
8342
|
* ストレージ種別に対応する `Storage` を解決します。
|
|
8314
8343
|
*
|
|
@@ -8326,7 +8355,7 @@ const k = class k {
|
|
|
8326
8355
|
throw new Error("storage is not available");
|
|
8327
8356
|
return t;
|
|
8328
8357
|
} catch (t) {
|
|
8329
|
-
return
|
|
8358
|
+
return N.WARNED_KINDS.has(e) || (N.WARNED_KINDS.add(e), g.warn(
|
|
8330
8359
|
"Haori",
|
|
8331
8360
|
`${e}Storage が利用できないため ${c.prefix}store を無効にします:`,
|
|
8332
8361
|
t
|
|
@@ -8363,8 +8392,8 @@ const k = class k {
|
|
|
8363
8392
|
* @param message 警告メッセージ
|
|
8364
8393
|
*/
|
|
8365
8394
|
static warnOnce(e, t, r) {
|
|
8366
|
-
let i =
|
|
8367
|
-
i || (i = /* @__PURE__ */ new Set(),
|
|
8395
|
+
let i = N.WARNED_ELEMENTS.get(e);
|
|
8396
|
+
i || (i = /* @__PURE__ */ new Set(), N.WARNED_ELEMENTS.set(e, i)), !i.has(t) && (i.add(t), g.warn("Haori", r));
|
|
8368
8397
|
}
|
|
8369
8398
|
/**
|
|
8370
8399
|
* `data-each` の行の内側かどうかを判定します。
|
|
@@ -8401,13 +8430,13 @@ const k = class k {
|
|
|
8401
8430
|
return null;
|
|
8402
8431
|
const i = r.trim();
|
|
8403
8432
|
if (i === "")
|
|
8404
|
-
return
|
|
8433
|
+
return N.warnOnce(
|
|
8405
8434
|
t,
|
|
8406
8435
|
"key",
|
|
8407
8436
|
`${c.prefix}store にストレージキーが指定されていません。`
|
|
8408
8437
|
), null;
|
|
8409
8438
|
if (i.includes("{{"))
|
|
8410
|
-
return
|
|
8439
|
+
return N.warnOnce(
|
|
8411
8440
|
t,
|
|
8412
8441
|
"expression",
|
|
8413
8442
|
`${c.prefix}store に式は使用できません(静的な文字列を指定してください): ${i}`
|
|
@@ -8416,7 +8445,7 @@ const k = class k {
|
|
|
8416
8445
|
let s = "session";
|
|
8417
8446
|
if (n !== null) {
|
|
8418
8447
|
const d = n.trim();
|
|
8419
|
-
d === "local" || d === "session" ? s = d :
|
|
8448
|
+
d === "local" || d === "session" ? s = d : N.warnOnce(
|
|
8420
8449
|
t,
|
|
8421
8450
|
"type",
|
|
8422
8451
|
`${c.prefix}store-type は session または local を指定してください(session として扱います): ${d}`
|
|
@@ -8425,14 +8454,14 @@ const k = class k {
|
|
|
8425
8454
|
const a = e.getRawAttribute(`${c.prefix}store-arg`), o = a === null || a.trim() === "" ? null : a.trim(), l = e.getRawAttribute(`${c.prefix}store-params`);
|
|
8426
8455
|
let u = null;
|
|
8427
8456
|
if (l !== null) {
|
|
8428
|
-
const d = l.split("&").map((y) => y.trim()).filter((y) => y !== ""),
|
|
8429
|
-
|
|
8457
|
+
const d = l.split("&").map((y) => y.trim()).filter((y) => y !== ""), m = d.filter((y) => !N.isReservedKey(y));
|
|
8458
|
+
m.length !== d.length && N.warnOnce(
|
|
8430
8459
|
t,
|
|
8431
8460
|
"reserved",
|
|
8432
8461
|
`${c.prefix}store-params の予約キー(先頭が _ のキー)は対象外です。`
|
|
8433
|
-
), u =
|
|
8462
|
+
), u = m.length > 0 ? m : null;
|
|
8434
8463
|
}
|
|
8435
|
-
return u === null && o === null ? (
|
|
8464
|
+
return u === null && o === null ? (N.warnOnce(
|
|
8436
8465
|
t,
|
|
8437
8466
|
"target",
|
|
8438
8467
|
`${c.prefix}store には ${c.prefix}store-params または ${c.prefix}store-arg のいずれかが必要です。`
|
|
@@ -8449,14 +8478,14 @@ const k = class k {
|
|
|
8449
8478
|
* @returns レコード。読み取れない場合は null
|
|
8450
8479
|
*/
|
|
8451
8480
|
static readRecord(e) {
|
|
8452
|
-
const t =
|
|
8481
|
+
const t = N.resolveStorage(e.kind);
|
|
8453
8482
|
if (!t)
|
|
8454
8483
|
return null;
|
|
8455
8484
|
let r;
|
|
8456
8485
|
try {
|
|
8457
8486
|
r = t.getItem(e.key);
|
|
8458
8487
|
} catch (n) {
|
|
8459
|
-
return
|
|
8488
|
+
return g.warn(
|
|
8460
8489
|
"Haori",
|
|
8461
8490
|
`ストレージの読み取りに失敗しました: ${e.key}`,
|
|
8462
8491
|
n
|
|
@@ -8468,13 +8497,13 @@ const k = class k {
|
|
|
8468
8497
|
try {
|
|
8469
8498
|
i = JSON.parse(r);
|
|
8470
8499
|
} catch (n) {
|
|
8471
|
-
return
|
|
8500
|
+
return g.warn(
|
|
8472
8501
|
"Haori",
|
|
8473
8502
|
`保存済みデータが JSON として解釈できません: ${e.key}`,
|
|
8474
8503
|
n
|
|
8475
8504
|
), null;
|
|
8476
8505
|
}
|
|
8477
|
-
return
|
|
8506
|
+
return N.isPlainRecord(i) ? i : (g.warn(
|
|
8478
8507
|
"Haori",
|
|
8479
8508
|
`保存済みデータがオブジェクトではありません: ${e.key}`
|
|
8480
8509
|
), null);
|
|
@@ -8492,8 +8521,8 @@ const k = class k {
|
|
|
8492
8521
|
const s = t[e.arg];
|
|
8493
8522
|
if (s === void 0)
|
|
8494
8523
|
return {};
|
|
8495
|
-
if (!
|
|
8496
|
-
return
|
|
8524
|
+
if (!N.isPlainRecord(s))
|
|
8525
|
+
return g.warn(
|
|
8497
8526
|
"Haori",
|
|
8498
8527
|
`保存済みデータの ${e.arg} がオブジェクトではありません: ` + e.key
|
|
8499
8528
|
), {};
|
|
@@ -8501,7 +8530,7 @@ const k = class k {
|
|
|
8501
8530
|
}
|
|
8502
8531
|
const i = e.params ?? Object.keys(r), n = {};
|
|
8503
8532
|
for (const s of i)
|
|
8504
|
-
|
|
8533
|
+
N.isReservedKey(s) || Object.prototype.hasOwnProperty.call(r, s) && (n[s] = r[s]);
|
|
8505
8534
|
return n;
|
|
8506
8535
|
}
|
|
8507
8536
|
/**
|
|
@@ -8518,7 +8547,7 @@ const k = class k {
|
|
|
8518
8547
|
static selectFromData(e, t) {
|
|
8519
8548
|
const r = e.params ?? Object.keys(t), i = {};
|
|
8520
8549
|
for (const n of r) {
|
|
8521
|
-
if (
|
|
8550
|
+
if (N.isReservedKey(n) || !Object.prototype.hasOwnProperty.call(t, n))
|
|
8522
8551
|
continue;
|
|
8523
8552
|
const s = t[n];
|
|
8524
8553
|
s !== void 0 && (i[n] = s);
|
|
@@ -8577,12 +8606,12 @@ const k = class k {
|
|
|
8577
8606
|
* @param selected 基準にする選択内容
|
|
8578
8607
|
*/
|
|
8579
8608
|
static seedSignature(e, t) {
|
|
8580
|
-
const r =
|
|
8609
|
+
const r = N.stringify(t);
|
|
8581
8610
|
if (r === null) {
|
|
8582
|
-
|
|
8611
|
+
N.SIGNATURES.delete(e);
|
|
8583
8612
|
return;
|
|
8584
8613
|
}
|
|
8585
|
-
|
|
8614
|
+
N.SIGNATURES.set(e, { json: r, refs: N.createRefs(t) });
|
|
8586
8615
|
}
|
|
8587
8616
|
/**
|
|
8588
8617
|
* レコードへ選択内容を書き込みます。
|
|
@@ -8596,19 +8625,19 @@ const k = class k {
|
|
|
8596
8625
|
* @returns 書き込めたら true
|
|
8597
8626
|
*/
|
|
8598
8627
|
static writeRecord(e, t) {
|
|
8599
|
-
const r =
|
|
8628
|
+
const r = N.resolveStorage(e.kind);
|
|
8600
8629
|
if (!r)
|
|
8601
8630
|
return !1;
|
|
8602
|
-
const i =
|
|
8631
|
+
const i = N.readRecord(e) ?? {};
|
|
8603
8632
|
if (e.arg !== null) {
|
|
8604
|
-
const n = i[e.arg], s =
|
|
8633
|
+
const n = i[e.arg], s = N.isPlainRecord(n) ? { ...n } : {};
|
|
8605
8634
|
i[e.arg] = { ...s, ...t };
|
|
8606
8635
|
} else
|
|
8607
8636
|
Object.assign(i, t);
|
|
8608
8637
|
try {
|
|
8609
8638
|
return r.setItem(e.key, JSON.stringify(i)), !0;
|
|
8610
8639
|
} catch (n) {
|
|
8611
|
-
return
|
|
8640
|
+
return g.warn(
|
|
8612
8641
|
"Haori",
|
|
8613
8642
|
`ストレージへの保存に失敗しました: ${e.key}`,
|
|
8614
8643
|
n
|
|
@@ -8626,19 +8655,19 @@ const k = class k {
|
|
|
8626
8655
|
* @returns 復元完了の Promise
|
|
8627
8656
|
*/
|
|
8628
8657
|
static restore(e) {
|
|
8629
|
-
const t =
|
|
8658
|
+
const t = N.readDeclaration(e);
|
|
8630
8659
|
if (!t)
|
|
8631
8660
|
return Promise.resolve();
|
|
8632
8661
|
const r = e.getTarget();
|
|
8633
|
-
if (
|
|
8634
|
-
return
|
|
8662
|
+
if (N.isInsideEachRow(e))
|
|
8663
|
+
return N.warnOnce(
|
|
8635
8664
|
r,
|
|
8636
8665
|
"each-row",
|
|
8637
8666
|
`${c.prefix}each の行の内側では ${c.prefix}store を使用できません(行データは親要素側で配列キーを指定してください)。`
|
|
8638
8667
|
), Promise.resolve();
|
|
8639
|
-
|
|
8640
|
-
const i =
|
|
8641
|
-
return
|
|
8668
|
+
N.RESTORED_ELEMENTS.add(r);
|
|
8669
|
+
const i = N.readRecord(t), n = i ? N.extractFromRecord(t, i) : {}, s = { ...e.getRawBindingData() ?? {}, ...n };
|
|
8670
|
+
return N.seedSignature(r, N.selectFromData(t, s)), Object.keys(n).length === 0 ? Promise.resolve() : C.setBindingData(r, s, {
|
|
8642
8671
|
reentrant: !0,
|
|
8643
8672
|
kind: "nonSupply",
|
|
8644
8673
|
sequence: S.nextSequence()
|
|
@@ -8655,34 +8684,34 @@ const k = class k {
|
|
|
8655
8684
|
* @param fragment 対象フラグメント
|
|
8656
8685
|
*/
|
|
8657
8686
|
static mirror(e) {
|
|
8658
|
-
const t =
|
|
8659
|
-
if (!t ||
|
|
8687
|
+
const t = N.readDeclaration(e);
|
|
8688
|
+
if (!t || N.isInsideEachRow(e))
|
|
8660
8689
|
return;
|
|
8661
8690
|
const r = e.getTarget();
|
|
8662
|
-
if (!
|
|
8691
|
+
if (!N.RESTORED_ELEMENTS.has(r))
|
|
8663
8692
|
return;
|
|
8664
8693
|
const i = e.getRawBindingData();
|
|
8665
8694
|
if (!i)
|
|
8666
8695
|
return;
|
|
8667
|
-
const n =
|
|
8696
|
+
const n = N.selectFromData(t, i);
|
|
8668
8697
|
if (Object.keys(n).length === 0)
|
|
8669
8698
|
return;
|
|
8670
|
-
const s =
|
|
8671
|
-
if (s &&
|
|
8699
|
+
const s = N.SIGNATURES.get(r);
|
|
8700
|
+
if (s && N.hasSameRefs(s, n))
|
|
8672
8701
|
return;
|
|
8673
|
-
const a =
|
|
8702
|
+
const a = N.stringify(n);
|
|
8674
8703
|
if (a === null) {
|
|
8675
|
-
|
|
8704
|
+
g.warn(
|
|
8676
8705
|
"Haori",
|
|
8677
8706
|
`保存対象を直列化できないためミラーを行いません: ${t.key}`
|
|
8678
8707
|
);
|
|
8679
8708
|
return;
|
|
8680
8709
|
}
|
|
8681
8710
|
if (s && s.json === a) {
|
|
8682
|
-
s.refs =
|
|
8711
|
+
s.refs = N.createRefs(n);
|
|
8683
8712
|
return;
|
|
8684
8713
|
}
|
|
8685
|
-
|
|
8714
|
+
N.writeRecord(t, n) && N.SIGNATURES.set(r, { json: a, refs: N.createRefs(n) });
|
|
8686
8715
|
}
|
|
8687
8716
|
/**
|
|
8688
8717
|
* レコードを破棄します。
|
|
@@ -8695,15 +8724,15 @@ const k = class k {
|
|
|
8695
8724
|
* @param kind ストレージ種別
|
|
8696
8725
|
*/
|
|
8697
8726
|
static clear(e, t) {
|
|
8698
|
-
const r =
|
|
8727
|
+
const r = N.resolveStorage(t);
|
|
8699
8728
|
if (r) {
|
|
8700
8729
|
try {
|
|
8701
8730
|
r.removeItem(e);
|
|
8702
8731
|
} catch (i) {
|
|
8703
|
-
|
|
8732
|
+
g.warn("Haori", `ストレージの破棄に失敗しました: ${e}`, i);
|
|
8704
8733
|
return;
|
|
8705
8734
|
}
|
|
8706
|
-
|
|
8735
|
+
N.reseedDeclaringElements(e, t);
|
|
8707
8736
|
}
|
|
8708
8737
|
}
|
|
8709
8738
|
/**
|
|
@@ -8716,24 +8745,24 @@ const k = class k {
|
|
|
8716
8745
|
document.querySelectorAll(
|
|
8717
8746
|
`[${c.prefix}store]`
|
|
8718
8747
|
).forEach((i) => {
|
|
8719
|
-
if (!
|
|
8748
|
+
if (!N.RESTORED_ELEMENTS.has(i))
|
|
8720
8749
|
return;
|
|
8721
8750
|
const n = T.get(i);
|
|
8722
8751
|
if (!(n instanceof S))
|
|
8723
8752
|
return;
|
|
8724
|
-
const s =
|
|
8753
|
+
const s = N.readDeclaration(n);
|
|
8725
8754
|
if (!s || s.key !== e || s.kind !== t)
|
|
8726
8755
|
return;
|
|
8727
8756
|
const a = n.getRawBindingData();
|
|
8728
|
-
|
|
8757
|
+
N.seedSignature(
|
|
8729
8758
|
i,
|
|
8730
|
-
a ?
|
|
8759
|
+
a ? N.selectFromData(s, a) : {}
|
|
8731
8760
|
);
|
|
8732
8761
|
});
|
|
8733
8762
|
}
|
|
8734
8763
|
};
|
|
8735
|
-
|
|
8736
|
-
let Fe =
|
|
8764
|
+
N.SIGNATURES = /* @__PURE__ */ new WeakMap(), N.RESTORED_ELEMENTS = /* @__PURE__ */ new WeakSet(), N.WARNED_ELEMENTS = /* @__PURE__ */ new WeakMap(), N.WARNED_KINDS = /* @__PURE__ */ new Set();
|
|
8765
|
+
let Fe = N;
|
|
8737
8766
|
class bt {
|
|
8738
8767
|
/**
|
|
8739
8768
|
* URLのクエリパラメータを取得します。
|
|
@@ -8907,7 +8936,7 @@ function Kt(b, e) {
|
|
|
8907
8936
|
t.body
|
|
8908
8937
|
);
|
|
8909
8938
|
let s = b;
|
|
8910
|
-
Object.keys(i).length > 0 && (s = Et(s, i)), n &&
|
|
8939
|
+
Object.keys(i).length > 0 && (s = Et(s, i)), n && g.warn(
|
|
8911
8940
|
"Haori",
|
|
8912
8941
|
`The ${r} body cannot be converted into a query string and is dropped by the demo runtime normalization. Send the values with ${c.prefix}{event}-data / ${c.prefix}{event}-form, or use the embedded runtime.`
|
|
8913
8942
|
), delete t.body, t.method = "GET";
|
|
@@ -8934,15 +8963,15 @@ function zt(b) {
|
|
|
8934
8963
|
}
|
|
8935
8964
|
] : [e, String(t)]) : String(b);
|
|
8936
8965
|
}
|
|
8937
|
-
function
|
|
8938
|
-
return b instanceof Blob ? !0 : Array.isArray(b) ? b.some(
|
|
8939
|
-
|
|
8966
|
+
function ke(b) {
|
|
8967
|
+
return b instanceof Blob ? !0 : Array.isArray(b) ? b.some(ke) : b !== null && typeof b == "object" ? Object.values(b).some(
|
|
8968
|
+
ke
|
|
8940
8969
|
) : !1;
|
|
8941
8970
|
}
|
|
8942
8971
|
function Gt(b) {
|
|
8943
8972
|
return Object.values(b).some((e) => e instanceof Blob ? !1 : Array.isArray(e) ? e.some(
|
|
8944
|
-
(t) => !(t instanceof Blob) &&
|
|
8945
|
-
) :
|
|
8973
|
+
(t) => !(t instanceof Blob) && ke(t)
|
|
8974
|
+
) : ke(e));
|
|
8946
8975
|
}
|
|
8947
8976
|
function Me(b) {
|
|
8948
8977
|
return Ve(F.getValues(b));
|
|
@@ -9048,15 +9077,15 @@ const p = class p {
|
|
|
9048
9077
|
(r === "click" || r === "error-click" ? j.queryAllInListOrder(i, t) : j.queryAll(i, t)).forEach((a) => {
|
|
9049
9078
|
const o = T.get(a);
|
|
9050
9079
|
o && n.push(o);
|
|
9051
|
-
}), n.length === 0 &&
|
|
9080
|
+
}), n.length === 0 && g.error("Haori", `Element not found: ${i} (${t})`);
|
|
9052
9081
|
else if (r === "error-click")
|
|
9053
|
-
|
|
9082
|
+
g.error(
|
|
9054
9083
|
"Haori",
|
|
9055
9084
|
`${t} にはクリックする要素のセレクタが必要です。`
|
|
9056
9085
|
);
|
|
9057
9086
|
else if (r === "open" || r === "close" || r === "error-close") {
|
|
9058
9087
|
const s = e.getTarget().closest("dialog");
|
|
9059
|
-
s ? n.push(T.get(s)) :
|
|
9088
|
+
s ? n.push(T.get(s)) : g.error("Haori", `Ancestor <dialog> not found (${t})`);
|
|
9060
9089
|
} else
|
|
9061
9090
|
n.push(e);
|
|
9062
9091
|
return n;
|
|
@@ -9197,7 +9226,7 @@ const p = class p {
|
|
|
9197
9226
|
const r = [];
|
|
9198
9227
|
for (const i of (e ?? "").split("&")) {
|
|
9199
9228
|
const n = i.trim();
|
|
9200
|
-
/^\d{3}$/.test(n) ? r.push(Number(n)) :
|
|
9229
|
+
/^\d{3}$/.test(n) ? r.push(Number(n)) : g.warn(
|
|
9201
9230
|
"Haori",
|
|
9202
9231
|
`${t} の "${n}" は 3 桁のステータスではないため無視します。`
|
|
9203
9232
|
);
|
|
@@ -9269,9 +9298,9 @@ const p = class p {
|
|
|
9269
9298
|
try {
|
|
9270
9299
|
i = C.parseDataBind(r);
|
|
9271
9300
|
} catch (n) {
|
|
9272
|
-
return
|
|
9301
|
+
return g.error("Haori", `Invalid fetch headers: ${n}`), null;
|
|
9273
9302
|
}
|
|
9274
|
-
return i === null || typeof i != "object" || Array.isArray(i) ? (
|
|
9303
|
+
return i === null || typeof i != "object" || Array.isArray(i) ? (g.warn(
|
|
9275
9304
|
"Haori",
|
|
9276
9305
|
`${t} はヘッダー名と値のオブジェクトで指定してください(${Array.isArray(i) ? "配列" : `${typeof i} 型の値`}が指定されたため、ヘッダーは設定しません)。`
|
|
9277
9306
|
), null) : i;
|
|
@@ -9500,7 +9529,7 @@ const p = class p {
|
|
|
9500
9529
|
}, i = t ? p.attrName(t, "if") : p.attrName(null, "if", !0);
|
|
9501
9530
|
if (e.hasAttribute(i)) {
|
|
9502
9531
|
const D = e.getRawAttribute(i);
|
|
9503
|
-
typeof D == "string" && D.trim() !== "" ? (r.conditionExpression = F.unwrapConditionExpression(D), r.conditionAttributeName = i) :
|
|
9532
|
+
typeof D == "string" && D.trim() !== "" ? (r.conditionExpression = F.unwrapConditionExpression(D), r.conditionAttributeName = i) : g.warn(
|
|
9504
9533
|
"Haori",
|
|
9505
9534
|
`${i} に条件式が指定されていません。`
|
|
9506
9535
|
);
|
|
@@ -9522,7 +9551,7 @@ const p = class p {
|
|
|
9522
9551
|
);
|
|
9523
9552
|
Z !== null ? r.formFragment = F.getFormFragment(
|
|
9524
9553
|
T.get(Z)
|
|
9525
|
-
) :
|
|
9554
|
+
) : g.error(
|
|
9526
9555
|
"Haori",
|
|
9527
9556
|
`Form element not found: ${$} (${p.attrName(t, "form")})`
|
|
9528
9557
|
);
|
|
@@ -9543,7 +9572,7 @@ ${$}
|
|
|
9543
9572
|
`
|
|
9544
9573
|
);
|
|
9545
9574
|
} catch (Z) {
|
|
9546
|
-
|
|
9575
|
+
g.error("Haori", `Invalid before script: ${Z}`);
|
|
9547
9576
|
}
|
|
9548
9577
|
}
|
|
9549
9578
|
const D = p.attrName(t, "run");
|
|
@@ -9563,7 +9592,7 @@ ${$}
|
|
|
9563
9592
|
${$}
|
|
9564
9593
|
`);
|
|
9565
9594
|
} catch (Q) {
|
|
9566
|
-
|
|
9595
|
+
g.error("Haori", `Invalid run script: ${Q}`);
|
|
9567
9596
|
}
|
|
9568
9597
|
}
|
|
9569
9598
|
Z && (r.runScript = Z);
|
|
@@ -9585,17 +9614,17 @@ ${$}
|
|
|
9585
9614
|
);
|
|
9586
9615
|
u !== null && (a.headers = u);
|
|
9587
9616
|
const d = t ? p.attrName(t, "fetch-content-type") : p.attrName(null, "content-type", !0);
|
|
9588
|
-
let
|
|
9617
|
+
let m = null;
|
|
9589
9618
|
if (e.hasAttribute(d)) {
|
|
9590
9619
|
const D = e.getAttributeEvaluation(d);
|
|
9591
|
-
D?.hasUnresolvedReference && (r.fetchHasUnresolvedReference = !0),
|
|
9620
|
+
D?.hasUnresolvedReference && (r.fetchHasUnresolvedReference = !0), m = p.normalizeAttributeText(
|
|
9592
9621
|
D?.value
|
|
9593
9622
|
);
|
|
9594
9623
|
}
|
|
9595
|
-
if (
|
|
9624
|
+
if (m !== null)
|
|
9596
9625
|
a.headers = p.withContentType(
|
|
9597
9626
|
a.headers,
|
|
9598
|
-
|
|
9627
|
+
m
|
|
9599
9628
|
);
|
|
9600
9629
|
else if (a.method && !p.hasDeclaredContentType(a.headers)) {
|
|
9601
9630
|
const D = a.method.toUpperCase();
|
|
@@ -9607,7 +9636,7 @@ ${$}
|
|
|
9607
9636
|
Object.keys(a).length > 0 && (r.fetchOptions = a);
|
|
9608
9637
|
const y = t ? p.attrName(t, "fetch-download") : p.attrName(null, "download", !0);
|
|
9609
9638
|
if (e.hasAttribute(y) && !s)
|
|
9610
|
-
|
|
9639
|
+
g.warn(
|
|
9611
9640
|
"Haori",
|
|
9612
9641
|
`${y} は ${n} と併せて指定してください(保存する応答が無いため、この宣言は無視します)。`
|
|
9613
9642
|
);
|
|
@@ -9617,7 +9646,7 @@ ${$}
|
|
|
9617
9646
|
r.downloadFileName = D?.hasUnresolvedReference ? null : p.normalizeAttributeText(D?.value);
|
|
9618
9647
|
}
|
|
9619
9648
|
const E = t ? p.attrName(t, "fetch-download-folder") : p.attrName(null, "download-folder", !0);
|
|
9620
|
-
e.hasAttribute(E) && (r.download ? r.downloadFolder = !0 :
|
|
9649
|
+
e.hasAttribute(E) && (r.download ? r.downloadFolder = !0 : g.warn(
|
|
9621
9650
|
"Haori",
|
|
9622
9651
|
`${E} は ${y} と併せて指定してください(書き出す応答が無いため、この宣言は無視します)。`
|
|
9623
9652
|
));
|
|
@@ -9629,14 +9658,14 @@ ${$}
|
|
|
9629
9658
|
$.length > 0 ? (r.bindFragments = [], $.forEach((Z) => {
|
|
9630
9659
|
const Q = T.get(Z);
|
|
9631
9660
|
Q && r.bindFragments.push(Q);
|
|
9632
|
-
})) :
|
|
9661
|
+
})) : g.error(
|
|
9633
9662
|
"Haori",
|
|
9634
9663
|
`Bind element not found: ${D} (${A})`
|
|
9635
9664
|
);
|
|
9636
9665
|
}
|
|
9637
9666
|
}
|
|
9638
|
-
const
|
|
9639
|
-
t ? e.hasAttribute(
|
|
9667
|
+
const k = p.attrName(t, "bind-arg"), M = p.attrName(null, "arg", !0), q = p.attrName(null, "bind-arg", !0);
|
|
9668
|
+
t ? e.hasAttribute(k) && (r.bindArg = e.getRawAttribute(k)) : e.hasAttribute(M) ? r.bindArg = e.getRawAttribute(
|
|
9640
9669
|
M
|
|
9641
9670
|
) : e.hasAttribute(q) && (r.bindArg = e.getRawAttribute(q));
|
|
9642
9671
|
const I = t ? p.attrName(t, "bind-params") : p.attrName(null, "bind-params", !0);
|
|
@@ -9672,7 +9701,7 @@ ${$}
|
|
|
9672
9701
|
Y.length > 0 ? (r.adjustFragments = [], Y.forEach((X) => {
|
|
9673
9702
|
const Ee = T.get(X);
|
|
9674
9703
|
Ee && r.adjustFragments.push(Ee);
|
|
9675
|
-
})) :
|
|
9704
|
+
})) : g.error(
|
|
9676
9705
|
"Haori",
|
|
9677
9706
|
`Adjust element not found: ${W} (${p.attrName(t, "adjust")})`
|
|
9678
9707
|
);
|
|
@@ -9697,7 +9726,7 @@ ${W}
|
|
|
9697
9726
|
`
|
|
9698
9727
|
);
|
|
9699
9728
|
} catch (Y) {
|
|
9700
|
-
|
|
9729
|
+
g.error("Haori", `Invalid after script: ${Y}`);
|
|
9701
9730
|
}
|
|
9702
9731
|
}
|
|
9703
9732
|
if (e.hasAttribute(p.attrName(t, "dialog")) && (r.dialogMessage = p.unescapeNewlines(
|
|
@@ -9785,7 +9814,7 @@ ${W}
|
|
|
9785
9814
|
);
|
|
9786
9815
|
Y !== null ? r.historyFormFragment = F.getFormFragment(
|
|
9787
9816
|
T.get(Y)
|
|
9788
|
-
) :
|
|
9817
|
+
) : g.error(
|
|
9789
9818
|
"Haori",
|
|
9790
9819
|
`Form element not found: ${W} (${p.attrName(t, "history-form")})`
|
|
9791
9820
|
);
|
|
@@ -9857,12 +9886,12 @@ ${W}
|
|
|
9857
9886
|
const Y = j.query(W, ce);
|
|
9858
9887
|
if (Y !== null) {
|
|
9859
9888
|
const X = T.get(Y);
|
|
9860
|
-
X ? r.copySourceFragment = X :
|
|
9889
|
+
X ? r.copySourceFragment = X : g.error(
|
|
9861
9890
|
"Haori",
|
|
9862
9891
|
`Element is not managed by Haori: ${W} (${ce})`
|
|
9863
9892
|
);
|
|
9864
9893
|
} else
|
|
9865
|
-
|
|
9894
|
+
g.error(
|
|
9866
9895
|
"Haori",
|
|
9867
9896
|
`Element not found: ${W} (${ce})`
|
|
9868
9897
|
);
|
|
@@ -9882,7 +9911,7 @@ ${W}
|
|
|
9882
9911
|
);
|
|
9883
9912
|
$ !== null ? r.formFragment = F.getFormFragment(
|
|
9884
9913
|
T.get($)
|
|
9885
|
-
) :
|
|
9914
|
+
) : g.error(
|
|
9886
9915
|
"Haori",
|
|
9887
9916
|
`Form element not found: ${D} (${p.attrName(null, "fetch-form", !0)})`
|
|
9888
9917
|
);
|
|
@@ -9896,7 +9925,7 @@ ${W}
|
|
|
9896
9925
|
D ? (j.queryAll(D, _).forEach((Q) => {
|
|
9897
9926
|
const se = T.get(Q);
|
|
9898
9927
|
se && $.push(se);
|
|
9899
|
-
}), $.length === 0 &&
|
|
9928
|
+
}), $.length === 0 && g.error(
|
|
9900
9929
|
"Haori",
|
|
9901
9930
|
`Element not found: ${D} (${_})`
|
|
9902
9931
|
)) : $.push(e), $.length > 0 && (r.fetchStateFragments = $);
|
|
@@ -9905,7 +9934,7 @@ ${W}
|
|
|
9905
9934
|
if (e.hasAttribute(G)) {
|
|
9906
9935
|
const D = e.getRawAttribute(G), $ = D === null ? "" : D.trim();
|
|
9907
9936
|
if ($ === "")
|
|
9908
|
-
|
|
9937
|
+
g.error(
|
|
9909
9938
|
"Haori",
|
|
9910
9939
|
`ストレージキーが指定されていません (${G})`
|
|
9911
9940
|
);
|
|
@@ -9914,13 +9943,13 @@ ${W}
|
|
|
9914
9943
|
const Z = e.getRawAttribute(
|
|
9915
9944
|
`${G}-type`
|
|
9916
9945
|
), Q = Z === null ? "session" : Z.trim();
|
|
9917
|
-
Q === "local" || Q === "session" ? r.storeClearKind = Q : (
|
|
9946
|
+
Q === "local" || Q === "session" ? r.storeClearKind = Q : (g.warn(
|
|
9918
9947
|
"Haori",
|
|
9919
9948
|
`${G}-type は session または local を指定してください(session として扱います): ${Q}`
|
|
9920
9949
|
), r.storeClearKind = "session");
|
|
9921
9950
|
}
|
|
9922
9951
|
}
|
|
9923
|
-
return s && !r.download && (!r.bindFragments || r.bindFragments.length === 0) && (r.bindFragments = [e], r.defaultSelfBind = !0), r.download && r.bindFragments && r.bindFragments.length > 0 && (
|
|
9952
|
+
return s && !r.download && (!r.bindFragments || r.bindFragments.length === 0) && (r.bindFragments = [e], r.defaultSelfBind = !0), r.download && r.bindFragments && r.bindFragments.length > 0 && (g.warn(
|
|
9924
9953
|
"Haori",
|
|
9925
9954
|
`${y} と同時にバインド先が指定されています(応答はファイルとして保存し、バインドは行いません)。`
|
|
9926
9955
|
), r.bindFragments = null), p.recordRowWriteTargets(r), r;
|
|
@@ -10036,15 +10065,15 @@ ${W}
|
|
|
10036
10065
|
), !this.evaluateExecutionCondition())
|
|
10037
10066
|
return this.skipped = !0, await this.commitEditOnStop(), !1;
|
|
10038
10067
|
if (this.options.runScript) {
|
|
10039
|
-
const
|
|
10068
|
+
const m = this.options.targetFragment?.getTarget() ?? null;
|
|
10040
10069
|
try {
|
|
10041
10070
|
const y = this.options.runScript.call(
|
|
10042
|
-
|
|
10071
|
+
m,
|
|
10043
10072
|
this.domEvent
|
|
10044
10073
|
);
|
|
10045
10074
|
y === !1 && this.domEvent && this.domEvent.preventDefault(), y != null && typeof y.then == "function" && await y;
|
|
10046
10075
|
} catch (y) {
|
|
10047
|
-
|
|
10076
|
+
g.error("Haori", `Run script execution error: ${y}`);
|
|
10048
10077
|
}
|
|
10049
10078
|
}
|
|
10050
10079
|
if (!await this.confirm())
|
|
@@ -10053,7 +10082,7 @@ ${W}
|
|
|
10053
10082
|
return !1;
|
|
10054
10083
|
this.options.resetBeforeFragments && this.options.resetBeforeFragments.length > 0 && (await Promise.all(
|
|
10055
10084
|
this.options.resetBeforeFragments.map(
|
|
10056
|
-
(
|
|
10085
|
+
(m) => F.reset(m, this.operationSequence)
|
|
10057
10086
|
)
|
|
10058
10087
|
), this.captureHistorySnapshots());
|
|
10059
10088
|
const r = this.prepareFetchRequest();
|
|
@@ -10061,14 +10090,14 @@ ${W}
|
|
|
10061
10090
|
const i = r.payload;
|
|
10062
10091
|
let n = r.url, s = r.options, a = !1, o = !1;
|
|
10063
10092
|
if (this.options.beforeCallback) {
|
|
10064
|
-
const
|
|
10093
|
+
const m = this.options.beforeCallback(
|
|
10065
10094
|
n || null,
|
|
10066
10095
|
s || null
|
|
10067
10096
|
);
|
|
10068
|
-
if (
|
|
10069
|
-
if (
|
|
10097
|
+
if (m != null) {
|
|
10098
|
+
if (m === !1 || typeof m == "object" && m.stop)
|
|
10070
10099
|
return !1;
|
|
10071
|
-
typeof
|
|
10100
|
+
typeof m == "object" && (a = "fetchUrl" in m, o = "fetchOptions" in m, n = a ? m.fetchUrl : n, s = o ? m.fetchOptions : s);
|
|
10072
10101
|
}
|
|
10073
10102
|
}
|
|
10074
10103
|
const l = Object.keys(i).length > 0;
|
|
@@ -10078,13 +10107,13 @@ ${W}
|
|
|
10078
10107
|
i,
|
|
10079
10108
|
e
|
|
10080
10109
|
);
|
|
10081
|
-
const
|
|
10110
|
+
const m = (s?.method || "GET").toUpperCase(), E = !a && o && r.transportMode === "query-get" && jt(s) && !Ue(m) ? r.baseUrl ?? n : n, A = Kt(
|
|
10082
10111
|
E,
|
|
10083
10112
|
s
|
|
10084
10113
|
);
|
|
10085
10114
|
n = A.url;
|
|
10086
|
-
const
|
|
10087
|
-
if (I &&
|
|
10115
|
+
const k = { ...A.options }, M = A.normalized ? A.requestedMethod : r.requestedMethod, q = A.effectiveMethod, I = r.transportMode === "query-get" || A.normalized, K = A.queryString ?? r.queryString;
|
|
10116
|
+
if (I && g.info("Haori demo fetch normalization", {
|
|
10088
10117
|
runtime: c.runtime,
|
|
10089
10118
|
requestedMethod: M,
|
|
10090
10119
|
effectiveMethod: q,
|
|
@@ -10103,10 +10132,10 @@ ${W}
|
|
|
10103
10132
|
return O.fetchStart(
|
|
10104
10133
|
this.options.targetFragment.getTarget(),
|
|
10105
10134
|
n,
|
|
10106
|
-
|
|
10135
|
+
k,
|
|
10107
10136
|
l ? i : void 0,
|
|
10108
10137
|
re
|
|
10109
|
-
), await this.injectFetchState("loading"), await p.invokeFetch(n,
|
|
10138
|
+
), await this.injectFetchState("loading"), await p.invokeFetch(n, k).then((H) => this.handleFetchResult(
|
|
10110
10139
|
H,
|
|
10111
10140
|
n || void 0,
|
|
10112
10141
|
J
|
|
@@ -10122,7 +10151,7 @@ ${W}
|
|
|
10122
10151
|
), await this.runErrorActions(null), H;
|
|
10123
10152
|
});
|
|
10124
10153
|
}
|
|
10125
|
-
return await fetch(n,
|
|
10154
|
+
return await fetch(n, k).then((J) => this.handleFetchResult(J, n || void 0));
|
|
10126
10155
|
}
|
|
10127
10156
|
(!this.options.bindFragments || this.options.bindFragments.length === 0) && this.options.formFragment && l && await this.commitFormValues(
|
|
10128
10157
|
this.options.formFragment,
|
|
@@ -10274,7 +10303,7 @@ ${W}
|
|
|
10274
10303
|
}
|
|
10275
10304
|
C.setAttribute(t, r.name, r.value).catch(
|
|
10276
10305
|
(i) => {
|
|
10277
|
-
|
|
10306
|
+
g.error(
|
|
10278
10307
|
"Haori",
|
|
10279
10308
|
`ロックの解除で ${r.name} を適用し直せませんでした: ${i}`
|
|
10280
10309
|
);
|
|
@@ -10305,7 +10334,7 @@ ${W}
|
|
|
10305
10334
|
return this.downloadFolder = De, "ready";
|
|
10306
10335
|
const e = globalThis.showDirectoryPicker;
|
|
10307
10336
|
if (typeof e != "function")
|
|
10308
|
-
return
|
|
10337
|
+
return g.info(
|
|
10309
10338
|
"Haori",
|
|
10310
10339
|
"この環境では保存先のフォルダを選ばせられないため、今までどおり保存します。"
|
|
10311
10340
|
), "fallback";
|
|
@@ -10313,7 +10342,7 @@ ${W}
|
|
|
10313
10342
|
const t = await e.call(globalThis, { mode: "readwrite" });
|
|
10314
10343
|
return De = t, this.downloadFolder = t, "ready";
|
|
10315
10344
|
} catch (t) {
|
|
10316
|
-
return t?.name === "AbortError" ? "cancelled" : (
|
|
10345
|
+
return t?.name === "AbortError" ? "cancelled" : (g.info(
|
|
10317
10346
|
"Haori",
|
|
10318
10347
|
`保存先のフォルダを選ばせられなかったため、今までどおり保存します: ${t}`
|
|
10319
10348
|
), "fallback");
|
|
@@ -10335,7 +10364,7 @@ ${W}
|
|
|
10335
10364
|
const s = await e.blob();
|
|
10336
10365
|
return this.downloadReceivedBytes = s.size, this.dropTotalBytesIfExceeded(), await this.injectFetchState("loading"), s;
|
|
10337
10366
|
} catch (s) {
|
|
10338
|
-
return
|
|
10367
|
+
return g.error(
|
|
10339
10368
|
"Haori",
|
|
10340
10369
|
`応答をファイルとして読み取れませんでした: ${s}`
|
|
10341
10370
|
), null;
|
|
@@ -10369,7 +10398,7 @@ ${W}
|
|
|
10369
10398
|
a - r >= Ht && (r = a, await this.injectFetchState("loading"));
|
|
10370
10399
|
}
|
|
10371
10400
|
} catch (n) {
|
|
10372
|
-
return
|
|
10401
|
+
return g.error("Haori", `応答をファイルとして読み取れませんでした: ${n}`), !1;
|
|
10373
10402
|
}
|
|
10374
10403
|
return !0;
|
|
10375
10404
|
}
|
|
@@ -10435,7 +10464,7 @@ ${W}
|
|
|
10435
10464
|
if (l?.name === "NotFoundError")
|
|
10436
10465
|
s = !1;
|
|
10437
10466
|
else
|
|
10438
|
-
return
|
|
10467
|
+
return g.info(
|
|
10439
10468
|
"Haori",
|
|
10440
10469
|
`保存先のフォルダを確かめられなかったため、今までどおり保存します: ${l}`
|
|
10441
10470
|
), "fallback";
|
|
@@ -10448,7 +10477,7 @@ ${W}
|
|
|
10448
10477
|
try {
|
|
10449
10478
|
a = await (await e.getFileHandle(n, { create: !0 })).createWritable();
|
|
10450
10479
|
} catch (l) {
|
|
10451
|
-
return
|
|
10480
|
+
return g.info(
|
|
10452
10481
|
"Haori",
|
|
10453
10482
|
`保存先のファイルを作れなかったため、今までどおり保存します: ${l}`
|
|
10454
10483
|
), "fallback";
|
|
@@ -10460,18 +10489,18 @@ ${W}
|
|
|
10460
10489
|
try {
|
|
10461
10490
|
return await a.close(), "saved";
|
|
10462
10491
|
} catch (l) {
|
|
10463
|
-
|
|
10492
|
+
g.error("Haori", `ファイルを書き終えられませんでした: ${l}`);
|
|
10464
10493
|
}
|
|
10465
10494
|
try {
|
|
10466
10495
|
await a.abort();
|
|
10467
10496
|
} catch (l) {
|
|
10468
|
-
|
|
10497
|
+
g.error("Haori", `書きかけを取り消せませんでした: ${l}`);
|
|
10469
10498
|
}
|
|
10470
10499
|
if (!s)
|
|
10471
10500
|
try {
|
|
10472
10501
|
await e.removeEntry(n);
|
|
10473
10502
|
} catch (l) {
|
|
10474
|
-
|
|
10503
|
+
g.error(
|
|
10475
10504
|
"Haori",
|
|
10476
10505
|
`作りかけのファイルを取り除けませんでした: ${l}`
|
|
10477
10506
|
);
|
|
@@ -10508,7 +10537,7 @@ ${W}
|
|
|
10508
10537
|
t ?? this.options.fetchUrl ?? null
|
|
10509
10538
|
);
|
|
10510
10539
|
if (typeof URL > "u" || typeof URL.createObjectURL != "function")
|
|
10511
|
-
return
|
|
10540
|
+
return g.error(
|
|
10512
10541
|
"Haori",
|
|
10513
10542
|
"この環境では Blob の URL を生成できないため、ファイルを保存できません。"
|
|
10514
10543
|
), "failed";
|
|
@@ -10570,7 +10599,7 @@ ${W}
|
|
|
10570
10599
|
try {
|
|
10571
10600
|
return decodeURIComponent(a);
|
|
10572
10601
|
} catch (o) {
|
|
10573
|
-
|
|
10602
|
+
g.warn("Haori", `Content-Disposition を解釈できません: ${o}`);
|
|
10574
10603
|
}
|
|
10575
10604
|
}
|
|
10576
10605
|
const r = /filename\s*=\s*"((?:[^"\\]|\\.)*)"/i.exec(e);
|
|
@@ -10621,17 +10650,17 @@ ${W}
|
|
|
10621
10650
|
e.status,
|
|
10622
10651
|
r
|
|
10623
10652
|
);
|
|
10624
|
-
const E = this.selectErrorActions(e.status), A = E?.bind === !0,
|
|
10653
|
+
const E = this.selectErrorActions(e.status), A = E?.bind === !0, k = await this.handleFetchError(
|
|
10625
10654
|
A ? e.clone() : e,
|
|
10626
10655
|
E?.noMessage !== !0 && !A
|
|
10627
10656
|
);
|
|
10628
10657
|
return A && await this.bindResult(e).catch((M) => {
|
|
10629
|
-
|
|
10658
|
+
g.error("Haori", "Failed to bind the error response:", M);
|
|
10630
10659
|
}), await this.injectFetchState(
|
|
10631
10660
|
"error",
|
|
10632
10661
|
e.status,
|
|
10633
10662
|
e.statusText || null,
|
|
10634
|
-
|
|
10663
|
+
k
|
|
10635
10664
|
), await this.runErrorActions(e.status), !1;
|
|
10636
10665
|
}
|
|
10637
10666
|
if (this.options.targetFragment && t && r && O.fetchEnd(
|
|
@@ -10677,10 +10706,10 @@ ${W}
|
|
|
10677
10706
|
);
|
|
10678
10707
|
if (!a && this.options.openFragments && this.options.openFragments.length > 0 && this.options.openFragments.forEach((E) => {
|
|
10679
10708
|
const A = E.getTarget();
|
|
10680
|
-
A instanceof HTMLElement ? s.push(i.openDialog(A)) :
|
|
10709
|
+
A instanceof HTMLElement ? s.push(i.openDialog(A)) : g.error("Haori", "Element is not an HTML element: ", A);
|
|
10681
10710
|
}), !a && this.options.closeFragments && this.options.closeFragments.length > 0 && this.options.closeFragments.forEach((E) => {
|
|
10682
10711
|
const A = E.getTarget();
|
|
10683
|
-
A instanceof HTMLElement ? s.push(i.closeDialog(A)) :
|
|
10712
|
+
A instanceof HTMLElement ? s.push(i.closeDialog(A)) : g.error("Haori", "Element is not an HTML element: ", A);
|
|
10684
10713
|
}), await Promise.all(s), a)
|
|
10685
10714
|
return !1;
|
|
10686
10715
|
const o = p.unescapeNewlines(
|
|
@@ -10711,15 +10740,15 @@ ${W}
|
|
|
10711
10740
|
const d = this.resolveLateAttribute(
|
|
10712
10741
|
"redirect",
|
|
10713
10742
|
this.options.redirectUrl
|
|
10714
|
-
),
|
|
10743
|
+
), m = this.resolveLateAttribute(
|
|
10715
10744
|
"redirect-replace",
|
|
10716
10745
|
this.options.redirectReplaceUrl
|
|
10717
10746
|
);
|
|
10718
|
-
d &&
|
|
10747
|
+
d && m && g.warn(
|
|
10719
10748
|
"Haori",
|
|
10720
10749
|
`${p.attrName(this.eventType, "redirect")} と ${p.attrName(this.eventType, "redirect-replace")} の両方が指定されています。履歴を置き換える方を採用します。`
|
|
10721
10750
|
);
|
|
10722
|
-
const y =
|
|
10751
|
+
const y = m || d;
|
|
10723
10752
|
if (y) {
|
|
10724
10753
|
let E = y;
|
|
10725
10754
|
const A = this.resolveLateAttribute(
|
|
@@ -10730,13 +10759,13 @@ ${W}
|
|
|
10730
10759
|
const M = new URLSearchParams(window.location.search).get(A);
|
|
10731
10760
|
if (M !== null) {
|
|
10732
10761
|
const q = M.trim();
|
|
10733
|
-
bt.isSafeLocalPath(q) ? E = q :
|
|
10762
|
+
bt.isSafeLocalPath(q) ? E = q : g.warn(
|
|
10734
10763
|
"Haori",
|
|
10735
10764
|
`戻り先パスが安全なローカルパスではないため、既定の遷移先へフォールバックします: ${M}`
|
|
10736
10765
|
);
|
|
10737
10766
|
}
|
|
10738
10767
|
}
|
|
10739
|
-
|
|
10768
|
+
m ? window.location.replace(E) : window.location.href = E;
|
|
10740
10769
|
}
|
|
10741
10770
|
return !0;
|
|
10742
10771
|
}
|
|
@@ -10774,7 +10803,7 @@ ${W}
|
|
|
10774
10803
|
continue;
|
|
10775
10804
|
const s = p.takeClickOutcome(n);
|
|
10776
10805
|
if (s === null) {
|
|
10777
|
-
|
|
10806
|
+
g.warn(
|
|
10778
10807
|
"Haori",
|
|
10779
10808
|
`${c.prefix}${this.eventType ?? "fetch"}-${r} はこの対象の完了を待てません(手続きが同期に起動していません)。`
|
|
10780
10809
|
);
|
|
@@ -10805,7 +10834,7 @@ ${W}
|
|
|
10805
10834
|
const i = pe(), n = [];
|
|
10806
10835
|
t.closeFragments?.forEach((a) => {
|
|
10807
10836
|
const o = a.getTarget();
|
|
10808
|
-
o instanceof HTMLElement ? n.push(i.closeDialog(o)) :
|
|
10837
|
+
o instanceof HTMLElement ? n.push(i.closeDialog(o)) : g.error("Haori", "Element is not an HTML element: ", o);
|
|
10809
10838
|
}), await Promise.all(n);
|
|
10810
10839
|
const s = p.normalizeAttributeText(
|
|
10811
10840
|
this.resolveLateAttribute(`${t.key}-toast`, t.toastMessage)
|
|
@@ -10870,7 +10899,7 @@ ${W}
|
|
|
10870
10899
|
if (!i || !n || !n.hasAttribute(i.attributeName))
|
|
10871
10900
|
return r;
|
|
10872
10901
|
const s = n.getAttributeEvaluation(i.attributeName);
|
|
10873
|
-
return s === null ? r : s.hasUnresolvedReference && !i.hasUnresolvedReference ? (V.isEnabled() &&
|
|
10902
|
+
return s === null ? r : s.hasUnresolvedReference && !i.hasUnresolvedReference ? (V.isEnabled() && g.warn(
|
|
10874
10903
|
"Haori",
|
|
10875
10904
|
`${i.attributeName} の参照が手続きの途中で解決できなくなったため、手続き開始時の値を使います`
|
|
10876
10905
|
), r) : s.value ?? null;
|
|
@@ -10892,12 +10921,12 @@ ${W}
|
|
|
10892
10921
|
const a = t ? e : window.location.pathname, o = new URL(a, window.location.href);
|
|
10893
10922
|
if (o.origin !== window.location.origin) {
|
|
10894
10923
|
const u = "history.pushState: cross-origin URL is not allowed: " + o.toString();
|
|
10895
|
-
|
|
10924
|
+
g.error("Haori", u);
|
|
10896
10925
|
return;
|
|
10897
10926
|
}
|
|
10898
10927
|
const l = (u) => {
|
|
10899
|
-
for (const [d,
|
|
10900
|
-
|
|
10928
|
+
for (const [d, m] of Object.entries(u))
|
|
10929
|
+
m != null && (Array.isArray(m) ? (o.searchParams.delete(d), m.forEach((y) => o.searchParams.append(d, String(y)))) : typeof m == "object" ? o.searchParams.set(d, JSON.stringify(m)) : o.searchParams.set(d, String(m)));
|
|
10901
10930
|
};
|
|
10902
10931
|
n && l(r), s && l(i), history.pushState(
|
|
10903
10932
|
{ [Bt]: !0 },
|
|
@@ -10905,7 +10934,7 @@ ${W}
|
|
|
10905
10934
|
o.toString()
|
|
10906
10935
|
), C.refreshUrlParams();
|
|
10907
10936
|
} catch (a) {
|
|
10908
|
-
|
|
10937
|
+
g.error("Haori", `history.pushState failed: ${a}`);
|
|
10909
10938
|
}
|
|
10910
10939
|
}
|
|
10911
10940
|
/**
|
|
@@ -10945,35 +10974,35 @@ ${W}
|
|
|
10945
10974
|
try {
|
|
10946
10975
|
const u = await e.json(), d = [];
|
|
10947
10976
|
if (Array.isArray(u)) {
|
|
10948
|
-
const
|
|
10977
|
+
const m = /* @__PURE__ */ new Map(), y = [];
|
|
10949
10978
|
for (const E of u)
|
|
10950
10979
|
if (E && typeof E == "object" && !Array.isArray(E)) {
|
|
10951
|
-
const A = E.key,
|
|
10980
|
+
const A = E.key, k = E.message, M = typeof A == "string" && A.length > 0 ? A : null, q = typeof k == "string" ? k : k != null ? String(k) : "";
|
|
10952
10981
|
if (q.length === 0)
|
|
10953
10982
|
continue;
|
|
10954
10983
|
if (M !== null) {
|
|
10955
|
-
const I =
|
|
10956
|
-
I.push(q),
|
|
10984
|
+
const I = m.get(M) ?? [];
|
|
10985
|
+
I.push(q), m.set(M, I);
|
|
10957
10986
|
} else
|
|
10958
10987
|
y.push(q);
|
|
10959
10988
|
} else typeof E == "string" && E.length > 0 && y.push(E);
|
|
10960
|
-
for (const [E, A] of
|
|
10989
|
+
for (const [E, A] of m)
|
|
10961
10990
|
d.push({ key: E, message: A.join(`
|
|
10962
10991
|
`) });
|
|
10963
10992
|
for (const E of y)
|
|
10964
10993
|
d.push({ message: E });
|
|
10965
10994
|
} else if (u && typeof u == "object") {
|
|
10966
10995
|
if (typeof u.message == "string" && d.push({ message: u.message }), Array.isArray(u.messages))
|
|
10967
|
-
for (const
|
|
10968
|
-
typeof
|
|
10996
|
+
for (const m of u.messages)
|
|
10997
|
+
typeof m == "string" && d.push({ message: m });
|
|
10969
10998
|
if (u.errors && typeof u.errors == "object")
|
|
10970
|
-
for (const [
|
|
10971
|
-
Array.isArray(y) ? d.push({ key:
|
|
10972
|
-
`) }) : typeof y == "string" ? d.push({ key:
|
|
10999
|
+
for (const [m, y] of Object.entries(u.errors))
|
|
11000
|
+
Array.isArray(y) ? d.push({ key: m, message: y.join(`
|
|
11001
|
+
`) }) : typeof y == "string" ? d.push({ key: m, message: y }) : y != null && d.push({ key: m, message: String(y) });
|
|
10973
11002
|
if (d.length === 0)
|
|
10974
|
-
for (const [
|
|
10975
|
-
|
|
10976
|
-
`) }) : typeof y == "string" && d.push({ key:
|
|
11003
|
+
for (const [m, y] of Object.entries(u))
|
|
11004
|
+
m === "message" || m === "messages" || m === "errors" || (Array.isArray(y) ? d.push({ key: m, message: y.join(`
|
|
11005
|
+
`) }) : typeof y == "string" && d.push({ key: m, message: y }));
|
|
10977
11006
|
}
|
|
10978
11007
|
return await a(d);
|
|
10979
11008
|
} catch {
|
|
@@ -11093,10 +11122,10 @@ ${W}
|
|
|
11093
11122
|
r,
|
|
11094
11123
|
this.options.formFragment ?? null
|
|
11095
11124
|
), s = ne.evaluateDetailed(t, n);
|
|
11096
|
-
return s.unresolvedReference ? (e ||
|
|
11125
|
+
return s.unresolvedReference ? (e || g.warn(
|
|
11097
11126
|
"Haori",
|
|
11098
11127
|
`${i} の参照が解決できないため実行しません: ${t}`
|
|
11099
|
-
), !1) : s.value ? !0 : (!e && V.isEnabled() &&
|
|
11128
|
+
), !1) : s.value ? !0 : (!e && V.isEnabled() && g.warn(
|
|
11100
11129
|
"Haori",
|
|
11101
11130
|
`${i} の条件が偽のため手続きを中断しました: ${t}`
|
|
11102
11131
|
), !1);
|
|
@@ -11158,7 +11187,7 @@ ${W}
|
|
|
11158
11187
|
response: i
|
|
11159
11188
|
});
|
|
11160
11189
|
} catch (o) {
|
|
11161
|
-
|
|
11190
|
+
g.error("Haori", `Invalid bind-transform: ${o}`);
|
|
11162
11191
|
}
|
|
11163
11192
|
if (this.options.bindParams) {
|
|
11164
11193
|
const o = {};
|
|
@@ -11167,7 +11196,7 @@ ${W}
|
|
|
11167
11196
|
}), i = o;
|
|
11168
11197
|
}
|
|
11169
11198
|
if (this.suppressEmptyReplaceBind && !this.options.bindArg && !this.options.bindMerge && i !== null && typeof i == "object" && !Array.isArray(i) && Object.keys(i).length === 0) {
|
|
11170
|
-
|
|
11199
|
+
g.warn(
|
|
11171
11200
|
"Haori",
|
|
11172
11201
|
`Skipped binding because the input has no value to collect; the bind target would be replaced with an empty object. Add a name attribute to the input, or specify ${c.prefix}${this.eventType}-form.`
|
|
11173
11202
|
);
|
|
@@ -11180,7 +11209,7 @@ ${W}
|
|
|
11180
11209
|
if (l.kind === "skip")
|
|
11181
11210
|
return;
|
|
11182
11211
|
if (l.kind === "row") {
|
|
11183
|
-
const
|
|
11212
|
+
const m = this.options.bindArg;
|
|
11184
11213
|
a.push({
|
|
11185
11214
|
container: l.container,
|
|
11186
11215
|
row: o,
|
|
@@ -11189,14 +11218,14 @@ ${W}
|
|
|
11189
11218
|
apply: (y) => {
|
|
11190
11219
|
const E = this.resolveCurrentRowItem(o, y), A = { ...E };
|
|
11191
11220
|
if (i && typeof i == "object" && !Array.isArray(i)) {
|
|
11192
|
-
const
|
|
11193
|
-
A[
|
|
11221
|
+
const k = E[m], M = k !== null && typeof k == "object" && !Array.isArray(k) ? k : {};
|
|
11222
|
+
A[m] = this.mergeAppendBindingData(
|
|
11194
11223
|
o,
|
|
11195
11224
|
i,
|
|
11196
11225
|
M
|
|
11197
11226
|
);
|
|
11198
11227
|
} else
|
|
11199
|
-
A[
|
|
11228
|
+
A[m] = i;
|
|
11200
11229
|
return this.reconcileRowUserEdits(o, A);
|
|
11201
11230
|
}
|
|
11202
11231
|
});
|
|
@@ -11204,7 +11233,7 @@ ${W}
|
|
|
11204
11233
|
}
|
|
11205
11234
|
const u = { ...o.getRawBindingData() ?? {} }, d = this.options.bindArg;
|
|
11206
11235
|
if (i && typeof i == "object" && !Array.isArray(i)) {
|
|
11207
|
-
const
|
|
11236
|
+
const m = u[d], y = m && typeof m == "object" && !Array.isArray(m) ? m : {};
|
|
11208
11237
|
u[d] = this.mergeAppendBindingData(
|
|
11209
11238
|
o,
|
|
11210
11239
|
i,
|
|
@@ -11235,13 +11264,13 @@ ${W}
|
|
|
11235
11264
|
});
|
|
11236
11265
|
else if (typeof i == "string") {
|
|
11237
11266
|
if (this.options.defaultSelfBind) {
|
|
11238
|
-
|
|
11267
|
+
g.warn(
|
|
11239
11268
|
"Haori",
|
|
11240
11269
|
"string data is not bound because no bind target was specified."
|
|
11241
11270
|
);
|
|
11242
11271
|
return;
|
|
11243
11272
|
}
|
|
11244
|
-
return
|
|
11273
|
+
return g.error("Haori", "string data cannot be bound without a bindArg."), Promise.reject(
|
|
11245
11274
|
new Error("string data cannot be bound without a bindArg.")
|
|
11246
11275
|
);
|
|
11247
11276
|
} else
|
|
@@ -11255,8 +11284,8 @@ ${W}
|
|
|
11255
11284
|
row: o,
|
|
11256
11285
|
attributeName: s,
|
|
11257
11286
|
syncWhenUnchanged: "reflect",
|
|
11258
|
-
apply: (
|
|
11259
|
-
const y = this.options.bindMerge ? this.resolveCurrentRowItem(o,
|
|
11287
|
+
apply: (m) => {
|
|
11288
|
+
const y = this.options.bindMerge ? this.resolveCurrentRowItem(o, m) : m, E = this.mergeAppendBindingData(
|
|
11260
11289
|
o,
|
|
11261
11290
|
i,
|
|
11262
11291
|
y
|
|
@@ -11577,12 +11606,12 @@ ${W}
|
|
|
11577
11606
|
const n = { ...this.options.fetchOptions || {} }, s = new Headers(
|
|
11578
11607
|
n.headers || void 0
|
|
11579
11608
|
), a = (n.method || "GET").toUpperCase(), o = c.runtime === "demo" && !Ue(a), l = o ? "GET" : a;
|
|
11580
|
-
if (n.method = l, Object.keys(t).length > 0 &&
|
|
11609
|
+
if (n.method = l, Object.keys(t).length > 0 && ke(t)) {
|
|
11581
11610
|
const d = s.get("Content-Type") || "";
|
|
11582
|
-
l !== "GET" && l !== "HEAD" && l !== "OPTIONS" && /multipart\/form-data/i.test(d) ? Gt(t) &&
|
|
11611
|
+
l !== "GET" && l !== "HEAD" && l !== "OPTIONS" && /multipart\/form-data/i.test(d) ? Gt(t) && g.warn(
|
|
11583
11612
|
"Haori",
|
|
11584
11613
|
`A File value nested under ${c.prefix}form-object / ${c.prefix}form-list cannot be sent. Place file inputs at the top level of the collected form values.`
|
|
11585
|
-
) :
|
|
11614
|
+
) : g.warn(
|
|
11586
11615
|
"Haori",
|
|
11587
11616
|
`A File value cannot be sent without ${c.prefix}fetch-content-type="multipart/form-data" and a body method such as POST.`
|
|
11588
11617
|
);
|
|
@@ -11593,17 +11622,17 @@ ${W}
|
|
|
11593
11622
|
const d = s.get("Content-Type") || "";
|
|
11594
11623
|
if (/multipart\/form-data/i.test(d)) {
|
|
11595
11624
|
s.delete("Content-Type");
|
|
11596
|
-
const
|
|
11625
|
+
const m = new FormData();
|
|
11597
11626
|
for (const [y, E] of Object.entries(t))
|
|
11598
|
-
E == null ?
|
|
11599
|
-
A instanceof Blob ?
|
|
11600
|
-
}) :
|
|
11601
|
-
n.body =
|
|
11627
|
+
E == null ? m.append(y, "") : E instanceof Blob ? m.append(y, E) : Array.isArray(E) ? E.forEach((A) => {
|
|
11628
|
+
A instanceof Blob ? m.append(y, A) : m.append(y, Ae(A));
|
|
11629
|
+
}) : m.append(y, Ae(E));
|
|
11630
|
+
n.body = m;
|
|
11602
11631
|
} else if (/application\/x-www-form-urlencoded/i.test(d)) {
|
|
11603
|
-
const
|
|
11632
|
+
const m = new URLSearchParams();
|
|
11604
11633
|
for (const [y, E] of Object.entries(t))
|
|
11605
|
-
E !== void 0 && (Array.isArray(E) ? E.forEach((A) =>
|
|
11606
|
-
n.body =
|
|
11634
|
+
E !== void 0 && (Array.isArray(E) ? E.forEach((A) => m.append(y, Ae(A))) : m.append(y, Ae(E)));
|
|
11635
|
+
n.body = m;
|
|
11607
11636
|
} else
|
|
11608
11637
|
s.set("Content-Type", "application/json"), n.body = JSON.stringify(t);
|
|
11609
11638
|
}
|
|
@@ -11699,11 +11728,11 @@ ${W}
|
|
|
11699
11728
|
*/
|
|
11700
11729
|
getRowFragment() {
|
|
11701
11730
|
if (!this.options.targetFragment)
|
|
11702
|
-
return
|
|
11731
|
+
return g.error("Haori", "Target fragment is not specified for row operation."), null;
|
|
11703
11732
|
const e = this.options.targetFragment.closestByAttribute(
|
|
11704
11733
|
`${c.prefix}row`
|
|
11705
11734
|
);
|
|
11706
|
-
return e || (
|
|
11735
|
+
return e || (g.error("Haori", "Row fragment not found."), null);
|
|
11707
11736
|
}
|
|
11708
11737
|
/**
|
|
11709
11738
|
* 行操作の対象となる `data-each` コンテナを解決します。
|
|
@@ -11719,20 +11748,20 @@ ${W}
|
|
|
11719
11748
|
resolveRowContainer(e) {
|
|
11720
11749
|
const t = this.options.targetFragment;
|
|
11721
11750
|
if (!t)
|
|
11722
|
-
return
|
|
11751
|
+
return g.error("Haori", "Target fragment is not specified for row operation."), null;
|
|
11723
11752
|
const r = p.attrName(this.eventType, e), i = j.read(t, r);
|
|
11724
11753
|
if (i !== null && i.trim() !== "") {
|
|
11725
11754
|
const s = j.query(i, r, document);
|
|
11726
11755
|
if (s === null)
|
|
11727
|
-
return
|
|
11756
|
+
return g.error(
|
|
11728
11757
|
"Haori",
|
|
11729
11758
|
`Row container not found: ${i} (${r})`
|
|
11730
11759
|
), null;
|
|
11731
11760
|
const a = T.get(s);
|
|
11732
|
-
return a instanceof S ? a.hasAttribute(`${c.prefix}each`) ? a : (
|
|
11761
|
+
return a instanceof S ? a.hasAttribute(`${c.prefix}each`) ? a : (g.error(
|
|
11733
11762
|
"Haori",
|
|
11734
11763
|
`Row container must have ${c.prefix}each: ${i} (${r})`
|
|
11735
|
-
), null) : (
|
|
11764
|
+
), null) : (g.error(
|
|
11736
11765
|
"Haori",
|
|
11737
11766
|
`Row container is not initialized: ${i} (${r})`
|
|
11738
11767
|
), null);
|
|
@@ -11759,45 +11788,45 @@ ${W}
|
|
|
11759
11788
|
static resolveEachArray(e, t = !1) {
|
|
11760
11789
|
const r = e.getRawAttribute(`${c.prefix}each`);
|
|
11761
11790
|
if (r === null)
|
|
11762
|
-
return t ||
|
|
11791
|
+
return t || g.error(
|
|
11763
11792
|
"Haori",
|
|
11764
11793
|
`Row container has no ${c.prefix}each expression.`
|
|
11765
11794
|
), null;
|
|
11766
11795
|
const i = e.getRawAttribute(`${c.prefix}each-array`), n = i !== null, s = n ? `${c.prefix}each-array` : `${c.prefix}each`, a = n ? i : r, o = a.trim().split(".");
|
|
11767
11796
|
if (!(o.length > 0 && o.every((A) => /^[A-Za-z_$][\w$]*$/.test(A))))
|
|
11768
|
-
return t ||
|
|
11797
|
+
return t || g.error(
|
|
11769
11798
|
"Haori",
|
|
11770
11799
|
`Row operations require a plain identifier path for ${s} (got: ${a}).` + (n ? "" : ` Declare ${c.prefix}each-array to specify the array to write back to.`)
|
|
11771
11800
|
), null;
|
|
11772
11801
|
if (n && e.getRawAttribute(`${c.prefix}each-key`) === null)
|
|
11773
|
-
return t ||
|
|
11802
|
+
return t || g.error(
|
|
11774
11803
|
"Haori",
|
|
11775
11804
|
`${c.prefix}each-array requires ${c.prefix}each-key (${c.prefix}each-array="${a}").`
|
|
11776
11805
|
), null;
|
|
11777
11806
|
const u = p.resolveRowScopeBase(e, o[0]);
|
|
11778
11807
|
if (u === "unresolvable")
|
|
11779
11808
|
return null;
|
|
11780
|
-
let d,
|
|
11809
|
+
let d, m, y;
|
|
11781
11810
|
if (u)
|
|
11782
|
-
d = u.owner,
|
|
11811
|
+
d = u.owner, m = u.ownerData, y = [...u.path, ...o.slice(1)];
|
|
11783
11812
|
else {
|
|
11784
|
-
for (d = e,
|
|
11813
|
+
for (d = e, m = null; d; ) {
|
|
11785
11814
|
const A = d.getRawBindingData();
|
|
11786
11815
|
if (A && o[0] in A && !p.isRowScopeKey(d, o[0])) {
|
|
11787
|
-
|
|
11816
|
+
m = A;
|
|
11788
11817
|
break;
|
|
11789
11818
|
}
|
|
11790
11819
|
d = d.getParent();
|
|
11791
11820
|
}
|
|
11792
11821
|
y = o;
|
|
11793
11822
|
}
|
|
11794
|
-
if (!d || !
|
|
11795
|
-
return t ||
|
|
11823
|
+
if (!d || !m)
|
|
11824
|
+
return t || g.error(
|
|
11796
11825
|
"Haori",
|
|
11797
11826
|
`Binding data owner not found for ${s}="${a}".`
|
|
11798
11827
|
), null;
|
|
11799
|
-
const E = p.readPathValue(
|
|
11800
|
-
return Array.isArray(E) ? { owner: d, ownerData:
|
|
11828
|
+
const E = p.readPathValue(m, y);
|
|
11829
|
+
return Array.isArray(E) ? { owner: d, ownerData: m, array: E, path: y, mapped: n } : (t || g.error(
|
|
11801
11830
|
"Haori",
|
|
11802
11831
|
`${s}="${a}" does not resolve to an array.`
|
|
11803
11832
|
), null);
|
|
@@ -11830,7 +11859,7 @@ ${W}
|
|
|
11830
11859
|
if (n.getAttribute(`${c.prefix}each-arg`) === t) {
|
|
11831
11860
|
const s = p.resolveEachArray(n, !0);
|
|
11832
11861
|
if (!s)
|
|
11833
|
-
return
|
|
11862
|
+
return g.error(
|
|
11834
11863
|
"Haori",
|
|
11835
11864
|
`Row operations cannot resolve the write-back array for ${c.prefix}each="${e.getRawAttribute(
|
|
11836
11865
|
`${c.prefix}each`
|
|
@@ -11941,10 +11970,10 @@ ${W}
|
|
|
11941
11970
|
if (!r || !r.has(e))
|
|
11942
11971
|
return { kind: "plain" };
|
|
11943
11972
|
const i = r.get(e) ?? null;
|
|
11944
|
-
return i === null ? (
|
|
11973
|
+
return i === null ? (g.warn(
|
|
11945
11974
|
"Haori",
|
|
11946
11975
|
`Target is not a row of the ${c.prefix}each container (${t}).`
|
|
11947
|
-
), { kind: "skip" }) : p.getRowFragments(i).includes(e) ? { kind: "row", container: i } : (
|
|
11976
|
+
), { kind: "skip" }) : p.getRowFragments(i).includes(e) ? { kind: "row", container: i } : (g.warn(
|
|
11948
11977
|
"Haori",
|
|
11949
11978
|
`The target row is no longer in the ${c.prefix}each container; the write was skipped (${t}).`
|
|
11950
11979
|
), { kind: "skip" });
|
|
@@ -11977,16 +12006,16 @@ ${W}
|
|
|
11977
12006
|
const d = p.resolveRowArrayIndex(u, a);
|
|
11978
12007
|
if (d === null)
|
|
11979
12008
|
continue;
|
|
11980
|
-
const
|
|
11981
|
-
if (
|
|
11982
|
-
|
|
12009
|
+
const m = a[d];
|
|
12010
|
+
if (m === null || typeof m != "object" || Array.isArray(m)) {
|
|
12011
|
+
g.warn(
|
|
11983
12012
|
"Haori",
|
|
11984
12013
|
`Row data is not an object; the write was skipped (${u.attributeName}).`
|
|
11985
12014
|
);
|
|
11986
12015
|
continue;
|
|
11987
12016
|
}
|
|
11988
|
-
const y = u.apply(
|
|
11989
|
-
if (p.isSameRowItem(
|
|
12017
|
+
const y = u.apply(m);
|
|
12018
|
+
if (p.isSameRowItem(m, y)) {
|
|
11990
12019
|
u.syncWhenUnchanged && r.push(
|
|
11991
12020
|
p.syncUnchangedRowValues(
|
|
11992
12021
|
u.row,
|
|
@@ -12018,7 +12047,7 @@ ${W}
|
|
|
12018
12047
|
);
|
|
12019
12048
|
if (C.isEachUpdateRunning(n)) {
|
|
12020
12049
|
l.catch((u) => {
|
|
12021
|
-
|
|
12050
|
+
g.error("Haori", "Failed to write row data.", u);
|
|
12022
12051
|
});
|
|
12023
12052
|
return;
|
|
12024
12053
|
}
|
|
@@ -12104,27 +12133,27 @@ ${W}
|
|
|
12104
12133
|
static resolveRowIndex(e, t, r, i) {
|
|
12105
12134
|
const n = p.getRowFragments(e), s = n.indexOf(t);
|
|
12106
12135
|
if (s === -1)
|
|
12107
|
-
return
|
|
12136
|
+
return g.warn(
|
|
12108
12137
|
"Haori",
|
|
12109
12138
|
`The target row is no longer in the ${c.prefix}each container; the write was skipped (${i}).`
|
|
12110
12139
|
), null;
|
|
12111
12140
|
const a = e.getAttribute(`${c.prefix}each-key`), o = t.getListKey();
|
|
12112
12141
|
if (a && o !== null) {
|
|
12113
12142
|
const l = [];
|
|
12114
|
-
r.forEach((
|
|
12143
|
+
r.forEach((m, y) => {
|
|
12115
12144
|
C.createListKey(
|
|
12116
|
-
|
|
12145
|
+
m,
|
|
12117
12146
|
String(a),
|
|
12118
12147
|
y
|
|
12119
12148
|
) === o && l.push(y);
|
|
12120
12149
|
});
|
|
12121
|
-
const u = n.slice(0, s).filter((
|
|
12122
|
-
return d === -1 ? (
|
|
12150
|
+
const u = n.slice(0, s).filter((m) => m.getListKey() === o).length, d = l[u] ?? -1;
|
|
12151
|
+
return d === -1 ? (g.warn(
|
|
12123
12152
|
"Haori",
|
|
12124
12153
|
`No array element corresponds to the target row (key "${o}"); the write was skipped (${i}).`
|
|
12125
12154
|
), null) : d;
|
|
12126
12155
|
}
|
|
12127
|
-
return s >= r.length ? (
|
|
12156
|
+
return s >= r.length ? (g.warn(
|
|
12128
12157
|
"Haori",
|
|
12129
12158
|
`The target row index is out of range; the write was skipped (${i}).`
|
|
12130
12159
|
), null) : s;
|
|
@@ -12223,14 +12252,14 @@ ${W}
|
|
|
12223
12252
|
() => l(o + 1)
|
|
12224
12253
|
))
|
|
12225
12254
|
return Promise.resolve();
|
|
12226
|
-
const
|
|
12255
|
+
const m = /* @__PURE__ */ new Map();
|
|
12227
12256
|
return a.forEach((y) => {
|
|
12228
12257
|
const E = y.getListKey();
|
|
12229
|
-
E !== null && !
|
|
12258
|
+
E !== null && !m.has(String(E)) && m.set(String(E), y);
|
|
12230
12259
|
}), d.forEach((y, E) => {
|
|
12231
12260
|
if (p.isSameRowItem(i.array[E], y))
|
|
12232
12261
|
return;
|
|
12233
|
-
const A =
|
|
12262
|
+
const A = m.get(
|
|
12234
12263
|
C.createListKey(
|
|
12235
12264
|
y,
|
|
12236
12265
|
null,
|
|
@@ -12314,24 +12343,24 @@ class Xt {
|
|
|
12314
12343
|
try {
|
|
12315
12344
|
r = await fetch(e, t);
|
|
12316
12345
|
} catch (n) {
|
|
12317
|
-
throw
|
|
12346
|
+
throw g.error("[Haori]", "Failed to fetch import source:", e, n), new Error(`Failed to fetch: ${e}`);
|
|
12318
12347
|
}
|
|
12319
12348
|
if (!r.ok) {
|
|
12320
12349
|
yt(r.status);
|
|
12321
12350
|
const n = `${r.status} ${r.statusText}`;
|
|
12322
|
-
throw
|
|
12351
|
+
throw g.error("[Haori]", "Import HTTP error:", e, n), new Error(`Failed to load ${e}: ${n}`);
|
|
12323
12352
|
}
|
|
12324
12353
|
let i;
|
|
12325
12354
|
try {
|
|
12326
12355
|
i = await r.text();
|
|
12327
12356
|
} catch (n) {
|
|
12328
|
-
throw
|
|
12357
|
+
throw g.error("[Haori]", "Failed to read response text:", e, n), new Error(`Failed to read response from: ${e}`);
|
|
12329
12358
|
}
|
|
12330
12359
|
try {
|
|
12331
12360
|
const s = new DOMParser().parseFromString(i, "text/html");
|
|
12332
|
-
return s && s.body ? s.body.innerHTML : (
|
|
12361
|
+
return s && s.body ? s.body.innerHTML : (g.warn("[Haori]", "No body found in imported document:", e), i);
|
|
12333
12362
|
} catch (n) {
|
|
12334
|
-
return
|
|
12363
|
+
return g.error("[Haori]", "Failed to parse imported HTML:", e, n), i;
|
|
12335
12364
|
}
|
|
12336
12365
|
}
|
|
12337
12366
|
}
|
|
@@ -12507,7 +12536,7 @@ const f = class f {
|
|
|
12507
12536
|
const r = e.getTarget();
|
|
12508
12537
|
if (!t && f.initialValueRestores.size > 0 && e.hasAttribute(`${c.prefix}fetch-form`))
|
|
12509
12538
|
return Promise.all(f.initialValueRestores).then(() => f.executeManagedFetch(e, !0)).catch((a) => {
|
|
12510
|
-
|
|
12539
|
+
g.error("Haori", `初期表示の取得に失敗しました: ${a}`);
|
|
12511
12540
|
}), Promise.resolve();
|
|
12512
12541
|
const i = f.getReactiveFetchState(r), n = oe.resolveAutoFetchSignature(e);
|
|
12513
12542
|
if (i.running)
|
|
@@ -12555,7 +12584,7 @@ const f = class f {
|
|
|
12555
12584
|
});
|
|
12556
12585
|
});
|
|
12557
12586
|
}).catch((a) => {
|
|
12558
|
-
t.removeAttribute(`${c.prefix}importing`), O.importError(t, n, a),
|
|
12587
|
+
t.removeAttribute(`${c.prefix}importing`), O.importError(t, n, a), g.error("[Haori]", "Failed to import HTML:", n, a);
|
|
12559
12588
|
}).finally(() => {
|
|
12560
12589
|
if (r.running = !1, r.rerunRequested)
|
|
12561
12590
|
return r.rerunRequested = !1, f.executeManagedImport(e);
|
|
@@ -12765,22 +12794,22 @@ const f = class f {
|
|
|
12765
12794
|
case `${c.prefix}bind`: {
|
|
12766
12795
|
if (r !== null && i && s instanceof S && s.consumeSelfWrittenBind(r))
|
|
12767
12796
|
break;
|
|
12768
|
-
const
|
|
12797
|
+
const m = r === null ? {} : f.parseDataBind(r);
|
|
12769
12798
|
if (i) {
|
|
12770
12799
|
const y = n ?? S.nextSequence();
|
|
12771
12800
|
return r === null ? (o.push(
|
|
12772
|
-
f.setBindingData(e,
|
|
12801
|
+
f.setBindingData(e, m, {
|
|
12773
12802
|
reflectToAttribute: !1,
|
|
12774
12803
|
sequence: y
|
|
12775
12804
|
})
|
|
12776
12805
|
), o.push(s.removeAttribute(t))) : o.push(
|
|
12777
|
-
f.setBindingData(e,
|
|
12806
|
+
f.setBindingData(e, m, {
|
|
12778
12807
|
sequence: y
|
|
12779
12808
|
})
|
|
12780
12809
|
), Promise.all(o).then(() => {
|
|
12781
12810
|
});
|
|
12782
12811
|
}
|
|
12783
|
-
r === null && s.clearBindingDataCache(), s.setBindingData(
|
|
12812
|
+
r === null && s.clearBindingDataCache(), s.setBindingData(m);
|
|
12784
12813
|
break;
|
|
12785
12814
|
}
|
|
12786
12815
|
case `${c.prefix}derive`:
|
|
@@ -12827,8 +12856,8 @@ const f = class f {
|
|
|
12827
12856
|
return r !== null && F.applyCustomValidity(s), Promise.all(o).then(() => {
|
|
12828
12857
|
});
|
|
12829
12858
|
case `${c.prefix}url-param`: {
|
|
12830
|
-
const
|
|
12831
|
-
|
|
12859
|
+
const m = s.getAttribute(`${c.prefix}url-arg`), y = bt.readParams();
|
|
12860
|
+
m === null && s.hasAttribute(`${c.prefix}store`) && g.warn(
|
|
12832
12861
|
"Haori",
|
|
12833
12862
|
`${c.prefix}url-param を ${c.prefix}url-arg なしで ${c.prefix}store と併用すると復元した値が消えます(${c.prefix}url-arg を指定してください)。`
|
|
12834
12863
|
);
|
|
@@ -12837,11 +12866,11 @@ const f = class f {
|
|
|
12837
12866
|
kind: "nonSupply",
|
|
12838
12867
|
sequence: S.nextSequence()
|
|
12839
12868
|
};
|
|
12840
|
-
if (
|
|
12869
|
+
if (m === null)
|
|
12841
12870
|
o.push(f.setBindingData(e, y, E));
|
|
12842
12871
|
else {
|
|
12843
12872
|
const A = s.getRawBindingData() || {};
|
|
12844
|
-
A[String(
|
|
12873
|
+
A[String(m)] = y, o.push(f.setBindingData(e, A, E));
|
|
12845
12874
|
}
|
|
12846
12875
|
break;
|
|
12847
12876
|
}
|
|
@@ -12850,8 +12879,8 @@ const f = class f {
|
|
|
12850
12879
|
() => d === null ? void 0 : d()
|
|
12851
12880
|
).then(() => {
|
|
12852
12881
|
if (l !== null)
|
|
12853
|
-
return s.setDeriveInputSignature(u), l.then((
|
|
12854
|
-
if (
|
|
12882
|
+
return s.setDeriveInputSignature(u), l.then((m) => {
|
|
12883
|
+
if (m)
|
|
12855
12884
|
return f.reevaluateChildren(s);
|
|
12856
12885
|
});
|
|
12857
12886
|
}).then(() => {
|
|
@@ -12890,19 +12919,19 @@ const f = class f {
|
|
|
12890
12919
|
...r.editedPaths === void 0 ? {} : { editedPaths: r.editedPaths }
|
|
12891
12920
|
}, d = o === "supply";
|
|
12892
12921
|
d && i.markSupplyApplied(l);
|
|
12893
|
-
const
|
|
12922
|
+
const m = S.currentSequence(), y = i.getRawBindingData();
|
|
12894
12923
|
d && (r.clearUserEdits ?? !0) && f.clearUserEditMarks(i, l);
|
|
12895
12924
|
const E = a ? f.resolveByPathAuthority(i, y, t, u) : t;
|
|
12896
12925
|
i.setBindingData(E), a && (O.bindChange(e, y, E, "manual"), Fe.mirror(i));
|
|
12897
12926
|
const A = () => {
|
|
12898
12927
|
i.markBindingWorkStart();
|
|
12899
|
-
const
|
|
12928
|
+
const k = i.getRawBindingData() ?? E;
|
|
12900
12929
|
let M = a ? i.setAttribute(
|
|
12901
12930
|
`${c.prefix}bind`,
|
|
12902
|
-
JSON.stringify(f.withoutReservedBindingKeys(
|
|
12931
|
+
JSON.stringify(f.withoutReservedBindingKeys(k))
|
|
12903
12932
|
) : Promise.resolve();
|
|
12904
12933
|
return e.tagName === "FORM" && (M = M.then(() => {
|
|
12905
|
-
if (i.wasResetAfter(
|
|
12934
|
+
if (i.wasResetAfter(m))
|
|
12906
12935
|
return;
|
|
12907
12936
|
const q = i.getRawBindingData() ?? E;
|
|
12908
12937
|
return F.syncValues(
|
|
@@ -12912,9 +12941,9 @@ const f = class f {
|
|
|
12912
12941
|
u
|
|
12913
12942
|
);
|
|
12914
12943
|
})), M = M.then(
|
|
12915
|
-
() => F.syncAncestorArgForms(i,
|
|
12944
|
+
() => F.syncAncestorArgForms(i, m, u, y)
|
|
12916
12945
|
), M = M.then(() => f.evaluateAll(i, n)), M = M.then(
|
|
12917
|
-
() => S.retryUnappliedValueWrites(e,
|
|
12946
|
+
() => S.retryUnappliedValueWrites(e, m)
|
|
12918
12947
|
), M = M.then(
|
|
12919
12948
|
() => f.reevaluateReactiveSpecialAttributes(i, n)
|
|
12920
12949
|
), M.then(
|
|
@@ -12981,7 +13010,7 @@ const f = class f {
|
|
|
12981
13010
|
*/
|
|
12982
13011
|
static mergePathAuthority(e, t, r, i, n) {
|
|
12983
13012
|
if (f.isPlainRecord(t) && f.isPlainRecord(r)) {
|
|
12984
|
-
const u = t, d = r,
|
|
13013
|
+
const u = t, d = r, m = {};
|
|
12985
13014
|
let y = Object.keys(u).some(
|
|
12986
13015
|
(A) => !Object.prototype.hasOwnProperty.call(d, A)
|
|
12987
13016
|
);
|
|
@@ -12990,20 +13019,20 @@ const f = class f {
|
|
|
12990
13019
|
...Object.keys(d)
|
|
12991
13020
|
]);
|
|
12992
13021
|
for (const A of E) {
|
|
12993
|
-
const
|
|
13022
|
+
const k = n === "" ? A : `${n}.${A}`, M = f.mergePathAuthority(
|
|
12994
13023
|
e,
|
|
12995
13024
|
Object.prototype.hasOwnProperty.call(u, A) ? u[A] : f.ABSENT_PATH,
|
|
12996
13025
|
Object.prototype.hasOwnProperty.call(d, A) ? d[A] : f.ABSENT_PATH,
|
|
12997
13026
|
i,
|
|
12998
|
-
|
|
13027
|
+
k
|
|
12999
13028
|
);
|
|
13000
|
-
M !== f.ABSENT_PATH && (
|
|
13029
|
+
M !== f.ABSENT_PATH && (m[A] = M), M !== (Object.prototype.hasOwnProperty.call(d, A) ? d[A] : f.ABSENT_PATH) && (y = !0);
|
|
13001
13030
|
}
|
|
13002
|
-
return y ?
|
|
13031
|
+
return y ? m : d;
|
|
13003
13032
|
}
|
|
13004
13033
|
const s = f.resolveArrayPairing(e, t, r, n);
|
|
13005
13034
|
if (s !== null) {
|
|
13006
|
-
const u = t, d = r,
|
|
13035
|
+
const u = t, d = r, m = d.map(
|
|
13007
13036
|
(y, E) => f.mergePathAuthority(
|
|
13008
13037
|
e,
|
|
13009
13038
|
u[E],
|
|
@@ -13012,7 +13041,7 @@ const f = class f {
|
|
|
13012
13041
|
`${n}[${s[E]}]`
|
|
13013
13042
|
)
|
|
13014
13043
|
);
|
|
13015
|
-
return
|
|
13044
|
+
return m.some((y, E) => y !== d[E]) ? m : d;
|
|
13016
13045
|
}
|
|
13017
13046
|
if (f.isSameBindingValue(t, r))
|
|
13018
13047
|
return r;
|
|
@@ -13186,7 +13215,7 @@ const f = class f {
|
|
|
13186
13215
|
*/
|
|
13187
13216
|
static dumpScope(e) {
|
|
13188
13217
|
const t = f.collectScope(e);
|
|
13189
|
-
return V.isEnabled() &&
|
|
13218
|
+
return V.isEnabled() && g.info("[Haori]", "scope dump for", e, t), t;
|
|
13190
13219
|
}
|
|
13191
13220
|
/**
|
|
13192
13221
|
* スコープの解決結果と由来を収集します。
|
|
@@ -13205,14 +13234,14 @@ const f = class f {
|
|
|
13205
13234
|
const r = t.getBindingData(), i = {}, n = (l) => {
|
|
13206
13235
|
const u = l.getTarget(), d = f.resolveElementId(u);
|
|
13207
13236
|
return d !== "" ? `#${d}` : u.tagName.toLowerCase();
|
|
13208
|
-
}, s = (l, u, d,
|
|
13237
|
+
}, s = (l, u, d, m) => {
|
|
13209
13238
|
if (l)
|
|
13210
13239
|
for (const y of Object.keys(l))
|
|
13211
13240
|
y in i || (i[y] = {
|
|
13212
13241
|
value: l[y],
|
|
13213
13242
|
source: n(u),
|
|
13214
13243
|
kind: d,
|
|
13215
|
-
depth:
|
|
13244
|
+
depth: m
|
|
13216
13245
|
});
|
|
13217
13246
|
};
|
|
13218
13247
|
let a = t, o = 0;
|
|
@@ -13231,7 +13260,7 @@ const f = class f {
|
|
|
13231
13260
|
try {
|
|
13232
13261
|
return JSON.parse(e);
|
|
13233
13262
|
} catch (t) {
|
|
13234
|
-
return
|
|
13263
|
+
return g.error("[Haori]", "Invalid JSON in data-bind:", t), {};
|
|
13235
13264
|
}
|
|
13236
13265
|
else {
|
|
13237
13266
|
const t = new URLSearchParams(e), r = {};
|
|
@@ -13255,7 +13284,7 @@ const f = class f {
|
|
|
13255
13284
|
if (n) {
|
|
13256
13285
|
if (n.getParent() === r)
|
|
13257
13286
|
return Promise.resolve();
|
|
13258
|
-
if (r.
|
|
13287
|
+
if (r.attachObserved(n, i), n instanceof S)
|
|
13259
13288
|
return f.scan(n.getTarget());
|
|
13260
13289
|
if (n instanceof ae)
|
|
13261
13290
|
return f.evaluateText(n);
|
|
@@ -13376,14 +13405,14 @@ const f = class f {
|
|
|
13376
13405
|
e.setDeriveInputSignature(E);
|
|
13377
13406
|
})));
|
|
13378
13407
|
}
|
|
13379
|
-
let
|
|
13408
|
+
let m = !1, y = 0;
|
|
13380
13409
|
return n && (r = r.then(() => {
|
|
13381
13410
|
const E = e.isVisible();
|
|
13382
13411
|
return y = S.currentSequence(), f.evaluateIf(e).then(() => {
|
|
13383
|
-
|
|
13412
|
+
m = !E && e.isVisible();
|
|
13384
13413
|
});
|
|
13385
13414
|
})), s ? (e.getDeriveSubtreeSignature() !== null && e.setDeriveSubtreeSignature(null), r.then(() => f.evaluateEachFixedChildren(e)).then(() => f.evaluateEach(e)).then(() => {
|
|
13386
|
-
if (
|
|
13415
|
+
if (m)
|
|
13387
13416
|
return f.applyEnhancersOnShow(e, y);
|
|
13388
13417
|
})) : n ? (e.getDeriveSubtreeSignature() !== null && e.setDeriveSubtreeSignature(null), r.then(() => {
|
|
13389
13418
|
})) : (i && (r = r.then(() => {
|
|
@@ -13478,7 +13507,7 @@ const f = class f {
|
|
|
13478
13507
|
if (typeof t != "string" || t.indexOf("{{") >= 0)
|
|
13479
13508
|
return;
|
|
13480
13509
|
if (ne.hasCompileFailure(t)) {
|
|
13481
|
-
|
|
13510
|
+
g.warn(
|
|
13482
13511
|
"[Haori]",
|
|
13483
13512
|
"data-if is hidden because the expression could not be compiled (see the preceding compile error):",
|
|
13484
13513
|
t
|
|
@@ -13494,7 +13523,7 @@ const f = class f {
|
|
|
13494
13523
|
const a = {};
|
|
13495
13524
|
i.forEach((o) => {
|
|
13496
13525
|
o in r && (a[o] = r[o]);
|
|
13497
|
-
}),
|
|
13526
|
+
}), g.info(
|
|
13498
13527
|
"[Haori]",
|
|
13499
13528
|
"data-if is falsy (hidden):",
|
|
13500
13529
|
t,
|
|
@@ -13633,7 +13662,7 @@ const f = class f {
|
|
|
13633
13662
|
static triggerLoadOnShow(e) {
|
|
13634
13663
|
const t = `${c.prefix}load-`;
|
|
13635
13664
|
e.getTarget().getAttributeNames().some((i) => i.startsWith(t)) && new oe(e, "load").run().catch((i) => {
|
|
13636
|
-
|
|
13665
|
+
g.error("[Haori]", "data-load procedure error (on show):", i);
|
|
13637
13666
|
});
|
|
13638
13667
|
}
|
|
13639
13668
|
/**
|
|
@@ -13746,14 +13775,14 @@ ${r}
|
|
|
13746
13775
|
${r}
|
|
13747
13776
|
`);
|
|
13748
13777
|
} catch (n) {
|
|
13749
|
-
|
|
13778
|
+
g.error("[Haori]", `Invalid each-rendered-run script: ${n}`);
|
|
13750
13779
|
}
|
|
13751
13780
|
}
|
|
13752
13781
|
if (i)
|
|
13753
13782
|
try {
|
|
13754
13783
|
i.call(e);
|
|
13755
13784
|
} catch (n) {
|
|
13756
|
-
|
|
13785
|
+
g.error("[Haori]", `each-rendered-run execution error: ${n}`);
|
|
13757
13786
|
}
|
|
13758
13787
|
}
|
|
13759
13788
|
/**
|
|
@@ -13784,7 +13813,7 @@ ${r}
|
|
|
13784
13813
|
return;
|
|
13785
13814
|
const i = String(r.getAttribute(t) ?? "").trim().toLowerCase();
|
|
13786
13815
|
let n = !1;
|
|
13787
|
-
if (i === "always" ? n = !0 : i !== "" && i !== "once" && (f.EACH_RENDERED_CHANGE_WARNED.has(r) || (f.EACH_RENDERED_CHANGE_WARNED.add(r),
|
|
13816
|
+
if (i === "always" ? n = !0 : i !== "" && i !== "once" && (f.EACH_RENDERED_CHANGE_WARNED.has(r) || (f.EACH_RENDERED_CHANGE_WARNED.add(r), g.warn(
|
|
13788
13817
|
"[Haori]",
|
|
13789
13818
|
`Invalid ${t} value: "${i}". Use "once" (default) or "always".`
|
|
13790
13819
|
))), f.countEachRenderedRows(e) !== 0) {
|
|
@@ -13796,7 +13825,7 @@ ${r}
|
|
|
13796
13825
|
try {
|
|
13797
13826
|
r.dispatchEvent(new Event("change", { bubbles: !0 }));
|
|
13798
13827
|
} catch (s) {
|
|
13799
|
-
|
|
13828
|
+
g.error("[Haori]", `each-rendered-change dispatch error: ${s}`);
|
|
13800
13829
|
}
|
|
13801
13830
|
}
|
|
13802
13831
|
}
|
|
@@ -13890,7 +13919,7 @@ ${r}
|
|
|
13890
13919
|
*/
|
|
13891
13920
|
static resolveEachItems(e) {
|
|
13892
13921
|
const t = e.getAttributeEvaluation(`${c.prefix}each`), r = t?.value;
|
|
13893
|
-
return t?.hasUnresolvedReference || r === !1 || r === null || r === void 0 ? [] : Array.isArray(r) ? r : (
|
|
13922
|
+
return t?.hasUnresolvedReference || r === !1 || r === null || r === void 0 ? [] : Array.isArray(r) ? r : (g.error("[Haori]", "Invalid each attribute:", r), null);
|
|
13894
13923
|
}
|
|
13895
13924
|
/**
|
|
13896
13925
|
* nested data-each の入力が同値で、要素自身に他の動的要素が無い場合は
|
|
@@ -14100,7 +14129,7 @@ ${r}
|
|
|
14100
14129
|
});
|
|
14101
14130
|
return Promise.all(r).then(() => {
|
|
14102
14131
|
}).catch((i) => {
|
|
14103
|
-
|
|
14132
|
+
g.error("Haori", `${e} を読み直せませんでした: ${i}`);
|
|
14104
14133
|
});
|
|
14105
14134
|
}
|
|
14106
14135
|
/**
|
|
@@ -14232,7 +14261,7 @@ ${r}
|
|
|
14232
14261
|
*/
|
|
14233
14262
|
static logDerivedSubtreeProfileSnapshot(e, t) {
|
|
14234
14263
|
const r = f.getOrCreateDerivedSubtreeProfile(e);
|
|
14235
|
-
r !== null && (t === "skip-hit" ? r.skipHitCount += 1 : t === "skip-miss" ? r.skipMissCount += 1 : t === "skip-ineligible" && (r.skipIneligibleCount += 1),
|
|
14264
|
+
r !== null && (t === "skip-hit" ? r.skipHitCount += 1 : t === "skip-miss" ? r.skipMissCount += 1 : t === "skip-ineligible" && (r.skipIneligibleCount += 1), g.info("[Haori][derive-profile]", {
|
|
14236
14265
|
reason: t,
|
|
14237
14266
|
hostId: r.hostId,
|
|
14238
14267
|
signatureComputeTotal: r.signatureComputeTotal,
|
|
@@ -14299,7 +14328,7 @@ ${r}
|
|
|
14299
14328
|
static updateDiff(e, t) {
|
|
14300
14329
|
const r = e.getTemplate();
|
|
14301
14330
|
if (r === null)
|
|
14302
|
-
return
|
|
14331
|
+
return g.error(
|
|
14303
14332
|
"[Haori]",
|
|
14304
14333
|
`Template is not set for ${c.prefix}each="${e.getRawAttribute(`${c.prefix}each`)}". The container needs one element child as the row template.`,
|
|
14305
14334
|
e.getTarget()
|
|
@@ -14316,7 +14345,7 @@ ${r}
|
|
|
14316
14345
|
let d = e.getChildren().filter((I) => I instanceof S).filter(
|
|
14317
14346
|
(I) => !I.hasAttribute(`${c.prefix}each-before`) && !I.hasAttribute(`${c.prefix}each-after`)
|
|
14318
14347
|
);
|
|
14319
|
-
const
|
|
14348
|
+
const m = d.map((I) => I.getListKey()), y = /* @__PURE__ */ new Set();
|
|
14320
14349
|
d = d.filter((I, K) => {
|
|
14321
14350
|
const J = String(I.getListKey()), re = l.get(J) ?? 0;
|
|
14322
14351
|
if (re === 0) {
|
|
@@ -14334,7 +14363,7 @@ ${r}
|
|
|
14334
14363
|
const J = A.get(K);
|
|
14335
14364
|
J ? J.push(I) : A.set(K, [I]);
|
|
14336
14365
|
});
|
|
14337
|
-
const
|
|
14366
|
+
const k = e.getChildElementFragments().filter((I) => !y.has(I)), M = k.filter(
|
|
14338
14367
|
(I) => I.hasAttribute(`${c.prefix}each-before`)
|
|
14339
14368
|
).length;
|
|
14340
14369
|
let q = Promise.resolve();
|
|
@@ -14361,7 +14390,7 @@ ${r}
|
|
|
14361
14390
|
f.repositionEachRow(
|
|
14362
14391
|
e,
|
|
14363
14392
|
H,
|
|
14364
|
-
|
|
14393
|
+
k,
|
|
14365
14394
|
G
|
|
14366
14395
|
).then(($) => {
|
|
14367
14396
|
if ($ !== null && O.rowMove(
|
|
@@ -14389,9 +14418,9 @@ ${r}
|
|
|
14389
14418
|
s ? String(s) : null,
|
|
14390
14419
|
I
|
|
14391
14420
|
).then(() => {
|
|
14392
|
-
const D =
|
|
14421
|
+
const D = k[G] ?? null;
|
|
14393
14422
|
return e.insertBefore(H, D).then(() => {
|
|
14394
|
-
|
|
14423
|
+
k.splice(G, 0, H);
|
|
14395
14424
|
}).then(() => f.initializeFreshEachRow(H)).then(() => f.applyRowFormValues(e, H, J)).then(() => {
|
|
14396
14425
|
O.rowAdd(H.getTarget(), I, re, J);
|
|
14397
14426
|
});
|
|
@@ -14403,7 +14432,7 @@ ${r}
|
|
|
14403
14432
|
(G) => G !== null
|
|
14404
14433
|
), K = E.filter(
|
|
14405
14434
|
(G) => G !== null
|
|
14406
|
-
), J = new Set(K), re = I.filter((G) => !J.has(G)), _ =
|
|
14435
|
+
), J = new Set(K), re = I.filter((G) => !J.has(G)), _ = m.filter(
|
|
14407
14436
|
(G) => G !== null
|
|
14408
14437
|
).filter(
|
|
14409
14438
|
(G) => !o.has(G)
|
|
@@ -14445,7 +14474,7 @@ ${r}
|
|
|
14445
14474
|
).filter(
|
|
14446
14475
|
(r) => !r.hasAttribute(`${c.prefix}each-before`) && !r.hasAttribute(`${c.prefix}each-after`)
|
|
14447
14476
|
);
|
|
14448
|
-
t.length !== 0 &&
|
|
14477
|
+
t.length !== 0 && g.warn(
|
|
14449
14478
|
"[Haori]",
|
|
14450
14479
|
`${c.prefix}each="${e.getRawAttribute(`${c.prefix}each`)}" のコンテナに要素の子が 2 つ以上あります。テンプレートになるのは最初の子だけで、残り ${t.length} 個は行に入りません(${t.map((r) => r.getTarget().tagName.toLowerCase()).join(", ")})。行の中身は 1 つの要素で包んでください。`,
|
|
14451
14480
|
e.getTarget()
|
|
@@ -14463,7 +14492,7 @@ ${r}
|
|
|
14463
14492
|
* @returns 戻り値はありません。
|
|
14464
14493
|
*/
|
|
14465
14494
|
static warnDuplicateEachKey(e) {
|
|
14466
|
-
!V.isEnabled() || f.WARNED_DUPLICATE_EACH_KEYS.has(e) || (f.WARNED_DUPLICATE_EACH_KEYS.add(e),
|
|
14495
|
+
!V.isEnabled() || f.WARNED_DUPLICATE_EACH_KEYS.has(e) || (f.WARNED_DUPLICATE_EACH_KEYS.add(e), g.warn(
|
|
14467
14496
|
"[Haori]",
|
|
14468
14497
|
`${c.prefix}each-key="${e}" の値が配列の中で重複しています。行は出現順で対応付けますが、キーによる行の識別はできません。`
|
|
14469
14498
|
));
|
|
@@ -14560,7 +14589,7 @@ ${r}
|
|
|
14560
14589
|
else if (n)
|
|
14561
14590
|
a = { [n]: t };
|
|
14562
14591
|
else
|
|
14563
|
-
return
|
|
14592
|
+
return g.error(
|
|
14564
14593
|
"[Haori]",
|
|
14565
14594
|
`Primitive value requires '${c.prefix}each-arg' attribute: ${t}`
|
|
14566
14595
|
), Promise.resolve(!1);
|
|
@@ -14780,7 +14809,7 @@ const Re = class Re {
|
|
|
14780
14809
|
try {
|
|
14781
14810
|
t();
|
|
14782
14811
|
} catch (r) {
|
|
14783
|
-
|
|
14812
|
+
g.error("[Haori]", "Deferred event handling error:", r);
|
|
14784
14813
|
}
|
|
14785
14814
|
}
|
|
14786
14815
|
/**
|
|
@@ -14833,7 +14862,7 @@ const Re = class Re {
|
|
|
14833
14862
|
if (e === null || e === "")
|
|
14834
14863
|
return;
|
|
14835
14864
|
if (Re.BUILTIN_EVENT_NAMES.has(e)) {
|
|
14836
|
-
|
|
14865
|
+
g.warn(
|
|
14837
14866
|
"[Haori]",
|
|
14838
14867
|
`data-on="${e}" は組み込みイベントです。data-${e}-* を使用してください(data-on はカスタムイベント専用)。`
|
|
14839
14868
|
);
|
|
@@ -14863,7 +14892,7 @@ const Re = class Re {
|
|
|
14863
14892
|
return;
|
|
14864
14893
|
const n = T.get(i);
|
|
14865
14894
|
n instanceof S && this.isFromTarget(n, t) && new oe(n, "on", t).run().catch((s) => {
|
|
14866
|
-
|
|
14895
|
+
g.error("[Haori]", "Procedure execution error:", s);
|
|
14867
14896
|
});
|
|
14868
14897
|
});
|
|
14869
14898
|
}
|
|
@@ -14950,7 +14979,7 @@ const Re = class Re {
|
|
|
14950
14979
|
return;
|
|
14951
14980
|
(t === "change" || t === "input") && this.syncUserEdit(e, t === "change");
|
|
14952
14981
|
const n = () => {
|
|
14953
|
-
const s = new oe(i, t, r).runWithOutcome().catch((a) => (
|
|
14982
|
+
const s = new oe(i, t, r).runWithOutcome().catch((a) => (g.error("[Haori]", "Procedure execution error:", a), "failure"));
|
|
14954
14983
|
if (t === "click") {
|
|
14955
14984
|
oe.recordClickOutcome(e, s);
|
|
14956
14985
|
const a = r.target;
|
|
@@ -15184,7 +15213,7 @@ const U = class U {
|
|
|
15184
15213
|
new oe(t.fragment, "intersect").runWithResult().then((i) => {
|
|
15185
15214
|
r = i;
|
|
15186
15215
|
}).catch((i) => {
|
|
15187
|
-
|
|
15216
|
+
g.error("[Haori]", "Intersect procedure execution error:", i);
|
|
15188
15217
|
}).finally(() => {
|
|
15189
15218
|
const i = U.registrations.get(e);
|
|
15190
15219
|
if (i) {
|
|
@@ -15252,7 +15281,7 @@ const U = class U {
|
|
|
15252
15281
|
if (typeof r != "string" || r.trim() === "")
|
|
15253
15282
|
return null;
|
|
15254
15283
|
const i = j.query(r, t, document);
|
|
15255
|
-
return U.isHtmlElement(i) ? i : (
|
|
15284
|
+
return U.isHtmlElement(i) ? i : (g.error("[Haori]", `Intersect root element not found: ${r}`), null);
|
|
15256
15285
|
}
|
|
15257
15286
|
static resolveRootMargin(e) {
|
|
15258
15287
|
const t = `${c.prefix}intersect-root-margin`, r = e.getAttribute(t);
|
|
@@ -15473,7 +15502,7 @@ const v = class v {
|
|
|
15473
15502
|
"poll"
|
|
15474
15503
|
).runWithResult();
|
|
15475
15504
|
} catch (n) {
|
|
15476
|
-
|
|
15505
|
+
g.error("[Haori]", "Poll procedure execution error:", n);
|
|
15477
15506
|
} finally {
|
|
15478
15507
|
t.fetching = !1;
|
|
15479
15508
|
}
|
|
@@ -15653,7 +15682,7 @@ const v = class v {
|
|
|
15653
15682
|
document
|
|
15654
15683
|
);
|
|
15655
15684
|
if (n.length === 0)
|
|
15656
|
-
return
|
|
15685
|
+
return g.error("[Haori]", `Poll state element not found: ${i}`), [];
|
|
15657
15686
|
const s = [];
|
|
15658
15687
|
return n.forEach((a) => {
|
|
15659
15688
|
if (!a.isConnected)
|
|
@@ -15676,10 +15705,10 @@ const v = class v {
|
|
|
15676
15705
|
if (!e.hasAttribute(t))
|
|
15677
15706
|
return v.DEFAULT_INTERVAL_MS;
|
|
15678
15707
|
const r = v.toNumber(e.getAttribute(t));
|
|
15679
|
-
return r === null ? (
|
|
15708
|
+
return r === null ? (g.warn(
|
|
15680
15709
|
"[Haori]",
|
|
15681
15710
|
`${t} は数値で指定してください。既定値 ${v.DEFAULT_INTERVAL_MS}ms を使用します。`
|
|
15682
|
-
), v.DEFAULT_INTERVAL_MS) : r < v.MIN_INTERVAL_MS ? (
|
|
15711
|
+
), v.DEFAULT_INTERVAL_MS) : r < v.MIN_INTERVAL_MS ? (g.warn(
|
|
15683
15712
|
"[Haori]",
|
|
15684
15713
|
`${t} の下限は ${v.MIN_INTERVAL_MS}ms です。${r}ms は下限へ切り上げます。`
|
|
15685
15714
|
), v.MIN_INTERVAL_MS) : r;
|
|
@@ -15695,7 +15724,7 @@ const v = class v {
|
|
|
15695
15724
|
if (!e.hasAttribute(t))
|
|
15696
15725
|
return null;
|
|
15697
15726
|
const r = v.toNumber(e.getAttribute(t));
|
|
15698
|
-
return r === null || r <= 0 ? (
|
|
15727
|
+
return r === null || r <= 0 ? (g.warn(
|
|
15699
15728
|
"[Haori]",
|
|
15700
15729
|
`${t} は正の数値で指定してください。無制限として扱います。`
|
|
15701
15730
|
), null) : r;
|
|
@@ -15711,7 +15740,7 @@ const v = class v {
|
|
|
15711
15740
|
if (!e.hasAttribute(t))
|
|
15712
15741
|
return null;
|
|
15713
15742
|
const r = v.toNumber(e.getAttribute(t));
|
|
15714
|
-
return r === null || r < 1 ? (
|
|
15743
|
+
return r === null || r < 1 ? (g.warn(
|
|
15715
15744
|
"[Haori]",
|
|
15716
15745
|
`${t} は 1 以上の数値で指定してください。無制限として扱います。`
|
|
15717
15746
|
), null) : Math.floor(r);
|
|
@@ -15770,7 +15799,7 @@ const v = class v {
|
|
|
15770
15799
|
if (!e.hasAttribute(t))
|
|
15771
15800
|
return !1;
|
|
15772
15801
|
const r = e.getAttributeEvaluation(t);
|
|
15773
|
-
return r ? r.hasUnresolvedReference ? (
|
|
15802
|
+
return r ? r.hasUnresolvedReference ? (g.warn(
|
|
15774
15803
|
"[Haori]",
|
|
15775
15804
|
`${t} に未解決の参照が含まれています(停止条件は成立扱いにしません):`,
|
|
15776
15805
|
e.getRawAttribute(t),
|
|
@@ -15807,7 +15836,7 @@ v.CONFIG_KEYS = /* @__PURE__ */ new Set([
|
|
|
15807
15836
|
"state"
|
|
15808
15837
|
]), v.DEFAULT_INTERVAL_MS = 5e3, v.MIN_INTERVAL_MS = 100, v.registrations = /* @__PURE__ */ new Map(), v.visibilityListener = null;
|
|
15809
15838
|
let we = v;
|
|
15810
|
-
const Jt = "0.59.
|
|
15839
|
+
const Jt = "0.59.5";
|
|
15811
15840
|
function Zt(b) {
|
|
15812
15841
|
typeof requestAnimationFrame == "function" ? requestAnimationFrame(() => b()) : Promise.resolve().then(b);
|
|
15813
15842
|
}
|
|
@@ -15850,7 +15879,7 @@ const L = class L {
|
|
|
15850
15879
|
return;
|
|
15851
15880
|
const i = L.resolveVarName(r);
|
|
15852
15881
|
if (i === "") {
|
|
15853
|
-
t && (t.observer.disconnect(), L.registrations.delete(e)),
|
|
15882
|
+
t && (t.observer.disconnect(), L.registrations.delete(e)), g.warn(
|
|
15854
15883
|
"[Haori]",
|
|
15855
15884
|
'data-each-visible requires a variable name (e.g. data-each-visible="visibleRange").'
|
|
15856
15885
|
);
|
|
@@ -15868,9 +15897,9 @@ const L = class L {
|
|
|
15868
15897
|
if (!u)
|
|
15869
15898
|
return;
|
|
15870
15899
|
let d = !1;
|
|
15871
|
-
l.forEach((
|
|
15872
|
-
const y =
|
|
15873
|
-
u.observedRows.has(y) && (
|
|
15900
|
+
l.forEach((m) => {
|
|
15901
|
+
const y = m.target;
|
|
15902
|
+
u.observedRows.has(y) && (m.isIntersecting ? u.visibleRows.has(y) || (u.visibleRows.add(y), d = !0) : u.visibleRows.delete(y) && (d = !0));
|
|
15874
15903
|
}), d && L.scheduleCompute(u);
|
|
15875
15904
|
},
|
|
15876
15905
|
{
|
|
@@ -15947,7 +15976,7 @@ const L = class L {
|
|
|
15947
15976
|
if (typeof r != "string" || r.trim() === "")
|
|
15948
15977
|
return null;
|
|
15949
15978
|
const i = j.query(r, t, document);
|
|
15950
|
-
return L.isHtmlElement(i) ? i : (
|
|
15979
|
+
return L.isHtmlElement(i) ? i : (g.error("[Haori]", `Visible range root element not found: ${r}`), null);
|
|
15951
15980
|
}
|
|
15952
15981
|
/**
|
|
15953
15982
|
* rootMargin を解決します。
|
|
@@ -16046,7 +16075,7 @@ const L = class L {
|
|
|
16046
16075
|
static publish(e, t) {
|
|
16047
16076
|
const r = L.resolveBindOwner(e.fragment);
|
|
16048
16077
|
if (!r) {
|
|
16049
|
-
|
|
16078
|
+
g.warn(
|
|
16050
16079
|
"[Haori]",
|
|
16051
16080
|
"data-each-visible found no ancestor data-bind scope to publish into."
|
|
16052
16081
|
);
|
|
@@ -16065,7 +16094,7 @@ const L = class L {
|
|
|
16065
16094
|
kind: "nonSupply",
|
|
16066
16095
|
sequence: S.nextSequence()
|
|
16067
16096
|
}).catch((o) => {
|
|
16068
|
-
|
|
16097
|
+
g.error("[Haori]", "Failed to publish visible range:", o);
|
|
16069
16098
|
});
|
|
16070
16099
|
}
|
|
16071
16100
|
/**
|
|
@@ -16114,11 +16143,11 @@ const B = class B {
|
|
|
16114
16143
|
C.scan(document.head),
|
|
16115
16144
|
C.scan(document.body)
|
|
16116
16145
|
]), [r, i] = t;
|
|
16117
|
-
r.status !== "fulfilled" &&
|
|
16146
|
+
r.status !== "fulfilled" && g.error(
|
|
16118
16147
|
"[Haori]",
|
|
16119
16148
|
"Failed to build head fragment:",
|
|
16120
16149
|
r.reason
|
|
16121
|
-
), i.status !== "fulfilled" &&
|
|
16150
|
+
), i.status !== "fulfilled" && g.error(
|
|
16122
16151
|
"[Haori]",
|
|
16123
16152
|
"Failed to build body fragment:",
|
|
16124
16153
|
i.reason
|
|
@@ -16370,7 +16399,7 @@ const B = class B {
|
|
|
16370
16399
|
break;
|
|
16371
16400
|
}
|
|
16372
16401
|
case "characterData": {
|
|
16373
|
-
r.target instanceof Text || r.target instanceof Comment ? C.changeText(r.target, r.target.textContent) :
|
|
16402
|
+
r.target instanceof Text || r.target instanceof Comment ? C.changeText(r.target, r.target.textContent) : g.warn(
|
|
16374
16403
|
"[Haori]",
|
|
16375
16404
|
"Unsupported character data type:",
|
|
16376
16405
|
r.target
|
|
@@ -16378,18 +16407,18 @@ const B = class B {
|
|
|
16378
16407
|
break;
|
|
16379
16408
|
}
|
|
16380
16409
|
default:
|
|
16381
|
-
|
|
16410
|
+
g.warn("[Haori]", "Unknown mutation type:", r.type);
|
|
16382
16411
|
continue;
|
|
16383
16412
|
}
|
|
16384
16413
|
} catch (i) {
|
|
16385
|
-
|
|
16414
|
+
g.error("[Haori]", "Error processing mutation:", i);
|
|
16386
16415
|
}
|
|
16387
16416
|
}
|
|
16388
16417
|
};
|
|
16389
16418
|
B._initialized = !1, B._mutationObservers = [], B._dispatcher = null, B._initialIntakes = null;
|
|
16390
|
-
let
|
|
16391
|
-
te.setMutationCapture((b) =>
|
|
16392
|
-
document.readyState === "loading" ? document.addEventListener("DOMContentLoaded",
|
|
16419
|
+
let Ne = B;
|
|
16420
|
+
te.setMutationCapture((b) => Ne.captureMutations(b));
|
|
16421
|
+
document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", Ne.init) : Ne.init();
|
|
16393
16422
|
const Qt = () => Te.waitForRenders(), _t = Te.enhancers;
|
|
16394
16423
|
export {
|
|
16395
16424
|
C as Core,
|
|
@@ -16398,7 +16427,7 @@ export {
|
|
|
16398
16427
|
F as Form,
|
|
16399
16428
|
T as Fragment,
|
|
16400
16429
|
Te as Haori,
|
|
16401
|
-
|
|
16430
|
+
g as Log,
|
|
16402
16431
|
z as Queue,
|
|
16403
16432
|
Te as default,
|
|
16404
16433
|
_t as enhancers,
|