// From rust: /* global resourcesSuffix */ var currentTheme = document.getElementById("themeStyle"); var mainTheme = document.getElementById("mainThemeStyle"); var savedHref = []; function hasClass(elem, className) { return elem && elem.classList && elem.classList.contains(className); } function addClass(elem, className) { if (!elem || !elem.classList) { return; } elem.classList.add(className); } function removeClass(elem, className) { if (!elem || !elem.classList) { return; } elem.classList.remove(className); } function isHidden(elem) { return elem.offsetParent === null; } function onEach(arr, func, reversed) { if (arr && arr.length > 0 && func) { var length = arr.length; if (reversed !== true) { for (var i = 0; i < length; ++i) { if (func(arr[i]) === true) { return true; } } } else { for (var i = length - 1; i >= 0; --i) { if (func(arr[i]) === true) { return true; } } } } return false; } function onEachLazy(lazyArray, func, reversed) { return onEach( Array.prototype.slice.call(lazyArray), func, reversed); } function usableLocalStorage() { // Check if the browser supports localStorage at all: if (typeof Storage === "undefined") { return false; } // Check if we can access it; this access will fail if the browser // preferences deny access to localStorage, e.g., to prevent storage of // "cookies" (or cookie-likes, as is the case here). try { return window.localStorage !== null && window.localStorage !== undefined; } catch(err) { // Storage is supported, but browser preferences deny access to it. return false; } } function updateLocalStorage(name, value) { if (usableLocalStorage()) { localStorage[name] = value; } else { // No Web Storage support so we do nothing } } function getCurrentValue(name) { if (usableLocalStorage() && localStorage[name] !== undefined) { return localStorage[name]; } return null; } function switchTheme(styleElem, mainStyleElem, newTheme, saveTheme) { var fullBasicCss = "rustdoc" + resourcesSuffix + ".css"; var fullNewTheme = newTheme + resourcesSuffix + ".css"; var newHref = mainStyleElem.href.replace(fullBasicCss, fullNewTheme); if (styleElem.href === newHref) { return; } var found = false; if (savedHref.length === 0) { onEachLazy(document.getElementsByTagName("link"), function(el) { savedHref.push(el.href); }); } onEach(savedHref, function(el) { if (el === newHref) { found = true; return true; } }); if (found === true) { styleElem.href = newHref; // If this new value comes from a system setting or from the previously saved theme, no // need to save it. if (saveTheme === true) { updateLocalStorage("rustdoc-theme", newTheme); } } } function getSystemValue() { return getComputedStyle(document.documentElement).getPropertyValue('content'); } switchTheme(currentTheme, mainTheme, getCurrentValue("rustdoc-theme") || getSystemValue() || "light", false);