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); }
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); }
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); }
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); }
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); }
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); }
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); }
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]); }
public XSSFColor UnwrapColor(JsValue value) { if (value.Is <ColorInstance>()) { return(value.As <ColorInstance>().ToColor()); } return(UnwrapColor(Color.Construct(new[] { value }))); }
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 }); }); }
public override bool HasInstance(JsValue v) { ObjectWrapper wrapper = v.As <ObjectWrapper>(); if (wrapper == null) { return(base.HasInstance(v)); } return(wrapper.Target.GetType() == this.Type); }
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)); }
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); }
public DateTime AsNativeDate(JsValue value) { var valueAsDate = value.As <DateInstance>(); if (valueAsDate != null) { return(valueAsDate.ToDateTime()); } else { return(DateTime.MinValue); } }
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); }
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); }
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); }
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); }
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; } } }
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; }
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; }
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; }
public void SetBorderColorLeft(JsValue value) { CellStyle.SetLeftBorderColor(value.Is <ColorInstance>() ? value.As <ColorInstance>().ToColor() : null); }
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; }
private static JsValue SetTime(JsValue thisObj, JsValue[] arguments) { return thisObj.As<DateInstance>().PrimitiveValue = TimeClip(TypeConverter.ToNumber(arguments.At(0))); }
public void SetStyle(JsValue value) { Cell.CellStyle = value.Is <CellStyleInstance>() ? value.As <CellStyleInstance>().CellStyle : null; }
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); }
public void SetFont(JsValue value) { CellStyle.SetFont(value.Is <FontInstance>() ? value.As <FontInstance>().Font : null); }
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); }
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; }
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; }
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; }
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; }
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); }
private static JsValue SetTime(JsValue thisObj, JsValue[] arguments) { return(thisObj.As <DateInstance>().PrimitiveValue = TimeClip(TypeConverter.ToNumber(arguments.At(0)))); }