diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-01-30 18:18:49 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-01-30 18:18:49 -0700 |
commit | 1d7b1e5c3199bc08e238641e20480752a06f19ea (patch) | |
tree | 1af3636d87eeb0a6c6c6ef5018e9d6aef6e880e7 /components/script/dom | |
parent | 66384dfcfd4c38595985cd3fac12fa616a2ba94f (diff) | |
parent | 2f9eee451dcb98e10cfae5ed2712cd2a65695963 (diff) | |
download | servo-1d7b1e5c3199bc08e238641e20480752a06f19ea.tar.gz servo-1d7b1e5c3199bc08e238641e20480752a06f19ea.zip |
auto merge of #4779 : Manishearth/servo/more-activation, r=jdm
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/activation.rs | 3 | ||||
-rw-r--r-- | components/script/dom/element.rs | 6 | ||||
-rw-r--r-- | components/script/dom/htmlinputelement.rs | 15 |
3 files changed, 22 insertions, 2 deletions
diff --git a/components/script/dom/activation.rs b/components/script/dom/activation.rs index 78e3d6cd4bb..9bd7d4d8f36 100644 --- a/components/script/dom/activation.rs +++ b/components/script/dom/activation.rs @@ -17,6 +17,9 @@ use std::borrow::ToOwned; pub trait Activatable : Copy { fn as_element(&self) -> Temporary<Element>; + // Is this particular instance of the element activatable? + fn is_instance_activatable(&self) -> bool; + // https://html.spec.whatwg.org/multipage/interaction.html#run-pre-click-activation-steps fn pre_click_activation(&self); diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 84f3d88ac7d..9b74c0cb5c9 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1449,7 +1449,11 @@ impl<'a> ActivationElementHelpers<'a> for JSRef<'a, Element> { match node.type_id() { NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLInputElement)) => { let element: &'a JSRef<'a, HTMLInputElement> = HTMLInputElementCast::to_borrowed_ref(self).unwrap(); - Some(element as &'a (Activatable + 'a)) + if element.is_instance_activatable() { + Some(element as &'a (Activatable + 'a)) + } else { + None + } }, _ => { None diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 0a5624b77ea..e99bdaf3fcf 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -588,7 +588,8 @@ impl<'a> FormControl<'a> for JSRef<'a, HTMLInputElement> { fn mutable(self) -> bool { // https://html.spec.whatwg.org/multipage/forms.html#the-input-element:concept-fe-mutable // https://html.spec.whatwg.org/multipage/forms.html#the-readonly-attribute:concept-fe-mutable - !(self.Disabled() || self.ReadOnly()) + let node: JSRef<Node> = NodeCast::from_ref(self); + !(node.get_disabled_state() || self.ReadOnly()) } // https://html.spec.whatwg.org/multipage/forms.html#the-input-element:concept-form-reset-control @@ -613,6 +614,18 @@ impl<'a> Activatable for JSRef<'a, HTMLInputElement> { Temporary::from_rooted(ElementCast::from_ref(*self)) } + fn is_instance_activatable(&self) -> bool { + match self.input_type.get() { + // https://html.spec.whatwg.org/multipage/forms.html#submit-button-state-%28type=submit%29:activation-behaviour-2 + // https://html.spec.whatwg.org/multipage/forms.html#reset-button-state-%28type=reset%29:activation-behaviour-2 + // https://html.spec.whatwg.org/multipage/forms.html#checkbox-state-%28type=checkbox%29:activation-behaviour-2 + // https://html.spec.whatwg.org/multipage/forms.html#radio-button-state-%28type=radio%29:activation-behaviour-2 + InputType::InputSubmit | InputType::InputReset + | InputType::InputCheckbox | InputType::InputRadio => self.mutable(), + _ => false + } + } + // https://html.spec.whatwg.org/multipage/interaction.html#run-pre-click-activation-steps #[allow(unsafe_blocks)] fn pre_click_activation(&self) { |