1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use webcore::value::Reference;
use webapi::event_target::{IEventTarget, EventTarget};
use webapi::node::{INode, Node};
use webapi::token_list::TokenList;
use webapi::node_list::NodeList;
/// The `IElement` interface represents an object of a [Document](struct.Document.html).
/// This interface describes methods and properties common to all
/// kinds of elements.
///
/// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/API/Element)
pub trait IElement: IEventTarget {
/// The Element.classList is a read-only property which returns a live
/// [TokenList](struct.TokenList.html) collection of the class attributes
/// of the element.
///
/// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/API/Element/classList)
fn class_list( &self ) -> TokenList {
unsafe {
js!( return @{self.as_ref()}.classList; ).into_reference_unchecked().unwrap()
}
}
/// Returns the first element that is a descendant of the element on which it is
/// invoked that matches the specified group of selectors.
///
/// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector)
fn query_selector( &self, selector: &str ) -> Option< Element > {
// TODO: This can throw an exception in case of an invalid selector;
// convert the return type to a Result.
unsafe {
js!( return @{self.as_ref()}.querySelector( @{selector} ); ).into_reference_unchecked()
}
}
/// Returns a non-live [NodeList](struct.NodeList.html) of all elements descended
/// from the element on which it is invoked that matches the specified group of CSS selectors.
///
/// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll)
fn query_selector_all( &self, selector: &str ) -> NodeList {
unsafe {
js!( return @{self.as_ref()}.querySelectorAll( @{selector} ); ).into_reference_unchecked().unwrap()
}
}
}
/// A reference to a JavaScript object which implements the [IElement](trait.IElement.html)
/// interface.
///
/// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/API/Element)
pub struct Element( Reference );
impl IEventTarget for Element {}
impl INode for Element {}
impl IElement for Element {}
reference_boilerplate! {
Element,
instanceof Element
convertible to EventTarget
convertible to Node
}