コード例 #1
0
        private JsValue SetYear(JsValue thisObj, JsValue[] arguments)
        {
            var thisTime = thisObj.As <DateInstance>().PrimitiveValue;
            var t        = double.IsNaN(thisTime) ? +0 : LocalTime(thisTime);
            var y        = TypeConverter.ToNumber(arguments.At(0));

            if (double.IsNaN(y))
            {
                thisObj.As <DateInstance>().PrimitiveValue = double.NaN;
                return(double.NaN);
            }

            var fy = TypeConverter.ToInteger(y);

            if (y >= 0 && y <= 99)
            {
                fy = fy + 1900;
            }

            var newDate = MakeDay(fy, MonthFromTime(t), DateFromTime(t));
            var u       = Utc(MakeDate(newDate, TimeWithinDay(t)));

            thisObj.As <DateInstance>().PrimitiveValue = TimeClip(u);
            return(u);
        }
コード例 #2
0
        private static JsValue SetUTCMilliseconds(JsValue thisObj, JsValue[] arguments)
        {
            var t    = thisObj.As <DateInstance>().PrimitiveValue;
            var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), TypeConverter.ToNumber(arguments.At(0)));
            var u    = TimeClip(MakeDate(Day(t), time));

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #3
0
        private static JsValue SetUTCDate(JsValue thisObj, JsValue[] arguments)
        {
            var t       = thisObj.As <DateInstance>().PrimitiveValue;
            var dt      = TypeConverter.ToNumber(arguments.At(0));
            var newDate = MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t));
            var u       = TimeClip(newDate);

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #4
0
        private JsValue SetMonth(JsValue thisObj, JsValue[] arguments)
        {
            var t       = LocalTime(thisObj.As <DateInstance>().PrimitiveValue);
            var m       = TypeConverter.ToNumber(arguments.At(0));
            var dt      = arguments.Length <= 1 ? DateFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
            var newDate = MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t));
            var u       = TimeClip(Utc(newDate));

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #5
0
        private static JsValue SetUTCSeconds(JsValue thisObj, JsValue[] arguments)
        {
            var t     = thisObj.As <DateInstance>().PrimitiveValue;
            var s     = TypeConverter.ToNumber(arguments.At(0));
            var milli = arguments.Length <= 1 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
            var date  = MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli));
            var u     = TimeClip(date);

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #6
0
        private JsValue SetMinutes(JsValue thisObj, JsValue[] arguments)
        {
            var t     = LocalTime(thisObj.As <DateInstance>().PrimitiveValue);
            var m     = TypeConverter.ToNumber(arguments.At(0));
            var s     = arguments.Length <= 1 ? SecFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
            var milli = arguments.Length <= 2 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(2));
            var date  = MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli));
            var u     = TimeClip(Utc(date));

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #7
0
        private static JsValue SetUTCFullYear(JsValue thisObj, JsValue[] arguments)
        {
            var thisTime = thisObj.As <DateInstance>().PrimitiveValue;
            var t        = double.IsNaN(thisTime) ? +0 : thisTime;
            var y        = TypeConverter.ToNumber(arguments.At(0));
            var m        = arguments.Length <= 1 ? MonthFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
            var dt       = arguments.Length <= 2 ? DateFromTime(t) : TypeConverter.ToNumber(arguments.At(2));
            var newDate  = MakeDate(MakeDay(y, m, dt), TimeWithinDay(t));
            var u        = TimeClip(newDate);

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #8
0
        private JsValue SetEventHandler(JsValue thisObject, JsValue[] arguments)
        {
            var node = thisObject.As <DomNodeInstance>();

            if (node != null)
            {
                if (_handler != null)
                {
                    _eventInfo?.RemoveEventHandler(node.Value, _handler);
                    _handler  = null;
                    _function = null;
                }

                if (arguments[0].Is <FunctionInstance>())
                {
                    _function = arguments[0].As <FunctionInstance>();
                    _handler  = (s, ev) =>
                    {
                        var sender = s.ToJsValue(_engine);
                        var args   = ev.ToJsValue(_engine);
                        _function.Call(sender, new[] { args });
                    };

                    _eventInfo?.AddEventHandler(node.Value, _handler);
                }
            }

            return(arguments[0]);
        }
コード例 #9
0
 public XSSFColor UnwrapColor(JsValue value)
 {
     if (value.Is <ColorInstance>())
     {
         return(value.As <ColorInstance>().ToColor());
     }
     return(UnwrapColor(Color.Construct(new[] { value })));
 }
コード例 #10
0
        private async void sendRequest(ManticoreEngine engine, int timeout, HttpClient client, HttpRequestMessage request, JsValue callback)
        {
            var responseInfo = engine.CreateJsObject();
            HttpResponseMessage     response = null;
            CancellationTokenSource cts      = new CancellationTokenSource(timeout);

            try
            {
                response = await client.SendRequestAsync(request, HttpCompletionOption.ResponseContentRead).AsTask(cts.Token);
            }
            catch (Exception x)
            {
                var ei = new JsErrorBuilder(engine, x).Build();
                responseInfo.FastAddProperty("error", ei, false, true, false);
            }

            if (response != null && response.Headers.Count > 0)
            {
                var headerCollection = engine.CreateJsObject();
                foreach (var kv in response.Headers)
                {
                    try
                    {
                        headerCollection.FastAddProperty(kv.Key, new JsValue(kv.Value), false, true, false);
                    }
                    catch (ArgumentException)
                    {
                        // Swallow duplicate headers for now.
                    }
                }
                responseInfo.FastAddProperty("headers", headerCollection, false, true, false);
            }

            byte[] binaryResult = null;
            if (response != null)
            {
                responseInfo.FastAddProperty("status", new JsValue((int)response.StatusCode), false, true, false);
                // TODO find a way to sneak this wait into the gap between returning and asking for the results
                // json/body/text signatures probably need to change to take a callback.
                binaryResult = (await response.Content.ReadAsBufferAsync()).ToArray();
            }
            engine.Js(() =>
            {
                responseInfo.FastAddProperty("json", engine.AsJsFunction((thisObject, args) => {
                    return(engine.jsEngine.Json.Parse(JsValue.Null,
                                                      new JsValue[] { Encoding.UTF8.GetString(binaryResult, 0, binaryResult.Length) }));
                }), false, false, false);
                responseInfo.FastAddProperty("body", engine.AsJsFunction((thisObject, args) => {
                    return(engine.jsEngine.Json.Parse(JsValue.Null, new JsValue[] { Convert.ToBase64String(binaryResult) }));
                }), false, false, false);
                responseInfo.FastAddProperty("text", engine.AsJsFunction((thisObject, args) => {
                    return(new JsValue(Encoding.UTF8.GetString(binaryResult, 0, binaryResult.Length)));
                }), false, false, false);
                callback.As <FunctionInstance>().Call(engine.ManticoreJsObject, new JsValue[] { JsValue.Null, responseInfo });
            });
        }
コード例 #11
0
        public override bool HasInstance(JsValue v)
        {
            ObjectWrapper wrapper = v.As <ObjectWrapper>();

            if (wrapper == null)
            {
                return(base.HasInstance(v));
            }

            return(wrapper.Target.GetType() == this.Type);
        }
コード例 #12
0
        public void setEventListener(IReactComponent element, string eventType, JsValue value)
        {
            var hasValue = value != null && !value.IsNull() && !value.IsUndefined() && !value.IsBoolean();
            var callback = value.As <FunctionInstance>();

            if (hasValue && callback == null)
            {
                throw new Exception("The callback for an event must be a function.");
            }

            element.SetEventListener(eventType, new Callback(callback));
        }
コード例 #13
0
        private JsValue SetUTCHours(JsValue thisObj, JsValue[] arguments)
        {
            var t     = EnsureDateInstance(thisObj).PrimitiveValue;
            var h     = TypeConverter.ToNumber(arguments.At(0));
            var m     = arguments.Length <= 1 ? MinFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
            var s     = arguments.Length <= 2 ? SecFromTime(t) : TypeConverter.ToNumber(arguments.At(2));
            var milli = arguments.Length <= 3 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(3));
            var date  = MakeDate(Day(t), MakeTime(h, m, s, milli));
            var u     = TimeClip(date);

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #14
0
        public DateTime AsNativeDate(JsValue value)
        {
            var valueAsDate = value.As <DateInstance>();

            if (valueAsDate != null)
            {
                return(valueAsDate.ToDateTime());
            }
            else
            {
                return(DateTime.MinValue);
            }
        }
コード例 #15
0
        private JsValue SetMilliseconds(JsValue thisObj, JsValue[] arguments)
        {
            var t = LocalTime(EnsureDateInstance(thisObj).PrimitiveValue);

            if (!IsFinite(t))
            {
                return(JsNumber.DoubleNaN);
            }
            var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), TypeConverter.ToNumber(arguments.At(0)));
            var u    = TimeClip(Utc(MakeDate(Day(t), time)));

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #16
0
        private JsValue SetUTCDate(JsValue thisObj, JsValue[] arguments)
        {
            var t = EnsureDateInstance(thisObj).PrimitiveValue;

            if (!IsFinite(t))
            {
                return(JsNumber.DoubleNaN);
            }
            var dt      = TypeConverter.ToNumber(arguments.At(0));
            var newDate = MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t));
            var u       = TimeClip(newDate);

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #17
0
        private JsValue SetSeconds(JsValue thisObj, JsValue[] arguments)
        {
            var t = LocalTime(EnsureDateInstance(thisObj).PrimitiveValue);

            if (!IsFinite(t))
            {
                return(JsNumber.DoubleNaN);
            }
            var s     = TypeConverter.ToNumber(arguments.At(0));
            var milli = arguments.Length <= 1 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
            var date  = MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli));
            var u     = TimeClip(Utc(date));

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #18
0
        private JsValue SetDate(JsValue thisObj, JsValue[] arguments)
        {
            var t = LocalTime(EnsureDateInstance(thisObj).PrimitiveValue);

            if (!IsFinite(t))
            {
                return(JsNumber.DoubleNaN);
            }
            var dt = TypeConverter.ToNumber(arguments.At(0));

            var(year, month, __) = YearMonthDayFromTime(t);
            var newDate = MakeDate(MakeDay(year, month, dt), TimeWithinDay(t));
            var u       = TimeClip(Utc(newDate));

            thisObj.As <DateInstance>().PrimitiveValue = u;
            return(u);
        }
コード例 #19
0
ファイル: Cell.cs プロジェクト: windygu/wastedge-querier
        public void SetComment(JsValue value)
        {
            Cell.CellComment = null;

            if (value.Is <CommentInstance>())
            {
                Cell.CellComment = value.As <CommentInstance>().Comment;
            }
            else
            {
                string str = value.ConvertToString();
                if (str != null)
                {
                    var comment = (XSSFComment)((XSSFSheet)Cell.Row.Sheet).CreateComment();
                    comment.String   = new XSSFRichTextString(str);
                    Cell.CellComment = comment;
                }
            }
        }
コード例 #20
0
ファイル: DatePrototype.cs プロジェクト: Willy-Kimura/jint
 private JsValue SetUTCHours(JsValue thisObj, JsValue[] arguments)
 {
     var t = EnsureDateInstance(thisObj).PrimitiveValue;
     var h = TypeConverter.ToNumber(arguments.At(0));
     var m = arguments.Length <= 1 ? MinFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
     var s = arguments.Length <= 2 ? SecFromTime(t) : TypeConverter.ToNumber(arguments.At(2));
     var milli = arguments.Length <= 3 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(3));
     var date = MakeDate(Day(t), MakeTime(h, m, s, milli));
     var u = TimeClip(date);
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #21
0
ファイル: DatePrototype.cs プロジェクト: Willy-Kimura/jint
 private JsValue SetMinutes(JsValue thisObj, JsValue[] arguments)
 {
     var t = LocalTime(EnsureDateInstance(thisObj).PrimitiveValue);
     var m = TypeConverter.ToNumber(arguments.At(0));
     var s = arguments.Length <= 1 ? SecFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
     var milli = arguments.Length <= 2 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(2));
     var date = MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli));
     var u = TimeClip(Utc(date));
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #22
0
ファイル: DatePrototype.cs プロジェクト: Willy-Kimura/jint
 private JsValue SetUTCMilliseconds(JsValue thisObj, JsValue[] arguments)
 {
     var t = EnsureDateInstance(thisObj).PrimitiveValue;
     var time = MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), TypeConverter.ToNumber(arguments.At(0)));
     var u = TimeClip(MakeDate(Day(t), time));
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #23
0
ファイル: CellStyle.cs プロジェクト: windygu/wastedge-querier
 public void SetBorderColorLeft(JsValue value)
 {
     CellStyle.SetLeftBorderColor(value.Is <ColorInstance>() ? value.As <ColorInstance>().ToColor() : null);
 }
コード例 #24
0
ファイル: DatePrototype.cs プロジェクト: Willy-Kimura/jint
 private JsValue SetUTCFullYear(JsValue thisObj, JsValue[] arguments)
 {
     var thisTime = EnsureDateInstance(thisObj).PrimitiveValue;
     var t = double.IsNaN(thisTime) ? +0 : thisTime;
     var y = TypeConverter.ToNumber(arguments.At(0));
     var m = arguments.Length <= 1 ? MonthFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
     var dt = arguments.Length <= 2 ? DateFromTime(t) : TypeConverter.ToNumber(arguments.At(2));
     var newDate = MakeDate(MakeDay(y, m, dt), TimeWithinDay(t));
     var u = TimeClip(newDate);
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #25
0
ファイル: DatePrototype.cs プロジェクト: fatalerrorx/jint
 private static JsValue SetTime(JsValue thisObj, JsValue[] arguments)
 {
     return thisObj.As<DateInstance>().PrimitiveValue = TimeClip(TypeConverter.ToNumber(arguments.At(0)));
 }
コード例 #26
0
ファイル: Cell.cs プロジェクト: windygu/wastedge-querier
 public void SetStyle(JsValue value)
 {
     Cell.CellStyle = value.Is <CellStyleInstance>() ? value.As <CellStyleInstance>().CellStyle : null;
 }
コード例 #27
0
        public void Fetch(ManticoreEngine engine, JsValue optionsValue, JsValue callback)
        {
            var options        = optionsValue.As <ObjectInstance>();
            var httpBaseFilter = new HttpBaseProtocolFilter
            {
                AllowUI = false
            };
            var client = new HttpClient(httpBaseFilter);

            HttpMethod requestMethod = HttpMethod.Get;

            if (options.HasProperty("method"))
            {
                var method = options.Get("method").AsString();
                if (method != null)
                {
                    switch (method.ToLower())
                    {
                    case "delete":
                        requestMethod = HttpMethod.Delete;
                        break;

                    case "head":
                        requestMethod = HttpMethod.Head;
                        break;

                    case "options":
                        requestMethod = HttpMethod.Options;
                        break;

                    case "patch":
                        requestMethod = HttpMethod.Patch;
                        break;

                    case "post":
                        requestMethod = HttpMethod.Post;
                        break;

                    case "put":
                        requestMethod = HttpMethod.Put;
                        break;
                    }
                }
            }

            var urlString = options.Get("url").AsString();
            var rawBody   = options.Get("nativeBody").As <ScriptFunctionInstance>().Call(options, ManticoreEngine.EmptyArgs);
            var hasBody   = rawBody.IsString() && rawBody.AsString().Length > 0;
            var request   = new HttpRequestMessage(requestMethod, new Uri(urlString));

            if (options.HasProperty("headers"))
            {
                var headers = options.Get("headers").AsObject();
                var raw     = headers.Get("raw").As <FunctionInstance>().Call(headers, ManticoreEngine.EmptyArgs);
                if (raw.IsObject())
                {
                    foreach (var p in raw.AsObject().GetOwnProperties())
                    {
                        if (p.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase))
                        {
                            if (hasBody)
                            {
                                request.Content.Headers.Add(p.Key, p.Value.Value.Value.AsString());
                            }
                        }
                        else
                        {
                            request.Headers.Add(p.Key, p.Value.Value.Value.AsString());
                        }
                    }
                }
            }

            if (hasBody)
            {
                if (options.HasProperty("isBase64") && options.Get("isBase64").AsBoolean())
                {
                    request.Content = new HttpBufferContent(Convert.FromBase64String(rawBody.AsString()).AsBuffer());
                }
                else
                {
                    request.Content = new HttpBufferContent(Encoding.UTF8.GetBytes(rawBody.AsString()).AsBuffer());
                }
            }

            int timeout = 60000;

            if (options.HasProperty("timeout") && options.Get("timeout").IsNumber())
            {
                timeout = (int)options.Get("timeout").AsNumber();
            }
            sendRequest(engine, timeout, client, request, callback);
        }
コード例 #28
0
ファイル: CellStyle.cs プロジェクト: windygu/wastedge-querier
 public void SetFont(JsValue value)
 {
     CellStyle.SetFont(value.Is <FontInstance>() ? value.As <FontInstance>().Font : null);
 }
コード例 #29
0
        public void Fetch(ManticoreEngine engine, JsValue optionsValue, JsValue callback)
        {
            var     options = optionsValue.As <ObjectInstance>();
            JsValue rawBody = options.Get("nativeBody").As <FunctionInstance>().Call(options, ManticoreEngine.EmptyArgs);
            var     hasBody = rawBody.IsString() && rawBody.AsString().Length > 0;
            var     request = (HttpWebRequest)WebRequest.Create(options.Get("url").AsString());

            request.Method = "GET";
            if (options.HasProperty("method"))
            {
                request.Method = options.Get("method").AsString();
            }

            if (options.HasProperty("headers"))
            {
                var headers = options.Get("headers").AsObject();
                var raw     = headers.Get("raw").As <FunctionInstance>().Call(headers, ManticoreEngine.EmptyArgs);
                if (raw.IsObject())
                {
                    foreach (var p in raw.AsObject().GetOwnProperties())
                    {
                        if (p.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase))
                        {
                            if (hasBody)
                            {
                                request.ContentType = p.Value.Value.Value.AsString();
                            }
                        }
                        else if (p.Key.Equals("If-Modified-Since", StringComparison.OrdinalIgnoreCase))
                        {
                            request.IfModifiedSince = DateTime.Parse(p.Value.Value.Value.AsString());
                        }
                        else
                        {
                            request.Headers.Add(p.Key, p.Value.Value.Value.AsString());
                        }
                    }
                }
            }

            if (hasBody)
            {
                var    body = rawBody.AsString();
                byte[] bodyBytes;
                if (options.HasProperty("isBase64") && options.Get("isBase64").AsBoolean())
                {
                    bodyBytes = Convert.FromBase64String(body);
                }
                else
                {
                    bodyBytes = Encoding.UTF8.GetBytes(body);
                }
                request.ContentLength = bodyBytes.Length;

                var errorInstance = JsValue.Null;
                try
                {
                    var rqStream = request.GetRequestStream();
                    rqStream.Write(bodyBytes, 0, bodyBytes.Length);
                    rqStream.Close();
                }
                catch (Exception x)
                {
                    // TODO fire this log into JS? manticore.onError()?
                    Log("error", x.ToString(), JsValue.Null);
                    var errorBuilder = new JsErrorBuilder(engine, x);
                    if (x is WebException)
                    {
                        errorBuilder.SetErrorCode((int)ErrorCodes.NetworkOffline);
                    }
                    errorInstance = errorBuilder.Build();
                }

                if (errorInstance != JsValue.Null)
                {
                    engine.Js(() =>
                    {
                        callback.As <FunctionInstance>().Call(engine.ManticoreJsObject, new[] { errorInstance, JsValue.Null });
                    });
                    return;
                }
            }

            sendRequest(engine, request, callback);
        }
コード例 #30
0
ファイル: DatePrototype.cs プロジェクト: Willy-Kimura/jint
 private JsValue SetDate(JsValue thisObj, JsValue[] arguments)
 {
     var t = LocalTime(EnsureDateInstance(thisObj).PrimitiveValue);
     var dt = TypeConverter.ToNumber(arguments.At(0));
     var newDate = MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t));
     var u = TimeClip(Utc(newDate));
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #31
0
ファイル: DatePrototype.cs プロジェクト: fatalerrorx/jint
 private static JsValue SetUTCSeconds(JsValue thisObj, JsValue[] arguments)
 {
     var t = thisObj.As<DateInstance>().PrimitiveValue;
     var s = TypeConverter.ToNumber(arguments.At(0));
     var milli = arguments.Length <= 1 ? MsFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
     var date = MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli));
     var u = TimeClip(date);
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #32
0
ファイル: DatePrototype.cs プロジェクト: Willy-Kimura/jint
 private JsValue SetUTCMonth(JsValue thisObj, JsValue[] arguments)
 {
     var t = EnsureDateInstance(thisObj).PrimitiveValue;
     var m = TypeConverter.ToNumber(arguments.At(0));
     var dt = arguments.Length <= 1 ? DateFromTime(t) : TypeConverter.ToNumber(arguments.At(1));
     var newDate = MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t));
     var u = TimeClip(newDate);
     thisObj.As<DateInstance>().PrimitiveValue = u;
     return u;
 }
コード例 #33
0
ファイル: DatePrototype.cs プロジェクト: fatalerrorx/jint
        private JsValue SetYear(JsValue thisObj, JsValue[] arguments)
        {
            var thisTime = thisObj.As<DateInstance>().PrimitiveValue;
            var t = double.IsNaN(thisTime) ? +0 : LocalTime(thisTime);
            var y = TypeConverter.ToNumber(arguments.At(0));
            if (double.IsNaN(y))
            {
                thisObj.As<DateInstance>().PrimitiveValue = double.NaN;
                return double.NaN;
            }

            var fy = TypeConverter.ToInteger(y);
            if (y >= 0 && y <= 99)
            {
                fy = fy + 1900;
            }

            var newDate = MakeDay(fy, MonthFromTime(t), DateFromTime(t));
            var u = Utc(MakeDate(newDate, TimeWithinDay(t)));
            thisObj.As<DateInstance>().PrimitiveValue = TimeClip(u);
            return u;
        }
コード例 #34
0
        private void sendRequest(ManticoreEngine engine, HttpWebRequest request, JsValue callback)
        {
            request.BeginGetResponse((asyncResult) =>
            {
                HttpWebResponse response = null;
                var errorInstance        = JsValue.Null;
                try
                {
                    response = (HttpWebResponse)request.EndGetResponse(asyncResult);
                }
                catch (WebException e)
                {
                    if (e.Status == WebExceptionStatus.ProtocolError) //Response was received from server but indicated protocol level error
                    {
                        response = (HttpWebResponse)e.Response;
                    }
                    else
                    {
                        errorInstance = new JsErrorBuilder(engine, e).SetErrorCode((int)ErrorCodes.NetworkOffline).Build();
                    }
                }

                if (response == null)
                {
                    engine.Js(() =>
                    {
                        callback.As <FunctionInstance>().Call(engine.ManticoreJsObject, new[] { errorInstance, JsValue.Null });
                    });
                    return;
                }

                var responseInfo = engine.CreateJsObject();
                if (response.Headers.Count > 0)
                {
                    var headerCollection = engine.CreateJsObject();
                    foreach (var kv in response.Headers.AllKeys)
                    {
                        headerCollection.FastAddProperty(kv, new JsValue(response.Headers[kv]), false, true, false);
                    }
                    responseInfo.FastAddProperty("headers", headerCollection, false, true, false);
                }

                responseInfo.FastAddProperty("status", new JsValue((int)response.StatusCode), false, true, false);
                // TODO find a way to sneak this wait into the gap between returning and asking for the results
                // json/body/text signatures probably need to change to take a callback.
                var memStream = new MemoryStream();
                response.GetResponseStream().CopyTo(memStream);
                var binaryResult = memStream.ToArray();
                responseInfo.FastAddProperty("json", engine.AsJsFunction((thisObject, args) => {
                    return(engine.jsEngine.Json.Parse(JsValue.Null, new JsValue[] { Encoding.UTF8.GetString(binaryResult) }));
                }), false, false, false);
                responseInfo.FastAddProperty("body", engine.AsJsFunction((thisObject, args) => {
                    return(engine.jsEngine.Json.Parse(JsValue.Null, new JsValue[] { Convert.ToBase64String(binaryResult) }));
                }), false, false, false);
                responseInfo.FastAddProperty("text", engine.AsJsFunction((thisObject, args) => {
                    return(new JsValue(Encoding.UTF8.GetString(binaryResult)));
                }), false, false, false);
                engine.Js(() =>
                {
                    callback.As <FunctionInstance>().Call(engine.ManticoreJsObject, new[] { errorInstance, responseInfo });
                });
            }, null);
        }
コード例 #35
0
 private static JsValue SetTime(JsValue thisObj, JsValue[] arguments)
 {
     return(thisObj.As <DateInstance>().PrimitiveValue = TimeClip(TypeConverter.ToNumber(arguments.At(0))));
 }