blitz-html 0.3.0-beta.1

Blitz HTML parser
Documentation
use std::sync::Arc;

use blitz_dom::{DocumentConfig, LocalName, QualName, ns};
use blitz_html::{HtmlDocument, HtmlProvider};

fn qname(local: &str) -> QualName {
    QualName {
        prefix: None,
        ns: ns!(html),
        local: LocalName::from(local),
    }
}

#[test]
fn detached_attribute_before_insertion_resolves_with_descendant_selector() {
    let mut doc = HtmlDocument::from_html(
        r#"<!doctype html><html><head>
<style>.page-header h1 { margin: 0 0 8px; }</style>
</head><body></body></html>"#,
        DocumentConfig {
            html_parser_provider: Some(Arc::new(HtmlProvider)),
            ..Default::default()
        },
    );

    let body_id = doc.query_selector("body").unwrap().unwrap();
    let mut mutator = doc.mutate();

    let header = mutator.create_element(qname("header"), Vec::new());
    mutator.set_attribute(header, qname("class"), "page-header");

    let h1 = mutator.create_element(qname("h1"), Vec::new());
    let text = mutator.create_text_node("Title");
    mutator.append_children(h1, &[text]);
    mutator.append_children(header, &[h1]);
    mutator.append_children(body_id, &[header]);
    drop(mutator);

    doc.resolve(0.0);
}