annotate src/DisplayEvent.ts @ 21:a90cb6927c7d default tip

fix countdown queries. Display "now" instead of "In -0.4 hours"
author drewp@bigasterisk.com
date Sat, 07 Sep 2024 17:47:36 -0700
parents 20d1fa4250c0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
1 import { addHours, endOfToday, endOfTomorrow, format, isAfter, isWithinInterval, parseISO, startOfToday } from "date-fns";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
2 import { TemplateResult, html } from "lit";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
3 import { DataFactory, NamedNode, Quad_Subject, Store, Term } from "n3";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
4 import { getLiteral } from "./parseRdf";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
5 import { hideFeeds, hideTitles } from "./private";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
6 const EV = "http://bigasterisk.com/event#";
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
7 const { namedNode } = DataFactory;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
8
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
9 export class DisplayEvent {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
10 constructor(private store: Store, private graph: Term, public uri: Quad_Subject) {}
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
11 get title(): string {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
12 return getLiteral(this.store, this.graph, this.uri, namedNode(EV + "title"), "(unnamed)");
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
13 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
14 get start(): string {
21
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
15 var ret = getLiteral(this.store, this.graph, this.uri, namedNode(EV + "start"), null);
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
16 if (ret == null || ret === "") {
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
17 ret = getLiteral(this.store, this.graph, this.uri, namedNode(EV + "startDate"), null);
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
18 }
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
19 return ret;
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
20 }
21
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
21 get calendar(): NamedNode {
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
22 // todo: broken- it's now (calendar, :event, event)
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
23 return namedNode(getLiteral(this.store, this.graph, this.uri, namedNode(EV + "feed"), null));
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
24 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
25 shortDate(): TemplateResult {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
26 const t = parseISO(this.start);
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
27 return html`<span class="d">${format(t, "EEE, MMM d,")}</span> <span class="t">${format(t, "HH:mm")}</span>`;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
28 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
29 inHowLong(): TemplateResult {
21
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
30 // returns start()-now, like 'In 5 days'
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
31 const t = parseISO(this.start).valueOf();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
32 const now = Date.now();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
33 const daysAway = (t - now) / 1000 / 86400;
21
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
34 if (daysAway < 0) {
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
35 return html`<span class="until until-2d">NOW</span>`;
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
36 }
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
37 const prec = daysAway < 2 ? 1 : 0;
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
38 const cls = "until " + (daysAway < 2 ? "until-2d" : daysAway < 7 ? "until-7d" : daysAway < 30 ? "until-1mo" : "");
21
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
39 return html`In <span class="${cls}">${daysAway.toFixed(prec)} days</span>`;
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
40 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
41 show(): boolean {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
42 const now = new Date();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
43 const t = parseISO(this.start);
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
44
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
45 const start = startOfToday();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
46 let end = endOfToday();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
47 if (isAfter(now, addHours(startOfToday(), 18))) {
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
48 end = endOfTomorrow();
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
49 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
50
21
a90cb6927c7d fix countdown queries. Display "now" instead of "In -0.4 hours"
drewp@bigasterisk.com
parents: 15
diff changeset
51 return isWithinInterval(t, { start, end }) && !hideTitles.has(this.title) && !hideFeeds.has(this.calendar.value);
15
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
52 }
20d1fa4250c0 refactor
drewp@bigasterisk.com
parents:
diff changeset
53 }