diff options
author | Connor Brewster <connor.brewster@eagles.oc.edu> | 2017-06-16 14:34:17 -0600 |
---|---|---|
committer | Connor Brewster <connor.brewster@eagles.oc.edu> | 2017-06-23 21:09:55 -0600 |
commit | 2f36d3544fd7082cb5fcb16a43955cbb446bcbd7 (patch) | |
tree | 7e2531ba5c2d978ab1c99c68926bf0e8faf14b1b /components/script/dom/create.rs | |
parent | 6697f5469d0e331d704dc1211c6236b751102bc8 (diff) | |
download | servo-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.rs | 14 |
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) } |