<script lang="ts"> import { Store, UIEventSource } from "../../Logic/UIEventSource"; import type { SpecialVisualizationState } from "../SpecialVisualization"; import { Utils } from "../../Utils"; import Loading from "../../assets/svg/Loading.svelte"; export let tags: Store<Record<string, string>>; export let giggityUrl: string; export let state: SpecialVisualizationState; let name = $tags["name"]; let events: UIEventSource<{ date: Date, start: string, duration: string, room: string, slug: string, url: string, title: string, track: string, type: string, language: string, abstract: string, description: string, persons: string, } []> = new UIEventSource(undefined); async function loadXml() { if (!name) { console.log("Not fetching giggity events as name is", name, tags); return; } const xmlStr = await Utils.downloadAdvanced(giggityUrl); console.log("Raw xml", xmlStr); const parser = new DOMParser(); let doc = parser.parseFromString(xmlStr.content, "application/xml"); let days = Array.from(doc.documentElement.getElementsByTagName("day")); let today = new Date().toISOString().split("T")[0]; const eventsToday = days.find(day => day.getAttribute("date") === today); console.log("Events today", eventsToday); const childs = ["date", "start", "duration", "room", "slug", "url", "title", "track", "type", "language", "abstract", "description", "persons"]; const now = new Date().toISOString().split("T")[1].substring(0, 5) let eventsList = []; for (const eventXml of Array.from(eventsToday.getElementsByTagName("event"))) { const event: Record<string, string> = {}; for (const child of childs) { const v = Array.from(eventXml.getElementsByTagName(child)).map(xml => xml.textContent).join("; "); event[child] = v; } if(!name.startsWith(event.room)){ continue } if(now > event.start){ continue } eventsList.push(event); } events.setData(eventsList); } loadXml(); </script> {#if $events === undefined} <Loading class="h-4">Loading giggity events from {giggityUrl}</Loading> {:else} <div> <h2>Upcoming events</h2> {#each $events as event} <div class="flex flex-col m-2 border border-gray-200 border-dotted"> {#if event.url} <h3><a href={event.url} target="_blank">{event.title}</a></h3> {:else } <h3>{event.title}</h3> {/if} <div><b>{event.start}</b></div> <i>By {event.persons}</i> <div> {event.abstract} </div> {event.url} </div> {/each} </div> {/if}