diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/htmltablerowelement.rs | 35 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLTableRowElement.webidl | 2 |
2 files changed, 32 insertions, 5 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 { diff --git a/components/script/dom/webidls/HTMLTableRowElement.webidl b/components/script/dom/webidls/HTMLTableRowElement.webidl index e5c2183b103..c2de0ea0b5b 100644 --- a/components/script/dom/webidls/HTMLTableRowElement.webidl +++ b/components/script/dom/webidls/HTMLTableRowElement.webidl @@ -7,7 +7,7 @@ interface HTMLTableRowElement : HTMLElement { //readonly attribute long rowIndex; //readonly attribute long sectionRowIndex; - //readonly attribute HTMLCollection cells; + readonly attribute HTMLCollection cells; //HTMLElement insertCell(optional long index = -1); //void deleteCell(long index); |