1use std::string::FromUtf8Error;
2
3use lol_html::{self, element, HtmlRewriter, Settings};
4
5use crate::visit_selectors::ClassVisitor;
6
7pub fn check_html(
8 document: &str,
9 msv: &ClassVisitor,
10) -> Result<String, FromUtf8Error> {
11 let mut output = vec![];
12 let mut rewriter = HtmlRewriter::new(
13 Settings {
14 element_content_handlers: vec![element!("[class]", |el| {
15 let classes = el.get_attribute("class").unwrap();
16 let classes = classes.split(' ');
17 let classes = classes
18 .into_iter()
19 .map(|c| {
20 if let Some(class) = msv.get(c) {
21 return class;
22 }
23 c.to_string()
24 })
25 .collect::<Vec<String>>()
26 .join(" ");
27 let _r = el.set_attribute("class", &classes);
28
29 Ok(())
30 })],
31 ..Settings::default()
32 },
33 |c: &[u8]| output.extend_from_slice(c),
34 );
35 let _ = rewriter.write(document.as_bytes());
36 let _ = rewriter.end();
37 String::from_utf8(output)
38}