aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/create.rs
diff options
context:
space:
mode:
authorConnor Brewster <connor.brewster@eagles.oc.edu>2017-06-16 14:34:17 -0600
committerConnor Brewster <connor.brewster@eagles.oc.edu>2017-06-23 21:09:55 -0600
commit2f36d3544fd7082cb5fcb16a43955cbb446bcbd7 (patch)
tree7e2531ba5c2d978ab1c99c68926bf0e8faf14b1b /components/script/dom/create.rs
parent6697f5469d0e331d704dc1211c6236b751102bc8 (diff)
downloadservo-2f36d3544fd7082cb5fcb16a43955cbb446bcbd7.tar.gz
servo-2f36d3544fd7082cb5fcb16a43955cbb446bcbd7.zip
Support `is` option when creating elements
Diffstat (limited to 'components/script/dom/create.rs')
-rw-r--r--components/script/dom/create.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs
index 52410a487b8..bcf7a551cf7 100644
--- a/components/script/dom/create.rs
+++ b/components/script/dom/create.rs
@@ -79,7 +79,7 @@ use dom::htmlulistelement::HTMLUListElement;
use dom::htmlunknownelement::HTMLUnknownElement;
use dom::htmlvideoelement::HTMLVideoElement;
use dom::svgsvgelement::SVGSVGElement;
-use html5ever::{QualName, Prefix};
+use html5ever::{LocalName, Prefix, QualName};
use js::jsapi::JSAutoCompartment;
use servo_config::prefs::PREFS;
@@ -114,16 +114,16 @@ fn create_svg_element(name: QualName,
#[allow(unsafe_code)]
fn create_html_element(name: QualName,
prefix: Option<Prefix>,
+ is: Option<LocalName>,
document: &Document,
creator: ElementCreator)
-> Root<Element> {
assert!(name.ns == ns!(html));
// Step 4
- let definition = document.lookup_custom_element_definition(name.local.clone(), None);
+ let definition = document.lookup_custom_element_definition(name.local.clone(), is);
if let Some(definition) = definition {
- // TODO: Handle customized built-in elements. Relies on CE upgrades.
if definition.is_autonomous() {
let local_name = name.local.clone();
return match definition.create_element(document) {
@@ -143,6 +143,11 @@ fn create_html_element(name: QualName,
Root::upcast(HTMLUnknownElement::new(local_name, prefix, document))
},
};
+ } else {
+ let element = create_native_html_element(name, prefix, document, creator);
+ element.set_is(definition.name.clone());
+ // TODO: Enqueue custom element upgrade
+ return element;
}
}
@@ -316,12 +321,13 @@ pub fn create_native_html_element(name: QualName,
}
pub fn create_element(name: QualName,
+ is: Option<LocalName>,
document: &Document,
creator: ElementCreator)
-> Root<Element> {
let prefix = name.prefix.clone();
match name.ns {
- ns!(html) => create_html_element(name, prefix, document, creator),
+ ns!(html) => create_html_element(name, prefix, is, document, creator),
ns!(svg) => create_svg_element(name, prefix, document),
_ => Element::new(name.local, name.ns, prefix, document)
}