@@ -19,17 +19,17 @@ pub static REDIRECT: &[u8] = include_bytes!("templates/redirect.hbs");
19
19
pub static HEADER : & [ u8 ] = include_bytes ! ( "templates/header.hbs" ) ;
20
20
pub static TOC_JS : & [ u8 ] = include_bytes ! ( "templates/toc.js.hbs" ) ;
21
21
pub static TOC_HTML : & [ u8 ] = include_bytes ! ( "templates/toc.html.hbs" ) ;
22
- pub static CHROME_CSS : & [ u8 ] = include_bytes ! ( "css/chrome.css" ) ;
23
- pub static GENERAL_CSS : & [ u8 ] = include_bytes ! ( "css/general.css" ) ;
24
- pub static PRINT_CSS : & [ u8 ] = include_bytes ! ( "css/print.css" ) ;
25
- pub static VARIABLES_CSS : & [ u8 ] = include_bytes ! ( "css/variables.css" ) ;
22
+ pub static CHROME_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/chrome.css" ) ) ;
23
+ pub static GENERAL_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/general.css" ) ) ;
24
+ pub static PRINT_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/print.css" ) ) ;
25
+ pub static VARIABLES_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/variables.css" ) ) ;
26
26
pub static FAVICON_PNG : & [ u8 ] = include_bytes ! ( "images/favicon.png" ) ;
27
27
pub static FAVICON_SVG : & [ u8 ] = include_bytes ! ( "images/favicon.svg" ) ;
28
- pub static JS : & [ u8 ] = include_bytes ! ( "js/book.js" ) ;
28
+ pub static JS : ContentToMinify = ContentToMinify :: JS ( include_str ! ( "js/book.js" ) ) ;
29
29
pub static HIGHLIGHT_JS : & [ u8 ] = include_bytes ! ( "js/highlight.js" ) ;
30
- pub static TOMORROW_NIGHT_CSS : & [ u8 ] = include_bytes ! ( "css/tomorrow-night.css" ) ;
31
- pub static HIGHLIGHT_CSS : & [ u8 ] = include_bytes ! ( "css/highlight.css" ) ;
32
- pub static AYU_HIGHLIGHT_CSS : & [ u8 ] = include_bytes ! ( "css/ayu-highlight.css" ) ;
30
+ pub static TOMORROW_NIGHT_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/tomorrow-night.css" ) ) ;
31
+ pub static HIGHLIGHT_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/highlight.css" ) ) ;
32
+ pub static AYU_HIGHLIGHT_CSS : ContentToMinify = ContentToMinify :: CSS ( include_str ! ( "css/ayu-highlight.css" ) ) ;
33
33
pub static CLIPBOARD_JS : & [ u8 ] = include_bytes ! ( "js/clipboard.min.js" ) ;
34
34
pub static FONT_AWESOME : & [ u8 ] = include_bytes ! ( "css/font-awesome.min.css" ) ;
35
35
pub static FONT_AWESOME_EOT : & [ u8 ] = include_bytes ! ( "fonts/fontawesome-webfont.eot" ) ;
@@ -39,6 +39,33 @@ pub static FONT_AWESOME_WOFF: &[u8] = include_bytes!("fonts/fontawesome-webfont.
39
39
pub static FONT_AWESOME_WOFF2 : & [ u8 ] = include_bytes ! ( "fonts/fontawesome-webfont.woff2" ) ;
40
40
pub static FONT_AWESOME_OTF : & [ u8 ] = include_bytes ! ( "fonts/FontAwesome.otf" ) ;
41
41
42
+ #[ derive( Clone , Copy ) ]
43
+ pub enum ContentToMinify {
44
+ CSS ( & ' static str ) ,
45
+ JS ( & ' static str ) ,
46
+ }
47
+
48
+ impl ContentToMinify {
49
+ pub fn minified ( self ) -> Vec < u8 > {
50
+ let mut out = Vec :: new ( ) ;
51
+ self . write_into ( & mut out) . unwrap ( ) ;
52
+ out
53
+ }
54
+
55
+ pub fn write_into < W : std:: io:: Write > ( self , out : & mut W ) -> std:: io:: Result < ( ) > {
56
+ match self {
57
+ Self :: CSS ( data) => {
58
+ match minifier:: css:: minify ( data) {
59
+ Ok ( data) => return data. write ( out) ,
60
+ Err ( _) => out. write ( data. as_bytes ( ) ) ?,
61
+ }
62
+ }
63
+ Self :: JS ( data) => return minifier:: js:: minify ( data) . write ( out) ,
64
+ } ;
65
+ Ok ( ( ) )
66
+ }
67
+ }
68
+
42
69
/// The `Theme` struct should be used instead of the static variables because
43
70
/// the `new()` method will look if the user has a theme directory in their
44
71
/// source folder and use the users theme instead of the default.
@@ -181,18 +208,18 @@ impl Default for Theme {
181
208
header : HEADER . to_owned ( ) ,
182
209
toc_js : TOC_JS . to_owned ( ) ,
183
210
toc_html : TOC_HTML . to_owned ( ) ,
184
- chrome_css : CHROME_CSS . to_owned ( ) ,
185
- general_css : GENERAL_CSS . to_owned ( ) ,
186
- print_css : PRINT_CSS . to_owned ( ) ,
187
- variables_css : VARIABLES_CSS . to_owned ( ) ,
211
+ chrome_css : CHROME_CSS . minified ( ) ,
212
+ general_css : GENERAL_CSS . minified ( ) ,
213
+ print_css : PRINT_CSS . minified ( ) ,
214
+ variables_css : VARIABLES_CSS . minified ( ) ,
188
215
fonts_css : None ,
189
216
font_files : Vec :: new ( ) ,
190
217
favicon_png : Some ( FAVICON_PNG . to_owned ( ) ) ,
191
218
favicon_svg : Some ( FAVICON_SVG . to_owned ( ) ) ,
192
- js : JS . to_owned ( ) ,
193
- highlight_css : HIGHLIGHT_CSS . to_owned ( ) ,
194
- tomorrow_night_css : TOMORROW_NIGHT_CSS . to_owned ( ) ,
195
- ayu_highlight_css : AYU_HIGHLIGHT_CSS . to_owned ( ) ,
219
+ js : JS . minified ( ) ,
220
+ highlight_css : HIGHLIGHT_CSS . minified ( ) ,
221
+ tomorrow_night_css : TOMORROW_NIGHT_CSS . minified ( ) ,
222
+ ayu_highlight_css : AYU_HIGHLIGHT_CSS . minified ( ) ,
196
223
highlight_js : HIGHLIGHT_JS . to_owned ( ) ,
197
224
clipboard_js : CLIPBOARD_JS . to_owned ( ) ,
198
225
}
0 commit comments