mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 03:34:40 +00:00
feat: apply 12 hour time to timetable #280
This commit is contained in:
@@ -24,6 +24,9 @@ import loading from "@/seqta/ui/Loading";
|
|||||||
import { SendNewsPage } from "@/seqta/utils/SendNewsPage";
|
import { SendNewsPage } from "@/seqta/utils/SendNewsPage";
|
||||||
import { loadHomePage } from "@/seqta/utils/Loaders/LoadHomePage";
|
import { loadHomePage } from "@/seqta/utils/Loaders/LoadHomePage";
|
||||||
import { OpenWhatsNewPopup } from "@/seqta/utils/Whatsnew";
|
import { OpenWhatsNewPopup } from "@/seqta/utils/Whatsnew";
|
||||||
|
import {
|
||||||
|
updateTimetableTimes,
|
||||||
|
} from "@/seqta/utils/updateTimetableTimes";
|
||||||
|
|
||||||
// JSON content
|
// JSON content
|
||||||
import MenuitemSVGKey from "@/seqta/content/MenuItemSVGKey.json";
|
import MenuitemSVGKey from "@/seqta/content/MenuItemSVGKey.json";
|
||||||
@@ -241,14 +244,16 @@ async function LoadPageElements(): Promise<void> {
|
|||||||
handleReports,
|
handleReports,
|
||||||
);
|
);
|
||||||
|
|
||||||
/* eventManager.register(
|
eventManager.register(
|
||||||
"timetableAdded",
|
"timetableAdded",
|
||||||
{
|
{
|
||||||
elementType: "div",
|
elementType: "div",
|
||||||
className: "timetablepage",
|
className: "timetablepage",
|
||||||
},
|
},
|
||||||
handleTimetable,
|
async () => {
|
||||||
) */
|
await updateTimetableTimes();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
eventManager.register(
|
eventManager.register(
|
||||||
"noticesAdded",
|
"noticesAdded",
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ export function convertTo12HourFormat(
|
|||||||
noMinutes: boolean = false,
|
noMinutes: boolean = false,
|
||||||
): string {
|
): string {
|
||||||
let [hours, minutes] = time.split(":").map(Number);
|
let [hours, minutes] = time.split(":").map(Number);
|
||||||
let period = "AM";
|
let period = "am";
|
||||||
|
|
||||||
if (hours >= 12) {
|
if (hours >= 12) {
|
||||||
period = "PM";
|
period = "pm";
|
||||||
if (hours > 12) hours -= 12;
|
if (hours > 12) hours -= 12;
|
||||||
} else if (hours === 0) {
|
} else if (hours === 0) {
|
||||||
hours = 12;
|
hours = 12;
|
||||||
@@ -17,5 +17,5 @@ export function convertTo12HourFormat(
|
|||||||
hoursStr = hoursStr.substring(1);
|
hoursStr = hoursStr.substring(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return `${hoursStr}${noMinutes ? "" : `:${minutes.toString().padStart(2, "0")}`} ${period}`;
|
return `${hoursStr}${noMinutes ? "" : `:${minutes.toString().padStart(2, "0")}`}${period}`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
import { settingsState } from "@/seqta/utils/listeners/SettingsState";
|
||||||
|
import { convertTo12HourFormat } from "./convertTo12HourFormat";
|
||||||
|
import { waitForElm } from "./waitForElm";
|
||||||
|
|
||||||
|
|
||||||
|
export async function updateTimetableTimes(): Promise<void> {
|
||||||
|
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<HTMLElement>(".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<HTMLElement>(".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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user