///|
fn merge_missing_attrs(target : @dom.Node, source : @dom.Node) -> Unit {
merge_missing_attrs_from_map(target, source.attrs)
}
///|
fn merge_missing_attrs_into_map(
target : Map[String, String?],
attrs : Map[String, String?],
) -> Unit {
for name, value in attrs {
if !target.contains(name) {
target[name] = value
}
}
}
///|
fn merge_missing_attrs_from_map(
target : @dom.Node,
attrs : Map[String, String?],
) -> Unit {
for name, value in attrs {
if !target.attrs.contains(name) {
target.attrs[name] = value
}
}
}
///|
fn Parser::merge_document_html_attrs(
self : Parser,
attrs : Map[String, String?],
) -> Unit {
match self.open_html_element() {
Some(html) => merge_missing_attrs_from_map(html, attrs)
None =>
merge_missing_attrs_into_map(self.pending_document_html_attrs, attrs)
}
}
///|
fn Parser::apply_pending_document_html_attrs(self : Parser) -> Unit {
if self.pending_document_html_attrs.length() == 0 {
return
}
match document_html_element(self.root) {
Some(html) =>
merge_missing_attrs_from_map(html, self.pending_document_html_attrs)
None => ()
}
}