]> git.lizzy.rs Git - rust.git/commitdiff
Fasten up theme loading
authorGuillaume Gomez <guillaume1.gomez@gmail.com>
Mon, 22 Jan 2018 22:44:08 +0000 (23:44 +0100)
committerGuillaume Gomez <guillaume1.gomez@gmail.com>
Mon, 22 Jan 2018 22:44:08 +0000 (23:44 +0100)
src/librustdoc/html/layout.rs
src/librustdoc/html/render.rs
src/librustdoc/html/static/storage.js [new file with mode: 0644]

index 753abf4eacf4f994c35fc918708a8b2ab2cf34eb..7b4781870de6669d254c3abf2672fbc3b279083b 100644 (file)
@@ -48,7 +48,8 @@ pub fn render<T: fmt::Display, S: fmt::Display>(
 
     <link rel="stylesheet" type="text/css" href="{root_path}normalize.css">
     <link rel="stylesheet" type="text/css" href="{root_path}rustdoc.css" id="mainThemeStyle">
-    <link rel="stylesheet" type="text/css" href="{root_path}main.css" id="themeStyle">
+    <link rel="stylesheet" type="text/css" href="" id="themeStyle">
+    <script src="{root_path}storage.js"></script>
     {css_extension}
 
     {favicon}
@@ -70,10 +71,10 @@ pub fn render<T: fmt::Display, S: fmt::Display>(
         {sidebar}
     </nav>
 
-    <div id="theme-picker">
+    <button id="theme-picker">
         <img src="{root_path}brush.svg" width="18" alt="Pick another theme!">
         <div id="theme-choices"></div>
-    </div>
+    </button>
     <script src="{root_path}theme.js"></script>
     <nav class="sub">
         <form class="search-form js-only">
index ad785fb830a56de54fcd4ef987aeb15f8d9f55e4..9993823c5804adc406d7a7ccad1c92740eb66859 100644 (file)
@@ -917,8 +917,6 @@ fn write_shared(cx: &Context,
         themePicker.style.borderBottomLeftRadius = "0";
     }}
 }};
-var currentTheme = document.getElementById("themeStyle");
-var mainTheme = document.getElementById("mainThemeStyle");
 [{}].forEach(function(item) {{
     var div = document.createElement('div');
     div.innerHTML = item;
@@ -927,32 +925,13 @@ fn write_shared(cx: &Context,
     }};
     themes.appendChild(div);
 }});
-
-function updateLocalStorage(theme) {{
-    if (typeof(Storage) !== "undefined") {{
-        localStorage.theme = theme;
-    }} else {{
-        // No Web Storage support so we do nothing
-    }}
-}}
-function switchTheme(styleElem, mainStyleElem, newTheme) {{
-    styleElem.href = mainStyleElem.href.replace("rustdoc.css", newTheme + ".css");
-    updateLocalStorage(newTheme);
-}}
-function getCurrentTheme() {{
-    if (typeof(Storage) !== "undefined" && localStorage.theme !== undefined) {{
-        return localStorage.theme;
-    }}
-    return "main";
-}}
-
-switchTheme(currentTheme, mainTheme, getCurrentTheme());
 "#, themes.iter()
           .map(|s| format!("\"{}\"", s))
           .collect::<Vec<String>>()
           .join(",")).as_bytes())?;
 
     write(cx.dst.join("main.js"), include_bytes!("static/main.js"))?;
+    write(cx.dst.join("storage.js"), include_bytes!("static/storage.js"))?;
 
     if let Some(ref css) = cx.shared.css_file_extension {
         let out = cx.dst.join("theme.css");
diff --git a/src/librustdoc/html/static/storage.js b/src/librustdoc/html/static/storage.js
new file mode 100644 (file)
index 0000000..7e384a6
--- /dev/null
@@ -0,0 +1,44 @@
+/*!
+ * Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+ * file at the top-level directory of this distribution and at
+ * http://rust-lang.org/COPYRIGHT.
+ *
+ * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+ * http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+ * <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+ * option. This file may not be copied, modified, or distributed
+ * except according to those terms.
+ */
+
+var currentTheme = document.getElementById("themeStyle");
+var mainTheme = document.getElementById("mainThemeStyle");
+
+function updateLocalStorage(name, value) {
+    if (typeof(Storage) !== "undefined") {
+        localStorage[name] = value;
+    } else {
+        // No Web Storage support so we do nothing
+    }
+}
+
+function getCurrentValue(name) {
+    if (typeof(Storage) !== "undefined" && localStorage[name] !== undefined) {
+        return localStorage[name];
+    }
+    return null;
+}
+
+function switchTheme(styleElem, mainStyleElem, newTheme) {
+    styleElem.href = mainStyleElem.href.replace("rustdoc.css", newTheme + ".css");
+    updateLocalStorage('theme', newTheme);
+    /*var elem = document.getElementsByTagName('body')[0];
+    if (elem) {
+        updateLocalStorage('background', getComputedStyle(elem)['background-color']);
+    }*/
+}
+
+/*var elem = document.getElementsByTagName('body')[0];
+if (elem) {
+    var value = 
+}*/
+switchTheme(currentTheme, mainTheme, getCurrentValue('theme') || 'main');