diff --git a/src/@types/calendar.d.ts b/src/@types/calendar.d.ts index f389190..ec44552 100644 --- a/src/@types/calendar.d.ts +++ b/src/@types/calendar.d.ts @@ -1,7 +1,7 @@ import { Moon } from "."; -import { FcEvent, FcEventCategory } from "."; +import { CalEvent, CalEventCategory } from "."; -export interface FcDate { +export interface CalDate { day: number; month: number; year: number; @@ -12,9 +12,9 @@ export interface Calendar { name: string; description: string; static: StaticCalendarData; - current: FcDate; - events: FcEvent[]; - categories: FcEventCategory[]; + current: CalDate; + events: CalEvent[]; + categories: CalEventCategory[]; date?: number; displayWeeks?: boolean; autoParse: boolean; @@ -39,7 +39,7 @@ export interface StaticCalendarData { years?: Year[]; } -export interface FcDate { +export interface CalDate { year: number; month: number; day: number; @@ -133,7 +133,7 @@ export interface Era { restart: boolean; endsYear: boolean; event: boolean; - start: FcDate; + start: CalDate; eventDescription?: string; eventCategory?: string; } diff --git a/src/@types/event.d.ts b/src/@types/event.d.ts index 4952feb..6890877 100644 --- a/src/@types/event.d.ts +++ b/src/@types/event.d.ts @@ -1,24 +1,24 @@ import { Nullable } from "."; -export interface FcEventSort { +export interface CalEventSort { timestamp: number; order: string; } -export interface FcEventDate { +export interface CalEventDate { year: Nullable, month: Nullable, day: Nullable } -export interface FcEvent { +export interface CalEvent { name: string; description: string; - date: FcEventDate; - end?: FcEventDate; + date: CalEventDate; + end?: CalEventDate; id: string; note: string; category: string; - sort: FcEventSort; + sort: CalEventSort; formulas?: EventFormula[]; img?: string; } @@ -30,14 +30,14 @@ interface FormulaInterval { timespan: "days"; } -export interface ColorEvent extends FcEvent { +export interface ColorEvent extends CalEvent { color: string; } -export interface FcEventCategory { +export interface CalEventCategory { name: string; color: string; id: string; } -export interface FcEventCondition {} +export interface CalEventCondition {} diff --git a/src/api/api.ts b/src/api/api.ts index 8a4181a..87ae759 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -1 +1,31 @@ -export class API {} +import type { Calendar, CalDate, CalEvent } from "src/@types"; +import { CalendarStore } from "src/stores/calendar.store"; +import { get } from "svelte/store"; + +export class API { + #store: CalendarStore; + #object: Calendar; + constructor(store: CalendarStore) { + this.#store = store; + } + + /** + * Transform a day, month, year definition into a CalDate + * @param day Day number + * @param month Month number (0 indexed) + * @param year Year number + * @returns {CalDate} + */ + getDate(day: number, month: number, year: number): CalDate { + return { day, month, year }; + } + + /** Get all events for the loaded calendar. */ + getEvents(): CalEvent[] { + return get(this.#store.eventCache.entities); + } + /** Get all events on a specific date. */ + getEventsOnDay(day: CalDate): CalEvent[] { + return get(this.#store.eventCache.getItemsOrRecalculate(day)); + } +} diff --git a/src/calendar/event-modal.ts b/src/calendar/event-modal.ts index 59a06f2..a5edfb7 100644 --- a/src/calendar/event-modal.ts +++ b/src/calendar/event-modal.ts @@ -1,10 +1,10 @@ import { MarkdownRenderer } from "obsidian"; -import type { FcEvent } from "src/@types"; +import type { CalEvent } from "src/@types"; import type FantasyCalendar from "src/main"; import { CalendariumModal } from "src/settings/modals/modal"; export class ViewEventModal extends CalendariumModal { - constructor(public event: FcEvent, public plugin: FantasyCalendar) { + constructor(public event: CalEvent, public plugin: FantasyCalendar) { super(plugin.app); this.containerEl.addClass("fantasy-calendar-view-event"); } diff --git a/src/calendar/ui/Day/Day.svelte b/src/calendar/ui/Day/Day.svelte index a75ab0e..d4798cb 100644 --- a/src/calendar/ui/Day/Day.svelte +++ b/src/calendar/ui/Day/Day.svelte @@ -3,7 +3,7 @@ import { getTypedContext } from "../../view"; import Dots from "../Events/Dots.svelte"; import { Menu, TFile } from "obsidian"; - import type { DayOrLeapDay, FcEvent } from "src/@types"; + import type { DayOrLeapDay, CalEvent } from "src/@types"; import Moon from "../Moon.svelte"; import { ViewState } from "src/stores/calendar.store"; import Flags from "../Events/Flags.svelte"; @@ -80,7 +80,7 @@ }); }) ); - let notes: { event: FcEvent; file: TFile }[] = []; + let notes: { event: CalEvent; file: TFile }[] = []; for (const event of $events) { if (!event.note) continue; const file = app.vault.getAbstractFileByPath(event.note); @@ -189,4 +189,9 @@ .opened { border: 2px solid var(--background-modifier-border); } + + /* .moon-container { + display: flex; + flex-flow: row; + } */ diff --git a/src/calendar/ui/Day/DayView.svelte b/src/calendar/ui/Day/DayView.svelte index eceb188..39bc8b7 100644 --- a/src/calendar/ui/Day/DayView.svelte +++ b/src/calendar/ui/Day/DayView.svelte @@ -20,11 +20,11 @@ $: daysBeforeMonth = displayedMonth.daysBefore; $: daysBeforeDay = $daysBeforeMonth + $viewing.day; $: events = store.eventCache.getItemsOrRecalculate($viewing); + $: console.log("🚀 ~ file: DayView.svelte:23 ~ events:", $events); $: moons = store.moonCache.getItemsOrRecalculate($viewing); $: displayDayNumber = $ephemeral.displayDayNumber; $: displayMoons = $ephemeral.displayMoons; - const dispatch = createEventDispatcher(); const close = (node: HTMLElement) => { new ExtraButtonComponent(node).setIcon("cross").setTooltip("Close"); diff --git a/src/calendar/ui/Events/Dots.svelte b/src/calendar/ui/Events/Dots.svelte index 0834990..8e3ff6d 100644 --- a/src/calendar/ui/Events/Dots.svelte +++ b/src/calendar/ui/Events/Dots.svelte @@ -1,14 +1,14 @@
- {#key events} -
- - {/key} +
{#if overflow > 0} +{overflow} diff --git a/src/calendar/ui/Month/Month.svelte b/src/calendar/ui/Month/Month.svelte index d66344a..a69243a 100644 --- a/src/calendar/ui/Month/Month.svelte +++ b/src/calendar/ui/Month/Month.svelte @@ -51,6 +51,9 @@ .month-container { height: min-content; } + .month-container.full { + height: 100%; + } .month-header { margin: 0; @@ -63,7 +66,7 @@ var(--calendar-row-size) ); } - .full { + .full .month { height: 100%; } diff --git a/src/events/event.helper.ts b/src/events/event.helper.ts index 6cfb92f..547248c 100644 --- a/src/events/event.helper.ts +++ b/src/events/event.helper.ts @@ -3,17 +3,17 @@ import { nanoid, wrap } from "../utils/functions"; const { DOMParser } = require("xmldom"); import type { Calendar, - FcEvent, - FcEventCategory, - FcEventDate, - FcEventSort, + CalEvent, + CalEventCategory, + CalEventDate, + CalEventSort, LeapDay, Nullable } from "../@types"; const inlineDateSpans: RegExp = /<(span|div)[\s\S]*?<\/(span|div)>/g; -export type FcEventCallback = (fcEvent: FcEvent) => void; +export type CalEventCallback = (fcEvent: CalEvent) => void; export interface InputDate { year?: any, @@ -59,7 +59,7 @@ export class CalEventHelper { data: string, file: { path: string; basename: string }, frontmatter: FrontMatterCache, - publish: FcEventCallback + publish: CalEventCallback ) { let fcCategory: string; console.log("#### parse file for events", frontmatter); @@ -91,8 +91,8 @@ export class CalEventHelper { parseFrontmatterEvent( frontmatter: FrontMatterCache, file: { path: string; basename: string }, - publish: FcEventCallback, - category?: FcEventCategory + publish: CalEventCallback, + category?: CalEventCategory ) { const dateField = "fc-date" in frontmatter ? "fc-date" : "fc-start"; let date = frontmatter[dateField] @@ -121,8 +121,8 @@ export class CalEventHelper { parseInlineEvents( contents: string, file: { path: string; basename: string }, - publish: FcEventCallback, - category?: FcEventCategory + publish: CalEventCallback, + category?: CalEventCategory ) { const domparser = new DOMParser(); // span or div with attributes: @@ -154,9 +154,9 @@ export class CalEventHelper { continue; // span must contain a date } // parse date strings, will return with all elements present: year, month, day, hour/order - let date = this.parseFcDateString(element.dataset.date, file); + let date = this.parseCalDateString(element.dataset.date, file); let end = element.dataset.end - ? this.parseFcDateString(element.dataset.end, file) + ? this.parseCalDateString(element.dataset.end, file) : undefined; if (element.dataset.class) { @@ -186,7 +186,7 @@ export class CalEventHelper { parseFilenameDate(file: { path: string; basename: string }): ParseDate { // TODO: Filename formatter for this calendar? - return this.parseFcDateString(file.basename, file); + return this.parseCalDateString(file.basename, file); } parseFrontmatterDate( @@ -194,7 +194,7 @@ export class CalEventHelper { file: { path: string; basename: string } ): ParseDate { if (typeof date === "string") { - return this.parseFcDateString(date, file); + return this.parseCalDateString(date, file); } // replace any missing segments with '*' @@ -223,7 +223,7 @@ export class CalEventHelper { * @param file Source file * @returns ParseDate instance */ - parseFcDateString( + parseCalDateString( datestring: string, file: { path: string; basename: string } ): ParseDate { @@ -250,7 +250,7 @@ export class CalEventHelper { * for the given event date (will not include an order suffix) * @returns */ - toFcDateString(date: FcEventDate): string { + toCalDateString(date: CalEventDate): string { return this.formatString .replace(/[Yy]+/g, `${date.year}`) .replace(/[Mm]{3,}/g, toMonthString(date.month, this.calendar)) @@ -346,7 +346,7 @@ export class CalEventHelper { }; } - parsedToTimestamp(date: ParseDate): FcEventSort { + parsedToTimestamp(date: ParseDate): CalEventSort { // put repeating events off to the side if (date.year == null || date.month == null || date.day == null) { return { @@ -363,7 +363,7 @@ export class CalEventHelper { }; } - timestampForFcEvent(event: Partial, old?: FcEventSort): FcEventSort { + timestampForCalEvent(event: Partial, old?: CalEventSort): CalEventSort { if (!old && event.sort) { return event.sort; } diff --git a/src/settings/creator/Utilities/DateWithValidation.svelte b/src/settings/creator/Utilities/DateWithValidation.svelte index cb0ffa7..a59047e 100644 --- a/src/settings/creator/Utilities/DateWithValidation.svelte +++ b/src/settings/creator/Utilities/DateWithValidation.svelte @@ -1,5 +1,5 @@