servo: Merge #4779 - Specific instances of activatable elements may not be activatable (fixes #4765) (from Manishearth:more-activation); r=jdm

Source-Repo: https://github.com/servo/servo
Source-Revision: 1d7b1e5c3199bc08e238641e20480752a06f19ea
This commit is contained in:
Manish Goregaokar 2015-01-30 18:18:49 -07:00
Родитель 114f6b6b27
Коммит ad0b2dbdec
3 изменённых файлов: 22 добавлений и 2 удалений

Просмотреть файл

@ -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);

Просмотреть файл

@ -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

Просмотреть файл

@ -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) {