1
1
use crate :: web:: page:: TemplateData ;
2
+ use lol_html:: element;
2
3
use lol_html:: errors:: RewritingError ;
3
4
use tera:: Context ;
4
5
@@ -15,21 +16,14 @@ pub(crate) fn rewrite_lol(
15
16
templates : & TemplateData ,
16
17
) -> Result < Vec < u8 > , RewritingError > {
17
18
use lol_html:: html_content:: { ContentType , Element } ;
18
- use lol_html:: { ElementContentHandlers , HtmlRewriter , MemorySettings , Settings } ;
19
+ use lol_html:: { HtmlRewriter , MemorySettings , Settings } ;
19
20
20
21
let templates = templates. templates . load ( ) ;
21
22
let tera_head = templates. render ( "rustdoc/head.html" , & ctx) . unwrap ( ) ;
22
23
let tera_vendored_css = templates. render ( "rustdoc/vendored.html" , & ctx) . unwrap ( ) ;
23
24
let tera_body = templates. render ( "rustdoc/body.html" , & ctx) . unwrap ( ) ;
24
25
let tera_rustdoc_topbar = templates. render ( "rustdoc/topbar.html" , & ctx) . unwrap ( ) ;
25
26
26
- // Append `style.css` stylesheet after all head elements.
27
- let head_handler = |head : & mut Element | {
28
- head. append ( & tera_head, ContentType :: Html ) ;
29
-
30
- Ok ( ( ) )
31
- } ;
32
-
33
27
// Before: <body> ... rustdoc content ... </body>
34
28
// After:
35
29
// ```html
@@ -64,35 +58,24 @@ pub(crate) fn rewrite_lol(
64
58
Ok ( ( ) )
65
59
} ;
66
60
67
- // Append `vendored.css` before `rustdoc.css`, so that the duplicate copy of
68
- // `normalize.css` will be overridden by the later version.
69
- let first_stylesheet_handler = |head : & mut Element | {
70
- head. before ( & tera_vendored_css, ContentType :: Html ) ;
71
-
72
- Ok ( ( ) )
73
- } ;
74
-
75
- let ( head_selector, body_selector, first_stylesheet_selector) = (
76
- "head" . parse ( ) . unwrap ( ) ,
77
- "body" . parse ( ) . unwrap ( ) ,
78
- "link[type='text/css'][href*='rustdoc']" . parse ( ) . unwrap ( ) ,
79
- ) ;
80
- let element_content_handlers = vec ! [
81
- (
82
- & head_selector,
83
- ElementContentHandlers :: default ( ) . element( head_handler) ,
84
- ) ,
85
- (
86
- & body_selector,
87
- ElementContentHandlers :: default ( ) . element( body_handler) ,
88
- ) ,
89
- (
90
- & first_stylesheet_selector,
91
- ElementContentHandlers :: default ( ) . element( first_stylesheet_handler) ,
92
- ) ,
93
- ] ;
94
61
let settings = Settings {
95
- element_content_handlers,
62
+ element_content_handlers : vec ! [
63
+ // Append `style.css` stylesheet after all head elements.
64
+ element!( "head" , |head: & mut Element | {
65
+ head. append( & tera_head, ContentType :: Html ) ;
66
+ Ok ( ( ) )
67
+ } ) ,
68
+ element!( "body" , body_handler) ,
69
+ // Append `vendored.css` before `rustdoc.css`, so that the duplicate copy of
70
+ // `normalize.css` will be overridden by the later version.
71
+ element!(
72
+ "link[type='text/css'][href*='rustdoc']" ,
73
+ |rustdoc_css: & mut Element | {
74
+ rustdoc_css. before( & tera_vendored_css, ContentType :: Html ) ;
75
+ Ok ( ( ) )
76
+ }
77
+ ) ,
78
+ ] ,
96
79
memory_settings : MemorySettings {
97
80
max_allowed_memory_usage,
98
81
..MemorySettings :: default ( )
@@ -103,10 +86,9 @@ pub(crate) fn rewrite_lol(
103
86
// The input and output are always strings, we just use `&[u8]` so we only have to validate once.
104
87
let mut buffer = Vec :: new ( ) ;
105
88
// TODO: Make the rewriter persistent?
106
- let mut writer = HtmlRewriter :: try_new ( settings, |bytes : & [ u8 ] | {
89
+ let mut writer = HtmlRewriter :: new ( settings, |bytes : & [ u8 ] | {
107
90
buffer. extend_from_slice ( bytes) ;
108
- } )
109
- . expect ( "utf8 is a valid encoding" ) ;
91
+ } ) ;
110
92
111
93
writer. write ( html) ?;
112
94
writer. end ( ) ?;
0 commit comments