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 | 5 ++++- 2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 4cc3a057861..31e356eec1e 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -6549,8 +6549,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"); });