📄 mgjs_event.cpp
字号:
#include "mgjs_main.h"#include "mgjs_EventConst.h"static JSBool GetEventProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetEventProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool EventStopPropagation(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventPreventBubble(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventPreventCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventPreventDefault(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventInitEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);enum Event_slots { EVENT_TYPE , EVENT_TARGET , EVENT_CURRENTTARGET , EVENT_ORIGINALTARGET , EVENT_EVENTPHASE , EVENT_BUBBLES , EVENT_CANCELABLE , EVENT_TIMESTAMP };static JSBool GetEventProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ MGHTMLView *view = mgJSGetView(cx); DOMString dsReturn=(const char*)""; if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case EVENT_TYPE : if(view->m_JsEventType>=1&&view->m_JsEventType<=128) dsReturn="button"; else if(view->m_JsEventType>=256&&view->m_JsEventType<=2048) dsReturn="key"; *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case EVENT_TARGET : break; case EVENT_CURRENTTARGET : break; case EVENT_ORIGINALTARGET : break; case EVENT_EVENTPHASE : break; case EVENT_BUBBLES : break; case EVENT_CANCELABLE : break; case EVENT_TIMESTAMP : break; } } return JS_TRUE;}static JSBool SetEventProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){#if 0 if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) {#if 0 //NB: readonly property case EVENT_TYPE : break; case EVENT_TARGET : break; case EVENT_CURRENTTARGET : break; case EVENT_ORIGINALTARGET : break; case EVENT_EVENTPHASE : break; case EVENT_BUBBLES : break; case EVENT_CANCELABLE : break; case EVENT_TIMESTAMP : break;#endif } }#endif return JS_TRUE;}//// Native method StopPropagation//static JSBool EventStopPropagation(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool EventPreventBubble(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool EventPreventCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool EventPreventDefault(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}static JSBool EventInitEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ //TODO: return JS_TRUE;}//// Event class properties//static JSPropertySpec EventProperties[] ={ {"type", EVENT_TYPE, JSPROP_ENUMERATE | JSPROP_READONLY}, {"target", EVENT_TARGET, JSPROP_ENUMERATE | JSPROP_READONLY}, {"currentTarget", EVENT_CURRENTTARGET, JSPROP_ENUMERATE | JSPROP_READONLY}, {"originalTarget", EVENT_ORIGINALTARGET, JSPROP_ENUMERATE | JSPROP_READONLY}, {"eventPhase", EVENT_EVENTPHASE, JSPROP_ENUMERATE | JSPROP_READONLY}, {"bubbles", EVENT_BUBBLES, JSPROP_ENUMERATE | JSPROP_READONLY}, {"cancelable", EVENT_CANCELABLE, JSPROP_ENUMERATE | JSPROP_READONLY}, {"timeStamp", EVENT_TIMESTAMP, JSPROP_ENUMERATE | JSPROP_READONLY}, {0}};//// class for Event//JSClass EventClass = { "Event", JSCLASS_HAS_PRIVATE , JS_PropertyStub, JS_PropertyStub, GetEventProperty, SetEventProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub };//// Event class methods//static JSFunctionSpec EventMethods[] = { {"stopPropagation", EventStopPropagation, 0}, {"preventBubble", EventPreventBubble, 0}, {"preventCapture", EventPreventCapture, 0}, {"preventDefault", EventPreventDefault, 0}, {"initEvent", EventInitEvent, 3}, {0}};JSObject* InitEventClass(JSContext *cx,JSObject *globalObj,JSObject *proto){ JSObject *obj; obj = JS_DefineObject (cx,globalObj, "Event", &EventClass,proto,JSPROP_ENUMERATE); JS_DefineProperties (cx,obj,EventProperties); JS_DefineFunctions (cx,obj,EventMethods); jsval vp; vp = INT_TO_JSVAL(mgjsDOMEvent::CAPTURING_PHASE); JS_SetProperty(cx, obj, "CAPTURING_PHASE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::AT_TARGET); JS_SetProperty(cx, obj, "AT_TARGET", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::BUBBLING_PHASE); JS_SetProperty(cx, obj, "BUBBLING_PHASE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOUSEDOWN); JS_SetProperty(cx, obj, "MOUSEDOWN", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOUSEUP); JS_SetProperty(cx, obj, "MOUSEUP", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOUSEOVER); JS_SetProperty(cx, obj, "MOUSEOVER", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOUSEOUT); JS_SetProperty(cx, obj, "MOUSEOUT", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOUSEMOVE); JS_SetProperty(cx, obj, "MOUSEMOVE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOUSEDRAG); JS_SetProperty(cx, obj, "MOUSEDRAG", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::CLICK); JS_SetProperty(cx, obj, "CLICK", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::DBLCLICK); JS_SetProperty(cx, obj, "DBLCLICK", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::KEYDOWN); JS_SetProperty(cx, obj, "KEYDOWN", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::KEYUP); JS_SetProperty(cx, obj, "KEYUP", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::KEYPRESS); JS_SetProperty(cx, obj, "KEYPRESS", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::DRAGDROP); JS_SetProperty(cx, obj, "DRAGDROP", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::FOCUS); JS_SetProperty(cx, obj, "FOCUS", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::BLUR); JS_SetProperty(cx, obj, "BLUR", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::SELECT); JS_SetProperty(cx, obj, "SELECT", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::CHANGE); JS_SetProperty(cx, obj, "CHANGE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::RESET); JS_SetProperty(cx, obj, "RESET", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::SUBMIT); JS_SetProperty(cx, obj, "SUBMIT", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::SCROLL); JS_SetProperty(cx, obj, "SCROLL", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::LOAD); JS_SetProperty(cx, obj, "LOAD", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::UNLOAD); JS_SetProperty(cx, obj, "UNLOAD", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::XFER_DONE); JS_SetProperty(cx, obj, "XFER_DONE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::ABORT); JS_SetProperty(cx, obj, "ABORT", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::ERROR); JS_SetProperty(cx, obj, "ERROR", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::LOCATE); JS_SetProperty(cx, obj, "LOCATE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::MOVE); JS_SetProperty(cx, obj, "MOVE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::RESIZE); JS_SetProperty(cx, obj, "RESIZE", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::FORWARD); JS_SetProperty(cx, obj, "FORWARD", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::HELP); JS_SetProperty(cx, obj, "HELP", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::BACK); JS_SetProperty(cx, obj, "BACK", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::TEXT); JS_SetProperty(cx, obj, "TEXT", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::ALT_MASK); JS_SetProperty(cx, obj, "ALT_MASK", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::CONTROL_MASK); JS_SetProperty(cx, obj, "CONTROL_MASK", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::SHIFT_MASK); JS_SetProperty(cx, obj, "SHIFT_MASK", &vp); vp = INT_TO_JSVAL(mgjsDOMEvent::META_MASK); JS_SetProperty(cx, obj, "META_MASK", &vp); return obj;}JSObject* NewScriptEvent(JSContext *cx,JSObject *proto,JSObject *parent,ElementImpl *eImpl){ JSObject *obj; JSObject *global = JS_GetGlobalObject(cx); jsval vp; if ((JS_TRUE == JS_LookupProperty(cx, global, "Event", &vp) && JSVAL_IS_OBJECT(vp))) obj=JS_NewObject(cx,&EventClass,JSVAL_TO_OBJECT(vp),NULL); else obj=InitEventClass(cx,JS_GetParent(cx,proto),proto); return obj;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -