internal static void Init(mdr.DObject obj) { obj.SetField("global", obj); //obj.SetField("null", mdr.Runtime.Instance.DefaultDNull); obj.DefineOwnProperty("undefined", mdr.Runtime.Instance.DefaultDUndefined, mdr.PropertyDescriptor.Attributes.Data | mdr.PropertyDescriptor.Attributes.NotWritable | mdr.PropertyDescriptor.Attributes.NotEnumerable | mdr.PropertyDescriptor.Attributes.NotConfigurable); obj.DefineOwnProperty("NaN", double.NaN, mdr.PropertyDescriptor.Attributes.Data | mdr.PropertyDescriptor.Attributes.NotWritable | mdr.PropertyDescriptor.Attributes.NotEnumerable | mdr.PropertyDescriptor.Attributes.NotConfigurable); obj.DefineOwnProperty("Infinity", double.PositiveInfinity, mdr.PropertyDescriptor.Attributes.Data | mdr.PropertyDescriptor.Attributes.NotWritable | mdr.PropertyDescriptor.Attributes.NotEnumerable | mdr.PropertyDescriptor.Attributes.NotConfigurable); obj.SetField("Object", new JSObject()); obj.SetField("Function", new JSFunction()); obj.SetField("Array", new JSArray()); obj.SetField("ArrayBuffer", new JSArrayBuffer()); obj.SetField("Int8Array", new JSInt8Array()); obj.SetField("Uint8Array", new JSUint8Array()); obj.SetField("Int16Array", new JSInt16Array()); obj.SetField("Uint16Array", new JSUint16Array()); obj.SetField("Int32Array", new JSInt32Array()); obj.SetField("Uint32Array", new JSUint32Array()); obj.SetField("Float32Array", new JSFloat32Array()); obj.SetField("Float64Array", new JSFloat64Array()); obj.SetField("Math", new JSMath()); obj.SetField("String", new JSString()); obj.SetField("Number", new JSNumber()); obj.SetField("Date", new JSDate()); obj.SetField("Boolean", new JSBoolean()); obj.SetField("Error", new JSError()); obj.SetField("RegExp", new JSRegExp()); obj.SetField("eval", BuiltinEval); AddStandardMethods(obj); AddExtendedMethods(obj); }
static partial void CustomFillPrototype(mdr.DObject prototype) { var window = mwr.HTMLRuntime.Instance.GlobalContext; prototype.DefineOwnProperty("onblur", new mdr.DForwardingProperty(window, "onblur")); prototype.DefineOwnProperty("onerror", new mdr.DForwardingProperty(window, "onerror")); prototype.DefineOwnProperty("onfocus", new mdr.DForwardingProperty(window, "onfocus")); prototype.DefineOwnProperty("onload", new mdr.DForwardingProperty(window, "onload")); prototype.DefineOwnProperty("onscroll", new mdr.DForwardingProperty(window, "onscroll")); }
internal static void InitDFunctionPrototype(mdr.DObject dFunctionProto, string protoFieldName, int prototypeFieldId) { dFunctionProto.DefineOwnProperty( protoFieldName , new DProperty() { TargetValueType = ValueTypes.Object, OnGetDValue = (DObject This, ref DValue v) => { //This is the first time This["prototype"] is accessed //So, we create the object, and add it to the object with a new PropertyDescriptor so that the current code is not executed again later var func = This.ToDFunction(); var prototype = func.Map.AddOwnProperty(func, protoFieldName, prototypeFieldId, PropertyDescriptor.Attributes.Data | PropertyDescriptor.Attributes.NotEnumerable); func.PrototypePropertyDescriptor = prototype; func.Fields[prototype.Index].Set(new DObject()); v.Set(ref func.Fields[prototype.Index]); }, OnSetDValue = (DObject This, ref DValue v) => { //This is the first time This["prototype"] is accessed //So, we add a new PropertyDescriptor so that the current code is not executed again later var func = This.ToDFunction(); var prototype = func.Map.AddOwnProperty(func, protoFieldName, prototypeFieldId, PropertyDescriptor.Attributes.Data | PropertyDescriptor.Attributes.NotEnumerable); func.PrototypePropertyDescriptor = prototype; func.Fields[prototype.Index].Set(ref v); }, } , PropertyDescriptor.Attributes.Accessor | PropertyDescriptor.Attributes.NotEnumerable ); }
static partial void CustomFillPrototype(mdr.DObject prototype) { Debug.WriteLine("++$> adding geolocation to Navigator props"); prototype.DefineOwnProperty("geolocation", new mdr.DProperty() { TargetValueType = mdr.ValueTypes.String, OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { v.Set((This as Navigator).Geolocation); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); }
protected JSBuiltinConstructor(mdr.DObject prototype, string Class) : base(null, null) { TargetPrototype = prototype; TargetDType = mdr.Runtime.Instance.GetRootMapOfPrototype(TargetPrototype); TargetDType.Metadata.Name = Class; //var protoPD = PrototypePropertyDescriptor; //protoPD.SetAttributes(mdr.PropertyDescriptor.Attributes.NotConfigurable | mdr.PropertyDescriptor.Attributes.NotWritable | mdr.PropertyDescriptor.Attributes.NotEnumerable, true); //protoPD.Set(this, prototype); SetField("prototype", prototype); prototype.DefineOwnProperty( "constructor" , this , mdr.PropertyDescriptor.Attributes.Data | mdr.PropertyDescriptor.Attributes.NotEnumerable ); //prototype.SetField("constructor", this); }
internal static void InitDStringPrototype(mdr.DObject dStringProto, string protoFieldName) { dStringProto.DefineOwnProperty( protoFieldName , new DProperty() { TargetValueType = ValueTypes.Int32, OnGetInt = (This) => { var str = This as DString; if (str.PrimitiveValue.AsString() != null) { return(str.PrimitiveValue.AsString().Length); } else { return(0); } }, OnGetDValue = (DObject This, ref DValue v) => { var str = This as DString; if (str != null && str.PrimitiveValue.AsString() != null) { v.Set(str.PrimitiveValue.AsString().Length); } else { v.Set(0); } }, OnSetDValue = (DObject This, ref DValue v) => { }, } , PropertyDescriptor.Attributes.Accessor | PropertyDescriptor.Attributes.NotEnumerable | PropertyDescriptor.Attributes.NotConfigurable | PropertyDescriptor.Attributes.NotWritable ); }
internal static void InitDArrayPrototype(mdr.DObject dArrayProto, string protoFieldName) { dArrayProto.DefineOwnProperty( protoFieldName , new DProperty() { TargetValueType = ValueTypes.Int32, OnGetInt = (This) => { return((This as DArray).Length); }, OnSetInt = (This, v) => { (This as DArray).Length = v; }, OnGetDValue = (DObject This, ref DValue v) => { var array = This.FirstInPrototypeChainAs <DArray>(false); if (array != null) { v.Set(array.Length); } else { v.Set(0); } }, OnSetDValue = (DObject This, ref DValue v) => { var array = This.FirstInPrototypeChainAs <DArray>(false); if (array != null) { array.Length = v.AsInt32(); } }, } , PropertyDescriptor.Attributes.Accessor | PropertyDescriptor.Attributes.NotEnumerable | PropertyDescriptor.Attributes.NotConfigurable ); }
public static mdr.DObject GetPrototype(EventClasses eventClass) { mdr.DObject prototype = null; switch (eventClass) { case EventClasses.Event: { prototype = new mdr.DObject(); prototype.DefineOwnProperty("type", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.Type.ToString().ToLower()); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("screenX", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.screenX); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("screenY", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.screenY); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("clientX", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.clientX); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("clientY", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.clientY); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("pageX", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.pageX); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("pageY", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.pageY); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("buttons", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.buttons); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("button", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((int)ev.Data.button); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("metaKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.metaKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("ctrlKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.ctrlKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("shiftKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.shiftKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("altKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.altKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("target", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Target); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("currentTarget", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.CurrentTarget); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("eventPhase", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set((UInt32)ev.Phase); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("bubbles", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Bubbles); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("cancelable", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Cancelable); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.SetField("initEvent", new mdr.DFunction((ref mdr.CallFrame callFrame) => { string eventTypeString = callFrame.Arg0.AsString(); bool bubbles = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg1); bool cancelable = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg2); var ev = callFrame.This.FirstInPrototypeChainAs<JSEvent>(); EventTypes type; eventTypesToString.TryGetValue(eventTypeString, out type); ev.InitEvent(type, bubbles, cancelable); })); prototype.SetField("stopPropagation", new mdr.DFunction((ref mdr.CallFrame callFrame) => { var ev = callFrame.This.FirstInPrototypeChainAs<JSEvent>(); ev.StopPropagation(); })); prototype.SetField("stopImmediatePropagation", new mdr.DFunction((ref mdr.CallFrame callFrame) => { var ev = callFrame.This.FirstInPrototypeChainAs<JSEvent>(); ev.StopImmediatePropagation(); })); prototype.SetField("preventDefault", new mdr.DFunction((ref mdr.CallFrame callFrame) => { var ev = callFrame.This.FirstInPrototypeChainAs<JSEvent>(); ev.PreventDefault(); })); //Fill the rest ... break; } case EventClasses.UIEvent: { prototype = new mdr.DObject(HTMLRuntime.Instance.GetPropertyMapOfEventPrototype(EventClasses.Event)); /* prototype.DefineOwnProperty("type", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.Type.ToString()); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); * */ prototype.SetField("initUIEvent", new mdr.DFunction((ref mdr.CallFrame callFrame) => { string eventTypeString = callFrame.Arg0.AsString(); bool bubbles = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg1); bool cancelable = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg2); // TODO: Variables 'view' and 'detail' are never used; remove? /*string view = callFrame.Arg3.ToString(); int detail = -1; if (callFrame.ArgsCount > 4) { detail = callFrame.Arguments[0].ToInt32(); }*/ var ev = callFrame.This.FirstInPrototypeChainAs<JSEvent>(); EventTypes type; eventTypesToString.TryGetValue(eventTypeString, out type); ev.InitEvent(type, bubbles, cancelable); })); //Fill the rest ... break; } case EventClasses.MouseEvent: { prototype = new mdr.DObject(HTMLRuntime.Instance.GetPropertyMapOfEventPrototype(EventClasses.UIEvent)); prototype.DefineOwnProperty("type", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs<JSEvent>(); v.Set(ev.Data.Type.ToString()); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); //Fill the rest ... break; } default: Trace.Fail("Invalid event class type {0}", eventClass); break; } return prototype; }
public static new void PreparePrototype(mdr.DObject prototype) { prototype.DefineOwnProperty("latitude", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.latitude); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("longitude", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.longitude); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("altitude", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.altitude); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("accuracy", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.accuracy); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("altitudeAccuracy", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.altitudeAccuracy); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("heading", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.heading); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("speed", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.speed); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("lciid", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.lciid); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("timestamp", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.timestamp); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("status", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSPosition>(); v.Set(ev.Data.status); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); }
public static mdr.DObject GetPrototype(EventClasses eventClass) { mdr.DObject prototype = null; switch (eventClass) { case EventClasses.Event: { prototype = new mdr.DObject(); prototype.DefineOwnProperty("type", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Data.Type.ToString().ToLower()); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("screenX", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.screenX); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("screenY", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.screenY); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("clientX", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.clientX); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("clientY", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.clientY); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("pageX", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.pageX); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("pageY", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.pageY); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("buttons", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.buttons); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("button", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((int)ev.Data.button); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("metaKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Data.metaKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("ctrlKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Data.ctrlKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("shiftKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Data.shiftKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("altKey", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Data.altKey); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("target", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Target); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("currentTarget", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.CurrentTarget); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("eventPhase", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set((UInt32)ev.Phase); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("bubbles", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Bubbles); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.DefineOwnProperty("cancelable", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Cancelable); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); prototype.SetField("initEvent", new mdr.DFunction((ref mdr.CallFrame callFrame) => { string eventTypeString = callFrame.Arg0.AsString(); bool bubbles = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg1); bool cancelable = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg2); var ev = callFrame.This.FirstInPrototypeChainAs <JSEvent>(); EventTypes type; eventTypesToString.TryGetValue(eventTypeString, out type); ev.InitEvent(type, bubbles, cancelable); })); prototype.SetField("stopPropagation", new mdr.DFunction((ref mdr.CallFrame callFrame) => { var ev = callFrame.This.FirstInPrototypeChainAs <JSEvent>(); ev.StopPropagation(); })); prototype.SetField("stopImmediatePropagation", new mdr.DFunction((ref mdr.CallFrame callFrame) => { var ev = callFrame.This.FirstInPrototypeChainAs <JSEvent>(); ev.StopImmediatePropagation(); })); prototype.SetField("preventDefault", new mdr.DFunction((ref mdr.CallFrame callFrame) => { var ev = callFrame.This.FirstInPrototypeChainAs <JSEvent>(); ev.PreventDefault(); })); //Fill the rest ... break; } case EventClasses.UIEvent: { prototype = new mdr.DObject(HTMLRuntime.Instance.GetPropertyMapOfEventPrototype(EventClasses.Event)); /* * prototype.DefineOwnProperty("type", new mdr.DProperty() * { * OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => * { * var ev = This.FirstInPrototypeChainAs<JSEvent>(); * v.Set(ev.Data.Type.ToString()); * }, * }, mdr.PropertyDescriptor.Attributes.NotWritable); * */ prototype.SetField("initUIEvent", new mdr.DFunction((ref mdr.CallFrame callFrame) => { string eventTypeString = callFrame.Arg0.AsString(); bool bubbles = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg1); bool cancelable = mjr.Operations.Convert.ToBoolean.Run(ref callFrame.Arg2); // TODO: Variables 'view' and 'detail' are never used; remove? /*string view = callFrame.Arg3.ToString(); * int detail = -1; * if (callFrame.ArgsCount > 4) * { * detail = callFrame.Arguments[0].ToInt32(); * }*/ var ev = callFrame.This.FirstInPrototypeChainAs <JSEvent>(); EventTypes type; eventTypesToString.TryGetValue(eventTypeString, out type); ev.InitEvent(type, bubbles, cancelable); })); //Fill the rest ... break; } case EventClasses.MouseEvent: { prototype = new mdr.DObject(HTMLRuntime.Instance.GetPropertyMapOfEventPrototype(EventClasses.UIEvent)); prototype.DefineOwnProperty("type", new mdr.DProperty() { OnGetDValue = (mdr.DObject This, ref mdr.DValue v) => { var ev = This.FirstInPrototypeChainAs <JSEvent>(); v.Set(ev.Data.Type.ToString()); }, }, mdr.PropertyDescriptor.Attributes.NotWritable); //Fill the rest ... break; } default: Trace.Fail("Invalid event class type {0}", eventClass); break; } return(prototype); }
public override void Execute(ref mdr.DValue result, ref mdr.CallFrame callFrame, Interpreter interpreter) { interpreter.PushLocation(this); var obj = new mdr.DObject(); for (var i = 0; i < Properties.Count; ++i) { var prop = Properties[i]; prop.Execute(ref result, ref callFrame, interpreter); obj.DefineOwnProperty(prop.Name, ref result, mdr.PropertyDescriptor.Attributes.Data); } result.Set(obj); interpreter.PopLocation(this, ref result); }