diff options
author | lpy <pylaurent1314@gmail.com> | 2014-03-09 00:41:32 +0800 |
---|---|---|
committer | lpy <pylaurent1314@gmail.com> | 2014-03-17 10:12:08 +0800 |
commit | 5915b061c52a700976e61f92f428363bd6060ca5 (patch) | |
tree | 9f6e3731797b0ec52f87905b01ce6c9351e25d1f /src | |
parent | caf1ed94468da3c134cc8e8f4a1b934bb353dc19 (diff) | |
download | servo-5915b061c52a700976e61f92f428363bd6060ca5.tar.gz servo-5915b061c52a700976e61f92f428363bd6060ca5.zip |
Implement HTMLFieldSetElement.elements.(fixes #1843)
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/codegen/Bindings.conf | 2 | ||||
-rw-r--r-- | src/components/script/dom/htmlfieldsetelement.rs | 17 | ||||
-rw-r--r-- | src/test/content/test_htmlfieldsetelement_elements.html | 45 |
3 files changed, 55 insertions, 9 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 2380a0eaeed..0aa60ed606b 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -147,7 +147,7 @@ addHTMLElement('HTMLDirectoryElement') addHTMLElement('HTMLDListElement') addHTMLElement('HTMLElement') addHTMLElement('HTMLEmbedElement') -addHTMLElement('HTMLFieldSetElement') +addHTMLElement('HTMLFieldSetElement', needsAbstract=['elements']) addHTMLElement('HTMLFontElement') addHTMLElement('HTMLFormElement') addHTMLElement('HTMLFrameElement') diff --git a/src/components/script/dom/htmlfieldsetelement.rs b/src/components/script/dom/htmlfieldsetelement.rs index 4dec639d041..5bbd13c2b79 100644 --- a/src/components/script/dom/htmlfieldsetelement.rs +++ b/src/components/script/dom/htmlfieldsetelement.rs @@ -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 { diff --git a/src/test/content/test_htmlfieldsetelement_elements.html b/src/test/content/test_htmlfieldsetelement_elements.html new file mode 100644 index 00000000000..3f599a44b9d --- /dev/null +++ b/src/test/content/test_htmlfieldsetelement_elements.html @@ -0,0 +1,45 @@ +<html> + <script src="harness.js"></script> + <fieldset id="fs"> + <legend>Display</legend> + <input type=radio name=a> + <fieldset> + <button>Click!</button> + </fieldset> + <keygen name="key"> + <textarea> + A + </textarea> + <select> + <option value="1"> A </option> + <option value="2" selected> B </option> + </select> + <form onsubmit="return false" oninput="o.value = a.valueAsNumber + b.valueAsNumber"> + <input name=a type=number step=any> + + <input name=b type=number step=any> = + <output name=c for="a b"></output> + </form> + <figure> + <object type="application/x-java-applet"> + <param name="code" value="MyJavaClass"> + <p>You do not have Java available, or it is disabled.</p> + </object> + <figcaption>My Java Clock</figcaption> + </figure> + </fieldset> + <script> + var fs = document.getElementById("fs"); + is(fs.elements.length, 10); + is_a(fs.elements[0], HTMLInputElement); + is_a(fs.elements[1], HTMLFieldSetElement); + is_a(fs.elements[2], HTMLButtonElement); + is_a(fs.elements[3], HTMLUnknownElement); + is_a(fs.elements[4], HTMLTextAreaElement); + is_a(fs.elements[5], HTMLSelectElement); + is_a(fs.elements[6], HTMLInputElement); + is_a(fs.elements[7], HTMLInputElement); + is_a(fs.elements[8], HTMLOutputElement); + is_a(fs.elements[9], HTMLObjectElement); + finish(); + </script> +</html> |