schoolbox web extension :)
1import { Plugin } from "@/utils/plugin"; 2import type { Toggle } from "@/utils/storage"; 3import type { StorageState } from "@/utils/storage/state.svelte"; 4import menu from "./Menu.svelte?url"; 5 6const ID = "tabTitle"; 7let originalTitle: string | null = null; 8 9export type Settings = { 10 showSubjectPrefix: StorageState<Toggle>; 11}; 12 13export default new Plugin<Settings>( 14 { 15 id: ID, 16 name: "Better Tab Titles", 17 description: "Improves the tab titles for easier navigation.", 18 }, 19 true, 20 { 21 config: { 22 showSubjectPrefix: { toggle: true }, 23 }, 24 menu, 25 }, 26 async (settings) => { 27 // if already injected, abort 28 if (originalTitle) return; 29 30 // backup original title (used for uninjection) 31 originalTitle = document.title; 32 33 const path = window.location.pathname; 34 const titleMap: { [key: string]: string } = { 35 "/": "Homepage", 36 "/calendar": "Calendar", 37 "/news": "News", 38 "/learning/classes": "Classes", 39 "/resources": "Resources", 40 "/groups": "Groups", 41 "/settings/notifications": "Notifications Settings", 42 "/mail/create": "Compose Email", 43 "/feedback": "Support and Feedback", 44 "/policy": "Guidelines of Use and Privacy Policy", 45 }; 46 47 if (titleMap[path]) { 48 document.title = titleMap[path]; 49 } else if (path.includes("/timetable")) { 50 document.title = "Timetable"; 51 } else if (path.includes("/calendar")) { 52 document.title = "Calendar"; 53 } else if (path.includes("/grades/")) { 54 document.title = "Grades"; 55 } else if (path.includes("/news/")) { 56 document.title = `News (${document.getElementsByTagName("h1")[0].innerText})`; 57 } else if (path.includes("/assessments/")) { 58 document.title = `Assessments - ${document.getElementsByTagName("h1")[0].innerText})`; 59 } else if (path.includes("/mail/create")) { 60 document.title = "Compose Email"; 61 } else if (path.includes("/search/user")) { 62 document.title = `Profile - ${document.getElementsByTagName("h1")[0].innerText}`; 63 } else if (path.includes("/learning/due/")) { 64 document.title = "Due Work"; 65 } else if (path.includes("/homepage/")) { 66 if (!(await settings.showSubjectPrefix.get()).toggle) { 67 document.title = document.getElementsByTagName("h1")[0].innerText.replace(/^.*- /, ""); 68 } else { 69 document.title = document.getElementsByTagName("h1")[0].innerText; 70 } 71 } 72 }, 73 () => { 74 // if not injected, abort 75 if (!originalTitle) return; 76 77 document.title = originalTitle; 78 originalTitle = null; 79 }, 80 ["h1"], 81);