diff --git a/src/renderer/html_handlebars/hbs_renderer.rs b/src/renderer/html_handlebars/hbs_renderer.rs index a591e86f..54004066 100644 --- a/src/renderer/html_handlebars/hbs_renderer.rs +++ b/src/renderer/html_handlebars/hbs_renderer.rs @@ -529,7 +529,9 @@ impl Renderer for HtmlHandlebars { handlebars.register_partial("header", String::from_utf8(theme.header.clone())?)?; debug!("Register the toc handlebars template"); - handlebars.register_template_string("toc", String::from_utf8(theme.toc.clone())?)?; + handlebars.register_template_string("toc_js", String::from_utf8(theme.toc_js.clone())?)?; + handlebars + .register_template_string("toc_html", String::from_utf8(theme.toc_html.clone())?)?; debug!("Register handlebars helpers"); self.register_hbs_helpers(&mut handlebars, &html_config); @@ -586,11 +588,16 @@ impl Renderer for HtmlHandlebars { debug!("Creating print.html ✓"); } - debug!("Render toc.js"); + debug!("Render toc"); { - let rendered_toc = handlebars.render("toc", &data)?; + let rendered_toc = handlebars.render("toc_js", &data)?; utils::fs::write_file(destination, "toc.js", rendered_toc.as_bytes())?; debug!("Creating toc.js ✓"); + data.insert("is_toc_html".to_owned(), json!(true)); + let rendered_toc = handlebars.render("toc_html", &data)?; + utils::fs::write_file(destination, "toc.html", rendered_toc.as_bytes())?; + debug!("Creating toc.html ✓"); + data.remove("is_toc_html"); } debug!("Copy static files"); diff --git a/src/renderer/html_handlebars/helpers/toc.rs b/src/renderer/html_handlebars/helpers/toc.rs index 783161ce..d43c617f 100644 --- a/src/renderer/html_handlebars/helpers/toc.rs +++ b/src/renderer/html_handlebars/helpers/toc.rs @@ -48,6 +48,13 @@ impl HelperDef for RenderToc { RenderErrorReason::Other("Type error for `fold_level`, u64 expected".to_owned()) })?; + // If true, then this is the iframe and we need target="_parent" + let is_toc_html = rc + .evaluate(ctx, "@root/is_toc_html")? + .as_json() + .as_bool() + .unwrap_or(false); + out.write("
    ")?; let mut current_level = 1; @@ -113,7 +120,11 @@ impl HelperDef for RenderToc { // Add link out.write(&tmp)?; - out.write("\">")?; + out.write(if is_toc_html { + "\" target=\"_parent\">" + } else { + "\">" + })?; path_exists = true; } _ => { diff --git a/src/theme/css/chrome.css b/src/theme/css/chrome.css index 83b7969b..e62056b0 100644 --- a/src/theme/css/chrome.css +++ b/src/theme/css/chrome.css @@ -399,6 +399,22 @@ ul#searchresults span.teaser em { background-color: var(--sidebar-bg); color: var(--sidebar-fg); } +.sidebar-iframe-inner { + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); + padding: 10px 10px; + margin: 0; + font-size: 1.4rem; +} +.sidebar-iframe-outer { + border: none; + height: 100%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} [dir=rtl] .sidebar { left: unset; right: 0; } .sidebar-resizing { -moz-user-select: none; diff --git a/src/theme/index.hbs b/src/theme/index.hbs index fb6c10b2..97f59a13 100644 --- a/src/theme/index.hbs +++ b/src/theme/index.hbs @@ -111,6 +111,9 @@