From 99d3633e0348fcff3f99d87696b57a70cbdcaf4d Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 18 Nov 2012 12:59:10 +0000 Subject: implement previousElementSibling and nextElementSibling --- javascript/jsapi/htmlelement.bnd | 64 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) (limited to 'javascript') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 898f78188..0730ad44b 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -123,7 +123,67 @@ getter lastElementChild %{ %} getter previousElementSibling %{ - %} + dom_node *element; + dom_exception exc; + dom_node_type node_type; + dom_node *sib_node; + + exc = dom_node_get_previous_sibling(private->node, &element); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + while (element != NULL) { + exc = dom_node_get_node_type(element, &node_type); + if ((exc == DOM_NO_ERR) && (node_type == DOM_ELEMENT_NODE)) { + /* found it */ + jsret = jsapi_new_HTMLElement(cx, + NULL, + NULL, + (dom_element *)element, + private->htmlc); + break; + } + + exc = dom_node_get_previous_sibling(element, &sib_node); + dom_node_unref(element); + if (exc == DOM_NO_ERR) { + element = sib_node; + } else { + element = NULL; + } + } +%} getter nextElementSibling %{ - %} + dom_node *element; + dom_exception exc; + dom_node_type node_type; + dom_node *sib_node; + + exc = dom_node_get_next_sibling(private->node, &element); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + while (element != NULL) { + exc = dom_node_get_node_type(element, &node_type); + if ((exc == DOM_NO_ERR) && (node_type == DOM_ELEMENT_NODE)) { + /* found it */ + jsret = jsapi_new_HTMLElement(cx, + NULL, + NULL, + (dom_element *)element, + private->htmlc); + break; + } + + exc = dom_node_get_next_sibling(element, &sib_node); + dom_node_unref(element); + if (exc == DOM_NO_ERR) { + element = sib_node; + } else { + element = NULL; + } + } +%} -- cgit v1.2.3