Module: wine Branch: master Commit: 67f182bf7805484636d0f9e5c59080f59dd0c2d7 URL: https://gitlab.winehq.org/wine/wine/-/commit/67f182bf7805484636d0f9e5c59080f...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Wed Jul 27 21:33:35 2022 +0300
mshtml: Implement nextElementSibling 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, 29 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 29e5d859243..5eced270c3c 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6560,8 +6560,30 @@ static HRESULT WINAPI ElementTraversal_get_previousElementSibling(IElementTraver static HRESULT WINAPI ElementTraversal_get_nextElementSibling(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_GetNextElementSibling(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_childElementCount(IElementTraversal *iface, LONG *p) diff --git a/dlls/mshtml/tests/dom.js b/dlls/mshtml/tests/dom.js index bd6fbf3793b..e164c9502ff 100644 --- a/dlls/mshtml/tests/dom.js +++ b/dlls/mshtml/tests/dom.js @@ -94,12 +94,17 @@ sync_test("ElementTraversal", function() { "div.firstElementChild.outerHTML = " + div.firstElementChild.outerHTML); ok(div.lastElementChild.outerHTML === "<div>text</div>", "div.lastElementChild.outerHTML = " + div.lastElementChild.outerHTML); + ok(div.firstElementChild.nextElementSibling.outerHTML === "<script>/* */</script>", + "div.firstElementChild.nextElementSibling.outerHTML = " + div.firstElementChild.nextElementSibling.outerHTML); + ok(div.lastElementChild.nextElementSibling === null, + "div.lastElementChild.nextElementSibling = " + div.lastElementChild.nextElementSibling);
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"); + ok(!("nextElementSibling" in document), "nextElementSibling found in document"); });
sync_test("head", function() {