mirror of
https://github.com/youfoundjk/TeXcore.git
synced 2026-07-22 07:33:31 +00:00
77 lines
2 KiB
JavaScript
77 lines
2 KiB
JavaScript
(() => {
|
|
function getSiteBaseUrl() {
|
|
const candidates = [
|
|
...document.querySelectorAll('link[href*="assets/stylesheets/"]'),
|
|
...document.querySelectorAll('script[src*="assets/javascripts/"]')
|
|
];
|
|
|
|
for (const el of candidates) {
|
|
const raw = el.getAttribute('href') || el.getAttribute('src');
|
|
if (!raw) continue;
|
|
|
|
const absUrl = new URL(raw, window.location.href).href;
|
|
const assetsIndex = absUrl.indexOf('/assets/');
|
|
if (assetsIndex !== -1) {
|
|
return absUrl.slice(0, assetsIndex);
|
|
}
|
|
}
|
|
|
|
return window.location.origin;
|
|
}
|
|
|
|
function getLogoPath(filename) {
|
|
return `${getSiteBaseUrl()}/assets/branding/${filename}`;
|
|
}
|
|
|
|
function getScheme() {
|
|
return (
|
|
document.body?.getAttribute('data-md-color-scheme') ||
|
|
document.documentElement?.getAttribute('data-md-color-scheme') ||
|
|
'default'
|
|
);
|
|
}
|
|
|
|
function applyThemeLogo() {
|
|
const logoSrc =
|
|
getScheme() === 'slate' ? getLogoPath('icon-dark.png') : getLogoPath('icon-light.png');
|
|
const logos = document.querySelectorAll('.md-header__button.md-logo img');
|
|
|
|
logos.forEach(logo => {
|
|
logo.setAttribute('src', logoSrc);
|
|
});
|
|
}
|
|
|
|
function observeThemeChanges() {
|
|
const observer = new MutationObserver(mutations => {
|
|
for (const mutation of mutations) {
|
|
if (mutation.type === 'attributes' && mutation.attributeName === 'data-md-color-scheme') {
|
|
applyThemeLogo();
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
if (document.body) {
|
|
observer.observe(document.body, {
|
|
attributes: true,
|
|
attributeFilter: ['data-md-color-scheme']
|
|
});
|
|
}
|
|
|
|
observer.observe(document.documentElement, {
|
|
attributes: true,
|
|
attributeFilter: ['data-md-color-scheme']
|
|
});
|
|
}
|
|
|
|
function init() {
|
|
applyThemeLogo();
|
|
observeThemeChanges();
|
|
}
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', init, { once: true });
|
|
} else {
|
|
init();
|
|
}
|
|
})();
|