aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-01-10 16:33:19 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-01-10 16:33:19 +0530
commit280c4e95f5ffefdd8dce1c8da6cb0d1da5b3840f (patch)
tree16d16bd694bf18324548db9d1ef28f330398eb44
parentd3e2f94f2024f4735f836588ed11303a0abafdf8 (diff)
parente3728f616747325201bac468d5ddbd8973d02b74 (diff)
downloadservo-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.rs24
-rw-r--r--components/script/dom/htmlfieldsetelement.rs7
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;