diff --git a/src/plugins/monofile.ts b/src/plugins/monofile.ts index 1d66c618..55e6e71c 100644 --- a/src/plugins/monofile.ts +++ b/src/plugins/monofile.ts @@ -24,6 +24,9 @@ import loading from "@/seqta/ui/Loading"; import { SendNewsPage } from "@/seqta/utils/SendNewsPage"; import { loadHomePage } from "@/seqta/utils/Loaders/LoadHomePage"; import { OpenWhatsNewPopup } from "@/seqta/utils/Whatsnew"; +import { + updateTimetableTimes, +} from "@/seqta/utils/updateTimetableTimes"; // JSON content import MenuitemSVGKey from "@/seqta/content/MenuItemSVGKey.json"; @@ -241,14 +244,16 @@ async function LoadPageElements(): Promise { handleReports, ); - /* eventManager.register( + eventManager.register( "timetableAdded", { elementType: "div", className: "timetablepage", }, - handleTimetable, - ) */ + async () => { + await updateTimetableTimes(); + }, + ); eventManager.register( "noticesAdded", diff --git a/src/seqta/utils/convertTo12HourFormat.ts b/src/seqta/utils/convertTo12HourFormat.ts index 8dd6670e..691bea0c 100644 --- a/src/seqta/utils/convertTo12HourFormat.ts +++ b/src/seqta/utils/convertTo12HourFormat.ts @@ -3,10 +3,10 @@ export function convertTo12HourFormat( noMinutes: boolean = false, ): string { let [hours, minutes] = time.split(":").map(Number); - let period = "AM"; + let period = "am"; if (hours >= 12) { - period = "PM"; + period = "pm"; if (hours > 12) hours -= 12; } else if (hours === 0) { hours = 12; @@ -17,5 +17,5 @@ export function convertTo12HourFormat( hoursStr = hoursStr.substring(1); } - return `${hoursStr}${noMinutes ? "" : `:${minutes.toString().padStart(2, "0")}`} ${period}`; + return `${hoursStr}${noMinutes ? "" : `:${minutes.toString().padStart(2, "0")}`}${period}`; } diff --git a/src/seqta/utils/updateTimetableTimes.ts b/src/seqta/utils/updateTimetableTimes.ts new file mode 100644 index 00000000..3e9a3d5c --- /dev/null +++ b/src/seqta/utils/updateTimetableTimes.ts @@ -0,0 +1,51 @@ +import { settingsState } from "@/seqta/utils/listeners/SettingsState"; +import { convertTo12HourFormat } from "./convertTo12HourFormat"; +import { waitForElm } from "./waitForElm"; + + +export async function updateTimetableTimes(): Promise { + if (!settingsState.timeFormat) return; + + const timetablePage = document.querySelector(".timetablepage"); + if (!timetablePage) return; + + // Wait for time elements to exist if page is still loading + try { + await waitForElm(".timetablepage .time", true, 10); + } catch { + return; + } + + const times = timetablePage.querySelectorAll(".times .time"); + times.forEach((el) => { + if (!el.dataset.original) el.dataset.original = el.textContent || ""; + const original = el.dataset.original; + if (!original) return; + + if (settingsState.timeFormat === "12") { + el.textContent = convertTo12HourFormat(original, true) + .toLowerCase() + .replace(" ", ""); + } else { + el.textContent = original; + } + }); + + const entryTimes = timetablePage.querySelectorAll(".entry .times"); + entryTimes.forEach((el) => { + if (!el.dataset.original) el.dataset.original = el.textContent || ""; + const original = el.dataset.original || ""; + if (!original.includes("–") && !original.includes("-")) return; + + const [start, end] = original.split(/[-–]/).map((p) => p.trim()); + if (!start || !end) return; + + if (settingsState.timeFormat === "12") { + const start12 = convertTo12HourFormat(start).toLowerCase().replace(" ", ""); + const end12 = convertTo12HourFormat(end).toLowerCase().replace(" ", ""); + el.textContent = `${start12}–${end12}`; + } else { + el.textContent = original; + } + }); +}