use html5ever::QualName;
use std::cell::RefCell;
use crate::attributes::Attributes;
use super::NodeRef;
#[derive(Debug, PartialEq, Clone)]
pub struct ElementData {
pub name: QualName,
pub attributes: RefCell<Attributes>,
pub template_contents: Option<NodeRef>,
}
impl ElementData {
#[inline]
#[cfg(feature = "namespaces")]
pub fn namespace_uri(&self) -> &html5ever::Namespace {
&self.name.ns
}
#[inline]
pub fn local_name(&self) -> &html5ever::LocalName {
&self.name.local
}
#[inline]
#[cfg(feature = "namespaces")]
pub fn prefix(&self) -> Option<&html5ever::Prefix> {
self.name.prefix.as_ref()
}
}
#[cfg(test)]
mod tests {
use crate::parser::parse_html;
use crate::traits::*;
#[test]
#[cfg(feature = "namespaces")]
fn element_namespace_uri() {
let html = r"<!DOCTYPE html><html><body><div>Test</div></body></html>";
let document = parse_html().one(html);
let div = document.select_first("div").unwrap();
assert_eq!(div.namespace_uri().as_ref(), "http://www.w3.org/1999/xhtml");
let svg_html = r#"<!DOCTYPE html>
<html>
<body>
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<circle cx="50" cy="50" r="40"/>
</svg>
</body>
</html>"#;
let document = parse_html().one(svg_html);
let svg = document.select_first("svg").unwrap();
assert_eq!(svg.namespace_uri().as_ref(), "http://www.w3.org/2000/svg");
let circle = document.select_first("circle").unwrap();
assert_eq!(
circle.namespace_uri().as_ref(),
"http://www.w3.org/2000/svg"
);
}
#[test]
fn element_local_name() {
let html = r"<!DOCTYPE html><html><body><div class='test'>Content</div></body></html>";
let document = parse_html().one(html);
let div = document.select_first("div").unwrap();
assert_eq!(div.local_name().as_ref(), "div");
let body = document.select_first("body").unwrap();
assert_eq!(body.local_name().as_ref(), "body");
}
#[test]
#[cfg(feature = "namespaces")]
fn element_prefix() {
let html = r"<!DOCTYPE html><html><body><div>Test</div></body></html>";
let document = parse_html().one(html);
let div = document.select_first("div").unwrap();
assert_eq!(div.prefix(), None);
let svg_html = r#"<!DOCTYPE html>
<html>
<body>
<svg xmlns="http://www.w3.org/2000/svg">
<rect width="100" height="100"/>
</svg>
</body>
</html>"#;
let document = parse_html().one(svg_html);
let rect = document.select_first("rect").unwrap();
assert_eq!(rect.prefix(), None);
}
}