diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 7422de7847a51a6658bab8809277978aac944093..a1dc8c35ff662d54e3b0dac5826476b6dfd950c1 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -598,6 +598,7 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = { HTMLAnchorElement_QI, HTMLAnchorElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, HTMLAnchorElement_handle_event diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index cbc9abf24dc0e247cd706e4d218a6e7ef520e1ad..bb3e85bd1080f23135562b186f8493fa44e110a6 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -786,6 +786,7 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = { HTMLBodyElement_QI, HTMLBodyElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, HTMLBodyElement_get_event_target }; diff --git a/dlls/mshtml/htmlcomment.c b/dlls/mshtml/htmlcomment.c index e97127e71a052a474a2c22bcb700b99b960042ed..525f0dbf7f75e36d5db9df71b8e79962ec173a37 100644 --- a/dlls/mshtml/htmlcomment.c +++ b/dlls/mshtml/htmlcomment.c @@ -172,7 +172,8 @@ static void HTMLCommentElement_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLCommentElementImplVtbl = { HTMLCommentElement_QI, HTMLCommentElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLCommentElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index bb0ac99adc2be23db8f191398186400fc7f286f9..5f77e6804e8ff8d2f6002dc2407a6d184bd5a572 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1731,7 +1731,8 @@ HRESULT HTMLElement_clone(HTMLDOMNode *iface, nsIDOMNode *nsnode, HTMLDOMNode ** static const NodeImplVtbl HTMLElementImplVtbl = { HTMLElement_QI, HTMLElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static inline HTMLElement *impl_from_DispatchEx(DispatchEx *iface) @@ -2113,3 +2114,190 @@ static IHTMLFiltersCollection *HTMLFiltersCollection_Create(void) return &ret->IHTMLFiltersCollection_iface; } + +/* interface IHTMLAttributeCollection */ +static inline HTMLAttributeCollection *impl_from_IHTMLAttributeCollection(IHTMLAttributeCollection *iface) +{ + return CONTAINING_RECORD(iface, HTMLAttributeCollection, IHTMLAttributeCollection_iface); +} + +static HRESULT WINAPI HTMLAttributeCollection_QueryInterface(IHTMLAttributeCollection *iface, REFIID riid, void **ppv) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + + *ppv = NULL; + + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = &This->IHTMLAttributeCollection_iface; + }else if(IsEqualGUID(&IID_IHTMLAttributeCollection, riid)) { + TRACE("(%p)->(IID_IHTMLAttributeCollection %p)\n", This, ppv); + *ppv = &This->IHTMLAttributeCollection_iface; + }else if(IsEqualGUID(&IID_IHTMLAttributeCollection2, riid)) { + FIXME("(%p)->(IID_IHTMLAttributeCollection2 %p)\n", This, ppv); + }else if(IsEqualGUID(&IID_IHTMLAttributeCollection3, riid)) { + FIXME("(%p)->(IID_IHTMLAttributeCollection3 %p)\n", This, ppv); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; + } + + if(*ppv) { + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; + } + + WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + return E_NOINTERFACE; +} + +static ULONG WINAPI HTMLAttributeCollection_AddRef(IHTMLAttributeCollection *iface) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI HTMLAttributeCollection_Release(IHTMLAttributeCollection *iface) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) { + IHTMLElement_Release(&This->elem->IHTMLElement_iface); + heap_free(This); + } + + return ref; +} + +static HRESULT WINAPI HTMLAttributeCollection_GetTypeInfoCount(IHTMLAttributeCollection *iface, UINT *pctinfo) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo); +} + +static HRESULT WINAPI HTMLAttributeCollection_GetTypeInfo(IHTMLAttributeCollection *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); +} + +static HRESULT WINAPI HTMLAttributeCollection_GetIDsOfNames(IHTMLAttributeCollection *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames, + lcid, rgDispId); +} + +static HRESULT WINAPI HTMLAttributeCollection_Invoke(IHTMLAttributeCollection *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, + wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); +} + +static HRESULT WINAPI HTMLAttributeCollection_get_length(IHTMLAttributeCollection *iface, LONG *p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection__newEnum(IHTMLAttributeCollection *iface, IUnknown **p) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLAttributeCollection_item(IHTMLAttributeCollection *iface, VARIANT *name, IDispatch **ppItem) +{ + HTMLAttributeCollection *This = impl_from_IHTMLAttributeCollection(iface); + FIXME("(%p)->(%s, %p)\n", This, debugstr_variant(name), ppItem); + return E_NOTIMPL; +} + +static const IHTMLAttributeCollectionVtbl HTMLAttributeCollectionVtbl = { + HTMLAttributeCollection_QueryInterface, + HTMLAttributeCollection_AddRef, + HTMLAttributeCollection_Release, + HTMLAttributeCollection_GetTypeInfoCount, + HTMLAttributeCollection_GetTypeInfo, + HTMLAttributeCollection_GetIDsOfNames, + HTMLAttributeCollection_Invoke, + HTMLAttributeCollection_get_length, + HTMLAttributeCollection__newEnum, + HTMLAttributeCollection_item +}; + +static inline HTMLAttributeCollection *HTMLAttributeCollection_from_DispatchEx(DispatchEx *iface) +{ + return CONTAINING_RECORD(iface, HTMLAttributeCollection, dispex); +} + +static HRESULT HTMLAttributeCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid) +{ + HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); + FIXME("(%p)->(%s %x %p)\n", This, debugstr_w(name), flags, dispid); + return E_NOTIMPL; +} + +static HRESULT HTMLAttributeCollection_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params, + VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller) +{ + HTMLAttributeCollection *This = HTMLAttributeCollection_from_DispatchEx(dispex); + FIXME("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, flags, params, res, ei, caller); + return E_NOTIMPL; +} + +static const dispex_static_data_vtbl_t HTMLAttributeCollection_dispex_vtbl = { + NULL, + HTMLAttributeCollection_get_dispid, + HTMLAttributeCollection_invoke, + NULL +}; + +static const tid_t HTMLAttributeCollection_iface_tids[] = { + IHTMLAttributeCollection_tid, + IHTMLAttributeCollection2_tid, + IHTMLAttributeCollection3_tid, + 0 +}; + +static dispex_static_data_t HTMLAttributeCollection_dispex = { + &HTMLAttributeCollection_dispex_vtbl, + DispHTMLAttributeCollection_tid, + NULL, + HTMLAttributeCollection_iface_tids +}; + +HRESULT HTMLElement_get_attr_col(HTMLDOMNode *iface, HTMLAttributeCollection **ac) +{ + HTMLElement *This = impl_from_HTMLDOMNode(iface); + HTMLAttributeCollection *ret; + + ret = heap_alloc_zero(sizeof(*ret)); + if(!ret) + return E_OUTOFMEMORY; + + ret->IHTMLAttributeCollection_iface.lpVtbl = &HTMLAttributeCollectionVtbl; + ret->ref = 1; + + IHTMLElement_AddRef(&This->IHTMLElement_iface); + ret->elem = This; + + init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLAttributeCollection_iface, + &HTMLAttributeCollection_dispex); + + *ac = ret; + return S_OK; +} diff --git a/dlls/mshtml/htmlembed.c b/dlls/mshtml/htmlembed.c index aa1d2493ac6658196b5cf0e738456913d61ca405..50586901628fe48f5c4bef58e9df0b9e29413bcc 100644 --- a/dlls/mshtml/htmlembed.c +++ b/dlls/mshtml/htmlembed.c @@ -254,7 +254,8 @@ static void HTMLEmbedElement_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLEmbedElementImplVtbl = { HTMLEmbedElement_QI, HTMLEmbedElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLEmbedElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlform.c b/dlls/mshtml/htmlform.c index ae84ac3a4c9e8d781561134bee02a4d625714fcc..8905208153b2f73852167e75688115e6e09ff073 100644 --- a/dlls/mshtml/htmlform.c +++ b/dlls/mshtml/htmlform.c @@ -633,6 +633,7 @@ static const NodeImplVtbl HTMLFormElementImplVtbl = { HTMLFormElement_QI, HTMLFormElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c index 3b4126b664bd12c24bac4c398a6f276eb020482f..2663616d86bd60e2bd746db9a74c4652ede59dbc 100644 --- a/dlls/mshtml/htmlframe.c +++ b/dlls/mshtml/htmlframe.c @@ -270,6 +270,7 @@ static const NodeImplVtbl HTMLFrameElementImplVtbl = { HTMLFrameElement_QI, HTMLFrameElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmlgeneric.c b/dlls/mshtml/htmlgeneric.c index ffa9c4122fcddcb4e3e1cf89460b01f814d3d98a..703349d4fca2c21034072eec276f19bcf058d822 100644 --- a/dlls/mshtml/htmlgeneric.c +++ b/dlls/mshtml/htmlgeneric.c @@ -154,7 +154,8 @@ static void HTMLGenericElement_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLGenericElementImplVtbl = { HTMLGenericElement_QI, HTMLGenericElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLGenericElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlhead.c b/dlls/mshtml/htmlhead.c index 69e4edfae8d78ebd4bf1d7161b62e44e57f58089..80c5e4c04ac93deaf8afe071b9a402f550dbd6c7 100644 --- a/dlls/mshtml/htmlhead.c +++ b/dlls/mshtml/htmlhead.c @@ -156,6 +156,7 @@ static const NodeImplVtbl HTMLTitleElementImplVtbl = { HTMLTitleElement_QI, HTMLTitleElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLTitleElement_iface_tids[] = { @@ -312,7 +313,8 @@ static void HTMLHeadElement_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLHeadElementImplVtbl = { HTMLHeadElement_QI, HTMLHeadElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLHeadElement_iface_tids[] = { diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c index 8a293464b5c8ea9def37051aaa84ec5b16a993a9..3acab1eaa29bc3552e75aebeaf31fbfcb49423c3 100644 --- a/dlls/mshtml/htmliframe.c +++ b/dlls/mshtml/htmliframe.c @@ -248,6 +248,7 @@ static const NodeImplVtbl HTMLIFrameImplVtbl = { HTMLIFrame_QI, HTMLIFrame_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index c984fbd63bebe730423db9a219c2183e54e7ef00..0e8a60478230fad5fa7e4b3425b9f30e6960d2ed 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -658,6 +658,7 @@ static const NodeImplVtbl HTMLImgElementImplVtbl = { HTMLImgElement_QI, HTMLImgElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 9d197618695e43728e96217841f18e64567a9dec..65cbeab8803240b858e541c8ec4b3df4dd78c022 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1185,6 +1185,7 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = { HTMLInputElement_QI, HTMLInputElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, HTMLInputElementImpl_fire_event, NULL, diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 7afccd6f08b41980f345121ba90cfd94bca649dc..e8d6f95667fa09728774840e7de9eb191b892439 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -472,8 +472,22 @@ static HRESULT WINAPI HTMLDOMNode_get_childNodes(IHTMLDOMNode *iface, IDispatch static HRESULT WINAPI HTMLDOMNode_get_attributes(IHTMLDOMNode *iface, IDispatch **p) { HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + HTMLAttributeCollection *col; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, p); + + if(This->vtbl->get_attr_col) { + hres = This->vtbl->get_attr_col(This, &col); + if(FAILED(hres)) + return hres; + + *p = (IDispatch*)&col->IHTMLAttributeCollection_iface; + return S_OK; + } + + *p = NULL; + return S_OK; } static HRESULT WINAPI HTMLDOMNode_insertBefore(IHTMLDOMNode *iface, IHTMLDOMNode *newChild, diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 50e04a916d9159b9305ec97154334db10727631d..40a0de080d55de5c4922d95b5dbcfa7e0e12eeb6 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -470,6 +470,7 @@ static const NodeImplVtbl HTMLObjectElementImplVtbl = { HTMLObjectElement_QI, HTMLObjectElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmloption.c b/dlls/mshtml/htmloption.c index 9137765136e36acfea8412517adf0b23d443b84c..533a914901f620d38a721b8368537cd5bcfcbdb5 100644 --- a/dlls/mshtml/htmloption.c +++ b/dlls/mshtml/htmloption.c @@ -343,7 +343,8 @@ static void HTMLOptionElement_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLOptionElementImplVtbl = { HTMLOptionElement_QI, HTMLOptionElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLOptionElement_iface_tids[] = { diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index ca0524fecdc0137066e3fefd0b5b83587833875c..3418fcc379cbe979cd1167e1318efc9a67a4b929 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -330,6 +330,7 @@ static const NodeImplVtbl HTMLScriptElementImplVtbl = { HTMLScriptElement_QI, HTMLScriptElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 6d2e3935a6e401b6bdf29c1775a0f02f371d807a..0d454486894b455d71cac9bda8e4db772e6f9bd6 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -615,6 +615,7 @@ static const NodeImplVtbl HTMLSelectElementImplVtbl = { HTMLSelectElement_QI, HTMLSelectElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index 942f422bbeb2dc0fac05076cba1942a377f76c7e..d866db279a64a336c70620fa30c4a67b876dd29c 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -295,7 +295,8 @@ static void HTMLStyleElement_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLStyleElementImplVtbl = { HTMLStyleElement_QI, HTMLStyleElement_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLStyleElement_iface_tids[] = { diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index 5e25373fee45741b5a63c7734a026ad22c4d9e4e..61cde8070c96d325c431a653c6a5f08f097e8e3d 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -559,6 +559,7 @@ static const NodeImplVtbl HTMLTableImplVtbl = { HTMLTable_QI, HTMLTable_destructor, HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLTable_iface_tids[] = { diff --git a/dlls/mshtml/htmltablerow.c b/dlls/mshtml/htmltablerow.c index ee2c29548c63fd41c99d590ddd8c308524b29dfc..c9b21eca0be5ce3c02d3ded0f14634309ccb37ec 100644 --- a/dlls/mshtml/htmltablerow.c +++ b/dlls/mshtml/htmltablerow.c @@ -300,7 +300,8 @@ static void HTMLTableRow_destructor(HTMLDOMNode *iface) static const NodeImplVtbl HTMLTableRowImplVtbl = { HTMLTableRow_QI, HTMLTableRow_destructor, - HTMLElement_clone + HTMLElement_clone, + HTMLElement_get_attr_col }; static const tid_t HTMLTableRow_iface_tids[] = { diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index ae2fd6a8aa82e2ff84171b87ac0814ffc26abec4..fc833e352292bca1eb89b21992c22ea19503ee47 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -447,6 +447,7 @@ static const NodeImplVtbl HTMLTextAreaElementImplVtbl = { HTMLTextAreaElement_QI, HTMLTextAreaElement_destructor, HTMLElement_clone, + HTMLElement_get_attr_col, NULL, NULL, NULL, diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 9bb37e482a59e0fb87e65d3dc1ab78aa14bb74e8..8bbedd509cadc46e5227110b6da54237da5140c9 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -73,6 +73,7 @@ typedef struct event_target_t event_target_t; XDIID(DispCPlugins) \ XDIID(DispDOMChildrenCollection) \ XDIID(DispHTMLAnchorElement) \ + XDIID(DispHTMLAttributeCollection) \ XDIID(DispHTMLBody) \ XDIID(DispHTMLCommentElement) \ XDIID(DispHTMLCurrentStyle) \ @@ -106,6 +107,9 @@ typedef struct event_target_t event_target_t; XDIID(DispHTMLWindow2) \ XDIID(HTMLDocumentEvents) \ XIID(IHTMLAnchorElement) \ + XIID(IHTMLAttributeCollection) \ + XIID(IHTMLAttributeCollection2) \ + XIID(IHTMLAttributeCollection3) \ XIID(IHTMLBodyElement) \ XIID(IHTMLBodyElement2) \ XIID(IHTMLCommentElement) \ @@ -223,6 +227,7 @@ typedef struct HTMLDocumentNode HTMLDocumentNode; typedef struct HTMLDocumentObj HTMLDocumentObj; typedef struct HTMLFrameBase HTMLFrameBase; typedef struct NSContainer NSContainer; +typedef struct HTMLAttributeCollection HTMLAttributeCollection; typedef enum { SCRIPTMODE_GECKO, @@ -498,6 +503,7 @@ typedef struct { HRESULT (*qi)(HTMLDOMNode*,REFIID,void**); void (*destructor)(HTMLDOMNode*); HRESULT (*clone)(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**); + HRESULT (*get_attr_col)(HTMLDOMNode*,HTMLAttributeCollection**); event_target_t **(*get_event_target)(HTMLDOMNode*); HRESULT (*fire_event)(HTMLDOMNode*,DWORD,BOOL*); HRESULT (*handle_event)(HTMLDOMNode*,DWORD,BOOL*); @@ -712,6 +718,20 @@ HRESULT create_nselem(HTMLDocumentNode*,const WCHAR*,nsIDOMHTMLElement**) DECLSP HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode*,nsIDOMNode*,HTMLDOMNode**) DECLSPEC_HIDDEN; +struct HTMLAttributeCollection { + DispatchEx dispex; + IHTMLAttributeCollection IHTMLAttributeCollection_iface; + IHTMLAttributeCollection2 IHTMLAttributeCollection2_iface; + IHTMLAttributeCollection3 IHTMLAttributeCollection3_iface; + + LONG ref; + + HTMLElement *elem; + LONG size; + DISPID *collection; + struct list attrs; +}; + typedef struct { DispatchEx dispex; IHTMLDOMAttribute IHTMLDOMAttribute_iface; @@ -760,6 +780,7 @@ void HTMLDOMNode_destructor(HTMLDOMNode*) DECLSPEC_HIDDEN; HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**) DECLSPEC_HIDDEN; void HTMLElement_destructor(HTMLDOMNode*) DECLSPEC_HIDDEN; HRESULT HTMLElement_clone(HTMLDOMNode*,nsIDOMNode*,HTMLDOMNode**) DECLSPEC_HIDDEN; +HRESULT HTMLElement_get_attr_col(HTMLDOMNode*,HTMLAttributeCollection**) DECLSPEC_HIDDEN; HRESULT HTMLFrameBase_QI(HTMLFrameBase*,REFIID,void**) DECLSPEC_HIDDEN; void HTMLFrameBase_destructor(HTMLFrameBase*) DECLSPEC_HIDDEN;