diff options
Diffstat (limited to 'components/script/dom/htmlinputelement.rs')
-rw-r--r-- | components/script/dom/htmlinputelement.rs | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index ede6ee71fb0..0af4eb62790 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -303,6 +303,8 @@ pub trait HTMLInputElementHelpers { fn update_checked_state(self, checked: bool, dirty: bool); fn get_size(&self) -> u32; fn get_indeterminate_state(self) -> bool; + fn mutable(self) -> bool; + fn reset(self); } #[allow(unsafe_blocks)] @@ -392,6 +394,26 @@ impl<'a> HTMLInputElementHelpers for JSRef<'a, HTMLInputElement> { fn get_indeterminate_state(self) -> bool { self.indeterminate.get() } + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-mutable + 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 + let node: JSRef<Node> = NodeCast::from_ref(self); + !(node.get_disabled_state() || self.ReadOnly()) + } + fn reset(self) { + match self.input_type.get() { + InputType::InputRadio | InputType::InputCheckbox => { + self.update_checked_state(self.DefaultChecked(), false); + self.checked_changed.set(false); + }, + InputType::InputImage => (), + _ => () + } + + self.SetValue(self.DefaultValue()); + self.value_changed.set(false); + } } impl<'a> VirtualMethods for JSRef<'a, HTMLInputElement> { @@ -583,32 +605,8 @@ impl<'a> FormControl<'a> for JSRef<'a, HTMLInputElement> { fn to_element(self) -> JSRef<'a, Element> { ElementCast::from_ref(self) } - - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-mutable - 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 - 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 - fn reset(self) { - match self.input_type.get() { - InputType::InputRadio | InputType::InputCheckbox => { - self.update_checked_state(self.DefaultChecked(), false); - self.checked_changed.set(false); - }, - InputType::InputImage => (), - _ => () - } - - self.SetValue(self.DefaultValue()); - self.value_changed.set(false); - } } - impl<'a> Activatable for JSRef<'a, HTMLInputElement> { fn as_element(&self) -> Temporary<Element> { Temporary::from_rooted(ElementCast::from_ref(*self)) |