$(document).ready(function(){ prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)"); currentTheme = localStorage.getItem("theme"); if (currentTheme) { init_color_scheme_css("css", currentTheme); init_color_scheme_css("css-code", currentTheme); } else if (prefersDarkScheme) { if (typeof $mode === 'undefined') { $mode = 'light'; if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) $mode = 'dark'; init_color_scheme_css("css", $mode); init_color_scheme_css("css-code", $mode); } toggle_color_scheme_css("css", $mode); toggle_color_scheme_css("css-code", $mode); } // function to initialise the css function init_color_scheme_css($id, $mode) { if ($("#"+$id)) $("#"+$id).remove(); // remove existing id $("#"+$id+"-"+$mode).attr( { "data-href-light": $("#"+$id+"-light").attr("href"), // store the light CSS url "data-href-dark": $("#"+$id+"-dark").attr("href"), // store the dark CSS url "data-color-scheme": $mode, // store the mode, so that we don't re-initalise "media": "all", // drop the media filter "id": $id // rename the id (drop the `-{mode}` bit) } ); $other = ($mode == 'dark') ? 'light' : 'dark'; $("#"+$id+"-"+$other).remove(); } // function to toggle the CSS function toggle_color_scheme_css($id, $mode) { // grab the new mode css href $href = $("#"+$id).data("href-"+$mode); // use `.data()` here, leverage the cache // set the CSS to the mode preference. $("#"+$id).attr( { "href": $href, "data-color-scheme": $mode, }); } // toggle button click code $("#css-toggle-btn").bind("click", function() { // get current mode // don't use `.data("color-scheme")`, it doesn't refresh $mode = $("#css").attr("data-color-scheme"); // test if this is a first time click event, if so initialise the code if (typeof $mode === 'undefined') { // not defined yet - set pref. & ask the browser if alt. is active $mode = 'light'; if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) $mode = 'dark'; init_color_scheme_css("css", $mode); init_color_scheme_css("css-code", $mode); // `init_color_scheme_css()` any other CSS } // by here we have the current mode, so swap it $new_mode = ($mode == 'dark') ? 'light' : 'dark'; toggle_color_scheme_css("css", $new_mode); toggle_color_scheme_css("css-code", $new_mode); // `toggle_color_scheme_css()` any other CSS // Saving user's preference to the localStorage localStorage.setItem("theme", $new_mode); }); }); .