static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR text, IHTMLDOMNode **newTextNode) { HTMLDocument *This = HTMLDOC3_THIS(iface); nsIDOMText *nstext; HTMLDOMNode *node; nsAString text_str; nsresult nsres; TRACE("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode); if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_InitDepend(&text_str, text); nsres = nsIDOMHTMLDocument_CreateTextNode(This->doc_node->nsdoc, &text_str, &nstext); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); return E_FAIL; } node = HTMLDOMTextNode_Create(This->doc_node, (nsIDOMNode*)nstext); nsIDOMElement_Release(nstext); *newTextNode = HTMLDOMNODE(node); IHTMLDOMNode_AddRef(HTMLDOMNODE(node)); return S_OK; }
static HRESULT WINAPI HTMLInputTextElement_QueryInterface(IHTMLInputTextElement *iface, REFIID riid, void **ppv) { HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface); return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); }
static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p) { HTMLDocument *This = HTMLDOC3_THIS(iface); nsIDOMElement *nselem = NULL; HTMLDOMNode *node; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); if(This->window->readystate == READYSTATE_UNINITIALIZED) { *p = NULL; return S_OK; } if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsres = nsIDOMHTMLDocument_GetDocumentElement(This->doc_node->nsdoc, &nselem); if(NS_FAILED(nsres)) { ERR("GetDocumentElement failed: %08x\n", nsres); return E_FAIL; } if(nselem) { node = get_node(This->doc_node, (nsIDOMNode *)nselem, TRUE); nsIDOMElement_Release(nselem); IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p); }else { *p = NULL; } return S_OK; }
static HRESULT HTMLFormElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) { HTMLFormElement *This = HTMLFORM_NODE_THIS(iface); nsIDOMHTMLCollection *elements; nsIDOMNode *item; HTMLDOMNode *node; nsresult nsres; TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, flags, params, res, ei, caller); nsres = nsIDOMHTMLFormElement_GetElements(This->nsform, &elements); if(NS_FAILED(nsres)) { FIXME("GetElements failed: 0x%08x\n", nsres); return E_FAIL; } nsres = nsIDOMHTMLCollection_Item(elements, id - MSHTML_DISPID_CUSTOM_MIN, &item); nsIDOMHTMLCollection_Release(elements); if(NS_FAILED(nsres)) { FIXME("Item failed: 0x%08x\n", nsres); return E_FAIL; } node = get_node(This->element.node.doc, item, TRUE); V_VT(res) = VT_DISPATCH; V_DISPATCH(res) = (IDispatch*)node; IHTMLDOMNode_AddRef(HTMLDOMNODE(node)); nsIDOMNode_Release(item); return S_OK; }
static HRESULT WINAPI HTMLDOMTextNode_QueryInterface(IHTMLDOMTextNode *iface, REFIID riid, void **ppv) { HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->node), riid, ppv); }
static HRESULT WINAPI HTMLFormElement_QueryInterface(IHTMLFormElement *iface, REFIID riid, void **ppv) { HTMLFormElement *This = HTMLFORM_THIS(iface); return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); }
static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p) { HTMLDocument *This = HTMLDOC3_THIS(iface); nsIDOMDocument *nsdoc; HTMLDOMNode *node; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); if(!This->nscontainer) { *p = NULL; return S_OK; } nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc); if(NS_FAILED(nsres)) ERR("GetDocument failed: %08lx\n", nsres); if(nsdoc) { node = get_node(This, (nsIDOMNode*)nsdoc); nsIDOMDocument_Release(nsdoc); IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p); }else { *p = NULL; } return S_OK; }
static HRESULT WINAPI HTMLTableRow_QueryInterface(IHTMLTableRow *iface, REFIID riid, void **ppv) { HTMLTableRow *This = HTMLTABLEROW_THIS(iface); return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); }
HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv) { *ppv = NULL; if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLDOMNODE(This); }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = HTMLDOMNODE(This); }else if(IsEqualGUID(&IID_IHTMLDOMNode, riid)) { TRACE("(%p)->(IID_IHTMLDOMNode %p)\n", This, ppv); *ppv = HTMLDOMNODE(This); } if(*ppv) { IUnknown_AddRef((IUnknown*)*ppv); return S_OK; } return E_NOINTERFACE; }
static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory *iface, VARIANT text, VARIANT value, VARIANT defaultselected, VARIANT selected, IHTMLOptionElement **optelem) { HTMLOptionElementFactory *This = HTMLOPTFACTORY_THIS(iface); nsIDOMElement *nselem; nsAString option_str; nsresult nsres; HRESULT hres; static const PRUnichar optionW[] = {'O','P','T','I','O','N',0}; TRACE("(%p)->(%s %s %s %s %p)\n", This, debugstr_variant(&text), debugstr_variant(&value), debugstr_variant(&defaultselected), debugstr_variant(&selected), optelem); if(!This->doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } *optelem = NULL; nsAString_Init(&option_str, optionW); nsres = nsIDOMHTMLDocument_CreateElement(This->doc->nsdoc, &option_str, &nselem); nsAString_Finish(&option_str); if(NS_FAILED(nsres)) { ERR("CreateElement failed: %08x\n", nsres); return E_FAIL; } hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->doc, (nsIDOMNode*)nselem, TRUE)), &IID_IHTMLOptionElement, (void**)optelem); nsIDOMElement_Release(nselem); if(V_VT(&text) == VT_BSTR) IHTMLOptionElement_put_text(*optelem, V_BSTR(&text)); else if(V_VT(&text) != VT_EMPTY) FIXME("Unsupported text vt=%d\n", V_VT(&text)); if(V_VT(&value) == VT_BSTR) IHTMLOptionElement_put_value(*optelem, V_BSTR(&value)); else if(V_VT(&value) != VT_EMPTY) FIXME("Unsupported value vt=%d\n", V_VT(&value)); if(V_VT(&defaultselected) != VT_EMPTY) FIXME("Unsupported defaultselected vt=%d\n", V_VT(&defaultselected)); if(V_VT(&selected) != VT_EMPTY) FIXME("Unsupported selected vt=%d\n", V_VT(&selected)); return S_OK; }
static ULONG WINAPI HTMLTable_AddRef(IHTMLTable *iface) { HTMLTable *This = HTMLTABLE_THIS(iface); return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLFormElement_Release(IHTMLFormElement *iface) { HTMLFormElement *This = HTMLFORM_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLCommentElement_Release(IHTMLCommentElement *iface) { HTMLCommentElement *This = HTMLCOMMENT_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLDOMTextNode_Release(IHTMLDOMTextNode *iface) { HTMLDOMTextNode *This = HTMLTEXT_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->node)); }
static ULONG WINAPI HTMLObjectElement_Release(IHTMLObjectElement *iface) { HTMLObjectElement *This = HTMLOBJECT_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLScriptElement_Release(IHTMLScriptElement *iface) { HTMLScriptElement *This = HTMLSCRIPT_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }
static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v, IHTMLElement **pel) { HTMLDocument *This = HTMLDOC3_THIS(iface); nsIDOMElement *nselem; HTMLDOMNode *node; nsIDOMNode *nsnode, *nsnode_by_id, *nsnode_by_name; nsIDOMNodeList *nsnode_list; nsAString id_str; nsresult nsres; TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel); if(!This->doc_node->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsAString_InitDepend(&id_str, v); /* get element by id attribute */ nsres = nsIDOMHTMLDocument_GetElementById(This->doc_node->nsdoc, &id_str, &nselem); if(FAILED(nsres)) { ERR("GetElementById failed: %08x\n", nsres); nsAString_Finish(&id_str); return E_FAIL; } nsnode_by_id = (nsIDOMNode*)nselem; /* get first element by name attribute */ nsres = nsIDOMHTMLDocument_GetElementsByName(This->doc_node->nsdoc, &id_str, &nsnode_list); nsAString_Finish(&id_str); if(FAILED(nsres)) { ERR("getElementsByName failed: %08x\n", nsres); if(nsnode_by_id) nsIDOMNode_Release(nsnode_by_id); return E_FAIL; } nsIDOMNodeList_Item(nsnode_list, 0, &nsnode_by_name); nsIDOMNodeList_Release(nsnode_list); if(nsnode_by_name && nsnode_by_id) { nsIDOM3Node *node3; PRUint16 pos; nsres = nsIDOMNode_QueryInterface(nsnode_by_name, &IID_nsIDOM3Node, (void**)&node3); if(NS_FAILED(nsres)) { FIXME("failed to get nsIDOM3Node interface: 0x%08x\n", nsres); nsIDOMNode_Release(nsnode_by_name); nsIDOMNode_Release(nsnode_by_id); return E_FAIL; } nsres = nsIDOM3Node_CompareDocumentPosition(node3, nsnode_by_id, &pos); nsIDOM3Node_Release(node3); if(NS_FAILED(nsres)) { FIXME("nsIDOM3Node_CompareDocumentPosition failed: 0x%08x\n", nsres); nsIDOMNode_Release(nsnode_by_name); nsIDOMNode_Release(nsnode_by_id); return E_FAIL; } TRACE("CompareDocumentPosition gave: 0x%x\n", pos); if(pos & PRECEDING || pos & CONTAINS) { nsnode = nsnode_by_id; nsIDOMNode_Release(nsnode_by_name); }else { nsnode = nsnode_by_name; nsIDOMNode_Release(nsnode_by_id); } }else nsnode = nsnode_by_name ? nsnode_by_name : nsnode_by_id; if(nsnode) { node = get_node(This->doc_node, nsnode, TRUE); nsIDOMNode_Release(nsnode); IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)pel); }else { *pel = NULL; } return S_OK; }
static ULONG WINAPI HTMLInputTextElement_Release(IHTMLInputTextElement *iface) { HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLImgElement_AddRef(IHTMLImgElement *iface) { HTMLImgElement *This = HTMLIMG_THIS(iface); return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLTableRow_Release(IHTMLTableRow *iface) { HTMLTableRow *This = HTMLTABLEROW_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }
static ULONG WINAPI HTMLOptionElement_Release(IHTMLOptionElement *iface) { HTMLOptionElement *This = HTMLOPTION_THIS(iface); return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); }