Implement HTMLFieldSetElement.elements.(fixes #1843)

This commit is contained in:
lpy 2014-03-09 00:41:32 +08:00
parent caf1ed9446
commit 5915b061c5
3 changed files with 55 additions and 9 deletions

View file

@ -147,7 +147,7 @@ addHTMLElement('HTMLDirectoryElement')
addHTMLElement('HTMLDListElement')
addHTMLElement('HTMLElement')
addHTMLElement('HTMLEmbedElement')
addHTMLElement('HTMLFieldSetElement')
addHTMLElement('HTMLFieldSetElement', needsAbstract=['elements'])
addHTMLElement('HTMLFontElement')
addHTMLElement('HTMLFormElement')
addHTMLElement('HTMLFrameElement')

View file

@ -3,16 +3,16 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::HTMLFieldSetElementBinding;
use dom::bindings::codegen::InheritTypes::HTMLFieldSetElementDerived;
use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLFieldSetElementDerived, NodeCast};
use dom::bindings::js::JS;
use dom::bindings::error::ErrorResult;
use dom::document::Document;
use dom::element::HTMLFieldSetElementTypeId;
use dom::element::{Element, HTMLFieldSetElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlformelement::HTMLFormElement;
use dom::htmlcollection::HTMLCollection;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use dom::node::{Node, ElementNodeTypeId, window_from_node};
use dom::validitystate::ValidityState;
use servo_util::str::DOMString;
@ -68,11 +68,12 @@ impl HTMLFieldSetElement {
~""
}
pub fn Elements(&self) -> JS<HTMLCollection> {
// FIXME: https://github.com/mozilla/servo/issues/1843
let doc = self.htmlelement.element.node.owner_doc();
let doc = doc.get();
HTMLCollection::new(&doc.window, ~[])
pub fn Elements(&self, abstract_self: &JS<HTMLFieldSetElement>) -> JS<HTMLCollection> {
let node: JS<Node> = NodeCast::from(abstract_self);
let element: JS<Element> = ElementCast::from(abstract_self);
let window = &window_from_node(&node);
let listed_elements = ["button", "fieldset", "input", "keygen", "object", "output", "select", "textarea"];
HTMLCollection::create(window, &node, |elem| *elem != element && listed_elements.iter().any(|&tag_name| tag_name == elem.get().tag_name))
}
pub fn WillValidate(&self) -> bool {