📄 mgjs_htmltableelement.cpp
字号:
#include "mgjs_main.h"#include <../misc/htmlattrs.h> #include <html_formimpl.h>#include <html_tableimpl.h>static JSBool GetHTMLTableElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetHTMLTableElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool HTMLTableElementCreateTHead(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementDeleteTHead(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementCreateTFoot(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementDeleteTFoot(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementCreateCaption(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementDeleteCaption(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementInsertRow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLTableElementDeleteRow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);enum HTMLTableElement_slots { HTMLTABLEELEMENT_CAPTION , HTMLTABLEELEMENT_THEAD , HTMLTABLEELEMENT_TFOOT , HTMLTABLEELEMENT_ROWS , HTMLTABLEELEMENT_TBODIES , HTMLTABLEELEMENT_ALIGN , HTMLTABLEELEMENT_BGCOLOR , HTMLTABLEELEMENT_BORDER , HTMLTABLEELEMENT_CELLPADDING , HTMLTABLEELEMENT_CELLSPACING , HTMLTABLEELEMENT_FRAME , HTMLTABLEELEMENT_RULES , HTMLTABLEELEMENT_SUMMARY , HTMLTABLEELEMENT_WIDTH ,};static JSBool GetHTMLTableElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ HTMLTableElementImpl *impl; // HTMLElementImpl *e; DOMString dsReturn=(const char*)""; // long int lReturn; // bool bReturn; JSObject *eobj;#if DEBUG_BY_XHTANG QString qs; // char s[1024];#endif myJSTablePrivate *mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; if (JSVAL_IS_INT(id)) { switch (JSVAL_TO_INT(id)) { case HTMLTABLEELEMENT_CAPTION: eobj=NewScriptHTMLTableCaptionElement(cx,JS_GetPrototype(cx,obj),0,impl->caption()); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLTABLEELEMENT_THEAD: eobj=NewScriptHTMLTableSectionElement(cx,JS_GetPrototype(cx,obj),0,impl->tHead()); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLTABLEELEMENT_TFOOT: eobj=NewScriptHTMLTableSectionElement(cx,JS_GetPrototype(cx,obj),0,impl->tFoot()); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLTABLEELEMENT_ROWS: eobj=NewScriptHTMLCollectionElement(cx,JS_GetPrototype(cx,obj),0,impl,TABLE_ROWS); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLTABLEELEMENT_TBODIES: eobj=NewScriptHTMLCollectionElement(cx,JS_GetPrototype(cx,obj),0,impl,TABLE_TBODIES); *vp=OBJECT_TO_JSVAL(eobj); break; case HTMLTABLEELEMENT_ALIGN: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_ALIGN); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_BGCOLOR: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_BGCOLOR); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_BORDER: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_BORDER); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_CELLPADDING: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_CELLPADDING); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_CELLSPACING: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_CELLSPACING); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_FRAME: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_FRAME); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_RULES: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_RULES); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_SUMMARY: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_SUMMARY); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; case HTMLTABLEELEMENT_WIDTH: dsReturn=((ElementImpl *)impl)->getAttribute(ATTR_WIDTH); *vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,dsReturn.string())); break; } } return JS_TRUE;}static JSBool SetHTMLTableElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ myJSTablePrivate *mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); HTMLTableElementImpl *impl; impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; DOMString dsValue; // bool bValue; 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 HTMLTABLEELEMENT_CAPTION:// ((HTMLTableElementImpl *)impl)// ->setCaption( ((HTMLTableCaptionElementImpl *)_caption.impl) ); break; case HTMLTABLEELEMENT_THEAD: break; case HTMLTABLEELEMENT_TFOOT: break;#if 0 //Note: the following two attributes are readonly. case HTMLTABLEELEMENT_ROWS: break; case HTMLTABLEELEMENT_TBODIES: break;#endif case HTMLTABLEELEMENT_ALIGN: ((ElementImpl *)impl)->setAttribute(ATTR_ALIGN, dsValue); break; case HTMLTABLEELEMENT_BGCOLOR: ((ElementImpl *)impl)->setAttribute(ATTR_BGCOLOR, dsValue); break; case HTMLTABLEELEMENT_BORDER: ((ElementImpl *)impl)->setAttribute(ATTR_BORDER, dsValue); break; case HTMLTABLEELEMENT_CELLPADDING: ((ElementImpl *)impl)->setAttribute(ATTR_CELLPADDING, dsValue); break; case HTMLTABLEELEMENT_CELLSPACING: ((ElementImpl *)impl)->setAttribute(ATTR_CELLSPACING, dsValue); break; case HTMLTABLEELEMENT_FRAME: ((ElementImpl *)impl)->setAttribute(ATTR_FRAME, dsValue); break; case HTMLTABLEELEMENT_RULES: ((ElementImpl *)impl)->setAttribute(ATTR_RULES, dsValue); break; case HTMLTABLEELEMENT_SUMMARY: ((ElementImpl *)impl)->setAttribute(ATTR_SUMMARY, dsValue); break; case HTMLTABLEELEMENT_WIDTH: ((ElementImpl *)impl)->setAttribute(ATTR_WIDTH, dsValue); break; } } return JS_TRUE;}static JSBool HTMLTableElementCreateTHead(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ HTMLTableElementImpl *impl; HTMLElementImpl *thead; myJSTablePrivate *mTablePrivate; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; thead=((HTMLTableElementImpl *)impl)->createTHead(); if(!thead)return JS_FALSE; //TODO:return value// *rval=OBJECT_TO_JSVAL(mTablePrivate->TableSectionElement); return JS_TRUE;} static JSBool HTMLTableElementDeleteTHead(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSTablePrivate *mTablePrivate; HTMLTableElementImpl *impl; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; ((HTMLTableElementImpl *)impl)->deleteTHead(); return JS_TRUE;}static JSBool HTMLTableElementCreateTFoot(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ HTMLTableElementImpl *impl; HTMLElementImpl *tfoot; myJSTablePrivate *mTablePrivate; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; tfoot=((HTMLTableElementImpl *)impl)->createTFoot(); if(!tfoot)return JS_FALSE;//TODO:return value // *rval=OBJECT_TO_JSVAL(mTablePrivate->TableSectionElement); return JS_TRUE;} static JSBool HTMLTableElementDeleteTFoot(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ myJSTablePrivate *mTablePrivate; HTMLTableElementImpl *impl; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; ((HTMLTableElementImpl *)impl)->deleteTFoot(); return JS_TRUE;} static JSBool HTMLTableElementCreateCaption(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ HTMLTableElementImpl *impl; HTMLElementImpl *caption=0; myJSTablePrivate *mTablePrivate; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); if(!mTablePrivate)return JS_FALSE; impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE;#if DEBUG_BY_XHTANG fprintf(stderr,"TableElement.CreateCaption goto...");#endif caption=((HTMLTableElementImpl *)impl)->createCaption(); if(!caption){ return JS_FALSE; }//TODO:return value// *rval=OBJECT_TO_JSVAL(mTablePrivate->TableCaptionElement); return JS_TRUE;} static JSBool HTMLTableElementDeleteCaption(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ HTMLTableElementImpl *impl; myJSTablePrivate *mTablePrivate; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; ((HTMLTableElementImpl *)impl)->deleteCaption(); return JS_TRUE;} static JSBool HTMLTableElementInsertRow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){#if DEBUG_BY_XHTANG // char s[1024],t[64]; // QString qs; #endif HTMLTableElementImpl *impl; HTMLElementImpl *eReturn; long int index; // bool bReturn; myJSTablePrivate *mTablePrivate; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); if(!mTablePrivate)return JS_FALSE; if(argc<1)return JS_FALSE; if (JSVAL_IS_INT(argv[0]))index=JSVAL_TO_INT(argv[0]); else return JS_FALSE; if(index<0)return JS_FALSE; impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl){#if DEBUG_BY_XHTANG fprintf(stderr,"%s","Error: impl is NULL.");#endif return JS_FALSE; } //TODO:Not Finished in KDE eReturn=((HTMLTableElementImpl *)impl)->insertRow( index ); if(!eReturn)return JS_FALSE;//TODO:return value // *rval=OBJECT_TO_JSVAL(mTablePrivate->TableRowElement); return JS_TRUE;} static JSBool HTMLTableElementDeleteRow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ HTMLTableElementImpl *impl; myJSTablePrivate *mTablePrivate; mTablePrivate=(myJSTablePrivate *)JS_GetPrivate(cx,obj); long int index; if(argc<1)return JS_FALSE; if (!JSVAL_IS_INT(argv[0]))return JS_FALSE; index=JSVAL_TO_INT(argv[0]); if(index<0)return JS_FALSE; impl=(HTMLTableElementImpl *)mTablePrivate->CurNode; if(!impl)return JS_FALSE; //TODO:Not Finished in KDE ((HTMLTableElementImpl *)impl)->deleteRow( index ); return JS_TRUE;} static JSPropertySpec HTMLTableElementProperties[] ={ {"caption", HTMLTABLEELEMENT_CAPTION, JSPROP_ENUMERATE}, {"tHead", HTMLTABLEELEMENT_THEAD, JSPROP_ENUMERATE}, {"tFoot", HTMLTABLEELEMENT_TFOOT, JSPROP_ENUMERATE}, {"rows", HTMLTABLEELEMENT_ROWS, JSPROP_ENUMERATE | JSPROP_READONLY}, {"tBodies", HTMLTABLEELEMENT_TBODIES, JSPROP_ENUMERATE | JSPROP_READONLY}, {"align", HTMLTABLEELEMENT_ALIGN, JSPROP_ENUMERATE}, {"bgColor", HTMLTABLEELEMENT_BGCOLOR, JSPROP_ENUMERATE}, {"border", HTMLTABLEELEMENT_BORDER, JSPROP_ENUMERATE}, {"cellPadding", HTMLTABLEELEMENT_CELLPADDING, JSPROP_ENUMERATE}, {"cellSpacing", HTMLTABLEELEMENT_CELLSPACING, JSPROP_ENUMERATE}, {"frame", HTMLTABLEELEMENT_FRAME, JSPROP_ENUMERATE}, {"rules", HTMLTABLEELEMENT_RULES, JSPROP_ENUMERATE}, {"summary", HTMLTABLEELEMENT_SUMMARY, JSPROP_ENUMERATE}, {"width", HTMLTABLEELEMENT_WIDTH, JSPROP_ENUMERATE}, {0}};JSClass HTMLTableElementClass = { "HTMLTableElement", JSCLASS_HAS_PRIVATE , JS_PropertyStub, JS_PropertyStub, GetHTMLTableElementProperty, SetHTMLTableElementProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub };static JSFunctionSpec HTMLTableElementMethods[] = { {"createTHead", HTMLTableElementCreateTHead, 0}, {"deleteTHead", HTMLTableElementDeleteTHead, 0}, {"createTFoot", HTMLTableElementCreateTFoot, 0}, {"deleteTFoot", HTMLTableElementDeleteTFoot, 0}, {"createCaption", HTMLTableElementCreateCaption, 0}, {"deleteCaption", HTMLTableElementDeleteCaption, 0}, {"insertRow", HTMLTableElementInsertRow, 1}, {"deleteRow", HTMLTableElementDeleteRow, 1}, {0}};JSObject* InitHTMLTableElementClass(JSContext *cx,JSObject *globalObj,JSObject *proto){ JSObject *obj; obj = JS_DefineObject (cx,globalObj, "HtmlTableElement", &HTMLTableElementClass,proto,JSPROP_ENUMERATE); JS_DefineProperties (cx,obj,HTMLTableElementProperties); JS_DefineFunctions (cx,obj,HTMLTableElementMethods); return obj;}JSObject* NewScriptHTMLTableElement(JSContext *cx,JSObject *proto,JSObject *parent,ElementImpl *eImpl){ JSObject *obj; JSObject *global = JS_GetGlobalObject(cx); jsval vp; if ((JS_TRUE == JS_LookupProperty(cx, global, "HtmlTableElement", &vp) && JSVAL_IS_OBJECT(vp))) obj=JS_NewObject(cx,&HTMLTableElementClass,JSVAL_TO_OBJECT(vp),NULL); else obj=InitHTMLTableElementClass(cx,JS_GetParent(cx,proto),proto); myJSTablePrivate *mTablePrivate=new myJSTablePrivate; mTablePrivate->CurNode=(ElementImpl*)eImpl; JS_SetPrivate(cx,obj,(void*)mTablePrivate); return obj;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -