libaribhtml5 0.1.9 → 0.1.10
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/dist/sdk/arib-vfs-sw.js +56 -8
- package/dist/sdk/libaribhtml5.js +6 -6
- package/dist/sdk/libaribhtml5.mjs +296 -286
- package/dist/types/runtime/external-media-hole.d.ts +1 -1
- package/docs/browser-iframe-compositing.md +2 -0
- package/package.json +1 -1
- package/docs/receiver-compatibility-roadmap.md +0 -300
|
@@ -39,59 +39,59 @@ function uq(A) {
|
|
|
39
39
|
A.__ARIB_HTML5_ROMSOUND__ = !0;
|
|
40
40
|
const q = A.HTMLMediaElement?.prototype, e = A.Element?.prototype;
|
|
41
41
|
if (!q || !e) return;
|
|
42
|
-
const t = cq(A.navigator), i = (
|
|
42
|
+
const t = cq(A.navigator), i = (c) => R(c) ?? String(c), r = (c) => c instanceof A.HTMLMediaElement || !!(A.HTMLSourceElement && c instanceof A.HTMLSourceElement), a = "data-arib-romsound", n = e.getAttribute, l = e.setAttribute, s = e.removeAttribute, y = (c) => n.call(c, a), E = (c, d) => {
|
|
43
43
|
const u = String(d), B = R(u);
|
|
44
|
-
return B ?
|
|
45
|
-
},
|
|
46
|
-
e.getAttribute = function(
|
|
47
|
-
if (
|
|
44
|
+
return B ? l.call(c, a, u) : s.call(c, a), B ?? u;
|
|
45
|
+
}, f = (c, d) => !t || !R(d) ? !1 : (E(c, d), s.call(c, "src"), !0);
|
|
46
|
+
e.getAttribute = function(c) {
|
|
47
|
+
if (c.toLowerCase() === "src" && r(this)) {
|
|
48
48
|
const d = y(this);
|
|
49
49
|
if (d !== null) return d;
|
|
50
50
|
}
|
|
51
|
-
return
|
|
52
|
-
}, e.setAttribute = function(
|
|
53
|
-
if (
|
|
51
|
+
return n.call(this, c);
|
|
52
|
+
}, e.setAttribute = function(c, d) {
|
|
53
|
+
if (c.toLowerCase() === "src" && r(this) && f(this, d))
|
|
54
54
|
return;
|
|
55
|
-
const u =
|
|
56
|
-
|
|
55
|
+
const u = c.toLowerCase() === "src" && r(this) ? E(this, d) : String(d);
|
|
56
|
+
l.call(this, c, String(u));
|
|
57
57
|
};
|
|
58
58
|
const v = e.setAttributeNS;
|
|
59
|
-
e.setAttributeNS = function(
|
|
60
|
-
if (d.toLowerCase() === "src" && r(this) &&
|
|
59
|
+
e.setAttributeNS = function(c, d, u) {
|
|
60
|
+
if (d.toLowerCase() === "src" && r(this) && f(this, u))
|
|
61
61
|
return;
|
|
62
62
|
const B = d.toLowerCase() === "src" && r(this) ? E(this, u) : String(u);
|
|
63
|
-
v.call(this,
|
|
64
|
-
}, e.removeAttribute = function(
|
|
65
|
-
|
|
63
|
+
v.call(this, c, d, String(B));
|
|
64
|
+
}, e.removeAttribute = function(c) {
|
|
65
|
+
c.toLowerCase() === "src" && r(this) && s.call(this, a), s.call(this, c);
|
|
66
66
|
};
|
|
67
|
-
const M = (
|
|
68
|
-
if (!
|
|
69
|
-
const d = Object.getOwnPropertyDescriptor(
|
|
70
|
-
return !d?.get || !d.set || Object.defineProperty(
|
|
67
|
+
const M = (c) => {
|
|
68
|
+
if (!c) return;
|
|
69
|
+
const d = Object.getOwnPropertyDescriptor(c, "src");
|
|
70
|
+
return !d?.get || !d.set || Object.defineProperty(c, "src", {
|
|
71
71
|
configurable: !0,
|
|
72
72
|
enumerable: d.enumerable,
|
|
73
73
|
get() {
|
|
74
74
|
return r(this) ? y(this) ?? d.get.call(this) : d.get.call(this);
|
|
75
75
|
},
|
|
76
76
|
set(u) {
|
|
77
|
-
r(this) &&
|
|
77
|
+
r(this) && f(this, u) || d.set.call(this, r(this) ? E(this, u) : i(u));
|
|
78
78
|
}
|
|
79
79
|
}), d;
|
|
80
80
|
}, V = M(q);
|
|
81
81
|
M(A.HTMLSourceElement?.prototype);
|
|
82
82
|
const p = q.play;
|
|
83
83
|
q.play = function() {
|
|
84
|
-
const
|
|
84
|
+
const c = y(this) ?? n.call(this, "src"), d = R(c);
|
|
85
85
|
if (t) {
|
|
86
|
-
const u = this.querySelector?.(`source[${
|
|
86
|
+
const u = this.querySelector?.(`source[${a}]`), B = u ? R(y(u)) : null;
|
|
87
87
|
if (d || B) return Promise.resolve();
|
|
88
88
|
}
|
|
89
89
|
return d && V?.set?.call(this, d), p.call(this);
|
|
90
90
|
};
|
|
91
|
-
const g = (
|
|
92
|
-
if (!
|
|
93
|
-
const u = Object.getOwnPropertyDescriptor(
|
|
94
|
-
!u?.get || !u.set || Object.defineProperty(
|
|
91
|
+
const g = (c, d) => {
|
|
92
|
+
if (!c) return;
|
|
93
|
+
const u = Object.getOwnPropertyDescriptor(c, d);
|
|
94
|
+
!u?.get || !u.set || Object.defineProperty(c, d, {
|
|
95
95
|
configurable: !0,
|
|
96
96
|
enumerable: u.enumerable,
|
|
97
97
|
get: u.get,
|
|
@@ -101,51 +101,51 @@ function uq(A) {
|
|
|
101
101
|
});
|
|
102
102
|
};
|
|
103
103
|
g(e, "innerHTML"), g(e, "outerHTML"), g(A.ShadowRoot?.prototype, "innerHTML");
|
|
104
|
-
const
|
|
105
|
-
e.insertAdjacentHTML = function(
|
|
106
|
-
|
|
104
|
+
const o = e.insertAdjacentHTML;
|
|
105
|
+
e.insertAdjacentHTML = function(c, d) {
|
|
106
|
+
o.call(this, c, C(String(d)));
|
|
107
107
|
};
|
|
108
108
|
const h = A.Range?.prototype;
|
|
109
109
|
if (h) {
|
|
110
|
-
const
|
|
110
|
+
const c = h.createContextualFragment;
|
|
111
111
|
h.createContextualFragment = function(d) {
|
|
112
|
-
return
|
|
112
|
+
return c.call(this, C(String(d)));
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
const T = A.DOMParser?.prototype;
|
|
116
116
|
if (T) {
|
|
117
|
-
const
|
|
117
|
+
const c = T.parseFromString;
|
|
118
118
|
T.parseFromString = function(d, u) {
|
|
119
|
-
return
|
|
119
|
+
return c.call(this, C(String(d)), u);
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
const k = A.Document?.prototype;
|
|
123
123
|
if (k) {
|
|
124
|
-
const
|
|
124
|
+
const c = k.write, d = k.writeln;
|
|
125
125
|
k.write = function(...u) {
|
|
126
|
-
|
|
126
|
+
c.apply(this, u.map((B) => C(String(B))));
|
|
127
127
|
}, k.writeln = function(...u) {
|
|
128
128
|
d.apply(this, u.map((B) => C(String(B))));
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
-
const w = (
|
|
131
|
+
const w = (c) => {
|
|
132
132
|
const d = [];
|
|
133
|
-
r(
|
|
133
|
+
r(c) && d.push(c), (c instanceof A.Element || c === A.document) && d.push(...c.querySelectorAll(
|
|
134
134
|
'audio[src^="romsound://"], video[src^="romsound://"], source[src^="romsound://"], audio[data-arib-romsound], video[data-arib-romsound], source[data-arib-romsound]'
|
|
135
135
|
));
|
|
136
136
|
for (const u of d) {
|
|
137
|
-
const X = y(u) ??
|
|
137
|
+
const X = y(u) ?? n.call(u, "src"), Q = R(X);
|
|
138
138
|
if (Q) {
|
|
139
139
|
if (t) {
|
|
140
140
|
s.call(u, "src"), u instanceof A.HTMLMediaElement && (s.call(u, "autoplay"), u.pause());
|
|
141
141
|
continue;
|
|
142
142
|
}
|
|
143
|
-
u instanceof A.HTMLMediaElement && V?.set ? V.get?.call(u) !== Q && V.set.call(u, Q) :
|
|
143
|
+
u instanceof A.HTMLMediaElement && V?.set ? V.get?.call(u) !== Q && V.set.call(u, Q) : n.call(u, "src") !== Q && l.call(u, "src", Q);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
};
|
|
147
|
-
new A.MutationObserver((
|
|
148
|
-
for (const d of
|
|
147
|
+
new A.MutationObserver((c) => {
|
|
148
|
+
for (const d of c) {
|
|
149
149
|
d.type === "attributes" && w(d.target);
|
|
150
150
|
for (const u of d.addedNodes) w(u);
|
|
151
151
|
}
|
|
@@ -157,7 +157,7 @@ function uq(A) {
|
|
|
157
157
|
}), w(A.document);
|
|
158
158
|
}
|
|
159
159
|
const gq = "data:font/woff;base64,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", pq = "data:font/woff;base64,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", yq = "U+1F19B-1F1AC", Eq = "U+1F200-1F202, U+1F210-1F23B, U+1F240-1F248, U+1F250-1F251";
|
|
160
|
-
function
|
|
160
|
+
function mq(A) {
|
|
161
161
|
if (A.__ARIB_HTML5_SYMBOL_FONT__) return;
|
|
162
162
|
A.__ARIB_HTML5_SYMBOL_FONT__ = !0;
|
|
163
163
|
const q = A.document.createElement("style");
|
|
@@ -182,7 +182,7 @@ function fq(A) {
|
|
|
182
182
|
:root { --arib-symbol-font: "ARIB Symbols"; }
|
|
183
183
|
`, (A.document.head ?? A.document.documentElement).append(q);
|
|
184
184
|
}
|
|
185
|
-
function
|
|
185
|
+
function fq(A, q) {
|
|
186
186
|
if (!q || A.__ARIB_HTML5_BROADCAST_CLOCK__) return;
|
|
187
187
|
A.__ARIB_HTML5_BROADCAST_CLOCK__ = !0;
|
|
188
188
|
const e = A.Date, t = () => {
|
|
@@ -193,8 +193,8 @@ function mq(A, q) {
|
|
|
193
193
|
return e.now();
|
|
194
194
|
}
|
|
195
195
|
}, i = function(...r) {
|
|
196
|
-
const
|
|
197
|
-
return new.target ? Reflect.construct(e,
|
|
196
|
+
const a = r.length === 0 ? [t()] : r;
|
|
197
|
+
return new.target ? Reflect.construct(e, a, new.target) : new e(t()).toString();
|
|
198
198
|
};
|
|
199
199
|
Object.setPrototypeOf(i, e), Object.defineProperty(i, "prototype", {
|
|
200
200
|
value: e.prototype
|
|
@@ -227,8 +227,8 @@ function H(A, q, e = q) {
|
|
|
227
227
|
const t = new URL(A, q);
|
|
228
228
|
if (t.origin !== q.origin || !/^https?:$/.test(t.protocol)) return t;
|
|
229
229
|
if (!t.pathname.startsWith(q.pathname)) {
|
|
230
|
-
const i = t.pathname.replace(/^\/+/, ""), r = e.pathname.startsWith(q.pathname) ? e.pathname.slice(q.pathname.length).replace(/^\/+|\/+$/g, "") : "",
|
|
231
|
-
t.pathname = `${
|
|
230
|
+
const i = t.pathname.replace(/^\/+/, ""), r = e.pathname.startsWith(q.pathname) ? e.pathname.slice(q.pathname.length).replace(/^\/+|\/+$/g, "") : "", a = r && (i === r || i.startsWith(`${r}/`));
|
|
231
|
+
t.pathname = `${a ? q.pathname : e.pathname}${i}`;
|
|
232
232
|
}
|
|
233
233
|
return t;
|
|
234
234
|
}
|
|
@@ -244,10 +244,10 @@ function vq(A, q, e) {
|
|
|
244
244
|
await g.arrayBuffer();
|
|
245
245
|
}
|
|
246
246
|
}, i = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
247
|
-
let
|
|
248
|
-
const
|
|
247
|
+
let a = !1;
|
|
248
|
+
const n = (V) => q(V).href, l = (V, p, g) => A.queueMicrotask(() => p(V, g)), s = (V, p) => {
|
|
249
249
|
for (const g of V.paths)
|
|
250
|
-
for (const
|
|
250
|
+
for (const o of i.get(g) ?? []) l(g, o, p);
|
|
251
251
|
}, y = (V) => {
|
|
252
252
|
try {
|
|
253
253
|
Promise.resolve(t.release?.(V)).catch(() => {
|
|
@@ -256,23 +256,23 @@ function vq(A, q, e) {
|
|
|
256
256
|
}
|
|
257
257
|
}, E = (V) => {
|
|
258
258
|
V.generation += 1, V.controller?.abort(), V.controller = void 0, r.delete(V.url), y(V.url);
|
|
259
|
-
},
|
|
259
|
+
}, f = (V, p) => {
|
|
260
260
|
V.controller?.abort();
|
|
261
|
-
const g = new A.AbortController(),
|
|
261
|
+
const g = new A.AbortController(), o = ++V.generation;
|
|
262
262
|
V.controller = g, V.state = "loading", Promise.resolve(t.store(V.url, { signal: g.signal })).then(
|
|
263
263
|
() => {
|
|
264
|
-
|
|
264
|
+
a || g.signal.aborted || V.generation !== o || (V.controller = void 0, V.state = "stored", s(V, p));
|
|
265
265
|
},
|
|
266
266
|
() => {
|
|
267
|
-
|
|
267
|
+
a || g.signal.aborted || V.generation !== o || (V.controller = void 0, V.state = "failed", s(V, "store_failed"));
|
|
268
268
|
}
|
|
269
269
|
);
|
|
270
|
-
}, v = (V, p) => typeof p != "function" ||
|
|
270
|
+
}, v = (V, p) => typeof p != "function" || a ? !1 : (i.has(V) || i.set(V, /* @__PURE__ */ new Set()), i.get(V)?.add(p), r.get(n(V))?.state === "stored" && l(V, p, "store_finished"), !0), M = (V) => {
|
|
271
271
|
if (V === void 0) {
|
|
272
272
|
for (const g of [...r.values()]) E(g);
|
|
273
273
|
return !0;
|
|
274
274
|
}
|
|
275
|
-
const p = r.get(
|
|
275
|
+
const p = r.get(n(V));
|
|
276
276
|
return p && E(p), !0;
|
|
277
277
|
};
|
|
278
278
|
return {
|
|
@@ -281,27 +281,27 @@ function vq(A, q, e) {
|
|
|
281
281
|
return p ? (i.get(V)?.delete(p), i.get(V)?.size === 0 && i.delete(V)) : i.delete(V), !0;
|
|
282
282
|
},
|
|
283
283
|
store(V, p) {
|
|
284
|
-
if (
|
|
285
|
-
const g =
|
|
286
|
-
let
|
|
287
|
-
return
|
|
284
|
+
if (a) return !1;
|
|
285
|
+
const g = n(V);
|
|
286
|
+
let o = r.get(g);
|
|
287
|
+
return o || (o = {
|
|
288
288
|
url: g,
|
|
289
289
|
paths: /* @__PURE__ */ new Set(),
|
|
290
290
|
state: "failed",
|
|
291
291
|
generation: 0
|
|
292
|
-
}, r.set(g,
|
|
292
|
+
}, r.set(g, o)), o.paths.add(V), p && v(V, p), o.state === "stored" || o.state !== "loading" && f(o, "store_finished"), !0;
|
|
293
293
|
},
|
|
294
294
|
release: M,
|
|
295
295
|
change(V, p) {
|
|
296
|
-
const g = r.get(
|
|
297
|
-
g && (p === "deleted" ? (s(g, "deleted"), E(g)) :
|
|
296
|
+
const g = r.get(n(V));
|
|
297
|
+
g && (p === "deleted" ? (s(g, "deleted"), E(g)) : f(g, "updated"));
|
|
298
298
|
},
|
|
299
299
|
dispose() {
|
|
300
|
-
|
|
300
|
+
a || (M(), a = !0, i.clear());
|
|
301
301
|
}
|
|
302
302
|
};
|
|
303
303
|
}
|
|
304
|
-
const Mq = "libaribhtml5", bq = "0.1.
|
|
304
|
+
const Mq = "libaribhtml5", bq = "0.1.10", kq = { name: "huggy" }, wq = { modelName: "Huggy ARIB HTML5 Receiver" }, I = {
|
|
305
305
|
name: Mq,
|
|
306
306
|
version: bq,
|
|
307
307
|
author: kq,
|
|
@@ -395,7 +395,7 @@ function Jq(A, q) {
|
|
|
395
395
|
"event_message_tag"
|
|
396
396
|
].every((t) => A.source?.[t] === q.source?.[t]) && A.message_group_id === q.message_group_id && A.message_id === q.message_id && A.message_version === q.message_version;
|
|
397
397
|
}
|
|
398
|
-
const
|
|
398
|
+
const m = {
|
|
399
399
|
broadcastMedia: 12,
|
|
400
400
|
monomediaOverBroadcastVideo: 11,
|
|
401
401
|
currentEventInformation: 10,
|
|
@@ -432,7 +432,7 @@ function x(A) {
|
|
|
432
432
|
throw b("managed_URL must be a string");
|
|
433
433
|
return { permissionBitmaps: e, managedUrls: t };
|
|
434
434
|
}
|
|
435
|
-
function
|
|
435
|
+
function O(A) {
|
|
436
436
|
const q = A.reduce(
|
|
437
437
|
(t, i) => t + (i.permissionBitmaps?.length ?? 0),
|
|
438
438
|
0
|
|
@@ -457,7 +457,7 @@ function L(A) {
|
|
|
457
457
|
function xq(A, q) {
|
|
458
458
|
return A.origin === q.origin && A.pathname.startsWith(q.pathname);
|
|
459
459
|
}
|
|
460
|
-
function
|
|
460
|
+
function Oq(A, q, e) {
|
|
461
461
|
let t;
|
|
462
462
|
try {
|
|
463
463
|
t = new URL(A, e);
|
|
@@ -468,7 +468,7 @@ function Nq(A, q, e) {
|
|
|
468
468
|
const i = t.pathname.replace(/\/+$/, "") || "/", r = q.pathname;
|
|
469
469
|
return i !== "/" && r !== i && !r.startsWith(`${i}/`) ? null : t.origin.length + i.length;
|
|
470
470
|
}
|
|
471
|
-
class
|
|
471
|
+
class Nq {
|
|
472
472
|
broadcastBaseUrl;
|
|
473
473
|
documentUrl;
|
|
474
474
|
baseAreas;
|
|
@@ -479,7 +479,7 @@ class Oq {
|
|
|
479
479
|
/** Apply a new MH-AIT descriptor without discarding areas added by the application. */
|
|
480
480
|
update(q) {
|
|
481
481
|
const e = q?.map(x);
|
|
482
|
-
|
|
482
|
+
O([...e ?? [], ...this.addedAreas]), this.baseAreas = e;
|
|
483
483
|
}
|
|
484
484
|
hasDescriptor() {
|
|
485
485
|
return this.baseAreas !== void 0 || this.addedAreas.length > 0;
|
|
@@ -502,7 +502,7 @@ class Oq {
|
|
|
502
502
|
permissionBitmaps: e.permission === null || e.permission.length === 0 ? null : e.permission,
|
|
503
503
|
managedUrls: e.urls === null || e.urls.length === 0 ? null : e.urls
|
|
504
504
|
});
|
|
505
|
-
|
|
505
|
+
O([...this.baseAreas ?? [], ...this.addedAreas, t]), this.addedAreas.push(jq(t));
|
|
506
506
|
}
|
|
507
507
|
evaluate(q) {
|
|
508
508
|
let e;
|
|
@@ -517,16 +517,16 @@ class Oq {
|
|
|
517
517
|
if (this.baseAreas === void 0 && this.addedAreas.length === 0)
|
|
518
518
|
return { withinBoundary: !0, permissionBits: S };
|
|
519
519
|
let i = -1, r = 0;
|
|
520
|
-
for (const
|
|
521
|
-
const
|
|
522
|
-
if (
|
|
523
|
-
i < 0 ? (i = 0, r = L(
|
|
520
|
+
for (const a of t) {
|
|
521
|
+
const n = a.managedUrls;
|
|
522
|
+
if (n === null || n.length === 0) {
|
|
523
|
+
i < 0 ? (i = 0, r = L(a.permissionBitmaps)) : i === 0 && (r &= L(a.permissionBitmaps));
|
|
524
524
|
continue;
|
|
525
525
|
}
|
|
526
|
-
for (const
|
|
527
|
-
const s =
|
|
526
|
+
for (const l of n) {
|
|
527
|
+
const s = Oq(l, e, this.documentUrl);
|
|
528
528
|
if (s === null || s < i) continue;
|
|
529
|
-
const y = L(
|
|
529
|
+
const y = L(a.permissionBitmaps);
|
|
530
530
|
s > i ? (i = s, r = y) : r &= y;
|
|
531
531
|
}
|
|
532
532
|
}
|
|
@@ -541,48 +541,48 @@ function Zq(A, q) {
|
|
|
541
541
|
if (q) return;
|
|
542
542
|
const e = (r) => {
|
|
543
543
|
try {
|
|
544
|
-
const
|
|
545
|
-
return /^https?:$/.test(
|
|
544
|
+
const a = new URL(String(r), A.location.href);
|
|
545
|
+
return /^https?:$/.test(a.protocol) && a.origin !== A.location.origin;
|
|
546
546
|
} catch {
|
|
547
547
|
return !1;
|
|
548
548
|
}
|
|
549
549
|
}, t = A.XMLHttpRequest?.prototype;
|
|
550
550
|
if (t) {
|
|
551
|
-
const r = /* @__PURE__ */ new WeakSet(),
|
|
551
|
+
const r = /* @__PURE__ */ new WeakSet(), a = t.open, n = t.send;
|
|
552
552
|
Object.defineProperty(t, "open", {
|
|
553
553
|
configurable: !0,
|
|
554
554
|
writable: !0,
|
|
555
|
-
value: function(
|
|
556
|
-
return e(s) ? r.add(this) : r.delete(this), Reflect.apply(
|
|
555
|
+
value: function(l, s, ...y) {
|
|
556
|
+
return e(s) ? r.add(this) : r.delete(this), Reflect.apply(a, this, [l, s, ...y]);
|
|
557
557
|
}
|
|
558
558
|
}), Object.defineProperty(t, "send", {
|
|
559
559
|
configurable: !0,
|
|
560
560
|
writable: !0,
|
|
561
|
-
value: function(
|
|
562
|
-
if (!r.has(this)) return
|
|
561
|
+
value: function(l) {
|
|
562
|
+
if (!r.has(this)) return n.call(this, l);
|
|
563
563
|
A.queueMicrotask(() => this.dispatchEvent(new A.ProgressEvent("error")));
|
|
564
564
|
}
|
|
565
565
|
});
|
|
566
566
|
}
|
|
567
567
|
const i = A.fetch?.bind(A);
|
|
568
|
-
if (i && (A.fetch = (r,
|
|
569
|
-
const
|
|
570
|
-
return e(
|
|
568
|
+
if (i && (A.fetch = (r, a) => {
|
|
569
|
+
const n = r instanceof A.Request ? r.url : r;
|
|
570
|
+
return e(n) ? Promise.reject(new TypeError("External network is offline")) : i(r, a);
|
|
571
571
|
}), typeof A.navigator.sendBeacon == "function") {
|
|
572
572
|
const r = A.navigator.sendBeacon.bind(A.navigator);
|
|
573
573
|
Object.defineProperty(A.navigator, "sendBeacon", {
|
|
574
574
|
configurable: !0,
|
|
575
|
-
value: (
|
|
575
|
+
value: (a, n) => e(a) ? !1 : r(a, n)
|
|
576
576
|
});
|
|
577
577
|
}
|
|
578
578
|
}
|
|
579
579
|
const Kq = (A, q, e = 1) => Math.abs(A.left - q.left) <= e && Math.abs(A.top - q.top) <= e && Math.abs(A.width - q.width) <= e && Math.abs(A.height - q.height) <= e, zq = (A) => A.hasAttribute("width") || A.hasAttribute("height") || A.style.getPropertyValue("width") !== "" || A.style.getPropertyValue("height") !== "", F = (A) => {
|
|
580
580
|
const q = A.ownerDocument;
|
|
581
581
|
let e = A, t = A.getBoundingClientRect(), i = A, r = !zq(A) && (t.width <= 0 || t.height <= 0 || Math.abs(t.width - 300) <= 1 && Math.abs(t.height - 150) <= 1);
|
|
582
|
-
for (let
|
|
583
|
-
const
|
|
584
|
-
if (!
|
|
585
|
-
e =
|
|
582
|
+
for (let a = A.parentElement; a && a !== q.body && a !== q.documentElement; a = a.parentElement) {
|
|
583
|
+
const n = a.getBoundingClientRect(), l = a.children.length === 1 && a.firstElementChild === i, s = Kq(n, t);
|
|
584
|
+
if (!l || n.width <= 0 || n.height <= 0 || !s && !r) break;
|
|
585
|
+
e = a, t = n, i = a, r = !1;
|
|
586
586
|
}
|
|
587
587
|
return { element: e, rect: t };
|
|
588
588
|
};
|
|
@@ -593,28 +593,28 @@ class Hq {
|
|
|
593
593
|
constructor(q) {
|
|
594
594
|
this.target = q;
|
|
595
595
|
}
|
|
596
|
-
set(q, e) {
|
|
597
|
-
if (this.setPlaceholder(q, e), !e) {
|
|
596
|
+
set(q, e, t = !0) {
|
|
597
|
+
if (this.setPlaceholder(q, e), !e || !t) {
|
|
598
598
|
this.restoreBackgrounds();
|
|
599
599
|
return;
|
|
600
600
|
}
|
|
601
|
-
const
|
|
601
|
+
const i = /* @__PURE__ */ new Set();
|
|
602
602
|
for (let n = q.parentElement; n && n !== this.target.document.body && n !== this.target.document.documentElement; n = n.parentElement) {
|
|
603
|
-
const
|
|
604
|
-
!this.backgrounds.has(n) && this.hasTransparentBackground(
|
|
603
|
+
const l = this.target.getComputedStyle(n);
|
|
604
|
+
!this.backgrounds.has(n) && this.hasTransparentBackground(l) || i.add(n);
|
|
605
605
|
}
|
|
606
|
-
const
|
|
607
|
-
const
|
|
608
|
-
return
|
|
606
|
+
const r = F(q).rect, a = (n) => {
|
|
607
|
+
const l = n.getBoundingClientRect(), s = 1;
|
|
608
|
+
return l.width > 0 && l.height > 0 && l.left <= r.left + s && l.top <= r.top + s && l.right >= r.right - s && l.bottom >= r.bottom - s;
|
|
609
609
|
};
|
|
610
610
|
for (const n of this.target.document.querySelectorAll("body *")) {
|
|
611
611
|
if (n === q || n.contains(q) || q.contains(n)) continue;
|
|
612
|
-
const
|
|
613
|
-
!this.backgrounds.has(n) && this.hasTransparentBackground(
|
|
612
|
+
const l = this.target.getComputedStyle(n);
|
|
613
|
+
!this.backgrounds.has(n) && this.hasTransparentBackground(l) || a(n) && i.add(n);
|
|
614
614
|
}
|
|
615
615
|
for (const n of [...this.backgrounds.keys()])
|
|
616
|
-
|
|
617
|
-
for (const n of
|
|
616
|
+
i.has(n) || this.restoreBackground(n);
|
|
617
|
+
for (const n of i) {
|
|
618
618
|
if (this.backgrounds.has(n)) {
|
|
619
619
|
this.captureApplicationBackgroundChanges(n), this.clearBackground(n);
|
|
620
620
|
continue;
|
|
@@ -669,18 +669,11 @@ class Hq {
|
|
|
669
669
|
}
|
|
670
670
|
placeholderElements(q) {
|
|
671
671
|
const e = [q], t = F(q), i = t.rect, r = 1;
|
|
672
|
-
let
|
|
673
|
-
for (
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
const s = o.getBoundingClientRect();
|
|
678
|
-
Math.abs(s.left - i.left) <= r && Math.abs(s.top - i.top) <= r && Math.abs(s.width - i.width) <= r && Math.abs(s.height - i.height) <= r && e.push(o);
|
|
679
|
-
}
|
|
680
|
-
for (let o = q.parentElement; o && o !== this.target.document.body && o !== this.target.document.documentElement; o = o.parentElement) {
|
|
681
|
-
const c = o.getBoundingClientRect();
|
|
682
|
-
if (!(o.children.length === 1 && o.firstElementChild === n && (o === t.element || Math.abs(c.left - i.left) <= r && Math.abs(c.top - i.top) <= r && Math.abs(c.width - i.width) <= r && Math.abs(c.height - i.height) <= r))) break;
|
|
683
|
-
e.push(o), n = o;
|
|
672
|
+
let a = q;
|
|
673
|
+
for (let n = q.parentElement; n && n !== this.target.document.body && n !== this.target.document.documentElement; n = n.parentElement) {
|
|
674
|
+
const l = n.getBoundingClientRect();
|
|
675
|
+
if (!(n.children.length === 1 && n.firstElementChild === a && (n === t.element || Math.abs(l.left - i.left) <= r && Math.abs(l.top - i.top) <= r && Math.abs(l.width - i.width) <= r && Math.abs(l.height - i.height) <= r))) break;
|
|
676
|
+
e.push(n), a = n;
|
|
684
677
|
}
|
|
685
678
|
return e;
|
|
686
679
|
}
|
|
@@ -738,7 +731,7 @@ class Hq {
|
|
|
738
731
|
this.restoreBackground(q);
|
|
739
732
|
}
|
|
740
733
|
}
|
|
741
|
-
const Yq = 'object
|
|
734
|
+
const Yq = '[data-arib-object="video/x-arib2-broadcast"], object[type="video/x-arib2-broadcast"]', N = [
|
|
742
735
|
"animationstart",
|
|
743
736
|
"animationend",
|
|
744
737
|
"animationcancel",
|
|
@@ -778,7 +771,7 @@ class Xq {
|
|
|
778
771
|
startObserving() {
|
|
779
772
|
if (!(this.observing || this.disposed)) {
|
|
780
773
|
this.observing = !0, this.mutationObserver = new this.target.MutationObserver(this.schedule), this.observeDocumentMutations(), this.resizeObserver?.observe(this.target.document.documentElement), this.target.addEventListener("resize", this.schedule);
|
|
781
|
-
for (const q of
|
|
774
|
+
for (const q of N)
|
|
782
775
|
this.target.document.addEventListener(q, this.schedule, !0);
|
|
783
776
|
this.target.document.addEventListener("load", this.schedule, !0), queueMicrotask(this.schedule);
|
|
784
777
|
}
|
|
@@ -795,7 +788,7 @@ class Xq {
|
|
|
795
788
|
dispose(q, e) {
|
|
796
789
|
if (!this.disposed) {
|
|
797
790
|
this.disposed = !0, this.mediaPlaneFrame !== null && this.target.cancelAnimationFrame(this.mediaPlaneFrame), this.mediaPlaneFrame = null, this.mutationObserver?.disconnect(), this.resizeObserver?.disconnect(), this.target.removeEventListener("resize", this.schedule), this.target.document.removeEventListener("load", this.schedule, !0);
|
|
798
|
-
for (const t of
|
|
791
|
+
for (const t of N)
|
|
799
792
|
this.target.document.removeEventListener(t, this.schedule, !0);
|
|
800
793
|
this.applicationCanvasStyle?.remove(), this.applicationCanvasStyle = null, e?.(), this.unmountMediaPlane(q);
|
|
801
794
|
}
|
|
@@ -809,12 +802,12 @@ class Xq {
|
|
|
809
802
|
let i = this.target.getComputedStyle(e ?? this.target.document.documentElement).backgroundColor;
|
|
810
803
|
const r = e?.getBoundingClientRect();
|
|
811
804
|
if (r && r.width > 0 && r.height > 0)
|
|
812
|
-
for (const
|
|
813
|
-
const
|
|
814
|
-
if (
|
|
815
|
-
const s =
|
|
805
|
+
for (const n of this.target.document.querySelectorAll("body *")) {
|
|
806
|
+
const l = this.target.getComputedStyle(n);
|
|
807
|
+
if (l.backgroundColor === "rgba(0, 0, 0, 0)" || l.backgroundColor === "transparent") continue;
|
|
808
|
+
const s = n.getBoundingClientRect();
|
|
816
809
|
if (!(s.width <= 0 || s.height <= 0 || s.left > r.left + 1 || s.top > r.top + 1 || s.right < r.right - 1 || s.bottom < r.bottom - 1)) {
|
|
817
|
-
i =
|
|
810
|
+
i = l.backgroundColor;
|
|
818
811
|
break;
|
|
819
812
|
}
|
|
820
813
|
}
|
|
@@ -844,7 +837,14 @@ class Xq {
|
|
|
844
837
|
observeDocumentMutations() {
|
|
845
838
|
!this.observing || this.disposed || this.mutationObserver === null || this.mutationObserver.observe(this.target.document.documentElement, {
|
|
846
839
|
attributes: !0,
|
|
847
|
-
attributeFilter: [
|
|
840
|
+
attributeFilter: [
|
|
841
|
+
"class",
|
|
842
|
+
"style",
|
|
843
|
+
"type",
|
|
844
|
+
"data-arib-object",
|
|
845
|
+
"name",
|
|
846
|
+
"value"
|
|
847
|
+
],
|
|
848
848
|
childList: !0,
|
|
849
849
|
subtree: !0
|
|
850
850
|
});
|
|
@@ -861,11 +861,11 @@ class Xq {
|
|
|
861
861
|
q !== this.observedMediaObject && (this.observedMediaObject && this.resizeObserver?.unobserve(this.observedMediaObject), this.observedMediaObject = q, q && this.resizeObserver?.observe(q));
|
|
862
862
|
}
|
|
863
863
|
logicalViewport() {
|
|
864
|
-
const q = this.target.document.querySelector('meta[name="viewport"]')?.content ?? "", e = (
|
|
865
|
-
const
|
|
866
|
-
return Number.isSafeInteger(
|
|
867
|
-
}, t = e("width"), i = e("height"), r = t ?? (i === null ? 3840 : Math.round(i * 16 / 9)),
|
|
868
|
-
return { width: r, height:
|
|
864
|
+
const q = this.target.document.querySelector('meta[name="viewport"]')?.content ?? "", e = (n) => {
|
|
865
|
+
const l = Number(q.match(new RegExp(`(?:^|[,;])\\s*${n}\\s*=\\s*(\\d+)`, "i"))?.[1]);
|
|
866
|
+
return Number.isSafeInteger(l) && l > 0 ? l : null;
|
|
867
|
+
}, t = e("width"), i = e("height"), r = t ?? (i === null ? 3840 : Math.round(i * 16 / 9)), a = i ?? (t === null ? 2160 : Math.round(t * 9 / 16));
|
|
868
|
+
return { width: r, height: a };
|
|
869
869
|
}
|
|
870
870
|
reportScreenSize() {
|
|
871
871
|
const q = this.logicalViewport(), e = JSON.stringify(q);
|
|
@@ -896,41 +896,42 @@ class Xq {
|
|
|
896
896
|
this.observeMediaObject(null);
|
|
897
897
|
const E = this.activeMediaObject ? this.slotIdFor(this.activeMediaObject) : "";
|
|
898
898
|
this.activeMediaObject && this.unmountMediaPlane("slot-removed");
|
|
899
|
-
const
|
|
899
|
+
const f = this.logicalViewport(), v = {
|
|
900
900
|
slotId: E,
|
|
901
901
|
visible: !1,
|
|
902
902
|
x: 0,
|
|
903
903
|
y: 0,
|
|
904
904
|
width: 0,
|
|
905
905
|
height: 0,
|
|
906
|
-
screenWidth:
|
|
907
|
-
screenHeight:
|
|
906
|
+
screenWidth: f.width,
|
|
907
|
+
screenHeight: f.height,
|
|
908
908
|
layer: { documentOrder: -1, stackingPath: [] }
|
|
909
909
|
}, M = JSON.stringify(v);
|
|
910
910
|
M !== this.lastMediaPlane && (this.lastMediaPlane = M, this.postRuntime("media-plane", v));
|
|
911
911
|
return;
|
|
912
912
|
}
|
|
913
913
|
this.observeMediaObject(q), this.installBroadcastObjectApi(q);
|
|
914
|
-
const e = F(q), t = e.rect, i = this.target.getComputedStyle(q), r = q.querySelector('param[name="video_src"]')?.value,
|
|
914
|
+
const e = F(q), t = e.rect, i = this.target.getComputedStyle(q), r = q.querySelector('param[name="video_src"]')?.value, a = q.querySelector('param[name="audio_src"]')?.value, n = this.logicalViewport(), l = this.externalMediaHole.describeStackingPath(q), s = {
|
|
915
915
|
slotId: this.slotIdFor(q),
|
|
916
|
-
visible: i.display !== "none" && i.visibility !== "hidden" && t.width > 0 && t.height > 0 &&
|
|
916
|
+
visible: i.display !== "none" && i.visibility !== "hidden" && t.width > 0 && t.height > 0 && l.every((E) => E.display !== "none" && E.visibility !== "hidden" && E.opacity > 0),
|
|
917
917
|
x: t.x,
|
|
918
918
|
y: t.y,
|
|
919
919
|
width: t.width,
|
|
920
920
|
height: t.height,
|
|
921
|
-
screenWidth:
|
|
922
|
-
screenHeight:
|
|
921
|
+
screenWidth: n.width,
|
|
922
|
+
screenHeight: n.height,
|
|
923
923
|
videoSource: r,
|
|
924
|
-
audioSource:
|
|
924
|
+
audioSource: a,
|
|
925
925
|
layer: {
|
|
926
926
|
documentOrder: Array.from(this.target.document.querySelectorAll("*")).indexOf(q),
|
|
927
|
-
stackingPath:
|
|
927
|
+
stackingPath: l,
|
|
928
928
|
externalPlacement: e.element !== q && Number.parseInt(this.target.getComputedStyle(e.element).zIndex, 10) > 0 ? "above-application" : "behind-application"
|
|
929
929
|
}
|
|
930
930
|
}, y = JSON.stringify(s);
|
|
931
931
|
q !== this.activeMediaObject ? (this.activeMediaObject && this.unmountMediaPlane("slot-removed"), this.activeMediaObject = q, this.adapter && this.callMediaPlaneAdapter(() => this.adapter?.mountMediaPlane(q, s))) : y !== this.lastMediaPlane && this.adapter && this.callMediaPlaneAdapter(() => this.adapter?.updateMediaPlane(q, s)), this.externalMediaHole.set(
|
|
932
932
|
q,
|
|
933
|
-
(this.adapter?.renderMode ?? "external") === "external"
|
|
933
|
+
(this.adapter?.renderMode ?? "external") === "external",
|
|
934
|
+
s.layer.externalPlacement !== "above-application"
|
|
934
935
|
), y !== this.lastMediaPlane && (this.lastMediaPlane = y, this.postRuntime("media-plane", s));
|
|
935
936
|
}
|
|
936
937
|
}
|
|
@@ -1015,14 +1016,14 @@ class $q {
|
|
|
1015
1016
|
}
|
|
1016
1017
|
};
|
|
1017
1018
|
boundaryDescriptor = {
|
|
1018
|
-
getCurrentBoundary: () => (this.requirePermission(
|
|
1019
|
+
getCurrentBoundary: () => (this.requirePermission(m.broadcastResources), this.boundary.getCurrentBoundary()),
|
|
1019
1020
|
addPermissionManagedArea: (q) => {
|
|
1020
|
-
this.requirePermission(
|
|
1021
|
+
this.requirePermission(m.boundaryExtension), this.boundary.addPermissionManagedArea(q);
|
|
1021
1022
|
}
|
|
1022
1023
|
};
|
|
1023
1024
|
ownerApplication;
|
|
1024
1025
|
constructor(q) {
|
|
1025
|
-
this.target = q.target, this.resolveRuntimeUrl = q.resolveRuntimeUrl, this.allowExternalNetwork = q.allowExternalNetwork, this.postRuntime = q.postRuntime, this.applicationInformation = { ...q.application }, this.boundary = new
|
|
1026
|
+
this.target = q.target, this.resolveRuntimeUrl = q.resolveRuntimeUrl, this.allowExternalNetwork = q.allowExternalNetwork, this.postRuntime = q.postRuntime, this.applicationInformation = { ...q.application }, this.boundary = new Nq(
|
|
1026
1027
|
q.broadcastBaseUrl,
|
|
1027
1028
|
this.target.location.href,
|
|
1028
1029
|
this.applicationInformation.permissionManagedAreas
|
|
@@ -1045,7 +1046,7 @@ class $q {
|
|
|
1045
1046
|
this.postRuntime("destroy");
|
|
1046
1047
|
},
|
|
1047
1048
|
replaceApplication: (e, t, i = null) => {
|
|
1048
|
-
if (this.requirePermission(
|
|
1049
|
+
if (this.requirePermission(m.broadcastResources), !Number.isSafeInteger(e) || e < 0 || !Number.isSafeInteger(t) || t < 0) {
|
|
1049
1050
|
this.postRuntime("error", {
|
|
1050
1051
|
message: "Invalid replaceApplication application identifier"
|
|
1051
1052
|
});
|
|
@@ -1058,9 +1059,9 @@ class $q {
|
|
|
1058
1059
|
});
|
|
1059
1060
|
},
|
|
1060
1061
|
exitFromManagedState: (e) => {
|
|
1061
|
-
this.requirePermission(
|
|
1062
|
+
this.requirePermission(m.broadcastResources), this.postRuntime("exit-managed-state", { url: String(e ?? "") });
|
|
1062
1063
|
},
|
|
1063
|
-
getApplicationBoundaryAndPermissionDescriptor: () => (this.requirePermission(
|
|
1064
|
+
getApplicationBoundaryAndPermissionDescriptor: () => (this.requirePermission(m.broadcastResources), this.boundary.hasDescriptor() ? this.boundaryDescriptor : null)
|
|
1064
1065
|
}, Object.defineProperty(this.target.navigator, "applicationManager", {
|
|
1065
1066
|
configurable: !0,
|
|
1066
1067
|
enumerable: !0,
|
|
@@ -1069,7 +1070,7 @@ class $q {
|
|
|
1069
1070
|
// Hybridcast HTML applications use this receiver operation to return
|
|
1070
1071
|
// to the BML data-broadcasting browser that launched them.
|
|
1071
1072
|
launchDataBroadcastingBrowser: () => {
|
|
1072
|
-
this.requirePermission(
|
|
1073
|
+
this.requirePermission(m.broadcastResources), this.postRuntime("launch-data-broadcasting-browser");
|
|
1073
1074
|
}
|
|
1074
1075
|
}
|
|
1075
1076
|
});
|
|
@@ -1179,92 +1180,104 @@ function ee(A, q) {
|
|
|
1179
1180
|
e ? Object.defineProperty(A, "userAgent", e) : Reflect.deleteProperty(A, "userAgent");
|
|
1180
1181
|
};
|
|
1181
1182
|
}
|
|
1182
|
-
function te(A
|
|
1183
|
+
function te(A) {
|
|
1184
|
+
const q = A.document.querySelectorAll(
|
|
1185
|
+
'object[type="video/x-arib2-broadcast"]'
|
|
1186
|
+
);
|
|
1187
|
+
for (const e of q) {
|
|
1188
|
+
const t = A.document.createElement("video");
|
|
1189
|
+
for (const i of Array.from(e.attributes))
|
|
1190
|
+
i.name.toLowerCase() !== "type" && t.setAttribute(i.name, i.value);
|
|
1191
|
+
for (t.setAttribute("data-arib-object", "video/x-arib2-broadcast"); e.firstChild !== null; ) t.append(e.firstChild);
|
|
1192
|
+
e.replaceWith(t);
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
function Ae(A, q = {}) {
|
|
1183
1196
|
if (!A.__ARIB_HTML5_RUNTIME__) {
|
|
1184
1197
|
A.__ARIB_HTML5_RUNTIME__ = "installing";
|
|
1185
1198
|
try {
|
|
1186
|
-
|
|
1199
|
+
ie(A, q), A.__ARIB_HTML5_RUNTIME__ = !0;
|
|
1187
1200
|
} catch (e) {
|
|
1188
1201
|
throw delete A.__ARIB_HTML5_RUNTIME__, e;
|
|
1189
1202
|
}
|
|
1190
1203
|
}
|
|
1191
1204
|
}
|
|
1192
|
-
function
|
|
1205
|
+
function ie(A, q) {
|
|
1193
1206
|
const e = q.userAgent === void 0 ? null : ee(A.navigator, q.userAgent);
|
|
1194
|
-
|
|
1207
|
+
fq(A, q.now), uq(A), mq(A);
|
|
1195
1208
|
const t = z(
|
|
1196
1209
|
q.broadcastBaseUrl,
|
|
1197
1210
|
A.location.href
|
|
1198
1211
|
);
|
|
1199
1212
|
if (t.origin !== A.location.origin)
|
|
1200
1213
|
throw new Error(`Broadcast base URL must be same-origin: ${t.href}`);
|
|
1201
|
-
const i = Bq(A.location.href, t), r = (
|
|
1202
|
-
const h = new URL(String(
|
|
1214
|
+
const i = Bq(A.location.href, t), r = (o) => {
|
|
1215
|
+
const h = new URL(String(o ?? ""), A.location.href);
|
|
1203
1216
|
return H(h, t, i);
|
|
1204
|
-
},
|
|
1217
|
+
}, a = A.crypto.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`, n = (o, h = {}) => {
|
|
1205
1218
|
A.parent?.postMessage({
|
|
1206
1219
|
type: "arib-runtime",
|
|
1207
|
-
runtimeId:
|
|
1208
|
-
event:
|
|
1220
|
+
runtimeId: a,
|
|
1221
|
+
event: o,
|
|
1209
1222
|
...h
|
|
1210
1223
|
}, "*");
|
|
1211
|
-
},
|
|
1224
|
+
}, l = new $q({
|
|
1212
1225
|
target: A,
|
|
1213
1226
|
broadcastBaseUrl: t,
|
|
1214
1227
|
resolveRuntimeUrl: r,
|
|
1215
1228
|
allowExternalNetwork: q.allowExternalNetwork ?? !1,
|
|
1216
1229
|
application: q.application,
|
|
1217
|
-
postRuntime:
|
|
1218
|
-
}), s = (
|
|
1219
|
-
|
|
1230
|
+
postRuntime: n
|
|
1231
|
+
}), s = (o) => {
|
|
1232
|
+
l.requirePermission(o);
|
|
1220
1233
|
};
|
|
1221
1234
|
Zq(A, q.allowExternalNetwork);
|
|
1222
|
-
for (const [
|
|
1223
|
-
const y = /* @__PURE__ */ new Set(), E = /* @__PURE__ */ new Set(),
|
|
1235
|
+
for (const [o, h] of Object.entries(qe)) A[o] = h;
|
|
1236
|
+
const y = /* @__PURE__ */ new Set(), E = /* @__PURE__ */ new Set(), f = vq(
|
|
1224
1237
|
A,
|
|
1225
|
-
(
|
|
1238
|
+
(o) => r(o),
|
|
1226
1239
|
q.resourceStore
|
|
1227
1240
|
);
|
|
1228
1241
|
let v = null;
|
|
1229
1242
|
const M = new _q({
|
|
1230
|
-
requirePermission: () => s(
|
|
1231
|
-
postRuntime:
|
|
1243
|
+
requirePermission: () => s(m.broadcastMedia),
|
|
1244
|
+
postRuntime: n
|
|
1232
1245
|
});
|
|
1233
1246
|
let V;
|
|
1234
|
-
A.addEventListener("message", (
|
|
1235
|
-
if (!(
|
|
1236
|
-
if (
|
|
1247
|
+
A.addEventListener("message", (o) => {
|
|
1248
|
+
if (!(o.source !== A.parent || o.origin !== A.location.origin) && !(o.data?.type !== "arib-host" || o.data.runtimeId !== a) && !M.handleHostMessage(o.data)) {
|
|
1249
|
+
if (o.data.event === "program-info") {
|
|
1237
1250
|
try {
|
|
1238
|
-
v =
|
|
1251
|
+
v = o.data.value === null ? null : D(o.data.value);
|
|
1239
1252
|
} catch (h) {
|
|
1240
|
-
|
|
1253
|
+
n("error", { message: `Invalid program information: ${String(h)}` });
|
|
1241
1254
|
return;
|
|
1242
1255
|
}
|
|
1243
1256
|
for (const h of E) queueMicrotask(h);
|
|
1244
1257
|
return;
|
|
1245
1258
|
}
|
|
1246
|
-
if (
|
|
1259
|
+
if (o.data.event === "application-information") {
|
|
1247
1260
|
try {
|
|
1248
|
-
const h =
|
|
1249
|
-
|
|
1261
|
+
const h = l.updateApplicationInformation(
|
|
1262
|
+
o.data.value ?? {}
|
|
1250
1263
|
);
|
|
1251
|
-
V.schedule(), h ||
|
|
1264
|
+
V.schedule(), h || n("application-boundary-exit", { url: A.location.href });
|
|
1252
1265
|
} catch (h) {
|
|
1253
|
-
|
|
1266
|
+
n("error", { message: `Invalid application information: ${String(h)}` });
|
|
1254
1267
|
}
|
|
1255
1268
|
return;
|
|
1256
1269
|
}
|
|
1257
|
-
if (
|
|
1258
|
-
|
|
1270
|
+
if (o.data.event === "receiver-input-state") {
|
|
1271
|
+
l.setHostInputActive(!!o.data.active);
|
|
1259
1272
|
return;
|
|
1260
1273
|
}
|
|
1261
|
-
if (
|
|
1262
|
-
const h =
|
|
1263
|
-
(h === "updated" || h === "deleted") &&
|
|
1274
|
+
if (o.data.event === "resource-change") {
|
|
1275
|
+
const h = o.data.change;
|
|
1276
|
+
(h === "updated" || h === "deleted") && f.change(String(o.data.path ?? ""), h);
|
|
1264
1277
|
return;
|
|
1265
1278
|
}
|
|
1266
|
-
if (
|
|
1267
|
-
const h =
|
|
1279
|
+
if (o.data.event === "stream-event") {
|
|
1280
|
+
const h = o.data.value;
|
|
1268
1281
|
for (const T of [...y])
|
|
1269
1282
|
Wq(h, T.selector) && T.callback(h);
|
|
1270
1283
|
}
|
|
@@ -1276,35 +1289,35 @@ function Ae(A, q) {
|
|
|
1276
1289
|
);
|
|
1277
1290
|
Qq(A.localStorage, p), P(A.navigator, "receiverDevice", {
|
|
1278
1291
|
confirmIPNetwork: () => q.allowExternalNetwork ?? !1,
|
|
1279
|
-
getSystemInformation: () => (s(
|
|
1280
|
-
getDeviceIdentifier: (
|
|
1281
|
-
s(
|
|
1282
|
-
Gq(
|
|
1292
|
+
getSystemInformation: () => (s(m.broadcastResources), { ...p }),
|
|
1293
|
+
getDeviceIdentifier: (o, h) => {
|
|
1294
|
+
s(m.deviceIdentifier), queueMicrotask(() => {
|
|
1295
|
+
Gq(o, q.getDeviceIdentifier).then(
|
|
1283
1296
|
h,
|
|
1284
1297
|
() => h("")
|
|
1285
1298
|
);
|
|
1286
1299
|
});
|
|
1287
1300
|
},
|
|
1288
|
-
getCurrentEventInformation: (
|
|
1289
|
-
s(
|
|
1301
|
+
getCurrentEventInformation: (o) => {
|
|
1302
|
+
s(m.currentEventInformation), queueMicrotask(() => o(v ? D(v) : null));
|
|
1290
1303
|
},
|
|
1291
1304
|
cacheEvent: {
|
|
1292
|
-
addCacheEventListener: (
|
|
1293
|
-
storeDataResource: (
|
|
1294
|
-
releaseDataResource: (
|
|
1295
|
-
removeCacheEventListener: (
|
|
1305
|
+
addCacheEventListener: (o, h) => (s(m.broadcastResources), f.addListener(o, h)),
|
|
1306
|
+
storeDataResource: (o, h) => (s(m.broadcastResources), f.store(o, h)),
|
|
1307
|
+
releaseDataResource: (o) => (s(m.broadcastResources), f.release(o)),
|
|
1308
|
+
removeCacheEventListener: (o, h) => (s(m.broadcastResources), f.removeListener(o, h))
|
|
1296
1309
|
},
|
|
1297
1310
|
streamEvent: {
|
|
1298
|
-
addGeneralEventMessageListener: (
|
|
1299
|
-
removeGeneralEventMessageListener: (
|
|
1300
|
-
if (s(
|
|
1311
|
+
addGeneralEventMessageListener: (o, h) => (s(m.broadcastResources), typeof h != "function" ? !1 : (y.add({ selector: o, callback: h }), !0)),
|
|
1312
|
+
removeGeneralEventMessageListener: (o, h) => {
|
|
1313
|
+
if (s(m.broadcastResources), !o)
|
|
1301
1314
|
return y.clear(), !0;
|
|
1302
1315
|
for (const T of [...y])
|
|
1303
|
-
Jq(T.selector,
|
|
1316
|
+
Jq(T.selector, o) && (!h || h === T.callback) && y.delete(T);
|
|
1304
1317
|
return !0;
|
|
1305
1318
|
},
|
|
1306
|
-
addEventIDUpdateListener: (
|
|
1307
|
-
removeEventIDUpdateListener: (
|
|
1319
|
+
addEventIDUpdateListener: (o) => (s(m.broadcastResources), typeof o != "function" ? !1 : (E.add(o), !0)),
|
|
1320
|
+
removeEventIDUpdateListener: (o) => (s(m.broadcastResources), o ? E.delete(o) : E.clear(), !0)
|
|
1308
1321
|
}
|
|
1309
1322
|
}), P(A.navigator, "bmlCompat", {
|
|
1310
1323
|
browserPseudo: {
|
|
@@ -1315,48 +1328,48 @@ function Ae(A, q) {
|
|
|
1315
1328
|
// Older broadcaster applications use the synchronous BML API instead
|
|
1316
1329
|
// of receiverDevice.getDeviceIdentifier(). Keep both paths on the same
|
|
1317
1330
|
// stable demo ACAS identifier.
|
|
1318
|
-
getIRDID: (
|
|
1319
|
-
readPersistentArray: (
|
|
1320
|
-
s(
|
|
1321
|
-
const T = A.localStorage.getItem(`arib:nvram:${
|
|
1331
|
+
getIRDID: (o) => (s(m.deviceIdentifier), Pq(o)),
|
|
1332
|
+
readPersistentArray: (o, h) => {
|
|
1333
|
+
s(m.persistentStorage);
|
|
1334
|
+
const T = A.localStorage.getItem(`arib:nvram:${o}`);
|
|
1322
1335
|
if (T) {
|
|
1323
1336
|
const k = JSON.parse(T);
|
|
1324
1337
|
return h.split(",").map((w) => k[w] ?? null);
|
|
1325
1338
|
}
|
|
1326
|
-
return Iq(
|
|
1339
|
+
return Iq(o, h, p);
|
|
1327
1340
|
},
|
|
1328
|
-
writePersistentArray: (
|
|
1329
|
-
s(
|
|
1341
|
+
writePersistentArray: (o, h, T) => {
|
|
1342
|
+
s(m.persistentStorage);
|
|
1330
1343
|
const k = Object.fromEntries(
|
|
1331
1344
|
h.split(",").map((w, W) => [w, T[W]])
|
|
1332
1345
|
);
|
|
1333
|
-
return A.localStorage.setItem(`arib:nvram:${
|
|
1346
|
+
return A.localStorage.setItem(`arib:nvram:${o}`, JSON.stringify(k)), T.length;
|
|
1334
1347
|
}
|
|
1335
1348
|
}
|
|
1336
1349
|
}), V = new Xq({
|
|
1337
1350
|
target: A,
|
|
1338
1351
|
adapter: q.mediaPlaneAdapter,
|
|
1339
|
-
canUseBroadcastMedia: () =>
|
|
1340
|
-
|
|
1352
|
+
canUseBroadcastMedia: () => l.permits(
|
|
1353
|
+
m.broadcastMedia
|
|
1341
1354
|
),
|
|
1342
1355
|
installBroadcastObjectApi: M.installBroadcastObjectApi,
|
|
1343
|
-
postRuntime:
|
|
1356
|
+
postRuntime: n
|
|
1344
1357
|
});
|
|
1345
1358
|
const g = () => {
|
|
1346
|
-
|
|
1359
|
+
te(A), l.startDocument(), V.startDocument();
|
|
1347
1360
|
};
|
|
1348
|
-
|
|
1349
|
-
V.dispose("document-unload", () =>
|
|
1350
|
-
}), A.addEventListener("error", (
|
|
1351
|
-
|
|
1352
|
-
message:
|
|
1361
|
+
n("installed", { url: A.location.href }), A.document.readyState === "loading" ? A.document.addEventListener("DOMContentLoaded", g, { once: !0 }) : queueMicrotask(g), l.startNavigationCapture(), V.startObserving(), A.addEventListener("pagehide", () => {
|
|
1362
|
+
V.dispose("document-unload", () => f.dispose()), l.dispose(), e?.(), n("unloading", { url: A.location.href });
|
|
1363
|
+
}), A.addEventListener("error", (o) => {
|
|
1364
|
+
n("error", {
|
|
1365
|
+
message: o.message
|
|
1353
1366
|
});
|
|
1354
1367
|
});
|
|
1355
1368
|
}
|
|
1356
1369
|
function Z(A) {
|
|
1357
1370
|
A.inert = !0, A.style.setProperty("pointer-events", "none", "important"), A.tabIndex = -1;
|
|
1358
1371
|
}
|
|
1359
|
-
class
|
|
1372
|
+
class fe {
|
|
1360
1373
|
renderMode = "in-object";
|
|
1361
1374
|
media;
|
|
1362
1375
|
normalPlayerContainer;
|
|
@@ -1393,7 +1406,7 @@ class me {
|
|
|
1393
1406
|
})) : this.media.remove();
|
|
1394
1407
|
}
|
|
1395
1408
|
}
|
|
1396
|
-
class
|
|
1409
|
+
class re {
|
|
1397
1410
|
renderMode = "external";
|
|
1398
1411
|
surface;
|
|
1399
1412
|
keepVisible;
|
|
@@ -1435,35 +1448,35 @@ class ie {
|
|
|
1435
1448
|
});
|
|
1436
1449
|
}
|
|
1437
1450
|
}
|
|
1438
|
-
function
|
|
1451
|
+
function ne(A, q) {
|
|
1439
1452
|
const e = A.contentWindow;
|
|
1440
1453
|
if (!e || !Number.isInteger(q)) return !1;
|
|
1441
1454
|
try {
|
|
1442
1455
|
const t = e, i = e.document, r = i.activeElement ?? i.body ?? i.documentElement ?? i;
|
|
1443
|
-
for (const
|
|
1444
|
-
const
|
|
1456
|
+
for (const a of ["keydown", "keyup"]) {
|
|
1457
|
+
const n = new t.KeyboardEvent(a, {
|
|
1445
1458
|
bubbles: !0,
|
|
1446
1459
|
cancelable: !0,
|
|
1447
1460
|
view: e
|
|
1448
1461
|
});
|
|
1449
|
-
Object.defineProperties(
|
|
1462
|
+
Object.defineProperties(n, {
|
|
1450
1463
|
keyCode: { value: q },
|
|
1451
1464
|
which: { value: q }
|
|
1452
|
-
}), r.dispatchEvent(
|
|
1465
|
+
}), r.dispatchEvent(n);
|
|
1453
1466
|
}
|
|
1454
1467
|
return !0;
|
|
1455
1468
|
} catch {
|
|
1456
1469
|
return !1;
|
|
1457
1470
|
}
|
|
1458
1471
|
}
|
|
1459
|
-
function
|
|
1472
|
+
function oe(A) {
|
|
1460
1473
|
return {
|
|
1461
1474
|
...A,
|
|
1462
1475
|
program: A.program ? D(A.program) : void 0
|
|
1463
1476
|
};
|
|
1464
1477
|
}
|
|
1465
|
-
async function
|
|
1466
|
-
const t =
|
|
1478
|
+
async function ae(A, q, e) {
|
|
1479
|
+
const t = oe(A);
|
|
1467
1480
|
if (!q)
|
|
1468
1481
|
return e?.({ request: t, reason: "unsupported" }), !1;
|
|
1469
1482
|
try {
|
|
@@ -1472,7 +1485,7 @@ async function oe(A, q, e) {
|
|
|
1472
1485
|
return e?.({ request: t, reason: "error", error: i }), !1;
|
|
1473
1486
|
}
|
|
1474
1487
|
}
|
|
1475
|
-
class
|
|
1488
|
+
class se {
|
|
1476
1489
|
state = {
|
|
1477
1490
|
visible: !0,
|
|
1478
1491
|
inputActive: !1
|
|
@@ -1505,18 +1518,18 @@ class ae {
|
|
|
1505
1518
|
return this.delivered.has(e) ? null : (this.delivered.add(e), { ...q, requiresUserAction: !0 });
|
|
1506
1519
|
}
|
|
1507
1520
|
}
|
|
1508
|
-
function
|
|
1521
|
+
function Ve(A) {
|
|
1509
1522
|
const q = Number(A.width), e = Number(A.height);
|
|
1510
1523
|
return !Number.isSafeInteger(q) || q <= 0 || !Number.isSafeInteger(e) || e <= 0 ? null : { width: q, height: e };
|
|
1511
1524
|
}
|
|
1512
|
-
function
|
|
1525
|
+
function le(A) {
|
|
1513
1526
|
const q = String(A ?? "");
|
|
1514
1527
|
return q && q !== "rgba(0, 0, 0, 0)" && q !== "transparent" ? q : null;
|
|
1515
1528
|
}
|
|
1516
|
-
function
|
|
1529
|
+
function ce(A) {
|
|
1517
1530
|
return Array.isArray(A) ? [...new Set(A.map(Number).filter((q) => Number.isInteger(q) && q >= 0 && q <= 65535))] : [];
|
|
1518
1531
|
}
|
|
1519
|
-
function
|
|
1532
|
+
function de(A) {
|
|
1520
1533
|
const q = Number(A.organizationId), e = Number(A.applicationId), t = {
|
|
1521
1534
|
organizationId: q,
|
|
1522
1535
|
applicationId: e,
|
|
@@ -1534,7 +1547,7 @@ function K(A) {
|
|
|
1534
1547
|
externalPlacement: q.externalPlacement === "above-application" ? "above-application" : "behind-application"
|
|
1535
1548
|
};
|
|
1536
1549
|
}
|
|
1537
|
-
function
|
|
1550
|
+
function he(A, q) {
|
|
1538
1551
|
return A.visible ? {
|
|
1539
1552
|
slotId: String(A.slotId ?? ""),
|
|
1540
1553
|
visible: !0,
|
|
@@ -1559,16 +1572,16 @@ function de(A, q) {
|
|
|
1559
1572
|
layer: K(A.layer)
|
|
1560
1573
|
};
|
|
1561
1574
|
}
|
|
1562
|
-
function
|
|
1575
|
+
function ue(A) {
|
|
1563
1576
|
if (A === null) return null;
|
|
1564
1577
|
if (!Number.isInteger(A) || A < 0 || A > 16777215)
|
|
1565
1578
|
throw new RangeError("LCT backgroundColorRgb must be a 24-bit integer or null");
|
|
1566
1579
|
return `#${A.toString(16).padStart(6, "0")}`;
|
|
1567
1580
|
}
|
|
1568
|
-
function
|
|
1581
|
+
function ge(A, q) {
|
|
1569
1582
|
return A ?? q ?? "#000";
|
|
1570
1583
|
}
|
|
1571
|
-
class
|
|
1584
|
+
class pe {
|
|
1572
1585
|
iframe;
|
|
1573
1586
|
viewport;
|
|
1574
1587
|
resizeObserver;
|
|
@@ -1585,7 +1598,7 @@ class ge {
|
|
|
1585
1598
|
return { width: this.logicalWidth, height: this.logicalHeight };
|
|
1586
1599
|
}
|
|
1587
1600
|
setLctBackgroundColor(q) {
|
|
1588
|
-
this.lctBackgroundColor =
|
|
1601
|
+
this.lctBackgroundColor = ue(q), this.applyBackgroundColor();
|
|
1589
1602
|
}
|
|
1590
1603
|
setStageBackgroundColor(q) {
|
|
1591
1604
|
this.stageBackgroundColor = q, this.applyBackgroundColor();
|
|
@@ -1607,13 +1620,13 @@ class ge {
|
|
|
1607
1620
|
this.resizeObserver.disconnect();
|
|
1608
1621
|
}
|
|
1609
1622
|
applyBackgroundColor() {
|
|
1610
|
-
this.viewport.style.backgroundColor =
|
|
1623
|
+
this.viewport.style.backgroundColor = ge(
|
|
1611
1624
|
this.lctBackgroundColor,
|
|
1612
1625
|
this.stageBackgroundColor
|
|
1613
1626
|
);
|
|
1614
1627
|
}
|
|
1615
1628
|
}
|
|
1616
|
-
class
|
|
1629
|
+
class ye {
|
|
1617
1630
|
ownerWindow;
|
|
1618
1631
|
iframe;
|
|
1619
1632
|
origin;
|
|
@@ -1708,7 +1721,7 @@ class Te {
|
|
|
1708
1721
|
bmlGreg;
|
|
1709
1722
|
userAgent;
|
|
1710
1723
|
onViewerParticipation;
|
|
1711
|
-
viewerParticipation = new
|
|
1724
|
+
viewerParticipation = new se();
|
|
1712
1725
|
canvas;
|
|
1713
1726
|
runtimeSession;
|
|
1714
1727
|
captionComponentTags = [];
|
|
@@ -1722,7 +1735,7 @@ class Te {
|
|
|
1722
1735
|
constructor(q) {
|
|
1723
1736
|
if (this.iframe = q.iframe, this.viewport = q.viewport, this.videoSurface = q.videoSurface, Z(this.iframe), this.ownerWindow = this.iframe.ownerDocument.defaultView ?? window, this.origin = this.ownerWindow.location.origin, this.onStatus = q.onStatus, this.onLifecycle = q.onLifecycle, this.applicationLoadTimeoutMs = q.applicationLoadTimeoutMs ?? 5e3, !Number.isFinite(this.applicationLoadTimeoutMs) || this.applicationLoadTimeoutMs < 0)
|
|
1724
1737
|
throw new TypeError("applicationLoadTimeoutMs must be a finite non-negative number");
|
|
1725
|
-
this.onUrlChange = q.onUrlChange, this.onMediaPlane = q.onMediaPlane, this.onVideoPlane = q.onVideoPlane, this.mediaPlaneAdapter = q.mediaPlaneAdapter ?? (q.videoSurface ? new
|
|
1738
|
+
this.onUrlChange = q.onUrlChange, this.onMediaPlane = q.onMediaPlane, this.onVideoPlane = q.onVideoPlane, this.mediaPlaneAdapter = q.mediaPlaneAdapter ?? (q.videoSurface ? new re({
|
|
1726
1739
|
surface: q.videoSurface,
|
|
1727
1740
|
keepVisible: q.keepVideoVisible
|
|
1728
1741
|
}) : void 0);
|
|
@@ -1743,10 +1756,10 @@ class Te {
|
|
|
1743
1756
|
this.ownerWindow.location.href
|
|
1744
1757
|
), this.broadcastBaseUrl.origin !== this.origin)
|
|
1745
1758
|
throw new Error(`Broadcast base URL must be same-origin: ${this.broadcastBaseUrl.href}`);
|
|
1746
|
-
this.resourceStore = q.resourceStore, this.onOpenProgramGuide = q.onOpenProgramGuide, this.onCaptionSubscription = q.onCaptionSubscription, this.onReplaceApplication = q.onReplaceApplication, this.onExitManagedState = q.onExitManagedState, this.onLaunchDataBroadcastingBrowser = q.onLaunchDataBroadcastingBrowser, this.onProgramGuideUnavailable = q.onProgramGuideUnavailable, this.systemInformation = q.systemInformation, this.getDeviceIdentifier = q.getDeviceIdentifier, this.bmlGreg = [...q.bmlGreg ?? []], this.userAgent = q.userAgent, this.onViewerParticipation = q.onViewerParticipation, this.ownerWindow.addEventListener("message", this.handleRuntimeMessage), this.iframe.addEventListener("load", this.handleFrameLoad), this.canvas = new
|
|
1759
|
+
this.resourceStore = q.resourceStore, this.onOpenProgramGuide = q.onOpenProgramGuide, this.onCaptionSubscription = q.onCaptionSubscription, this.onReplaceApplication = q.onReplaceApplication, this.onExitManagedState = q.onExitManagedState, this.onLaunchDataBroadcastingBrowser = q.onLaunchDataBroadcastingBrowser, this.onProgramGuideUnavailable = q.onProgramGuideUnavailable, this.systemInformation = q.systemInformation, this.getDeviceIdentifier = q.getDeviceIdentifier, this.bmlGreg = [...q.bmlGreg ?? []], this.userAgent = q.userAgent, this.onViewerParticipation = q.onViewerParticipation, this.ownerWindow.addEventListener("message", this.handleRuntimeMessage), this.iframe.addEventListener("load", this.handleFrameLoad), this.canvas = new pe({
|
|
1747
1760
|
iframe: this.iframe,
|
|
1748
1761
|
viewport: this.viewport
|
|
1749
|
-
}), this.runtimeSession = new
|
|
1762
|
+
}), this.runtimeSession = new ye({
|
|
1750
1763
|
ownerWindow: this.ownerWindow,
|
|
1751
1764
|
iframe: this.iframe,
|
|
1752
1765
|
origin: this.origin,
|
|
@@ -1755,7 +1768,7 @@ class Te {
|
|
|
1755
1768
|
});
|
|
1756
1769
|
}
|
|
1757
1770
|
installRuntime(q) {
|
|
1758
|
-
this.mediaPlaneEnabled = !this.destroyed && !this.applicationExited,
|
|
1771
|
+
this.mediaPlaneEnabled = !this.destroyed && !this.applicationExited, Ae(q, {
|
|
1759
1772
|
allowExternalNetwork: this.allowExternalNetwork,
|
|
1760
1773
|
broadcastBaseUrl: this.broadcastBaseUrl.href,
|
|
1761
1774
|
resourceStore: this.resourceStore,
|
|
@@ -1810,7 +1823,7 @@ class Te {
|
|
|
1810
1823
|
this.assertAlive(), !this.applicationExited && (this.applicationExited = !0, this.viewerParticipation.setPresentation({ visible: !1, inputActive: !1 }), this.runtimeSession.clearPendingStreamEvents(), this.runtimeSession.clearWatchdog(), this.invalidateRuntime("application-exit"), this.iframe.style.display = "none", this.iframe.src = "about:blank", this.onUrlChange?.(""), this.onStatus?.(q), this.onLifecycle?.({ type: "exited" }));
|
|
1811
1824
|
}
|
|
1812
1825
|
dispatchKey(q) {
|
|
1813
|
-
return this.assertAlive(), this.viewerParticipation.presentation.inputActive ?
|
|
1826
|
+
return this.assertAlive(), this.viewerParticipation.presentation.inputActive ? ne(this.iframe, q) ? !0 : (this.onStatus?.("キー入力を送信できません"), !1) : !1;
|
|
1814
1827
|
}
|
|
1815
1828
|
/** Transfer or release receiver-key ownership for the broadcast application. */
|
|
1816
1829
|
setApplicationInputActive(q) {
|
|
@@ -1858,7 +1871,7 @@ class Te {
|
|
|
1858
1871
|
openProgramGuide(q = {
|
|
1859
1872
|
destination: "program-guide"
|
|
1860
1873
|
}) {
|
|
1861
|
-
return this.assertAlive(),
|
|
1874
|
+
return this.assertAlive(), ae(
|
|
1862
1875
|
q,
|
|
1863
1876
|
this.onOpenProgramGuide,
|
|
1864
1877
|
this.reportProgramGuideUnavailable
|
|
@@ -1971,12 +1984,12 @@ class Te {
|
|
|
1971
1984
|
return;
|
|
1972
1985
|
case "stage-style": {
|
|
1973
1986
|
this.canvas.setStageBackgroundColor(
|
|
1974
|
-
|
|
1987
|
+
le(e.backgroundColor)
|
|
1975
1988
|
);
|
|
1976
1989
|
return;
|
|
1977
1990
|
}
|
|
1978
1991
|
case "screen-size": {
|
|
1979
|
-
const t =
|
|
1992
|
+
const t = Ve(e);
|
|
1980
1993
|
t && this.canvas.applyScreenSize(t.width, t.height);
|
|
1981
1994
|
return;
|
|
1982
1995
|
}
|
|
@@ -1985,7 +1998,7 @@ class Te {
|
|
|
1985
1998
|
this.applyMediaPlane(e);
|
|
1986
1999
|
return;
|
|
1987
2000
|
case "caption-subscription": {
|
|
1988
|
-
const t =
|
|
2001
|
+
const t = ce(e.componentTags);
|
|
1989
2002
|
this.onCaptionSubscription?.({ componentTags: t });
|
|
1990
2003
|
return;
|
|
1991
2004
|
}
|
|
@@ -1996,7 +2009,7 @@ class Te {
|
|
|
1996
2009
|
});
|
|
1997
2010
|
return;
|
|
1998
2011
|
case "replace-application": {
|
|
1999
|
-
const t =
|
|
2012
|
+
const t = de(e);
|
|
2000
2013
|
if (!t) {
|
|
2001
2014
|
this.onStatus?.("不正なアプリケーション切替要求を拒否しました");
|
|
2002
2015
|
return;
|
|
@@ -2043,7 +2056,7 @@ class Te {
|
|
|
2043
2056
|
}
|
|
2044
2057
|
};
|
|
2045
2058
|
applyMediaPlane(q) {
|
|
2046
|
-
const e = this.canvas.logicalSize, t =
|
|
2059
|
+
const e = this.canvas.logicalSize, t = he(q, {
|
|
2047
2060
|
screenWidth: e.width,
|
|
2048
2061
|
screenHeight: e.height
|
|
2049
2062
|
});
|
|
@@ -2072,11 +2085,8 @@ class Te {
|
|
|
2072
2085
|
function U(A) {
|
|
2073
2086
|
return `/${(A || "/data-broadcast/").replace(/^\/+|\/+$/g, "")}/`;
|
|
2074
2087
|
}
|
|
2075
|
-
function
|
|
2076
|
-
return A
|
|
2077
|
-
/\s+type\s*=\s*(?:["']video\/x-arib2-broadcast["']|video\/x-arib2-broadcast)/i,
|
|
2078
|
-
' data-arib-type="video/x-arib2-broadcast"'
|
|
2079
|
-
).replace(/\s+data\s*=\s*(["'])(.*?)\1/i, " data-arib-data=$1$2$1") : q);
|
|
2088
|
+
function Be(A) {
|
|
2089
|
+
return A;
|
|
2080
2090
|
}
|
|
2081
2091
|
function G(A, q, e) {
|
|
2082
2092
|
if (A.startsWith(e)) return A;
|
|
@@ -2087,27 +2097,27 @@ function Ee(A, q, e) {
|
|
|
2087
2097
|
const t = U(q), i = U(e ?? q);
|
|
2088
2098
|
return A.replace(
|
|
2089
2099
|
/(\b(?:href|src|action|poster)\s*=\s*)(?:(['"])(\/[^/][^"']*)\2|(\/[^\s>]*))/gi,
|
|
2090
|
-
(r,
|
|
2091
|
-
const y =
|
|
2100
|
+
(r, a, n, l, s) => {
|
|
2101
|
+
const y = l ?? s;
|
|
2092
2102
|
if (!y || y.startsWith(t)) return r;
|
|
2093
2103
|
const E = G(y, t, i);
|
|
2094
|
-
return
|
|
2104
|
+
return n ? `${a}${n}${E}${n}` : `${a}${E}`;
|
|
2095
2105
|
}
|
|
2096
2106
|
);
|
|
2097
2107
|
}
|
|
2098
|
-
function
|
|
2108
|
+
function ve(A, q = {}) {
|
|
2099
2109
|
const e = U(q.basePath), t = U(q.scopePath ?? q.basePath);
|
|
2100
2110
|
return A.replace(
|
|
2101
2111
|
/url\(\s*(["']?)(\/[^/)][^)]*)\1\s*\)/gi,
|
|
2102
|
-
(i, r,
|
|
2112
|
+
(i, r, a) => a.startsWith(e) ? i : `url(${r}${G(a, e, t)}${r})`
|
|
2103
2113
|
).replace(
|
|
2104
2114
|
/(@import\s+)(["'])(\/[^/][^"']*)\2/gi,
|
|
2105
|
-
(i, r,
|
|
2115
|
+
(i, r, a, n) => n.startsWith(e) ? i : `${r}${a}${G(n, e, t)}${a}`
|
|
2106
2116
|
);
|
|
2107
2117
|
}
|
|
2108
|
-
function
|
|
2118
|
+
function Me(A, q = {}) {
|
|
2109
2119
|
const e = Ee(
|
|
2110
|
-
C(
|
|
2120
|
+
C(A),
|
|
2111
2121
|
q.basePath,
|
|
2112
2122
|
q.scopePath
|
|
2113
2123
|
);
|
|
@@ -2117,7 +2127,7 @@ function ve(A, q = {}) {
|
|
|
2117
2127
|
const i = t.index + t[0].length;
|
|
2118
2128
|
return `${e.slice(0, i)}${q.bootstrap}${e.slice(i)}`;
|
|
2119
2129
|
}
|
|
2120
|
-
function
|
|
2130
|
+
function me(A) {
|
|
2121
2131
|
const q = A.data instanceof Uint8Array ? A.data : new Uint8Array(A.data);
|
|
2122
2132
|
return {
|
|
2123
2133
|
path: String(A.path).replace(/^\/+/, ""),
|
|
@@ -2125,7 +2135,7 @@ function fe(A) {
|
|
|
2125
2135
|
data: q.slice()
|
|
2126
2136
|
};
|
|
2127
2137
|
}
|
|
2128
|
-
class
|
|
2138
|
+
class be {
|
|
2129
2139
|
backend;
|
|
2130
2140
|
onError;
|
|
2131
2141
|
scheduleTask;
|
|
@@ -2150,7 +2160,7 @@ class Me {
|
|
|
2150
2160
|
}
|
|
2151
2161
|
enqueue(q) {
|
|
2152
2162
|
if (this.disposed) throw new Error("Broadcast VFS session is disposed");
|
|
2153
|
-
const e =
|
|
2163
|
+
const e = me(q), t = ++this.nextRevision;
|
|
2154
2164
|
return this.mirror.set(e.path, e), this.queue.push({ revision: t, generation: this.generation, resource: e }), this.scheduleDrain(), t;
|
|
2155
2165
|
}
|
|
2156
2166
|
waitFor(q) {
|
|
@@ -2207,7 +2217,7 @@ class Me {
|
|
|
2207
2217
|
this.completedRevision >= e.revision ? e.resolve() : this.waiters.push(e);
|
|
2208
2218
|
}
|
|
2209
2219
|
}
|
|
2210
|
-
class
|
|
2220
|
+
class ke {
|
|
2211
2221
|
workerUrl;
|
|
2212
2222
|
scopeUrl;
|
|
2213
2223
|
uniqueBasenameFallback;
|
|
@@ -2287,13 +2297,13 @@ class be {
|
|
|
2287
2297
|
async performRequestWithRegistration(q, e, t = []) {
|
|
2288
2298
|
const i = q.active ?? q.waiting ?? q.installing;
|
|
2289
2299
|
if (!i) throw new Error("Broadcast VFS worker is unavailable");
|
|
2290
|
-
return new Promise((r,
|
|
2291
|
-
const
|
|
2292
|
-
|
|
2300
|
+
return new Promise((r, a) => {
|
|
2301
|
+
const n = new MessageChannel(), l = window.setTimeout(() => {
|
|
2302
|
+
n.port1.close(), a(new Error("Broadcast VFS worker did not respond"));
|
|
2293
2303
|
}, 5e3);
|
|
2294
|
-
|
|
2295
|
-
window.clearTimeout(
|
|
2296
|
-
}, i.postMessage(e, [
|
|
2304
|
+
n.port1.onmessage = (s) => {
|
|
2305
|
+
window.clearTimeout(l), n.port1.close(), s.data?.ok ? r(s.data) : a(new Error(s.data?.error || "Broadcast VFS worker error"));
|
|
2306
|
+
}, i.postMessage(e, [n.port2, ...t]);
|
|
2297
2307
|
});
|
|
2298
2308
|
}
|
|
2299
2309
|
waitForActivation(q) {
|
|
@@ -2308,36 +2318,36 @@ class be {
|
|
|
2308
2318
|
}
|
|
2309
2319
|
}
|
|
2310
2320
|
export {
|
|
2311
|
-
|
|
2312
|
-
|
|
2321
|
+
m as ARIB_PERMISSION_BITS,
|
|
2322
|
+
Nq as AribApplicationBoundaryPolicy,
|
|
2313
2323
|
Te as AribReceiverHost,
|
|
2314
|
-
|
|
2315
|
-
|
|
2324
|
+
re as BehindIframeMediaPlaneAdapter,
|
|
2325
|
+
be as BroadcastVfsSession,
|
|
2316
2326
|
Tq as DEFAULT_BROADCAST_BASE_PATH,
|
|
2317
2327
|
Y as DEFAULT_RECEIVER_DEVICE_IDENTIFIER,
|
|
2318
|
-
|
|
2328
|
+
fe as DomObjectMediaPlaneAdapter,
|
|
2319
2329
|
Fq as RECEIVER_IRD_ID_TYPE,
|
|
2320
2330
|
Rq as RECEIVER_SYSTEM_IDENTITY,
|
|
2321
|
-
|
|
2331
|
+
ke as ServiceWorkerBroadcastVfs,
|
|
2322
2332
|
D as cloneProgramInfo,
|
|
2323
2333
|
Sq as createReceiverSystemInformation,
|
|
2324
2334
|
C as deferRomSoundMarkup,
|
|
2325
2335
|
Bq as deriveBroadcastRootUrl,
|
|
2326
2336
|
Pq as getDefaultReceiverIrdId,
|
|
2327
|
-
|
|
2328
|
-
|
|
2337
|
+
mq as installAribSymbolFont,
|
|
2338
|
+
fq as installBroadcastClock,
|
|
2329
2339
|
uq as installRomSoundProtocol,
|
|
2330
|
-
|
|
2340
|
+
Ae as installRuntime,
|
|
2331
2341
|
z as normalizeBroadcastBaseUrl,
|
|
2332
|
-
|
|
2342
|
+
ue as normalizeLctBackgroundColor,
|
|
2333
2343
|
Ee as prefixBroadcastRootAttributes,
|
|
2334
|
-
|
|
2335
|
-
|
|
2344
|
+
Me as prepareBroadcastHtml,
|
|
2345
|
+
ve as prepareBroadcastStylesheet,
|
|
2336
2346
|
Iq as readReceiverInformationArray,
|
|
2337
2347
|
H as resolveBroadcastUrl,
|
|
2338
2348
|
Gq as resolveReceiverDeviceIdentifier,
|
|
2339
2349
|
R as resolveRomSoundUrl,
|
|
2340
|
-
|
|
2350
|
+
Be as rewriteBroadcastObjectMarkup,
|
|
2341
2351
|
Wq as runtimeEventMatchesSelector,
|
|
2342
2352
|
Qq as synchronizeReceiverCompatibilityStorage
|
|
2343
2353
|
};
|