📄 mgjs_htmltextareaelement.cpp
字号:
#include "mgjs_main.h"#include <../misc/htmlattrs.h> #include <html_formimpl.h>static JSBool GetHTMLTextAreaElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetHTMLTextAreaElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool HTMLTextAreaElementBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTextAreaElementFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTextAreaElementSelect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);enum HTMLTextAreaElement_slots { HTMLTEXTAREAELEMENT_DEFAULTVALUE , HTMLTEXTAREAELEMENT_FORM , HTMLTEXTAREAELEMENT_ACCESSKEY , HTMLTEXTAREAELEMENT_COLS , HTMLTEXTAREAELEMENT_DISABLED , HTMLTEXTAREAELEMENT_NAME , HTMLTEXTAREAELEMENT_READONLY , HTMLTEXTAREAELEMENT_ROWS , HTMLTEXTAREAELEMENT_TABINDEX , HTMLTEXTAREAELEMENT_TYPE , HTMLTEXTAREAELEMENT_VALUE ,};static JSBool GetHTMLTextAreaElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ HTMLTextAreaElementImpl *impl; DOMString dsReturn=(const char*)""; long int lReturn; bool bReturn; myJSTextAreaPrivate *mTextAreaPriv=(myJSTextAreaPrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTextAreaElementImpl *)mTextAreaPriv->CurNode; if(!impl)return JS_FALSE; JSObject *eobj; if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case HTMLTEXTAREAELEMENT_DEFAULTVALUE: dsReturn=((HTMLTextAreaElementImpl *)impl)->defaultValue(); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTEXTAREAELEMENT_FORM: eobj=NewScriptHTMLFormElement(cx,JS_GetPrototype(cx,obj),0,((HTMLTextAreaElementImpl *)impl)->form()); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLTEXTAREAELEMENT_ACCESSKEY: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_ACCESSKEY); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTEXTAREAELEMENT_COLS: lReturn=((HTMLTextAreaElementImpl *)impl)->getAttribute(ATTR_COLS).toInt(); *vp=INT_TO_JSVAL(lReturn); break; case HTMLTEXTAREAELEMENT_DISABLED: bReturn=!((ElementImpl *)impl)->getAttribute(ATTR_DISABLED).isNull(); *vp=INT_TO_JSVAL(bReturn); break; case HTMLTEXTAREAELEMENT_NAME: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_NAME); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTEXTAREAELEMENT_READONLY: bReturn=!((ElementImpl *)impl)->getAttribute(ATTR_READONLY).isNull(); *vp=INT_TO_JSVAL(bReturn); break; case HTMLTEXTAREAELEMENT_ROWS: lReturn=((HTMLTextAreaElementImpl *)impl)->getAttribute(ATTR_ROWS).toInt(); *vp=INT_TO_JSVAL(lReturn); break; case HTMLTEXTAREAELEMENT_TABINDEX: lReturn=((HTMLTextAreaElementImpl *)impl)->getAttribute(ATTR_TABINDEX).toInt(); *vp=INT_TO_JSVAL(lReturn); break; case HTMLTEXTAREAELEMENT_TYPE: dsReturn=((HTMLTextAreaElementImpl *)impl)->type(); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTEXTAREAELEMENT_VALUE: dsReturn=((HTMLTextAreaElementImpl *)impl)->value(); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; } } return JS_TRUE;}static JSBool SetHTMLTextAreaElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ HTMLTextAreaElementImpl *impl; DOMString dsValue; bool bValue; myJSTextAreaPrivate *mTextAreaPriv=(myJSTextAreaPrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTextAreaElementImpl *)mTextAreaPriv->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 HTMLTEXTAREAELEMENT_DEFAULTVALUE: ((HTMLTextAreaElementImpl *)impl)->setDefaultValue(dsValue); break;#if 0 //note: readonly case HTMLTEXTAREAELEMENT_FORM: break;#endif case HTMLTEXTAREAELEMENT_ACCESSKEY: ((ElementImpl *)impl)->setAttribute(ATTR_ACCESSKEY, dsValue); break; case HTMLTEXTAREAELEMENT_COLS: ((ElementImpl *)impl)->setAttribute(ATTR_COLS,dsValue); break; case HTMLTEXTAREAELEMENT_DISABLED: bValue=(bool)JSVAL_TO_INT(*vp); ((ElementImpl *)impl)->setAttribute(ATTR_DISABLED, bValue ? "" : 0); break; case HTMLTEXTAREAELEMENT_NAME: ((ElementImpl *)impl)->setAttribute(ATTR_NAME, dsValue); break; case HTMLTEXTAREAELEMENT_READONLY: bValue=(bool)JSVAL_TO_INT(*vp); ((ElementImpl *)impl)->setAttribute(ATTR_READONLY, bValue ? "" : 0); break; case HTMLTEXTAREAELEMENT_ROWS: ((ElementImpl *)impl)->setAttribute(ATTR_ROWS,dsValue); break; case HTMLTEXTAREAELEMENT_TABINDEX: ((ElementImpl *)impl)->setAttribute(ATTR_TABINDEX,dsValue); break; case HTMLTEXTAREAELEMENT_VALUE: ((HTMLTextAreaElementImpl *)impl)->setValue(dsValue); break; } } return JS_TRUE;}static JSBool HTMLTextAreaElementBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSTextAreaPrivate *mTextAreaPriv=(myJSTextAreaPrivate *)JS_GetPrivate(cx,obj); HTMLTextAreaElementImpl *impl=(HTMLTextAreaElementImpl *)mTextAreaPriv->CurNode; if(!impl)return JS_FALSE; impl->blur(); return JS_TRUE;}static JSBool HTMLTextAreaElementFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSTextAreaPrivate *mTextAreaPriv=(myJSTextAreaPrivate *)JS_GetPrivate(cx,obj); HTMLTextAreaElementImpl *impl=(HTMLTextAreaElementImpl *)mTextAreaPriv->CurNode; if(!impl)return JS_FALSE; impl->focus(); return JS_TRUE;}static JSBool HTMLTextAreaElementSelect(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSTextAreaPrivate *mTextAreaPriv=(myJSTextAreaPrivate *)JS_GetPrivate(cx,obj); HTMLTextAreaElementImpl *impl=(HTMLTextAreaElementImpl *)mTextAreaPriv->CurNode; if(!impl)return JS_FALSE; impl->select(); return JS_TRUE;}static JSPropertySpec HTMLTextAreaElementProperties[] ={ {"defaultValue", HTMLTEXTAREAELEMENT_DEFAULTVALUE, JSPROP_ENUMERATE}, {"form", HTMLTEXTAREAELEMENT_FORM, JSPROP_ENUMERATE | JSPROP_READONLY}, {"accessKey", HTMLTEXTAREAELEMENT_ACCESSKEY, JSPROP_ENUMERATE}, {"cols", HTMLTEXTAREAELEMENT_COLS, JSPROP_ENUMERATE}, {"disabled", HTMLTEXTAREAELEMENT_DISABLED, JSPROP_ENUMERATE}, {"name", HTMLTEXTAREAELEMENT_NAME, JSPROP_ENUMERATE}, {"readOnly", HTMLTEXTAREAELEMENT_READONLY, JSPROP_ENUMERATE}, {"rows", HTMLTEXTAREAELEMENT_ROWS, JSPROP_ENUMERATE}, {"tabIndex", HTMLTEXTAREAELEMENT_TABINDEX, JSPROP_ENUMERATE}, {"type", HTMLTEXTAREAELEMENT_TYPE, JSPROP_ENUMERATE | JSPROP_READONLY}, {"value", HTMLTEXTAREAELEMENT_VALUE, JSPROP_ENUMERATE}, {0}};JSClass HTMLTextAreaElementClass = { "HTMLTextAreaElement", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, GetHTMLTextAreaElementProperty, SetHTMLTextAreaElementProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub };static JSFunctionSpec HTMLTextAreaElementMethods[] = { {"blur", HTMLTextAreaElementBlur, 0}, {"focus", HTMLTextAreaElementFocus, 0}, {"select", HTMLTextAreaElementSelect, 0}, {0}};JSObject* InitHTMLTextAreaElementClass(JSContext *cx,JSObject *globalObj,JSObject *proto){ JSObject *obj; obj = JS_DefineObject (cx,globalObj, "HTMLTextAreaElement", &HTMLTextAreaElementClass,proto,JSPROP_ENUMERATE); JS_DefineProperties (cx,obj,HTMLTextAreaElementProperties); JS_DefineFunctions (cx,obj,HTMLTextAreaElementMethods); return obj;}JSObject* NewScriptHTMLTextAreaElement(JSContext *cx,JSObject *proto,JSObject *parent,ElementImpl *eImpl){ JSObject *obj; JSObject *global = JS_GetGlobalObject(cx); jsval vp; if ((JS_TRUE == JS_LookupProperty(cx, global, "HTMLTextAreaElement", &vp) && JSVAL_IS_OBJECT(vp))) obj=JS_NewObject(cx,&HTMLTextAreaElementClass,JSVAL_TO_OBJECT(vp),NULL); else obj=InitHTMLTextAreaElementClass(cx,JS_GetParent(cx,proto),proto); myJSTextAreaPrivate *mTextAreaPrivate=new myJSTextAreaPrivate; mTextAreaPrivate->CurNode=(ElementImpl*)eImpl; JS_SetPrivate(cx,obj,(void*)mTextAreaPrivate); return obj;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -