| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const body = document.body;
- const darkModeToggle = document.getElementById('dark-mode-toggle');
- const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
- // Check if user preference is set, if not check value of body class for light or dark else it means that colorscheme = auto
- if (localStorage.getItem("colorscheme")) {
- setTheme(localStorage.getItem("colorscheme"));
- } else if (body.classList.contains('colorscheme-light') || body.classList.contains('colorscheme-dark')) {
- setTheme(body.classList.contains("colorscheme-dark") ? "dark" : "light");
- } else {
- setTheme(darkModeMediaQuery.matches ? "dark" : "light");
- }
- if (darkModeToggle) {
- darkModeToggle.addEventListener('click', () => {
- let theme = body.classList.contains("colorscheme-dark") ? "light" : "dark";
- setTheme(theme);
- rememberTheme(theme);
- });
- }
- darkModeMediaQuery.addListener((event) => {
- setTheme(event.matches ? "dark" : "light");
- });
- document.addEventListener("DOMContentLoaded", function () {
- let node = document.querySelector('.preload-transitions');
- node.classList.remove('preload-transitions');
- });
- function setTheme(theme) {
- body.classList.remove('colorscheme-auto');
- let inverse = theme === 'dark' ? 'light' : 'dark';
- body.classList.remove('colorscheme-' + inverse);
- body.classList.add('colorscheme-' + theme);
- document.documentElement.style['color-scheme'] = theme;
- function waitForElm(selector) {
- return new Promise(resolve => {
- if (document.querySelector(selector)) {
- return resolve(document.querySelector(selector));
- }
-
- const observer = new MutationObserver(mutations => {
- if (document.querySelector(selector)) {
- resolve(document.querySelector(selector));
- observer.disconnect();
- }
- });
- observer.observe(document.body, {
- childList: true,
- subtree: true
- });
- });
- }
- if (theme === 'dark') {
- const message = {
- type: 'set-theme',
- theme: 'github-dark'
- };
- waitForElm('.utterances-frame').then((iframe) => {
- iframe.contentWindow.postMessage(message, 'https://utteranc.es');
- })
-
- }
- else {
- const message = {
- type: 'set-theme',
- theme: 'github-light'
- };
- waitForElm('.utterances-frame').then((iframe) => {
- iframe.contentWindow.postMessage(message, 'https://utteranc.es');
- })
-
- }
-
- }
- function rememberTheme(theme) {
- localStorage.setItem('colorscheme', theme);
- }
|