aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmltablerowelement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/htmltablerowelement.rs')
-rw-r--r--components/script/dom/htmltablerowelement.rs35
1 files changed, 31 insertions, 4 deletions
diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs
index 88096980bcf..d1cbac2d789 100644
--- a/components/script/dom/htmltablerowelement.rs
+++ b/components/script/dom/htmltablerowelement.rs
@@ -5,20 +5,37 @@
use cssparser::RGBA;
use dom::attr::Attr;
use dom::bindings::codegen::Bindings::HTMLTableRowElementBinding::{self, HTMLTableRowElementMethods};
-use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLTableRowElementDerived};
-use dom::bindings::js::Root;
+use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
+use dom::bindings::codegen::InheritTypes::HTMLElementCast;
+use dom::bindings::codegen::InheritTypes::HTMLTableDataCellElementDerived;
+use dom::bindings::codegen::InheritTypes::HTMLTableHeaderCellElementDerived;
+use dom::bindings::codegen::InheritTypes::HTMLTableRowElementDerived;
+use dom::bindings::codegen::InheritTypes::NodeCast;
+use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference};
use dom::document::Document;
-use dom::element::{AttributeMutation, ElementTypeId};
+use dom::element::{AttributeMutation, Element, ElementTypeId};
use dom::eventtarget::{EventTarget, EventTargetTypeId};
+use dom::htmlcollection::{CollectionFilter, HTMLCollection};
use dom::htmlelement::{HTMLElement, HTMLElementTypeId};
-use dom::node::{Node, NodeTypeId};
+use dom::node::{Node, NodeTypeId, window_from_node};
use dom::virtualmethods::VirtualMethods;
use std::cell::Cell;
use util::str::{self, DOMString};
+
+#[derive(JSTraceable)]
+struct CellsFilter;
+impl CollectionFilter for CellsFilter {
+ fn filter(&self, elem: &Element, root: &Node) -> bool {
+ (elem.is_htmltableheadercellelement() || elem.is_htmltabledatacellelement())
+ && NodeCast::from_ref(elem).GetParentNode().r() == Some(root)
+ }
+}
+
#[dom_struct]
pub struct HTMLTableRowElement {
htmlelement: HTMLElement,
+ cells: MutNullableHeap<JS<HTMLCollection>>,
background_color: Cell<Option<RGBA>>,
}
@@ -38,6 +55,7 @@ impl HTMLTableRowElement {
localName,
prefix,
document),
+ cells: Default::default(),
background_color: Cell::new(None),
}
}
@@ -61,6 +79,15 @@ impl HTMLTableRowElementMethods for HTMLTableRowElement {
// https://html.spec.whatwg.org/multipage/#dom-tr-bgcolor
make_setter!(SetBgColor, "bgcolor");
+
+ // https://html.spec.whatwg.org/multipage/#dom-tr-cells
+ fn Cells(&self) -> Root<HTMLCollection> {
+ self.cells.or_init(|| {
+ let window = window_from_node(self);
+ let filter = box CellsFilter;
+ HTMLCollection::create(window.r(), NodeCast::from_ref(self), filter)
+ })
+ }
}
impl VirtualMethods for HTMLTableRowElement {