diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-01-10 16:33:19 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-01-10 16:33:19 +0530 |
commit | 280c4e95f5ffefdd8dce1c8da6cb0d1da5b3840f (patch) | |
tree | 16d16bd694bf18324548db9d1ef28f330398eb44 | |
parent | d3e2f94f2024f4735f836588ed11303a0abafdf8 (diff) | |
parent | e3728f616747325201bac468d5ddbd8973d02b74 (diff) | |
download | servo-280c4e95f5ffefdd8dce1c8da6cb0d1da5b3840f.tar.gz servo-280c4e95f5ffefdd8dce1c8da6cb0d1da5b3840f.zip |
Auto merge of #9214 - frewsxcv:refactor-htmlfieldsetelement-elements, r=KiChjang
Refactor 'listed element' logic for HTMLFieldSetElement::Elements
`HTMLElement::is_listed_element` method was added, which matches the
`HTMLElement::is_labelable_element` method directly above
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9214)
<!-- Reviewable:end -->
-rw-r--r-- | components/script/dom/htmlelement.rs | 24 | ||||
-rw-r--r-- | components/script/dom/htmlfieldsetelement.rs | 7 |
2 files changed, 27 insertions, 4 deletions
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index d0f3f35d0ab..8c718c5ab29 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -354,6 +354,30 @@ impl HTMLElement { } } + // https://html.spec.whatwg.org/multipage/#category-listed + pub fn is_listed_element(&self) -> bool { + // Servo does not implement HTMLKeygenElement + // https://github.com/servo/servo/issues/2782 + if self.upcast::<Element>().local_name() == &atom!("keygen") { + return true; + } + + match self.upcast::<Node>().type_id() { + NodeTypeId::Element(ElementTypeId::HTMLElement(type_id)) => + match type_id { + HTMLElementTypeId::HTMLButtonElement | + HTMLElementTypeId::HTMLFieldSetElement | + HTMLElementTypeId::HTMLInputElement | + HTMLElementTypeId::HTMLObjectElement | + HTMLElementTypeId::HTMLOutputElement | + HTMLElementTypeId::HTMLSelectElement | + HTMLElementTypeId::HTMLTextAreaElement => true, + _ => false, + }, + _ => false, + } + } + pub fn supported_prop_names_custom_attr(&self) -> Vec<DOMString> { let element = self.upcast::<Element>(); element.attrs().iter().filter_map(|attr| { diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs index 8dc1cc043ee..009f9f93282 100644 --- a/components/script/dom/htmlfieldsetelement.rs +++ b/components/script/dom/htmlfieldsetelement.rs @@ -18,7 +18,7 @@ use dom::validitystate::ValidityState; use dom::virtualmethods::VirtualMethods; use selectors::states::*; use string_cache::Atom; -use util::str::{DOMString, StaticStringVec}; +use util::str::DOMString; #[dom_struct] pub struct HTMLFieldSetElement { @@ -52,9 +52,8 @@ impl HTMLFieldSetElementMethods for HTMLFieldSetElement { struct ElementsFilter; impl CollectionFilter for ElementsFilter { fn filter<'a>(&self, elem: &'a Element, _root: &'a Node) -> bool { - static TAG_NAMES: StaticStringVec = &["button", "fieldset", "input", - "keygen", "object", "output", "select", "textarea"]; - TAG_NAMES.iter().any(|&tag_name| tag_name == &**elem.local_name()) + elem.downcast::<HTMLElement>() + .map_or(false, HTMLElement::is_listed_element) } } let filter = box ElementsFilter; |