yarkov.tech/public/assets/js/load-code-highlight.js

49 lines
1.4 KiB
JavaScript

/**
* This script will load the properly code highlithing theme based on user theme
* It is important to insert it after detecting a user theme
* and assigning the `window.theme` property
*/
if (window.theme) {
/* the {theme} in the path will be dynamically changed */
const PATH = `assets/css/code-highlight-{theme}.min.css`;
const $head = document.getElementsByTagName('head')[0];
const getPath = (theme) => PATH.replace(`{theme}`, theme);
const createLink = (theme, media) => {
const $link = document.createElement('link');
$link.rel = 'stylesheet';
$link.type = 'text/css';
$link.href = getPath(theme);
$link.media = media;
return $link;
};
/* init links to load them first */
const $light = createLink('light', 'none');
const $dark = createLink('dark', 'none');
const toggleMedia = (theme) => {
switch (theme) {
case 'light':
$light.media = 'all';
$dark.media = 'none';
break;
case 'dark':
$light.media = 'none';
$dark.media = 'all';
break;
default:
break;
}
};
toggleMedia(window.theme);
$head.appendChild($light);
$head.appendChild($dark);
window.addEventListener('onthemetoggled', ({ detail: newTheme }) => toggleMedia(newTheme));
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches: isDark }) => {
return isDark ? toggleMedia('dark') : toggleMedia('light');
});
}