58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { VideoDescription } from "./main.ts";
|
|
|
|
export function singleVideoDescription(video: VideoDescription): string {
|
|
const teachersList = video.teachers.map(v => "[[" + v + "]]").join(" & ");
|
|
|
|
const nagElement = video.nags.length > 0 ? `<span title="${video.nags.join("
")}">🔴</span>` : "";
|
|
return `=== ${video.title} ===
|
|
Date: {{#time: Y-m-d (D) | ${video.date}}} ${nagElement}<br>
|
|
Teachers: ${teachersList}<br>
|
|
Level: ${video.level}
|
|
|
|
[[${video.path}|left|400px|thumb|${video.title}]]
|
|
|
|
<div style="float:left">
|
|
==== Shown Patterns ====
|
|
${video.patterns}
|
|
|
|
==== Notes ====
|
|
${video.notes}
|
|
</div>
|
|
|
|
<br clear=all>`;
|
|
}
|
|
|
|
export function writeSections(events: VideoDescription[][]): string {
|
|
return events.map(v => {
|
|
const token = v[0]
|
|
const event_name = token.event === token.location ? token.event : token.event + " " + token.location
|
|
|
|
// FIXME: This will break with videos in 75 years
|
|
const event_contains_year = event_name.match(/\d{2}|20\d{2}/) !== null
|
|
const event_date = event_contains_year ? "" : new Date(token.date).getFullYear().toString()
|
|
|
|
let r = `== ${event_name} ${event_date} ==\n`
|
|
r += `${v.length} Video${v.length <= 1 ? "" : "s"}\n`
|
|
r += v.map(video => singleVideoDescription(video)).join("\n\n")
|
|
return r
|
|
}).join("\n\n\n")
|
|
}
|
|
|
|
export function bucketEvents(events: VideoDescription[]): VideoDescription[][] {
|
|
const buckets: Record<string, VideoDescription[]> = {}
|
|
for (const e of events) {
|
|
const tag = e.event + e.location + new Date(e.date).getFullYear().toString()
|
|
if (tag in buckets) {
|
|
buckets[tag].push(e)
|
|
} else {
|
|
buckets[tag] = [e]
|
|
}
|
|
}
|
|
|
|
Object.values(buckets)
|
|
.forEach(b =>
|
|
b.sort((a, b) =>
|
|
new Date(a.date).getTime() - new Date(b.date).getTime()))
|
|
|
|
return Object.values(buckets).sort((a, b) => new Date(a[0].date).getTime() - new Date(b[0].date).getTime())
|
|
} |