📄 mgjs_htmlinputelement.cpp
字号:
#include "mgjs_main.h"#include <../misc/htmlattrs.h> #include <html_formimpl.h>static JSBool GetHTMLInputElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetHTMLInputElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool HTMLInputElementBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLInputElementFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLInputElementSelect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLInputElementClick(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);enum HTMLInputElement_slots { HTMLINPUTELEMENT_DEFAULTVALUE , HTMLINPUTELEMENT_DEFAULTCHECKED , HTMLINPUTELEMENT_FORM , HTMLINPUTELEMENT_ACCEPT , HTMLINPUTELEMENT_ACCESSKEY , HTMLINPUTELEMENT_ALIGN , HTMLINPUTELEMENT_ALT , HTMLINPUTELEMENT_CHECKED , HTMLINPUTELEMENT_DISABLED , HTMLINPUTELEMENT_MAXLENGTH , HTMLINPUTELEMENT_NAME , HTMLINPUTELEMENT_READONLY , HTMLINPUTELEMENT_SIZE , HTMLINPUTELEMENT_SRC , HTMLINPUTELEMENT_TABINDEX , HTMLINPUTELEMENT_TYPE , HTMLINPUTELEMENT_USEMAP , HTMLINPUTELEMENT_VALUE ,};static JSBool GetHTMLInputElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ HTMLInputElementImpl *impl; DOMString dsReturn=(const char*)""; long int lReturn; bool bReturn; JSObject *eobj; myJSInputPrivate *mInputPriv; mInputPriv=(myJSInputPrivate*)JS_GetPrivate(cx,obj); impl=(HTMLInputElementImpl *)mInputPriv->CurNode; if(!impl)return JS_FALSE; if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case HTMLINPUTELEMENT_DEFAULTVALUE: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_VALUE); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_DEFAULTCHECKED: bReturn=!((ElementImpl *)impl)->getAttribute(ATTR_CHECKED).isNull(); *vp=INT_TO_JSVAL(bReturn); break; case HTMLINPUTELEMENT_FORM: eobj=NewScriptHTMLFormElement(cx,JS_GetPrototype(cx,obj),obj,((HTMLInputElementImpl *)impl)->form()); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLINPUTELEMENT_ACCEPT: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_ACCEPT); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_ACCESSKEY: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_ACCESSKEY); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_ALIGN: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_ALIGN); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_ALT: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_ALT); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_CHECKED: bReturn=((HTMLInputElementImpl*)impl)->checked(); *vp=INT_TO_JSVAL(bReturn); break; case HTMLINPUTELEMENT_DISABLED: bReturn=!((ElementImpl *)impl)->getAttribute(ATTR_DISABLED).isNull(); *vp=INT_TO_JSVAL(bReturn); break; case HTMLINPUTELEMENT_MAXLENGTH: lReturn=((HTMLInputElementImpl *)impl)->getAttribute(ATTR_MAXLENGTH).toInt(); *vp=INT_TO_JSVAL(lReturn); break; case HTMLINPUTELEMENT_NAME: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_NAME); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_READONLY: bReturn=!((ElementImpl *)impl)->getAttribute(ATTR_READONLY).isNull(); *vp=INT_TO_JSVAL(bReturn); break; case HTMLINPUTELEMENT_SIZE: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_SIZE); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_SRC: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_SRC); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_TABINDEX: lReturn=((HTMLInputElementImpl *)impl)->getAttribute(ATTR_TABINDEX).toInt(); *vp=INT_TO_JSVAL(lReturn); break; case HTMLINPUTELEMENT_TYPE: dsReturn=((HTMLInputElementImpl *)impl)->type(); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_USEMAP: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_USEMAP); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLINPUTELEMENT_VALUE: dsReturn=((HTMLInputElementImpl*)impl)->value(); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; } } return JS_TRUE;}static JSBool SetHTMLInputElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ HTMLInputElementImpl *impl; DOMString dsValue; bool bValue; myJSInputPrivate *mInputPriv; mInputPriv=(myJSInputPrivate*)JS_GetPrivate(cx,obj); impl=(HTMLInputElementImpl *)mInputPriv->CurNode; if(!impl)return JS_FALSE; 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)) { case HTMLINPUTELEMENT_DEFAULTVALUE: ((ElementImpl *)impl)->setAttribute(ATTR_VALUE, dsValue); break; case HTMLINPUTELEMENT_DEFAULTCHECKED: bValue=(bool)JSVAL_TO_INT(*vp); ((ElementImpl *)impl)->setAttribute(ATTR_CHECKED, bValue ? "" : 0); break;#if 0 //readonly case HTMLINPUTELEMENT_FORM: break;#endif case HTMLINPUTELEMENT_ACCEPT: ((ElementImpl *)impl)->setAttribute(ATTR_ACCEPT, dsValue); break; case HTMLINPUTELEMENT_ACCESSKEY: ((ElementImpl *)impl)->setAttribute(ATTR_ACCESSKEY, dsValue); break; case HTMLINPUTELEMENT_ALIGN: ((ElementImpl *)impl)->setAttribute(ATTR_ALIGN, dsValue); break; case HTMLINPUTELEMENT_ALT: ((ElementImpl *)impl)->setAttribute(ATTR_ALT, dsValue); break; case HTMLINPUTELEMENT_CHECKED: bValue=(bool)JSVAL_TO_INT(*vp); ((HTMLInputElementImpl*)impl)->setChecked(bValue); break; case HTMLINPUTELEMENT_DISABLED: bValue=(bool)JSVAL_TO_INT(*vp); ((ElementImpl *)impl)->setAttribute(ATTR_DISABLED, bValue ? "" : 0); break; case HTMLINPUTELEMENT_MAXLENGTH: ((ElementImpl *)impl)->setAttribute(ATTR_MAXLENGTH,dsValue); break; case HTMLINPUTELEMENT_NAME: ((ElementImpl *)impl)->setAttribute(ATTR_NAME, dsValue); break; case HTMLINPUTELEMENT_READONLY: bValue=(bool)JSVAL_TO_INT(*vp); ((ElementImpl *)impl)->setAttribute(ATTR_READONLY, bValue ? "" : 0); break; case HTMLINPUTELEMENT_SIZE: ((ElementImpl *)impl)->setAttribute(ATTR_SIZE, dsValue); break; case HTMLINPUTELEMENT_SRC: ((ElementImpl *)impl)->setAttribute(ATTR_SRC, dsValue); break; case HTMLINPUTELEMENT_TABINDEX: ((ElementImpl *)impl)->setAttribute(ATTR_TABINDEX,dsValue); break;#if 0 //readonly case HTMLINPUTELEMENT_TYPE: break;#endif case HTMLINPUTELEMENT_USEMAP: ((ElementImpl *)impl)->setAttribute(ATTR_USEMAP, dsValue); break; case HTMLINPUTELEMENT_VALUE: ((HTMLInputElementImpl*)impl)->setValue(dsValue); break; } } return JS_TRUE;}static JSBool HTMLInputElementBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSInputPrivate *mInputPriv=(myJSInputPrivate *)JS_GetPrivate(cx,obj); HTMLInputElementImpl *impl=(HTMLInputElementImpl *)mInputPriv->CurNode; if(!impl)return JS_FALSE; impl->blur(); return JS_TRUE;}static JSBool HTMLInputElementFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSInputPrivate *mInputPriv=(myJSInputPrivate *)JS_GetPrivate(cx,obj); HTMLInputElementImpl *impl=(HTMLInputElementImpl *)mInputPriv->CurNode; if(!impl)return JS_FALSE; impl->focus(); return JS_TRUE;}static JSBool HTMLInputElementSelect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSInputPrivate *mInputPriv=(myJSInputPrivate *)JS_GetPrivate(cx,obj); HTMLInputElementImpl *impl=(HTMLInputElementImpl *)mInputPriv->CurNode; if(!impl)return JS_FALSE; impl->select(); return JS_TRUE;}static JSBool HTMLInputElementClick(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSInputPrivate *mInputPriv=(myJSInputPrivate *)JS_GetPrivate(cx,obj); HTMLInputElementImpl *impl=(HTMLInputElementImpl *)mInputPriv->CurNode; if(!impl)return JS_FALSE; impl->click(); return JS_TRUE;}static JSPropertySpec HTMLInputElementProperties[] ={ {"defaultValue", HTMLINPUTELEMENT_DEFAULTVALUE, JSPROP_ENUMERATE}, {"defaultChecked", HTMLINPUTELEMENT_DEFAULTCHECKED, JSPROP_ENUMERATE}, {"form", HTMLINPUTELEMENT_FORM, JSPROP_ENUMERATE | JSPROP_READONLY}, {"accept", HTMLINPUTELEMENT_ACCEPT, JSPROP_ENUMERATE}, {"accessKey", HTMLINPUTELEMENT_ACCESSKEY, JSPROP_ENUMERATE}, {"align", HTMLINPUTELEMENT_ALIGN, JSPROP_ENUMERATE}, {"alt", HTMLINPUTELEMENT_ALT, JSPROP_ENUMERATE}, {"checked", HTMLINPUTELEMENT_CHECKED, JSPROP_ENUMERATE}, {"disabled", HTMLINPUTELEMENT_DISABLED, JSPROP_ENUMERATE}, {"maxLength", HTMLINPUTELEMENT_MAXLENGTH, JSPROP_ENUMERATE}, {"name", HTMLINPUTELEMENT_NAME, JSPROP_ENUMERATE}, {"readOnly", HTMLINPUTELEMENT_READONLY, JSPROP_ENUMERATE}, {"size", HTMLINPUTELEMENT_SIZE, JSPROP_ENUMERATE}, {"src", HTMLINPUTELEMENT_SRC, JSPROP_ENUMERATE}, {"tabIndex", HTMLINPUTELEMENT_TABINDEX, JSPROP_ENUMERATE}, {"type", HTMLINPUTELEMENT_TYPE, JSPROP_ENUMERATE}, {"useMap", HTMLINPUTELEMENT_USEMAP, JSPROP_ENUMERATE}, {"value", HTMLINPUTELEMENT_VALUE, JSPROP_ENUMERATE}, {0}};JSClass HTMLInputElementClass = { "HTMLInputElement", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, GetHTMLInputElementProperty, SetHTMLInputElementProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub };static JSFunctionSpec HTMLInputElementMethods[] = { {"blur", HTMLInputElementBlur, 0}, {"focus", HTMLInputElementFocus, 0}, {"select", HTMLInputElementSelect, 0}, {"click", HTMLInputElementClick, 0}, {0}};JSObject* InitHTMLInputElementClass(JSContext *cx,JSObject *globalObj,JSObject *proto){ JSObject *obj; obj = JS_DefineObject (cx,globalObj, "HtmlInputElement", &HTMLInputElementClass,proto,JSPROP_ENUMERATE); JS_DefineProperties (cx,obj,HTMLInputElementProperties); JS_DefineFunctions (cx,obj,HTMLInputElementMethods); return obj;}JSObject* NewScriptHTMLInputElement(JSContext *cx,JSObject *proto,JSObject *parent,ElementImpl *eImpl){ JSObject *obj; JSObject *global = JS_GetGlobalObject(cx); jsval vp; if ((JS_TRUE == JS_LookupProperty(cx, global, "HtmlInputElement", &vp) && JSVAL_IS_OBJECT(vp))) obj=JS_NewObject(cx,&HTMLInputElementClass,JSVAL_TO_OBJECT(vp),NULL); else obj=InitHTMLInputElementClass(cx,JS_GetParent(cx,proto),proto); myJSInputPrivate *mInputPrivate=new myJSInputPrivate; mInputPrivate->CurNode=(ElementImpl*)eImpl; JS_SetPrivate(cx,obj,(void*)mInputPrivate); return obj;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -