Gabriel Ivăncescu : mshtml: Implement lastElementChild for Elements.
Alexandre Julliard
julliard at winehq.org
Wed Jul 27 16:17:08 CDT 2022
Module: wine
Branch: master
Commit: 06872bd8e643a829bd62fda66b092974669de883
URL: https://gitlab.winehq.org/wine/wine/-/commit/06872bd8e643a829bd62fda66b092974669de883
Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date: Wed Jul 27 21:33:35 2022 +0300
mshtml: Implement lastElementChild for Elements.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/mshtml/htmlelem.c | 26 ++++++++++++++++++++++++--
dlls/mshtml/tests/dom.js | 5 ++++-
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 4681fc79782..29e5d859243 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -6524,8 +6524,30 @@ static HRESULT WINAPI ElementTraversal_get_firstElementChild(IElementTraversal *
static HRESULT WINAPI ElementTraversal_get_lastElementChild(IElementTraversal *iface, IHTMLElement **p)
{
HTMLElement *This = impl_from_IElementTraversal(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ nsIDOMElement *nselem = NULL;
+ HTMLElement *elem;
+ HRESULT hres;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ if(!This->dom_element) {
+ *p = NULL;
+ return S_OK;
+ }
+
+ nsIDOMElement_GetLastElementChild(This->dom_element, &nselem);
+ if(!nselem) {
+ *p = NULL;
+ return S_OK;
+ }
+
+ hres = get_element(nselem, &elem);
+ nsIDOMElement_Release(nselem);
+ if(FAILED(hres))
+ return hres;
+
+ *p = &elem->IHTMLElement_iface;
+ return S_OK;
}
static HRESULT WINAPI ElementTraversal_get_previousElementSibling(IElementTraversal *iface, IHTMLElement **p)
diff --git a/dlls/mshtml/tests/dom.js b/dlls/mshtml/tests/dom.js
index 3939dd95642..bd6fbf3793b 100644
--- a/dlls/mshtml/tests/dom.js
+++ b/dlls/mshtml/tests/dom.js
@@ -89,12 +89,15 @@ sync_test("textContent", function() {
sync_test("ElementTraversal", function() {
var div = document.createElement("div");
- div.innerHTML = "abc<b>bold</b><script>/* */<script><div>text</div>def";
+ div.innerHTML = "abc<b>bold</b><script>/* */</script><div>text</div>def";
ok(div.firstElementChild.outerHTML === "<b>bold</b>",
"div.firstElementChild.outerHTML = " + div.firstElementChild.outerHTML);
+ ok(div.lastElementChild.outerHTML === "<div>text</div>",
+ "div.lastElementChild.outerHTML = " + div.lastElementChild.outerHTML);
div.innerHTML = "abc";
ok(div.firstElementChild === null, "div.firstElementChild = " + div.firstElementChild);
+ ok(div.lastElementChild === null, "div.lastElementChild = " + div.lastElementChild);
ok(!("firstElementChild" in document), "firstElementChild found in document");
});
More information about the wine-cvs
mailing list