// setAttribute method JSBool jhtml_input_setAttribute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { WebcJSScript *jsscr = (WebcJSScript *) jhutil_GetContextPrivate(cx); WebcJSDocumentContext *jsmgr = (jsscr)? jsscr->GetJSMgr() : 0; HTMLElement *pElement = (HTMLElement *)jhutil_GetPrivate(cx, obj); // parameters are Name, value, casesensitive[optional] if (pElement && (argc > 1)) { int CaseSensitive = 1; HTML_CHAR *pAttributeName = WEBC_JS_STRING_TO_WEBC_STRING(JS_ValueToString(cx, argv[0])); HTML_CHAR *pAttributeValue = WEBC_JS_STRING_TO_WEBC_STRING(JS_ValueToString(cx, argv[1])); if (argc > 2) { CaseSensitive = JSVAL_TO_INT(argv[2]); } HTMLAttributeType attributeType = HTML_ParseAttributeType (pAttributeName, webc_strlen(pAttributeName)); if(pElement->GetTag() == HTML_TAG_INPUT) { HTMLInput *pInput = (HTMLInput *)pElement; jsval propertyID = HTML_UNKNOWN_ATTRIB; switch (attributeType) { case HTML_ATTRIB_TYPE: propertyID = HTMLINPUTELEMENT_TYPE; break; case HTML_ATTRIB_SIZE: propertyID = HTMLINPUTELEMENT_SIZE; break; case HTML_ATTRIB_MAXLENGTH: propertyID = HTMLINPUTELEMENT_MAXLENGTH; break; case HTML_ATTRIB_VALUE: propertyID = HTMLINPUTELEMENT_VALUE; break; case HTML_ATTRIB_ACCEPT: propertyID = HTMLINPUTELEMENT_ACCEPT; break; case HTML_ATTRIB_ACCESSKEY: propertyID = HTMLINPUTELEMENT_ACCESSKEY; break; case HTML_ATTRIB_ALIGN: propertyID = HTMLINPUTELEMENT_ALIGN; break; case HTML_ATTRIB_ALT: propertyID = HTMLINPUTELEMENT_ALT; break; case HTML_ATTRIB_DISABLED: propertyID = HTMLINPUTELEMENT_DISABLED; break; case HTML_ATTRIB_NAME: propertyID = HTMLINPUTELEMENT_NAME; break; case HTML_ATTRIB_READONLY: propertyID = HTMLINPUTELEMENT_READONLY; break; case HTML_ATTRIB_SRC: propertyID = HTMLINPUTELEMENT_SRC; break; case HTML_ATTRIB_TABINDEX: propertyID = HTMLINPUTELEMENT_TABINDEX; break; case HTMLINPUTELEMENT_DEFAULTVALUE: case HTMLINPUTELEMENT_DEFAULTCHECKED: case HTMLINPUTELEMENT_FORM: case HTMLINPUTELEMENT_CHECKED: // these aren't in the e_HTMLAttributeType enumeration - not sure if they should be added default: break; } if(HTML_UNKNOWN_ATTRIB != propertyID) { // this is admittedly ass-backwards since properties are a superset if attributes (so // the calling sequence should be the other-way-round), but since the property method // is already implemented, we'll just call back into it to service the setAttribute call. return jhtml_input_setProperty(cx, obj, INT_TO_JSVAL(propertyID), &(argv[1])); } else { return jhtml_element_setAttribute(cx, obj, argc, argv, rval); // defer to base class } } } return JS_FALSE; //failure }