Spaces:
Build error
Build error
let originalTitle = ""; | |
let titleInterval: number | undefined; | |
const isBrowser = | |
typeof window !== "undefined" && typeof document !== "undefined"; | |
// Use a constant for the notification parameter to avoid hardcoded strings | |
const NOTIFICATION_PARAM = "notification"; | |
export const browserTab = { | |
startNotification(message: string) { | |
if (!isBrowser) return; | |
// Store original title if not already stored | |
if (!originalTitle) { | |
originalTitle = document.title; | |
} | |
// Clear any existing interval | |
if (titleInterval) { | |
this.stopNotification(); | |
} | |
// Alternate between original title and notification message | |
titleInterval = window.setInterval(() => { | |
document.title = | |
document.title === originalTitle ? message : originalTitle; | |
}, 1000); | |
// Set favicon to indicate notification | |
const favicon = document.querySelector( | |
'link[rel="icon"]', | |
) as HTMLLinkElement; | |
if (favicon) { | |
favicon.href = favicon.href.includes(`?${NOTIFICATION_PARAM}`) | |
? favicon.href | |
: `${favicon.href}?${NOTIFICATION_PARAM}`; | |
} | |
}, | |
stopNotification() { | |
if (!isBrowser) return; | |
if (titleInterval) { | |
window.clearInterval(titleInterval); | |
titleInterval = undefined; | |
} | |
if (originalTitle) { | |
document.title = originalTitle; | |
} | |
// Reset favicon | |
const favicon = document.querySelector( | |
'link[rel="icon"]', | |
) as HTMLLinkElement; | |
if (favicon) { | |
favicon.href = favicon.href.replace(`?${NOTIFICATION_PARAM}`, ""); | |
} | |
}, | |
}; | |