annotate src/FdCountdown.ts @ 15:20d1fa4250c0

refactor
author drewp@bigasterisk.com
date Thu, 06 Jun 2024 17:52:28 -0700
parents
children 472003015880
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
1 import { LitElement, css, html } from "lit";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
2 import { customElement, property } from "lit/decorators.js";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
3 import { sortBy } from "lodash";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
4 import { DataFactory, Quad_Subject, Store } from "n3";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
5 import { shared } from "./shared";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
6 import { EV, fetchGraph, parseGraph, RDF } from "./parseRdf";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
7 import { DisplayEvent } from "./DisplayEvent";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
8
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
9 const { namedNode } = DataFactory;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
10
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
11 @customElement("fd-countdown")
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
12 export class FdCountdown extends LitElement {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
13 static styles = [
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
14 shared,
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
15 css`
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
16 ol {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
17 list-style: none;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
18 font-size: 16px;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
19 background: #cd66bb2e;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
20 padding: 9px;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
21 width: fit-content;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
22 position: relative;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
23 top: -21px;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
24 border-radius: 14px;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
25 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
26 span.d {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
27 opacity: 0.5;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
28 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
29 li:has(.until) {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
30 color: #666;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
31 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
32 li:has(.until-2d) {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
33 color: #fff;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
34 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
35 li:has(.until-7d) {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
36 color: #ccc;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
37 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
38 li:has(.until-30d) {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
39 color: #999;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
40 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
41 li:has(.until)::before {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
42 display: inline-block;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
43 width: 1.4em;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
44 content: "";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
45 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
46 li:has(.until-2d)::before {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
47 content: "🌕";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
48 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
49 li:has(.until-7d)::before {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
50 content: "🌙";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
51 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
52 li:has(.until-30d)::before {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
53 content: "🌑";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
54 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
55 `,
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
56 ];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
57 @property() evs: DisplayEvent[];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
58 constructor() {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
59 super();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
60 this.evs = [];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
61 this.load();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
62 setInterval(this.load.bind(this), 5 * 60 * 1000);
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
63 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
64 async load() {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
65 const store = new Store();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
66 const r = await fetchGraph("/gcalendarwatch/graph/calendar/countdown");
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
67 await parseGraph(r, (store: Store) => {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
68 const graph = namedNode(EV + "gcalendar");
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
69 this.evs = [];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
70 store.getSubjects(namedNode(RDF + "type"), namedNode(EV + "Event"), graph).forEach((ev: Quad_Subject) => {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
71 const de = new DisplayEvent(store, graph, ev);
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
72 this.evs = [...this.evs, de];
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
73 });
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
74 this.evs = sortBy(this.evs, "start");
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
75 });
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
76 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
77 render() {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
78 return html`<h1 data-text="Coming Soon">Coming Soon</h1>
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
79 <ol>
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
80 ${this.evs.map((d) => html`<li>In ${d.inHowLong()}, ${d.title}</li>`)}
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
81 </ol> `;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
82 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
83 }