@wral/hsot-data 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/define.mjs +1 -1
- package/dist/define.standalone.js +358 -311
- package/dist/{hsot-school-search-W2oAJRQB.js → hsot-school-search-CtMiZfDB.js} +253 -206
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
|
@@ -35,7 +35,7 @@ const ae = (a) => new Nt(typeof a == "string" ? a : a + "", void 0, lt), b = (a,
|
|
|
35
35
|
for (const s of t.cssRules) e += s.cssText;
|
|
36
36
|
return ae(e);
|
|
37
37
|
})(a) : a;
|
|
38
|
-
const { is: oe, defineProperty: ie, getOwnPropertyDescriptor: ne, getOwnPropertyNames: le, getOwnPropertySymbols: ce, getPrototypeOf: he } = Object, X = globalThis, kt = X.trustedTypes, de = kt ? kt.emptyScript : "", pe = X.reactiveElementPolyfillSupport,
|
|
38
|
+
const { is: oe, defineProperty: ie, getOwnPropertyDescriptor: ne, getOwnPropertyNames: le, getOwnPropertySymbols: ce, getPrototypeOf: he } = Object, X = globalThis, kt = X.trustedTypes, de = kt ? kt.emptyScript : "", pe = X.reactiveElementPolyfillSupport, R = (a, t) => a, it = { toAttribute(a, t) {
|
|
39
39
|
switch (t) {
|
|
40
40
|
case Boolean:
|
|
41
41
|
a = a ? de : null;
|
|
@@ -85,21 +85,21 @@ let I = class extends HTMLElement {
|
|
|
85
85
|
this[e] = i;
|
|
86
86
|
} };
|
|
87
87
|
return { get: r, set(i) {
|
|
88
|
-
const
|
|
89
|
-
o?.call(this, i), this.requestUpdate(t,
|
|
88
|
+
const l = r?.call(this);
|
|
89
|
+
o?.call(this, i), this.requestUpdate(t, l, s);
|
|
90
90
|
}, configurable: !0, enumerable: !0 };
|
|
91
91
|
}
|
|
92
92
|
static getPropertyOptions(t) {
|
|
93
93
|
return this.elementProperties.get(t) ?? _t;
|
|
94
94
|
}
|
|
95
95
|
static _$Ei() {
|
|
96
|
-
if (this.hasOwnProperty(
|
|
96
|
+
if (this.hasOwnProperty(R("elementProperties"))) return;
|
|
97
97
|
const t = he(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
|
-
if (this.hasOwnProperty(
|
|
102
|
-
if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(
|
|
101
|
+
if (this.hasOwnProperty(R("finalized"))) return;
|
|
102
|
+
if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(R("properties"))) {
|
|
103
103
|
const e = this.properties, s = [...le(e), ...ce(e)];
|
|
104
104
|
for (const r of s) this.createProperty(r, e[r]);
|
|
105
105
|
}
|
|
@@ -171,8 +171,8 @@ let I = class extends HTMLElement {
|
|
|
171
171
|
if (r !== void 0 && this._$Em !== r) {
|
|
172
172
|
const o = s.getPropertyOptions(r), i = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : it;
|
|
173
173
|
this._$Em = r;
|
|
174
|
-
const
|
|
175
|
-
this[r] =
|
|
174
|
+
const l = i.fromAttribute(e, o.type);
|
|
175
|
+
this[r] = l ?? this._$Ej?.get(r) ?? l, this._$Em = null;
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
requestUpdate(t, e, s, r = !1, o) {
|
|
@@ -208,8 +208,8 @@ let I = class extends HTMLElement {
|
|
|
208
208
|
}
|
|
209
209
|
const s = this.constructor.elementProperties;
|
|
210
210
|
if (s.size > 0) for (const [r, o] of s) {
|
|
211
|
-
const { wrapped: i } = o,
|
|
212
|
-
i !== !0 || this._$AL.has(r) ||
|
|
211
|
+
const { wrapped: i } = o, l = this[r];
|
|
212
|
+
i !== !0 || this._$AL.has(r) || l === void 0 || this.C(r, void 0, o, l);
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
let t = !1;
|
|
@@ -246,23 +246,23 @@ let I = class extends HTMLElement {
|
|
|
246
246
|
firstUpdated(t) {
|
|
247
247
|
}
|
|
248
248
|
};
|
|
249
|
-
I.elementStyles = [], I.shadowRootOptions = { mode: "open" }, I[
|
|
249
|
+
I.elementStyles = [], I.shadowRootOptions = { mode: "open" }, I[R("elementProperties")] = /* @__PURE__ */ new Map(), I[R("finalized")] = /* @__PURE__ */ new Map(), pe?.({ ReactiveElement: I }), (X.reactiveElementVersions ??= []).push("2.1.2");
|
|
250
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)}$`, Ht = "?" + k, me = `<${Ht}>`, T = document, F = () => T.createComment(""), N = (a) => a === null || typeof a != "object" && typeof a != "function", ht = Array.isArray, fe = (a) => ht(a) || typeof a?.[Symbol.iterator] == "function", rt = `[
|
|
251
|
-
\f\r]`,
|
|
252
|
-
\f\r"'\`<>=]|("|')|))|$)`, "g"), Ct = /'/g, Et = /"/g, Mt = /^(?:script|style|textarea|title)$/i, Lt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }),
|
|
251
|
+
\f\r]`, B = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Tt = /-->/g, It = />/g, S = RegExp(`>|${rt}(?:([^\\s"'>=/]+)(${rt}*=${rt}*(?:[^
|
|
252
|
+
\f\r"'\`<>=]|("|')|))|$)`, "g"), Ct = /'/g, Et = /"/g, Mt = /^(?:script|style|textarea|title)$/i, Lt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }), n = Lt(1), Pt = Lt(2), P = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Dt = /* @__PURE__ */ new WeakMap(), A = T.createTreeWalker(T, 129);
|
|
253
253
|
function jt(a, t) {
|
|
254
254
|
if (!ht(a) || !a.hasOwnProperty("raw")) throw Error("invalid template strings array");
|
|
255
255
|
return At !== void 0 ? At.createHTML(t) : t;
|
|
256
256
|
}
|
|
257
257
|
const ue = (a, t) => {
|
|
258
258
|
const e = a.length - 1, s = [];
|
|
259
|
-
let r, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", i =
|
|
260
|
-
for (let
|
|
261
|
-
const d = a[
|
|
262
|
-
let
|
|
263
|
-
for (; f < d.length && (i.lastIndex = f, h = i.exec(d), h !== null); ) f = i.lastIndex, i ===
|
|
264
|
-
const u = i === S && a[
|
|
265
|
-
o += i ===
|
|
259
|
+
let r, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", i = B;
|
|
260
|
+
for (let l = 0; l < e; l++) {
|
|
261
|
+
const d = a[l];
|
|
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 === B ? h[1] === "!--" ? i = Tt : h[1] !== void 0 ? i = It : h[2] !== void 0 ? (Mt.test(h[2]) && (r = RegExp("</" + h[2], "g")), i = S) : h[3] !== void 0 && (i = S) : i === S ? h[0] === ">" ? (i = r ?? B, 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] === '"' ? Et : Ct) : i === Et || i === Ct ? i = S : i === Tt || i === It ? i = B : (i = S, r = void 0);
|
|
264
|
+
const u = i === S && a[l + 1].startsWith("/>") ? " " : "";
|
|
265
|
+
o += i === B ? d + me : p >= 0 ? (s.push(c), d.slice(0, p) + Ot + d.slice(p) + k + u) : d + k + (p === -2 ? l : u);
|
|
266
266
|
}
|
|
267
267
|
return [jt(a, o + (a[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
|
|
268
268
|
};
|
|
@@ -271,12 +271,12 @@ class U {
|
|
|
271
271
|
let r;
|
|
272
272
|
this.parts = [];
|
|
273
273
|
let o = 0, i = 0;
|
|
274
|
-
const
|
|
275
|
-
if (this.el = U.createElement(
|
|
274
|
+
const l = t.length - 1, d = this.parts, [c, h] = ue(t, e);
|
|
275
|
+
if (this.el = U.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 (; (r = A.nextNode()) !== null && d.length <
|
|
279
|
+
for (; (r = A.nextNode()) !== null && d.length < l; ) {
|
|
280
280
|
if (r.nodeType === 1) {
|
|
281
281
|
if (r.hasAttributes()) for (const p of r.getAttributeNames()) if (p.endsWith(Ot)) {
|
|
282
282
|
const f = h[i++], u = r.getAttribute(p).split(k), $ = /([.?@])?(.*)/.exec(f);
|
|
@@ -322,11 +322,11 @@ class ge {
|
|
|
322
322
|
u(t) {
|
|
323
323
|
const { el: { content: e }, parts: s } = this._$AD, r = (t?.creationScope ?? T).importNode(e, !0);
|
|
324
324
|
A.currentNode = r;
|
|
325
|
-
let o = A.nextNode(), i = 0,
|
|
325
|
+
let o = A.nextNode(), i = 0, l = 0, d = s[0];
|
|
326
326
|
for (; d !== void 0; ) {
|
|
327
327
|
if (i === d.index) {
|
|
328
|
-
let
|
|
329
|
-
d.type === 2 ?
|
|
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 ye(o, this, t)), this._$AV.push(c), d = s[++l];
|
|
330
330
|
}
|
|
331
331
|
i !== d?.index && (o = A.nextNode(), i++);
|
|
332
332
|
}
|
|
@@ -411,9 +411,9 @@ class tt {
|
|
|
411
411
|
let i = !1;
|
|
412
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
|
-
const
|
|
415
|
-
let d,
|
|
416
|
-
for (t = o[0], d = 0; d < o.length - 1; d++)
|
|
414
|
+
const l = t;
|
|
415
|
+
let d, c;
|
|
416
|
+
for (t = o[0], d = 0; d < o.length - 1; d++) c = D(this, l[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
418
|
i && !r && this.j(t);
|
|
419
419
|
}
|
|
@@ -508,39 +508,39 @@ function Se(a = {}) {
|
|
|
508
508
|
}
|
|
509
509
|
function Ae({ baseUrl: a, token: t = "", fetchFn: e } = {}) {
|
|
510
510
|
if (!a) throw new Error("createClient requires a baseUrl");
|
|
511
|
-
const s = a.replace(/\/+$/, ""), r = e || ((...
|
|
512
|
-
async function o(
|
|
511
|
+
const s = a.replace(/\/+$/, ""), r = e || ((...l) => fetch(...l));
|
|
512
|
+
async function o(l) {
|
|
513
513
|
const d = { Accept: "application/json" };
|
|
514
514
|
t && (d.Authorization = `Bearer ${t}`);
|
|
515
|
-
const
|
|
516
|
-
if (!
|
|
517
|
-
const h = new Error(`api-hsot ${
|
|
518
|
-
throw h.status =
|
|
515
|
+
const c = await r(`${s}${l}`, { headers: d });
|
|
516
|
+
if (!c.ok) {
|
|
517
|
+
const h = new Error(`api-hsot ${c.status} on ${l}`);
|
|
518
|
+
throw h.status = c.status, h;
|
|
519
519
|
}
|
|
520
|
-
return
|
|
520
|
+
return c.json();
|
|
521
521
|
}
|
|
522
|
-
async function i(
|
|
523
|
-
const
|
|
522
|
+
async function i(l, d = {}) {
|
|
523
|
+
const c = [];
|
|
524
524
|
let h = null;
|
|
525
525
|
for (let p = 0; p < _e; p += 1) {
|
|
526
|
-
const f = Se(h ? { ...d, cursor: h } : d), u = await o(`${
|
|
527
|
-
if (
|
|
526
|
+
const f = Se(h ? { ...d, cursor: h } : d), u = await o(`${l}${f}`);
|
|
527
|
+
if (c.push(...u.items || []), h = u.nextCursor || null, !h) break;
|
|
528
528
|
}
|
|
529
|
-
return { items:
|
|
529
|
+
return { items: c, total: c.length, nextCursor: null };
|
|
530
530
|
}
|
|
531
531
|
return {
|
|
532
|
-
listSchools: (
|
|
533
|
-
getSchool: (
|
|
534
|
-
listTeams: (
|
|
535
|
-
getTeam: (
|
|
536
|
-
listConferences: (
|
|
537
|
-
listPlayers: (
|
|
538
|
-
listRosters: (
|
|
539
|
-
listGames: (
|
|
540
|
-
getGame: (
|
|
541
|
-
listTournaments: (
|
|
542
|
-
listSeedings: (
|
|
543
|
-
listRankings: (
|
|
532
|
+
listSchools: (l) => i("/schools", l),
|
|
533
|
+
getSchool: (l) => o(`/schools/${l}`),
|
|
534
|
+
listTeams: (l) => i("/teams", l),
|
|
535
|
+
getTeam: (l) => o(`/teams/${l}`),
|
|
536
|
+
listConferences: (l) => i("/conferences", l),
|
|
537
|
+
listPlayers: (l) => i("/players", l),
|
|
538
|
+
listRosters: (l) => i("/rosters", l),
|
|
539
|
+
listGames: (l) => i("/games", l),
|
|
540
|
+
getGame: (l) => o(`/games/${l}`),
|
|
541
|
+
listTournaments: (l) => i("/tournaments", l),
|
|
542
|
+
listSeedings: (l, d) => i(`/tournaments/${l}/seedings`, d),
|
|
543
|
+
listRankings: (l) => i("/rankings", l),
|
|
544
544
|
listSports: () => o("/sports")
|
|
545
545
|
};
|
|
546
546
|
}
|
|
@@ -575,6 +575,9 @@ function pt(a) {
|
|
|
575
575
|
function Te(a) {
|
|
576
576
|
return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
|
|
577
577
|
}
|
|
578
|
+
function Ie(a) {
|
|
579
|
+
return (Array.isArray(a?.positions) ? a.positions : String(a?.position ?? "").split(/[/,]/)).map((e) => String(e ?? "").trim()).filter(Boolean).join("/");
|
|
580
|
+
}
|
|
578
581
|
function et(a = /* @__PURE__ */ new Date()) {
|
|
579
582
|
const t = a.getFullYear();
|
|
580
583
|
return a.getMonth() >= 6 ? `${t}-${t + 1}` : `${t - 1}-${t}`;
|
|
@@ -583,7 +586,7 @@ function mt(a = /* @__PURE__ */ new Date()) {
|
|
|
583
586
|
const t = (e) => String(e).padStart(2, "0");
|
|
584
587
|
return `${a.getFullYear()}-${t(a.getMonth() + 1)}-${t(a.getDate())}`;
|
|
585
588
|
}
|
|
586
|
-
function
|
|
589
|
+
function Ce(a, t = mt()) {
|
|
587
590
|
const e = [...new Set((a || []).filter(Boolean))].sort();
|
|
588
591
|
if (!e.length || e.includes(t)) return t;
|
|
589
592
|
const s = e.filter((r) => r < t);
|
|
@@ -597,7 +600,7 @@ function K(a) {
|
|
|
597
600
|
const t = parseInt(a.slice(1), 16), e = t >> 16 & 255, s = t >> 8 & 255, r = t & 255;
|
|
598
601
|
return 0.299 * e + 0.587 * s + 0.114 * r > 150 ? "#0F1B33" : "#FFFFFF";
|
|
599
602
|
}
|
|
600
|
-
const
|
|
603
|
+
const Ee = (a) => {
|
|
601
604
|
const t = ["th", "st", "nd", "rd"], e = a % 100;
|
|
602
605
|
return a + (t[(e - 20) % 10] || t[e] || t[0]);
|
|
603
606
|
};
|
|
@@ -608,19 +611,22 @@ function zt(a, t) {
|
|
|
608
611
|
}, s = e(a), r = e(t);
|
|
609
612
|
return s !== null && r !== null && s !== r ? r - s : s !== null && r === null ? -1 : s === null && r !== null ? 1 : String(a ?? "").localeCompare(String(t ?? ""), "en", { sensitivity: "base" });
|
|
610
613
|
}
|
|
611
|
-
function
|
|
614
|
+
function Pe(a, t) {
|
|
612
615
|
const e = (s) => String(s?.name ?? s ?? "");
|
|
613
616
|
return e(a).localeCompare(e(t), "en", { numeric: !0, sensitivity: "base" });
|
|
614
617
|
}
|
|
615
618
|
function Wt(a) {
|
|
616
|
-
if (a.state === "live")
|
|
619
|
+
if (a.state === "live") {
|
|
620
|
+
const t = [a.period, a.clock].filter(Boolean).join(" ");
|
|
621
|
+
return { kind: "live", label: t ? `Live · ${t}` : "Live" };
|
|
622
|
+
}
|
|
617
623
|
if (a.state === "final") {
|
|
618
624
|
const t = [];
|
|
619
625
|
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(" · ")}` : ""}` };
|
|
620
626
|
}
|
|
621
627
|
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(/ · $/, "") };
|
|
622
628
|
}
|
|
623
|
-
const
|
|
629
|
+
const De = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
|
|
624
630
|
function _(a) {
|
|
625
631
|
let t = String(a || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
|
|
626
632
|
const e = t.indexOf("#");
|
|
@@ -629,13 +635,13 @@ function _(a) {
|
|
|
629
635
|
let r = t.split("?")[0] + s;
|
|
630
636
|
return r = r.replace(/([^:])\/{2,}/g, "$1/").replace(/^\/{2,}/, "/"), r = r.replace(/^\/(?=#)/, ""), r.length > 1 && (r = r.replace(/\/+$/, "")), r.toLowerCase();
|
|
631
637
|
}
|
|
632
|
-
function
|
|
638
|
+
function Gt() {
|
|
633
639
|
const a = globalThis.location;
|
|
634
640
|
if (!a) return "";
|
|
635
641
|
const t = (a.hash || "").startsWith("#/") ? a.hash : "";
|
|
636
642
|
return _((a.pathname || "") + t);
|
|
637
643
|
}
|
|
638
|
-
function
|
|
644
|
+
function ze(a, t, e) {
|
|
639
645
|
if (!e) return null;
|
|
640
646
|
const s = _(a);
|
|
641
647
|
if (!s) return null;
|
|
@@ -644,10 +650,10 @@ function De(a, t, e) {
|
|
|
644
650
|
const i = _(g(t.section, { sport: e, view: "" }));
|
|
645
651
|
if (s === i) return "";
|
|
646
652
|
if (!s.startsWith(`${i}/`)) return null;
|
|
647
|
-
const
|
|
648
|
-
return d.length > 2 || d.some((
|
|
653
|
+
const l = s.slice(i.length + 1), d = l.split("/");
|
|
654
|
+
return d.length > 2 || d.some((c) => !/^[a-z][a-z-]*$/.test(c)) || De.has(d[0]) ? null : l;
|
|
649
655
|
}
|
|
650
|
-
function
|
|
656
|
+
function Be(a, t, e) {
|
|
651
657
|
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 ? [
|
|
652
658
|
{ label: "Boys Standings", href: s("boys/standings") },
|
|
653
659
|
{ label: "Girls Standings", href: s("girls/standings") }
|
|
@@ -660,7 +666,7 @@ function ze(a, t, e) {
|
|
|
660
666
|
{ label: "Polls & Rankings", href: s("rankings") }
|
|
661
667
|
];
|
|
662
668
|
}
|
|
663
|
-
function Re(a, t =
|
|
669
|
+
function Re(a, t = Gt()) {
|
|
664
670
|
const e = _(t);
|
|
665
671
|
for (const s of a.querySelectorAll(':scope > a[slot="nav"]'))
|
|
666
672
|
e && _(s.getAttribute("href")) === e ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
|
|
@@ -725,13 +731,13 @@ class w extends E {
|
|
|
725
731
|
this._refreshId && (clearInterval(this._refreshId), this._refreshId = null);
|
|
726
732
|
}
|
|
727
733
|
render() {
|
|
728
|
-
return this.error === "not-configured" ?
|
|
734
|
+
return this.error === "not-configured" ? n`<div class="error">This component needs an <code>api</code> attribute (the api-hsot public read-surface base URL) or an injected client.</div>` : this.error ? n`<div class="error">Unable to load right now. <button class="chip" @click=${() => this.load()}>Retry</button></div>` : this.data ? this.renderView() : n`<div class="loading" role="status">Loading…</div>`;
|
|
729
735
|
}
|
|
730
736
|
renderView() {
|
|
731
|
-
return
|
|
737
|
+
return n``;
|
|
732
738
|
}
|
|
733
739
|
}
|
|
734
|
-
const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])),
|
|
740
|
+
const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Fe = b`
|
|
735
741
|
:host {
|
|
736
742
|
--hsot-red: var(--color-red, #D1232A);
|
|
737
743
|
--hsot-red-deep: var(--color-red-dark, #951C21);
|
|
@@ -769,7 +775,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
769
775
|
outline-offset: 1px;
|
|
770
776
|
}
|
|
771
777
|
.mut { color: var(--hsot-gray-5); }
|
|
772
|
-
`,
|
|
778
|
+
`, Ne = b`
|
|
773
779
|
.band { background: var(--hsot-white); color: var(--hsot-black); }
|
|
774
780
|
.band .inner { max-width: 1366px; margin: 0 auto; padding: 1.1rem 1.25rem 0; }
|
|
775
781
|
.band h1, .band h2.bandtitle {
|
|
@@ -818,7 +824,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
818
824
|
@media (max-width: 720px) {
|
|
819
825
|
.band h1, .band h2.bandtitle, .band.section h1, .band.section h2.bandtitle { font-size: 1.8rem; }
|
|
820
826
|
}
|
|
821
|
-
`,
|
|
827
|
+
`, Ue = b`
|
|
822
828
|
.view { max-width: 1366px; margin: 0 auto; padding: 1.25rem; box-sizing: border-box; }
|
|
823
829
|
/* Optional right rail (slot="rail" light-DOM children): a divided 300px
|
|
824
830
|
column on desktop, stacked under the view content on smaller screens. */
|
|
@@ -882,7 +888,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
882
888
|
.error { padding: 1.2rem 1rem; color: var(--hsot-red-deep); font-size: 0.9rem; }
|
|
883
889
|
.note { font-size: 0.8125rem; color: var(--hsot-gray-5); margin: 0.6rem 0 0; }
|
|
884
890
|
.loading { padding: 1.2rem; color: var(--hsot-gray-5); font-family: var(--hsot-heading-font); }
|
|
885
|
-
`,
|
|
891
|
+
`, Oe = b`
|
|
886
892
|
.pill {
|
|
887
893
|
display: inline-block; font-family: var(--hsot-heading-font); font-weight: 700;
|
|
888
894
|
font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.04em;
|
|
@@ -897,7 +903,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
897
903
|
.pill.champ { background: var(--hsot-straw); color: #6b5900; }
|
|
898
904
|
@keyframes hsot-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
|
|
899
905
|
@media (prefers-reduced-motion: reduce) { .pill.live { animation: none; } }
|
|
900
|
-
`,
|
|
906
|
+
`, He = b`
|
|
901
907
|
.tablewrap { overflow-x: auto; }
|
|
902
908
|
table.data { font-family: var(--hsot-heading-font); font-size: 14px; border-collapse: collapse; width: 100%; }
|
|
903
909
|
table.data th {
|
|
@@ -915,7 +921,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
915
921
|
table.data tbody tr.rowlink:hover { background: var(--hsot-gray-1); }
|
|
916
922
|
table.data td.teamcell a { color: inherit; text-decoration: none; font-weight: 500; }
|
|
917
923
|
table.data td.teamcell a:hover { text-decoration: underline; }
|
|
918
|
-
`,
|
|
924
|
+
`, Me = b`
|
|
919
925
|
.swatch {
|
|
920
926
|
display: inline-flex; align-items: center; justify-content: center;
|
|
921
927
|
width: 26px; height: 26px; border-radius: 50%;
|
|
@@ -939,7 +945,7 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
939
945
|
.dot.W { background: var(--hsot-win); }
|
|
940
946
|
.dot.L { background: var(--hsot-loss); }
|
|
941
947
|
.dot.T { background: var(--hsot-tie); }
|
|
942
|
-
`,
|
|
948
|
+
`, Le = b`
|
|
943
949
|
ul.gamelist { list-style: none; margin: 0; padding: 0; }
|
|
944
950
|
.gamelist li {
|
|
945
951
|
display: flex; align-items: center; gap: 0.7rem; padding: 0.55rem 1rem;
|
|
@@ -989,24 +995,24 @@ const v = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Be = b`
|
|
|
989
995
|
.gamelist .ff { color: var(--hsot-gray-5); font-size: 0.78rem; font-style: italic; }
|
|
990
996
|
.gamelist .where { color: var(--hsot-gray-5); font-size: 0.78rem; }
|
|
991
997
|
.gamelist a.box { font-size: 0.78rem; }
|
|
992
|
-
`, j = [
|
|
998
|
+
`, j = [Fe, Ne, Ue, Oe, He, Me, Le];
|
|
993
999
|
function ut(a) {
|
|
994
1000
|
return a.state !== "final" ? null : a.forfeit === "home" ? "away" : a.forfeit === "away" || a.homeScore > a.awayScore ? "home" : a.awayScore > a.homeScore ? "away" : a.tiebreakWinner && a.tiebreakWinner !== "none" ? a.tiebreakWinner : "tie";
|
|
995
1001
|
}
|
|
996
|
-
function
|
|
1002
|
+
function je(a) {
|
|
997
1003
|
return a && (a.forfeit === "home" || a.forfeit === "away") ? a.forfeit : null;
|
|
998
1004
|
}
|
|
999
1005
|
function W(a, t) {
|
|
1000
1006
|
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)));
|
|
1001
1007
|
for (const o of r) {
|
|
1002
|
-
const i = ut(o),
|
|
1008
|
+
const i = ut(o), l = o.gameType === "conference";
|
|
1003
1009
|
for (const d of ["home", "away"]) {
|
|
1004
|
-
const
|
|
1005
|
-
if (!
|
|
1006
|
-
const h = s(
|
|
1010
|
+
const c = d === "home" ? o.homeTeamId : o.awayTeamId;
|
|
1011
|
+
if (!c) continue;
|
|
1012
|
+
const h = s(c), p = d === "home" ? o.homeScore : o.awayScore, f = d === "home" ? o.awayScore : o.homeScore;
|
|
1007
1013
|
h.pf += p, h.pa += f;
|
|
1008
1014
|
let u = "T";
|
|
1009
|
-
i === "tie" ? (h.t += 1,
|
|
1015
|
+
i === "tie" ? (h.t += 1, l && (h.ct += 1)) : i === d ? (h.w += 1, l && (h.cw += 1), u = "W") : (h.l += 1, l && (h.cl += 1), u = "L"), h.results.push({ gameId: o.id, date: o.date, mark: u, my: p, their: f, opp: d === "home" ? o.awayTeamId : o.homeTeamId, conf: l });
|
|
1010
1016
|
}
|
|
1011
1017
|
}
|
|
1012
1018
|
return e;
|
|
@@ -1018,19 +1024,19 @@ function st(a) {
|
|
|
1018
1024
|
for (let s = a.length - 1; s >= 0 && a[s].mark === t; s -= 1) e += 1;
|
|
1019
1025
|
return t + e;
|
|
1020
1026
|
}
|
|
1021
|
-
const
|
|
1027
|
+
const Bt = (a, t, e) => {
|
|
1022
1028
|
const s = a + t + e;
|
|
1023
1029
|
return s ? (a + e / 2) / s : 0;
|
|
1024
|
-
},
|
|
1030
|
+
}, Rt = (a) => a.toFixed(3).replace("0.", ".");
|
|
1025
1031
|
function x(a, t = !1) {
|
|
1026
1032
|
if (!a) return "0-0";
|
|
1027
1033
|
const e = t ? a.cw : a.w, s = t ? a.cl : a.l, r = t ? a.ct : a.t;
|
|
1028
1034
|
return `${e}-${s}${r ? `-${r}` : ""}`;
|
|
1029
1035
|
}
|
|
1030
|
-
function
|
|
1036
|
+
function qt(a, t) {
|
|
1031
1037
|
return a.map((e) => {
|
|
1032
1038
|
const s = t[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
|
|
1033
|
-
return { team: e, rec: s, confPct:
|
|
1039
|
+
return { team: e, rec: s, confPct: Bt(s.cw, s.cl, s.ct), overallPct: Bt(s.w, s.l, s.t) };
|
|
1034
1040
|
}).sort((e, s) => s.confPct - e.confPct || s.overallPct - e.overallPct || s.rec.pf - s.rec.pa - (e.rec.pf - e.rec.pa));
|
|
1035
1041
|
}
|
|
1036
1042
|
function gt(a, t) {
|
|
@@ -1046,17 +1052,17 @@ function vt(a, t, e, s, r) {
|
|
|
1046
1052
|
const i = /* @__PURE__ */ new Map();
|
|
1047
1053
|
for (const d of a || []) {
|
|
1048
1054
|
if (d.sport !== s || r && d.effectiveDate > r || d.gender && o.gender !== d.gender && o.gender !== "coed") continue;
|
|
1049
|
-
const
|
|
1050
|
-
(!h || d.effectiveDate > h.effectiveDate) && i.set(
|
|
1055
|
+
const c = d.gender || "", h = i.get(c);
|
|
1056
|
+
(!h || d.effectiveDate > h.effectiveDate) && i.set(c, d);
|
|
1051
1057
|
}
|
|
1052
|
-
let
|
|
1058
|
+
let l = null;
|
|
1053
1059
|
for (const d of i.values()) {
|
|
1054
|
-
const
|
|
1055
|
-
|
|
1060
|
+
const c = (d.teamIds || []).indexOf(e);
|
|
1061
|
+
c !== -1 && (!l || d.effectiveDate > l.effectiveDate) && (l = { poll: d, rank: c + 1 });
|
|
1056
1062
|
}
|
|
1057
|
-
return
|
|
1063
|
+
return l ? l.rank : null;
|
|
1058
1064
|
}
|
|
1059
|
-
function
|
|
1065
|
+
function We(a, t, e) {
|
|
1060
1066
|
if (!a) return { kind: "none", delta: 0 };
|
|
1061
1067
|
const s = (a.teamIds || []).indexOf(e) + 1;
|
|
1062
1068
|
if (!s) return { kind: "none", delta: 0 };
|
|
@@ -1066,11 +1072,11 @@ function je(a, t, e) {
|
|
|
1066
1072
|
const o = r - s;
|
|
1067
1073
|
return o > 0 ? { kind: "up", delta: o } : o < 0 ? { kind: "down", delta: -o } : { kind: "same", delta: 0 };
|
|
1068
1074
|
}
|
|
1069
|
-
function
|
|
1075
|
+
function Ge(a) {
|
|
1070
1076
|
return /^https?:\/\//i.test(String(a || ""));
|
|
1071
1077
|
}
|
|
1072
1078
|
function Vt(a, { w: t, h: e } = {}) {
|
|
1073
|
-
if (!
|
|
1079
|
+
if (!Ge(a)) return "";
|
|
1074
1080
|
const s = [];
|
|
1075
1081
|
t && s.push(`w=${Math.max(1, Math.round(t))}`), e && s.push(`h=${Math.max(1, Math.round(e))}`), s.push("f=webp");
|
|
1076
1082
|
const r = a.includes("?") ? "&" : "?";
|
|
@@ -1084,18 +1090,18 @@ function qe(a, t) {
|
|
|
1084
1090
|
return Vt(a?.photoAssetId, { w: t * 2 });
|
|
1085
1091
|
}
|
|
1086
1092
|
function $t(a, t, { title: e, sub: s, teams: r }) {
|
|
1087
|
-
const o =
|
|
1088
|
-
return
|
|
1093
|
+
const o = Gt(), l = !!a.querySelector(':scope > a[slot="nav"]') || ze(o, t.hrefs, t.sport) !== null;
|
|
1094
|
+
return n`
|
|
1089
1095
|
<div class="band section">
|
|
1090
1096
|
<div class="inner">
|
|
1091
1097
|
<h1>${e}</h1>
|
|
1092
|
-
${s ?
|
|
1098
|
+
${s ? n`<p class="sub">${s}</p>` : m}
|
|
1093
1099
|
</div>
|
|
1094
|
-
${
|
|
1100
|
+
${l ? n`
|
|
1095
1101
|
<nav class="sectionnav" aria-label="${z(t.sport)} section">
|
|
1096
1102
|
<div class="navrow">
|
|
1097
1103
|
<slot name="nav">
|
|
1098
|
-
${
|
|
1104
|
+
${Be(t.sport, r, t.hrefs).map((d) => n`<a href=${d.href}
|
|
1099
1105
|
aria-current=${o && _(d.href) === o ? "page" : m}>${d.label}</a>`)}
|
|
1100
1106
|
</slot>
|
|
1101
1107
|
</div>
|
|
@@ -1111,50 +1117,50 @@ function H(a, t = 26) {
|
|
|
1111
1117
|
if (!a) return m;
|
|
1112
1118
|
const e = Q(a, t);
|
|
1113
1119
|
if (e)
|
|
1114
|
-
return
|
|
1120
|
+
return n`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
|
|
1115
1121
|
src=${e} style="width:${t}px;height:${t}px" />`;
|
|
1116
1122
|
const s = a.colorPrimary || "#030711", r = K(s);
|
|
1117
|
-
return
|
|
1123
|
+
return n`<span class="swatch" aria-hidden="true"
|
|
1118
1124
|
style="width:${t}px;height:${t}px;background:${s};color:${r};font-size:${Math.max(8, t * 0.28)}px"
|
|
1119
1125
|
>${ft(a)}</span>`;
|
|
1120
1126
|
}
|
|
1121
1127
|
function bt(a, t, e) {
|
|
1122
1128
|
const s = vt(a.rankings, a.teamsById, t, a.sport, e);
|
|
1123
|
-
return s ?
|
|
1129
|
+
return s ? n`<span class="rankbadge">#${s}</span>` : m;
|
|
1124
1130
|
}
|
|
1125
1131
|
function Yt(a, t, e) {
|
|
1126
1132
|
const s = O(a, t);
|
|
1127
|
-
return s ?
|
|
1133
|
+
return s ? n`${bt(a, t, e)}<a href=${g(a.hrefs.school, { id: s.id })}>${s.name}</a>` : n`<span class="mut">TBD</span>`;
|
|
1128
1134
|
}
|
|
1129
1135
|
function yt(a, t, e = 5) {
|
|
1130
1136
|
const s = a.records[t];
|
|
1131
|
-
if (!s || !s.results.length) return
|
|
1137
|
+
if (!s || !s.results.length) return n`<span class="mut">·</span>`;
|
|
1132
1138
|
const r = s.results.slice(-1 * e);
|
|
1133
|
-
return
|
|
1134
|
-
${r.map((o) =>
|
|
1139
|
+
return n`<span class="dots" role="img" aria-label="last ${r.length} results">
|
|
1140
|
+
${r.map((o) => n`<a class="dot ${o.mark}"
|
|
1135
1141
|
title="${o.mark} ${o.my}-${o.their} vs ${C(a, o.opp)}"
|
|
1136
1142
|
href=${g(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
|
|
1137
1143
|
</span>`;
|
|
1138
1144
|
}
|
|
1139
|
-
function
|
|
1140
|
-
return a.querySelector(':scope > [slot="rail"]') ?
|
|
1145
|
+
function G(a, t) {
|
|
1146
|
+
return a.querySelector(':scope > [slot="rail"]') ? n`<div class="view withrail">
|
|
1141
1147
|
<div class="viewmain">${t}</div>
|
|
1142
1148
|
<aside class="viewrail"><slot name="rail"></slot></aside>
|
|
1143
|
-
</div>` :
|
|
1149
|
+
</div>` : n`<div class="view">${t}</div>`;
|
|
1144
1150
|
}
|
|
1145
|
-
function
|
|
1151
|
+
function q(a) {
|
|
1146
1152
|
if (!a.promoImage) return m;
|
|
1147
|
-
const t =
|
|
1148
|
-
return
|
|
1153
|
+
const t = n`<img src=${a.promoImage} alt=${a.promoAlt || "Sponsor"}>`;
|
|
1154
|
+
return n`<div class="promo">${a.promoHref ? n`<a href=${a.promoHref} target="_blank" rel="sponsored noopener">${t}</a>` : t}</div>`;
|
|
1149
1155
|
}
|
|
1150
1156
|
function J(a) {
|
|
1151
1157
|
const t = Wt(a);
|
|
1152
|
-
return
|
|
1158
|
+
return n`<span class="pill ${t.kind}">${t.label}</span>`;
|
|
1153
1159
|
}
|
|
1154
1160
|
function Kt(a, t, e) {
|
|
1155
|
-
if (!t) return
|
|
1161
|
+
if (!t) return n`<span class="mut">·</span>`;
|
|
1156
1162
|
const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId, r = t.homeTeamId === e ? "vs" : "at";
|
|
1157
|
-
return
|
|
1163
|
+
return n`${t.state === "live" ? n`<span class="pill live">Live</span> ` : n`${y(t.date, { month: "numeric", day: "numeric" })} `}${r} ${Z(a, s)}`;
|
|
1158
1164
|
}
|
|
1159
1165
|
class Qt extends w {
|
|
1160
1166
|
static styles = j;
|
|
@@ -1175,20 +1181,20 @@ class Qt extends w {
|
|
|
1175
1181
|
this._datePinned = !!this.date;
|
|
1176
1182
|
}
|
|
1177
1183
|
async fetchData(t) {
|
|
1178
|
-
const e = this.season || et(), [s, r, o, i,
|
|
1184
|
+
const e = this.season || et(), [s, r, o, i, l] = await Promise.all([
|
|
1179
1185
|
t.listSchools(),
|
|
1180
1186
|
t.listTeams({ sport: this.sport }),
|
|
1181
1187
|
t.listConferences(),
|
|
1182
1188
|
t.listGames({ sport: this.sport, season: e }),
|
|
1183
1189
|
t.listRankings({ sport: this.sport })
|
|
1184
1190
|
]);
|
|
1185
|
-
return this._datePinned || (this.date =
|
|
1191
|
+
return this._datePinned || (this.date = Ce(i.items.map((d) => d.date)), this._datePinned = !0), {
|
|
1186
1192
|
season: e,
|
|
1187
1193
|
schools: s.items,
|
|
1188
1194
|
teams: r.items,
|
|
1189
1195
|
conferences: o.items,
|
|
1190
1196
|
games: i.items,
|
|
1191
|
-
rankings:
|
|
1197
|
+
rankings: l.items
|
|
1192
1198
|
};
|
|
1193
1199
|
}
|
|
1194
1200
|
get ctx() {
|
|
@@ -1202,30 +1208,30 @@ class Qt extends w {
|
|
|
1202
1208
|
}, this._ctxData = this.data), this._ctx;
|
|
1203
1209
|
}
|
|
1204
1210
|
renderView() {
|
|
1205
|
-
const t = this.ctx, e = v(this.data.conferences), s = [...new Set(this.data.games.map((
|
|
1206
|
-
const h = [
|
|
1211
|
+
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) => {
|
|
1212
|
+
const h = [c.awayTeamId, c.homeTeamId].map((p) => vt(t.rankings, t.teamsById, p, this.sport, c.date)).filter(Boolean);
|
|
1207
1213
|
return h.length ? Math.min(...h) : r;
|
|
1208
|
-
}, i = this.data.games.filter((
|
|
1209
|
-
i.sort((
|
|
1214
|
+
}, i = this.data.games.filter((c) => c.date === this.date), l = new Map(i.map((c) => [c, o(c)]));
|
|
1215
|
+
i.sort((c, h) => (c.state === "live" ? 0 : 1) - (h.state === "live" ? 0 : 1) || l.get(c) - l.get(h));
|
|
1210
1216
|
const d = /* @__PURE__ */ new Map();
|
|
1211
|
-
return i.forEach((
|
|
1212
|
-
const h =
|
|
1213
|
-
d.has(h) || d.set(h, []), d.get(h).push(
|
|
1214
|
-
}),
|
|
1217
|
+
return i.forEach((c) => {
|
|
1218
|
+
const h = c.gameType === "conference" && c.conferenceId ? e[c.conferenceId]?.name || "Conference" : c.gameType === "playoff" ? "Playoffs" : c.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
|
|
1219
|
+
d.has(h) || d.set(h, []), d.get(h).push(c);
|
|
1220
|
+
}), n`
|
|
1215
1221
|
${$t(this, t, {
|
|
1216
|
-
title:
|
|
1217
|
-
sub:
|
|
1222
|
+
title: n`${z(this.sport)} scores & schedules`,
|
|
1223
|
+
sub: n`${y(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${i.length} games`,
|
|
1218
1224
|
teams: this.data.teams
|
|
1219
1225
|
})}
|
|
1220
|
-
${
|
|
1221
|
-
${
|
|
1226
|
+
${G(this, n`
|
|
1227
|
+
${q(this)}
|
|
1222
1228
|
<div class="toolbar">
|
|
1223
1229
|
<label class="asof" for="datesel">Date</label>
|
|
1224
|
-
<select id="datesel" @change=${(
|
|
1225
|
-
this.date =
|
|
1230
|
+
<select id="datesel" @change=${(c) => {
|
|
1231
|
+
this.date = c.target.value;
|
|
1226
1232
|
}}>
|
|
1227
|
-
${(s.includes(this.date) ? s : [...s, this.date].sort()).map((
|
|
1228
|
-
${y(
|
|
1233
|
+
${(s.includes(this.date) ? s : [...s, this.date].sort()).map((c) => n`<option value=${c} ?selected=${c === this.date}>
|
|
1234
|
+
${y(c, { weekday: "short", month: "short", day: "numeric" })}${c === mt() ? " · today" : ""}
|
|
1229
1235
|
</option>`)}
|
|
1230
1236
|
</select>
|
|
1231
1237
|
<button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
|
|
@@ -1239,9 +1245,9 @@ class Qt extends w {
|
|
|
1239
1245
|
<span class="spacer"></span>
|
|
1240
1246
|
<span class="asof">Live games first · report a score to see it update here</span>
|
|
1241
1247
|
</div>
|
|
1242
|
-
${i.length ? m :
|
|
1243
|
-
${[...d.entries()].map(([
|
|
1244
|
-
<div class="section-title">${
|
|
1248
|
+
${i.length ? m : n`<p class="empty">No ${this.sport} games on this date.</p>`}
|
|
1249
|
+
${[...d.entries()].map(([c, h]) => n`
|
|
1250
|
+
<div class="section-title">${c}</div>
|
|
1245
1251
|
<div class="card"><ul class="gamelist">
|
|
1246
1252
|
${h.map((p) => this.renderGame(t, p))}
|
|
1247
1253
|
</ul></div>
|
|
@@ -1253,14 +1259,14 @@ class Qt extends w {
|
|
|
1253
1259
|
// a lone score column on the far right read as detached from the teams).
|
|
1254
1260
|
// Scheduled games carry their start time on the status pill alone.
|
|
1255
1261
|
renderGame(t, e) {
|
|
1256
|
-
const s = e.state === "final" || e.state === "live", r = (i,
|
|
1257
|
-
return
|
|
1262
|
+
const s = e.state === "final" || e.state === "live", r = (i, l, d = m) => n`<span class="side">${Yt(t, i, e.date)}${s ? n`<span class="score">${l}</span>` : m}${d}</span>`, o = je(e);
|
|
1263
|
+
return n`
|
|
1258
1264
|
<li>
|
|
1259
1265
|
${J(e)}
|
|
1260
|
-
<span class="opp matchup">${r(e.awayTeamId, e.awayScore,
|
|
1261
|
-
${o ?
|
|
1266
|
+
<span class="opp matchup">${r(e.awayTeamId, e.awayScore, n`<span class="at">at</span>`)}${r(e.homeTeamId, e.homeScore)}</span>
|
|
1267
|
+
${o ? n`<span class="ff">${C(t, o === "home" ? e.homeTeamId : e.awayTeamId)} forfeited</span>` : m}
|
|
1262
1268
|
<span class="where">${e.venue || ""}</span>
|
|
1263
|
-
${e.broadcast ?
|
|
1269
|
+
${e.broadcast ? n`<span class="pill class">${e.broadcast}</span>` : m}
|
|
1264
1270
|
<a class="box" href=${g(t.hrefs.game, { sport: this.sport, id: e.id })}>Box score →</a>
|
|
1265
1271
|
</li>
|
|
1266
1272
|
`;
|
|
@@ -1280,7 +1286,7 @@ class Zt extends w {
|
|
|
1280
1286
|
super(), this.sport = "football", this.season = "", this.classFilter = "All", this.query = "";
|
|
1281
1287
|
}
|
|
1282
1288
|
async fetchData(t) {
|
|
1283
|
-
const e = this.season || et(), [s, r, o, i,
|
|
1289
|
+
const e = this.season || et(), [s, r, o, i, l] = await Promise.all([
|
|
1284
1290
|
t.listConferences({ active: !0 }),
|
|
1285
1291
|
t.listSchools(),
|
|
1286
1292
|
t.listTeams({ sport: this.sport }),
|
|
@@ -1293,7 +1299,7 @@ class Zt extends w {
|
|
|
1293
1299
|
schools: r.items,
|
|
1294
1300
|
teams: o.items,
|
|
1295
1301
|
games: i.items,
|
|
1296
|
-
rankings:
|
|
1302
|
+
rankings: l.items
|
|
1297
1303
|
};
|
|
1298
1304
|
}
|
|
1299
1305
|
get ctx() {
|
|
@@ -1307,18 +1313,18 @@ class Zt extends w {
|
|
|
1307
1313
|
}, this._ctxData = this.data), this._ctx;
|
|
1308
1314
|
}
|
|
1309
1315
|
renderView() {
|
|
1310
|
-
const t = this.ctx, e = ["All", ...[...new Set(this.data.conferences.flatMap((r) => r.classifications || []))].sort(zt)].slice(0, 9), s = this.data.conferences.filter((r) => r.active !== !1).filter((r) => this.classFilter === "All" || (r.classifications || []).includes(this.classFilter)).sort(
|
|
1311
|
-
return
|
|
1316
|
+
const t = this.ctx, e = ["All", ...[...new Set(this.data.conferences.flatMap((r) => r.classifications || []))].sort(zt)].slice(0, 9), s = this.data.conferences.filter((r) => r.active !== !1).filter((r) => this.classFilter === "All" || (r.classifications || []).includes(this.classFilter)).sort(Pe);
|
|
1317
|
+
return n`
|
|
1312
1318
|
${$t(this, t, {
|
|
1313
|
-
title:
|
|
1314
|
-
sub:
|
|
1319
|
+
title: n`${z(this.sport)} standings`,
|
|
1320
|
+
sub: n`${this.data.season} season · every conference, computed live from reported results`,
|
|
1315
1321
|
teams: this.data.teams
|
|
1316
1322
|
})}
|
|
1317
|
-
${
|
|
1318
|
-
${
|
|
1323
|
+
${G(this, n`
|
|
1324
|
+
${q(this)}
|
|
1319
1325
|
<div class="toolbar">
|
|
1320
1326
|
<div role="group" aria-label="Classification filter">
|
|
1321
|
-
${e.map((r) =>
|
|
1327
|
+
${e.map((r) => n`<button class="chip ${this.classFilter === r ? "on" : ""}"
|
|
1322
1328
|
@click=${() => {
|
|
1323
1329
|
this.classFilter = r;
|
|
1324
1330
|
}}>${r}</button>`)}
|
|
@@ -1337,12 +1343,12 @@ class Zt extends w {
|
|
|
1337
1343
|
renderConference(t, e) {
|
|
1338
1344
|
const s = this.data.teams.filter((i) => i.conferenceId === e.id);
|
|
1339
1345
|
if (!s.length) return m;
|
|
1340
|
-
const r = this.query.trim().toLowerCase(), o =
|
|
1341
|
-
return
|
|
1346
|
+
const r = this.query.trim().toLowerCase(), o = qt(s, t.records);
|
|
1347
|
+
return n`
|
|
1342
1348
|
<div class="card">
|
|
1343
1349
|
<div class="card-head">
|
|
1344
1350
|
<h2>${e.name}</h2>
|
|
1345
|
-
${[...e.classifications || []].sort(zt).map((i) =>
|
|
1351
|
+
${[...e.classifications || []].sort(zt).map((i) => n`<span class="pill class">${i}</span>`)}
|
|
1346
1352
|
<span class="meta">${o.length} teams · membership derives from teams</span>
|
|
1347
1353
|
</div>
|
|
1348
1354
|
<div class="tablewrap"><table class="data">
|
|
@@ -1352,7 +1358,7 @@ class Zt extends w {
|
|
|
1352
1358
|
<th>Streak</th><th>Last 5</th><th>Next</th>
|
|
1353
1359
|
</tr></thead>
|
|
1354
1360
|
<tbody>
|
|
1355
|
-
${o.map((i,
|
|
1361
|
+
${o.map((i, l) => this.renderRow(t, i, l, r))}
|
|
1356
1362
|
</tbody>
|
|
1357
1363
|
</table></div>
|
|
1358
1364
|
</div>
|
|
@@ -1361,12 +1367,12 @@ class Zt extends w {
|
|
|
1361
1367
|
renderRow(t, e, s, r) {
|
|
1362
1368
|
const o = t.schoolsById[e.team.schoolId], i = o?.name || e.team.name || "TBD";
|
|
1363
1369
|
if (r && !i.toLowerCase().includes(r)) return m;
|
|
1364
|
-
const
|
|
1370
|
+
const l = e.rec.pf - e.rec.pa, d = gt(this.data.games, e.team.id), c = () => {
|
|
1365
1371
|
location.href = g(t.hrefs.school, { id: e.team.schoolId });
|
|
1366
1372
|
};
|
|
1367
|
-
return
|
|
1373
|
+
return n`
|
|
1368
1374
|
<tr class="rowlink" @click=${(h) => {
|
|
1369
|
-
h.target.closest("a") ||
|
|
1375
|
+
h.target.closest("a") || c();
|
|
1370
1376
|
}}>
|
|
1371
1377
|
<td class="mut">${s + 1}</td>
|
|
1372
1378
|
<td class="teamcell">
|
|
@@ -1374,12 +1380,12 @@ class Zt extends w {
|
|
|
1374
1380
|
<a href=${g(t.hrefs.school, { id: e.team.schoolId })}>${i}</a>
|
|
1375
1381
|
</td>
|
|
1376
1382
|
<td class="num">${x(e.rec, !0)}</td>
|
|
1377
|
-
<td class="num">${
|
|
1383
|
+
<td class="num">${Rt(e.confPct)}</td>
|
|
1378
1384
|
<td class="num">${x(e.rec)}</td>
|
|
1379
|
-
<td class="num">${
|
|
1385
|
+
<td class="num">${Rt(e.overallPct)}</td>
|
|
1380
1386
|
<td class="num">${e.rec.pf}</td>
|
|
1381
1387
|
<td class="num">${e.rec.pa}</td>
|
|
1382
|
-
<td class="num" style="color:${
|
|
1388
|
+
<td class="num" style="color:${l >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${l > 0 ? "+" : ""}${l}</td>
|
|
1383
1389
|
<td>${st(e.rec.results) || "·"}</td>
|
|
1384
1390
|
<td>${yt(t, e.team.id)}</td>
|
|
1385
1391
|
<td>${Kt(t, d, e.team.id)}</td>
|
|
@@ -1388,7 +1394,7 @@ class Zt extends w {
|
|
|
1388
1394
|
}
|
|
1389
1395
|
}
|
|
1390
1396
|
globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", Zt);
|
|
1391
|
-
const
|
|
1397
|
+
const Ve = b`
|
|
1392
1398
|
.hero1 {
|
|
1393
1399
|
border-radius: var(--hsot-radius-md); color: var(--hsot-white);
|
|
1394
1400
|
padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
|
|
@@ -1406,7 +1412,7 @@ const Ge = b`
|
|
|
1406
1412
|
.sparkline { vertical-align: middle; }
|
|
1407
1413
|
`;
|
|
1408
1414
|
class Jt extends w {
|
|
1409
|
-
static styles = [...j,
|
|
1415
|
+
static styles = [...j, Ve];
|
|
1410
1416
|
static properties = {
|
|
1411
1417
|
...w.properties,
|
|
1412
1418
|
sport: { type: String },
|
|
@@ -1423,20 +1429,20 @@ class Jt extends w {
|
|
|
1423
1429
|
t && (this.pollDate = t);
|
|
1424
1430
|
}
|
|
1425
1431
|
async fetchData(t) {
|
|
1426
|
-
const e = this.season || et(), [s, r, o, i,
|
|
1432
|
+
const e = this.season || et(), [s, r, o, i, l] = await Promise.all([
|
|
1427
1433
|
t.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
|
|
1428
1434
|
t.listSchools(),
|
|
1429
1435
|
t.listTeams({ sport: this.sport }),
|
|
1430
1436
|
t.listConferences(),
|
|
1431
1437
|
t.listGames({ sport: this.sport, season: e })
|
|
1432
|
-
]), d = s.items.filter((
|
|
1438
|
+
]), d = s.items.filter((c) => !this.gender || !c.gender || c.gender === this.gender).sort((c, h) => h.effectiveDate.localeCompare(c.effectiveDate));
|
|
1433
1439
|
return {
|
|
1434
1440
|
season: e,
|
|
1435
1441
|
polls: d,
|
|
1436
1442
|
schools: r.items,
|
|
1437
1443
|
teams: o.items,
|
|
1438
1444
|
conferences: i.items,
|
|
1439
|
-
games:
|
|
1445
|
+
games: l.items
|
|
1440
1446
|
};
|
|
1441
1447
|
}
|
|
1442
1448
|
get ctx() {
|
|
@@ -1450,45 +1456,45 @@ class Jt extends w {
|
|
|
1450
1456
|
}, this._ctxData = this.data), this._ctx;
|
|
1451
1457
|
}
|
|
1452
1458
|
sparkline(t, e, s) {
|
|
1453
|
-
const
|
|
1459
|
+
const l = e.map((p, f) => {
|
|
1454
1460
|
const u = (p.teamIds || []).indexOf(t);
|
|
1455
1461
|
if (u === -1) return null;
|
|
1456
1462
|
const $ = e.length === 1 ? 96 / 2 : f / (e.length - 1) * 90 + 3, at = 3 + u / 24 * 20;
|
|
1457
1463
|
return { x: $, y: at };
|
|
1458
1464
|
}), d = [];
|
|
1459
|
-
let
|
|
1460
|
-
if (
|
|
1461
|
-
p ?
|
|
1462
|
-
}),
|
|
1463
|
-
const h =
|
|
1464
|
-
return
|
|
1465
|
+
let c = [];
|
|
1466
|
+
if (l.forEach((p) => {
|
|
1467
|
+
p ? c.push(p) : c.length && (d.push(c), c = []);
|
|
1468
|
+
}), c.length && d.push(c), !d.length) return m;
|
|
1469
|
+
const h = l[s];
|
|
1470
|
+
return n`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
|
|
1465
1471
|
${d.map((p) => Pt`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
|
|
1466
1472
|
points=${p.map((f) => `${f.x.toFixed(1)},${f.y.toFixed(1)}`).join(" ")}></polyline>`)}
|
|
1467
1473
|
${h ? Pt`<circle cx=${h.x.toFixed(1)} cy=${h.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
|
|
1468
1474
|
</svg>`;
|
|
1469
1475
|
}
|
|
1470
1476
|
movement(t, e, s) {
|
|
1471
|
-
const r =
|
|
1472
|
-
return r.kind === "up" ?
|
|
1477
|
+
const r = We(t, e, s);
|
|
1478
|
+
return r.kind === "up" ? n`<span class="delta up">▲ ${r.delta}</span>` : r.kind === "down" ? n`<span class="delta down">▼ ${r.delta}</span>` : r.kind === "new" ? n`<span class="delta new">NEW</span>` : r.kind === "same" ? n`<span class="delta same">—</span>` : n`<span class="delta same">·</span>`;
|
|
1473
1479
|
}
|
|
1474
1480
|
renderView() {
|
|
1475
1481
|
const t = this.ctx, e = this.data.polls;
|
|
1476
|
-
if (!e.length) return
|
|
1477
|
-
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(),
|
|
1478
|
-
return
|
|
1482
|
+
if (!e.length) return n`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
|
|
1483
|
+
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(), l = i.indexOf(r), d = v(this.data.conferences), c = (r.teamIds || [])[0], h = c ? O(t, c) : null;
|
|
1484
|
+
return n`
|
|
1479
1485
|
${$t(this, t, {
|
|
1480
|
-
title:
|
|
1481
|
-
sub:
|
|
1486
|
+
title: n`${z(this.sport)} Top 25`,
|
|
1487
|
+
sub: n`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
|
|
1482
1488
|
teams: this.data.teams
|
|
1483
1489
|
})}
|
|
1484
|
-
${
|
|
1485
|
-
${
|
|
1490
|
+
${G(this, n`
|
|
1491
|
+
${q(this)}
|
|
1486
1492
|
<div class="toolbar">
|
|
1487
1493
|
<label class="asof" for="pollsel">Poll of</label>
|
|
1488
1494
|
<select id="pollsel" @change=${(p) => {
|
|
1489
1495
|
this.pollDate = p.target.value;
|
|
1490
1496
|
}}>
|
|
1491
|
-
${e.map((p, f) =>
|
|
1497
|
+
${e.map((p, f) => n`<option value=${p.effectiveDate} ?selected=${p === r}>
|
|
1492
1498
|
${y(p.effectiveDate, { month: "long", day: "numeric", year: "numeric" })}${f === 0 ? " · current" : ""}
|
|
1493
1499
|
</option>`)}
|
|
1494
1500
|
</select>
|
|
@@ -1503,14 +1509,14 @@ class Jt extends w {
|
|
|
1503
1509
|
<span class="spacer"></span>
|
|
1504
1510
|
<span class="asof">Movement vs. the previous poll · sparkline = season rank history</span>
|
|
1505
1511
|
</div>
|
|
1506
|
-
${h ? this.renderHero(t, r, o,
|
|
1512
|
+
${h ? this.renderHero(t, r, o, c, h, d) : m}
|
|
1507
1513
|
<div class="card"><div class="tablewrap"><table class="data">
|
|
1508
1514
|
<thead><tr>
|
|
1509
1515
|
<th class="num">Rk</th><th>Mvmt</th><th>Team</th><th class="num">Record</th>
|
|
1510
1516
|
<th>Conference</th><th>Last result</th><th>Next</th><th>Season</th>
|
|
1511
1517
|
</tr></thead>
|
|
1512
1518
|
<tbody>
|
|
1513
|
-
${(r.teamIds || []).map((p, f) => f === 0 || !p ? m : this.renderRow(t, r, o, i,
|
|
1519
|
+
${(r.teamIds || []).map((p, f) => f === 0 || !p ? m : this.renderRow(t, r, o, i, l, d, p, f + 1))}
|
|
1514
1520
|
</tbody>
|
|
1515
1521
|
</table></div></div>
|
|
1516
1522
|
<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>
|
|
@@ -1518,50 +1524,50 @@ class Jt extends w {
|
|
|
1518
1524
|
`;
|
|
1519
1525
|
}
|
|
1520
1526
|
renderHero(t, e, s, r, o, i) {
|
|
1521
|
-
const
|
|
1522
|
-
return
|
|
1527
|
+
const l = t.records[r], d = Ft(t.records, r), c = i[t.teamsById[r]?.conferenceId], h = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
|
|
1528
|
+
return n`
|
|
1523
1529
|
<div class="hero1" style="background:${h}">
|
|
1524
1530
|
<div class="bigrank">#1</div>
|
|
1525
1531
|
${H(o, 64)}
|
|
1526
1532
|
<div>
|
|
1527
1533
|
<h2><a href=${g(t.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
|
|
1528
1534
|
<div class="facts">
|
|
1529
|
-
${x(
|
|
1530
|
-
· streak ${st(
|
|
1531
|
-
${d ?
|
|
1535
|
+
${x(l)} overall${c ? n` · ${x(l, !0)} ${c.name}` : m}
|
|
1536
|
+
· streak ${st(l?.results) || "·"}
|
|
1537
|
+
${d ? n` · last: ${d.mark} ${d.my}-${d.their} vs ${Z(t, d.opp)}` : m}
|
|
1532
1538
|
${this.movement(e, s, r)}
|
|
1533
1539
|
</div>
|
|
1534
1540
|
</div>
|
|
1535
1541
|
</div>
|
|
1536
1542
|
`;
|
|
1537
1543
|
}
|
|
1538
|
-
renderRow(t, e, s, r, o, i,
|
|
1539
|
-
const
|
|
1540
|
-
if (!
|
|
1541
|
-
const h = t.records[
|
|
1542
|
-
location.href = g(t.hrefs.school, { id:
|
|
1544
|
+
renderRow(t, e, s, r, o, i, l, d) {
|
|
1545
|
+
const c = O(t, l);
|
|
1546
|
+
if (!c) return m;
|
|
1547
|
+
const h = t.records[l], p = Ft(t.records, l), f = gt(this.data.games, l), u = i[t.teamsById[l]?.conferenceId], $ = () => {
|
|
1548
|
+
location.href = g(t.hrefs.school, { id: c.id });
|
|
1543
1549
|
};
|
|
1544
|
-
return
|
|
1550
|
+
return n`
|
|
1545
1551
|
<tr class="rowlink" @click=${(at) => {
|
|
1546
1552
|
at.target.closest("a") || $();
|
|
1547
1553
|
}}>
|
|
1548
1554
|
<td class="num" style="font-weight:700">${d}</td>
|
|
1549
|
-
<td>${this.movement(e, s,
|
|
1550
|
-
<td class="teamcell">${H(
|
|
1551
|
-
<span class="mut" style="font-size:0.78rem">${
|
|
1555
|
+
<td>${this.movement(e, s, l)}</td>
|
|
1556
|
+
<td class="teamcell">${H(c)}<a href=${g(t.hrefs.school, { id: c.id })}>${c.name}</a>
|
|
1557
|
+
<span class="mut" style="font-size:0.78rem">${c.mascot || ""}</span></td>
|
|
1552
1558
|
<td class="num">${x(h)}</td>
|
|
1553
1559
|
<td class="mut">${u?.name || "Independent"}</td>
|
|
1554
|
-
<td>${p ?
|
|
1560
|
+
<td>${p ? n`<a class="box" style="text-decoration:none" href=${g(t.hrefs.game, { sport: this.sport, id: p.gameId })}>
|
|
1555
1561
|
<b style="color:${p.mark === "W" ? "var(--hsot-win)" : p.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${p.mark}</b>
|
|
1556
|
-
${p.my}-${p.their} vs ${Z(t, p.opp)}</a>` :
|
|
1557
|
-
<td>${Kt(t, f,
|
|
1558
|
-
<td>${this.sparkline(
|
|
1562
|
+
${p.my}-${p.their} vs ${Z(t, p.opp)}</a>` : n`<span class="mut">·</span>`}</td>
|
|
1563
|
+
<td>${Kt(t, f, l)}</td>
|
|
1564
|
+
<td>${this.sparkline(l, r, o)}</td>
|
|
1559
1565
|
</tr>
|
|
1560
1566
|
`;
|
|
1561
1567
|
}
|
|
1562
1568
|
}
|
|
1563
1569
|
globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", Jt);
|
|
1564
|
-
const
|
|
1570
|
+
const Ye = b`
|
|
1565
1571
|
.schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
|
|
1566
1572
|
.schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
|
|
1567
1573
|
.schoolhero .crest {
|
|
@@ -1616,7 +1622,7 @@ const Ve = b`
|
|
|
1616
1622
|
}
|
|
1617
1623
|
`;
|
|
1618
1624
|
class Xt extends w {
|
|
1619
|
-
static styles = [...j,
|
|
1625
|
+
static styles = [...j, Ye];
|
|
1620
1626
|
static properties = {
|
|
1621
1627
|
...w.properties,
|
|
1622
1628
|
schoolId: { type: String, attribute: "school-id" },
|
|
@@ -1633,7 +1639,7 @@ class Xt extends w {
|
|
|
1633
1639
|
t && !this.sport && (this.sport = t);
|
|
1634
1640
|
}
|
|
1635
1641
|
async fetchData(t) {
|
|
1636
|
-
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, [
|
|
1642
|
+
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, [l, d, c, h, p, f, u] = await Promise.all([
|
|
1637
1643
|
i ? t.listGames({ sport: i.sport, season: e }) : Promise.resolve({ items: [] }),
|
|
1638
1644
|
i ? t.listTeams({ sport: i.sport }) : Promise.resolve({ items: [] }),
|
|
1639
1645
|
t.listSchools(),
|
|
@@ -1649,9 +1655,9 @@ class Xt extends w {
|
|
|
1649
1655
|
school: s,
|
|
1650
1656
|
teams: o,
|
|
1651
1657
|
active: i,
|
|
1652
|
-
games:
|
|
1658
|
+
games: l.items,
|
|
1653
1659
|
allTeams: d.items,
|
|
1654
|
-
schools:
|
|
1660
|
+
schools: c.items,
|
|
1655
1661
|
conferences: h.items,
|
|
1656
1662
|
rankings: p.items,
|
|
1657
1663
|
roster: f.items.find(($) => $.season === e) || null,
|
|
@@ -1673,61 +1679,61 @@ class Xt extends w {
|
|
|
1673
1679
|
}
|
|
1674
1680
|
renderView() {
|
|
1675
1681
|
const { school: t, teams: e, active: s, season: r } = this.data;
|
|
1676
|
-
if (!t) return
|
|
1677
|
-
const o = this.ctx, i = K(t.colorPrimary || "#030711"),
|
|
1678
|
-
return
|
|
1682
|
+
if (!t) return n`<div class="view"><p class="empty">School not found.</p></div>`;
|
|
1683
|
+
const o = this.ctx, i = K(t.colorPrimary || "#030711"), l = (t.adm || [])[0], d = v(this.data.conferences), c = s ? d[s.conferenceId] : null;
|
|
1684
|
+
return n`
|
|
1679
1685
|
<div class="schoolhero" style="background:linear-gradient(115deg, ${t.colorPrimary || "#030711"} 0%, ${t.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${i}">
|
|
1680
1686
|
<div class="inner">
|
|
1681
|
-
${Q(t, 84) ?
|
|
1687
|
+
${Q(t, 84) ? n`<img class="crest logo" alt="" loading="lazy" src=${Q(t, 84)} />` : n`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${K(t.colorSecondary || "#7C7C7C")}">${ft(t)}</div>`}
|
|
1682
1688
|
<div style="min-width:260px">
|
|
1683
1689
|
<h1>${t.name} <span class="mascot">${t.mascot || ""}</span></h1>
|
|
1684
1690
|
<div class="facts">
|
|
1685
|
-
${t.location ?
|
|
1686
|
-
${t.association ?
|
|
1687
|
-
${
|
|
1688
|
-
${
|
|
1689
|
-
${t.openingYear ?
|
|
1690
|
-
${t.areaCode ?
|
|
1691
|
+
${t.location ? n`<span><b>Location</b>${t.location}${t.county ? n` · ${t.county} County` : m}</span>` : m}
|
|
1692
|
+
${t.association ? n`<span><b>League</b>${t.association}${t.classification ? n` · ${t.classification}` : m}</span>` : m}
|
|
1693
|
+
${c ? n`<span><b>Conference</b>${c.name}</span>` : m}
|
|
1694
|
+
${l ? n`<span><b>Enrollment</b>${l.value.toLocaleString()} (${l.season} ADM)</span>` : m}
|
|
1695
|
+
${t.openingYear ? n`<span><b>Opened</b>${t.openingYear}</span>` : m}
|
|
1696
|
+
${t.areaCode ? n`<span><b>Area</b>${t.areaCode}</span>` : m}
|
|
1691
1697
|
</div>
|
|
1692
1698
|
</div>
|
|
1693
1699
|
</div>
|
|
1694
1700
|
</div>
|
|
1695
1701
|
<div class="band">
|
|
1696
1702
|
<nav class="tabs" aria-label="Teams">
|
|
1697
|
-
${e.map((h) => h.id === s?.id ?
|
|
1703
|
+
${e.map((h) => h.id === s?.id ? n`<a class="on" href="#" @click=${(p) => p.preventDefault()}>${h.name}</a>` : n`<a href="#" @click=${(p) => {
|
|
1698
1704
|
p.preventDefault(), this.switchSport(h.sport);
|
|
1699
1705
|
}}>${h.name}</a>`)}
|
|
1700
1706
|
</nav>
|
|
1701
1707
|
</div>
|
|
1702
|
-
${
|
|
1703
|
-
${
|
|
1704
|
-
${s ? this.renderTeam(o, s,
|
|
1708
|
+
${G(this, n`
|
|
1709
|
+
${q(this)}
|
|
1710
|
+
${s ? this.renderTeam(o, s, c, r) : n`<p class="empty">No teams recorded for this school yet.</p>`}
|
|
1705
1711
|
`)}
|
|
1706
1712
|
`;
|
|
1707
1713
|
}
|
|
1708
1714
|
renderTeam(t, e, s, r) {
|
|
1709
|
-
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,
|
|
1710
|
-
return
|
|
1715
|
+
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, l = s ? this.data.allTeams.filter((p) => p.conferenceId === s.id) : [], d = s ? qt(l, 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)));
|
|
1716
|
+
return n`
|
|
1711
1717
|
<div class="tiles">
|
|
1712
1718
|
<div class="tile"><div class="k">Overall</div><div class="v">${x(o)}</div><div class="s">${i} games played</div></div>
|
|
1713
1719
|
<div class="tile"><div class="k">${s?.name || "Conference"}</div><div class="v">${x(o, !0)}</div>
|
|
1714
|
-
<div class="s">${d ? `${
|
|
1720
|
+
<div class="s">${d ? `${Ee(d)} of ${l.length}` : "·"}</div></div>
|
|
1715
1721
|
<div class="tile"><div class="k">Points</div><div class="v">${i ? (o.pf / i).toFixed(1) : "0.0"}</div>
|
|
1716
1722
|
<div class="s">scored per game · ${i ? (o.pa / i).toFixed(1) : "0.0"} allowed</div></div>
|
|
1717
1723
|
<div class="tile"><div class="k">Streak</div><div class="v">${st(o.results) || "·"}</div>
|
|
1718
1724
|
<div class="s">last 5: ${yt(t, e.id)}</div></div>
|
|
1719
|
-
<div class="tile"><div class="k">HSOT Top 25</div><div class="v">${
|
|
1725
|
+
<div class="tile"><div class="k">HSOT Top 25</div><div class="v">${c ? `#${c}` : "NR"}</div>
|
|
1720
1726
|
<div class="s"><a href=${g(t.hrefs.section, { sport: e.sport, view: "rankings" })}>full poll</a></div></div>
|
|
1721
1727
|
</div>
|
|
1722
|
-
${(e.championships || []).length ?
|
|
1728
|
+
${(e.championships || []).length ? n`
|
|
1723
1729
|
<div style="margin:-0.2rem 0 1rem;display:flex;gap:0.4rem;flex-wrap:wrap">
|
|
1724
|
-
${e.championships.map((p) =>
|
|
1730
|
+
${e.championships.map((p) => n`<span class="pill champ">★ ${p.season} ${p.title} champion${p.classification ? ` · ${p.classification}` : ""}${p.region ? ` · ${p.region}` : ""}</span>`)}
|
|
1725
1731
|
</div>` : m}
|
|
1726
1732
|
<div class="cols">
|
|
1727
1733
|
<div>
|
|
1728
1734
|
<div class="section-title">Schedule & results</div>
|
|
1729
1735
|
<div class="card">
|
|
1730
|
-
${h.length ?
|
|
1736
|
+
${h.length ? n`<ul class="gamelist">${h.map((p) => this.renderGameRow(t, e, p))}</ul>` : n`<p class="empty">No ${e.sport} games recorded for ${r}.</p>`}
|
|
1731
1737
|
</div>
|
|
1732
1738
|
</div>
|
|
1733
1739
|
<div>
|
|
@@ -1738,21 +1744,21 @@ class Xt extends w {
|
|
|
1738
1744
|
`;
|
|
1739
1745
|
}
|
|
1740
1746
|
renderGameRow(t, e, s) {
|
|
1741
|
-
const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, i = r ? s.homeScore : s.awayScore,
|
|
1742
|
-
let d =
|
|
1747
|
+
const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, i = r ? s.homeScore : s.awayScore, l = r ? s.awayScore : s.homeScore;
|
|
1748
|
+
let d = n`<span class="mut">${pt(s.time)}</span>`;
|
|
1743
1749
|
if (s.state === "final") {
|
|
1744
1750
|
const h = ut(s), p = h === "tie" ? "T" : h === (r ? "home" : "away") ? "W" : "L";
|
|
1745
|
-
d =
|
|
1746
|
-
} else s.state === "live" && (d =
|
|
1747
|
-
const
|
|
1748
|
-
return
|
|
1751
|
+
d = n`<span class=${p}>${p}</span> ${i}-${l}${s.finish === "overtime" ? n` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? n` <span class="mut">FF</span>` : m}`;
|
|
1752
|
+
} else s.state === "live" && (d = n`<span style="color:var(--hsot-red)">${i}-${l}</span>`);
|
|
1753
|
+
const c = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
|
|
1754
|
+
return n`
|
|
1749
1755
|
<li>
|
|
1750
1756
|
<span class="d">${y(s.date)}</span>
|
|
1751
1757
|
${Wt(s).kind === "sched" ? m : J(s)}
|
|
1752
1758
|
<span class="res">${d}</span>
|
|
1753
1759
|
<span class="opp">${r ? "vs" : "at"} ${Yt(t, o, s.date)}
|
|
1754
|
-
<span class="pill type">${
|
|
1755
|
-
${s.broadcast ?
|
|
1760
|
+
<span class="pill type">${c}</span>
|
|
1761
|
+
${s.broadcast ? n`<span class="pill class">${s.broadcast}</span>` : m}
|
|
1756
1762
|
</span>
|
|
1757
1763
|
<span class="where">${s.venue || ""}</span>
|
|
1758
1764
|
<a class="box" href=${g(t.hrefs.game, { sport: e.sport, id: s.id })}>Box score →</a>
|
|
@@ -1762,26 +1768,26 @@ class Xt extends w {
|
|
|
1762
1768
|
renderRoster(t, e) {
|
|
1763
1769
|
const s = this.data.roster;
|
|
1764
1770
|
if (!s)
|
|
1765
|
-
return
|
|
1766
|
-
const r = qe(s, 560), o = this.data.school?.name || "", i = v(this.data.players),
|
|
1767
|
-
return
|
|
1768
|
-
${r ?
|
|
1771
|
+
return n`<p class="empty">Roster not published for ${e}.</p>`;
|
|
1772
|
+
const r = qe(s, 560), o = this.data.school?.name || "", i = v(this.data.players), l = s.entries.slice().sort((c, h) => (c.number || 0) - (h.number || 0)), d = l.some((c) => i[c.playerId]?.college);
|
|
1773
|
+
return n`
|
|
1774
|
+
${r ? n`<img class="rosterphoto" src=${r} loading="lazy" decoding="async"
|
|
1769
1775
|
alt="${o} ${t.name} ${e} team photo" />` : m}
|
|
1770
1776
|
<div class="tablewrap"><table class="data roster">
|
|
1771
|
-
<thead><tr><th class="num">No.</th><th>Player</th><th class="pos">Pos</th><th class="cls">Class</th><th class="num">Ht</th><th class="num">Wt</th>${d ?
|
|
1777
|
+
<thead><tr><th class="num">No.</th><th>Player</th><th class="pos">Pos</th><th class="cls">Class</th><th class="num">Ht</th><th class="num">Wt</th>${d ? n`<th>College</th>` : m}</tr></thead>
|
|
1772
1778
|
<tbody>
|
|
1773
|
-
${
|
|
1774
|
-
const h = i[
|
|
1779
|
+
${l.map((c) => {
|
|
1780
|
+
const h = i[c.playerId];
|
|
1775
1781
|
if (!h) return m;
|
|
1776
|
-
const p = [
|
|
1777
|
-
return
|
|
1778
|
-
<td class="num mut">${
|
|
1779
|
-
<td class="player" style="font-weight:500">${h.firstName} ${h.lastName}<span class="sub">${
|
|
1780
|
-
<td class="pos">${
|
|
1782
|
+
const p = Ie(c), f = [p, h.classOf].filter(Boolean).join(" · ") || "·";
|
|
1783
|
+
return n`<tr>
|
|
1784
|
+
<td class="num mut">${c.number ?? "·"}</td>
|
|
1785
|
+
<td class="player" style="font-weight:500">${h.firstName} ${h.lastName}<span class="sub">${f}</span></td>
|
|
1786
|
+
<td class="pos">${p || "·"}</td>
|
|
1781
1787
|
<td class="cls mut">${h.classOf || "·"}</td>
|
|
1782
1788
|
<td class="num">${Te(h.heightIn)}</td>
|
|
1783
1789
|
<td class="num">${h.weightLb || "·"}</td>
|
|
1784
|
-
${d ?
|
|
1790
|
+
${d ? n`<td class="college">${h.college || "·"}</td>` : m}
|
|
1785
1791
|
</tr>`;
|
|
1786
1792
|
})}
|
|
1787
1793
|
</tbody>
|
|
@@ -1790,12 +1796,12 @@ class Xt extends w {
|
|
|
1790
1796
|
}
|
|
1791
1797
|
}
|
|
1792
1798
|
globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", Xt);
|
|
1793
|
-
const
|
|
1794
|
-
function
|
|
1799
|
+
const Ke = "https://api.wral.com/search";
|
|
1800
|
+
function Qe(a) {
|
|
1795
1801
|
return a.map((t) => `uri:"${t}"`).join(" OR ");
|
|
1796
1802
|
}
|
|
1797
|
-
function
|
|
1798
|
-
const e = String(a ||
|
|
1803
|
+
function Ze(a, t) {
|
|
1804
|
+
const e = String(a || Ke).replace(/\/+$/, ""), s = new URLSearchParams({ query: Qe(t), sort: "score", lang: "en" });
|
|
1799
1805
|
return `${e}/v1/query?${s}`;
|
|
1800
1806
|
}
|
|
1801
1807
|
function te(a) {
|
|
@@ -1813,13 +1819,13 @@ function te(a) {
|
|
|
1813
1819
|
}
|
|
1814
1820
|
return { uri: a, title: a };
|
|
1815
1821
|
}
|
|
1816
|
-
async function
|
|
1817
|
-
const r = await ((...
|
|
1822
|
+
async function Je(a, t, e) {
|
|
1823
|
+
const r = await ((...l) => fetch(...l))(Ze(a, t));
|
|
1818
1824
|
if (!r.ok) throw new Error(`search answered ${r.status}`);
|
|
1819
|
-
const o = await r.json(), i = new Map((o.items || []).map((
|
|
1820
|
-
return t.map((
|
|
1825
|
+
const o = await r.json(), i = new Map((o.items || []).map((l) => [l.uri, l]));
|
|
1826
|
+
return t.map((l) => i.get(l) || te(l));
|
|
1821
1827
|
}
|
|
1822
|
-
const
|
|
1828
|
+
const Xe = b`
|
|
1823
1829
|
.breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
|
|
1824
1830
|
.breadcrumbs a { text-decoration: none; }
|
|
1825
1831
|
.scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
|
|
@@ -1848,6 +1854,20 @@ const Je = b`
|
|
|
1848
1854
|
.covtitle { font-family: var(--hsot-heading-font); font-weight: 700; font-size: 1.05rem; line-height: 1.25; overflow-wrap: anywhere; }
|
|
1849
1855
|
.covdesc { margin: 0.35rem 0 0; font-size: 0.85rem; color: var(--hsot-gray-5); line-height: 1.4; }
|
|
1850
1856
|
.covmeta { margin-top: 0.45rem; font-size: 0.78rem; color: var(--hsot-gray-5); }
|
|
1857
|
+
/* Scoring plays: a compact log under the line score. The play cell is the
|
|
1858
|
+
one table.data cell allowed to wrap — a 60-yard touchdown description
|
|
1859
|
+
must fit a phone. */
|
|
1860
|
+
.plays { border-top: 1px solid var(--hsot-gray-2); padding: 0.7rem 1rem 0.9rem; }
|
|
1861
|
+
.plays-title {
|
|
1862
|
+
font-family: var(--hsot-heading-font); font-weight: 700; font-size: 0.9rem;
|
|
1863
|
+
text-transform: uppercase; letter-spacing: 0.03em; color: var(--hsot-gray-6);
|
|
1864
|
+
text-align: center; margin: 0 0 0.4rem;
|
|
1865
|
+
}
|
|
1866
|
+
table.plays-table { max-width: 720px; margin: 0 auto; }
|
|
1867
|
+
table.plays-table td.when { color: var(--hsot-gray-5); font-variant-numeric: tabular-nums; }
|
|
1868
|
+
table.plays-table td.play { white-space: normal; min-width: 12rem; }
|
|
1869
|
+
/* Game notes are typed with line breaks the desk means to keep. */
|
|
1870
|
+
.gamenote { padding: 0 1rem 0.9rem; text-align: center; white-space: pre-line; }
|
|
1851
1871
|
.cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }
|
|
1852
1872
|
.ctxcard { padding: 0.85rem 1rem; }
|
|
1853
1873
|
.ctxcard .who { font-family: var(--hsot-heading-font); font-weight: 700; margin-bottom: 0.4rem; }
|
|
@@ -1859,7 +1879,7 @@ const Je = b`
|
|
|
1859
1879
|
}
|
|
1860
1880
|
`;
|
|
1861
1881
|
class ee extends w {
|
|
1862
|
-
static styles = [...j,
|
|
1882
|
+
static styles = [...j, Xe];
|
|
1863
1883
|
static properties = {
|
|
1864
1884
|
...w.properties,
|
|
1865
1885
|
gameId: { type: String, attribute: "game-id" },
|
|
@@ -1873,7 +1893,7 @@ class ee extends w {
|
|
|
1873
1893
|
super(), this.gameId = "", this.searchApi = "";
|
|
1874
1894
|
}
|
|
1875
1895
|
async fetchData(t) {
|
|
1876
|
-
const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, i,
|
|
1896
|
+
const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, i, l, d, c] = await Promise.all([
|
|
1877
1897
|
t.listSchools(),
|
|
1878
1898
|
t.listTeams({ sport: e.sport }),
|
|
1879
1899
|
t.listConferences(),
|
|
@@ -1881,16 +1901,16 @@ class ee extends w {
|
|
|
1881
1901
|
t.listGames({ sport: e.sport, season: e.season }),
|
|
1882
1902
|
// A search outage must not blank the box score — degrade to bare
|
|
1883
1903
|
// links (fetchCoverage already degrades per-URL index misses).
|
|
1884
|
-
s.length ?
|
|
1904
|
+
s.length ? Je(this.searchApi, s).catch(() => s.map(te)) : Promise.resolve([])
|
|
1885
1905
|
]);
|
|
1886
1906
|
return {
|
|
1887
1907
|
game: e,
|
|
1888
1908
|
schools: r.items,
|
|
1889
1909
|
teams: o.items,
|
|
1890
1910
|
conferences: i.items,
|
|
1891
|
-
rankings:
|
|
1911
|
+
rankings: l.items,
|
|
1892
1912
|
games: d.items,
|
|
1893
|
-
coverage:
|
|
1913
|
+
coverage: c
|
|
1894
1914
|
};
|
|
1895
1915
|
}
|
|
1896
1916
|
get ctx() {
|
|
@@ -1905,11 +1925,11 @@ class ee extends w {
|
|
|
1905
1925
|
}
|
|
1906
1926
|
renderView() {
|
|
1907
1927
|
const t = this.data.game;
|
|
1908
|
-
if (!t) return
|
|
1909
|
-
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),
|
|
1910
|
-
return
|
|
1911
|
-
${
|
|
1912
|
-
${
|
|
1928
|
+
if (!t) return n`<div class="view"><p class="empty">Game not found.</p></div>`;
|
|
1929
|
+
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), l = (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));
|
|
1930
|
+
return n`
|
|
1931
|
+
${G(this, n`
|
|
1932
|
+
${q(this)}
|
|
1913
1933
|
<p class="breadcrumbs">
|
|
1914
1934
|
<a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>${z(t.sport)}</a> /
|
|
1915
1935
|
<a href=${g(e.hrefs.section, { sport: t.sport, view: "scores" })}>Scores/Schedules</a> /
|
|
@@ -1920,34 +1940,35 @@ class ee extends w {
|
|
|
1920
1940
|
${this.teamBlock(e, t, t.awayTeamId, r, !1)}
|
|
1921
1941
|
<div class="mid">
|
|
1922
1942
|
<div class="bigscore">
|
|
1923
|
-
<span style=${
|
|
1943
|
+
<span style=${l("away")}>${t.awayScore}</span>
|
|
1924
1944
|
<span class="mut" style="font-size:1.6rem">–</span>
|
|
1925
|
-
<span style=${
|
|
1945
|
+
<span style=${l("home")}>${t.homeScore}</span>
|
|
1926
1946
|
</div>
|
|
1927
1947
|
<div class="status">${J(t)}</div>
|
|
1928
|
-
<div class="status">${y(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ?
|
|
1929
|
-
${t.broadcast ?
|
|
1948
|
+
<div class="status">${y(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? n` · ${pt(t.time)}` : m} · ${t.venue || "Venue TBD"}
|
|
1949
|
+
${t.broadcast ? n` · <span class="pill class">${t.broadcast}</span>` : m}</div>
|
|
1930
1950
|
<div class="status">
|
|
1931
1951
|
<span class="pill type">${t.gameType === "conference" ? `${d?.name || "Conference"} game` : t.gameType}</span>
|
|
1932
|
-
${t.label ?
|
|
1933
|
-
${(t.tags || []).map((h) =>
|
|
1952
|
+
${t.label ? n`<span class="pill type">Bracket ${t.label}</span>` : m}
|
|
1953
|
+
${(t.tags || []).map((h) => n`<span class="pill type">${h}</span>`)}
|
|
1934
1954
|
</div>
|
|
1935
1955
|
</div>
|
|
1936
1956
|
${this.teamBlock(e, t, t.homeTeamId, o, !0)}
|
|
1937
1957
|
</div>
|
|
1938
1958
|
${this.renderLineScore(t, r, o)}
|
|
1939
|
-
${
|
|
1959
|
+
${this.renderScoringPlays(t, r, o)}
|
|
1960
|
+
${t.notes ? n`<p class="note gamenote">${t.notes}</p>` : m}
|
|
1940
1961
|
</div>
|
|
1941
|
-
${(this.data.coverage || []).length ?
|
|
1962
|
+
${(this.data.coverage || []).length ? n`
|
|
1942
1963
|
<div class="section-title">Coverage</div>
|
|
1943
1964
|
<div class="covgrid">
|
|
1944
|
-
${this.data.coverage.map((h) =>
|
|
1965
|
+
${this.data.coverage.map((h) => n`
|
|
1945
1966
|
<a class="card covcard" href=${h.uri}>
|
|
1946
|
-
${h.image ?
|
|
1967
|
+
${h.image ? n`<img class="covimg" src=${h.image} alt="" loading="lazy" />` : m}
|
|
1947
1968
|
<div class="covbody">
|
|
1948
|
-
<div class="covtitle">${h.videoDuration ?
|
|
1949
|
-
${h.description ?
|
|
1950
|
-
${h.author || h.publishedTime ?
|
|
1969
|
+
<div class="covtitle">${h.videoDuration ? n`<span class="pill live" style="animation:none">Video</span> ` : m}${h.photos ? n`<span class="pill live" style="animation:none">Photos</span> ` : m}${h.title || h.uri}</div>
|
|
1970
|
+
${h.description ? n`<p class="covdesc">${h.description}</p>` : m}
|
|
1971
|
+
${h.author || h.publishedTime ? n`
|
|
1951
1972
|
<div class="covmeta">${[h.author, h.publishedTime ? new Date(h.publishedTime).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }) : ""].filter(Boolean).join(" · ")}</div>
|
|
1952
1973
|
` : m}
|
|
1953
1974
|
</div>
|
|
@@ -1958,10 +1979,10 @@ class ee extends w {
|
|
|
1958
1979
|
<div class="cols">
|
|
1959
1980
|
${[[t.awayTeamId, r], [t.homeTeamId, o]].map(([h, p]) => this.renderContext(e, h, p))}
|
|
1960
1981
|
</div>
|
|
1961
|
-
${
|
|
1982
|
+
${c.length ? n`
|
|
1962
1983
|
<div class="section-title">Head to head this season</div>
|
|
1963
1984
|
<div class="card"><ul class="gamelist">
|
|
1964
|
-
${
|
|
1985
|
+
${c.map((h) => n`<li>
|
|
1965
1986
|
<span class="d">${y(h.date)}</span>${J(h)}
|
|
1966
1987
|
<span class="opp">${C(e, h.awayTeamId)} ${h.awayScore}, ${C(e, h.homeTeamId)} ${h.homeScore}</span>
|
|
1967
1988
|
<a class="box" href=${g(e.hrefs.game, { sport: t.sport, id: h.id })}>Box score →</a>
|
|
@@ -1971,14 +1992,14 @@ class ee extends w {
|
|
|
1971
1992
|
`;
|
|
1972
1993
|
}
|
|
1973
1994
|
teamBlock(t, e, s, r, o) {
|
|
1974
|
-
if (!r) return
|
|
1975
|
-
const i = t.teamsById[s],
|
|
1976
|
-
return
|
|
1995
|
+
if (!r) return n`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
|
|
1996
|
+
const i = t.teamsById[s], l = t.records[s], d = Q(r, 58);
|
|
1997
|
+
return n`
|
|
1977
1998
|
<div class="teamblock ${o ? "right" : ""}">
|
|
1978
|
-
${d ?
|
|
1999
|
+
${d ? n`<img class="crest logo" alt="" loading="lazy" src=${d} />` : n`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${K(r.colorPrimary || "#030711")}">${ft(r)}</span>`}
|
|
1979
2000
|
<div>
|
|
1980
2001
|
<div class="tname">${bt(t, s, e.date)}<a href=${g(t.hrefs.school, { id: r.id })}>${r.name}</a></div>
|
|
1981
|
-
<div class="trec">${r.mascot || ""} · ${x(
|
|
2002
|
+
<div class="trec">${r.mascot || ""} · ${x(l)}${i?.conferenceId ? n` · ${x(l, !0)} conf` : m}</div>
|
|
1982
2003
|
</div>
|
|
1983
2004
|
</div>
|
|
1984
2005
|
`;
|
|
@@ -1986,20 +2007,20 @@ class ee extends w {
|
|
|
1986
2007
|
renderLineScore(t, e, s) {
|
|
1987
2008
|
const r = t.periodScores || [];
|
|
1988
2009
|
if (!r.length)
|
|
1989
|
-
return
|
|
1990
|
-
const o = Math.max(4, ...r.map((
|
|
2010
|
+
return n`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>`;
|
|
2011
|
+
const o = Math.max(4, ...r.map((c) => c.period)), i = (c) => c <= 4 ? String(c) : `OT${c > 5 ? c - 4 : ""}`, l = (c, h) => {
|
|
1991
2012
|
const p = r.find((f) => f.period === h);
|
|
1992
|
-
return p ? p[
|
|
1993
|
-
}, d = (
|
|
2013
|
+
return p ? p[c] : t.state === "final" ? 0 : "·";
|
|
2014
|
+
}, d = (c, h, p) => n`
|
|
1994
2015
|
<tr>
|
|
1995
|
-
<td class="teamcell">${H(
|
|
1996
|
-
${Array.from({ length: o }, (f, u) =>
|
|
2016
|
+
<td class="teamcell">${H(c, 20)}${c?.abbr || "TBD"}</td>
|
|
2017
|
+
${Array.from({ length: o }, (f, u) => n`<td class="num">${l(h, u + 1)}</td>`)}
|
|
1997
2018
|
<td class="num" style="font-weight:700">${p}</td>
|
|
1998
2019
|
</tr>`;
|
|
1999
|
-
return
|
|
2020
|
+
return n`
|
|
2000
2021
|
<div class="tablewrap" style="border-top:1px solid var(--hsot-gray-2)">
|
|
2001
2022
|
<table class="data" style="max-width:560px;margin:0.6rem auto 0.9rem">
|
|
2002
|
-
<thead><tr><th>Team</th>${Array.from({ length: o }, (
|
|
2023
|
+
<thead><tr><th>Team</th>${Array.from({ length: o }, (c, h) => n`<th class="num">${i(h + 1)}</th>`)}<th class="num">T</th></tr></thead>
|
|
2003
2024
|
<tbody>
|
|
2004
2025
|
${d(e, "away", t.awayScore)}
|
|
2005
2026
|
${d(s, "home", t.homeScore)}
|
|
@@ -2008,17 +2029,43 @@ class ee extends w {
|
|
|
2008
2029
|
</div>
|
|
2009
2030
|
`;
|
|
2010
2031
|
}
|
|
2032
|
+
renderScoringPlays(t, e, s) {
|
|
2033
|
+
const r = Array.isArray(t.scoringPlays) ? t.scoringPlays : [];
|
|
2034
|
+
if (!r.length) return m;
|
|
2035
|
+
const o = (i) => [i.period, i.clock].filter(Boolean).join(" ");
|
|
2036
|
+
return n`
|
|
2037
|
+
<div class="plays">
|
|
2038
|
+
<div class="plays-title">Scoring plays</div>
|
|
2039
|
+
<div class="tablewrap">
|
|
2040
|
+
<table class="data plays-table">
|
|
2041
|
+
<thead><tr>
|
|
2042
|
+
<th>When</th><th>Play</th>
|
|
2043
|
+
<th class="num">${e?.abbr || "Away"}</th><th class="num">${s?.abbr || "Home"}</th>
|
|
2044
|
+
</tr></thead>
|
|
2045
|
+
<tbody>
|
|
2046
|
+
${r.map((i) => n`<tr>
|
|
2047
|
+
<td class="when">${o(i) || "·"}</td>
|
|
2048
|
+
<td class="play">${i.description || "·"}</td>
|
|
2049
|
+
<td class="num">${i.awayScore}</td>
|
|
2050
|
+
<td class="num">${i.homeScore}</td>
|
|
2051
|
+
</tr>`)}
|
|
2052
|
+
</tbody>
|
|
2053
|
+
</table>
|
|
2054
|
+
</div>
|
|
2055
|
+
</div>
|
|
2056
|
+
`;
|
|
2057
|
+
}
|
|
2011
2058
|
renderContext(t, e, s) {
|
|
2012
2059
|
if (!s) return m;
|
|
2013
2060
|
const r = t.records[e], o = gt(this.data.games, e);
|
|
2014
|
-
return
|
|
2061
|
+
return n`
|
|
2015
2062
|
<div class="card ctxcard">
|
|
2016
2063
|
<div class="who">${H(s)}${s.name}</div>
|
|
2017
2064
|
<div class="row">
|
|
2018
2065
|
<span>Last 5: ${yt(t, e)}</span>
|
|
2019
2066
|
<span>Streak: <b>${r ? st(r.results) : "·"}</b></span>
|
|
2020
2067
|
<span>PF/PA: <b>${r ? `${r.pf} / ${r.pa}` : "·"}</b></span>
|
|
2021
|
-
<span>Next: ${o ?
|
|
2068
|
+
<span>Next: ${o ? n`${y(o.date, { month: "numeric", day: "numeric" })}
|
|
2022
2069
|
${o.homeTeamId === e ? "vs" : "at"} ${Z(t, o.homeTeamId === e ? o.awayTeamId : o.homeTeamId)}` : "·"}</span>
|
|
2023
2070
|
</div>
|
|
2024
2071
|
</div>
|
|
@@ -2026,7 +2073,7 @@ class ee extends w {
|
|
|
2026
2073
|
}
|
|
2027
2074
|
}
|
|
2028
2075
|
globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", ee);
|
|
2029
|
-
const
|
|
2076
|
+
const ts = 250, es = 2;
|
|
2030
2077
|
class se extends E {
|
|
2031
2078
|
static properties = {
|
|
2032
2079
|
api: { type: String },
|
|
@@ -2107,11 +2154,11 @@ class se extends E {
|
|
|
2107
2154
|
}
|
|
2108
2155
|
onInput(t) {
|
|
2109
2156
|
const e = t.target.value.trim();
|
|
2110
|
-
if (clearTimeout(this.debounceTimer), e.length <
|
|
2157
|
+
if (clearTimeout(this.debounceTimer), e.length < es) {
|
|
2111
2158
|
this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
|
|
2112
2159
|
return;
|
|
2113
2160
|
}
|
|
2114
|
-
this.debounceTimer = setTimeout(() => this.search(e),
|
|
2161
|
+
this.debounceTimer = setTimeout(() => this.search(e), ts);
|
|
2115
2162
|
}
|
|
2116
2163
|
async search(t) {
|
|
2117
2164
|
this.abortController?.abort(), this.abortController = new AbortController();
|
|
@@ -2159,7 +2206,7 @@ class se extends E {
|
|
|
2159
2206
|
const s = this.where(t), r = (o) => {
|
|
2160
2207
|
o.preventDefault(), this.go(t);
|
|
2161
2208
|
};
|
|
2162
|
-
return
|
|
2209
|
+
return n`
|
|
2163
2210
|
<li
|
|
2164
2211
|
id="school-option-${e}"
|
|
2165
2212
|
role="option"
|
|
@@ -2170,13 +2217,13 @@ class se extends E {
|
|
|
2170
2217
|
}}"
|
|
2171
2218
|
>
|
|
2172
2219
|
<span class="name">${t.name}</span>
|
|
2173
|
-
${s ?
|
|
2220
|
+
${s ? n`<span class="where">${s}</span>` : m}
|
|
2174
2221
|
</li>
|
|
2175
2222
|
`;
|
|
2176
2223
|
}
|
|
2177
2224
|
renderListbox() {
|
|
2178
|
-
const t = this.searched && !this.results.length, e =
|
|
2179
|
-
return
|
|
2225
|
+
const t = this.searched && !this.results.length, e = n`<li class="empty">No schools found</li>`;
|
|
2226
|
+
return n`
|
|
2180
2227
|
<ul id="school-search-listbox" role="listbox" aria-label="Schools">
|
|
2181
2228
|
${this.results.map((s, r) => this.renderOption(s, r))}
|
|
2182
2229
|
${t ? e : m}
|
|
@@ -2185,7 +2232,7 @@ class se extends E {
|
|
|
2185
2232
|
}
|
|
2186
2233
|
render() {
|
|
2187
2234
|
const t = this.activeIndex >= 0 ? `school-option-${this.activeIndex}` : "";
|
|
2188
|
-
return
|
|
2235
|
+
return n`
|
|
2189
2236
|
<input
|
|
2190
2237
|
type="text"
|
|
2191
2238
|
role="combobox"
|
|
@@ -2205,7 +2252,7 @@ class se extends E {
|
|
|
2205
2252
|
}
|
|
2206
2253
|
}
|
|
2207
2254
|
globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", se);
|
|
2208
|
-
const
|
|
2255
|
+
const ss = {
|
|
2209
2256
|
"hsot-scores": Qt,
|
|
2210
2257
|
"hsot-standings": Zt,
|
|
2211
2258
|
"hsot-rankings": Jt,
|
|
@@ -2213,13 +2260,13 @@ const es = {
|
|
|
2213
2260
|
"hsot-boxscore": ee,
|
|
2214
2261
|
"hsot-school-search": se
|
|
2215
2262
|
};
|
|
2216
|
-
function
|
|
2263
|
+
function as() {
|
|
2217
2264
|
const a = globalThis?.customElements;
|
|
2218
2265
|
if (a)
|
|
2219
|
-
for (const [t, e] of Object.entries(
|
|
2266
|
+
for (const [t, e] of Object.entries(ss))
|
|
2220
2267
|
a.get(t) || a.define(t, e);
|
|
2221
2268
|
}
|
|
2222
|
-
typeof window < "u" && globalThis.customElements &&
|
|
2269
|
+
typeof window < "u" && globalThis.customElements && as();
|
|
2223
2270
|
export {
|
|
2224
|
-
|
|
2271
|
+
as as defineAll
|
|
2225
2272
|
};
|