@wral/hsot-data 0.1.6 → 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
|
|
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
|
-
},
|
|
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
|
-
return
|
|
37
|
-
})(
|
|
38
|
-
const { is:
|
|
36
|
+
return ee(e);
|
|
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,46 +72,46 @@ 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;
|
|
97
|
-
const t =
|
|
97
|
+
const t = le(this);
|
|
98
98
|
t.finalize(), t.l !== void 0 && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
|
|
99
99
|
}
|
|
100
100
|
static finalize() {
|
|
101
101
|
if (this.hasOwnProperty(B("finalized"))) return;
|
|
102
102
|
if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(B("properties"))) {
|
|
103
|
-
const e = this.properties, s = [...
|
|
104
|
-
for (const
|
|
103
|
+
const e = this.properties, s = [...ie(e), ...ne(e)];
|
|
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) {
|
|
@@ -146,7 +146,7 @@ let I = class extends HTMLElement {
|
|
|
146
146
|
}
|
|
147
147
|
createRenderRoot() {
|
|
148
148
|
const t = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);
|
|
149
|
-
return
|
|
149
|
+
return se(t, this.constructor.elementStyles), t;
|
|
150
150
|
}
|
|
151
151
|
connectedCallback() {
|
|
152
152
|
this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(!0), this._$EO?.forEach((t) => t.hostConnected?.());
|
|
@@ -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 (
|
|
165
|
-
const o = (s.converter?.toAttribute !== void 0 ? s.converter :
|
|
166
|
-
this._$Em = t, o == null ? this.removeAttribute(
|
|
163
|
+
const s = this.constructor.elementProperties.get(t), r = this.constructor._$Eu(t, s);
|
|
164
|
+
if (r !== void 0 && s.reflect === !0) {
|
|
165
|
+
const o = (s.converter?.toAttribute !== void 0 ? s.converter : it).toAttribute(e, s.type);
|
|
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;
|
|
@@ -246,54 +246,54 @@ let I = class extends HTMLElement {
|
|
|
246
246
|
firstUpdated(t) {
|
|
247
247
|
}
|
|
248
248
|
};
|
|
249
|
-
I.elementStyles = [], I.shadowRootOptions = { mode: "open" }, I[B("elementProperties")] = /* @__PURE__ */ new Map(), I[B("finalized")] = /* @__PURE__ */ new Map(),
|
|
250
|
-
const
|
|
251
|
-
\f\r]`, R = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,
|
|
252
|
-
\f\r"'\`<>=]|("|')|))|$)`, "g"),
|
|
253
|
-
function
|
|
254
|
-
if (!
|
|
255
|
-
return
|
|
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 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
|
|
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 === R ? h[1] === "!--" ? i =
|
|
264
|
-
const u = i === S &&
|
|
265
|
-
o += i === R ? d +
|
|
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
|
-
const n = t.length - 1, d = this.parts, [c, h] =
|
|
274
|
+
const n = t.length - 1, d = this.parts, [c, h] = me(t, e);
|
|
275
275
|
if (this.el = O.createElement(c, s), A.currentNode = this.el.content, e === 2 || e === 3) {
|
|
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] === "." ?
|
|
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,13 +303,13 @@ 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
|
-
class
|
|
312
|
+
class fe {
|
|
313
313
|
constructor(t, e) {
|
|
314
314
|
this._$AV = [], this._$AN = void 0, this._$AD = t, this._$AM = e;
|
|
315
315
|
}
|
|
@@ -320,17 +320,17 @@ class me {
|
|
|
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) {
|
|
328
328
|
let c;
|
|
329
|
-
d.type === 2 ? c = new M(o, o.nextSibling, this, t) : d.type === 1 ? c = new d.ctor(o, d.name, d.strings, this, t) : d.type === 6 && (c = new
|
|
329
|
+
d.type === 2 ? c = new M(o, o.nextSibling, this, t) : d.type === 1 ? c = new d.ctor(o, d.name, d.strings, this, t) : d.type === 6 && (c = new $e(o, this, t)), this._$AV.push(c), d = s[++n];
|
|
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
|
|
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,25 +403,25 @@ 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 ?? "");
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
|
-
class
|
|
424
|
+
class ue extends tt {
|
|
425
425
|
constructor() {
|
|
426
426
|
super(...arguments), this.type = 3;
|
|
427
427
|
}
|
|
@@ -429,7 +429,7 @@ class fe extends tt {
|
|
|
429
429
|
this.element[this.name] = t === m ? void 0 : t;
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
|
-
class
|
|
432
|
+
class ge extends tt {
|
|
433
433
|
constructor() {
|
|
434
434
|
super(...arguments), this.type = 4;
|
|
435
435
|
}
|
|
@@ -437,20 +437,20 @@ class ue extends tt {
|
|
|
437
437
|
this.element.toggleAttribute(this.name, !!t && t !== m);
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
|
-
class
|
|
441
|
-
constructor(t, e, s,
|
|
442
|
-
super(t, e, s,
|
|
440
|
+
class ve extends tt {
|
|
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);
|
|
451
451
|
}
|
|
452
452
|
}
|
|
453
|
-
class
|
|
453
|
+
class $e {
|
|
454
454
|
constructor(t, e, s) {
|
|
455
455
|
this.element = t, this.type = 6, this._$AN = void 0, this._$AM = e, this.options = s;
|
|
456
456
|
}
|
|
@@ -458,22 +458,22 @@ class ve {
|
|
|
458
458
|
return this._$AM._$AU;
|
|
459
459
|
}
|
|
460
460
|
_$AI(t) {
|
|
461
|
-
|
|
461
|
+
D(this, t);
|
|
462
462
|
}
|
|
463
463
|
}
|
|
464
|
-
const
|
|
465
|
-
|
|
466
|
-
const
|
|
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
|
}
|
|
@@ -483,7 +483,7 @@ class E extends I {
|
|
|
483
483
|
}
|
|
484
484
|
update(t) {
|
|
485
485
|
const e = this.render();
|
|
486
|
-
this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do =
|
|
486
|
+
this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do = ye(e, this.renderRoot, this.renderOptions);
|
|
487
487
|
}
|
|
488
488
|
connectedCallback() {
|
|
489
489
|
super.connectedCallback(), this._$Do?.setConnected(!0);
|
|
@@ -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
|
|
500
|
-
|
|
501
|
-
(
|
|
502
|
-
const
|
|
503
|
-
function
|
|
504
|
-
const t = Object.entries(
|
|
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
|
+
const xe = 50;
|
|
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
|
|
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;
|
|
@@ -522,8 +522,8 @@ function ke({ baseUrl: r, token: t = "", fetchFn: e } = {}) {
|
|
|
522
522
|
async function i(n, d = {}) {
|
|
523
523
|
const c = [];
|
|
524
524
|
let h = null;
|
|
525
|
-
for (let p = 0; p <
|
|
526
|
-
const f =
|
|
525
|
+
for (let p = 0; p < xe; p += 1) {
|
|
526
|
+
const f = ke(h ? { ...d, cursor: h } : d), u = await o(`${n}${f}`);
|
|
527
527
|
if (c.push(...u.items || []), h = u.nextCursor || null, !h) break;
|
|
528
528
|
}
|
|
529
529
|
return { items: c, total: c.length, nextCursor: null };
|
|
@@ -544,117 +544,117 @@ function ke({ baseUrl: r, token: t = "", fetchFn: e } = {}) {
|
|
|
544
544
|
listSports: () => o("/sports")
|
|
545
545
|
};
|
|
546
546
|
}
|
|
547
|
-
const
|
|
547
|
+
const ot = {
|
|
548
548
|
game: "/{sport}/game/{id}/",
|
|
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
|
|
576
|
-
return
|
|
575
|
+
function Se(a) {
|
|
576
|
+
return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
|
|
577
577
|
}
|
|
578
|
-
function
|
|
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
|
|
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
|
|
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
621
|
function Wt() {
|
|
622
|
-
const
|
|
623
|
-
if (!
|
|
624
|
-
const t = (
|
|
625
|
-
return _((
|
|
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" },
|
|
@@ -673,7 +673,7 @@ class w extends E {
|
|
|
673
673
|
this._client = t, this.isConnected && this.load();
|
|
674
674
|
}
|
|
675
675
|
get client() {
|
|
676
|
-
return this._client ? this._client : this.api ?
|
|
676
|
+
return this._client ? this._client : this.api ? _e({ baseUrl: this.api }) : null;
|
|
677
677
|
}
|
|
678
678
|
connectedCallback() {
|
|
679
679
|
super.connectedCallback(), this._setupInterval();
|
|
@@ -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);
|
|
@@ -758,7 +758,7 @@ const v = (r) => Object.fromEntries((r || []).map((t) => [t.id, t])), De = b`
|
|
|
758
758
|
outline-offset: 1px;
|
|
759
759
|
}
|
|
760
760
|
.mut { color: var(--hsot-gray-5); }
|
|
761
|
-
`,
|
|
761
|
+
`, ze = b`
|
|
762
762
|
.band { background: var(--hsot-white); color: var(--hsot-black); }
|
|
763
763
|
.band .inner { max-width: 1366px; margin: 0 auto; padding: 1.1rem 1.25rem 0; }
|
|
764
764
|
.band h1, .band h2.bandtitle {
|
|
@@ -807,7 +807,7 @@ const v = (r) => Object.fromEntries((r || []).map((t) => [t.id, t])), De = b`
|
|
|
807
807
|
@media (max-width: 720px) {
|
|
808
808
|
.band h1, .band h2.bandtitle, .band.section h1, .band.section h2.bandtitle { font-size: 1.8rem; }
|
|
809
809
|
}
|
|
810
|
-
`,
|
|
810
|
+
`, Re = b`
|
|
811
811
|
.view { max-width: 1366px; margin: 0 auto; padding: 1.25rem; box-sizing: border-box; }
|
|
812
812
|
/* Optional right rail (slot="rail" light-DOM children): a divided 300px
|
|
813
813
|
column on desktop, stacked under the view content on smaller screens. */
|
|
@@ -937,22 +937,58 @@ const v = (r) => Object.fromEntries((r || []).map((t) => [t.id, t])), De = b`
|
|
|
937
937
|
.gamelist li:last-child { border-bottom: none; }
|
|
938
938
|
.gamelist .d { width: 84px; flex: none; color: var(--hsot-gray-5); font-size: 0.8rem; }
|
|
939
939
|
.gamelist .res { width: 86px; flex: none; font-family: var(--hsot-heading-font); font-weight: 700; }
|
|
940
|
+
/* Per-team score block on the scoreboard, in the status pills' bubble shape. */
|
|
941
|
+
.gamelist .score {
|
|
942
|
+
display: inline-block; min-width: 1.15em; text-align: center;
|
|
943
|
+
background: var(--hsot-red); color: var(--hsot-white);
|
|
944
|
+
font-family: var(--hsot-heading-font); font-weight: 700; font-size: 0.8125rem;
|
|
945
|
+
line-height: 1.2; border-radius: var(--hsot-radius-md); padding: 0.14rem 0.4rem;
|
|
946
|
+
margin-left: 0.45rem; vertical-align: middle; font-variant-numeric: tabular-nums;
|
|
947
|
+
}
|
|
940
948
|
.gamelist .res .W { color: var(--hsot-win); }
|
|
941
949
|
.gamelist .res .L { color: var(--hsot-loss); }
|
|
942
950
|
.gamelist .res .T { color: var(--hsot-tie); }
|
|
943
951
|
.gamelist .opp { flex: 1; min-width: 180px; }
|
|
944
952
|
.gamelist .opp a { text-decoration: none; color: inherit; font-weight: 500; }
|
|
945
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; }
|
|
946
979
|
.gamelist .where { color: var(--hsot-gray-5); font-size: 0.78rem; }
|
|
947
980
|
.gamelist a.box { font-size: 0.78rem; }
|
|
948
|
-
`, j = [De,
|
|
949
|
-
function
|
|
950
|
-
return
|
|
981
|
+
`, j = [De, ze, Re, Be, Fe, Ne, Oe];
|
|
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";
|
|
951
984
|
}
|
|
952
|
-
function
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
985
|
+
function Ue(a) {
|
|
986
|
+
return !a || !a.forfeit || a.forfeit === "none" ? null : a.forfeit === "home" ? "away" : a.forfeit === "away" ? "home" : null;
|
|
987
|
+
}
|
|
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";
|
|
956
992
|
for (const d of ["home", "away"]) {
|
|
957
993
|
const c = d === "home" ? o.homeTeamId : o.awayTeamId;
|
|
958
994
|
if (!c) continue;
|
|
@@ -964,41 +1000,41 @@ function W(r, t) {
|
|
|
964
1000
|
}
|
|
965
1001
|
return e;
|
|
966
1002
|
}
|
|
967
|
-
function
|
|
968
|
-
if (!
|
|
969
|
-
const t =
|
|
1003
|
+
function st(a) {
|
|
1004
|
+
if (!a || !a.length) return "";
|
|
1005
|
+
const t = a[a.length - 1].mark;
|
|
970
1006
|
let e = 0;
|
|
971
|
-
for (let s =
|
|
1007
|
+
for (let s = a.length - 1; s >= 0 && a[s].mark === t; s -= 1) e += 1;
|
|
972
1008
|
return t + e;
|
|
973
1009
|
}
|
|
974
|
-
const zt = (
|
|
975
|
-
const s =
|
|
976
|
-
return s ? (
|
|
977
|
-
},
|
|
978
|
-
function x(
|
|
979
|
-
if (!
|
|
980
|
-
const e = t ?
|
|
981
|
-
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}` : ""}`;
|
|
982
1018
|
}
|
|
983
|
-
function qt(
|
|
984
|
-
return
|
|
1019
|
+
function qt(a, t) {
|
|
1020
|
+
return a.map((e) => {
|
|
985
1021
|
const s = t[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
|
|
986
1022
|
return { team: e, rec: s, confPct: zt(s.cw, s.cl, s.ct), overallPct: zt(s.w, s.l, s.t) };
|
|
987
1023
|
}).sort((e, s) => s.confPct - e.confPct || s.overallPct - e.overallPct || s.rec.pf - s.rec.pa - (e.rec.pf - e.rec.pa));
|
|
988
1024
|
}
|
|
989
|
-
function
|
|
990
|
-
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;
|
|
991
1027
|
}
|
|
992
|
-
function
|
|
993
|
-
const e =
|
|
1028
|
+
function Bt(a, t) {
|
|
1029
|
+
const e = a[t];
|
|
994
1030
|
return e && e.results.length ? e.results[e.results.length - 1] : null;
|
|
995
1031
|
}
|
|
996
|
-
function
|
|
1032
|
+
function vt(a, t, e, s, r) {
|
|
997
1033
|
const o = t[e];
|
|
998
1034
|
if (!o) return null;
|
|
999
1035
|
const i = /* @__PURE__ */ new Map();
|
|
1000
|
-
for (const d of
|
|
1001
|
-
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;
|
|
1002
1038
|
const c = d.gender || "", h = i.get(c);
|
|
1003
1039
|
(!h || d.effectiveDate > h.effectiveDate) && i.set(c, d);
|
|
1004
1040
|
}
|
|
@@ -1009,27 +1045,27 @@ function $t(r, t, e, s, a) {
|
|
|
1009
1045
|
}
|
|
1010
1046
|
return n ? n.rank : null;
|
|
1011
1047
|
}
|
|
1012
|
-
function
|
|
1013
|
-
if (!
|
|
1014
|
-
const s = (
|
|
1048
|
+
function He(a, t, e) {
|
|
1049
|
+
if (!a) return { kind: "none", delta: 0 };
|
|
1050
|
+
const s = (a.teamIds || []).indexOf(e) + 1;
|
|
1015
1051
|
if (!s) return { kind: "none", delta: 0 };
|
|
1016
1052
|
if (!t) return { kind: "same", delta: 0 };
|
|
1017
|
-
const
|
|
1018
|
-
if (!
|
|
1019
|
-
const o =
|
|
1053
|
+
const r = (t.teamIds || []).indexOf(e) + 1;
|
|
1054
|
+
if (!r) return { kind: "new", delta: 0 };
|
|
1055
|
+
const o = r - s;
|
|
1020
1056
|
return o > 0 ? { kind: "up", delta: o } : o < 0 ? { kind: "down", delta: -o } : { kind: "same", delta: 0 };
|
|
1021
1057
|
}
|
|
1022
|
-
function
|
|
1023
|
-
return /^https?:\/\//i.test(String(
|
|
1058
|
+
function Me(a) {
|
|
1059
|
+
return /^https?:\/\//i.test(String(a || ""));
|
|
1024
1060
|
}
|
|
1025
|
-
function Q(
|
|
1026
|
-
const e =
|
|
1027
|
-
if (!
|
|
1028
|
-
const s = Math.max(1, Math.round(t * 2)),
|
|
1029
|
-
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`;
|
|
1030
1066
|
}
|
|
1031
|
-
function
|
|
1032
|
-
const o = Wt(), n = !!
|
|
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;
|
|
1033
1069
|
return l`
|
|
1034
1070
|
<div class="band section">
|
|
1035
1071
|
<div class="inner">
|
|
@@ -1037,10 +1073,10 @@ function bt(r, t, { title: e, sub: s, teams: a }) {
|
|
|
1037
1073
|
${s ? l`<p class="sub">${s}</p>` : m}
|
|
1038
1074
|
</div>
|
|
1039
1075
|
${n ? l`
|
|
1040
|
-
<nav class="sectionnav" aria-label="${
|
|
1076
|
+
<nav class="sectionnav" aria-label="${z(t.sport)} section">
|
|
1041
1077
|
<div class="navrow">
|
|
1042
1078
|
<slot name="nav">
|
|
1043
|
-
${Ce(t.sport,
|
|
1079
|
+
${Ce(t.sport, r, t.hrefs).map((d) => l`<a href=${d.href}
|
|
1044
1080
|
aria-current=${o && _(d.href) === o ? "page" : m}>${d.label}</a>`)}
|
|
1045
1081
|
</slot>
|
|
1046
1082
|
</div>
|
|
@@ -1048,60 +1084,60 @@ function bt(r, t, { title: e, sub: s, teams: a }) {
|
|
|
1048
1084
|
</div>
|
|
1049
1085
|
`;
|
|
1050
1086
|
}
|
|
1051
|
-
const U = (
|
|
1052
|
-
const e =
|
|
1053
|
-
return e ?
|
|
1054
|
-
},
|
|
1055
|
-
function H(
|
|
1056
|
-
if (!
|
|
1057
|
-
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);
|
|
1058
1094
|
if (e)
|
|
1059
1095
|
return l`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
|
|
1060
1096
|
src=${e} style="width:${t}px;height:${t}px" />`;
|
|
1061
|
-
const s =
|
|
1097
|
+
const s = a.colorPrimary || "#030711", r = K(s);
|
|
1062
1098
|
return l`<span class="swatch" aria-hidden="true"
|
|
1063
|
-
style="width:${t}px;height:${t}px;background:${s};color:${
|
|
1064
|
-
>${
|
|
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>`;
|
|
1065
1101
|
}
|
|
1066
|
-
function
|
|
1067
|
-
const s =
|
|
1102
|
+
function bt(a, t, e) {
|
|
1103
|
+
const s = vt(a.rankings, a.teamsById, t, a.sport, e);
|
|
1068
1104
|
return s ? l`<span class="rankbadge">#${s}</span>` : m;
|
|
1069
1105
|
}
|
|
1070
|
-
function
|
|
1071
|
-
const s = U(
|
|
1072
|
-
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>`;
|
|
1073
1109
|
}
|
|
1074
|
-
function
|
|
1075
|
-
const s =
|
|
1110
|
+
function yt(a, t, e = 5) {
|
|
1111
|
+
const s = a.records[t];
|
|
1076
1112
|
if (!s || !s.results.length) return l`<span class="mut">·</span>`;
|
|
1077
|
-
const
|
|
1078
|
-
return l`<span class="dots" role="img" aria-label="last ${
|
|
1079
|
-
${
|
|
1080
|
-
title="${o.mark} ${o.my}-${o.their} vs ${
|
|
1081
|
-
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>`)}
|
|
1082
1118
|
</span>`;
|
|
1083
1119
|
}
|
|
1084
|
-
function q(
|
|
1085
|
-
return
|
|
1120
|
+
function q(a, t) {
|
|
1121
|
+
return a.querySelector(':scope > [slot="rail"]') ? l`<div class="view withrail">
|
|
1086
1122
|
<div class="viewmain">${t}</div>
|
|
1087
1123
|
<aside class="viewrail"><slot name="rail"></slot></aside>
|
|
1088
1124
|
</div>` : l`<div class="view">${t}</div>`;
|
|
1089
1125
|
}
|
|
1090
|
-
function G(
|
|
1091
|
-
if (!
|
|
1092
|
-
const t = l`<img src=${
|
|
1093
|
-
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>`;
|
|
1094
1130
|
}
|
|
1095
|
-
function J(
|
|
1096
|
-
const t =
|
|
1131
|
+
function J(a) {
|
|
1132
|
+
const t = jt(a);
|
|
1097
1133
|
return l`<span class="pill ${t.kind}">${t.label}</span>`;
|
|
1098
1134
|
}
|
|
1099
|
-
function
|
|
1135
|
+
function Vt(a, t, e) {
|
|
1100
1136
|
if (!t) return l`<span class="mut">·</span>`;
|
|
1101
|
-
const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId,
|
|
1102
|
-
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)}`;
|
|
1103
1139
|
}
|
|
1104
|
-
class
|
|
1140
|
+
class Yt extends w {
|
|
1105
1141
|
static styles = j;
|
|
1106
1142
|
static properties = {
|
|
1107
1143
|
...w.properties,
|
|
@@ -1120,17 +1156,17 @@ class Vt extends w {
|
|
|
1120
1156
|
this._datePinned = !!this.date;
|
|
1121
1157
|
}
|
|
1122
1158
|
async fetchData(t) {
|
|
1123
|
-
const e = this.season ||
|
|
1159
|
+
const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
|
|
1124
1160
|
t.listSchools(),
|
|
1125
1161
|
t.listTeams({ sport: this.sport }),
|
|
1126
1162
|
t.listConferences(),
|
|
1127
1163
|
t.listGames({ sport: this.sport, season: e }),
|
|
1128
1164
|
t.listRankings({ sport: this.sport })
|
|
1129
1165
|
]);
|
|
1130
|
-
return this._datePinned || (this.date =
|
|
1166
|
+
return this._datePinned || (this.date = Ae(i.items.map((d) => d.date)), this._datePinned = !0), {
|
|
1131
1167
|
season: e,
|
|
1132
1168
|
schools: s.items,
|
|
1133
|
-
teams:
|
|
1169
|
+
teams: r.items,
|
|
1134
1170
|
conferences: o.items,
|
|
1135
1171
|
games: i.items,
|
|
1136
1172
|
rankings: n.items
|
|
@@ -1147,9 +1183,9 @@ class Vt extends w {
|
|
|
1147
1183
|
}, this._ctxData = this.data), this._ctx;
|
|
1148
1184
|
}
|
|
1149
1185
|
renderView() {
|
|
1150
|
-
const t = this.ctx, e = v(this.data.conferences), s = [...new Set(this.data.games.map((c) => c.date).filter(Boolean))].sort(),
|
|
1151
|
-
const h = [c.awayTeamId, c.homeTeamId].map((p) =>
|
|
1152
|
-
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;
|
|
1153
1189
|
}, i = this.data.games.filter((c) => c.date === this.date), n = new Map(i.map((c) => [c, o(c)]));
|
|
1154
1190
|
i.sort((c, h) => (c.state === "live" ? 0 : 1) - (h.state === "live" ? 0 : 1) || n.get(c) - n.get(h));
|
|
1155
1191
|
const d = /* @__PURE__ */ new Map();
|
|
@@ -1157,8 +1193,8 @@ class Vt extends w {
|
|
|
1157
1193
|
const h = c.gameType === "conference" && c.conferenceId ? e[c.conferenceId]?.name || "Conference" : c.gameType === "playoff" ? "Playoffs" : c.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
|
|
1158
1194
|
d.has(h) || d.set(h, []), d.get(h).push(c);
|
|
1159
1195
|
}), l`
|
|
1160
|
-
${
|
|
1161
|
-
title: l`${
|
|
1196
|
+
${$t(this, t, {
|
|
1197
|
+
title: l`${z(this.sport)} scores & schedules`,
|
|
1162
1198
|
sub: l`${y(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${i.length} games`,
|
|
1163
1199
|
teams: this.data.teams
|
|
1164
1200
|
})}
|
|
@@ -1170,7 +1206,7 @@ class Vt extends w {
|
|
|
1170
1206
|
this.date = c.target.value;
|
|
1171
1207
|
}}>
|
|
1172
1208
|
${(s.includes(this.date) ? s : [...s, this.date].sort()).map((c) => l`<option value=${c} ?selected=${c === this.date}>
|
|
1173
|
-
${y(c, { weekday: "short", month: "short", day: "numeric" })}${c ===
|
|
1209
|
+
${y(c, { weekday: "short", month: "short", day: "numeric" })}${c === mt() ? " · today" : ""}
|
|
1174
1210
|
</option>`)}
|
|
1175
1211
|
</select>
|
|
1176
1212
|
<button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
|
|
@@ -1194,13 +1230,16 @@ class Vt extends w {
|
|
|
1194
1230
|
`)}
|
|
1195
1231
|
`;
|
|
1196
1232
|
}
|
|
1233
|
+
// Each team's score rides in a block beside its name (reader feedback:
|
|
1234
|
+
// a lone score column on the far right read as detached from the teams).
|
|
1235
|
+
// Scheduled games carry their start time on the status pill alone.
|
|
1197
1236
|
renderGame(t, e) {
|
|
1198
|
-
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);
|
|
1199
1238
|
return l`
|
|
1200
1239
|
<li>
|
|
1201
1240
|
${J(e)}
|
|
1202
|
-
<span class="opp">${
|
|
1203
|
-
|
|
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}
|
|
1204
1243
|
<span class="where">${e.venue || ""}</span>
|
|
1205
1244
|
${e.broadcast ? l`<span class="pill class">${e.broadcast}</span>` : m}
|
|
1206
1245
|
<a class="box" href=${g(t.hrefs.game, { sport: this.sport, id: e.id })}>Box score →</a>
|
|
@@ -1208,8 +1247,8 @@ class Vt extends w {
|
|
|
1208
1247
|
`;
|
|
1209
1248
|
}
|
|
1210
1249
|
}
|
|
1211
|
-
globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores",
|
|
1212
|
-
class
|
|
1250
|
+
globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", Yt);
|
|
1251
|
+
class Kt extends w {
|
|
1213
1252
|
static styles = j;
|
|
1214
1253
|
static properties = {
|
|
1215
1254
|
...w.properties,
|
|
@@ -1222,7 +1261,7 @@ class Yt extends w {
|
|
|
1222
1261
|
super(), this.sport = "football", this.season = "", this.classFilter = "All", this.query = "";
|
|
1223
1262
|
}
|
|
1224
1263
|
async fetchData(t) {
|
|
1225
|
-
const e = this.season ||
|
|
1264
|
+
const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
|
|
1226
1265
|
t.listConferences({ active: !0 }),
|
|
1227
1266
|
t.listSchools(),
|
|
1228
1267
|
t.listTeams({ sport: this.sport }),
|
|
@@ -1232,7 +1271,7 @@ class Yt extends w {
|
|
|
1232
1271
|
return {
|
|
1233
1272
|
season: e,
|
|
1234
1273
|
conferences: s.items,
|
|
1235
|
-
schools:
|
|
1274
|
+
schools: r.items,
|
|
1236
1275
|
teams: o.items,
|
|
1237
1276
|
games: i.items,
|
|
1238
1277
|
rankings: n.items
|
|
@@ -1249,10 +1288,10 @@ class Yt extends w {
|
|
|
1249
1288
|
}, this._ctxData = this.data), this._ctx;
|
|
1250
1289
|
}
|
|
1251
1290
|
renderView() {
|
|
1252
|
-
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));
|
|
1253
1292
|
return l`
|
|
1254
|
-
${
|
|
1255
|
-
title: l`${
|
|
1293
|
+
${$t(this, t, {
|
|
1294
|
+
title: l`${z(this.sport)} standings`,
|
|
1256
1295
|
sub: l`${this.data.season} season · every conference, computed live from reported results`,
|
|
1257
1296
|
teams: this.data.teams
|
|
1258
1297
|
})}
|
|
@@ -1260,26 +1299,26 @@ class Yt extends w {
|
|
|
1260
1299
|
${G(this)}
|
|
1261
1300
|
<div class="toolbar">
|
|
1262
1301
|
<div role="group" aria-label="Classification filter">
|
|
1263
|
-
${e.map((
|
|
1302
|
+
${e.map((r) => l`<button class="chip ${this.classFilter === r ? "on" : ""}"
|
|
1264
1303
|
@click=${() => {
|
|
1265
|
-
this.classFilter =
|
|
1266
|
-
}}>${
|
|
1304
|
+
this.classFilter = r;
|
|
1305
|
+
}}>${r}</button>`)}
|
|
1267
1306
|
</div>
|
|
1268
1307
|
<input type="search" placeholder="Find a school…" aria-label="Find a school"
|
|
1269
|
-
.value=${this.query} @input=${(
|
|
1270
|
-
this.query =
|
|
1308
|
+
.value=${this.query} @input=${(r) => {
|
|
1309
|
+
this.query = r.target.value;
|
|
1271
1310
|
}}>
|
|
1272
1311
|
<span class="spacer"></span>
|
|
1273
|
-
<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>
|
|
1274
1313
|
</div>
|
|
1275
|
-
${s.map((
|
|
1314
|
+
${s.map((r) => this.renderConference(t, r))}
|
|
1276
1315
|
`)}
|
|
1277
1316
|
`;
|
|
1278
1317
|
}
|
|
1279
1318
|
renderConference(t, e) {
|
|
1280
1319
|
const s = this.data.teams.filter((i) => i.conferenceId === e.id);
|
|
1281
1320
|
if (!s.length) return m;
|
|
1282
|
-
const
|
|
1321
|
+
const r = this.query.trim().toLowerCase(), o = qt(s, t.records);
|
|
1283
1322
|
return l`
|
|
1284
1323
|
<div class="card">
|
|
1285
1324
|
<div class="card-head">
|
|
@@ -1294,16 +1333,16 @@ class Yt extends w {
|
|
|
1294
1333
|
<th>Streak</th><th>Last 5</th><th>Next</th>
|
|
1295
1334
|
</tr></thead>
|
|
1296
1335
|
<tbody>
|
|
1297
|
-
${o.map((i, n) => this.renderRow(t, i, n,
|
|
1336
|
+
${o.map((i, n) => this.renderRow(t, i, n, r))}
|
|
1298
1337
|
</tbody>
|
|
1299
1338
|
</table></div>
|
|
1300
1339
|
</div>
|
|
1301
1340
|
`;
|
|
1302
1341
|
}
|
|
1303
|
-
renderRow(t, e, s,
|
|
1342
|
+
renderRow(t, e, s, r) {
|
|
1304
1343
|
const o = t.schoolsById[e.team.schoolId], i = o?.name || e.team.name || "TBD";
|
|
1305
|
-
if (
|
|
1306
|
-
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`
|
|
1307
1346
|
<span class="pill champ" title="${p.season} ${p.title} champion">★ ${p.season} ${p.title}</span>`), h = () => {
|
|
1308
1347
|
location.href = g(t.hrefs.school, { id: e.team.schoolId });
|
|
1309
1348
|
};
|
|
@@ -1313,25 +1352,25 @@ class Yt extends w {
|
|
|
1313
1352
|
}}>
|
|
1314
1353
|
<td class="mut">${s + 1}</td>
|
|
1315
1354
|
<td class="teamcell">
|
|
1316
|
-
${H(o)}${
|
|
1355
|
+
${H(o)}${bt(t, e.team.id, null)}
|
|
1317
1356
|
<a href=${g(t.hrefs.school, { id: e.team.schoolId })}>${i}</a> ${c}
|
|
1318
1357
|
</td>
|
|
1319
1358
|
<td class="num">${x(e.rec, !0)}</td>
|
|
1320
|
-
<td class="num">${
|
|
1359
|
+
<td class="num">${Rt(e.confPct)}</td>
|
|
1321
1360
|
<td class="num">${x(e.rec)}</td>
|
|
1322
|
-
<td class="num">${
|
|
1361
|
+
<td class="num">${Rt(e.overallPct)}</td>
|
|
1323
1362
|
<td class="num">${e.rec.pf}</td>
|
|
1324
1363
|
<td class="num">${e.rec.pa}</td>
|
|
1325
1364
|
<td class="num" style="color:${n >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${n > 0 ? "+" : ""}${n}</td>
|
|
1326
|
-
<td>${
|
|
1327
|
-
<td>${
|
|
1328
|
-
<td>${
|
|
1365
|
+
<td>${st(e.rec.results) || "·"}</td>
|
|
1366
|
+
<td>${yt(t, e.team.id)}</td>
|
|
1367
|
+
<td>${Vt(t, d, e.team.id)}</td>
|
|
1329
1368
|
</tr>
|
|
1330
1369
|
`;
|
|
1331
1370
|
}
|
|
1332
1371
|
}
|
|
1333
|
-
globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings",
|
|
1334
|
-
const
|
|
1372
|
+
globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", Kt);
|
|
1373
|
+
const Le = b`
|
|
1335
1374
|
.hero1 {
|
|
1336
1375
|
border-radius: var(--hsot-radius-md); color: var(--hsot-white);
|
|
1337
1376
|
padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
|
|
@@ -1348,8 +1387,8 @@ const Me = b`
|
|
|
1348
1387
|
.delta.new { background: var(--hsot-straw); color: #6b5900; border-radius: var(--hsot-radius-xs); padding: 0.1rem 0.3rem; font-size: 0.7rem; }
|
|
1349
1388
|
.sparkline { vertical-align: middle; }
|
|
1350
1389
|
`;
|
|
1351
|
-
class
|
|
1352
|
-
static styles = [...j,
|
|
1390
|
+
class Qt extends w {
|
|
1391
|
+
static styles = [...j, Le];
|
|
1353
1392
|
static properties = {
|
|
1354
1393
|
...w.properties,
|
|
1355
1394
|
sport: { type: String },
|
|
@@ -1366,7 +1405,7 @@ class Kt extends w {
|
|
|
1366
1405
|
t && (this.pollDate = t);
|
|
1367
1406
|
}
|
|
1368
1407
|
async fetchData(t) {
|
|
1369
|
-
const e = this.season ||
|
|
1408
|
+
const e = this.season || et(), [s, r, o, i, n] = await Promise.all([
|
|
1370
1409
|
t.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
|
|
1371
1410
|
t.listSchools(),
|
|
1372
1411
|
t.listTeams({ sport: this.sport }),
|
|
@@ -1376,7 +1415,7 @@ class Kt extends w {
|
|
|
1376
1415
|
return {
|
|
1377
1416
|
season: e,
|
|
1378
1417
|
polls: d,
|
|
1379
|
-
schools:
|
|
1418
|
+
schools: r.items,
|
|
1380
1419
|
teams: o.items,
|
|
1381
1420
|
conferences: i.items,
|
|
1382
1421
|
games: n.items
|
|
@@ -1405,22 +1444,22 @@ class Kt extends w {
|
|
|
1405
1444
|
}), c.length && d.push(c), !d.length) return m;
|
|
1406
1445
|
const h = n[s];
|
|
1407
1446
|
return l`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
|
|
1408
|
-
${d.map((p) =>
|
|
1447
|
+
${d.map((p) => Pt`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
|
|
1409
1448
|
points=${p.map((f) => `${f.x.toFixed(1)},${f.y.toFixed(1)}`).join(" ")}></polyline>`)}
|
|
1410
|
-
${h ?
|
|
1449
|
+
${h ? Pt`<circle cx=${h.x.toFixed(1)} cy=${h.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
|
|
1411
1450
|
</svg>`;
|
|
1412
1451
|
}
|
|
1413
1452
|
movement(t, e, s) {
|
|
1414
|
-
const
|
|
1415
|
-
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>`;
|
|
1416
1455
|
}
|
|
1417
1456
|
renderView() {
|
|
1418
1457
|
const t = this.ctx, e = this.data.polls;
|
|
1419
1458
|
if (!e.length) return l`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
|
|
1420
|
-
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;
|
|
1421
1460
|
return l`
|
|
1422
|
-
${
|
|
1423
|
-
title: l`${
|
|
1461
|
+
${$t(this, t, {
|
|
1462
|
+
title: l`${z(this.sport)} Top 25`,
|
|
1424
1463
|
sub: l`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
|
|
1425
1464
|
teams: this.data.teams
|
|
1426
1465
|
})}
|
|
@@ -1431,7 +1470,7 @@ class Kt extends w {
|
|
|
1431
1470
|
<select id="pollsel" @change=${(p) => {
|
|
1432
1471
|
this.pollDate = p.target.value;
|
|
1433
1472
|
}}>
|
|
1434
|
-
${e.map((p, f) => l`<option value=${p.effectiveDate} ?selected=${p ===
|
|
1473
|
+
${e.map((p, f) => l`<option value=${p.effectiveDate} ?selected=${p === r}>
|
|
1435
1474
|
${y(p.effectiveDate, { month: "long", day: "numeric", year: "numeric" })}${f === 0 ? " · current" : ""}
|
|
1436
1475
|
</option>`)}
|
|
1437
1476
|
</select>
|
|
@@ -1446,22 +1485,22 @@ class Kt extends w {
|
|
|
1446
1485
|
<span class="spacer"></span>
|
|
1447
1486
|
<span class="asof">Movement vs. the previous poll · sparkline = season rank history</span>
|
|
1448
1487
|
</div>
|
|
1449
|
-
${h ? this.renderHero(t,
|
|
1488
|
+
${h ? this.renderHero(t, r, o, c, h, d) : m}
|
|
1450
1489
|
<div class="card"><div class="tablewrap"><table class="data">
|
|
1451
1490
|
<thead><tr>
|
|
1452
1491
|
<th class="num">Rk</th><th>Mvmt</th><th>Team</th><th class="num">Record</th>
|
|
1453
1492
|
<th>Conference</th><th>Last result</th><th>Next</th><th>Season</th>
|
|
1454
1493
|
</tr></thead>
|
|
1455
1494
|
<tbody>
|
|
1456
|
-
${(
|
|
1495
|
+
${(r.teamIds || []).map((p, f) => f === 0 || !p ? m : this.renderRow(t, r, o, i, n, d, p, f + 1))}
|
|
1457
1496
|
</tbody>
|
|
1458
1497
|
</table></div></div>
|
|
1459
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>
|
|
1460
1499
|
`)}
|
|
1461
1500
|
`;
|
|
1462
1501
|
}
|
|
1463
|
-
renderHero(t, e, s,
|
|
1464
|
-
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%)`;
|
|
1465
1504
|
return l`
|
|
1466
1505
|
<div class="hero1" style="background:${h}">
|
|
1467
1506
|
<div class="bigrank">#1</div>
|
|
@@ -1470,18 +1509,18 @@ class Kt extends w {
|
|
|
1470
1509
|
<h2><a href=${g(t.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
|
|
1471
1510
|
<div class="facts">
|
|
1472
1511
|
${x(n)} overall${c ? l` · ${x(n, !0)} ${c.name}` : m}
|
|
1473
|
-
· streak ${
|
|
1512
|
+
· streak ${st(n?.results) || "·"}
|
|
1474
1513
|
${d ? l` · last: ${d.mark} ${d.my}-${d.their} vs ${Z(t, d.opp)}` : m}
|
|
1475
|
-
${this.movement(e, s,
|
|
1514
|
+
${this.movement(e, s, r)}
|
|
1476
1515
|
</div>
|
|
1477
1516
|
</div>
|
|
1478
1517
|
</div>
|
|
1479
1518
|
`;
|
|
1480
1519
|
}
|
|
1481
|
-
renderRow(t, e, s,
|
|
1520
|
+
renderRow(t, e, s, r, o, i, n, d) {
|
|
1482
1521
|
const c = U(t, n);
|
|
1483
1522
|
if (!c) return m;
|
|
1484
|
-
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], $ = () => {
|
|
1485
1524
|
location.href = g(t.hrefs.school, { id: c.id });
|
|
1486
1525
|
};
|
|
1487
1526
|
return l`
|
|
@@ -1497,14 +1536,14 @@ class Kt extends w {
|
|
|
1497
1536
|
<td>${p ? l`<a class="box" style="text-decoration:none" href=${g(t.hrefs.game, { sport: this.sport, id: p.gameId })}>
|
|
1498
1537
|
<b style="color:${p.mark === "W" ? "var(--hsot-win)" : p.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${p.mark}</b>
|
|
1499
1538
|
${p.my}-${p.their} vs ${Z(t, p.opp)}</a>` : l`<span class="mut">·</span>`}</td>
|
|
1500
|
-
<td>${
|
|
1501
|
-
<td>${this.sparkline(n,
|
|
1539
|
+
<td>${Vt(t, f, n)}</td>
|
|
1540
|
+
<td>${this.sparkline(n, r, o)}</td>
|
|
1502
1541
|
</tr>
|
|
1503
1542
|
`;
|
|
1504
1543
|
}
|
|
1505
1544
|
}
|
|
1506
|
-
globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings",
|
|
1507
|
-
const
|
|
1545
|
+
globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", Qt);
|
|
1546
|
+
const je = b`
|
|
1508
1547
|
.schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
|
|
1509
1548
|
.schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
|
|
1510
1549
|
.schoolhero .crest {
|
|
@@ -1529,8 +1568,8 @@ const Le = b`
|
|
|
1529
1568
|
.cols { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 1.25rem; }
|
|
1530
1569
|
@media (max-width: 900px) { .cols { grid-template-columns: 1fr; } .schoolhero h1 { font-size: 1.9rem; } }
|
|
1531
1570
|
`;
|
|
1532
|
-
class
|
|
1533
|
-
static styles = [...j,
|
|
1571
|
+
class Zt extends w {
|
|
1572
|
+
static styles = [...j, je];
|
|
1534
1573
|
static properties = {
|
|
1535
1574
|
...w.properties,
|
|
1536
1575
|
schoolId: { type: String, attribute: "school-id" },
|
|
@@ -1547,7 +1586,7 @@ class Qt extends w {
|
|
|
1547
1586
|
t && !this.sport && (this.sport = t);
|
|
1548
1587
|
}
|
|
1549
1588
|
async fetchData(t) {
|
|
1550
|
-
const e = this.season ||
|
|
1589
|
+
const e = this.season || et(), s = await t.getSchool(this.schoolId), o = (await t.listTeams({ schoolId: this.schoolId })).items, i = o.find(($) => $.sport === (this.sport || "football")) || o[0] || null, [n, d, c, h, p, f, u] = await Promise.all([
|
|
1551
1590
|
i ? t.listGames({ sport: i.sport, season: e }) : Promise.resolve({ items: [] }),
|
|
1552
1591
|
i ? t.listTeams({ sport: i.sport }) : Promise.resolve({ items: [] }),
|
|
1553
1592
|
t.listSchools(),
|
|
@@ -1586,13 +1625,13 @@ class Qt extends w {
|
|
|
1586
1625
|
this.sport = t, this.load();
|
|
1587
1626
|
}
|
|
1588
1627
|
renderView() {
|
|
1589
|
-
const { school: t, teams: e, active: s, season:
|
|
1628
|
+
const { school: t, teams: e, active: s, season: r } = this.data;
|
|
1590
1629
|
if (!t) return l`<div class="view"><p class="empty">School not found.</p></div>`;
|
|
1591
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;
|
|
1592
1631
|
return l`
|
|
1593
1632
|
<div class="schoolhero" style="background:linear-gradient(115deg, ${t.colorPrimary || "#030711"} 0%, ${t.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${i}">
|
|
1594
1633
|
<div class="inner">
|
|
1595
|
-
${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>`}
|
|
1596
1635
|
<div style="min-width:260px">
|
|
1597
1636
|
<h1>${t.name} <span class="mascot">${t.mascot || ""}</span></h1>
|
|
1598
1637
|
<div class="facts">
|
|
@@ -1602,7 +1641,6 @@ class Qt extends w {
|
|
|
1602
1641
|
${n ? l`<span><b>Enrollment</b>${n.value.toLocaleString()} (${n.season} ADM)</span>` : m}
|
|
1603
1642
|
${t.openingYear ? l`<span><b>Opened</b>${t.openingYear}</span>` : m}
|
|
1604
1643
|
${t.areaCode ? l`<span><b>Area</b>${t.areaCode}</span>` : m}
|
|
1605
|
-
${t.tagSlug ? l`<span><b>Tag</b>#${t.tagSlug}</span>` : m}
|
|
1606
1644
|
</div>
|
|
1607
1645
|
</div>
|
|
1608
1646
|
</div>
|
|
@@ -1616,21 +1654,21 @@ class Qt extends w {
|
|
|
1616
1654
|
</div>
|
|
1617
1655
|
${q(this, l`
|
|
1618
1656
|
${G(this)}
|
|
1619
|
-
${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>`}
|
|
1620
1658
|
`)}
|
|
1621
1659
|
`;
|
|
1622
1660
|
}
|
|
1623
|
-
renderTeam(t, e, s,
|
|
1624
|
-
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 =
|
|
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)));
|
|
1625
1663
|
return l`
|
|
1626
1664
|
<div class="tiles">
|
|
1627
1665
|
<div class="tile"><div class="k">Overall</div><div class="v">${x(o)}</div><div class="s">${i} games played</div></div>
|
|
1628
1666
|
<div class="tile"><div class="k">${s?.name || "Conference"}</div><div class="v">${x(o, !0)}</div>
|
|
1629
|
-
<div class="s">${d ? `${
|
|
1667
|
+
<div class="s">${d ? `${Te(d)} of ${n.length}` : "·"}</div></div>
|
|
1630
1668
|
<div class="tile"><div class="k">Points</div><div class="v">${i ? (o.pf / i).toFixed(1) : "0.0"}</div>
|
|
1631
1669
|
<div class="s">scored per game · ${i ? (o.pa / i).toFixed(1) : "0.0"} allowed</div></div>
|
|
1632
|
-
<div class="tile"><div class="k">Streak</div><div class="v">${
|
|
1633
|
-
<div class="s">last 5: ${
|
|
1670
|
+
<div class="tile"><div class="k">Streak</div><div class="v">${st(o.results) || "·"}</div>
|
|
1671
|
+
<div class="s">last 5: ${yt(t, e.id)}</div></div>
|
|
1634
1672
|
<div class="tile"><div class="k">HSOT Top 25</div><div class="v">${c ? `#${c}` : "NR"}</div>
|
|
1635
1673
|
<div class="s"><a href=${g(t.hrefs.section, { sport: e.sport, view: "rankings" })}>full poll</a></div></div>
|
|
1636
1674
|
</div>
|
|
@@ -1642,30 +1680,30 @@ class Qt extends w {
|
|
|
1642
1680
|
<div>
|
|
1643
1681
|
<div class="section-title">Schedule & results</div>
|
|
1644
1682
|
<div class="card">
|
|
1645
|
-
${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>`}
|
|
1646
1684
|
</div>
|
|
1647
1685
|
</div>
|
|
1648
1686
|
<div>
|
|
1649
|
-
<div class="section-title">Roster · ${
|
|
1650
|
-
<div class="card">${this.renderRoster(
|
|
1687
|
+
<div class="section-title">Roster · ${r}</div>
|
|
1688
|
+
<div class="card">${this.renderRoster(r)}</div>
|
|
1651
1689
|
</div>
|
|
1652
1690
|
</div>
|
|
1653
1691
|
`;
|
|
1654
1692
|
}
|
|
1655
1693
|
renderGameRow(t, e, s) {
|
|
1656
|
-
const
|
|
1657
|
-
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>`;
|
|
1658
1696
|
if (s.state === "final") {
|
|
1659
|
-
const h =
|
|
1697
|
+
const h = ut(s), p = h === "tie" ? "T" : h === (r ? "home" : "away") ? "W" : "L";
|
|
1660
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}`;
|
|
1661
1699
|
} else s.state === "live" && (d = l`<span style="color:var(--hsot-red)">${i}-${n}</span>`);
|
|
1662
1700
|
const c = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
|
|
1663
1701
|
return l`
|
|
1664
1702
|
<li>
|
|
1665
1703
|
<span class="d">${y(s.date)}</span>
|
|
1666
|
-
${J(s)}
|
|
1704
|
+
${jt(s).kind === "sched" ? m : J(s)}
|
|
1667
1705
|
<span class="res">${d}</span>
|
|
1668
|
-
<span class="opp">${
|
|
1706
|
+
<span class="opp">${r ? "vs" : "at"} ${Gt(t, o, s.date)}
|
|
1669
1707
|
<span class="pill type">${c}</span>
|
|
1670
1708
|
${s.broadcast ? l`<span class="pill class">${s.broadcast}</span>` : m}
|
|
1671
1709
|
</span>
|
|
@@ -1678,19 +1716,19 @@ class Qt extends w {
|
|
|
1678
1716
|
const e = this.data.roster;
|
|
1679
1717
|
if (!e)
|
|
1680
1718
|
return l`<p class="empty">Roster not published for ${t}.</p>`;
|
|
1681
|
-
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));
|
|
1682
1720
|
return l`
|
|
1683
1721
|
<div class="tablewrap"><table class="data">
|
|
1684
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>
|
|
1685
1723
|
<tbody>
|
|
1686
|
-
${
|
|
1724
|
+
${r.map((o) => {
|
|
1687
1725
|
const i = s[o.playerId];
|
|
1688
1726
|
return i ? l`<tr>
|
|
1689
1727
|
<td class="num mut">${o.number ?? "·"}</td>
|
|
1690
1728
|
<td style="font-weight:500">${i.firstName} ${i.lastName}</td>
|
|
1691
1729
|
<td>${o.position || "·"}</td>
|
|
1692
1730
|
<td class="mut">${i.classOf || "·"}</td>
|
|
1693
|
-
<td class="num">${
|
|
1731
|
+
<td class="num">${Se(i.heightIn)}</td>
|
|
1694
1732
|
<td class="num">${i.weightLb || "·"}</td>
|
|
1695
1733
|
</tr>` : m;
|
|
1696
1734
|
})}
|
|
@@ -1699,37 +1737,37 @@ class Qt extends w {
|
|
|
1699
1737
|
`;
|
|
1700
1738
|
}
|
|
1701
1739
|
}
|
|
1702
|
-
globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school",
|
|
1703
|
-
const
|
|
1704
|
-
function
|
|
1705
|
-
return
|
|
1740
|
+
globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", Zt);
|
|
1741
|
+
const We = "https://api.wral.com/search";
|
|
1742
|
+
function qe(a) {
|
|
1743
|
+
return a.map((t) => `uri:"${t}"`).join(" OR ");
|
|
1706
1744
|
}
|
|
1707
|
-
function
|
|
1708
|
-
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" });
|
|
1709
1747
|
return `${e}/v1/query?${s}`;
|
|
1710
1748
|
}
|
|
1711
|
-
function
|
|
1749
|
+
function Jt(a) {
|
|
1712
1750
|
try {
|
|
1713
|
-
const t = new URL(
|
|
1751
|
+
const t = new URL(a);
|
|
1714
1752
|
if (/(^|\.)smugmug\.com$/i.test(t.hostname)) {
|
|
1715
1753
|
const e = t.pathname.split("/").filter(Boolean).pop() || "", s = !e || /^[ni]-[A-Za-z0-9]+$/.test(e);
|
|
1716
1754
|
return {
|
|
1717
|
-
uri:
|
|
1718
|
-
title: s ?
|
|
1755
|
+
uri: a,
|
|
1756
|
+
title: s ? a : decodeURIComponent(e).replace(/-/g, " "),
|
|
1719
1757
|
photos: !0
|
|
1720
1758
|
};
|
|
1721
1759
|
}
|
|
1722
1760
|
} catch {
|
|
1723
1761
|
}
|
|
1724
|
-
return { uri:
|
|
1762
|
+
return { uri: a, title: a };
|
|
1725
1763
|
}
|
|
1726
|
-
async function
|
|
1727
|
-
const
|
|
1728
|
-
if (!
|
|
1729
|
-
const o = await
|
|
1730
|
-
return t.map((n) => i.get(n) ||
|
|
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]));
|
|
1768
|
+
return t.map((n) => i.get(n) || Jt(n));
|
|
1731
1769
|
}
|
|
1732
|
-
const
|
|
1770
|
+
const Ye = b`
|
|
1733
1771
|
.breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
|
|
1734
1772
|
.breadcrumbs a { text-decoration: none; }
|
|
1735
1773
|
.scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
|
|
@@ -1768,8 +1806,8 @@ const Ve = b`
|
|
|
1768
1806
|
.cols { grid-template-columns: 1fr; }
|
|
1769
1807
|
}
|
|
1770
1808
|
`;
|
|
1771
|
-
class
|
|
1772
|
-
static styles = [...j,
|
|
1809
|
+
class Xt extends w {
|
|
1810
|
+
static styles = [...j, Ye];
|
|
1773
1811
|
static properties = {
|
|
1774
1812
|
...w.properties,
|
|
1775
1813
|
gameId: { type: String, attribute: "game-id" },
|
|
@@ -1783,7 +1821,7 @@ class Jt extends w {
|
|
|
1783
1821
|
super(), this.gameId = "", this.searchApi = "";
|
|
1784
1822
|
}
|
|
1785
1823
|
async fetchData(t) {
|
|
1786
|
-
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([
|
|
1787
1825
|
t.listSchools(),
|
|
1788
1826
|
t.listTeams({ sport: e.sport }),
|
|
1789
1827
|
t.listConferences(),
|
|
@@ -1791,11 +1829,11 @@ class Jt extends w {
|
|
|
1791
1829
|
t.listGames({ sport: e.sport, season: e.season }),
|
|
1792
1830
|
// A search outage must not blank the box score — degrade to bare
|
|
1793
1831
|
// links (fetchCoverage already degrades per-URL index misses).
|
|
1794
|
-
s.length ?
|
|
1832
|
+
s.length ? Ve(this.searchApi, s).catch(() => s.map(Jt)) : Promise.resolve([])
|
|
1795
1833
|
]);
|
|
1796
1834
|
return {
|
|
1797
1835
|
game: e,
|
|
1798
|
-
schools:
|
|
1836
|
+
schools: r.items,
|
|
1799
1837
|
teams: o.items,
|
|
1800
1838
|
conferences: i.items,
|
|
1801
1839
|
rankings: n.items,
|
|
@@ -1816,18 +1854,18 @@ class Jt extends w {
|
|
|
1816
1854
|
renderView() {
|
|
1817
1855
|
const t = this.data.game;
|
|
1818
1856
|
if (!t) return l`<div class="view"><p class="empty">Game not found.</p></div>`;
|
|
1819
|
-
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));
|
|
1820
1858
|
return l`
|
|
1821
1859
|
${q(this, l`
|
|
1822
1860
|
${G(this)}
|
|
1823
1861
|
<p class="breadcrumbs">
|
|
1824
|
-
<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> /
|
|
1825
1863
|
<a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>Scores/Schedules</a> /
|
|
1826
|
-
${
|
|
1864
|
+
${E(e, t.awayTeamId)} at ${E(e, t.homeTeamId)}
|
|
1827
1865
|
</p>
|
|
1828
1866
|
<div class="card">
|
|
1829
1867
|
<div class="scorehead">
|
|
1830
|
-
${this.teamBlock(e, t, t.awayTeamId,
|
|
1868
|
+
${this.teamBlock(e, t, t.awayTeamId, r, !1)}
|
|
1831
1869
|
<div class="mid">
|
|
1832
1870
|
<div class="bigscore">
|
|
1833
1871
|
<span style=${n("away")}>${t.awayScore}</span>
|
|
@@ -1835,7 +1873,7 @@ class Jt extends w {
|
|
|
1835
1873
|
<span style=${n("home")}>${t.homeScore}</span>
|
|
1836
1874
|
</div>
|
|
1837
1875
|
<div class="status">${J(t)}</div>
|
|
1838
|
-
<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"}
|
|
1839
1877
|
${t.broadcast ? l` · <span class="pill class">${t.broadcast}</span>` : m}</div>
|
|
1840
1878
|
<div class="status">
|
|
1841
1879
|
<span class="pill type">${t.gameType === "conference" ? `${d?.name || "Conference"} game` : t.gameType}</span>
|
|
@@ -1845,7 +1883,7 @@ class Jt extends w {
|
|
|
1845
1883
|
</div>
|
|
1846
1884
|
${this.teamBlock(e, t, t.homeTeamId, o, !0)}
|
|
1847
1885
|
</div>
|
|
1848
|
-
${this.renderLineScore(t,
|
|
1886
|
+
${this.renderLineScore(t, r, o)}
|
|
1849
1887
|
${t.notes ? l`<p class="note" style="padding:0 1rem 0.9rem;text-align:center">${t.notes}</p>` : m}
|
|
1850
1888
|
</div>
|
|
1851
1889
|
${(this.data.coverage || []).length ? l`
|
|
@@ -1866,39 +1904,39 @@ class Jt extends w {
|
|
|
1866
1904
|
</div>` : m}
|
|
1867
1905
|
<div class="section-title">Season context</div>
|
|
1868
1906
|
<div class="cols">
|
|
1869
|
-
${[[t.awayTeamId,
|
|
1907
|
+
${[[t.awayTeamId, r], [t.homeTeamId, o]].map(([h, p]) => this.renderContext(e, h, p))}
|
|
1870
1908
|
</div>
|
|
1871
1909
|
${c.length ? l`
|
|
1872
1910
|
<div class="section-title">Head to head this season</div>
|
|
1873
1911
|
<div class="card"><ul class="gamelist">
|
|
1874
1912
|
${c.map((h) => l`<li>
|
|
1875
1913
|
<span class="d">${y(h.date)}</span>${J(h)}
|
|
1876
|
-
<span class="opp">${
|
|
1914
|
+
<span class="opp">${E(e, h.awayTeamId)} ${h.awayScore}, ${E(e, h.homeTeamId)} ${h.homeScore}</span>
|
|
1877
1915
|
<a class="box" href=${g(e.hrefs.game, { sport: t.sport, id: h.id })}>Box score →</a>
|
|
1878
1916
|
</li>`)}
|
|
1879
1917
|
</ul></div>` : m}
|
|
1880
1918
|
`)}
|
|
1881
1919
|
`;
|
|
1882
1920
|
}
|
|
1883
|
-
teamBlock(t, e, s,
|
|
1884
|
-
if (!
|
|
1885
|
-
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);
|
|
1886
1924
|
return l`
|
|
1887
1925
|
<div class="teamblock ${o ? "right" : ""}">
|
|
1888
|
-
${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>`}
|
|
1889
1927
|
<div>
|
|
1890
|
-
<div class="tname">${
|
|
1891
|
-
<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>
|
|
1892
1930
|
</div>
|
|
1893
1931
|
</div>
|
|
1894
1932
|
`;
|
|
1895
1933
|
}
|
|
1896
1934
|
renderLineScore(t, e, s) {
|
|
1897
|
-
const
|
|
1898
|
-
if (!
|
|
1935
|
+
const r = t.periodScores || [];
|
|
1936
|
+
if (!r.length)
|
|
1899
1937
|
return l`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>`;
|
|
1900
|
-
const o = Math.max(4, ...
|
|
1901
|
-
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);
|
|
1902
1940
|
return p ? p[c] : t.state === "final" ? 0 : "·";
|
|
1903
1941
|
}, d = (c, h, p) => l`
|
|
1904
1942
|
<tr>
|
|
@@ -1920,14 +1958,14 @@ class Jt extends w {
|
|
|
1920
1958
|
}
|
|
1921
1959
|
renderContext(t, e, s) {
|
|
1922
1960
|
if (!s) return m;
|
|
1923
|
-
const
|
|
1961
|
+
const r = t.records[e], o = gt(this.data.games, e);
|
|
1924
1962
|
return l`
|
|
1925
1963
|
<div class="card ctxcard">
|
|
1926
1964
|
<div class="who">${H(s)}${s.name}</div>
|
|
1927
1965
|
<div class="row">
|
|
1928
|
-
<span>Last 5: ${
|
|
1929
|
-
<span>Streak: <b>${
|
|
1930
|
-
<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>
|
|
1931
1969
|
<span>Next: ${o ? l`${y(o.date, { month: "numeric", day: "numeric" })}
|
|
1932
1970
|
${o.homeTeamId === e ? "vs" : "at"} ${Z(t, o.homeTeamId === e ? o.awayTeamId : o.homeTeamId)}` : "·"}</span>
|
|
1933
1971
|
</div>
|
|
@@ -1935,9 +1973,9 @@ class Jt extends w {
|
|
|
1935
1973
|
`;
|
|
1936
1974
|
}
|
|
1937
1975
|
}
|
|
1938
|
-
globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore",
|
|
1939
|
-
const
|
|
1940
|
-
class
|
|
1976
|
+
globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", Xt);
|
|
1977
|
+
const Ke = 250, Qe = 2;
|
|
1978
|
+
class te extends C {
|
|
1941
1979
|
static properties = {
|
|
1942
1980
|
api: { type: String },
|
|
1943
1981
|
schoolHref: { type: String, attribute: "school-href" },
|
|
@@ -2017,11 +2055,11 @@ class Xt extends E {
|
|
|
2017
2055
|
}
|
|
2018
2056
|
onInput(t) {
|
|
2019
2057
|
const e = t.target.value.trim();
|
|
2020
|
-
if (clearTimeout(this.debounceTimer), e.length <
|
|
2058
|
+
if (clearTimeout(this.debounceTimer), e.length < Qe) {
|
|
2021
2059
|
this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
|
|
2022
2060
|
return;
|
|
2023
2061
|
}
|
|
2024
|
-
this.debounceTimer = setTimeout(() => this.search(e),
|
|
2062
|
+
this.debounceTimer = setTimeout(() => this.search(e), Ke);
|
|
2025
2063
|
}
|
|
2026
2064
|
async search(t) {
|
|
2027
2065
|
this.abortController?.abort(), this.abortController = new AbortController();
|
|
@@ -2031,8 +2069,8 @@ class Xt extends E {
|
|
|
2031
2069
|
});
|
|
2032
2070
|
if (!s.ok)
|
|
2033
2071
|
return;
|
|
2034
|
-
const
|
|
2035
|
-
this.results =
|
|
2072
|
+
const r = await s.json();
|
|
2073
|
+
this.results = r.items || [], this.activeIndex = -1, this.searched = !0, this.open = !0;
|
|
2036
2074
|
} catch (e) {
|
|
2037
2075
|
e.name !== "AbortError" && console.warn("school search failed", e);
|
|
2038
2076
|
}
|
|
@@ -2066,7 +2104,7 @@ class Xt extends E {
|
|
|
2066
2104
|
return [t.location, t.county && `${t.county} County`].filter(Boolean).join(" — ");
|
|
2067
2105
|
}
|
|
2068
2106
|
renderOption(t, e) {
|
|
2069
|
-
const s = this.where(t),
|
|
2107
|
+
const s = this.where(t), r = (o) => {
|
|
2070
2108
|
o.preventDefault(), this.go(t);
|
|
2071
2109
|
};
|
|
2072
2110
|
return l`
|
|
@@ -2074,7 +2112,7 @@ class Xt extends E {
|
|
|
2074
2112
|
id="school-option-${e}"
|
|
2075
2113
|
role="option"
|
|
2076
2114
|
aria-selected="${e === this.activeIndex ? "true" : "false"}"
|
|
2077
|
-
@pointerdown="${
|
|
2115
|
+
@pointerdown="${r}"
|
|
2078
2116
|
@mousemove="${() => {
|
|
2079
2117
|
this.activeIndex = e;
|
|
2080
2118
|
}}"
|
|
@@ -2088,7 +2126,7 @@ class Xt extends E {
|
|
|
2088
2126
|
const t = this.searched && !this.results.length, e = l`<li class="empty">No schools found</li>`;
|
|
2089
2127
|
return l`
|
|
2090
2128
|
<ul id="school-search-listbox" role="listbox" aria-label="Schools">
|
|
2091
|
-
${this.results.map((s,
|
|
2129
|
+
${this.results.map((s, r) => this.renderOption(s, r))}
|
|
2092
2130
|
${t ? e : m}
|
|
2093
2131
|
</ul>
|
|
2094
2132
|
`;
|
|
@@ -2114,22 +2152,22 @@ class Xt extends E {
|
|
|
2114
2152
|
`;
|
|
2115
2153
|
}
|
|
2116
2154
|
}
|
|
2117
|
-
globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search",
|
|
2118
|
-
const
|
|
2119
|
-
"hsot-scores":
|
|
2120
|
-
"hsot-standings":
|
|
2121
|
-
"hsot-rankings":
|
|
2122
|
-
"hsot-school":
|
|
2123
|
-
"hsot-boxscore":
|
|
2124
|
-
"hsot-school-search":
|
|
2155
|
+
globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", te);
|
|
2156
|
+
const Ze = {
|
|
2157
|
+
"hsot-scores": Yt,
|
|
2158
|
+
"hsot-standings": Kt,
|
|
2159
|
+
"hsot-rankings": Qt,
|
|
2160
|
+
"hsot-school": Zt,
|
|
2161
|
+
"hsot-boxscore": Xt,
|
|
2162
|
+
"hsot-school-search": te
|
|
2125
2163
|
};
|
|
2126
|
-
function
|
|
2127
|
-
const
|
|
2128
|
-
if (
|
|
2129
|
-
for (const [t, e] of Object.entries(
|
|
2130
|
-
|
|
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);
|
|
2131
2169
|
}
|
|
2132
|
-
typeof window < "u" && globalThis.customElements &&
|
|
2170
|
+
typeof window < "u" && globalThis.customElements && Je();
|
|
2133
2171
|
export {
|
|
2134
|
-
|
|
2172
|
+
Je as defineAll
|
|
2135
2173
|
};
|