diff options
author | Alexandrov Sergey <splavgm@gmail.com> | 2016-10-05 00:16:45 +0300 |
---|---|---|
committer | Alexandrov Sergey <splavgm@gmail.com> | 2016-10-06 18:22:53 +0300 |
commit | 9876020c2258ef833044596944ab0aa5370b0a74 (patch) | |
tree | f563c5ce4efbda8105eadd206f5b4bbe24073a8d /components/script/dom/create.rs | |
parent | 318b23ed0047cc39625ca2f33a55d647b5886019 (diff) | |
download | servo-9876020c2258ef833044596944ab0aa5370b0a74.tar.gz servo-9876020c2258ef833044596944ab0aa5370b0a74.zip |
add SVGElement, SVGGraphicsElement interfaces and SVGSVGElement element
Diffstat (limited to 'components/script/dom/create.rs')
-rw-r--r-- | components/script/dom/create.rs | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs index 6cdaf2b0e78..98a2e5ad4ed 100644 --- a/components/script/dom/create.rs +++ b/components/script/dom/create.rs @@ -76,21 +76,44 @@ use dom::htmltrackelement::HTMLTrackElement; use dom::htmlulistelement::HTMLUListElement; use dom::htmlunknownelement::HTMLUnknownElement; use dom::htmlvideoelement::HTMLVideoElement; +use dom::svgsvgelement::SVGSVGElement; use string_cache::{Atom, QualName}; +use util::prefs::PREFS; -pub fn create_element(name: QualName, - prefix: Option<Atom>, - document: &Document, - creator: ElementCreator) +fn create_svg_element(name: QualName, + prefix: Option<DOMString>, + document: &Document) -> Root<Element> { - // FIXME(ajeffrey): Convert directly from Atom to DOMString. + assert!(name.ns == ns!(svg)); - let prefix = prefix.map(|p| DOMString::from(&*p)); + macro_rules! make( + ($ctor:ident) => ({ + let obj = $ctor::new(name.local, prefix, document); + Root::upcast(obj) + }); + ($ctor:ident, $($arg:expr),+) => ({ + let obj = $ctor::new(name.local, prefix, document, $($arg),+); + Root::upcast(obj) + }) + ); - if name.ns != ns!(html) { + if !PREFS.get("dom.svg.enabled").as_boolean().unwrap_or(false) { return Element::new(name.local, name.ns, prefix, document); } + match name.local { + atom!("svg") => make!(SVGSVGElement), + _ => Element::new(name.local, name.ns, prefix, document), + } +} + +fn create_html_element(name: QualName, + prefix: Option<DOMString>, + document: &Document, + creator: ElementCreator) + -> Root<Element> { + assert!(name.ns == ns!(html)); + macro_rules! make( ($ctor:ident) => ({ let obj = $ctor::new(name.local, prefix, document); @@ -249,3 +272,19 @@ pub fn create_element(name: QualName, _ => make!(HTMLUnknownElement), } } + +pub fn create_element(name: QualName, + prefix: Option<Atom>, + document: &Document, + creator: ElementCreator) + -> Root<Element> { + // FIXME(ajeffrey): Convert directly from Atom to DOMString. + + let prefix = prefix.map(|p| DOMString::from(&*p)); + + match name.ns { + ns!(html) => create_html_element(name, prefix, document, creator), + ns!(svg) => create_svg_element(name, prefix, document), + _ => Element::new(name.local, name.ns, prefix, document) + } +} |