{
return;
}
+ // Ignore parent URLs, so that the package installation process can
+ // provide a symbolic link later
+ if url.starts_with("../") {
+ return;
+ }
let mut parts = url.splitn(2, "#");
let url = parts.next().unwrap();
let fragment = parts.next();
let mut js = File::create(themedir.join("book.js"))?;
js.write_all(theme::JS)?;
- let mut highlight_css = File::create(themedir.join("highlight.css"))?;
- highlight_css.write_all(theme::HIGHLIGHT_CSS)?;
-
- let mut highlight_js = File::create(themedir.join("highlight.js"))?;
- highlight_js.write_all(theme::HIGHLIGHT_JS)?;
-
Ok(())
}
use crate::errors::*;
use crate::renderer::html_handlebars::helpers;
use crate::renderer::{RenderContext, Renderer};
-use crate::theme::{self, playpen_editor, Theme};
+use crate::theme::{self, Theme};
use crate::utils;
use std::borrow::Cow;
&self,
destination: &Path,
theme: &Theme,
- html_config: &HtmlConfig,
+ _html_config: &HtmlConfig,
) -> Result<()> {
use crate::utils::fs::write_file;
write_file(destination, "css/print.css", &theme.print_css)?;
write_file(destination, "css/variables.css", &theme.variables_css)?;
write_file(destination, "favicon.png", &theme.favicon)?;
- write_file(destination, "highlight.css", &theme.highlight_css)?;
write_file(destination, "tomorrow-night.css", &theme.tomorrow_night_css)?;
write_file(destination, "ayu-highlight.css", &theme.ayu_highlight_css)?;
- write_file(destination, "highlight.js", &theme.highlight_js)?;
- write_file(destination, "clipboard.min.js", &theme.clipboard_js)?;
- write_file(
- destination,
- "FontAwesome/css/font-awesome.css",
- theme::FONT_AWESOME,
- )?;
- write_file(
- destination,
- "FontAwesome/fonts/fontawesome-webfont.eot",
- theme::FONT_AWESOME_EOT,
- )?;
- write_file(
- destination,
- "FontAwesome/fonts/fontawesome-webfont.svg",
- theme::FONT_AWESOME_SVG,
- )?;
- write_file(
- destination,
- "FontAwesome/fonts/fontawesome-webfont.ttf",
- theme::FONT_AWESOME_TTF,
- )?;
- write_file(
- destination,
- "FontAwesome/fonts/fontawesome-webfont.woff",
- theme::FONT_AWESOME_WOFF,
- )?;
- write_file(
- destination,
- "FontAwesome/fonts/fontawesome-webfont.woff2",
- theme::FONT_AWESOME_WOFF2,
- )?;
- write_file(
- destination,
- "FontAwesome/fonts/FontAwesome.ttf",
- theme::FONT_AWESOME_TTF,
- )?;
-
- let playpen_config = &html_config.playpen;
-
- // Ace is a very large dependency, so only load it when requested
- if playpen_config.editable && playpen_config.copy_js {
- // Load the editor
- write_file(destination, "editor.js", playpen_editor::JS)?;
- write_file(destination, "ace.js", playpen_editor::ACE_JS)?;
- write_file(destination, "mode-rust.js", playpen_editor::MODE_RUST_JS)?;
- write_file(destination, "theme-dawn.js", playpen_editor::THEME_DAWN_JS)?;
- write_file(
- destination,
- "theme-tomorrow_night.js",
- playpen_editor::THEME_TOMORROW_NIGHT_JS,
- )?;
- }
Ok(())
}
format!("Object.assign(window.search, {});", index).as_bytes(),
)?;
utils::fs::write_file(destination, "searcher.js", searcher::JS)?;
- utils::fs::write_file(destination, "mark.min.js", searcher::MARK_JS)?;
- utils::fs::write_file(destination, "elasticlunr.min.js", searcher::ELASTICLUNR_JS)?;
debug!("Copying search files ✓");
}
<link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
<!-- Fonts -->
- <link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
- <link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
- <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">
+ <link rel="stylesheet" href="{{ path_to_root }}../font-awesome.min.css">
<!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" href="{{ path_to_root }}highlight.css">
+ <link rel="stylesheet" href="{{ path_to_root }}../highlight.css">
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
{{#if mathjax_support}}
<!-- MathJax -->
- <script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+ <script async type="text/javascript" src="../mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
{{/if}}
</head>
<body>
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
</script>
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script type="text/javascript">
- try {
- var theme = localStorage.getItem('mdbook-theme');
- var sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script type="text/javascript">
- var theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- var html = document.querySelector('html');
- html.classList.remove('no-js')
- html.classList.remove('{{ default_theme }}')
- html.classList.add(theme);
- html.classList.add('js');
- </script>
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script type="text/javascript">
- var html = document.querySelector('html');
- var sidebar = 'hidden';
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- }
- html.classList.remove('sidebar-visible');
- html.classList.add("sidebar-" + sidebar);
- </script>
-
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<div id="sidebar-scrollbox" class="sidebar-scrollbox">
{{#toc}}{{/toc}}
</script>
{{/if}}
- {{#if google_analytics}}
- <!-- Google Analytics Tag -->
- <script type="text/javascript">
- var localAddrs = ["localhost", "127.0.0.1", ""];
-
- // make sure we don't activate google analytics if the developer is
- // inspecting the book locally...
- if (localAddrs.indexOf(document.location.hostname) === -1) {
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-
- ga('create', '{{google_analytics}}', 'auto');
- ga('send', 'pageview');
- }
- </script>
- {{/if}}
-
- {{#if playpen_line_numbers}}
- <script type="text/javascript">
- window.playpen_line_numbers = true;
- </script>
- {{/if}}
-
- {{#if playpen_copyable}}
- <script type="text/javascript">
- window.playpen_copyable = true;
- </script>
- {{/if}}
-
- {{#if playpen_js}}
- <script src="{{ path_to_root }}ace.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}editor.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}mode-rust.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}theme-dawn.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
- {{/if}}
-
- {{#if search_js}}
- <script src="{{ path_to_root }}elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}mark.min.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}searcher.js" type="text/javascript" charset="utf-8"></script>
- {{/if}}
-
- <script src="{{ path_to_root }}clipboard.min.js" type="text/javascript" charset="utf-8"></script>
- <script src="{{ path_to_root }}highlight.js" type="text/javascript" charset="utf-8"></script>
+ <script src="{{ path_to_root }}../highlight.js" type="text/javascript" charset="utf-8"></script>
<script src="{{ path_to_root }}book.js" type="text/javascript" charset="utf-8"></script>
<!-- Custom JS scripts -->
#![allow(missing_docs)]
-pub mod playpen_editor;
-
#[cfg(feature = "search")]
pub mod searcher;
pub static VARIABLES_CSS: &[u8] = include_bytes!("css/variables.css");
pub static FAVICON: &[u8] = include_bytes!("favicon.png");
pub static JS: &[u8] = include_bytes!("book.js");
-pub static HIGHLIGHT_JS: &[u8] = include_bytes!("highlight.js");
pub static TOMORROW_NIGHT_CSS: &[u8] = include_bytes!("tomorrow-night.css");
-pub static HIGHLIGHT_CSS: &[u8] = include_bytes!("highlight.css");
pub static AYU_HIGHLIGHT_CSS: &[u8] = include_bytes!("ayu-highlight.css");
-pub static CLIPBOARD_JS: &[u8] = include_bytes!("clipboard.min.js");
-pub static FONT_AWESOME: &[u8] = include_bytes!("FontAwesome/css/font-awesome.min.css");
-pub static FONT_AWESOME_EOT: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.eot");
-pub static FONT_AWESOME_SVG: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.svg");
-pub static FONT_AWESOME_TTF: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.ttf");
-pub static FONT_AWESOME_WOFF: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.woff");
-pub static FONT_AWESOME_WOFF2: &[u8] =
- include_bytes!("FontAwesome/fonts/fontawesome-webfont.woff2");
-pub static FONT_AWESOME_OTF: &[u8] = include_bytes!("FontAwesome/fonts/FontAwesome.otf");
/// The `Theme` struct should be used instead of the static variables because
/// the `new()` method will look if the user has a theme directory in their
pub variables_css: Vec<u8>,
pub favicon: Vec<u8>,
pub js: Vec<u8>,
- pub highlight_css: Vec<u8>,
pub tomorrow_night_css: Vec<u8>,
pub ayu_highlight_css: Vec<u8>,
- pub highlight_js: Vec<u8>,
- pub clipboard_js: Vec<u8>,
}
impl Theme {
&mut theme.variables_css,
),
(theme_dir.join("favicon.png"), &mut theme.favicon),
- (theme_dir.join("highlight.js"), &mut theme.highlight_js),
- (theme_dir.join("clipboard.min.js"), &mut theme.clipboard_js),
- (theme_dir.join("highlight.css"), &mut theme.highlight_css),
(
theme_dir.join("tomorrow-night.css"),
&mut theme.tomorrow_night_css,
variables_css: VARIABLES_CSS.to_owned(),
favicon: FAVICON.to_owned(),
js: JS.to_owned(),
- highlight_css: HIGHLIGHT_CSS.to_owned(),
tomorrow_night_css: TOMORROW_NIGHT_CSS.to_owned(),
ayu_highlight_css: AYU_HIGHLIGHT_CSS.to_owned(),
- highlight_js: HIGHLIGHT_JS.to_owned(),
- clipboard_js: CLIPBOARD_JS.to_owned(),
}
}
}
"css/print.css",
"css/variables.css",
"book.js",
- "highlight.js",
"tomorrow-night.css",
- "highlight.css",
"ayu-highlight.css",
- "clipboard.min.js",
];
let temp = TempFileBuilder::new().prefix("mdbook-").tempdir().unwrap();
variables_css: Vec::new(),
favicon: Vec::new(),
js: Vec::new(),
- highlight_css: Vec::new(),
tomorrow_night_css: Vec::new(),
ayu_highlight_css: Vec::new(),
- highlight_js: Vec::new(),
- clipboard_js: Vec::new(),
};
assert_eq!(got, empty);
//! the "search" cargo feature is disabled.
pub static JS: &[u8] = include_bytes!("searcher.js");
-pub static MARK_JS: &[u8] = include_bytes!("mark.min.js");
-pub static ELASTICLUNR_JS: &[u8] = include_bytes!("elasticlunr.min.js");