| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import { useClassVersionStore } from "./stores/ClassVersion";
- import { useClassesStore } from "./stores/classes";
- import {
- HistoricClassEntry,
- Module,
- SemesterVersion,
- TaughtClass,
- } from "./types";
- export function toTime(t: number): string {
- const hours = Math.floor(t / 3600);
- const minutes = (t - 3600 * hours) / 60;
- return `${String(hours).padStart(2, "0")}:${String(minutes).padStart(
- 2,
- "0"
- )}`;
- }
- export function fromTime(t: string): number {
- const spl = t.split(":");
- const hours = Number.parseInt(spl[0]);
- const minutes = Number.parseInt(spl[1]);
- return hours * 3600 + minutes * 60;
- }
- export function copyToClipboard(text: string) {
- if (!navigator.clipboard) {
- return null;
- }
- return navigator.clipboard.writeText(text);
- }
- export const dayMap: Record<number, string> = {
- 0: "Mo",
- 1: "Di",
- 2: "Mi",
- 3: "Do",
- 4: "Fr",
- 5: "Sa",
- };
- export const waitTimeAfterUpgradeRequestModal = 3600000; // 1 Hour
- export const waitTimeAfterOldPlanReminder = 7 * 24 * 3600000; // 1 Week
- export function openURLInNewWindow(url: string) {
- window.open(
- url,
- "_blank",
- "resizable=yes, scrollbars=yes, titlebar=yes, width=800, height=600"
- );
- }
- export const bbClassRe = /bb\d?$/;
- export const firstPhaseClassRe = /(?:bb\d?$|^\dK)/;
- export const englishClassRe = /(?:eng|KE[a-z])$/;
- export const contextClassRe = /^\dK/;
- export function classesPDFLink(
- cls: TaughtClass | HistoricClassEntry,
- semester: string | null = null,
- version: string | null = null
- ): string {
- let semesterFolder;
- let semVerFolder;
- if (semester == null || version == null) {
- const versionStore = useClassVersionStore();
- semesterFolder = versionStore.semesterFolder;
- semVerFolder = versionStore.semVerFolder;
- } else {
- semesterFolder = getSemesterFolder(semester);
- semVerFolder = getSemVerFolder(semester, version);
- }
- if (cls.weekday === null) {
- const cs = useClassesStore();
- const file = cs.currentData?.config.blockclass_file ?? "block.pdf";
- return `${semesterFolder}/${file}#page=${cls.pages[0]}`;
- }
- return `${semVerFolder}/klassen.pdf#page=${cls.pages[0]}`;
- }
- export function getSemesterFolder(semester: string): string {
- return `./data/${semester}`;
- }
- export function getSemVerFolder(semester: string, version: string): string {
- return `${getSemesterFolder(semester)}/${version}`;
- }
- export function addRemoveClassTitle(
- module: Module | null,
- isChosen: boolean
- ): string {
- if (module?.hasCompleted) return "Modul bereits bestanden";
- if (module?.maxAttemptsReached)
- return `Du hast dieses Modul bereits ${module.attemptCount} Mal versucht!`;
- if (isChosen) return "Von der Planung entfernen";
- return "Zur Planung hinzufügen";
- }
- export function rowStyling(mod: Module | null, defaultColour = ""): string {
- if (mod == null) return defaultColour;
- if (mod.hasCompleted) return "dark:bg-emerald-900 bg-emerald-100";
- if (mod.isActive) return "dark:bg-blue-900 bg-blue-100";
- if (mod.hasFailed) return "dark:bg-orange-900 bg-orange-100";
- return defaultColour;
- }
- // eslint-disable-next-line
- export function matchesOneOf(list1: any[], list2: any[]): boolean {
- if (list1.length == 0 || list2.length == 0) return false;
- return !list1.every((e1) => {
- return !list2.includes(e1);
- });
- }
- export const MAX_ATTEMPT_COUNT = 2;
- export const MinFullNameSearchLength = 4;
- /**
- * Parses version strings into [Semester, Version] from two formats:
- * - "einschreiben / FS_23_einschr_2"
- * - "23HS|einschr_2"
- *
- * @param versionStr The version string that should be parsed
- * @returns {Semester, Version}
- */
- export function parsePDFVersion(versionStr: string | null): {
- semester: string | null;
- version: string | null;
- } {
- if (versionStr == null) return { semester: null, version: null };
- const extractReInternal = /(.*)\|(.*)/;
- const extractRePdf = /\/ (HS|FS)_(\d{2})_(.*)/;
- const resInt = versionStr.match(extractReInternal);
- if (resInt != null) {
- const semester = resInt[1];
- const version = resInt[2];
- return { semester, version };
- }
- const res = versionStr.match(extractRePdf);
- if (res == null) return { semester: null, version: null };
- const semester = res[2] + res[1];
- const version = res[3];
- return { semester, version };
- }
- export function samePDFVersion(
- vers1: string | null,
- vers2: string | null
- ): boolean {
- const parsed1 = parsePDFVersion(vers1);
- const parsed2 = parsePDFVersion(vers2);
- return (
- parsed1.semester == parsed2.semester && parsed1.version == parsed2.version
- );
- }
- export function semesterVersionString(
- semester: string,
- version: string
- ): string {
- return `${semester}|${version}`;
- }
- export function semesterVersionStringC(
- semVer: SemesterVersion | null,
- versionIdx = 0
- ): string | null {
- if (semVer == null) return null;
- return `${semVer.semester}|${semVer.versions[versionIdx]}`;
- }
|