summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--javascript/jsapi/htmlelement.bnd31
-rw-r--r--test/js/dom-element-firstElementChild.html (renamed from test/js/doc-dom1.html)0
-rw-r--r--test/js/dom-element-lastElementChild.html11
-rw-r--r--test/js/index.html3
4 files changed, 44 insertions, 1 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 %{
diff --git a/test/js/doc-dom1.html b/test/js/dom-element-firstElementChild.html
index 2d7762d00..2d7762d00 100644
--- a/test/js/doc-dom1.html
+++ b/test/js/dom-element-firstElementChild.html
diff --git a/test/js/dom-element-lastElementChild.html b/test/js/dom-element-lastElementChild.html
new file mode 100644
index 000000000..e4e9f11cb
--- /dev/null
+++ b/test/js/dom-element-lastElementChild.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="tst.css">
+<title>DOM lastElementChild reference</title>
+</head>
+<body>
+<h1>DOM lastElementChild reference</h1>
+<p><b>head.lastElementChild:</b> <script>document.write(document.head.lastElementChild.textContent);</script></p>
+<p><b>body.lastElementChild:</b> <script>document.write(document.body.lastElementChild.textContent);</script></p>
+</body>
+</html>
diff --git a/test/js/index.html b/test/js/index.html
index f02c4df32..70e4088cf 100644
--- a/test/js/index.html
+++ b/test/js/index.html
@@ -24,7 +24,8 @@
<h2>DOM tests</h2>
<h3>Reference method tests</h3>
<ul>
-<li><a href="doc-dom1.html">firstElementChild</a></li>
+<li><a href="dom-element-firstElementChild.html">firstElementChild</a></li>
+<li><a href="dom-element-lastElementChild.html">lastElementChild</a></li>
<li><a href="doc-dom2.html">getElementById</a></li>
<li><a href="dom-getElementsByTagName.html">getElementsByTagName</a></li>