diff options
author | Vincent Sanders <vince@kyllikki.org> | 2012-11-18 12:38:07 +0000 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2012-11-18 12:38:07 +0000 |
commit | bec871152864b1cfb42484505a6622f7f524a405 (patch) | |
tree | d3e06746b6de821a4a02eaba14ae3ff0d5474501 /javascript/jsapi | |
parent | b1ca83ad8c68f18194d47c06bdcb410064ca8c25 (diff) | |
download | netsurf-bec871152864b1cfb42484505a6622f7f524a405.tar.gz netsurf-bec871152864b1cfb42484505a6622f7f524a405.tar.bz2 |
implement lastElementChild
Diffstat (limited to 'javascript/jsapi')
-rw-r--r-- | javascript/jsapi/htmlelement.bnd | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 3b533ebef..898f78188 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -89,6 +89,37 @@ getter firstElementChild %{ %} getter lastElementChild %{ + dom_node *element; + dom_exception exc; + dom_node_type node_type; + dom_node *sib_node; + + exc = dom_node_get_last_child(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 previousElementSibling %{ |