diff options
Diffstat (limited to 'components/script/dom/htmlbuttonelement.rs')
-rwxr-xr-x | components/script/dom/htmlbuttonelement.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs index 56a614cf608..b36b276bfd7 100755 --- a/components/script/dom/htmlbuttonelement.rs +++ b/components/script/dom/htmlbuttonelement.rs @@ -7,7 +7,7 @@ use dom::attr::Attr; use dom::bindings::codegen::Bindings::HTMLButtonElementBinding; use dom::bindings::codegen::Bindings::HTMLButtonElementBinding::HTMLButtonElementMethods; use dom::bindings::inheritance::Castable; -use dom::bindings::js::Root; +use dom::bindings::js::{MutNullableJS, Root}; use dom::bindings::str::DOMString; use dom::document::Document; use dom::element::{AttributeMutation, Element}; @@ -26,6 +26,7 @@ use dom::virtualmethods::VirtualMethods; use dom_struct::dom_struct; use html5ever_atoms::LocalName; use std::cell::Cell; +use std::default::Default; use style::element_state::*; #[derive(JSTraceable, PartialEq, Copy, Clone)] @@ -40,7 +41,8 @@ enum ButtonType { #[dom_struct] pub struct HTMLButtonElement { htmlelement: HTMLElement, - button_type: Cell<ButtonType> + button_type: Cell<ButtonType>, + form_owner: MutNullableJS<HTMLFormElement>, } impl HTMLButtonElement { @@ -51,7 +53,8 @@ impl HTMLButtonElement { htmlelement: HTMLElement::new_inherited_with_state(IN_ENABLED_STATE, local_name, prefix, document), - button_type: Cell::new(ButtonType::Submit) + button_type: Cell::new(ButtonType::Submit), + form_owner: Default::default(), } } @@ -211,6 +214,9 @@ impl VirtualMethods for HTMLButtonElement { self.button_type.set(ButtonType::Submit); } } + }, + &local_name!("form") => { + self.form_attribute_mutated(mutation); } _ => {}, } @@ -237,7 +243,19 @@ impl VirtualMethods for HTMLButtonElement { } } -impl FormControl for HTMLButtonElement {} +impl FormControl for HTMLButtonElement { + fn form_owner(&self) -> Option<Root<HTMLFormElement>> { + self.form_owner.get() + } + + fn set_form_owner(&self, form: Option<&HTMLFormElement>) { + self.form_owner.set(form); + } + + fn to_element<'a>(&'a self) -> &'a Element { + self.upcast::<Element>() + } +} impl Validatable for HTMLButtonElement { fn is_instance_validatable(&self) -> bool { |