Ejemplo n.º 1
0
// 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
}