aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorlpy <pylaurent1314@gmail.com>2014-03-09 00:41:32 +0800
committerlpy <pylaurent1314@gmail.com>2014-03-17 10:12:08 +0800
commit5915b061c52a700976e61f92f428363bd6060ca5 (patch)
tree9f6e3731797b0ec52f87905b01ce6c9351e25d1f /src
parentcaf1ed94468da3c134cc8e8f4a1b934bb353dc19 (diff)
downloadservo-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.conf2
-rw-r--r--src/components/script/dom/htmlfieldsetelement.rs17
-rw-r--r--src/test/content/test_htmlfieldsetelement_elements.html45
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>