yarkov.tech/public/assets/js/load-code-highlight.js
2022-08-28 13:56:48 +03:00

51 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");
});
}