mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Refactor 'listed element' logic for HTMLFieldSetElement::Elements
`HTMLElement::is_listed_element` method was added, which matches the `HTMLElement::is_labelable_element` method directly above
This commit is contained in:
parent
083d3e0201
commit
e3728f6167
2 changed files with 27 additions and 4 deletions
|
@ -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> {
|
pub fn supported_prop_names_custom_attr(&self) -> Vec<DOMString> {
|
||||||
let element = self.upcast::<Element>();
|
let element = self.upcast::<Element>();
|
||||||
element.attrs().iter().filter_map(|attr| {
|
element.attrs().iter().filter_map(|attr| {
|
||||||
|
|
|
@ -18,7 +18,7 @@ use dom::validitystate::ValidityState;
|
||||||
use dom::virtualmethods::VirtualMethods;
|
use dom::virtualmethods::VirtualMethods;
|
||||||
use selectors::states::*;
|
use selectors::states::*;
|
||||||
use string_cache::Atom;
|
use string_cache::Atom;
|
||||||
use util::str::{DOMString, StaticStringVec};
|
use util::str::DOMString;
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
pub struct HTMLFieldSetElement {
|
pub struct HTMLFieldSetElement {
|
||||||
|
@ -52,9 +52,8 @@ impl HTMLFieldSetElementMethods for HTMLFieldSetElement {
|
||||||
struct ElementsFilter;
|
struct ElementsFilter;
|
||||||
impl CollectionFilter for ElementsFilter {
|
impl CollectionFilter for ElementsFilter {
|
||||||
fn filter<'a>(&self, elem: &'a Element, _root: &'a Node) -> bool {
|
fn filter<'a>(&self, elem: &'a Element, _root: &'a Node) -> bool {
|
||||||
static TAG_NAMES: StaticStringVec = &["button", "fieldset", "input",
|
elem.downcast::<HTMLElement>()
|
||||||
"keygen", "object", "output", "select", "textarea"];
|
.map_or(false, HTMLElement::is_listed_element)
|
||||||
TAG_NAMES.iter().any(|&tag_name| tag_name == &**elem.local_name())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let filter = box ElementsFilter;
|
let filter = box ElementsFilter;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue