void check_event_attr(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem) { const PRUnichar *attr_value; nsAString attr_value_str; IDispatch *disp; HTMLDOMNode *node; int i; nsresult nsres; HRESULT hres; for(i=0; i < EVENTID_LAST; i++) { nsres = get_elem_attr_value(nselem, event_info[i].attr_name, &attr_value_str, &attr_value); if(NS_SUCCEEDED(nsres)) { if(!*attr_value) continue; TRACE("%p.%s = %s\n", nselem, debugstr_w(event_info[i].attr_name), debugstr_w(attr_value)); disp = script_parse_event(doc->window, attr_value); if(disp) { hres = get_node(doc, (nsIDOMNode*)nselem, TRUE, &node); if(SUCCEEDED(hres)) { set_event_handler_disp(get_node_event_target(node), node->doc, i, disp); node_release(node); } IDispatch_Release(disp); } nsAString_Finish(&attr_value_str); } } }
static void get_font_size(HTMLDocument *This, WCHAR *ret) { nsISelection *nsselection = get_ns_selection(This); nsIDOMHTMLElement *elem = NULL; nsIDOMNode *node = NULL, *tmp_node; nsAString tag_str; LPCWSTR tag; UINT16 node_type; nsresult nsres; *ret = 0; if(!nsselection) return; nsISelection_GetFocusNode(nsselection, &node); nsISelection_Release(nsselection); while(node) { nsres = nsIDOMNode_GetNodeType(node, &node_type); if(NS_FAILED(nsres) || node_type == DOCUMENT_NODE) break; if(node_type == ELEMENT_NODE) { nsIDOMNode_QueryInterface(node, &IID_nsIDOMHTMLElement, (void**)&elem); nsAString_Init(&tag_str, NULL); nsIDOMHTMLElement_GetTagName(elem, &tag_str); nsAString_GetData(&tag_str, &tag); if(!strcmpiW(tag, fontW)) { nsAString val_str; const PRUnichar *val; TRACE("found font tag %p\n", elem); get_elem_attr_value(elem, sizeW, &val_str, &val); if(*val) { TRACE("found size %s\n", debugstr_w(val)); strcpyW(ret, val); } nsAString_Finish(&val_str); } nsAString_Finish(&tag_str); nsIDOMHTMLElement_Release(elem); } if(*ret) break; tmp_node = node; nsIDOMNode_GetParentNode(node, &node); nsIDOMNode_Release(tmp_node); } if(node) nsIDOMNode_Release(node); }
static BOOL is_elem_name(HTMLElement *elem, LPCWSTR name) { const PRUnichar *str; nsAString nsstr; BOOL ret = FALSE; nsresult nsres; static const PRUnichar nameW[] = {'n','a','m','e',0}; if(!elem->nselem) return FALSE; nsAString_Init(&nsstr, NULL); nsIDOMHTMLElement_GetId(elem->nselem, &nsstr); nsAString_GetData(&nsstr, &str); if(!strcmpiW(str, name)) { nsAString_Finish(&nsstr); return TRUE; } nsres = get_elem_attr_value(elem->nselem, nameW, &nsstr, &str); if(NS_SUCCEEDED(nsres)) { ret = !strcmpiW(str, name); nsAString_Finish(&nsstr); } return ret; }
static HRESULT HTMLFormElement_get_dispid(HTMLDOMNode *iface, BSTR name, DWORD grfdex, DISPID *pid) { HTMLFormElement *This = impl_from_HTMLDOMNode(iface); nsIDOMHTMLCollection *elements; nsAString nsstr, name_str; UINT32 len, i; nsresult nsres; HRESULT hres = DISP_E_UNKNOWNNAME; static const PRUnichar nameW[] = {'n','a','m','e',0}; TRACE("(%p)->(%s %x %p)\n", This, wine_dbgstr_w(name), grfdex, pid); nsres = nsIDOMHTMLFormElement_GetElements(This->nsform, &elements); if(NS_FAILED(nsres)) { FIXME("GetElements failed: 0x%08x\n", nsres); return E_FAIL; } nsres = nsIDOMHTMLCollection_GetLength(elements, &len); if(NS_FAILED(nsres)) { FIXME("GetLength failed: 0x%08x\n", nsres); nsIDOMHTMLCollection_Release(elements); return E_FAIL; } if(len > MSHTML_CUSTOM_DISPID_CNT) len = MSHTML_CUSTOM_DISPID_CNT; /* FIXME: Implement in more generic way */ if('0' <= *name && *name <= '9') { WCHAR *end_ptr; i = strtoulW(name, &end_ptr, 10); if(!*end_ptr && i < len) { *pid = MSHTML_DISPID_CUSTOM_MIN + i; return S_OK; } } nsAString_Init(&nsstr, NULL); for(i = 0; i < len; ++i) { nsIDOMNode *nsitem; nsIDOMHTMLElement *nshtml_elem; const PRUnichar *str; nsres = nsIDOMHTMLCollection_Item(elements, i, &nsitem); if(NS_FAILED(nsres)) { FIXME("Item failed: 0x%08x\n", nsres); hres = E_FAIL; break; } nsres = nsIDOMNode_QueryInterface(nsitem, &IID_nsIDOMHTMLElement, (void**)&nshtml_elem); nsIDOMNode_Release(nsitem); if(NS_FAILED(nsres)) { FIXME("Failed to get nsIDOMHTMLNode interface: 0x%08x\n", nsres); hres = E_FAIL; break; } /* compare by id attr */ nsres = nsIDOMHTMLElement_GetId(nshtml_elem, &nsstr); if(NS_FAILED(nsres)) { FIXME("GetId failed: 0x%08x\n", nsres); nsIDOMHTMLElement_Release(nshtml_elem); hres = E_FAIL; break; } nsAString_GetData(&nsstr, &str); if(!strcmpiW(str, name)) { nsIDOMHTMLElement_Release(nshtml_elem); /* FIXME: using index for dispid */ *pid = MSHTML_DISPID_CUSTOM_MIN + i; hres = S_OK; break; } /* compare by name attr */ nsres = get_elem_attr_value(nshtml_elem, nameW, &name_str, &str); nsIDOMHTMLElement_Release(nshtml_elem); if(NS_SUCCEEDED(nsres)) { if(!strcmpiW(str, name)) { nsAString_Finish(&name_str); /* FIXME: using index for dispid */ *pid = MSHTML_DISPID_CUSTOM_MIN + i; hres = S_OK; break; } nsAString_Finish(&name_str); } } nsAString_Finish(&nsstr); nsIDOMHTMLCollection_Release(elements); return hres; }