diff options
author | Adrian Utrilla <adrianutrilla@gmail.com> | 2016-04-03 18:25:40 +0200 |
---|---|---|
committer | Adrian Utrilla <adrianutrilla@gmail.com> | 2016-04-06 17:42:24 +0200 |
commit | a8f9887d8634da3862b150e91cb4eb4ebeb09c2a (patch) | |
tree | 0d66f0d98d8788345d666cc70d841b8a96e832d7 /components/script/dom/htmllegendelement.rs | |
parent | 88d29e537cb3e92cc39804eabca7cb347c1417e9 (diff) | |
download | servo-a8f9887d8634da3862b150e91cb4eb4ebeb09c2a.tar.gz servo-a8f9887d8634da3862b150e91cb4eb4ebeb09c2a.zip |
Added .form property for legend tag
Diffstat (limited to 'components/script/dom/htmllegendelement.rs')
-rw-r--r-- | components/script/dom/htmllegendelement.rs | 70 |
1 files changed, 60 insertions, 10 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 {} |