aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/create.rs
diff options
context:
space:
mode:
authorAlexandrov Sergey <splavgm@gmail.com>2016-10-05 00:16:45 +0300
committerAlexandrov Sergey <splavgm@gmail.com>2016-10-06 18:22:53 +0300
commit9876020c2258ef833044596944ab0aa5370b0a74 (patch)
treef563c5ce4efbda8105eadd206f5b4bbe24073a8d /components/script/dom/create.rs
parent318b23ed0047cc39625ca2f33a55d647b5886019 (diff)
downloadservo-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.rs53
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)
+ }
+}