Commit 368199c6 authored by Gabriel Ivăncescu's avatar Gabriel Ivăncescu Committed by Alexandre Julliard

mshtml: Restructure element getAttribute.

parent f41d8966
...@@ -1158,6 +1158,9 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr ...@@ -1158,6 +1158,9 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr
LONG lFlags, VARIANT *AttributeValue) LONG lFlags, VARIANT *AttributeValue)
{ {
HTMLElement *This = impl_from_IHTMLElement(iface); HTMLElement *This = impl_from_IHTMLElement(iface);
compat_mode_t compat_mode = dispex_compat_mode(&This->node.event_target.dispex);
nsAString name_str, value_str;
nsresult nsres;
DISPID dispid; DISPID dispid;
HRESULT hres; HRESULT hres;
...@@ -1166,33 +1169,28 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr ...@@ -1166,33 +1169,28 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr
if(lFlags & ~(ATTRFLAG_CASESENSITIVE|ATTRFLAG_ASSTRING)) if(lFlags & ~(ATTRFLAG_CASESENSITIVE|ATTRFLAG_ASSTRING))
FIXME("Unsupported flags %x\n", lFlags); FIXME("Unsupported flags %x\n", lFlags);
if(This->dom_element && dispex_compat_mode(&This->node.event_target.dispex) >= COMPAT_MODE_IE8) { if(compat_mode < COMPAT_MODE_IE8 || !This->dom_element) {
nsAString name_str, value_str; hres = IDispatchEx_GetDispID(&This->node.event_target.dispex.IDispatchEx_iface, strAttributeName,
nsresult nsres; lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid);
if(FAILED(hres)) {
nsAString_InitDepend(&name_str, strAttributeName); V_VT(AttributeValue) = VT_NULL;
nsAString_InitDepend(&value_str, NULL); return (hres == DISP_E_UNKNOWNNAME) ? S_OK : hres;
nsres = nsIDOMElement_GetAttribute(This->dom_element, &name_str, &value_str); }
nsAString_Finish(&name_str);
return return_nsstr_variant(nsres, &value_str, 0, AttributeValue);
}
hres = IDispatchEx_GetDispID(&This->node.event_target.dispex.IDispatchEx_iface, strAttributeName, hres = get_elem_attr_value_by_dispid(This, dispid, AttributeValue);
lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid); if(FAILED(hres))
if(hres == DISP_E_UNKNOWNNAME) { return hres;
V_VT(AttributeValue) = VT_NULL;
return S_OK;
}
if(FAILED(hres)) { if(lFlags & ATTRFLAG_ASSTRING)
V_VT(AttributeValue) = VT_NULL; hres = attr_value_to_string(AttributeValue);
return hres; return hres;
} }
hres = get_elem_attr_value_by_dispid(This, dispid, AttributeValue); nsAString_InitDepend(&name_str, strAttributeName);
if(SUCCEEDED(hres) && (lFlags & ATTRFLAG_ASSTRING)) nsAString_InitDepend(&value_str, NULL);
hres = attr_value_to_string(AttributeValue); nsres = nsIDOMElement_GetAttribute(This->dom_element, &name_str, &value_str);
return hres; nsAString_Finish(&name_str);
return return_nsstr_variant(nsres, &value_str, 0, AttributeValue);
} }
static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strAttributeName, static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strAttributeName,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment