<base href="{{ path_to_root }}">
<link rel="stylesheet" href="book.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="shortcut icon" href="{{ favicon }}">
<!-- Font Awesome -->
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
+ <link rel="stylesheet" href="../../font-awesome.min.css">
- <link rel="stylesheet" href="highlight.css">
+ <link rel="stylesheet" href="../../highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
{{#if mathjax_support}}
<!-- MathJax -->
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+ <script type="text/javascript" src="../../mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
{{/if}}
- <!-- Fetch Clipboard.js from CDN but have a local fallback -->
- <script src="https://cdn.jsdelivr.net/clipboard.js/1.6.1/clipboard.min.js"></script>
- <script>
- if (typeof Clipboard == 'undefined') {
- document.write(unescape("%3Cscript src='clipboard.min.js'%3E%3C/script%3E"));
- }
- </script>
-
- <!-- Fetch JQuery from CDN but have a local fallback -->
- <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
- <script>
- if (typeof jQuery == 'undefined') {
- document.write(unescape("%3Cscript src='jquery.js'%3E%3C/script%3E"));
- }
- </script>
-
- <!-- Fetch store.js from local - TODO add CDN when 2.x.x is available on cdnjs -->
- <script src="store.js"></script>
+ <script src="../../jquery.min.js"></script>
<!-- Custom JS script -->
{{#each additional_js}}
</head>
<body class="light">
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script type="text/javascript">
- var theme = store.get('mdbook-theme');
- if (theme === null || theme === undefined) { theme = 'light'; }
- $('body').removeClass().addClass(theme);
- </script>
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script type="text/javascript">
- var sidebar = store.get('mdbook-sidebar');
- if (sidebar === "hidden") { $("html").addClass("sidebar-hidden") }
- else if (sidebar === "visible") { $("html").addClass("sidebar-visible") }
- </script>
-
<div id="sidebar" class="sidebar">
{{#toc}}{{/toc}}
</div>
</div>
- <!-- Local fallback for Font Awesome -->
- <script>
- if ($(".fa").css("font-family") !== "FontAwesome") {
- $('<link rel="stylesheet" type="text/css" href="_FontAwesome/css/font-awesome.css">').prependTo('head');
- }
- </script>
-
<!-- Livereload script (if served using the cli tool) -->
{{{livereload}}}
- {{#if google_analytics}}
- <script>
- (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 playpens_editable}}
- <script src="{{ ace_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ editor_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ mode_rust_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ theme_dawn_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ theme_tomorrow_night_js }}" type="text/javascript" charset="utf-8"></script>
- {{/if}}
-
{{#if is_print}}
<script>
$(document).ready(function() {
</script>
{{/if}}
- <script src="highlight.js"></script>
+ <script src="../../highlight.js"></script>
<script src="book.js"></script>
</body>
</html>
<base href="{{ path_to_root }}">
<link rel="stylesheet" href="book.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="shortcut icon" href="{{ favicon }}">
<!-- Font Awesome -->
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
+ <link rel="stylesheet" href="../font-awesome.min.css">
- <link rel="stylesheet" href="highlight.css">
+ <link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
<style>
{{#if mathjax_support}}
<!-- MathJax -->
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+ <script type="text/javascript" src="../mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
{{/if}}
- <!-- Fetch Clipboard.js from CDN but have a local fallback -->
- <script src="https://cdn.jsdelivr.net/clipboard.js/1.6.1/clipboard.min.js"></script>
- <script>
- if (typeof Clipboard == 'undefined') {
- document.write(unescape("%3Cscript src='clipboard.min.js'%3E%3C/script%3E"));
- }
- </script>
-
- <!-- Fetch JQuery from CDN but have a local fallback -->
- <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
- <script>
- if (typeof jQuery == 'undefined') {
- document.write(unescape("%3Cscript src='jquery.js'%3E%3C/script%3E"));
- }
- </script>
-
- <!-- Fetch store.js from local - TODO add CDN when 2.x.x is available on cdnjs -->
- <script src="store.js"></script>
+ <script src="../jquery.min.js"></script>
<!-- Custom JS script -->
{{#each additional_js}}
</head>
<body class="light">
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script type="text/javascript">
- var theme = store.get('mdbook-theme');
- if (theme === null || theme === undefined) { theme = 'light'; }
- $('body').removeClass().addClass(theme);
- </script>
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script type="text/javascript">
- var sidebar = store.get('mdbook-sidebar');
- if (sidebar === "hidden") { $("html").addClass("sidebar-hidden") }
- else if (sidebar === "visible") { $("html").addClass("sidebar-visible") }
- </script>
-
<div id="sidebar" class="sidebar">
{{#toc}}{{/toc}}
</div>
</div>
- <!-- Local fallback for Font Awesome -->
- <script>
- if ($(".fa").css("font-family") !== "FontAwesome") {
- $('<link rel="stylesheet" type="text/css" href="_FontAwesome/css/font-awesome.css">').prependTo('head');
- }
- </script>
-
<!-- Livereload script (if served using the cli tool) -->
{{{livereload}}}
- {{#if google_analytics}}
- <script>
- (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 playpens_editable}}
- <script src="{{ ace_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ editor_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ mode_rust_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ theme_dawn_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ theme_tomorrow_night_js }}" type="text/javascript" charset="utf-8"></script>
- {{/if}}
-
{{#if is_print}}
<script>
$(document).ready(function() {
</script>
{{/if}}
- <script src="highlight.js"></script>
+ <script src="../highlight.js"></script>
<script src="book.js"></script>
</body>
</html>
url.starts_with("irc:") || url.starts_with("data:") {
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)?;
- // highlight.css
- let mut highlight_css = File::create(&themedir.join("highlight.css"))?;
- highlight_css.write_all(theme::HIGHLIGHT_CSS)?;
-
- // highlight.js
- let mut highlight_js = File::create(&themedir.join("highlight.js"))?;
- highlight_js.write_all(theme::HIGHLIGHT_JS)?;
-
Ok(())
}
use book::bookitem::{BookItem, Chapter};
use config::PlaypenConfig;
use {utils, theme};
-use theme::{Theme, playpen_editor};
+use theme::{Theme};
use errors::*;
use regex::{Regex, Captures};
book.write_file("book.js", &theme.js)?;
book.write_file("book.css", &theme.css)?;
book.write_file("favicon.png", &theme.favicon)?;
- book.write_file("jquery.js", &theme.jquery)?;
- book.write_file("highlight.css", &theme.highlight_css)?;
book.write_file(
"tomorrow-night.css",
&theme.tomorrow_night_css,
"ayu-highlight.css",
&theme.ayu_highlight_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,
- )?;
- book.write_file(
- "_FontAwesome/fonts/fontawesome-webfont.ttf",
- theme::FONT_AWESOME_TTF,
- )?;
- book.write_file(
- "_FontAwesome/fonts/fontawesome-webfont.woff",
- theme::FONT_AWESOME_WOFF,
- )?;
- book.write_file(
- "_FontAwesome/fonts/fontawesome-webfont.woff2",
- theme::FONT_AWESOME_WOFF2,
- )?;
- book.write_file(
- "_FontAwesome/fonts/FontAwesome.ttf",
- theme::FONT_AWESOME_TTF,
- )?;
-
- let playpen_config = book.get_html_config().get_playpen_config();
-
- // Ace is a very large dependency, so only load it when requested
- if playpen_config.is_editable() {
- // Load the editor
- let editor = playpen_editor::PlaypenEditor::new(playpen_config.get_editor());
- book.write_file("editor.js", &editor.js)?;
- book.write_file("ace.js", &editor.ace_js)?;
- book.write_file("mode-rust.js", &editor.mode_rust_js)?;
- book.write_file("theme-dawn.js", &editor.theme_dawn_js)?;
- book.write_file("theme-tomorrow_night.js", &editor.theme_tomorrow_night_js)?;
- }
Ok(())
}
window.onunload = function(){};
// Set theme
- var theme = store.get('mdbook-theme');
+ var theme;
if (theme === null || theme === undefined) { theme = 'light'; }
set_theme(theme);
});
}
- store.set('mdbook-theme', theme);
-
$('body').removeClass().addClass(theme);
}
});
});
- var clipboardSnippets = new Clipboard('.clip-button', {
- text: function(trigger) {
- hideTooltip(trigger);
- let playpen = $(trigger).parents(".playpen");
- return playpen_text(playpen);
- }
- });
- clipboardSnippets.on('success', function(e) {
- e.clearSelection();
- showTooltip(e.trigger, "Copied!");
- });
- clipboardSnippets.on('error', function(e) {
- showTooltip(e.trigger, "Clipboard error!");
- });
-
$.ajax({
url: "https://play.rust-lang.org/meta/crates",
method: "POST",
var html = $("html");
if ( html.hasClass("sidebar-hidden") ) {
html.removeClass("sidebar-hidden").addClass("sidebar-visible");
- store.set('mdbook-sidebar', 'visible');
} else if ( html.hasClass("sidebar-visible") ) {
html.removeClass("sidebar-visible").addClass("sidebar-hidden");
- store.set('mdbook-sidebar', 'hidden');
} else {
if($("#sidebar").position().left === 0){
html.addClass("sidebar-hidden");
- store.set('mdbook-sidebar', 'hidden');
} else {
html.addClass("sidebar-visible");
- store.set('mdbook-sidebar', 'visible');
}
}
}
<base href="{{ path_to_root }}">
<link rel="stylesheet" href="book.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="shortcut icon" href="{{ favicon }}">
<!-- Font Awesome -->
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
+ <link rel="stylesheet" href="../font-awesome.min.css">
- <link rel="stylesheet" href="highlight.css">
+ <link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="tomorrow-night.css">
<link rel="stylesheet" href="ayu-highlight.css">
{{#if mathjax_support}}
<!-- MathJax -->
- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+ <script type="text/javascript" src="../mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
{{/if}}
- <!-- Fetch Clipboard.js from CDN but have a local fallback -->
- <script src="https://cdn.jsdelivr.net/clipboard.js/1.6.1/clipboard.min.js"></script>
- <script>
- if (typeof Clipboard == 'undefined') {
- document.write(unescape("%3Cscript src='clipboard.min.js'%3E%3C/script%3E"));
- }
- </script>
-
- <!-- Fetch JQuery from CDN but have a local fallback -->
- <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
- <script>
- if (typeof jQuery == 'undefined') {
- document.write(unescape("%3Cscript src='jquery.js'%3E%3C/script%3E"));
- }
- </script>
-
- <!-- Fetch store.js from local - TODO add CDN when 2.x.x is available on cdnjs -->
- <script src="store.js"></script>
+ <script src="../jquery.min.js"></script>
<!-- Custom JS script -->
{{#each additional_js}}
</head>
<body class="light">
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script type="text/javascript">
- var theme = store.get('mdbook-theme');
- if (theme === null || theme === undefined) { theme = 'light'; }
- $('body').removeClass().addClass(theme);
- </script>
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script type="text/javascript">
- var sidebar = store.get('mdbook-sidebar');
- if (sidebar === "hidden") { $("html").addClass("sidebar-hidden") }
- else if (sidebar === "visible") { $("html").addClass("sidebar-visible") }
- </script>
-
<div id="sidebar" class="sidebar">
{{#toc}}{{/toc}}
</div>
</div>
- <!-- Local fallback for Font Awesome -->
- <script>
- if ($(".fa").css("font-family") !== "FontAwesome") {
- $('<link rel="stylesheet" type="text/css" href="_FontAwesome/css/font-awesome.css">').prependTo('head');
- }
- </script>
-
<!-- Livereload script (if served using the cli tool) -->
{{{livereload}}}
- {{#if google_analytics}}
- <script>
- (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 playpens_editable}}
- <script src="{{ ace_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ editor_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ mode_rust_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ theme_dawn_js }}" type="text/javascript" charset="utf-8"></script>
- <script src="{{ theme_tomorrow_night_js }}" type="text/javascript" charset="utf-8"></script>
- {{/if}}
-
{{#if is_print}}
<script>
$(document).ready(function() {
</script>
{{/if}}
- <script src="highlight.js"></script>
+ <script src="../highlight.js"></script>
<script src="book.js"></script>
</body>
</html>
-pub mod playpen_editor;
-
use std::path::Path;
use std::fs::File;
use std::io::Read;
pub static CSS: &'static [u8] = include_bytes!("book.css");
pub static FAVICON: &'static [u8] = include_bytes!("favicon.png");
pub static JS: &'static [u8] = include_bytes!("book.js");
-pub static HIGHLIGHT_JS: &'static [u8] = include_bytes!("highlight.js");
pub static TOMORROW_NIGHT_CSS: &'static [u8] = include_bytes!("tomorrow-night.css");
-pub static HIGHLIGHT_CSS: &'static [u8] = include_bytes!("highlight.css");
pub static AYU_HIGHLIGHT_CSS: &'static [u8] = include_bytes!("ayu-highlight.css");
-pub static JQUERY: &'static [u8] = include_bytes!("jquery.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");
-pub static FONT_AWESOME_TTF: &'static [u8] = include_bytes!("_FontAwesome/fonts/fontawesome-webfont.ttf");
-pub static FONT_AWESOME_WOFF: &'static [u8] = include_bytes!("_FontAwesome/fonts/fontawesome-webfont.woff");
-pub static FONT_AWESOME_WOFF2: &'static [u8] = include_bytes!("_FontAwesome/fonts/fontawesome-webfont.woff2");
-pub static FONT_AWESOME_OTF: &'static [u8] = include_bytes!("_FontAwesome/fonts/FontAwesome.otf");
/// The `Theme` struct should be used instead of the static variables because
pub 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>,
- pub store_js: Vec<u8>,
- pub jquery: Vec<u8>,
}
impl Theme {
(theme_dir.join("book.js"), &mut theme.js),
(theme_dir.join("book.css"), &mut theme.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("store.js"), &mut theme.store_js),
- (theme_dir.join("highlight.css"), &mut theme.highlight_css),
(theme_dir.join("tomorrow-night.css"), &mut theme.tomorrow_night_css),
(theme_dir.join("ayu-highlight.css"), &mut theme.ayu_highlight_css),
- (theme_dir.join("jquery.js"), &mut theme.jquery),
];
for (filename, dest) in files {
css: 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(),
- store_js: STORE_JS.to_owned(),
- jquery: JQUERY.to_owned(),
}
}
}
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(),
- store_js: Vec::new(),
- jquery: Vec::new(),
};
assert_eq!(got, empty);