@wral/hsot-data 0.1.7 → 0.1.8
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.
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const V = globalThis,
|
|
2
|
-
let
|
|
1
|
+
const V = globalThis, nt = V.ShadowRoot && (V.ShadyCSS === void 0 || V.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, lt = /* @__PURE__ */ Symbol(), wt = /* @__PURE__ */ new WeakMap();
|
|
2
|
+
let Ft = class {
|
|
3
3
|
constructor(t, e, s) {
|
|
4
|
-
if (this._$cssResult$ = !0, s !==
|
|
4
|
+
if (this._$cssResult$ = !0, s !== lt) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
|
|
5
5
|
this.cssText = t, this.t = e;
|
|
6
6
|
}
|
|
7
7
|
get styleSheet() {
|
|
8
8
|
let t = this.o;
|
|
9
9
|
const e = this.t;
|
|
10
|
-
if (
|
|
10
|
+
if (nt && t === void 0) {
|
|
11
11
|
const s = e !== void 0 && e.length === 1;
|
|
12
|
-
s && (t =
|
|
12
|
+
s && (t = wt.get(e)), t === void 0 && ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), s && wt.set(e, t));
|
|
13
13
|
}
|
|
14
14
|
return t;
|
|
15
15
|
}
|
|
@@ -17,53 +17,53 @@ let Nt = class {
|
|
|
17
17
|
return this.cssText;
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
-
const ee = (
|
|
21
|
-
const e =
|
|
20
|
+
const ee = (a) => new Ft(typeof a == "string" ? a : a + "", void 0, lt), b = (a, ...t) => {
|
|
21
|
+
const e = a.length === 1 ? a[0] : t.reduce((s, r, o) => s + ((i) => {
|
|
22
22
|
if (i._$cssResult$ === !0) return i.cssText;
|
|
23
23
|
if (typeof i == "number") return i;
|
|
24
24
|
throw Error("Value passed to 'css' function must be a 'css' function result: " + i + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
|
|
25
|
-
})(
|
|
26
|
-
return new
|
|
27
|
-
}, se = (
|
|
28
|
-
if (
|
|
25
|
+
})(r) + a[o + 1], a[0]);
|
|
26
|
+
return new Ft(e, a, lt);
|
|
27
|
+
}, se = (a, t) => {
|
|
28
|
+
if (nt) a.adoptedStyleSheets = t.map((e) => e instanceof CSSStyleSheet ? e : e.styleSheet);
|
|
29
29
|
else for (const e of t) {
|
|
30
|
-
const s = document.createElement("style"),
|
|
31
|
-
|
|
30
|
+
const s = document.createElement("style"), r = V.litNonce;
|
|
31
|
+
r !== void 0 && s.setAttribute("nonce", r), s.textContent = e.cssText, a.appendChild(s);
|
|
32
32
|
}
|
|
33
|
-
},
|
|
33
|
+
}, xt = nt ? (a) => a : (a) => a instanceof CSSStyleSheet ? ((t) => {
|
|
34
34
|
let e = "";
|
|
35
35
|
for (const s of t.cssRules) e += s.cssText;
|
|
36
36
|
return ee(e);
|
|
37
|
-
})(
|
|
38
|
-
const { is:
|
|
37
|
+
})(a) : a;
|
|
38
|
+
const { is: ae, defineProperty: re, getOwnPropertyDescriptor: oe, getOwnPropertyNames: ie, getOwnPropertySymbols: ne, getPrototypeOf: le } = Object, X = globalThis, kt = X.trustedTypes, ce = kt ? kt.emptyScript : "", he = X.reactiveElementPolyfillSupport, B = (a, t) => a, it = { toAttribute(a, t) {
|
|
39
39
|
switch (t) {
|
|
40
40
|
case Boolean:
|
|
41
|
-
|
|
41
|
+
a = a ? ce : null;
|
|
42
42
|
break;
|
|
43
43
|
case Object:
|
|
44
44
|
case Array:
|
|
45
|
-
|
|
45
|
+
a = a == null ? a : JSON.stringify(a);
|
|
46
46
|
}
|
|
47
|
-
return
|
|
48
|
-
}, fromAttribute(
|
|
49
|
-
let e =
|
|
47
|
+
return a;
|
|
48
|
+
}, fromAttribute(a, t) {
|
|
49
|
+
let e = a;
|
|
50
50
|
switch (t) {
|
|
51
51
|
case Boolean:
|
|
52
|
-
e =
|
|
52
|
+
e = a !== null;
|
|
53
53
|
break;
|
|
54
54
|
case Number:
|
|
55
|
-
e =
|
|
55
|
+
e = a === null ? null : Number(a);
|
|
56
56
|
break;
|
|
57
57
|
case Object:
|
|
58
58
|
case Array:
|
|
59
59
|
try {
|
|
60
|
-
e = JSON.parse(
|
|
60
|
+
e = JSON.parse(a);
|
|
61
61
|
} catch {
|
|
62
62
|
e = null;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
return e;
|
|
66
|
-
} },
|
|
66
|
+
} }, Nt = (a, t) => !ae(a, t), _t = { attribute: !0, type: String, converter: it, reflect: !1, useDefault: !1, hasChanged: Nt };
|
|
67
67
|
Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), X.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
|
|
68
68
|
let I = class extends HTMLElement {
|
|
69
69
|
static addInitializer(t) {
|
|
@@ -72,25 +72,25 @@ let I = class extends HTMLElement {
|
|
|
72
72
|
static get observedAttributes() {
|
|
73
73
|
return this.finalize(), this._$Eh && [...this._$Eh.keys()];
|
|
74
74
|
}
|
|
75
|
-
static createProperty(t, e =
|
|
75
|
+
static createProperty(t, e = _t) {
|
|
76
76
|
if (e.state && (e.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(t) && ((e = Object.create(e)).wrapped = !0), this.elementProperties.set(t, e), !e.noAccessor) {
|
|
77
|
-
const s = /* @__PURE__ */ Symbol(),
|
|
78
|
-
|
|
77
|
+
const s = /* @__PURE__ */ Symbol(), r = this.getPropertyDescriptor(t, s, e);
|
|
78
|
+
r !== void 0 && re(this.prototype, t, r);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
static getPropertyDescriptor(t, e, s) {
|
|
82
|
-
const { get:
|
|
82
|
+
const { get: r, set: o } = oe(this.prototype, t) ?? { get() {
|
|
83
83
|
return this[e];
|
|
84
84
|
}, set(i) {
|
|
85
85
|
this[e] = i;
|
|
86
86
|
} };
|
|
87
|
-
return { get:
|
|
88
|
-
const n =
|
|
87
|
+
return { get: r, set(i) {
|
|
88
|
+
const n = r?.call(this);
|
|
89
89
|
o?.call(this, i), this.requestUpdate(t, n, s);
|
|
90
90
|
}, configurable: !0, enumerable: !0 };
|
|
91
91
|
}
|
|
92
92
|
static getPropertyOptions(t) {
|
|
93
|
-
return this.elementProperties.get(t) ??
|
|
93
|
+
return this.elementProperties.get(t) ?? _t;
|
|
94
94
|
}
|
|
95
95
|
static _$Ei() {
|
|
96
96
|
if (this.hasOwnProperty(B("elementProperties"))) return;
|
|
@@ -101,17 +101,17 @@ let I = class extends HTMLElement {
|
|
|
101
101
|
if (this.hasOwnProperty(B("finalized"))) return;
|
|
102
102
|
if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(B("properties"))) {
|
|
103
103
|
const e = this.properties, s = [...ie(e), ...ne(e)];
|
|
104
|
-
for (const
|
|
104
|
+
for (const r of s) this.createProperty(r, e[r]);
|
|
105
105
|
}
|
|
106
106
|
const t = this[Symbol.metadata];
|
|
107
107
|
if (t !== null) {
|
|
108
108
|
const e = litPropertyMetadata.get(t);
|
|
109
|
-
if (e !== void 0) for (const [s,
|
|
109
|
+
if (e !== void 0) for (const [s, r] of e) this.elementProperties.set(s, r);
|
|
110
110
|
}
|
|
111
111
|
this._$Eh = /* @__PURE__ */ new Map();
|
|
112
112
|
for (const [e, s] of this.elementProperties) {
|
|
113
|
-
const
|
|
114
|
-
|
|
113
|
+
const r = this._$Eu(e, s);
|
|
114
|
+
r !== void 0 && this._$Eh.set(r, e);
|
|
115
115
|
}
|
|
116
116
|
this.elementStyles = this.finalizeStyles(this.styles);
|
|
117
117
|
}
|
|
@@ -119,8 +119,8 @@ let I = class extends HTMLElement {
|
|
|
119
119
|
const e = [];
|
|
120
120
|
if (Array.isArray(t)) {
|
|
121
121
|
const s = new Set(t.flat(1 / 0).reverse());
|
|
122
|
-
for (const
|
|
123
|
-
} else t !== void 0 && e.push(
|
|
122
|
+
for (const r of s) e.unshift(xt(r));
|
|
123
|
+
} else t !== void 0 && e.push(xt(t));
|
|
124
124
|
return e;
|
|
125
125
|
}
|
|
126
126
|
static _$Eu(t, e) {
|
|
@@ -160,31 +160,31 @@ let I = class extends HTMLElement {
|
|
|
160
160
|
this._$AK(t, s);
|
|
161
161
|
}
|
|
162
162
|
_$ET(t, e) {
|
|
163
|
-
const s = this.constructor.elementProperties.get(t),
|
|
164
|
-
if (
|
|
163
|
+
const s = this.constructor.elementProperties.get(t), r = this.constructor._$Eu(t, s);
|
|
164
|
+
if (r !== void 0 && s.reflect === !0) {
|
|
165
165
|
const o = (s.converter?.toAttribute !== void 0 ? s.converter : it).toAttribute(e, s.type);
|
|
166
|
-
this._$Em = t, o == null ? this.removeAttribute(
|
|
166
|
+
this._$Em = t, o == null ? this.removeAttribute(r) : this.setAttribute(r, o), this._$Em = null;
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
_$AK(t, e) {
|
|
170
|
-
const s = this.constructor,
|
|
171
|
-
if (
|
|
172
|
-
const o = s.getPropertyOptions(
|
|
173
|
-
this._$Em =
|
|
170
|
+
const s = this.constructor, r = s._$Eh.get(t);
|
|
171
|
+
if (r !== void 0 && this._$Em !== r) {
|
|
172
|
+
const o = s.getPropertyOptions(r), i = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : it;
|
|
173
|
+
this._$Em = r;
|
|
174
174
|
const n = i.fromAttribute(e, o.type);
|
|
175
|
-
this[
|
|
175
|
+
this[r] = n ?? this._$Ej?.get(r) ?? n, this._$Em = null;
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
|
-
requestUpdate(t, e, s,
|
|
178
|
+
requestUpdate(t, e, s, r = !1, o) {
|
|
179
179
|
if (t !== void 0) {
|
|
180
180
|
const i = this.constructor;
|
|
181
|
-
if (
|
|
181
|
+
if (r === !1 && (o = this[t]), s ??= i.getPropertyOptions(t), !((s.hasChanged ?? Nt)(o, e) || s.useDefault && s.reflect && o === this._$Ej?.get(t) && !this.hasAttribute(i._$Eu(t, s)))) return;
|
|
182
182
|
this.C(t, e, s);
|
|
183
183
|
}
|
|
184
184
|
this.isUpdatePending === !1 && (this._$ES = this._$EP());
|
|
185
185
|
}
|
|
186
|
-
C(t, e, { useDefault: s, reflect:
|
|
187
|
-
s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, i ?? e ?? this[t]), o !== !0 || i !== void 0) || (this._$AL.has(t) || (this.hasUpdated || s || (e = void 0), this._$AL.set(t, e)),
|
|
186
|
+
C(t, e, { useDefault: s, reflect: r, wrapped: o }, i) {
|
|
187
|
+
s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, i ?? e ?? this[t]), o !== !0 || i !== void 0) || (this._$AL.has(t) || (this.hasUpdated || s || (e = void 0), this._$AL.set(t, e)), r === !0 && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t));
|
|
188
188
|
}
|
|
189
189
|
async _$EP() {
|
|
190
190
|
this.isUpdatePending = !0;
|
|
@@ -203,13 +203,13 @@ let I = class extends HTMLElement {
|
|
|
203
203
|
if (!this.isUpdatePending) return;
|
|
204
204
|
if (!this.hasUpdated) {
|
|
205
205
|
if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {
|
|
206
|
-
for (const [
|
|
206
|
+
for (const [r, o] of this._$Ep) this[r] = o;
|
|
207
207
|
this._$Ep = void 0;
|
|
208
208
|
}
|
|
209
209
|
const s = this.constructor.elementProperties;
|
|
210
|
-
if (s.size > 0) for (const [
|
|
211
|
-
const { wrapped: i } = o, n = this[
|
|
212
|
-
i !== !0 || this._$AL.has(
|
|
210
|
+
if (s.size > 0) for (const [r, o] of s) {
|
|
211
|
+
const { wrapped: i } = o, n = this[r];
|
|
212
|
+
i !== !0 || this._$AL.has(r) || n === void 0 || this.C(r, void 0, o, n);
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
let t = !1;
|
|
@@ -247,28 +247,28 @@ let I = class extends HTMLElement {
|
|
|
247
247
|
}
|
|
248
248
|
};
|
|
249
249
|
I.elementStyles = [], I.shadowRootOptions = { mode: "open" }, I[B("elementProperties")] = /* @__PURE__ */ new Map(), I[B("finalized")] = /* @__PURE__ */ new Map(), he?.({ ReactiveElement: I }), (X.reactiveElementVersions ??= []).push("2.1.2");
|
|
250
|
-
const
|
|
251
|
-
\f\r]`,
|
|
252
|
-
\f\r"'\`<>=]|("|')|))|$)`, "g"),
|
|
253
|
-
function
|
|
254
|
-
if (!
|
|
255
|
-
return
|
|
250
|
+
const ct = globalThis, St = (a) => a, Y = ct.trustedTypes, At = Y ? Y.createPolicy("lit-html", { createHTML: (a) => a }) : void 0, Ot = "$lit$", k = `lit$${Math.random().toFixed(9).slice(2)}$`, Ut = "?" + k, de = `<${Ut}>`, T = document, F = () => T.createComment(""), N = (a) => a === null || typeof a != "object" && typeof a != "function", ht = Array.isArray, pe = (a) => ht(a) || typeof a?.[Symbol.iterator] == "function", rt = `[
|
|
251
|
+
\f\r]`, R = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Tt = /-->/g, It = />/g, S = RegExp(`>|${rt}(?:([^\\s"'>=/]+)(${rt}*=${rt}*(?:[^
|
|
252
|
+
\f\r"'\`<>=]|("|')|))|$)`, "g"), Et = /'/g, Ct = /"/g, Ht = /^(?:script|style|textarea|title)$/i, Mt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }), l = Mt(1), Pt = Mt(2), P = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Dt = /* @__PURE__ */ new WeakMap(), A = T.createTreeWalker(T, 129);
|
|
253
|
+
function Lt(a, t) {
|
|
254
|
+
if (!ht(a) || !a.hasOwnProperty("raw")) throw Error("invalid template strings array");
|
|
255
|
+
return At !== void 0 ? At.createHTML(t) : t;
|
|
256
256
|
}
|
|
257
|
-
const me = (
|
|
258
|
-
const e =
|
|
259
|
-
let
|
|
257
|
+
const me = (a, t) => {
|
|
258
|
+
const e = a.length - 1, s = [];
|
|
259
|
+
let r, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", i = R;
|
|
260
260
|
for (let n = 0; n < e; n++) {
|
|
261
|
-
const d =
|
|
261
|
+
const d = a[n];
|
|
262
262
|
let c, h, p = -1, f = 0;
|
|
263
|
-
for (; f < d.length && (i.lastIndex = f, h = i.exec(d), h !== null); ) f = i.lastIndex, i ===
|
|
264
|
-
const u = i === S &&
|
|
265
|
-
o += i ===
|
|
263
|
+
for (; f < d.length && (i.lastIndex = f, h = i.exec(d), h !== null); ) f = i.lastIndex, i === R ? h[1] === "!--" ? i = Tt : h[1] !== void 0 ? i = It : h[2] !== void 0 ? (Ht.test(h[2]) && (r = RegExp("</" + h[2], "g")), i = S) : h[3] !== void 0 && (i = S) : i === S ? h[0] === ">" ? (i = r ?? R, p = -1) : h[1] === void 0 ? p = -2 : (p = i.lastIndex - h[2].length, c = h[1], i = h[3] === void 0 ? S : h[3] === '"' ? Ct : Et) : i === Ct || i === Et ? i = S : i === Tt || i === It ? i = R : (i = S, r = void 0);
|
|
264
|
+
const u = i === S && a[n + 1].startsWith("/>") ? " " : "";
|
|
265
|
+
o += i === R ? d + de : p >= 0 ? (s.push(c), d.slice(0, p) + Ot + d.slice(p) + k + u) : d + k + (p === -2 ? n : u);
|
|
266
266
|
}
|
|
267
|
-
return [
|
|
267
|
+
return [Lt(a, o + (a[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
|
|
268
268
|
};
|
|
269
269
|
class O {
|
|
270
270
|
constructor({ strings: t, _$litType$: e }, s) {
|
|
271
|
-
let
|
|
271
|
+
let r;
|
|
272
272
|
this.parts = [];
|
|
273
273
|
let o = 0, i = 0;
|
|
274
274
|
const n = t.length - 1, d = this.parts, [c, h] = me(t, e);
|
|
@@ -276,24 +276,24 @@ class O {
|
|
|
276
276
|
const p = this.el.content.firstChild;
|
|
277
277
|
p.replaceWith(...p.childNodes);
|
|
278
278
|
}
|
|
279
|
-
for (; (
|
|
280
|
-
if (
|
|
281
|
-
if (
|
|
282
|
-
const f = h[i++], u =
|
|
283
|
-
d.push({ type: 1, index: o, name: $[2], strings: u, ctor: $[1] === "." ? ue : $[1] === "?" ? ge : $[1] === "@" ? ve : tt }),
|
|
284
|
-
} else p.startsWith(k) && (d.push({ type: 6, index: o }),
|
|
285
|
-
if (
|
|
286
|
-
const p =
|
|
279
|
+
for (; (r = A.nextNode()) !== null && d.length < n; ) {
|
|
280
|
+
if (r.nodeType === 1) {
|
|
281
|
+
if (r.hasAttributes()) for (const p of r.getAttributeNames()) if (p.endsWith(Ot)) {
|
|
282
|
+
const f = h[i++], u = r.getAttribute(p).split(k), $ = /([.?@])?(.*)/.exec(f);
|
|
283
|
+
d.push({ type: 1, index: o, name: $[2], strings: u, ctor: $[1] === "." ? ue : $[1] === "?" ? ge : $[1] === "@" ? ve : tt }), r.removeAttribute(p);
|
|
284
|
+
} else p.startsWith(k) && (d.push({ type: 6, index: o }), r.removeAttribute(p));
|
|
285
|
+
if (Ht.test(r.tagName)) {
|
|
286
|
+
const p = r.textContent.split(k), f = p.length - 1;
|
|
287
287
|
if (f > 0) {
|
|
288
|
-
|
|
289
|
-
for (let u = 0; u < f; u++)
|
|
290
|
-
|
|
288
|
+
r.textContent = Y ? Y.emptyScript : "";
|
|
289
|
+
for (let u = 0; u < f; u++) r.append(p[u], F()), A.nextNode(), d.push({ type: 2, index: ++o });
|
|
290
|
+
r.append(p[f], F());
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
|
-
} else if (
|
|
293
|
+
} else if (r.nodeType === 8) if (r.data === Ut) d.push({ type: 2, index: o });
|
|
294
294
|
else {
|
|
295
295
|
let p = -1;
|
|
296
|
-
for (; (p =
|
|
296
|
+
for (; (p = r.data.indexOf(k, p + 1)) !== -1; ) d.push({ type: 7, index: o }), p += k.length - 1;
|
|
297
297
|
}
|
|
298
298
|
o++;
|
|
299
299
|
}
|
|
@@ -303,11 +303,11 @@ class O {
|
|
|
303
303
|
return s.innerHTML = t, s;
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
|
-
function
|
|
307
|
-
if (t ===
|
|
308
|
-
let
|
|
306
|
+
function D(a, t, e = a, s) {
|
|
307
|
+
if (t === P) return t;
|
|
308
|
+
let r = s !== void 0 ? e._$Co?.[s] : e._$Cl;
|
|
309
309
|
const o = N(t) ? void 0 : t._$litDirective$;
|
|
310
|
-
return
|
|
310
|
+
return r?.constructor !== o && (r?._$AO?.(!1), o === void 0 ? r = void 0 : (r = new o(a), r._$AT(a, e, s)), s !== void 0 ? (e._$Co ??= [])[s] = r : e._$Cl = r), r !== void 0 && (t = D(a, r._$AS(a, t.values), r, s)), t;
|
|
311
311
|
}
|
|
312
312
|
class fe {
|
|
313
313
|
constructor(t, e) {
|
|
@@ -320,8 +320,8 @@ class fe {
|
|
|
320
320
|
return this._$AM._$AU;
|
|
321
321
|
}
|
|
322
322
|
u(t) {
|
|
323
|
-
const { el: { content: e }, parts: s } = this._$AD,
|
|
324
|
-
A.currentNode =
|
|
323
|
+
const { el: { content: e }, parts: s } = this._$AD, r = (t?.creationScope ?? T).importNode(e, !0);
|
|
324
|
+
A.currentNode = r;
|
|
325
325
|
let o = A.nextNode(), i = 0, n = 0, d = s[0];
|
|
326
326
|
for (; d !== void 0; ) {
|
|
327
327
|
if (i === d.index) {
|
|
@@ -330,7 +330,7 @@ class fe {
|
|
|
330
330
|
}
|
|
331
331
|
i !== d?.index && (o = A.nextNode(), i++);
|
|
332
332
|
}
|
|
333
|
-
return A.currentNode = T,
|
|
333
|
+
return A.currentNode = T, r;
|
|
334
334
|
}
|
|
335
335
|
p(t) {
|
|
336
336
|
let e = 0;
|
|
@@ -341,8 +341,8 @@ class M {
|
|
|
341
341
|
get _$AU() {
|
|
342
342
|
return this._$AM?._$AU ?? this._$Cv;
|
|
343
343
|
}
|
|
344
|
-
constructor(t, e, s,
|
|
345
|
-
this.type = 2, this._$AH = m, this._$AN = void 0, this._$AA = t, this._$AB = e, this._$AM = s, this.options =
|
|
344
|
+
constructor(t, e, s, r) {
|
|
345
|
+
this.type = 2, this._$AH = m, this._$AN = void 0, this._$AA = t, this._$AB = e, this._$AM = s, this.options = r, this._$Cv = r?.isConnected ?? !0;
|
|
346
346
|
}
|
|
347
347
|
get parentNode() {
|
|
348
348
|
let t = this._$AA.parentNode;
|
|
@@ -356,7 +356,7 @@ class M {
|
|
|
356
356
|
return this._$AB;
|
|
357
357
|
}
|
|
358
358
|
_$AI(t, e = this) {
|
|
359
|
-
t =
|
|
359
|
+
t = D(this, t, e), N(t) ? t === m || t == null || t === "" ? (this._$AH !== m && this._$AR(), this._$AH = m) : t !== this._$AH && t !== P && this._(t) : t._$litType$ !== void 0 ? this.$(t) : t.nodeType !== void 0 ? this.T(t) : pe(t) ? this.k(t) : this._(t);
|
|
360
360
|
}
|
|
361
361
|
O(t) {
|
|
362
362
|
return this._$AA.parentNode.insertBefore(t, this._$AB);
|
|
@@ -368,28 +368,28 @@ class M {
|
|
|
368
368
|
this._$AH !== m && N(this._$AH) ? this._$AA.nextSibling.data = t : this.T(T.createTextNode(t)), this._$AH = t;
|
|
369
369
|
}
|
|
370
370
|
$(t) {
|
|
371
|
-
const { values: e, _$litType$: s } = t,
|
|
372
|
-
if (this._$AH?._$AD ===
|
|
371
|
+
const { values: e, _$litType$: s } = t, r = typeof s == "number" ? this._$AC(t) : (s.el === void 0 && (s.el = O.createElement(Lt(s.h, s.h[0]), this.options)), s);
|
|
372
|
+
if (this._$AH?._$AD === r) this._$AH.p(e);
|
|
373
373
|
else {
|
|
374
|
-
const o = new fe(
|
|
374
|
+
const o = new fe(r, this), i = o.u(this.options);
|
|
375
375
|
o.p(e), this.T(i), this._$AH = o;
|
|
376
376
|
}
|
|
377
377
|
}
|
|
378
378
|
_$AC(t) {
|
|
379
|
-
let e =
|
|
380
|
-
return e === void 0 &&
|
|
379
|
+
let e = Dt.get(t.strings);
|
|
380
|
+
return e === void 0 && Dt.set(t.strings, e = new O(t)), e;
|
|
381
381
|
}
|
|
382
382
|
k(t) {
|
|
383
|
-
|
|
383
|
+
ht(this._$AH) || (this._$AH = [], this._$AR());
|
|
384
384
|
const e = this._$AH;
|
|
385
|
-
let s,
|
|
386
|
-
for (const o of t)
|
|
387
|
-
|
|
385
|
+
let s, r = 0;
|
|
386
|
+
for (const o of t) r === e.length ? e.push(s = new M(this.O(F()), this.O(F()), this, this.options)) : s = e[r], s._$AI(o), r++;
|
|
387
|
+
r < e.length && (this._$AR(s && s._$AB.nextSibling, r), e.length = r);
|
|
388
388
|
}
|
|
389
389
|
_$AR(t = this._$AA.nextSibling, e) {
|
|
390
390
|
for (this._$AP?.(!1, !0, e); t !== this._$AB; ) {
|
|
391
|
-
const s =
|
|
392
|
-
|
|
391
|
+
const s = St(t).nextSibling;
|
|
392
|
+
St(t).remove(), t = s;
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
395
|
setConnected(t) {
|
|
@@ -403,19 +403,19 @@ class tt {
|
|
|
403
403
|
get _$AU() {
|
|
404
404
|
return this._$AM._$AU;
|
|
405
405
|
}
|
|
406
|
-
constructor(t, e, s,
|
|
407
|
-
this.type = 1, this._$AH = m, this._$AN = void 0, this.element = t, this.name = e, this._$AM =
|
|
406
|
+
constructor(t, e, s, r, o) {
|
|
407
|
+
this.type = 1, this._$AH = m, this._$AN = void 0, this.element = t, this.name = e, this._$AM = r, this.options = o, s.length > 2 || s[0] !== "" || s[1] !== "" ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = m;
|
|
408
408
|
}
|
|
409
|
-
_$AI(t, e = this, s,
|
|
409
|
+
_$AI(t, e = this, s, r) {
|
|
410
410
|
const o = this.strings;
|
|
411
411
|
let i = !1;
|
|
412
|
-
if (o === void 0) t =
|
|
412
|
+
if (o === void 0) t = D(this, t, e, 0), i = !N(t) || t !== this._$AH && t !== P, i && (this._$AH = t);
|
|
413
413
|
else {
|
|
414
414
|
const n = t;
|
|
415
415
|
let d, c;
|
|
416
|
-
for (t = o[0], d = 0; d < o.length - 1; d++) c =
|
|
416
|
+
for (t = o[0], d = 0; d < o.length - 1; d++) c = D(this, n[s + d], e, d), c === P && (c = this._$AH[d]), i ||= !N(c) || c !== this._$AH[d], c === m ? t = m : t !== m && (t += (c ?? "") + o[d + 1]), this._$AH[d] = c;
|
|
417
417
|
}
|
|
418
|
-
i && !
|
|
418
|
+
i && !r && this.j(t);
|
|
419
419
|
}
|
|
420
420
|
j(t) {
|
|
421
421
|
t === m ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? "");
|
|
@@ -438,13 +438,13 @@ class ge extends tt {
|
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
440
|
class ve extends tt {
|
|
441
|
-
constructor(t, e, s,
|
|
442
|
-
super(t, e, s,
|
|
441
|
+
constructor(t, e, s, r, o) {
|
|
442
|
+
super(t, e, s, r, o), this.type = 5;
|
|
443
443
|
}
|
|
444
444
|
_$AI(t, e = this) {
|
|
445
|
-
if ((t =
|
|
446
|
-
const s = this._$AH,
|
|
447
|
-
|
|
445
|
+
if ((t = D(this, t, e, 0) ?? m) === P) return;
|
|
446
|
+
const s = this._$AH, r = t === m && s !== m || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive, o = t !== m && (s === m || r);
|
|
447
|
+
r && this.element.removeEventListener(this.name, this, s), o && this.element.addEventListener(this.name, this, t), this._$AH = t;
|
|
448
448
|
}
|
|
449
449
|
handleEvent(t) {
|
|
450
450
|
typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t);
|
|
@@ -458,22 +458,22 @@ class $e {
|
|
|
458
458
|
return this._$AM._$AU;
|
|
459
459
|
}
|
|
460
460
|
_$AI(t) {
|
|
461
|
-
|
|
461
|
+
D(this, t);
|
|
462
462
|
}
|
|
463
463
|
}
|
|
464
|
-
const be =
|
|
465
|
-
be?.(O, M), (
|
|
466
|
-
const ye = (
|
|
464
|
+
const be = ct.litHtmlPolyfillSupport;
|
|
465
|
+
be?.(O, M), (ct.litHtmlVersions ??= []).push("3.3.3");
|
|
466
|
+
const ye = (a, t, e) => {
|
|
467
467
|
const s = e?.renderBefore ?? t;
|
|
468
|
-
let
|
|
469
|
-
if (
|
|
468
|
+
let r = s._$litPart$;
|
|
469
|
+
if (r === void 0) {
|
|
470
470
|
const o = e?.renderBefore ?? null;
|
|
471
|
-
s._$litPart$ =
|
|
471
|
+
s._$litPart$ = r = new M(t.insertBefore(F(), o), o, void 0, e ?? {});
|
|
472
472
|
}
|
|
473
|
-
return
|
|
473
|
+
return r._$AI(a), r;
|
|
474
474
|
};
|
|
475
|
-
const
|
|
476
|
-
class
|
|
475
|
+
const dt = globalThis;
|
|
476
|
+
class C extends I {
|
|
477
477
|
constructor() {
|
|
478
478
|
super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
|
|
479
479
|
}
|
|
@@ -492,27 +492,27 @@ class E extends I {
|
|
|
492
492
|
super.disconnectedCallback(), this._$Do?.setConnected(!1);
|
|
493
493
|
}
|
|
494
494
|
render() {
|
|
495
|
-
return
|
|
495
|
+
return P;
|
|
496
496
|
}
|
|
497
497
|
}
|
|
498
|
-
|
|
499
|
-
const we =
|
|
500
|
-
we?.({ LitElement:
|
|
501
|
-
(
|
|
498
|
+
C._$litElement$ = !0, C.finalized = !0, dt.litElementHydrateSupport?.({ LitElement: C });
|
|
499
|
+
const we = dt.litElementPolyfillSupport;
|
|
500
|
+
we?.({ LitElement: C });
|
|
501
|
+
(dt.litElementVersions ??= []).push("4.2.2");
|
|
502
502
|
const xe = 50;
|
|
503
|
-
function ke(
|
|
504
|
-
const t = Object.entries(
|
|
503
|
+
function ke(a = {}) {
|
|
504
|
+
const t = Object.entries(a).filter(([, s]) => s != null && s !== "");
|
|
505
505
|
if (!t.length) return "";
|
|
506
506
|
const e = new URLSearchParams();
|
|
507
|
-
return t.forEach(([s,
|
|
507
|
+
return t.forEach(([s, r]) => e.set(s, String(r))), `?${e.toString()}`;
|
|
508
508
|
}
|
|
509
|
-
function _e({ baseUrl:
|
|
510
|
-
if (!
|
|
511
|
-
const s =
|
|
509
|
+
function _e({ baseUrl: a, token: t = "", fetchFn: e } = {}) {
|
|
510
|
+
if (!a) throw new Error("createClient requires a baseUrl");
|
|
511
|
+
const s = a.replace(/\/+$/, ""), r = e || ((...n) => fetch(...n));
|
|
512
512
|
async function o(n) {
|
|
513
513
|
const d = { Accept: "application/json" };
|
|
514
514
|
t && (d.Authorization = `Bearer ${t}`);
|
|
515
|
-
const c = await
|
|
515
|
+
const c = await r(`${s}${n}`, { headers: d });
|
|
516
516
|
if (!c.ok) {
|
|
517
517
|
const h = new Error(`api-hsot ${c.status} on ${n}`);
|
|
518
518
|
throw h.status = c.status, h;
|
|
@@ -549,112 +549,112 @@ const ot = {
|
|
|
549
549
|
school: "/school/{id}/",
|
|
550
550
|
section: "/{sport}/{view}/"
|
|
551
551
|
};
|
|
552
|
-
function g(
|
|
553
|
-
return String(
|
|
552
|
+
function g(a, t) {
|
|
553
|
+
return String(a).replace(/\{(\w+)\}/g, (e, s) => t[s] !== void 0 && t[s] !== null ? String(t[s]) : e);
|
|
554
554
|
}
|
|
555
|
-
function L(
|
|
555
|
+
function L(a) {
|
|
556
556
|
return {
|
|
557
|
-
game:
|
|
558
|
-
school:
|
|
559
|
-
section:
|
|
557
|
+
game: a.getAttribute("game-href") || ot.game,
|
|
558
|
+
school: a.getAttribute("school-href") || ot.school,
|
|
559
|
+
section: a.getAttribute("section-href") || ot.section
|
|
560
560
|
};
|
|
561
561
|
}
|
|
562
|
-
const
|
|
563
|
-
function y(
|
|
564
|
-
if (!
|
|
565
|
-
const [e, s,
|
|
566
|
-
return !e || !s || !
|
|
562
|
+
const z = (a) => a ? a.charAt(0).toUpperCase() + a.slice(1) : "";
|
|
563
|
+
function y(a, t) {
|
|
564
|
+
if (!a) return "TBD";
|
|
565
|
+
const [e, s, r] = String(a).split("-").map(Number);
|
|
566
|
+
return !e || !s || !r ? "TBD" : new Date(e, s - 1, r).toLocaleDateString("en-US", t || { weekday: "short", month: "short", day: "numeric" });
|
|
567
567
|
}
|
|
568
|
-
function
|
|
569
|
-
if (!
|
|
570
|
-
const [t, e] = String(
|
|
568
|
+
function pt(a) {
|
|
569
|
+
if (!a) return "";
|
|
570
|
+
const [t, e] = String(a).split(":").map(Number);
|
|
571
571
|
if (Number.isNaN(t)) return "";
|
|
572
572
|
const s = t >= 12 ? "PM" : "AM";
|
|
573
573
|
return `${(t + 11) % 12 + 1}:${String(e || 0).padStart(2, "0")} ${s}`;
|
|
574
574
|
}
|
|
575
|
-
function Se(
|
|
576
|
-
return
|
|
575
|
+
function Se(a) {
|
|
576
|
+
return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
|
|
577
577
|
}
|
|
578
|
-
function et(
|
|
579
|
-
const t =
|
|
580
|
-
return
|
|
578
|
+
function et(a = /* @__PURE__ */ new Date()) {
|
|
579
|
+
const t = a.getFullYear();
|
|
580
|
+
return a.getMonth() >= 6 ? `${t}-${t + 1}` : `${t - 1}-${t}`;
|
|
581
581
|
}
|
|
582
|
-
function
|
|
582
|
+
function mt(a = /* @__PURE__ */ new Date()) {
|
|
583
583
|
const t = (e) => String(e).padStart(2, "0");
|
|
584
|
-
return `${
|
|
584
|
+
return `${a.getFullYear()}-${t(a.getMonth() + 1)}-${t(a.getDate())}`;
|
|
585
585
|
}
|
|
586
|
-
function Ae(
|
|
587
|
-
const e = [...new Set((
|
|
586
|
+
function Ae(a, t = mt()) {
|
|
587
|
+
const e = [...new Set((a || []).filter(Boolean))].sort();
|
|
588
588
|
if (!e.length || e.includes(t)) return t;
|
|
589
|
-
const s = e.filter((
|
|
589
|
+
const s = e.filter((r) => r < t);
|
|
590
590
|
return s.length ? s[s.length - 1] : e[0];
|
|
591
591
|
}
|
|
592
|
-
function
|
|
593
|
-
return
|
|
592
|
+
function ft(a) {
|
|
593
|
+
return a ? (a.abbr || a.name || "?").slice(0, 4).toUpperCase() : "?";
|
|
594
594
|
}
|
|
595
|
-
function K(
|
|
596
|
-
if (!
|
|
597
|
-
const t = parseInt(
|
|
598
|
-
return 0.299 * e + 0.587 * s + 0.114 *
|
|
595
|
+
function K(a) {
|
|
596
|
+
if (!a || !/^#[0-9a-fA-F]{6}$/.test(a)) return "#FFFFFF";
|
|
597
|
+
const t = parseInt(a.slice(1), 16), e = t >> 16 & 255, s = t >> 8 & 255, r = t & 255;
|
|
598
|
+
return 0.299 * e + 0.587 * s + 0.114 * r > 150 ? "#0F1B33" : "#FFFFFF";
|
|
599
599
|
}
|
|
600
|
-
const Te = (
|
|
601
|
-
const t = ["th", "st", "nd", "rd"], e =
|
|
602
|
-
return
|
|
600
|
+
const Te = (a) => {
|
|
601
|
+
const t = ["th", "st", "nd", "rd"], e = a % 100;
|
|
602
|
+
return a + (t[(e - 20) % 10] || t[e] || t[0]);
|
|
603
603
|
};
|
|
604
|
-
function
|
|
605
|
-
if (
|
|
606
|
-
if (
|
|
604
|
+
function jt(a) {
|
|
605
|
+
if (a.state === "live") return { kind: "live", label: `Live · ${a.period || ""}`.replace(/ · $/, "") };
|
|
606
|
+
if (a.state === "final") {
|
|
607
607
|
const t = [];
|
|
608
|
-
return
|
|
608
|
+
return a.finish === "overtime" && t.push("OT"), a.finish === "shootout" && t.push("PK-SO"), a.forfeit && a.forfeit !== "none" && t.push("Forfeit"), { kind: "final", label: `Final${t.length ? ` · ${t.join(" · ")}` : ""}` };
|
|
609
609
|
}
|
|
610
|
-
return
|
|
610
|
+
return a.state === "postponed" ? { kind: "warn", label: "Postponed" } : a.state === "canceled" ? { kind: "warn", label: "Canceled" } : { kind: "sched", label: `${y(a.date, { month: "short", day: "numeric" })} · ${pt(a.time)}`.replace(/ · $/, "") };
|
|
611
611
|
}
|
|
612
612
|
const Ie = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
|
|
613
|
-
function _(
|
|
614
|
-
let t = String(
|
|
613
|
+
function _(a) {
|
|
614
|
+
let t = String(a || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
|
|
615
615
|
const e = t.indexOf("#");
|
|
616
616
|
let s = "";
|
|
617
617
|
e !== -1 && (s = t.slice(e).split("?")[0], t = t.slice(0, e));
|
|
618
|
-
let
|
|
619
|
-
return
|
|
618
|
+
let r = t.split("?")[0] + s;
|
|
619
|
+
return r = r.replace(/([^:])\/{2,}/g, "$1/").replace(/^\/{2,}/, "/"), r = r.replace(/^\/(?=#)/, ""), r.length > 1 && (r = r.replace(/\/+$/, "")), r.toLowerCase();
|
|
620
620
|
}
|
|
621
|
-
function
|
|
622
|
-
const
|
|
623
|
-
if (!
|
|
624
|
-
const t = (
|
|
625
|
-
return _((
|
|
621
|
+
function Wt() {
|
|
622
|
+
const a = globalThis.location;
|
|
623
|
+
if (!a) return "";
|
|
624
|
+
const t = (a.hash || "").startsWith("#/") ? a.hash : "";
|
|
625
|
+
return _((a.pathname || "") + t);
|
|
626
626
|
}
|
|
627
|
-
function Ee(
|
|
627
|
+
function Ee(a, t, e) {
|
|
628
628
|
if (!e) return null;
|
|
629
|
-
const s = _(
|
|
629
|
+
const s = _(a);
|
|
630
630
|
if (!s) return null;
|
|
631
|
-
const
|
|
632
|
-
if (s ===
|
|
631
|
+
const r = _(g(t.game, { sport: e, id: "" })), o = _(g(t.school, { id: "" }));
|
|
632
|
+
if (s === r || s.startsWith(`${r}/`) || s === o || s.startsWith(`${o}/`)) return null;
|
|
633
633
|
const i = _(g(t.section, { sport: e, view: "" }));
|
|
634
634
|
if (s === i) return "";
|
|
635
635
|
if (!s.startsWith(`${i}/`)) return null;
|
|
636
636
|
const n = s.slice(i.length + 1), d = n.split("/");
|
|
637
637
|
return d.length > 2 || d.some((c) => !/^[a-z][a-z-]*$/.test(c)) || Ie.has(d[0]) ? null : n;
|
|
638
638
|
}
|
|
639
|
-
function Ce(
|
|
640
|
-
const s = (i) => g(e.section, { sport:
|
|
639
|
+
function Ce(a, t, e) {
|
|
640
|
+
const s = (i) => g(e.section, { sport: a, view: i }).replace(/([^:])\/{2,}/g, "$1/"), o = new Set((t || []).map((i) => i && i.gender).filter((i) => i === "boys" || i === "girls")).size === 2 ? [
|
|
641
641
|
{ label: "Boys Standings", href: s("boys/standings") },
|
|
642
642
|
{ label: "Girls Standings", href: s("girls/standings") }
|
|
643
643
|
] : [{ label: "Standings", href: s("standings") }];
|
|
644
644
|
return [
|
|
645
|
-
{ label: `${
|
|
645
|
+
{ label: `${z(a)} Home`, href: s("") },
|
|
646
646
|
{ label: "Scores/Schedule", href: s("scores") },
|
|
647
647
|
{ label: "Playoff Brackets", href: s("brackets") },
|
|
648
648
|
...o,
|
|
649
649
|
{ label: "Polls & Rankings", href: s("rankings") }
|
|
650
650
|
];
|
|
651
651
|
}
|
|
652
|
-
function Pe(
|
|
652
|
+
function Pe(a, t = Wt()) {
|
|
653
653
|
const e = _(t);
|
|
654
|
-
for (const s of
|
|
654
|
+
for (const s of a.querySelectorAll(':scope > a[slot="nav"]'))
|
|
655
655
|
e && _(s.getAttribute("href")) === e ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
|
|
656
656
|
}
|
|
657
|
-
class w extends
|
|
657
|
+
class w extends C {
|
|
658
658
|
static properties = {
|
|
659
659
|
api: { type: String },
|
|
660
660
|
refreshInterval: { type: Number, attribute: "refresh-interval" },
|
|
@@ -720,7 +720,7 @@ class w extends E {
|
|
|
720
720
|
return l``;
|
|
721
721
|
}
|
|
722
722
|
}
|
|
723
|
-
const v = (
|
|
723
|
+
const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), De = b`
|
|
724
724
|
:host {
|
|
725
725
|
--hsot-red: var(--color-red, #D1232A);
|
|
726
726
|
--hsot-red-deep: var(--color-red-dark, #951C21);
|
|
@@ -951,16 +951,44 @@ const v = (r) => Object.fromEntries((r || []).map((t) => [t.id, t])), De = b`
|
|
|
951
951
|
.gamelist .opp { flex: 1; min-width: 180px; }
|
|
952
952
|
.gamelist .opp a { text-decoration: none; color: inherit; font-weight: 500; }
|
|
953
953
|
.gamelist .opp a:hover { text-decoration: underline; }
|
|
954
|
+
|
|
955
|
+
/* Scoreboard matchup: "Away <score> at Home <score>".
|
|
956
|
+
Scoped to .matchup, not .opp, because hsot-school's schedule rows
|
|
957
|
+
reuse .opp for a single opponent plus pills and must keep the plain
|
|
958
|
+
inline flow.
|
|
959
|
+
|
|
960
|
+
Each team + score is one .side flex item, so a matchup wider than the
|
|
961
|
+
row breaks *between* the two teams instead of through a school's name
|
|
962
|
+
— the "at North / Moore" and "at Greene / Central" wraps the old
|
|
963
|
+
single-span markup produced. */
|
|
964
|
+
.gamelist .opp.matchup {
|
|
965
|
+
display: flex; flex-wrap: wrap; align-items: center; gap: 0 0.35rem;
|
|
966
|
+
}
|
|
967
|
+
.gamelist .opp.matchup .side { display: inline-flex; align-items: center; }
|
|
968
|
+
.gamelist .opp.matchup .at { margin-left: 0.45rem; }
|
|
969
|
+
@media (max-width: 720px) {
|
|
970
|
+
/* Always two lines on a phone, split after the "at", rather than
|
|
971
|
+
one line for short matchups and a break wherever the text runs
|
|
972
|
+
out for long ones. Consistent rows read better than tight ones. */
|
|
973
|
+
.gamelist .opp.matchup { flex-direction: column; align-items: flex-start; row-gap: 0.15rem; }
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
/* Names the side that forfeited — the pill only says "Final · Forfeit",
|
|
977
|
+
which leaves a 0-0 row ambiguous about who was awarded the win. */
|
|
978
|
+
.gamelist .ff { color: var(--hsot-gray-5); font-size: 0.78rem; font-style: italic; }
|
|
954
979
|
.gamelist .where { color: var(--hsot-gray-5); font-size: 0.78rem; }
|
|
955
980
|
.gamelist a.box { font-size: 0.78rem; }
|
|
956
981
|
`, j = [De, ze, Re, Be, Fe, Ne, Oe];
|
|
957
|
-
function
|
|
958
|
-
return
|
|
982
|
+
function ut(a) {
|
|
983
|
+
return a.state !== "final" ? null : a.forfeit && a.forfeit !== "none" ? a.forfeit : a.homeScore > a.awayScore ? "home" : a.awayScore > a.homeScore ? "away" : a.tiebreakWinner && a.tiebreakWinner !== "none" ? a.tiebreakWinner : "tie";
|
|
984
|
+
}
|
|
985
|
+
function Ue(a) {
|
|
986
|
+
return !a || !a.forfeit || a.forfeit === "none" ? null : a.forfeit === "home" ? "away" : a.forfeit === "away" ? "home" : null;
|
|
959
987
|
}
|
|
960
|
-
function W(
|
|
961
|
-
const e = {}, s = (o) => (e[o] = e[o] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, e[o]),
|
|
962
|
-
for (const o of
|
|
963
|
-
const i =
|
|
988
|
+
function W(a, t) {
|
|
989
|
+
const e = {}, s = (o) => (e[o] = e[o] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, e[o]), r = a.filter((o) => o.state === "final" && o.gameType !== "scrimmage" && !0).sort((o, i) => String(o.date).localeCompare(String(i.date)));
|
|
990
|
+
for (const o of r) {
|
|
991
|
+
const i = ut(o), n = o.gameType === "conference";
|
|
964
992
|
for (const d of ["home", "away"]) {
|
|
965
993
|
const c = d === "home" ? o.homeTeamId : o.awayTeamId;
|
|
966
994
|
if (!c) continue;
|
|
@@ -972,41 +1000,41 @@ function W(r, t) {
|
|
|
972
1000
|
}
|
|
973
1001
|
return e;
|
|
974
1002
|
}
|
|
975
|
-
function st(
|
|
976
|
-
if (!
|
|
977
|
-
const t =
|
|
1003
|
+
function st(a) {
|
|
1004
|
+
if (!a || !a.length) return "";
|
|
1005
|
+
const t = a[a.length - 1].mark;
|
|
978
1006
|
let e = 0;
|
|
979
|
-
for (let s =
|
|
1007
|
+
for (let s = a.length - 1; s >= 0 && a[s].mark === t; s -= 1) e += 1;
|
|
980
1008
|
return t + e;
|
|
981
1009
|
}
|
|
982
|
-
const
|
|
983
|
-
const s =
|
|
984
|
-
return s ? (
|
|
985
|
-
},
|
|
986
|
-
function x(
|
|
987
|
-
if (!
|
|
988
|
-
const e = t ?
|
|
989
|
-
return `${e}-${s}${
|
|
1010
|
+
const zt = (a, t, e) => {
|
|
1011
|
+
const s = a + t + e;
|
|
1012
|
+
return s ? (a + e / 2) / s : 0;
|
|
1013
|
+
}, Rt = (a) => a.toFixed(3).replace("0.", ".");
|
|
1014
|
+
function x(a, t = !1) {
|
|
1015
|
+
if (!a) return "0-0";
|
|
1016
|
+
const e = t ? a.cw : a.w, s = t ? a.cl : a.l, r = t ? a.ct : a.t;
|
|
1017
|
+
return `${e}-${s}${r ? `-${r}` : ""}`;
|
|
990
1018
|
}
|
|
991
|
-
function
|
|
992
|
-
return
|
|
1019
|
+
function qt(a, t) {
|
|
1020
|
+
return a.map((e) => {
|
|
993
1021
|
const s = t[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
|
|
994
|
-
return { team: e, rec: s, confPct:
|
|
1022
|
+
return { team: e, rec: s, confPct: zt(s.cw, s.cl, s.ct), overallPct: zt(s.w, s.l, s.t) };
|
|
995
1023
|
}).sort((e, s) => s.confPct - e.confPct || s.overallPct - e.overallPct || s.rec.pf - s.rec.pa - (e.rec.pf - e.rec.pa));
|
|
996
1024
|
}
|
|
997
|
-
function
|
|
998
|
-
return
|
|
1025
|
+
function gt(a, t) {
|
|
1026
|
+
return a.filter((e) => (e.homeTeamId === t || e.awayTeamId === t) && (e.state === "scheduled" || e.state === "live") && e.gameType !== "scrimmage").sort((e, s) => String(e.date).localeCompare(String(s.date)))[0] || null;
|
|
999
1027
|
}
|
|
1000
|
-
function
|
|
1001
|
-
const e =
|
|
1028
|
+
function Bt(a, t) {
|
|
1029
|
+
const e = a[t];
|
|
1002
1030
|
return e && e.results.length ? e.results[e.results.length - 1] : null;
|
|
1003
1031
|
}
|
|
1004
|
-
function
|
|
1032
|
+
function vt(a, t, e, s, r) {
|
|
1005
1033
|
const o = t[e];
|
|
1006
1034
|
if (!o) return null;
|
|
1007
1035
|
const i = /* @__PURE__ */ new Map();
|
|
1008
|
-
for (const d of
|
|
1009
|
-
if (d.sport !== s ||
|
|
1036
|
+
for (const d of a || []) {
|
|
1037
|
+
if (d.sport !== s || r && d.effectiveDate > r || d.gender && o.gender !== d.gender && o.gender !== "coed") continue;
|
|
1010
1038
|
const c = d.gender || "", h = i.get(c);
|
|
1011
1039
|
(!h || d.effectiveDate > h.effectiveDate) && i.set(c, d);
|
|
1012
1040
|
}
|
|
@@ -1017,27 +1045,27 @@ function $t(r, t, e, s, a) {
|
|
|
1017
1045
|
}
|
|
1018
1046
|
return n ? n.rank : null;
|
|
1019
1047
|
}
|
|
1020
|
-
function
|
|
1021
|
-
if (!
|
|
1022
|
-
const s = (
|
|
1048
|
+
function He(a, t, e) {
|
|
1049
|
+
if (!a) return { kind: "none", delta: 0 };
|
|
1050
|
+
const s = (a.teamIds || []).indexOf(e) + 1;
|
|
1023
1051
|
if (!s) return { kind: "none", delta: 0 };
|
|
1024
1052
|
if (!t) return { kind: "same", delta: 0 };
|
|
1025
|
-
const
|
|
1026
|
-
if (!
|
|
1027
|
-
const o =
|
|
1053
|
+
const r = (t.teamIds || []).indexOf(e) + 1;
|
|
1054
|
+
if (!r) return { kind: "new", delta: 0 };
|
|
1055
|
+
const o = r - s;
|
|
1028
1056
|
return o > 0 ? { kind: "up", delta: o } : o < 0 ? { kind: "down", delta: -o } : { kind: "same", delta: 0 };
|
|
1029
1057
|
}
|
|
1030
|
-
function
|
|
1031
|
-
return /^https?:\/\//i.test(String(
|
|
1058
|
+
function Me(a) {
|
|
1059
|
+
return /^https?:\/\//i.test(String(a || ""));
|
|
1032
1060
|
}
|
|
1033
|
-
function Q(
|
|
1034
|
-
const e =
|
|
1035
|
-
if (!
|
|
1036
|
-
const s = Math.max(1, Math.round(t * 2)),
|
|
1037
|
-
return `${e}${
|
|
1061
|
+
function Q(a, t) {
|
|
1062
|
+
const e = a?.logoAssetId;
|
|
1063
|
+
if (!Me(e)) return "";
|
|
1064
|
+
const s = Math.max(1, Math.round(t * 2)), r = e.includes("?") ? "&" : "?";
|
|
1065
|
+
return `${e}${r}w=${s}&h=${s}&f=webp`;
|
|
1038
1066
|
}
|
|
1039
|
-
function
|
|
1040
|
-
const o =
|
|
1067
|
+
function $t(a, t, { title: e, sub: s, teams: r }) {
|
|
1068
|
+
const o = Wt(), n = !!a.querySelector(':scope > a[slot="nav"]') || Ee(o, t.hrefs, t.sport) !== null;
|
|
1041
1069
|
return l`
|
|
1042
1070
|
<div class="band section">
|
|
1043
1071
|
<div class="inner">
|
|
@@ -1045,10 +1073,10 @@ function bt(r, t, { title: e, sub: s, teams: a }) {
|
|
|
1045
1073
|
${s ? l`<p class="sub">${s}</p>` : m}
|
|
1046
1074
|
</div>
|
|
1047
1075
|
${n ? l`
|
|
1048
|
-
<nav class="sectionnav" aria-label="${
|
|
1076
|
+
<nav class="sectionnav" aria-label="${z(t.sport)} section">
|
|
1049
1077
|
<div class="navrow">
|
|
1050
1078
|
<slot name="nav">
|
|
1051
|
-
${Ce(t.sport,
|
|
1079
|
+
${Ce(t.sport, r, t.hrefs).map((d) => l`<a href=${d.href}
|
|
1052
1080
|
aria-current=${o && _(d.href) === o ? "page" : m}>${d.label}</a>`)}
|
|
1053
1081
|
</slot>
|
|
1054
1082
|
</div>
|
|
@@ -1056,58 +1084,58 @@ function bt(r, t, { title: e, sub: s, teams: a }) {
|
|
|
1056
1084
|
</div>
|
|
1057
1085
|
`;
|
|
1058
1086
|
}
|
|
1059
|
-
const U = (
|
|
1060
|
-
const e =
|
|
1061
|
-
return e ?
|
|
1062
|
-
},
|
|
1063
|
-
function H(
|
|
1064
|
-
if (!
|
|
1065
|
-
const e = Q(
|
|
1087
|
+
const U = (a, t) => {
|
|
1088
|
+
const e = a.teamsById[t];
|
|
1089
|
+
return e ? a.schoolsById[e.schoolId] : null;
|
|
1090
|
+
}, E = (a, t) => U(a, t)?.name || "TBD", Z = (a, t) => U(a, t)?.abbr || "TBD";
|
|
1091
|
+
function H(a, t = 26) {
|
|
1092
|
+
if (!a) return m;
|
|
1093
|
+
const e = Q(a, t);
|
|
1066
1094
|
if (e)
|
|
1067
1095
|
return l`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
|
|
1068
1096
|
src=${e} style="width:${t}px;height:${t}px" />`;
|
|
1069
|
-
const s =
|
|
1097
|
+
const s = a.colorPrimary || "#030711", r = K(s);
|
|
1070
1098
|
return l`<span class="swatch" aria-hidden="true"
|
|
1071
|
-
style="width:${t}px;height:${t}px;background:${s};color:${
|
|
1072
|
-
>${
|
|
1099
|
+
style="width:${t}px;height:${t}px;background:${s};color:${r};font-size:${Math.max(8, t * 0.28)}px"
|
|
1100
|
+
>${ft(a)}</span>`;
|
|
1073
1101
|
}
|
|
1074
|
-
function
|
|
1075
|
-
const s =
|
|
1102
|
+
function bt(a, t, e) {
|
|
1103
|
+
const s = vt(a.rankings, a.teamsById, t, a.sport, e);
|
|
1076
1104
|
return s ? l`<span class="rankbadge">#${s}</span>` : m;
|
|
1077
1105
|
}
|
|
1078
|
-
function
|
|
1079
|
-
const s = U(
|
|
1080
|
-
return s ? l`${
|
|
1106
|
+
function Gt(a, t, e) {
|
|
1107
|
+
const s = U(a, t);
|
|
1108
|
+
return s ? l`${bt(a, t, e)}<a href=${g(a.hrefs.school, { id: s.id })}>${s.name}</a>` : l`<span class="mut">TBD</span>`;
|
|
1081
1109
|
}
|
|
1082
|
-
function
|
|
1083
|
-
const s =
|
|
1110
|
+
function yt(a, t, e = 5) {
|
|
1111
|
+
const s = a.records[t];
|
|
1084
1112
|
if (!s || !s.results.length) return l`<span class="mut">·</span>`;
|
|
1085
|
-
const
|
|
1086
|
-
return l`<span class="dots" role="img" aria-label="last ${
|
|
1087
|
-
${
|
|
1088
|
-
title="${o.mark} ${o.my}-${o.their} vs ${
|
|
1089
|
-
href=${g(
|
|
1113
|
+
const r = s.results.slice(-1 * e);
|
|
1114
|
+
return l`<span class="dots" role="img" aria-label="last ${r.length} results">
|
|
1115
|
+
${r.map((o) => l`<a class="dot ${o.mark}"
|
|
1116
|
+
title="${o.mark} ${o.my}-${o.their} vs ${E(a, o.opp)}"
|
|
1117
|
+
href=${g(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
|
|
1090
1118
|
</span>`;
|
|
1091
1119
|
}
|
|
1092
|
-
function q(
|
|
1093
|
-
return
|
|
1120
|
+
function q(a, t) {
|
|
1121
|
+
return a.querySelector(':scope > [slot="rail"]') ? l`<div class="view withrail">
|
|
1094
1122
|
<div class="viewmain">${t}</div>
|
|
1095
1123
|
<aside class="viewrail"><slot name="rail"></slot></aside>
|
|
1096
1124
|
</div>` : l`<div class="view">${t}</div>`;
|
|
1097
1125
|
}
|
|
1098
|
-
function G(
|
|
1099
|
-
if (!
|
|
1100
|
-
const t = l`<img src=${
|
|
1101
|
-
return l`<div class="promo">${
|
|
1126
|
+
function G(a) {
|
|
1127
|
+
if (!a.promoImage) return m;
|
|
1128
|
+
const t = l`<img src=${a.promoImage} alt=${a.promoAlt || "Sponsor"}>`;
|
|
1129
|
+
return l`<div class="promo">${a.promoHref ? l`<a href=${a.promoHref} target="_blank" rel="sponsored noopener">${t}</a>` : t}</div>`;
|
|
1102
1130
|
}
|
|
1103
|
-
function J(
|
|
1104
|
-
const t =
|
|
1131
|
+
function J(a) {
|
|
1132
|
+
const t = jt(a);
|
|
1105
1133
|
return l`<span class="pill ${t.kind}">${t.label}</span>`;
|
|
1106
1134
|
}
|
|
1107
|
-
function Vt(
|
|
1135
|
+
function Vt(a, t, e) {
|
|
1108
1136
|
if (!t) return l`<span class="mut">·</span>`;
|
|
1109
|
-
const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId,
|
|
1110
|
-
return l`${t.state === "live" ? l`<span class="pill live">Live</span> ` : l`${y(t.date, { month: "numeric", day: "numeric" })} `}${
|
|
1137
|
+
const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId, r = t.homeTeamId === e ? "vs" : "at";
|
|
1138
|
+
return l`${t.state === "live" ? l`<span class="pill live">Live</span> ` : l`${y(t.date, { month: "numeric", day: "numeric" })} `}${r} ${Z(a, s)}`;
|
|
1111
1139
|
}
|
|
1112
1140
|
class Yt extends w {
|
|
1113
1141
|
static styles = j;
|
|
@@ -1128,7 +1156,7 @@ class Yt extends w {
|
|
|
1128
1156
|
this._datePinned = !!this.date;
|
|
1129
1157
|
}
|
|
1130
1158
|
async fetchData(t) {
|
|
1131
|
-
const e = this.season || et(), [s,
|
|
1159
|
+
const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
|
|
1132
1160
|
t.listSchools(),
|
|
1133
1161
|
t.listTeams({ sport: this.sport }),
|
|
1134
1162
|
t.listConferences(),
|
|
@@ -1138,7 +1166,7 @@ class Yt extends w {
|
|
|
1138
1166
|
return this._datePinned || (this.date = Ae(i.items.map((d) => d.date)), this._datePinned = !0), {
|
|
1139
1167
|
season: e,
|
|
1140
1168
|
schools: s.items,
|
|
1141
|
-
teams:
|
|
1169
|
+
teams: r.items,
|
|
1142
1170
|
conferences: o.items,
|
|
1143
1171
|
games: i.items,
|
|
1144
1172
|
rankings: n.items
|
|
@@ -1155,9 +1183,9 @@ class Yt extends w {
|
|
|
1155
1183
|
}, this._ctxData = this.data), this._ctx;
|
|
1156
1184
|
}
|
|
1157
1185
|
renderView() {
|
|
1158
|
-
const t = this.ctx, e = v(this.data.conferences), s = [...new Set(this.data.games.map((c) => c.date).filter(Boolean))].sort(),
|
|
1159
|
-
const h = [c.awayTeamId, c.homeTeamId].map((p) =>
|
|
1160
|
-
return h.length ? Math.min(...h) :
|
|
1186
|
+
const t = this.ctx, e = v(this.data.conferences), s = [...new Set(this.data.games.map((c) => c.date).filter(Boolean))].sort(), r = Number.MAX_SAFE_INTEGER, o = (c) => {
|
|
1187
|
+
const h = [c.awayTeamId, c.homeTeamId].map((p) => vt(t.rankings, t.teamsById, p, this.sport, c.date)).filter(Boolean);
|
|
1188
|
+
return h.length ? Math.min(...h) : r;
|
|
1161
1189
|
}, i = this.data.games.filter((c) => c.date === this.date), n = new Map(i.map((c) => [c, o(c)]));
|
|
1162
1190
|
i.sort((c, h) => (c.state === "live" ? 0 : 1) - (h.state === "live" ? 0 : 1) || n.get(c) - n.get(h));
|
|
1163
1191
|
const d = /* @__PURE__ */ new Map();
|
|
@@ -1165,8 +1193,8 @@ class Yt extends w {
|
|
|
1165
1193
|
const h = c.gameType === "conference" && c.conferenceId ? e[c.conferenceId]?.name || "Conference" : c.gameType === "playoff" ? "Playoffs" : c.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
|
|
1166
1194
|
d.has(h) || d.set(h, []), d.get(h).push(c);
|
|
1167
1195
|
}), l`
|
|
1168
|
-
${
|
|
1169
|
-
title: l`${
|
|
1196
|
+
${$t(this, t, {
|
|
1197
|
+
title: l`${z(this.sport)} scores & schedules`,
|
|
1170
1198
|
sub: l`${y(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${i.length} games`,
|
|
1171
1199
|
teams: this.data.teams
|
|
1172
1200
|
})}
|
|
@@ -1178,7 +1206,7 @@ class Yt extends w {
|
|
|
1178
1206
|
this.date = c.target.value;
|
|
1179
1207
|
}}>
|
|
1180
1208
|
${(s.includes(this.date) ? s : [...s, this.date].sort()).map((c) => l`<option value=${c} ?selected=${c === this.date}>
|
|
1181
|
-
${y(c, { weekday: "short", month: "short", day: "numeric" })}${c ===
|
|
1209
|
+
${y(c, { weekday: "short", month: "short", day: "numeric" })}${c === mt() ? " · today" : ""}
|
|
1182
1210
|
</option>`)}
|
|
1183
1211
|
</select>
|
|
1184
1212
|
<button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
|
|
@@ -1206,12 +1234,12 @@ class Yt extends w {
|
|
|
1206
1234
|
// a lone score column on the far right read as detached from the teams).
|
|
1207
1235
|
// Scheduled games carry their start time on the status pill alone.
|
|
1208
1236
|
renderGame(t, e) {
|
|
1209
|
-
const s = e.state === "final" || e.state === "live";
|
|
1237
|
+
const s = e.state === "final" || e.state === "live", r = (i, n, d = m) => l`<span class="side">${Gt(t, i, e.date)}${s ? l`<span class="score">${n}</span>` : m}${d}</span>`, o = Ue(e);
|
|
1210
1238
|
return l`
|
|
1211
1239
|
<li>
|
|
1212
1240
|
${J(e)}
|
|
1213
|
-
<span class="opp">${
|
|
1214
|
-
|
|
1241
|
+
<span class="opp matchup">${r(e.awayTeamId, e.awayScore, l`<span class="at">at</span>`)}${r(e.homeTeamId, e.homeScore)}</span>
|
|
1242
|
+
${o ? l`<span class="ff">${E(t, o === "home" ? e.homeTeamId : e.awayTeamId)} forfeited</span>` : m}
|
|
1215
1243
|
<span class="where">${e.venue || ""}</span>
|
|
1216
1244
|
${e.broadcast ? l`<span class="pill class">${e.broadcast}</span>` : m}
|
|
1217
1245
|
<a class="box" href=${g(t.hrefs.game, { sport: this.sport, id: e.id })}>Box score →</a>
|
|
@@ -1233,7 +1261,7 @@ class Kt extends w {
|
|
|
1233
1261
|
super(), this.sport = "football", this.season = "", this.classFilter = "All", this.query = "";
|
|
1234
1262
|
}
|
|
1235
1263
|
async fetchData(t) {
|
|
1236
|
-
const e = this.season || et(), [s,
|
|
1264
|
+
const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
|
|
1237
1265
|
t.listConferences({ active: !0 }),
|
|
1238
1266
|
t.listSchools(),
|
|
1239
1267
|
t.listTeams({ sport: this.sport }),
|
|
@@ -1243,7 +1271,7 @@ class Kt extends w {
|
|
|
1243
1271
|
return {
|
|
1244
1272
|
season: e,
|
|
1245
1273
|
conferences: s.items,
|
|
1246
|
-
schools:
|
|
1274
|
+
schools: r.items,
|
|
1247
1275
|
teams: o.items,
|
|
1248
1276
|
games: i.items,
|
|
1249
1277
|
rankings: n.items
|
|
@@ -1260,10 +1288,10 @@ class Kt extends w {
|
|
|
1260
1288
|
}, this._ctxData = this.data), this._ctx;
|
|
1261
1289
|
}
|
|
1262
1290
|
renderView() {
|
|
1263
|
-
const t = this.ctx, e = ["All", ...new Set(this.data.conferences.flatMap((
|
|
1291
|
+
const t = this.ctx, e = ["All", ...new Set(this.data.conferences.flatMap((r) => r.classifications || []))].slice(0, 9), s = this.data.conferences.filter((r) => r.active !== !1).filter((r) => this.classFilter === "All" || (r.classifications || []).includes(this.classFilter));
|
|
1264
1292
|
return l`
|
|
1265
|
-
${
|
|
1266
|
-
title: l`${
|
|
1293
|
+
${$t(this, t, {
|
|
1294
|
+
title: l`${z(this.sport)} standings`,
|
|
1267
1295
|
sub: l`${this.data.season} season · every conference, computed live from reported results`,
|
|
1268
1296
|
teams: this.data.teams
|
|
1269
1297
|
})}
|
|
@@ -1271,26 +1299,26 @@ class Kt extends w {
|
|
|
1271
1299
|
${G(this)}
|
|
1272
1300
|
<div class="toolbar">
|
|
1273
1301
|
<div role="group" aria-label="Classification filter">
|
|
1274
|
-
${e.map((
|
|
1302
|
+
${e.map((r) => l`<button class="chip ${this.classFilter === r ? "on" : ""}"
|
|
1275
1303
|
@click=${() => {
|
|
1276
|
-
this.classFilter =
|
|
1277
|
-
}}>${
|
|
1304
|
+
this.classFilter = r;
|
|
1305
|
+
}}>${r}</button>`)}
|
|
1278
1306
|
</div>
|
|
1279
1307
|
<input type="search" placeholder="Find a school…" aria-label="Find a school"
|
|
1280
|
-
.value=${this.query} @input=${(
|
|
1281
|
-
this.query =
|
|
1308
|
+
.value=${this.query} @input=${(r) => {
|
|
1309
|
+
this.query = r.target.value;
|
|
1282
1310
|
}}>
|
|
1283
1311
|
<span class="spacer"></span>
|
|
1284
|
-
<span class="asof">Records through ${y(
|
|
1312
|
+
<span class="asof">Records through ${y(mt(), { month: "long", day: "numeric" })} · conference games count toward both records · scrimmages toward neither</span>
|
|
1285
1313
|
</div>
|
|
1286
|
-
${s.map((
|
|
1314
|
+
${s.map((r) => this.renderConference(t, r))}
|
|
1287
1315
|
`)}
|
|
1288
1316
|
`;
|
|
1289
1317
|
}
|
|
1290
1318
|
renderConference(t, e) {
|
|
1291
1319
|
const s = this.data.teams.filter((i) => i.conferenceId === e.id);
|
|
1292
1320
|
if (!s.length) return m;
|
|
1293
|
-
const
|
|
1321
|
+
const r = this.query.trim().toLowerCase(), o = qt(s, t.records);
|
|
1294
1322
|
return l`
|
|
1295
1323
|
<div class="card">
|
|
1296
1324
|
<div class="card-head">
|
|
@@ -1305,16 +1333,16 @@ class Kt extends w {
|
|
|
1305
1333
|
<th>Streak</th><th>Last 5</th><th>Next</th>
|
|
1306
1334
|
</tr></thead>
|
|
1307
1335
|
<tbody>
|
|
1308
|
-
${o.map((i, n) => this.renderRow(t, i, n,
|
|
1336
|
+
${o.map((i, n) => this.renderRow(t, i, n, r))}
|
|
1309
1337
|
</tbody>
|
|
1310
1338
|
</table></div>
|
|
1311
1339
|
</div>
|
|
1312
1340
|
`;
|
|
1313
1341
|
}
|
|
1314
|
-
renderRow(t, e, s,
|
|
1342
|
+
renderRow(t, e, s, r) {
|
|
1315
1343
|
const o = t.schoolsById[e.team.schoolId], i = o?.name || e.team.name || "TBD";
|
|
1316
|
-
if (
|
|
1317
|
-
const n = e.rec.pf - e.rec.pa, d =
|
|
1344
|
+
if (r && !i.toLowerCase().includes(r)) return m;
|
|
1345
|
+
const n = e.rec.pf - e.rec.pa, d = gt(this.data.games, e.team.id), c = (e.team.championships || []).map((p) => l`
|
|
1318
1346
|
<span class="pill champ" title="${p.season} ${p.title} champion">★ ${p.season} ${p.title}</span>`), h = () => {
|
|
1319
1347
|
location.href = g(t.hrefs.school, { id: e.team.schoolId });
|
|
1320
1348
|
};
|
|
@@ -1324,25 +1352,25 @@ class Kt extends w {
|
|
|
1324
1352
|
}}>
|
|
1325
1353
|
<td class="mut">${s + 1}</td>
|
|
1326
1354
|
<td class="teamcell">
|
|
1327
|
-
${H(o)}${
|
|
1355
|
+
${H(o)}${bt(t, e.team.id, null)}
|
|
1328
1356
|
<a href=${g(t.hrefs.school, { id: e.team.schoolId })}>${i}</a> ${c}
|
|
1329
1357
|
</td>
|
|
1330
1358
|
<td class="num">${x(e.rec, !0)}</td>
|
|
1331
|
-
<td class="num">${
|
|
1359
|
+
<td class="num">${Rt(e.confPct)}</td>
|
|
1332
1360
|
<td class="num">${x(e.rec)}</td>
|
|
1333
|
-
<td class="num">${
|
|
1361
|
+
<td class="num">${Rt(e.overallPct)}</td>
|
|
1334
1362
|
<td class="num">${e.rec.pf}</td>
|
|
1335
1363
|
<td class="num">${e.rec.pa}</td>
|
|
1336
1364
|
<td class="num" style="color:${n >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${n > 0 ? "+" : ""}${n}</td>
|
|
1337
1365
|
<td>${st(e.rec.results) || "·"}</td>
|
|
1338
|
-
<td>${
|
|
1366
|
+
<td>${yt(t, e.team.id)}</td>
|
|
1339
1367
|
<td>${Vt(t, d, e.team.id)}</td>
|
|
1340
1368
|
</tr>
|
|
1341
1369
|
`;
|
|
1342
1370
|
}
|
|
1343
1371
|
}
|
|
1344
1372
|
globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", Kt);
|
|
1345
|
-
const
|
|
1373
|
+
const Le = b`
|
|
1346
1374
|
.hero1 {
|
|
1347
1375
|
border-radius: var(--hsot-radius-md); color: var(--hsot-white);
|
|
1348
1376
|
padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
|
|
@@ -1360,7 +1388,7 @@ const Me = b`
|
|
|
1360
1388
|
.sparkline { vertical-align: middle; }
|
|
1361
1389
|
`;
|
|
1362
1390
|
class Qt extends w {
|
|
1363
|
-
static styles = [...j,
|
|
1391
|
+
static styles = [...j, Le];
|
|
1364
1392
|
static properties = {
|
|
1365
1393
|
...w.properties,
|
|
1366
1394
|
sport: { type: String },
|
|
@@ -1377,7 +1405,7 @@ class Qt extends w {
|
|
|
1377
1405
|
t && (this.pollDate = t);
|
|
1378
1406
|
}
|
|
1379
1407
|
async fetchData(t) {
|
|
1380
|
-
const e = this.season || et(), [s,
|
|
1408
|
+
const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
|
|
1381
1409
|
t.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
|
|
1382
1410
|
t.listSchools(),
|
|
1383
1411
|
t.listTeams({ sport: this.sport }),
|
|
@@ -1387,7 +1415,7 @@ class Qt extends w {
|
|
|
1387
1415
|
return {
|
|
1388
1416
|
season: e,
|
|
1389
1417
|
polls: d,
|
|
1390
|
-
schools:
|
|
1418
|
+
schools: r.items,
|
|
1391
1419
|
teams: o.items,
|
|
1392
1420
|
conferences: i.items,
|
|
1393
1421
|
games: n.items
|
|
@@ -1407,8 +1435,8 @@ class Qt extends w {
|
|
|
1407
1435
|
const n = e.map((p, f) => {
|
|
1408
1436
|
const u = (p.teamIds || []).indexOf(t);
|
|
1409
1437
|
if (u === -1) return null;
|
|
1410
|
-
const $ = e.length === 1 ? 96 / 2 : f / (e.length - 1) * 90 + 3,
|
|
1411
|
-
return { x: $, y:
|
|
1438
|
+
const $ = e.length === 1 ? 96 / 2 : f / (e.length - 1) * 90 + 3, at = 3 + u / 24 * 20;
|
|
1439
|
+
return { x: $, y: at };
|
|
1412
1440
|
}), d = [];
|
|
1413
1441
|
let c = [];
|
|
1414
1442
|
if (n.forEach((p) => {
|
|
@@ -1416,22 +1444,22 @@ class Qt extends w {
|
|
|
1416
1444
|
}), c.length && d.push(c), !d.length) return m;
|
|
1417
1445
|
const h = n[s];
|
|
1418
1446
|
return l`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
|
|
1419
|
-
${d.map((p) =>
|
|
1447
|
+
${d.map((p) => Pt`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
|
|
1420
1448
|
points=${p.map((f) => `${f.x.toFixed(1)},${f.y.toFixed(1)}`).join(" ")}></polyline>`)}
|
|
1421
|
-
${h ?
|
|
1449
|
+
${h ? Pt`<circle cx=${h.x.toFixed(1)} cy=${h.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
|
|
1422
1450
|
</svg>`;
|
|
1423
1451
|
}
|
|
1424
1452
|
movement(t, e, s) {
|
|
1425
|
-
const
|
|
1426
|
-
return
|
|
1453
|
+
const r = He(t, e, s);
|
|
1454
|
+
return r.kind === "up" ? l`<span class="delta up">▲ ${r.delta}</span>` : r.kind === "down" ? l`<span class="delta down">▼ ${r.delta}</span>` : r.kind === "new" ? l`<span class="delta new">NEW</span>` : r.kind === "same" ? l`<span class="delta same">—</span>` : l`<span class="delta same">·</span>`;
|
|
1427
1455
|
}
|
|
1428
1456
|
renderView() {
|
|
1429
1457
|
const t = this.ctx, e = this.data.polls;
|
|
1430
1458
|
if (!e.length) return l`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
|
|
1431
|
-
const s = Math.max(0, e.findIndex((p) => p.effectiveDate === this.pollDate)),
|
|
1459
|
+
const s = Math.max(0, e.findIndex((p) => p.effectiveDate === this.pollDate)), r = e[s] || e[0], o = e[s + 1] || null, i = e.slice().reverse(), n = i.indexOf(r), d = v(this.data.conferences), c = (r.teamIds || [])[0], h = c ? U(t, c) : null;
|
|
1432
1460
|
return l`
|
|
1433
|
-
${
|
|
1434
|
-
title: l`${
|
|
1461
|
+
${$t(this, t, {
|
|
1462
|
+
title: l`${z(this.sport)} Top 25`,
|
|
1435
1463
|
sub: l`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
|
|
1436
1464
|
teams: this.data.teams
|
|
1437
1465
|
})}
|
|
@@ -1442,7 +1470,7 @@ class Qt extends w {
|
|
|
1442
1470
|
<select id="pollsel" @change=${(p) => {
|
|
1443
1471
|
this.pollDate = p.target.value;
|
|
1444
1472
|
}}>
|
|
1445
|
-
${e.map((p, f) => l`<option value=${p.effectiveDate} ?selected=${p ===
|
|
1473
|
+
${e.map((p, f) => l`<option value=${p.effectiveDate} ?selected=${p === r}>
|
|
1446
1474
|
${y(p.effectiveDate, { month: "long", day: "numeric", year: "numeric" })}${f === 0 ? " · current" : ""}
|
|
1447
1475
|
</option>`)}
|
|
1448
1476
|
</select>
|
|
@@ -1457,22 +1485,22 @@ class Qt extends w {
|
|
|
1457
1485
|
<span class="spacer"></span>
|
|
1458
1486
|
<span class="asof">Movement vs. the previous poll · sparkline = season rank history</span>
|
|
1459
1487
|
</div>
|
|
1460
|
-
${h ? this.renderHero(t,
|
|
1488
|
+
${h ? this.renderHero(t, r, o, c, h, d) : m}
|
|
1461
1489
|
<div class="card"><div class="tablewrap"><table class="data">
|
|
1462
1490
|
<thead><tr>
|
|
1463
1491
|
<th class="num">Rk</th><th>Mvmt</th><th>Team</th><th class="num">Record</th>
|
|
1464
1492
|
<th>Conference</th><th>Last result</th><th>Next</th><th>Season</th>
|
|
1465
1493
|
</tr></thead>
|
|
1466
1494
|
<tbody>
|
|
1467
|
-
${(
|
|
1495
|
+
${(r.teamIds || []).map((p, f) => f === 0 || !p ? m : this.renderRow(t, r, o, i, n, d, p, f + 1))}
|
|
1468
1496
|
</tbody>
|
|
1469
1497
|
</table></div></div>
|
|
1470
1498
|
<p class="note">Ranks elsewhere on the site resolve the poll in effect on the game date, so past box scores keep the ranks they were played under.</p>
|
|
1471
1499
|
`)}
|
|
1472
1500
|
`;
|
|
1473
1501
|
}
|
|
1474
|
-
renderHero(t, e, s,
|
|
1475
|
-
const n = t.records[
|
|
1502
|
+
renderHero(t, e, s, r, o, i) {
|
|
1503
|
+
const n = t.records[r], d = Bt(t.records, r), c = i[t.teamsById[r]?.conferenceId], h = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
|
|
1476
1504
|
return l`
|
|
1477
1505
|
<div class="hero1" style="background:${h}">
|
|
1478
1506
|
<div class="bigrank">#1</div>
|
|
@@ -1483,21 +1511,21 @@ class Qt extends w {
|
|
|
1483
1511
|
${x(n)} overall${c ? l` · ${x(n, !0)} ${c.name}` : m}
|
|
1484
1512
|
· streak ${st(n?.results) || "·"}
|
|
1485
1513
|
${d ? l` · last: ${d.mark} ${d.my}-${d.their} vs ${Z(t, d.opp)}` : m}
|
|
1486
|
-
${this.movement(e, s,
|
|
1514
|
+
${this.movement(e, s, r)}
|
|
1487
1515
|
</div>
|
|
1488
1516
|
</div>
|
|
1489
1517
|
</div>
|
|
1490
1518
|
`;
|
|
1491
1519
|
}
|
|
1492
|
-
renderRow(t, e, s,
|
|
1520
|
+
renderRow(t, e, s, r, o, i, n, d) {
|
|
1493
1521
|
const c = U(t, n);
|
|
1494
1522
|
if (!c) return m;
|
|
1495
|
-
const h = t.records[n], p =
|
|
1523
|
+
const h = t.records[n], p = Bt(t.records, n), f = gt(this.data.games, n), u = i[t.teamsById[n]?.conferenceId], $ = () => {
|
|
1496
1524
|
location.href = g(t.hrefs.school, { id: c.id });
|
|
1497
1525
|
};
|
|
1498
1526
|
return l`
|
|
1499
|
-
<tr class="rowlink" @click=${(
|
|
1500
|
-
|
|
1527
|
+
<tr class="rowlink" @click=${(at) => {
|
|
1528
|
+
at.target.closest("a") || $();
|
|
1501
1529
|
}}>
|
|
1502
1530
|
<td class="num" style="font-weight:700">${d}</td>
|
|
1503
1531
|
<td>${this.movement(e, s, n)}</td>
|
|
@@ -1509,13 +1537,13 @@ class Qt extends w {
|
|
|
1509
1537
|
<b style="color:${p.mark === "W" ? "var(--hsot-win)" : p.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${p.mark}</b>
|
|
1510
1538
|
${p.my}-${p.their} vs ${Z(t, p.opp)}</a>` : l`<span class="mut">·</span>`}</td>
|
|
1511
1539
|
<td>${Vt(t, f, n)}</td>
|
|
1512
|
-
<td>${this.sparkline(n,
|
|
1540
|
+
<td>${this.sparkline(n, r, o)}</td>
|
|
1513
1541
|
</tr>
|
|
1514
1542
|
`;
|
|
1515
1543
|
}
|
|
1516
1544
|
}
|
|
1517
1545
|
globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", Qt);
|
|
1518
|
-
const
|
|
1546
|
+
const je = b`
|
|
1519
1547
|
.schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
|
|
1520
1548
|
.schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
|
|
1521
1549
|
.schoolhero .crest {
|
|
@@ -1541,7 +1569,7 @@ const Le = b`
|
|
|
1541
1569
|
@media (max-width: 900px) { .cols { grid-template-columns: 1fr; } .schoolhero h1 { font-size: 1.9rem; } }
|
|
1542
1570
|
`;
|
|
1543
1571
|
class Zt extends w {
|
|
1544
|
-
static styles = [...j,
|
|
1572
|
+
static styles = [...j, je];
|
|
1545
1573
|
static properties = {
|
|
1546
1574
|
...w.properties,
|
|
1547
1575
|
schoolId: { type: String, attribute: "school-id" },
|
|
@@ -1597,13 +1625,13 @@ class Zt extends w {
|
|
|
1597
1625
|
this.sport = t, this.load();
|
|
1598
1626
|
}
|
|
1599
1627
|
renderView() {
|
|
1600
|
-
const { school: t, teams: e, active: s, season:
|
|
1628
|
+
const { school: t, teams: e, active: s, season: r } = this.data;
|
|
1601
1629
|
if (!t) return l`<div class="view"><p class="empty">School not found.</p></div>`;
|
|
1602
1630
|
const o = this.ctx, i = K(t.colorPrimary || "#030711"), n = (t.adm || [])[0], d = v(this.data.conferences), c = s ? d[s.conferenceId] : null;
|
|
1603
1631
|
return l`
|
|
1604
1632
|
<div class="schoolhero" style="background:linear-gradient(115deg, ${t.colorPrimary || "#030711"} 0%, ${t.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${i}">
|
|
1605
1633
|
<div class="inner">
|
|
1606
|
-
${Q(t, 84) ? l`<img class="crest logo" alt="" loading="lazy" src=${Q(t, 84)} />` : l`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${K(t.colorSecondary || "#7C7C7C")}">${
|
|
1634
|
+
${Q(t, 84) ? l`<img class="crest logo" alt="" loading="lazy" src=${Q(t, 84)} />` : l`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${K(t.colorSecondary || "#7C7C7C")}">${ft(t)}</div>`}
|
|
1607
1635
|
<div style="min-width:260px">
|
|
1608
1636
|
<h1>${t.name} <span class="mascot">${t.mascot || ""}</span></h1>
|
|
1609
1637
|
<div class="facts">
|
|
@@ -1626,12 +1654,12 @@ class Zt extends w {
|
|
|
1626
1654
|
</div>
|
|
1627
1655
|
${q(this, l`
|
|
1628
1656
|
${G(this)}
|
|
1629
|
-
${s ? this.renderTeam(o, s, c,
|
|
1657
|
+
${s ? this.renderTeam(o, s, c, r) : l`<p class="empty">No teams recorded for this school yet.</p>`}
|
|
1630
1658
|
`)}
|
|
1631
1659
|
`;
|
|
1632
1660
|
}
|
|
1633
|
-
renderTeam(t, e, s,
|
|
1634
|
-
const o = t.records[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, i = o.w + o.l + o.t, n = s ? this.data.allTeams.filter((p) => p.conferenceId === s.id) : [], d = s ?
|
|
1661
|
+
renderTeam(t, e, s, r) {
|
|
1662
|
+
const o = t.records[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, i = o.w + o.l + o.t, n = s ? this.data.allTeams.filter((p) => p.conferenceId === s.id) : [], d = s ? qt(n, t.records).findIndex((p) => p.team.id === e.id) + 1 : 0, c = vt(t.rankings, t.teamsById, e.id, e.sport, null), h = this.data.games.filter((p) => p.homeTeamId === e.id || p.awayTeamId === e.id).sort((p, f) => String(p.date).localeCompare(String(f.date)));
|
|
1635
1663
|
return l`
|
|
1636
1664
|
<div class="tiles">
|
|
1637
1665
|
<div class="tile"><div class="k">Overall</div><div class="v">${x(o)}</div><div class="s">${i} games played</div></div>
|
|
@@ -1640,7 +1668,7 @@ class Zt extends w {
|
|
|
1640
1668
|
<div class="tile"><div class="k">Points</div><div class="v">${i ? (o.pf / i).toFixed(1) : "0.0"}</div>
|
|
1641
1669
|
<div class="s">scored per game · ${i ? (o.pa / i).toFixed(1) : "0.0"} allowed</div></div>
|
|
1642
1670
|
<div class="tile"><div class="k">Streak</div><div class="v">${st(o.results) || "·"}</div>
|
|
1643
|
-
<div class="s">last 5: ${
|
|
1671
|
+
<div class="s">last 5: ${yt(t, e.id)}</div></div>
|
|
1644
1672
|
<div class="tile"><div class="k">HSOT Top 25</div><div class="v">${c ? `#${c}` : "NR"}</div>
|
|
1645
1673
|
<div class="s"><a href=${g(t.hrefs.section, { sport: e.sport, view: "rankings" })}>full poll</a></div></div>
|
|
1646
1674
|
</div>
|
|
@@ -1652,30 +1680,30 @@ class Zt extends w {
|
|
|
1652
1680
|
<div>
|
|
1653
1681
|
<div class="section-title">Schedule & results</div>
|
|
1654
1682
|
<div class="card">
|
|
1655
|
-
${h.length ? l`<ul class="gamelist">${h.map((p) => this.renderGameRow(t, e, p))}</ul>` : l`<p class="empty">No ${e.sport} games recorded for ${
|
|
1683
|
+
${h.length ? l`<ul class="gamelist">${h.map((p) => this.renderGameRow(t, e, p))}</ul>` : l`<p class="empty">No ${e.sport} games recorded for ${r}.</p>`}
|
|
1656
1684
|
</div>
|
|
1657
1685
|
</div>
|
|
1658
1686
|
<div>
|
|
1659
|
-
<div class="section-title">Roster · ${
|
|
1660
|
-
<div class="card">${this.renderRoster(
|
|
1687
|
+
<div class="section-title">Roster · ${r}</div>
|
|
1688
|
+
<div class="card">${this.renderRoster(r)}</div>
|
|
1661
1689
|
</div>
|
|
1662
1690
|
</div>
|
|
1663
1691
|
`;
|
|
1664
1692
|
}
|
|
1665
1693
|
renderGameRow(t, e, s) {
|
|
1666
|
-
const
|
|
1667
|
-
let d = l`<span class="mut">${
|
|
1694
|
+
const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, i = r ? s.homeScore : s.awayScore, n = r ? s.awayScore : s.homeScore;
|
|
1695
|
+
let d = l`<span class="mut">${pt(s.time)}</span>`;
|
|
1668
1696
|
if (s.state === "final") {
|
|
1669
|
-
const h =
|
|
1697
|
+
const h = ut(s), p = h === "tie" ? "T" : h === (r ? "home" : "away") ? "W" : "L";
|
|
1670
1698
|
d = l`<span class=${p}>${p}</span> ${i}-${n}${s.finish === "overtime" ? l` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? l` <span class="mut">FF</span>` : m}`;
|
|
1671
1699
|
} else s.state === "live" && (d = l`<span style="color:var(--hsot-red)">${i}-${n}</span>`);
|
|
1672
1700
|
const c = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
|
|
1673
1701
|
return l`
|
|
1674
1702
|
<li>
|
|
1675
1703
|
<span class="d">${y(s.date)}</span>
|
|
1676
|
-
${
|
|
1704
|
+
${jt(s).kind === "sched" ? m : J(s)}
|
|
1677
1705
|
<span class="res">${d}</span>
|
|
1678
|
-
<span class="opp">${
|
|
1706
|
+
<span class="opp">${r ? "vs" : "at"} ${Gt(t, o, s.date)}
|
|
1679
1707
|
<span class="pill type">${c}</span>
|
|
1680
1708
|
${s.broadcast ? l`<span class="pill class">${s.broadcast}</span>` : m}
|
|
1681
1709
|
</span>
|
|
@@ -1688,12 +1716,12 @@ class Zt extends w {
|
|
|
1688
1716
|
const e = this.data.roster;
|
|
1689
1717
|
if (!e)
|
|
1690
1718
|
return l`<p class="empty">Roster not published for ${t}.</p>`;
|
|
1691
|
-
const s = v(this.data.players),
|
|
1719
|
+
const s = v(this.data.players), r = e.entries.slice().sort((o, i) => (o.number || 0) - (i.number || 0));
|
|
1692
1720
|
return l`
|
|
1693
1721
|
<div class="tablewrap"><table class="data">
|
|
1694
1722
|
<thead><tr><th class="num">No.</th><th>Player</th><th>Pos</th><th>Class</th><th class="num">Ht</th><th class="num">Wt</th></tr></thead>
|
|
1695
1723
|
<tbody>
|
|
1696
|
-
${
|
|
1724
|
+
${r.map((o) => {
|
|
1697
1725
|
const i = s[o.playerId];
|
|
1698
1726
|
return i ? l`<tr>
|
|
1699
1727
|
<td class="num mut">${o.number ?? "·"}</td>
|
|
@@ -1710,36 +1738,36 @@ class Zt extends w {
|
|
|
1710
1738
|
}
|
|
1711
1739
|
}
|
|
1712
1740
|
globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", Zt);
|
|
1713
|
-
const
|
|
1714
|
-
function
|
|
1715
|
-
return
|
|
1741
|
+
const We = "https://api.wral.com/search";
|
|
1742
|
+
function qe(a) {
|
|
1743
|
+
return a.map((t) => `uri:"${t}"`).join(" OR ");
|
|
1716
1744
|
}
|
|
1717
|
-
function
|
|
1718
|
-
const e = String(
|
|
1745
|
+
function Ge(a, t) {
|
|
1746
|
+
const e = String(a || We).replace(/\/+$/, ""), s = new URLSearchParams({ query: qe(t), sort: "score", lang: "en" });
|
|
1719
1747
|
return `${e}/v1/query?${s}`;
|
|
1720
1748
|
}
|
|
1721
|
-
function Jt(
|
|
1749
|
+
function Jt(a) {
|
|
1722
1750
|
try {
|
|
1723
|
-
const t = new URL(
|
|
1751
|
+
const t = new URL(a);
|
|
1724
1752
|
if (/(^|\.)smugmug\.com$/i.test(t.hostname)) {
|
|
1725
1753
|
const e = t.pathname.split("/").filter(Boolean).pop() || "", s = !e || /^[ni]-[A-Za-z0-9]+$/.test(e);
|
|
1726
1754
|
return {
|
|
1727
|
-
uri:
|
|
1728
|
-
title: s ?
|
|
1755
|
+
uri: a,
|
|
1756
|
+
title: s ? a : decodeURIComponent(e).replace(/-/g, " "),
|
|
1729
1757
|
photos: !0
|
|
1730
1758
|
};
|
|
1731
1759
|
}
|
|
1732
1760
|
} catch {
|
|
1733
1761
|
}
|
|
1734
|
-
return { uri:
|
|
1762
|
+
return { uri: a, title: a };
|
|
1735
1763
|
}
|
|
1736
|
-
async function
|
|
1737
|
-
const
|
|
1738
|
-
if (!
|
|
1739
|
-
const o = await
|
|
1764
|
+
async function Ve(a, t, e) {
|
|
1765
|
+
const r = await ((...n) => fetch(...n))(Ge(a, t));
|
|
1766
|
+
if (!r.ok) throw new Error(`search answered ${r.status}`);
|
|
1767
|
+
const o = await r.json(), i = new Map((o.items || []).map((n) => [n.uri, n]));
|
|
1740
1768
|
return t.map((n) => i.get(n) || Jt(n));
|
|
1741
1769
|
}
|
|
1742
|
-
const
|
|
1770
|
+
const Ye = b`
|
|
1743
1771
|
.breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
|
|
1744
1772
|
.breadcrumbs a { text-decoration: none; }
|
|
1745
1773
|
.scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
|
|
@@ -1779,7 +1807,7 @@ const Ve = b`
|
|
|
1779
1807
|
}
|
|
1780
1808
|
`;
|
|
1781
1809
|
class Xt extends w {
|
|
1782
|
-
static styles = [...j,
|
|
1810
|
+
static styles = [...j, Ye];
|
|
1783
1811
|
static properties = {
|
|
1784
1812
|
...w.properties,
|
|
1785
1813
|
gameId: { type: String, attribute: "game-id" },
|
|
@@ -1793,7 +1821,7 @@ class Xt extends w {
|
|
|
1793
1821
|
super(), this.gameId = "", this.searchApi = "";
|
|
1794
1822
|
}
|
|
1795
1823
|
async fetchData(t) {
|
|
1796
|
-
const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [
|
|
1824
|
+
const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, i, n, d, c] = await Promise.all([
|
|
1797
1825
|
t.listSchools(),
|
|
1798
1826
|
t.listTeams({ sport: e.sport }),
|
|
1799
1827
|
t.listConferences(),
|
|
@@ -1801,11 +1829,11 @@ class Xt extends w {
|
|
|
1801
1829
|
t.listGames({ sport: e.sport, season: e.season }),
|
|
1802
1830
|
// A search outage must not blank the box score — degrade to bare
|
|
1803
1831
|
// links (fetchCoverage already degrades per-URL index misses).
|
|
1804
|
-
s.length ?
|
|
1832
|
+
s.length ? Ve(this.searchApi, s).catch(() => s.map(Jt)) : Promise.resolve([])
|
|
1805
1833
|
]);
|
|
1806
1834
|
return {
|
|
1807
1835
|
game: e,
|
|
1808
|
-
schools:
|
|
1836
|
+
schools: r.items,
|
|
1809
1837
|
teams: o.items,
|
|
1810
1838
|
conferences: i.items,
|
|
1811
1839
|
rankings: n.items,
|
|
@@ -1826,18 +1854,18 @@ class Xt extends w {
|
|
|
1826
1854
|
renderView() {
|
|
1827
1855
|
const t = this.data.game;
|
|
1828
1856
|
if (!t) return l`<div class="view"><p class="empty">Game not found.</p></div>`;
|
|
1829
|
-
const e = this.ctx, s = v(this.data.conferences),
|
|
1857
|
+
const e = this.ctx, s = v(this.data.conferences), r = e.teamsById[t.awayTeamId] ? e.schoolsById[e.teamsById[t.awayTeamId].schoolId] : null, o = e.teamsById[t.homeTeamId] ? e.schoolsById[e.teamsById[t.homeTeamId].schoolId] : null, i = ut(t), n = (h) => t.state === "final" && i !== h && i !== "tie" ? "opacity:0.45" : "", d = t.conferenceId ? s[t.conferenceId] : null, c = this.data.games.filter((h) => h.id !== t.id && h.state === "final" && h.gameType !== "scrimmage" && (h.homeTeamId === t.homeTeamId && h.awayTeamId === t.awayTeamId || h.homeTeamId === t.awayTeamId && h.awayTeamId === t.homeTeamId));
|
|
1830
1858
|
return l`
|
|
1831
1859
|
${q(this, l`
|
|
1832
1860
|
${G(this)}
|
|
1833
1861
|
<p class="breadcrumbs">
|
|
1834
|
-
<a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>${
|
|
1862
|
+
<a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>${z(t.sport)}</a> /
|
|
1835
1863
|
<a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>Scores/Schedules</a> /
|
|
1836
|
-
${
|
|
1864
|
+
${E(e, t.awayTeamId)} at ${E(e, t.homeTeamId)}
|
|
1837
1865
|
</p>
|
|
1838
1866
|
<div class="card">
|
|
1839
1867
|
<div class="scorehead">
|
|
1840
|
-
${this.teamBlock(e, t, t.awayTeamId,
|
|
1868
|
+
${this.teamBlock(e, t, t.awayTeamId, r, !1)}
|
|
1841
1869
|
<div class="mid">
|
|
1842
1870
|
<div class="bigscore">
|
|
1843
1871
|
<span style=${n("away")}>${t.awayScore}</span>
|
|
@@ -1845,7 +1873,7 @@ class Xt extends w {
|
|
|
1845
1873
|
<span style=${n("home")}>${t.homeScore}</span>
|
|
1846
1874
|
</div>
|
|
1847
1875
|
<div class="status">${J(t)}</div>
|
|
1848
|
-
<div class="status">${y(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? l` · ${
|
|
1876
|
+
<div class="status">${y(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? l` · ${pt(t.time)}` : m} · ${t.venue || "Venue TBD"}
|
|
1849
1877
|
${t.broadcast ? l` · <span class="pill class">${t.broadcast}</span>` : m}</div>
|
|
1850
1878
|
<div class="status">
|
|
1851
1879
|
<span class="pill type">${t.gameType === "conference" ? `${d?.name || "Conference"} game` : t.gameType}</span>
|
|
@@ -1855,7 +1883,7 @@ class Xt extends w {
|
|
|
1855
1883
|
</div>
|
|
1856
1884
|
${this.teamBlock(e, t, t.homeTeamId, o, !0)}
|
|
1857
1885
|
</div>
|
|
1858
|
-
${this.renderLineScore(t,
|
|
1886
|
+
${this.renderLineScore(t, r, o)}
|
|
1859
1887
|
${t.notes ? l`<p class="note" style="padding:0 1rem 0.9rem;text-align:center">${t.notes}</p>` : m}
|
|
1860
1888
|
</div>
|
|
1861
1889
|
${(this.data.coverage || []).length ? l`
|
|
@@ -1876,39 +1904,39 @@ class Xt extends w {
|
|
|
1876
1904
|
</div>` : m}
|
|
1877
1905
|
<div class="section-title">Season context</div>
|
|
1878
1906
|
<div class="cols">
|
|
1879
|
-
${[[t.awayTeamId,
|
|
1907
|
+
${[[t.awayTeamId, r], [t.homeTeamId, o]].map(([h, p]) => this.renderContext(e, h, p))}
|
|
1880
1908
|
</div>
|
|
1881
1909
|
${c.length ? l`
|
|
1882
1910
|
<div class="section-title">Head to head this season</div>
|
|
1883
1911
|
<div class="card"><ul class="gamelist">
|
|
1884
1912
|
${c.map((h) => l`<li>
|
|
1885
1913
|
<span class="d">${y(h.date)}</span>${J(h)}
|
|
1886
|
-
<span class="opp">${
|
|
1914
|
+
<span class="opp">${E(e, h.awayTeamId)} ${h.awayScore}, ${E(e, h.homeTeamId)} ${h.homeScore}</span>
|
|
1887
1915
|
<a class="box" href=${g(e.hrefs.game, { sport: t.sport, id: h.id })}>Box score →</a>
|
|
1888
1916
|
</li>`)}
|
|
1889
1917
|
</ul></div>` : m}
|
|
1890
1918
|
`)}
|
|
1891
1919
|
`;
|
|
1892
1920
|
}
|
|
1893
|
-
teamBlock(t, e, s,
|
|
1894
|
-
if (!
|
|
1895
|
-
const i = t.teamsById[s], n = t.records[s], d = Q(
|
|
1921
|
+
teamBlock(t, e, s, r, o) {
|
|
1922
|
+
if (!r) return l`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
|
|
1923
|
+
const i = t.teamsById[s], n = t.records[s], d = Q(r, 58);
|
|
1896
1924
|
return l`
|
|
1897
1925
|
<div class="teamblock ${o ? "right" : ""}">
|
|
1898
|
-
${d ? l`<img class="crest logo" alt="" loading="lazy" src=${d} />` : l`<span class="crest" style="background:${
|
|
1926
|
+
${d ? l`<img class="crest logo" alt="" loading="lazy" src=${d} />` : l`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${K(r.colorPrimary || "#030711")}">${ft(r)}</span>`}
|
|
1899
1927
|
<div>
|
|
1900
|
-
<div class="tname">${
|
|
1901
|
-
<div class="trec">${
|
|
1928
|
+
<div class="tname">${bt(t, s, e.date)}<a href=${g(t.hrefs.school, { id: r.id })}>${r.name}</a></div>
|
|
1929
|
+
<div class="trec">${r.mascot || ""} · ${x(n)}${i?.conferenceId ? l` · ${x(n, !0)} conf` : m}</div>
|
|
1902
1930
|
</div>
|
|
1903
1931
|
</div>
|
|
1904
1932
|
`;
|
|
1905
1933
|
}
|
|
1906
1934
|
renderLineScore(t, e, s) {
|
|
1907
|
-
const
|
|
1908
|
-
if (!
|
|
1935
|
+
const r = t.periodScores || [];
|
|
1936
|
+
if (!r.length)
|
|
1909
1937
|
return l`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>`;
|
|
1910
|
-
const o = Math.max(4, ...
|
|
1911
|
-
const p =
|
|
1938
|
+
const o = Math.max(4, ...r.map((c) => c.period)), i = (c) => c <= 4 ? String(c) : `OT${c > 5 ? c - 4 : ""}`, n = (c, h) => {
|
|
1939
|
+
const p = r.find((f) => f.period === h);
|
|
1912
1940
|
return p ? p[c] : t.state === "final" ? 0 : "·";
|
|
1913
1941
|
}, d = (c, h, p) => l`
|
|
1914
1942
|
<tr>
|
|
@@ -1930,14 +1958,14 @@ class Xt extends w {
|
|
|
1930
1958
|
}
|
|
1931
1959
|
renderContext(t, e, s) {
|
|
1932
1960
|
if (!s) return m;
|
|
1933
|
-
const
|
|
1961
|
+
const r = t.records[e], o = gt(this.data.games, e);
|
|
1934
1962
|
return l`
|
|
1935
1963
|
<div class="card ctxcard">
|
|
1936
1964
|
<div class="who">${H(s)}${s.name}</div>
|
|
1937
1965
|
<div class="row">
|
|
1938
|
-
<span>Last 5: ${
|
|
1939
|
-
<span>Streak: <b>${
|
|
1940
|
-
<span>PF/PA: <b>${
|
|
1966
|
+
<span>Last 5: ${yt(t, e)}</span>
|
|
1967
|
+
<span>Streak: <b>${r ? st(r.results) : "·"}</b></span>
|
|
1968
|
+
<span>PF/PA: <b>${r ? `${r.pf} / ${r.pa}` : "·"}</b></span>
|
|
1941
1969
|
<span>Next: ${o ? l`${y(o.date, { month: "numeric", day: "numeric" })}
|
|
1942
1970
|
${o.homeTeamId === e ? "vs" : "at"} ${Z(t, o.homeTeamId === e ? o.awayTeamId : o.homeTeamId)}` : "·"}</span>
|
|
1943
1971
|
</div>
|
|
@@ -1946,8 +1974,8 @@ class Xt extends w {
|
|
|
1946
1974
|
}
|
|
1947
1975
|
}
|
|
1948
1976
|
globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", Xt);
|
|
1949
|
-
const
|
|
1950
|
-
class te extends
|
|
1977
|
+
const Ke = 250, Qe = 2;
|
|
1978
|
+
class te extends C {
|
|
1951
1979
|
static properties = {
|
|
1952
1980
|
api: { type: String },
|
|
1953
1981
|
schoolHref: { type: String, attribute: "school-href" },
|
|
@@ -2027,11 +2055,11 @@ class te extends E {
|
|
|
2027
2055
|
}
|
|
2028
2056
|
onInput(t) {
|
|
2029
2057
|
const e = t.target.value.trim();
|
|
2030
|
-
if (clearTimeout(this.debounceTimer), e.length <
|
|
2058
|
+
if (clearTimeout(this.debounceTimer), e.length < Qe) {
|
|
2031
2059
|
this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
|
|
2032
2060
|
return;
|
|
2033
2061
|
}
|
|
2034
|
-
this.debounceTimer = setTimeout(() => this.search(e),
|
|
2062
|
+
this.debounceTimer = setTimeout(() => this.search(e), Ke);
|
|
2035
2063
|
}
|
|
2036
2064
|
async search(t) {
|
|
2037
2065
|
this.abortController?.abort(), this.abortController = new AbortController();
|
|
@@ -2041,8 +2069,8 @@ class te extends E {
|
|
|
2041
2069
|
});
|
|
2042
2070
|
if (!s.ok)
|
|
2043
2071
|
return;
|
|
2044
|
-
const
|
|
2045
|
-
this.results =
|
|
2072
|
+
const r = await s.json();
|
|
2073
|
+
this.results = r.items || [], this.activeIndex = -1, this.searched = !0, this.open = !0;
|
|
2046
2074
|
} catch (e) {
|
|
2047
2075
|
e.name !== "AbortError" && console.warn("school search failed", e);
|
|
2048
2076
|
}
|
|
@@ -2076,7 +2104,7 @@ class te extends E {
|
|
|
2076
2104
|
return [t.location, t.county && `${t.county} County`].filter(Boolean).join(" — ");
|
|
2077
2105
|
}
|
|
2078
2106
|
renderOption(t, e) {
|
|
2079
|
-
const s = this.where(t),
|
|
2107
|
+
const s = this.where(t), r = (o) => {
|
|
2080
2108
|
o.preventDefault(), this.go(t);
|
|
2081
2109
|
};
|
|
2082
2110
|
return l`
|
|
@@ -2084,7 +2112,7 @@ class te extends E {
|
|
|
2084
2112
|
id="school-option-${e}"
|
|
2085
2113
|
role="option"
|
|
2086
2114
|
aria-selected="${e === this.activeIndex ? "true" : "false"}"
|
|
2087
|
-
@pointerdown="${
|
|
2115
|
+
@pointerdown="${r}"
|
|
2088
2116
|
@mousemove="${() => {
|
|
2089
2117
|
this.activeIndex = e;
|
|
2090
2118
|
}}"
|
|
@@ -2098,7 +2126,7 @@ class te extends E {
|
|
|
2098
2126
|
const t = this.searched && !this.results.length, e = l`<li class="empty">No schools found</li>`;
|
|
2099
2127
|
return l`
|
|
2100
2128
|
<ul id="school-search-listbox" role="listbox" aria-label="Schools">
|
|
2101
|
-
${this.results.map((s,
|
|
2129
|
+
${this.results.map((s, r) => this.renderOption(s, r))}
|
|
2102
2130
|
${t ? e : m}
|
|
2103
2131
|
</ul>
|
|
2104
2132
|
`;
|
|
@@ -2125,7 +2153,7 @@ class te extends E {
|
|
|
2125
2153
|
}
|
|
2126
2154
|
}
|
|
2127
2155
|
globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", te);
|
|
2128
|
-
const
|
|
2156
|
+
const Ze = {
|
|
2129
2157
|
"hsot-scores": Yt,
|
|
2130
2158
|
"hsot-standings": Kt,
|
|
2131
2159
|
"hsot-rankings": Qt,
|
|
@@ -2133,13 +2161,13 @@ const Qe = {
|
|
|
2133
2161
|
"hsot-boxscore": Xt,
|
|
2134
2162
|
"hsot-school-search": te
|
|
2135
2163
|
};
|
|
2136
|
-
function
|
|
2137
|
-
const
|
|
2138
|
-
if (
|
|
2139
|
-
for (const [t, e] of Object.entries(
|
|
2140
|
-
|
|
2164
|
+
function Je() {
|
|
2165
|
+
const a = globalThis?.customElements;
|
|
2166
|
+
if (a)
|
|
2167
|
+
for (const [t, e] of Object.entries(Ze))
|
|
2168
|
+
a.get(t) || a.define(t, e);
|
|
2141
2169
|
}
|
|
2142
|
-
typeof window < "u" && globalThis.customElements &&
|
|
2170
|
+
typeof window < "u" && globalThis.customElements && Je();
|
|
2143
2171
|
export {
|
|
2144
|
-
|
|
2172
|
+
Je as defineAll
|
|
2145
2173
|
};
|