Implement support for ParentNode's querySelectorAll

This commit is contained in:
Bruno de Oliveira Abinader 2014-06-10 12:10:44 -04:00
parent b0e8f7cebf
commit 95dcab66b2
4 changed files with 29 additions and 2 deletions

View file

@ -330,6 +330,7 @@ pub trait DocumentMethods {
fn Location(&self) -> Temporary<Location>;
fn Children(&self) -> Temporary<HTMLCollection>;
fn QuerySelector(&self, selectors: DOMString) -> Fallible<Option<Temporary<Element>>>;
fn QuerySelectorAll(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>>;
fn GetOnclick(&self) -> Option<EventHandlerNonNull>;
fn SetOnclick(&mut self, listener: Option<EventHandlerNonNull>);
fn GetOnload(&self) -> Option<EventHandlerNonNull>;
@ -821,6 +822,12 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
root.query_selector(selectors)
}
// http://dom.spec.whatwg.org/#dom-parentnode-queryselectorall
fn QuerySelectorAll(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>> {
let root: &JSRef<Node> = NodeCast::from_ref(self);
root.query_selector_all(selectors)
}
fn GetOnclick(&self) -> Option<EventHandlerNonNull> {
let eventtarget: &JSRef<EventTarget> = EventTargetCast::from_ref(self);
eventtarget.get_event_handler_common("click")

View file

@ -11,6 +11,7 @@ use dom::element::Element;
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlcollection::HTMLCollection;
use dom::node::{DocumentFragmentNodeTypeId, Node, NodeHelpers, window_from_node};
use dom::nodelist::NodeList;
use dom::window::{Window, WindowMethods};
use servo_util::str::DOMString;
@ -49,6 +50,7 @@ impl DocumentFragment {
pub trait DocumentFragmentMethods {
fn Children(&self) -> Temporary<HTMLCollection>;
fn QuerySelector(&self, selectors: DOMString) -> Fallible<Option<Temporary<Element>>>;
fn QuerySelectorAll(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>>;
}
impl<'a> DocumentFragmentMethods for JSRef<'a, DocumentFragment> {
@ -63,4 +65,11 @@ impl<'a> DocumentFragmentMethods for JSRef<'a, DocumentFragment> {
let root: &JSRef<Node> = NodeCast::from_ref(self);
root.query_selector(selectors)
}
// http://dom.spec.whatwg.org/#dom-parentnode-queryselectorall
fn QuerySelectorAll(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>> {
let root: &JSRef<Node> = NodeCast::from_ref(self);
root.query_selector_all(selectors)
}
}

View file

@ -22,6 +22,7 @@ use dom::htmlcollection::HTMLCollection;
use dom::htmlserializer::serialize;
use dom::node::{ElementNodeTypeId, Node, NodeHelpers, NodeIterator, document_from_node};
use dom::node::{window_from_node, LayoutNodeHelpers};
use dom::nodelist::NodeList;
use dom::virtualmethods::{VirtualMethods, vtable_for};
use layout_interface::ContentChangedDocumentDamage;
use layout_interface::MatchSelectorsDocumentDamage;
@ -430,6 +431,7 @@ pub trait ElementMethods {
fn GetOuterHTML(&self) -> Fallible<DOMString>;
fn Children(&self) -> Temporary<HTMLCollection>;
fn QuerySelector(&self, selectors: DOMString) -> Fallible<Option<Temporary<Element>>>;
fn QuerySelectorAll(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>>;
fn Remove(&self);
}
@ -712,6 +714,12 @@ impl<'a> ElementMethods for JSRef<'a, Element> {
root.query_selector(selectors)
}
// http://dom.spec.whatwg.org/#dom-parentnode-queryselectorall
fn QuerySelectorAll(&self, selectors: DOMString) -> Fallible<Temporary<NodeList>> {
let root: &JSRef<Node> = NodeCast::from_ref(self);
root.query_selector_all(selectors)
}
// http://dom.spec.whatwg.org/#dom-childnode-remove
fn Remove(&self) {
let node: &JSRef<Node> = NodeCast::from_ref(self);

View file

@ -24,8 +24,11 @@ interface ParentNode {
// void append((Node or DOMString)... nodes);
//Element? query(DOMString relativeSelectors);
//[NewObject] Elements queryAll(DOMString relativeSelectors);
//[NewObject]
//Elements queryAll(DOMString relativeSelectors);
[Throws]
Element? querySelector(DOMString selectors);
//[NewObject] NodeList querySelectorAll(DOMString selectors);
//[NewObject]
[Throws]
NodeList querySelectorAll(DOMString selectors);
};