📄 mgjs_htmlformelement.cpp
字号:
#include "mgjs_main.h"#include <htmlattrs.h>#include <html_formimpl.h>#include <html_miscimpl.h>#include <htmltags.h>#define TEMPSTRINGMAX 512static JSBool GetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool EnumerateHTMLFormElement(JSContext *cx, JSObject *obj);static JSBool ResolveHTMLFormElement(JSContext *cx, JSObject *obj,jsval id);static JSBool FinalizeHTMLFormElement(JSContext *cx, JSObject *obj);static JSBool HTMLFormElementSubmit (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLFormElementReset (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool NSHTMLFormElementNamedItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool NSHTMLFormElementItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);bool HTMLFORMELEMENT_IsInternalMethod(char s[]);static JSBool HTMLFORMELEMENT_GetElementByNameCommon(JSContext *cx, JSObject *obj, DOMString elementName,jsval *rval);static JSBool HTMLFORMELEMENT_GetElementByIndexCommon(JSContext *cx, JSObject *obj, int index,jsval *rval); enum HTMLFormElement_slots { HTMLFORMELEMENT_ELEMENTS , HTMLFORMELEMENT_LENGTH , HTMLFORMELEMENT_NAME , HTMLFORMELEMENT_ACCEPTCHARSET , HTMLFORMELEMENT_ACTION , HTMLFORMELEMENT_ENCTYPE , HTMLFORMELEMENT_METHOD , HTMLFORMELEMENT_TARGET , NSHTMLFORMELEMENT_ENCODING ,};static JSBool GetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj); JSObject *eobj; DOMString ds; char s[TEMPSTRINGMAX+1]; JSString *jss; long int len; bool bIsInternalMethod; if(!mFormPrivate)return JS_FALSE; HTMLElementImpl *impl; impl=(HTMLElementImpl*)mFormPrivate->CurNode; if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case HTMLFORMELEMENT_ELEMENTS: eobj=NewScriptHTMLCollectionElement(cx,JS_GetPrototype(cx,obj),0,impl,FORM_ELEMENTS); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLFORMELEMENT_LENGTH: len=((HTMLFormElementImpl*)impl)->length(); *vp=INT_TO_JSVAL(len); break; case HTMLFORMELEMENT_NAME: ds=impl->getAttribute(ATTR_NAME); *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string())); break; case HTMLFORMELEMENT_METHOD: ds=impl->getAttribute(ATTR_METHOD); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,ds.string())); break; case HTMLFORMELEMENT_TARGET: ds=impl->getAttribute(ATTR_TARGET); *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string())); break; case HTMLFORMELEMENT_ACCEPTCHARSET: ds=impl->getAttribute(ATTR_ACCEPT_CHARSET); *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string())); break; case HTMLFORMELEMENT_ENCTYPE: ds=impl->getAttribute(ATTR_ENCTYPE); *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string())); break; case HTMLFORMELEMENT_ACTION: ds=impl->getAttribute(ATTR_ACTION); *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string())); break; } } else { if (!(jss = JS_ValueToString (cx, id)))return JS_FALSE; strncpy(s,(const char*)JS_GetStringBytes (jss),TEMPSTRINGMAX); bIsInternalMethod=HTMLFORMELEMENT_IsInternalMethod(s); if(!bIsInternalMethod) return HTMLFORMELEMENT_GetElementByNameCommon(cx,obj,s,vp); } return JS_TRUE;}static JSBool SetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj); HTMLElementImpl *impl; impl=(HTMLElementImpl*)mFormPrivate->CurNode; if(!impl)return JS_FALSE; DOMString dsValue; JSString *jss; if (!(jss = JS_ValueToString (cx,*vp)))return JS_FALSE; dsValue = (const char*)JS_GetStringBytes (jss); if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) {#if 0 //readonly case HTMLFORMELEMENT_ELEMENTS: case HTMLFORMELEMENT_LENGTH:#endif case HTMLFORMELEMENT_NAME: ((ElementImpl *)impl)->setAttribute(ATTR_NAME, dsValue); break; case HTMLFORMELEMENT_ACCEPTCHARSET: ((ElementImpl *)impl)->setAttribute(ATTR_ACCEPT_CHARSET, dsValue); break; case HTMLFORMELEMENT_ACTION: ((ElementImpl *)impl)->setAttribute(ATTR_ACTION, dsValue); break; case HTMLFORMELEMENT_ENCTYPE: ((ElementImpl *)impl)->setAttribute(ATTR_ENCTYPE, dsValue); break; case HTMLFORMELEMENT_METHOD: ((ElementImpl *)impl)->setAttribute(ATTR_METHOD, dsValue); break; case HTMLFORMELEMENT_TARGET: ((ElementImpl *)impl)->setAttribute(ATTR_TARGET, dsValue); break; } } return JS_TRUE;}static JSBool EnumerateHTMLFormElement(JSContext *cx, JSObject *obj){ return JS_EnumerateStandardClasses(cx,obj);}static JSBool ResolveHTMLFormElement(JSContext *cx, JSObject *obj,jsval id){ return JS_TRUE;}static JSBool FinalizeHTMLFormElement(JSContext *cx, JSObject *obj){ return JS_TRUE;}static JSBool NSHTMLFormElementNamedItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ DOMString elementName; JSString *jss; if(argc<1)return JS_FALSE; if (!(jss = JS_ValueToString (cx, argv[0])))return JS_FALSE; elementName = (const char*)JS_GetStringBytes (jss); return HTMLFORMELEMENT_GetElementByNameCommon(cx,obj,elementName,rval);}static JSBool NSHTMLFormElementItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ int index; if(argc<1)return JS_FALSE; index = JSVAL_TO_INT(argv[0]); if(index<0)return JS_FALSE; return HTMLFORMELEMENT_GetElementByIndexCommon(cx,obj,index,rval);}static JSBool HTMLFormElementSubmit (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj); DOM::HTMLFormElementImpl* formImpl; formImpl=(HTMLFormElementImpl*)mFormPrivate->CurNode; if(!formImpl)return JS_FALSE; formImpl->submit(); return JS_TRUE;}static JSBool HTMLFormElementReset (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj); DOM::HTMLFormElementImpl* formImpl; formImpl=(HTMLFormElementImpl*)mFormPrivate->CurNode; if(!formImpl)return JS_FALSE; formImpl->reset(); return JS_TRUE;} JSClass HTMLFormElementClass = { "HTMLFormElement", JSCLASS_HAS_PRIVATE, JS_PropertyStub,JS_PropertyStub, GetHTMLFormElementProperty,SetHTMLFormElementProperty, EnumerateHTMLFormElement,ResolveHTMLFormElement, JS_ConvertStub, JS_FinalizeStub};static JSPropertySpec HTMLFormElementProperties[] ={ {"elements", HTMLFORMELEMENT_ELEMENTS, JSPROP_ENUMERATE | JSPROP_READONLY}, {"length", HTMLFORMELEMENT_LENGTH, JSPROP_ENUMERATE | JSPROP_READONLY}, {"name", HTMLFORMELEMENT_NAME, JSPROP_ENUMERATE}, {"acceptCharset", HTMLFORMELEMENT_ACCEPTCHARSET, JSPROP_ENUMERATE}, {"action", HTMLFORMELEMENT_ACTION, JSPROP_ENUMERATE}, {"enctype", HTMLFORMELEMENT_ENCTYPE, JSPROP_ENUMERATE}, {"method", HTMLFORMELEMENT_METHOD, JSPROP_ENUMERATE}, {"target", HTMLFORMELEMENT_TARGET, JSPROP_ENUMERATE}, {0}};static JSFunctionSpec HTMLFormElementMethods[] = { {"submit", HTMLFormElementSubmit, 0}, {"reset", HTMLFormElementReset, 0}, {"namedItem", NSHTMLFormElementNamedItem, 1}, {"item", NSHTMLFormElementItem, 1}, {0}};JSObject* InitFormElementClass(JSContext *cx,JSObject *globalObj,JSObject *proto){ JSObject *Obj; Obj = JS_DefineObject (cx,globalObj, "HtmlFormElement", &HTMLFormElementClass,proto,JSPROP_ENUMERATE); JS_DefineProperties (cx,Obj,HTMLFormElementProperties); JS_DefineFunctions (cx,Obj,HTMLFormElementMethods); return Obj;} JSObject* NewScriptHTMLFormElement(JSContext *cx,JSObject *proto,JSObject *parent,ElementImpl *eImpl){ JSObject *obj; JSObject *global = JS_GetGlobalObject(cx); jsval vp; if ((JS_TRUE == JS_LookupProperty(cx, global, "HtmlFormElement", &vp) && JSVAL_IS_OBJECT(vp))) obj=JS_NewObject(cx,&HTMLFormElementClass,JSVAL_TO_OBJECT(vp),NULL); else obj=InitFormElementClass(cx,JS_GetParent(cx,proto),proto); myJSFormPrivate *mFormPrivate=new myJSFormPrivate; mFormPrivate->CurNode=(ElementImpl*)eImpl; JS_SetPrivate(cx,obj,(void*)mFormPrivate); return obj;}static JSBool HTMLFORMELEMENT_GetElementByNameCommon(JSContext *cx, JSObject *obj, DOMString elementName,jsval *rval){ myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj); HTMLElementImpl *nImpl; nImpl=(HTMLElementImpl*)mFormPrivate->CurNode; NodeImpl* CurNode; CurNode=(HTMLElementImpl *)HTMLCollectionImpl_namedItem(nImpl,elementName,FORM_ELEMENTS); ElementImpl* eImpl=(ElementImpl*)(CurNode); if(!CurNode)return JS_FALSE; return HTML_NewObjectByElementCommon(cx,obj,JS_GetPrototype(cx,obj),0,eImpl,rval);}static JSBool HTMLFORMELEMENT_GetElementByIndexCommon(JSContext *cx, JSObject *obj, int index,jsval *rval){ myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj); HTMLElementImpl *nImpl; nImpl=(HTMLElementImpl*)mFormPrivate->CurNode; NodeImpl* CurNode; CurNode=(HTMLElementImpl *)HTMLCollectionImpl_item(nImpl,index,FORM_ELEMENTS); ElementImpl* eImpl=(ElementImpl*)(CurNode); if(!CurNode)return JS_FALSE; return HTML_NewObjectByElementCommon(cx,obj,JS_GetPrototype(cx,obj),0,eImpl,rval);}bool HTMLFORMELEMENT_IsInternalMethod(char s[]){ return !strcmp(s,"submit")||!strcmp(s,"reset") ||!strcmp(s,"namedItem")||!strcmp(s,"item");}#undef TEMPSTRINGMAX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -