diff --git a/src/renderer/html_handlebars/hbs_renderer.rs b/src/renderer/html_handlebars/hbs_renderer.rs
index 3da67507..f64ae6f5 100644
--- a/src/renderer/html_handlebars/hbs_renderer.rs
+++ b/src/renderer/html_handlebars/hbs_renderer.rs
@@ -179,6 +179,7 @@ impl Renderer for HtmlHandlebars {
book.write_file("tomorrow-night.css", &theme.tomorrow_night_css)?;
book.write_file("highlight.js", &theme.highlight_js)?;
book.write_file("clipboard.min.js", &theme.clipboard_js)?;
+ book.write_file("store.js", &theme.store_js)?;
book.write_file("_FontAwesome/css/font-awesome.css", theme::FONT_AWESOME)?;
book.write_file("_FontAwesome/fonts/fontawesome-webfont.eot", theme::FONT_AWESOME_EOT)?;
book.write_file("_FontAwesome/fonts/fontawesome-webfont.svg", theme::FONT_AWESOME_SVG)?;
diff --git a/src/theme/book.js b/src/theme/book.js
index 151ed640..98babec8 100644
--- a/src/theme/book.js
+++ b/src/theme/book.js
@@ -7,8 +7,8 @@ $( document ).ready(function() {
window.onunload = function(){};
// Set theme
- var theme = localStorage.getItem('theme');
- if (theme === null) { theme = 'light'; }
+ var theme = store.get('theme');
+ if (theme === null || theme === undefined) { theme = 'light'; }
set_theme(theme);
@@ -51,31 +51,21 @@ $( document ).ready(function() {
});
// Interesting DOM Elements
- var html = $("html");
var sidebar = $("#sidebar");
var page_wrapper = $("#page-wrapper");
var content = $("#content");
// Toggle sidebar
- $("#sidebar-toggle").click(function(event){
- if ( html.hasClass("sidebar-hidden") ) {
- html.removeClass("sidebar-hidden").addClass("sidebar-visible");
- localStorage.setItem('sidebar', 'visible');
- } else if ( html.hasClass("sidebar-visible") ) {
- html.removeClass("sidebar-visible").addClass("sidebar-hidden");
- localStorage.setItem('sidebar', 'hidden');
- } else {
- if(sidebar.position().left === 0){
- html.addClass("sidebar-hidden");
- localStorage.setItem('sidebar', 'hidden');
- } else {
- html.addClass("sidebar-visible");
- localStorage.setItem('sidebar', 'visible');
- }
+ $("#sidebar-toggle").click(sidebarToggle);
+
+ // Hide sidebar on section link click if it occupies large space
+ // in relation to the whole screen (phone in portrait)
+ $("#sidebar a").click(function(event){
+ if (sidebar.width() > window.screen.width * 0.4) {
+ sidebarToggle();
}
});
-
// Scroll sidebar to current active section
var activeSection = sidebar.find(".active");
if(activeSection.length) {
@@ -125,7 +115,7 @@ $( document ).ready(function() {
$("[href='highlight.css']").prop('disabled', false);
}
- localStorage.setItem('theme', theme);
+ store.set('theme', theme);
$('body').removeClass().addClass(theme);
}
@@ -227,6 +217,25 @@ function showTooltip(elem, msg) {
elem.setAttribute('class', 'fa fa-copy tooltipped');
}
+function sidebarToggle() {
+ var html = $("html");
+ if ( html.hasClass("sidebar-hidden") ) {
+ html.removeClass("sidebar-hidden").addClass("sidebar-visible");
+ store.set('sidebar', 'visible');
+ } else if ( html.hasClass("sidebar-visible") ) {
+ html.removeClass("sidebar-visible").addClass("sidebar-hidden");
+ store.set('sidebar', 'hidden');
+ } else {
+ if($("#sidebar").position().left === 0){
+ html.addClass("sidebar-hidden");
+ store.set('sidebar', 'hidden');
+ } else {
+ html.addClass("sidebar-visible");
+ store.set('sidebar', 'visible');
+ }
+ }
+}
+
function run_rust_code(code_block) {
var result_block = code_block.find(".result");
if(result_block.length === 0) {
diff --git a/src/theme/index.hbs b/src/theme/index.hbs
index a4705884..b8076d16 100644
--- a/src/theme/index.hbs
+++ b/src/theme/index.hbs
@@ -44,18 +44,20 @@
document.write(unescape("%3Cscript src='jquery.js'%3E%3C/script%3E"));
}
+
+
diff --git a/src/theme/mod.rs b/src/theme/mod.rs
index 0ac4ec42..cff8ef4e 100644
--- a/src/theme/mod.rs
+++ b/src/theme/mod.rs
@@ -12,6 +12,7 @@ pub static TOMORROW_NIGHT_CSS: &'static [u8] = include_bytes!("tomorrow-night.cs
pub static HIGHLIGHT_CSS: &'static [u8] = include_bytes!("highlight.css");
pub static JQUERY: &'static [u8] = include_bytes!("jquery-2.1.4.min.js");
pub static CLIPBOARD_JS: &'static [u8] = include_bytes!("clipboard.min.js");
+pub static STORE_JS: &'static [u8] = include_bytes!("store.js");
pub static FONT_AWESOME: &'static [u8] = include_bytes!("_FontAwesome/css/font-awesome.min.css");
pub static FONT_AWESOME_EOT: &'static [u8] = include_bytes!("_FontAwesome/fonts/fontawesome-webfont.eot");
pub static FONT_AWESOME_SVG: &'static [u8] = include_bytes!("_FontAwesome/fonts/fontawesome-webfont.svg");
@@ -38,6 +39,7 @@ pub struct Theme {
pub tomorrow_night_css: Vec,
pub highlight_js: Vec,
pub clipboard_js: Vec,
+ pub store_js: Vec,
pub jquery: Vec,
}
@@ -54,6 +56,7 @@ impl Theme {
tomorrow_night_css: TOMORROW_NIGHT_CSS.to_owned(),
highlight_js: HIGHLIGHT_JS.to_owned(),
clipboard_js: CLIPBOARD_JS.to_owned(),
+ store_js: STORE_JS.to_owned(),
jquery: JQUERY.to_owned(),
};
@@ -102,6 +105,12 @@ impl Theme {
let _ = f.read_to_end(&mut theme.clipboard_js);
}
+ // store.js
+ if let Ok(mut f) = File::open(&src.join("store.js")) {
+ theme.store_js.clear();
+ let _ = f.read_to_end(&mut theme.store_js);
+ }
+
// highlight.css
if let Ok(mut f) = File::open(&src.join("highlight.css")) {
theme.highlight_css.clear();
diff --git a/src/theme/store.js b/src/theme/store.js
new file mode 100644
index 00000000..cbeb367c
--- /dev/null
+++ b/src/theme/store.js
@@ -0,0 +1,2 @@
+/* store.js - Copyright (c) 2010-2017 Marcus Westin */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.store=e()}}(function(){var define,module,exports;return function e(t,n,r){function o(u,a){if(!n[u]){if(!t[u]){var s="function"==typeof require&&require;if(!a&&s)return s(u,!0);if(i)return i(u,!0);var c=new Error("Cannot find module '"+u+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[u]={exports:{}};t[u][0].call(f.exports,function(e){var n=t[u][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u=0;n--)if(l(t[n])){var r=t[n].split("="),o=unescape(r[0]),i=unescape(r[1]);e(i,o)}}function i(e,t){e&&(p.cookie=escape(e)+"="+escape(t)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/")}function u(e){e&&s(e)&&(p.cookie=escape(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function a(){o(function(e,t){u(t)})}function s(e){return new RegExp("(?:^|;\\s*)"+escape(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(p.cookie)}var c=e("../src/util"),f=c.Global,l=c.trim;t.exports={name:"cookieStorage",read:r,write:i,each:o,remove:u,clearAll:a};var p=f.document},{"../src/util":14}],17:[function(e,t,n){"use strict";function r(){return f.localStorage}function o(e){return r().getItem(e)}function i(e,t){return r().setItem(e,t)}function u(e){for(var t=r().length-1;t>=0;t--){var n=r().key(t);e(o(n),n)}}function a(e){return r().removeItem(e)}function s(){return r().clear()}var c=e("../src/util"),f=c.Global;t.exports={name:"localStorage",read:o,write:i,each:u,remove:a,clearAll:s}},{"../src/util":14}],18:[function(e,t,n){"use strict";function r(e){return s[e]}function o(e,t){s[e]=t}function i(e){for(var t in s)s.hasOwnProperty(t)&&e(s[t],t)}function u(e){delete s[e]}function a(e){s={}}t.exports={name:"memoryStorage",read:r,write:o,each:i,remove:u,clearAll:a};var s={}},{}],19:[function(e,t,n){"use strict";function r(e){return f[e]}function o(e,t){f[e]=t}function i(e){for(var t=f.length-1;t>=0;t--){var n=f.key(t);e(f[n],n)}}function u(e){return f.removeItem(e)}function a(){i(function(e,t){delete f[e]})}var s=e("../src/util"),c=s.Global;t.exports={name:"oldFF-globalStorage",read:r,write:o,each:i,remove:u,clearAll:a};var f=c.globalStorage},{"../src/util":14}],20:[function(e,t,n){"use strict";function r(e,t){if(!h){var n=s(e);g(function(e){e.setAttribute(n,t),e.save(p)})}}function o(e){if(!h){var t=s(e),n=null;return g(function(e){n=e.getAttribute(t)}),n}}function i(e){g(function(t){for(var n=t.XMLDocument.documentElement.attributes,r=n.length-1;r>=0;r--){var o=n[r];e(t.getAttribute(o.name),o.name)}})}function u(e){var t=s(e);g(function(e){e.removeAttribute(t),e.save(p)})}function a(){g(function(e){var t=e.XMLDocument.documentElement.attributes;e.load(p);for(var n=t.length-1;n>=0;n--)e.removeAttribute(t[n].name);e.save(p)})}function s(e){return e.replace(/^d/,"___$&").replace(v,"___")}function c(){if(!d||!d.documentElement||!d.documentElement.addBehavior)return null;var e,t,n,r="script";try{t=new ActiveXObject("htmlfile"),t.open(),t.write("<"+r+">document.w=window"+r+'>'),t.close(),e=t.w.frames[0].document,n=e.createElement("div")}catch(o){n=d.createElement("div"),e=d.body}return function(t){var r=[].slice.call(arguments,0);r.unshift(n),e.appendChild(n),n.addBehavior("#default#userData"),n.load(p),t.apply(this,r),e.removeChild(n)}}var f=e("../src/util"),l=f.Global;t.exports={name:"oldIE-userDataStorage",write:r,read:o,each:i,remove:u,clearAll:a};var p="storejs",d=l.document,g=c(),h=(l.navigator?l.navigator.userAgent:"").match(/ (MSIE 8|MSIE 9|MSIE 10)\./),v=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g")},{"../src/util":14}],21:[function(e,t,n){"use strict";function r(){return f.sessionStorage}function o(e){return r().getItem(e)}function i(e,t){return r().setItem(e,t)}function u(e){for(var t=r().length-1;t>=0;t--){var n=r().key(t);e(o(n),n)}}function a(e){return r().removeItem(e)}function s(){return r().clear()}var c=e("../src/util"),f=c.Global;t.exports={name:"sessionStorage",read:o,write:i,each:u,remove:a,clearAll:s}},{"../src/util":14}]},{},[1])(1)});
\ No newline at end of file