From 06872bd8e643a829bd62fda66b092974669de883 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gabriel=20Iv=C4=83ncescu?= Date: Wed, 27 Jul 2022 21:33:35 +0300 Subject: [PATCH] mshtml: Implement lastElementChild for Elements. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Gabriel Ivăncescu --- 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 = "abcbold
text
def"; ok(div.firstElementChild.outerHTML === "bold", "div.firstElementChild.outerHTML = " + div.firstElementChild.outerHTML); + ok(div.lastElementChild.outerHTML === "
text
", + "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"); }); -- 2.11.4.GIT