Skip to content

Commit

Permalink
Fasten up theme loading
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Jan 22, 2018
1 parent 3c52acd commit 5f93159
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 25 deletions.
7 changes: 4 additions & 3 deletions src/librustdoc/html/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ r##"<!DOCTYPE html>
<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}
Expand All @@ -70,10 +71,10 @@ r##"<!DOCTYPE html>
{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">
Expand Down
23 changes: 1 addition & 22 deletions src/librustdoc/html/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -917,8 +917,6 @@ themePicker.onclick = function() {{
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;
Expand All @@ -927,32 +925,13 @@ var mainTheme = document.getElementById("mainThemeStyle");
}};
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");
Expand Down
44 changes: 44 additions & 0 deletions src/librustdoc/html/static/storage.js
Original file line number Diff line number Diff line change
@@ -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');

0 comments on commit 5f93159

Please sign in to comment.