From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlelem.c | 26 ++++++++++++++++++++++++-- dlls/mshtml/tests/dom.js | 4 ++++ 2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 77d424d3310..f548e7c3958 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6598,8 +6598,30 @@ static HRESULT WINAPI ElementTraversal_get_lastElementChild(IElementTraversal *i static HRESULT WINAPI ElementTraversal_get_previousElementSibling(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_GetPreviousElementSibling(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_nextElementSibling(IElementTraversal *iface, IHTMLElement **p) diff --git a/dlls/mshtml/tests/dom.js b/dlls/mshtml/tests/dom.js index e164c9502ff..93b4dc196ec 100644 --- a/dlls/mshtml/tests/dom.js +++ b/dlls/mshtml/tests/dom.js @@ -98,6 +98,10 @@ sync_test("ElementTraversal", function() { "div.firstElementChild.nextElementSibling.outerHTML = " + div.firstElementChild.nextElementSibling.outerHTML); ok(div.lastElementChild.nextElementSibling === null, "div.lastElementChild.nextElementSibling = " + div.lastElementChild.nextElementSibling); + ok(div.lastElementChild.previousElementSibling.outerHTML === "<script>/* */</script>", + "div.lastElementChild.previousElementSibling.outerHTML = " + div.lastElementChild.previousElementSibling.outerHTML); + ok(div.firstElementChild.previousElementSibling === null, + "div.firstElementChild.previousElementSibling = " + div.firstElementChild.previousElementSibling);
div.innerHTML = "abc"; ok(div.firstElementChild === null, "div.firstElementChild = " + div.firstElementChild);