///|
// HTML element to CSS selector element conversion helpers.
///|
/// Convert HTML Element to Selector Element
fn html_to_selector_element(
elem : @html.Element,
parent : @css.Element?,
) -> @css.Element {
let mut sel_elem = @css.Element::new(elem.tag)
// Set ID
match elem.id {
Some(id) => sel_elem = sel_elem.set_id(id)
None => ()
}
// Set classes
for cls in elem.classes {
sel_elem = sel_elem.add_class(cls)
}
// Set attributes
elem.attributes.each(fn(name, value) {
if name != crater_dom_id_attr {
sel_elem = sel_elem.set_attribute(name, value)
}
})
// Set parent
match parent {
Some(p) => sel_elem = sel_elem.set_parent(p)
None => ()
}
sel_elem
}
///|
fn html_to_selector_element_minimal(
elem : @html.Element,
parent : @css.Element?,
) -> @css.Element {
let mut sel_elem = @css.Element::new(elem.tag)
match elem.id {
Some(id) => sel_elem = sel_elem.set_id(id)
None => ()
}
for cls in elem.classes {
sel_elem = sel_elem.add_class(cls)
}
// Copy presentational HTML attributes needed for UA styling
elem.attributes.each(fn(name, value) {
if name != crater_dom_id_attr {
sel_elem = sel_elem.set_attribute(name, value)
}
})
match parent {
Some(p) => sel_elem = sel_elem.set_parent(p)
None => ()
}
sel_elem
}
///|
/// Convert HTML Element to Selector Element with parent and sibling info
fn html_to_selector_element_with_parent(
elem : @html.Element,
parent : @css.Element,
sibling_index : Int,
sibling_count : Int,
prev_sibling : @css.Element?,
) -> @css.Element {
let mut sel_elem = @css.Element::new(elem.tag)
// Set ID
match elem.id {
Some(id) => sel_elem = sel_elem.set_id(id)
None => ()
}
// Set classes
for cls in elem.classes {
sel_elem = sel_elem.add_class(cls)
}
// Set attributes
elem.attributes.each(fn(name, value) {
if name != crater_dom_id_attr {
sel_elem = sel_elem.set_attribute(name, value)
}
})
// Set parent and sibling info
sel_elem = sel_elem.set_parent(parent)
sel_elem = sel_elem.set_sibling_info(sibling_index, sibling_count)
sel_elem = { ..sel_elem, prev_sibling, }
sel_elem
}