:defined works

This commit is contained in:
Patrick Shaughnessy 2020-01-27 21:00:34 -05:00
parent 6d220d02de
commit 8ca4db2cd6
9 changed files with 52 additions and 7 deletions

View file

@ -324,14 +324,23 @@ impl Element {
}
pub fn set_custom_element_state(&self, state: CustomElementState) {
self.ensure_rare_data().custom_element_state = state;
// no need to inflate rare data for uncustomized
if state != CustomElementState::Uncustomized || self.rare_data().is_some() {
self.ensure_rare_data().custom_element_state = state;
}
// https://dom.spec.whatwg.org/#concept-element-defined
let in_defined_state = match state {
CustomElementState::Uncustomized | CustomElementState::Custom => true,
_ => false,
};
self.set_state(ElementState::IN_DEFINED_STATE, in_defined_state)
}
pub fn get_custom_element_state(&self) -> CustomElementState {
if let Some(rare_data) = self.rare_data().as_ref() {
return rare_data.custom_element_state;
}
CustomElementState::Undefined
CustomElementState::Uncustomized
}
pub fn set_custom_element_definition(&self, definition: Rc<CustomElementDefinition>) {
@ -3039,6 +3048,7 @@ impl<'a> SelectorsElement for DomRoot<Element> {
NonTSPseudoClass::Focus |
NonTSPseudoClass::Fullscreen |
NonTSPseudoClass::Hover |
NonTSPseudoClass::Defined |
NonTSPseudoClass::Enabled |
NonTSPseudoClass::Disabled |
NonTSPseudoClass::Checked |