Module: wine Branch: master Commit: 06872bd8e643a829bd62fda66b092974669de883 URL: https://gitlab.winehq.org/wine/wine/-/commit/06872bd8e643a829bd62fda66b09297...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Wed Jul 27 21:33:35 2022 +0300
mshtml: Implement lastElementChild for Elements.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@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"); });