Implement outerHTML. Checkin on behalf of Alexandre Tr�mon <atremon@elansoftware.com> b=232281 r=adamlock sr=jst

This commit is contained in:
locka%iol.ie 2004-02-02 21:02:25 +00:00
Родитель 21fd53ca06
Коммит c8c083d7a6
1 изменённых файлов: 69 добавлений и 2 удалений

Просмотреть файл

@ -47,6 +47,12 @@
#include "IEHtmlElementCollection.h"
#include "nsIDOMNSHTMLElement.h"
#include "nsIDOMDocumentRange.h"
#include "nsIDOMRange.h"
#include "nsIDOMNSRange.h"
#include "nsIDOMDocumentFragment.h"
#include "nsIDocumentEncoder.h"
CIEHtmlElement::CIEHtmlElement()
{
}
@ -562,12 +568,73 @@ HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_innerText(BSTR __RPC_FAR *p)
HRESULT STDMETHODCALLTYPE CIEHtmlElement::put_outerHTML(BSTR v)
{
return E_NOTIMPL;
nsresult rv;
nsCOMPtr<nsIDOMDocument> domDoc;
nsCOMPtr<nsIDOMRange> domRange;
nsCOMPtr<nsIDOMDocumentFragment> domDocFragment;
mDOMNode->GetOwnerDocument(getter_AddRefs(domDoc));
nsCOMPtr<nsIDOMDocumentRange> domDocRange = do_QueryInterface(domDoc);
if (!domDocRange)
return E_FAIL;
domDocRange->CreateRange(getter_AddRefs(domRange));
if (!domRange)
return E_FAIL;
if (domRange->SetStartBefore(mDOMNode))
return E_FAIL;
if (domRange->DeleteContents())
return E_FAIL;
nsAutoString outerHTML(OLE2W(v));
nsCOMPtr<nsIDOMNSRange> domNSRange = do_QueryInterface(domRange);
rv = domNSRange->CreateContextualFragment(outerHTML, getter_AddRefs(domDocFragment));
if (!domDocFragment)
return E_FAIL;
nsCOMPtr<nsIDOMNode> parentNode;
mDOMNode->GetParentNode(getter_AddRefs(parentNode));
nsCOMPtr<nsIDOMNode> domNode;
parentNode->ReplaceChild(domDocFragment, mDOMNode, getter_AddRefs(domNode));
return S_OK;
}
HRESULT STDMETHODCALLTYPE CIEHtmlElement::get_outerHTML(BSTR __RPC_FAR *p)
{
return E_NOTIMPL;
if (p == NULL)
{
return E_INVALIDARG;
}
*p = NULL;
nsresult rv;
nsAutoString outerHTML;
nsCOMPtr<nsIDOMDocument> domDoc;
nsCOMPtr<nsIDocumentEncoder> docEncoder;
nsCOMPtr<nsIDOMRange> domRange;
mDOMNode->GetOwnerDocument(getter_AddRefs(domDoc));
nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDoc);
if (!doc)
return E_FAIL;
docEncoder = do_CreateInstance(NS_DOC_ENCODER_CONTRACTID_BASE "text/html");
NS_ENSURE_TRUE(docEncoder, NS_ERROR_FAILURE);
docEncoder->Init(doc, NS_LITERAL_STRING("text/html"),
nsIDocumentEncoder::OutputEncodeBasicEntities);
nsCOMPtr<nsIDOMDocumentRange> domDocRange = do_QueryInterface(domDoc);
if (!domDocRange)
return E_FAIL;
domDocRange->CreateRange(getter_AddRefs(domRange));
if (!domRange)
return E_FAIL;
rv = domRange->SelectNode(mDOMNode);
NS_ENSURE_SUCCESS(rv, rv);
docEncoder->SetRange(domRange);
docEncoder->EncodeToString(outerHTML);
USES_CONVERSION;
*p = SysAllocString(W2COLE(outerHTML.get()));
return S_OK;
}
HRESULT STDMETHODCALLTYPE CIEHtmlElement::put_outerText(BSTR v)