diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-04-06 22:30:25 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-04-06 22:30:25 +0530 |
commit | c631fcf96f03eb6113eb51f44004e68636e5eab2 (patch) | |
tree | 0746f6cab657c50341cc1998272962050d73c3a9 /components | |
parent | 0b37c7559509b8250d09f4d8072e45598697d832 (diff) | |
parent | a8f9887d8634da3862b150e91cb4eb4ebeb09c2a (diff) | |
download | servo-c631fcf96f03eb6113eb51f44004e68636e5eab2.tar.gz servo-c631fcf96f03eb6113eb51f44004e68636e5eab2.zip |
Auto merge of #10388 - autrilla:dom-legend-form, r=emilio
Added .form property for legend tag
r? @emilio
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10388)
<!-- Reviewable:end -->
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/htmllegendelement.rs | 70 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLLegendElement.webidl | 2 |
2 files changed, 61 insertions, 11 deletions
diff --git a/components/script/dom/htmllegendelement.rs b/components/script/dom/htmllegendelement.rs index 8686c5a4c10..343f28f9c65 100644 --- a/components/script/dom/htmllegendelement.rs +++ b/components/script/dom/htmllegendelement.rs @@ -1,12 +1,20 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +use dom::bindings::codegen::Bindings::ElementBinding::ElementMethods; use dom::bindings::codegen::Bindings::HTMLLegendElementBinding; +use dom::bindings::codegen::Bindings::HTMLLegendElementBinding::HTMLLegendElementMethods; +use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; +use dom::bindings::inheritance::Castable; use dom::bindings::js::Root; use dom::document::Document; +use dom::element::Element; use dom::htmlelement::HTMLElement; -use dom::node::Node; +use dom::htmlfieldsetelement::HTMLFieldSetElement; +use dom::htmlformelement::{HTMLFormElement, FormControl}; +use dom::node::{ChildrenMutation, Node, NodeDamage, UnbindContext}; +use dom::virtualmethods::VirtualMethods; use string_cache::Atom; use util::str::DOMString; @@ -18,18 +26,60 @@ pub struct HTMLLegendElement { impl HTMLLegendElement { fn new_inherited(localName: Atom, prefix: Option<DOMString>, - document: &Document) -> HTMLLegendElement { - HTMLLegendElement { - htmlelement: - HTMLElement::new_inherited(localName, prefix, document) - } + document: &Document) + -> HTMLLegendElement { + HTMLLegendElement { htmlelement: HTMLElement::new_inherited(localName, prefix, document) } } #[allow(unrooted_must_root)] pub fn new(localName: Atom, prefix: Option<DOMString>, - document: &Document) -> Root<HTMLLegendElement> { + document: &Document) + -> Root<HTMLLegendElement> { let element = HTMLLegendElement::new_inherited(localName, prefix, document); Node::reflect_node(box element, document, HTMLLegendElementBinding::Wrap) } } + +impl VirtualMethods for HTMLLegendElement { + fn super_type(&self) -> Option<&VirtualMethods> { + Some(self.upcast::<HTMLElement>() as &VirtualMethods) + } + + fn bind_to_tree(&self, tree_in_doc: bool) { + if let Some(ref s) = self.super_type() { + s.bind_to_tree(tree_in_doc); + } + + self.upcast::<Element>().check_ancestors_disabled_state_for_form_control(); + } + + fn unbind_from_tree(&self, context: &UnbindContext) { + self.super_type().unwrap().unbind_from_tree(context); + + let node = self.upcast::<Node>(); + let el = self.upcast::<Element>(); + if node.ancestors().any(|ancestor| ancestor.is::<HTMLFieldSetElement>()) { + el.check_ancestors_disabled_state_for_form_control(); + } else { + el.check_disabled_attribute(); + } + } +} + + +impl HTMLLegendElementMethods for HTMLLegendElement { + // https://html.spec.whatwg.org/multipage/#dom-legend-form + fn GetForm(&self) -> Option<Root<HTMLFormElement>> { + let parent = match self.upcast::<Node>().GetParentElement() { + Some(parent) => parent, + None => return None, + }; + if parent.is::<HTMLFieldSetElement>() { + return self.form_owner(); + } + None + } +} + +impl FormControl for HTMLLegendElement {} diff --git a/components/script/dom/webidls/HTMLLegendElement.webidl b/components/script/dom/webidls/HTMLLegendElement.webidl index 8c8b55c3e14..0fa9227975b 100644 --- a/components/script/dom/webidls/HTMLLegendElement.webidl +++ b/components/script/dom/webidls/HTMLLegendElement.webidl @@ -5,7 +5,7 @@ // https://html.spec.whatwg.org/multipage/#htmllegendelement interface HTMLLegendElement : HTMLElement { - //readonly attribute HTMLFormElement? form; + readonly attribute HTMLFormElement? form; // also has obsolete members }; |