📄 mgjs_main.cpp
字号:
// NB: some functions could be added or finished in coming version, i.e, window's some methods and// events handling which must conform with HTML or DOM.// #include "mgjs_main.h"#include "mgmessage.h"#include <../misc/htmlattrs.h>#include "mgjs_EventConst.h"#define MGJS_TEXT_BROWSER "Browser"#define TEMPSTRINGMAX 512#define DEBUG_JAVASCRIPT 0extern void SetStatusForBar(char * strStatus);extern void GetStatusForBar(char * strStatus,int length);extern BOOL GUIAPI SetTimer (HWND hWnd, int id, int speed);extern BOOL GUIAPI KillTimer (HWND hWnd, int id);bool mgJsLocateTimer(MGHTMLView* view,int id);bool mgJsFreeAllTimer(MGHTMLView* view);JSBool mgJsSetEvent(JSContext *cx, JSObject *obj, jsval *vp, int EventType);bool mgJsLocateEvent(MGHTMLView* view,int type);bool mgJsFreeCurrentEvent(MGHTMLView* view);bool mgJsFreeAllEvent(MGHTMLView* view);static JSBool GetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool WindowInternalAlert (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalConfirm (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalPrompt (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalScrollTo (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalScrollBy (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalOpen(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalClose(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalClearTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSetTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalCaptureEvents(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalReleaseEvents(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalRouteEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalBack(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalForward(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalHome(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalStop(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalPrint(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalMoveTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalMoveBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalResizeTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalResizeBy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSizeToContent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalGetAttention(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalScroll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalClearInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSetInterval(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalEnableExternalCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalDisableExternalCapture(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalSetCursor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalOpenDialog(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalUpdateCommands(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalEscape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalUnescape(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventTargetAddEventListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventTargetRemoveEventListener(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool EventTargetDispatchEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool ViewCSSGetComputedStyle(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowGetSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowInternalDump(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowScrollByPages(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool WindowScrollByLines(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); enum Window_slots { WINDOW_DOCUMENT , WINDOW_PARENT , WINDOW_SCROLLBARS , WINDOW_FRAMES , WINDOW_NAME , WINDOW_SCROLLX , WINDOW_SCROLLY , WINDOWINTERNAL_WINDOW , WINDOWINTERNAL_SELF , WINDOWINTERNAL_NAVIGATOR , WINDOWINTERNAL_SCREEN , WINDOWINTERNAL_HISTORY , WINDOWINTERNAL_STATUSBAR , WINDOWINTERNAL_DIRECTORIES , WINDOWINTERNAL_CLOSED , WINDOWINTERNAL_CRYPTO , WINDOWINTERNAL_PKCS11 , WINDOWINTERNAL_OPENER , WINDOWINTERNAL_STATUS , WINDOWINTERNAL_DEFAULTSTATUS , WINDOWINTERNAL_LOCATION , WINDOWINTERNAL_TITLE , WINDOWINTERNAL_INNERWIDTH , WINDOWINTERNAL_INNERHEIGHT , WINDOWINTERNAL_OUTERWIDTH , WINDOWINTERNAL_OUTERHEIGHT , WINDOWINTERNAL_SCREENX , WINDOWINTERNAL_SCREENY , WINDOWINTERNAL_PAGEXOFFSET , WINDOWINTERNAL_PAGEYOFFSET , WINDOWINTERNAL_LENGTH , WINDOWEVENTOWNER_ONMOUSEDOWN , WINDOWEVENTOWNER_ONMOUSEUP , WINDOWEVENTOWNER_ONCLICK , WINDOWEVENTOWNER_ONMOUSEOVER , WINDOWEVENTOWNER_ONMOUSEOUT , WINDOWEVENTOWNER_ONKEYDOWN , WINDOWEVENTOWNER_ONKEYUP , WINDOWEVENTOWNER_ONKEYPRESS , WINDOWEVENTOWNER_ONMOUSEMOVE , WINDOWEVENTOWNER_ONFOCUS , WINDOWEVENTOWNER_ONBLUR , WINDOWEVENTOWNER_ONSUBMIT , WINDOWEVENTOWNER_ONRESET , WINDOWEVENTOWNER_ONCHANGE , WINDOWEVENTOWNER_ONSELECT , WINDOWEVENTOWNER_ONLOAD , WINDOWEVENTOWNER_ONUNLOAD , WINDOWEVENTOWNER_ONCLOSE , WINDOWEVENTOWNER_ONABORT , WINDOWEVENTOWNER_ONERROR , WINDOWEVENTOWNER_ONPAINT , WINDOWEVENTOWNER_ONDRAGDROP , WINDOWEVENTOWNER_ONRESIZE , WINDOWEVENTOWNER_ONSCROLL , ABSTRACTVIEW_DOCUMENT ,};static JSBool GetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp){ RECT rc; HWND hWnd=mgJSGethWnd(cx); int w,h; char s[TEMPSTRINGMAX+1]; MGHTMLView *view = mgJSGetView(cx); DOM::HTMLDocumentImpl *pDoc; DOM::DOMString ds; pDoc=mgJSGetDoc(cx); if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case WINDOW_DOCUMENT: *vp=OBJECT_TO_JSVAL(mgJSGetDocumentObj(cx)); break; case WINDOWINTERNAL_NAVIGATOR: *vp=OBJECT_TO_JSVAL(mgJSGetNavigatorObj(cx)); break; case WINDOWINTERNAL_LOCATION: *vp=OBJECT_TO_JSVAL(mgJSGetLocationObj(cx)); break; case WINDOWINTERNAL_INNERWIDTH: GetClientRect (hWnd,&rc); w=rc.right-rc.left; *vp=INT_TO_JSVAL(w); break; case WINDOWINTERNAL_INNERHEIGHT: GetClientRect (hWnd,&rc); h=rc.bottom-rc.top; *vp=INT_TO_JSVAL(h); break; case WINDOWINTERNAL_HISTORY: *vp=OBJECT_TO_JSVAL(mgJSGetHistoryObj(cx)); break; case WINDOW_NAME: *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,"This is a js name property.")); break; case WINDOWINTERNAL_STATUS: GetStatusForBar(s,TEMPSTRINGMAX); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,s)); break; case WINDOWEVENTOWNER_ONLOAD: ds = pDoc->body()->getAttribute(ATTR_ONLOAD); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,ds.string())); break; case WINDOW_PARENT: break; case WINDOW_SCROLLBARS: break; case WINDOW_FRAMES: break; case WINDOW_SCROLLX: break; case WINDOW_SCROLLY: break; case WINDOWINTERNAL_WINDOW: *vp=OBJECT_TO_JSVAL(obj); break; case WINDOWINTERNAL_SELF : *vp=OBJECT_TO_JSVAL(obj); break; case WINDOWINTERNAL_SCREEN : break; case WINDOWINTERNAL_STATUSBAR: break; case WINDOWINTERNAL_DIRECTORIES: break; case WINDOWINTERNAL_CLOSED : break; case WINDOWINTERNAL_CRYPTO : //TODO: break; case WINDOWINTERNAL_PKCS11 : //TODO: break; case WINDOWINTERNAL_OPENER : break; case WINDOWINTERNAL_DEFAULTSTATUS : //TODO: break; case WINDOWINTERNAL_TITLE : break; case WINDOWINTERNAL_OUTERWIDTH : GetWindowRect (hWnd,&rc); w=rc.right-rc.left; *vp=INT_TO_JSVAL(w); break; case WINDOWINTERNAL_OUTERHEIGHT : GetWindowRect (hWnd,&rc); h=rc.bottom-rc.top; *vp=INT_TO_JSVAL(h); break; case WINDOWINTERNAL_SCREENX : GetClientRect (hWnd,&rc); w = rc.left; ClientToScreen( hWnd, &w, &h); *vp=INT_TO_JSVAL(w); break; case WINDOWINTERNAL_SCREENY : GetClientRect (hWnd,&rc); h = rc.top; ClientToScreen( hWnd, &w, &h); *vp=INT_TO_JSVAL(h); break; case WINDOWINTERNAL_PAGEXOFFSET : *vp=INT_TO_JSVAL(view->m_xOffset); break; case WINDOWINTERNAL_PAGEYOFFSET : *vp=INT_TO_JSVAL(view->m_yOffset); break; case WINDOWINTERNAL_LENGTH : //TODO: break; case WINDOWEVENTOWNER_ONMOUSEDOWN: break; case WINDOWEVENTOWNER_ONMOUSEUP: break; case WINDOWEVENTOWNER_ONCLICK: break; case WINDOWEVENTOWNER_ONMOUSEOVER: break; case WINDOWEVENTOWNER_ONMOUSEOUT: break; case WINDOWEVENTOWNER_ONKEYDOWN: break; case WINDOWEVENTOWNER_ONKEYUP: break; case WINDOWEVENTOWNER_ONKEYPRESS: break; case WINDOWEVENTOWNER_ONMOUSEMOVE: break; case WINDOWEVENTOWNER_ONFOCUS: break; case WINDOWEVENTOWNER_ONBLUR: break; case WINDOWEVENTOWNER_ONSUBMIT: break; case WINDOWEVENTOWNER_ONRESET: break; case WINDOWEVENTOWNER_ONCHANGE: break; case WINDOWEVENTOWNER_ONSELECT: break; case WINDOWEVENTOWNER_ONUNLOAD: break; case WINDOWEVENTOWNER_ONCLOSE: break; case WINDOWEVENTOWNER_ONABORT: break; case WINDOWEVENTOWNER_ONERROR: break; case WINDOWEVENTOWNER_ONPAINT: break; case WINDOWEVENTOWNER_ONDRAGDROP: break; case WINDOWEVENTOWNER_ONRESIZE: break; case WINDOWEVENTOWNER_ONSCROLL: break; } } return JS_TRUE;}static JSBool SetWindowProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp){ JSString *jss; // MGHTMLView *view = mgJSGetView(cx); DOM::HTMLDocumentImpl *pDoc; DOM::DOMString ds; pDoc=mgJSGetDoc(cx); int32 eventType; char s[TEMPSTRINGMAX+1]; if ((jss = JS_ValueToString (cx,*vp))) strncpy(s,JS_GetStringBytes (jss),TEMPSTRINGMAX); else s[0]=0; if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case WINDOWINTERNAL_STATUS: SetStatusForBar(s); break; case WINDOWEVENTOWNER_ONLOAD: pDoc->body()->setAttribute(ATTR_ONLOAD,s); break; case WINDOW_DOCUMENT: break; case WINDOW_PARENT: break; case WINDOW_SCROLLBARS: break; case WINDOW_FRAMES: break; case WINDOW_NAME: break; case WINDOW_SCROLLX: break; case WINDOW_SCROLLY: break;#if 0 //readonly property. case WINDOWINTERNAL_WINDOW: break; case WINDOWINTERNAL_SELF : break; case WINDOWINTERNAL_NAVIGATOR : break; case WINDOWINTERNAL_SCREEN : break; case WINDOWINTERNAL_HISTORY : break; case WINDOWINTERNAL_STATUSBAR: break; case WINDOWINTERNAL_DIRECTORIES: break; case WINDOWINTERNAL_CLOSED : break; case WINDOWINTERNAL_CRYPTO : break; case WINDOWINTERNAL_PKCS11 : break;#endif case WINDOWINTERNAL_OPENER : break; case WINDOWINTERNAL_DEFAULTSTATUS : break; case WINDOWINTERNAL_LOCATION : break; case WINDOWINTERNAL_TITLE : break; case WINDOWINTERNAL_INNERWIDTH : break; case WINDOWINTERNAL_INNERHEIGHT : break; case WINDOWINTERNAL_OUTERWIDTH : break; case WINDOWINTERNAL_OUTERHEIGHT : break; case WINDOWINTERNAL_SCREENX : break; case WINDOWINTERNAL_SCREENY : break; case WINDOWINTERNAL_PAGEXOFFSET : break; case WINDOWINTERNAL_PAGEYOFFSET : break;#if 0 //readonly case WINDOWINTERNAL_LENGTH : break;#endif default: { eventType = 0; switch (JSVAL_TO_INT(id)) { case WINDOWEVENTOWNER_ONMOUSEDOWN: eventType = mgjsDOMEvent::MOUSEDOWN; break; case WINDOWEVENTOWNER_ONMOUSEUP: eventType = mgjsDOMEvent::MOUSEUP; break; case WINDOWEVENTOWNER_ONCLICK: eventType = mgjsDOMEvent::CLICK; break; case WINDOWEVENTOWNER_ONMOUSEOVER:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -