⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgjs_htmlformelement.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
字号:
#include "mgjs_main.h"#include <htmlattrs.h>#include <html_formimpl.h>#include <html_miscimpl.h>#include <htmltags.h>#define TEMPSTRINGMAX 512static JSBool GetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool SetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);static JSBool EnumerateHTMLFormElement(JSContext *cx, JSObject *obj);static JSBool ResolveHTMLFormElement(JSContext *cx, JSObject *obj,jsval id);static JSBool FinalizeHTMLFormElement(JSContext *cx, JSObject *obj);static JSBool HTMLFormElementSubmit (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool HTMLFormElementReset (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool NSHTMLFormElementNamedItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);static JSBool NSHTMLFormElementItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);bool HTMLFORMELEMENT_IsInternalMethod(char s[]);static JSBool HTMLFORMELEMENT_GetElementByNameCommon(JSContext *cx, JSObject *obj, DOMString elementName,jsval *rval);static JSBool HTMLFORMELEMENT_GetElementByIndexCommon(JSContext *cx, JSObject *obj, int index,jsval *rval);		enum HTMLFormElement_slots {  HTMLFORMELEMENT_ELEMENTS ,  HTMLFORMELEMENT_LENGTH ,  HTMLFORMELEMENT_NAME ,  HTMLFORMELEMENT_ACCEPTCHARSET ,  HTMLFORMELEMENT_ACTION ,  HTMLFORMELEMENT_ENCTYPE ,  HTMLFORMELEMENT_METHOD ,  HTMLFORMELEMENT_TARGET ,    NSHTMLFORMELEMENT_ENCODING ,};static JSBool GetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){	myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj);	JSObject *eobj;	DOMString ds;	char s[TEMPSTRINGMAX+1];	JSString *jss;	long int len;	bool bIsInternalMethod;	if(!mFormPrivate)return JS_FALSE;			HTMLElementImpl *impl;	impl=(HTMLElementImpl*)mFormPrivate->CurNode;	if (JSVAL_IS_INT(id)) {		switch (JSVAL_TO_INT(id)) {        case HTMLFORMELEMENT_ELEMENTS:			eobj=NewScriptHTMLCollectionElement(cx,JS_GetPrototype(cx,obj),0,impl,FORM_ELEMENTS);			*vp=OBJECT_TO_JSVAL(eobj);			break;		case HTMLFORMELEMENT_LENGTH:			len=((HTMLFormElementImpl*)impl)->length();				*vp=INT_TO_JSVAL(len);			break;		case HTMLFORMELEMENT_NAME:			ds=impl->getAttribute(ATTR_NAME);			*vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string()));			break;		case HTMLFORMELEMENT_METHOD:			ds=impl->getAttribute(ATTR_METHOD);			*vp=STRING_TO_JSVAL (JS_NewStringCopyZ (cx,ds.string()));			break;		case HTMLFORMELEMENT_TARGET:			ds=impl->getAttribute(ATTR_TARGET);			*vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string()));			break;		case HTMLFORMELEMENT_ACCEPTCHARSET:			ds=impl->getAttribute(ATTR_ACCEPT_CHARSET);			*vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string()));			break;		case HTMLFORMELEMENT_ENCTYPE:			ds=impl->getAttribute(ATTR_ENCTYPE);			*vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string()));			break;		case HTMLFORMELEMENT_ACTION:			ds=impl->getAttribute(ATTR_ACTION);			*vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ds.string()));			break;		}	}	else		{		if (!(jss = JS_ValueToString (cx, id)))return JS_FALSE;  		strncpy(s,(const char*)JS_GetStringBytes (jss),TEMPSTRINGMAX);		bIsInternalMethod=HTMLFORMELEMENT_IsInternalMethod(s);		if(!bIsInternalMethod)			return HTMLFORMELEMENT_GetElementByNameCommon(cx,obj,s,vp);		}	return JS_TRUE;}static JSBool SetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){	myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj);	HTMLElementImpl *impl;	impl=(HTMLElementImpl*)mFormPrivate->CurNode;	if(!impl)return JS_FALSE;	DOMString dsValue;	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)) {#if 0		//readonly					    case HTMLFORMELEMENT_ELEMENTS:		case HTMLFORMELEMENT_LENGTH:#endif						case HTMLFORMELEMENT_NAME:    		((ElementImpl *)impl)->setAttribute(ATTR_NAME, dsValue);			break;		case HTMLFORMELEMENT_ACCEPTCHARSET:    		((ElementImpl *)impl)->setAttribute(ATTR_ACCEPT_CHARSET, dsValue);			break;		case HTMLFORMELEMENT_ACTION:		    ((ElementImpl *)impl)->setAttribute(ATTR_ACTION, dsValue);			break;		case HTMLFORMELEMENT_ENCTYPE:    		((ElementImpl *)impl)->setAttribute(ATTR_ENCTYPE, dsValue);			break;		case HTMLFORMELEMENT_METHOD:    		((ElementImpl *)impl)->setAttribute(ATTR_METHOD, dsValue);			break;		case HTMLFORMELEMENT_TARGET:			((ElementImpl *)impl)->setAttribute(ATTR_TARGET, dsValue);			break;		}	}	return JS_TRUE;}static JSBool EnumerateHTMLFormElement(JSContext *cx, JSObject *obj){	return JS_EnumerateStandardClasses(cx,obj);}static JSBool ResolveHTMLFormElement(JSContext *cx, JSObject *obj,jsval id){	return JS_TRUE;}static JSBool FinalizeHTMLFormElement(JSContext *cx, JSObject *obj){	return JS_TRUE;}static JSBool NSHTMLFormElementNamedItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	DOMString elementName;	JSString *jss; 	if(argc<1)return JS_FALSE; 	if (!(jss = JS_ValueToString (cx, argv[0])))return JS_FALSE;  	elementName = (const char*)JS_GetStringBytes (jss);	return HTMLFORMELEMENT_GetElementByNameCommon(cx,obj,elementName,rval);}static JSBool NSHTMLFormElementItem (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	int index;	if(argc<1)return JS_FALSE;    index = JSVAL_TO_INT(argv[0]);	if(index<0)return JS_FALSE;	return HTMLFORMELEMENT_GetElementByIndexCommon(cx,obj,index,rval);}static JSBool HTMLFormElementSubmit (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj);	DOM::HTMLFormElementImpl* formImpl;	formImpl=(HTMLFormElementImpl*)mFormPrivate->CurNode;	if(!formImpl)return JS_FALSE;	formImpl->submit();	return JS_TRUE;}static JSBool HTMLFormElementReset (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj);	DOM::HTMLFormElementImpl* formImpl;	formImpl=(HTMLFormElementImpl*)mFormPrivate->CurNode;	if(!formImpl)return JS_FALSE;	formImpl->reset();	return JS_TRUE;}	JSClass HTMLFormElementClass = {  "HTMLFormElement",   JSCLASS_HAS_PRIVATE,  JS_PropertyStub,JS_PropertyStub,  GetHTMLFormElementProperty,SetHTMLFormElementProperty,  EnumerateHTMLFormElement,ResolveHTMLFormElement,  JS_ConvertStub, JS_FinalizeStub};static JSPropertySpec HTMLFormElementProperties[] ={  {"elements",    HTMLFORMELEMENT_ELEMENTS,    JSPROP_ENUMERATE | JSPROP_READONLY},  {"length",    HTMLFORMELEMENT_LENGTH,    JSPROP_ENUMERATE | JSPROP_READONLY},  {"name",    HTMLFORMELEMENT_NAME,    JSPROP_ENUMERATE},  {"acceptCharset",    HTMLFORMELEMENT_ACCEPTCHARSET,    JSPROP_ENUMERATE},  {"action",    HTMLFORMELEMENT_ACTION,    JSPROP_ENUMERATE},  {"enctype",    HTMLFORMELEMENT_ENCTYPE,    JSPROP_ENUMERATE},  {"method",    HTMLFORMELEMENT_METHOD,    JSPROP_ENUMERATE},  {"target",    HTMLFORMELEMENT_TARGET,    JSPROP_ENUMERATE},  {0}};static JSFunctionSpec HTMLFormElementMethods[] = {  {"submit",          HTMLFormElementSubmit,     0},  {"reset",          HTMLFormElementReset,     0},  {"namedItem",          NSHTMLFormElementNamedItem,     1},  {"item",          NSHTMLFormElementItem,     1},  {0}};JSObject* InitFormElementClass(JSContext *cx,JSObject *globalObj,JSObject *proto){	JSObject *Obj;	Obj = JS_DefineObject (cx,globalObj, "HtmlFormElement", &HTMLFormElementClass,proto,JSPROP_ENUMERATE);    JS_DefineProperties (cx,Obj,HTMLFormElementProperties);    JS_DefineFunctions (cx,Obj,HTMLFormElementMethods);	return Obj;}				JSObject* NewScriptHTMLFormElement(JSContext *cx,JSObject *proto,JSObject *parent,ElementImpl *eImpl){	JSObject *obj;	JSObject *global = JS_GetGlobalObject(cx);	jsval vp;	if ((JS_TRUE == JS_LookupProperty(cx, global, "HtmlFormElement", &vp) && JSVAL_IS_OBJECT(vp)))		obj=JS_NewObject(cx,&HTMLFormElementClass,JSVAL_TO_OBJECT(vp),NULL);	else		obj=InitFormElementClass(cx,JS_GetParent(cx,proto),proto);	myJSFormPrivate *mFormPrivate=new myJSFormPrivate;	mFormPrivate->CurNode=(ElementImpl*)eImpl;	JS_SetPrivate(cx,obj,(void*)mFormPrivate);	return obj;}static JSBool HTMLFORMELEMENT_GetElementByNameCommon(JSContext *cx, JSObject *obj, DOMString elementName,jsval *rval){	myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj);	HTMLElementImpl *nImpl;	nImpl=(HTMLElementImpl*)mFormPrivate->CurNode;	NodeImpl* CurNode;	CurNode=(HTMLElementImpl *)HTMLCollectionImpl_namedItem(nImpl,elementName,FORM_ELEMENTS);	ElementImpl* eImpl=(ElementImpl*)(CurNode);	if(!CurNode)return JS_FALSE;	return HTML_NewObjectByElementCommon(cx,obj,JS_GetPrototype(cx,obj),0,eImpl,rval);}static JSBool HTMLFORMELEMENT_GetElementByIndexCommon(JSContext *cx, JSObject *obj, int index,jsval *rval){	myJSFormPrivate *mFormPrivate=(myJSFormPrivate *)JS_GetPrivate(cx,obj);	HTMLElementImpl *nImpl;	nImpl=(HTMLElementImpl*)mFormPrivate->CurNode;	NodeImpl* CurNode;	CurNode=(HTMLElementImpl *)HTMLCollectionImpl_item(nImpl,index,FORM_ELEMENTS);	ElementImpl* eImpl=(ElementImpl*)(CurNode);	if(!CurNode)return JS_FALSE;	return HTML_NewObjectByElementCommon(cx,obj,JS_GetPrototype(cx,obj),0,eImpl,rval);}bool HTMLFORMELEMENT_IsInternalMethod(char s[]){	return !strcmp(s,"submit")||!strcmp(s,"reset")			||!strcmp(s,"namedItem")||!strcmp(s,"item");}#undef TEMPSTRINGMAX

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -