protected override NativeView CreateNativeView(IShibaContext context) { return(new NativeView() { TextWrapping = TextWrapping.Wrap, }); }
protected virtual TNativeView Map(ShibaView view, IShibaContext context) { var target = CreateNativeView(context); if (view.DefaultValue != null && DefaultPropertyMap != null && HasDefaultProperty) { SetValue(context, view.DefaultValue, DefaultPropertyMap, target); } foreach (var property in view.Properties) { var propertyCache = _propertyCache.Value.LastOrDefault(it => it.Name == property.Name); if (propertyCache != null) { SetValue(context, property.Value, propertyCache, target); } else { var eventCache = _eventCache.Value.LastOrDefault(it => it.Name == property.Name); if (eventCache != null && property.Value is string name) { eventCache.Setter.Invoke(target, name, context); } } } return(target); }
private ShibaFunction ParseFunction(ShibaFunction item, IShibaContext context) { for (var i = 0; i < item.Parameters.Count; i++) { var parameter = item.Parameters[i]; switch (parameter) { case ShibaFunction function: item.Parameters[i] = ParseFunction(function, context); break; case ShibaExtension extension: var executor = ShibaApp.Instance.Configuration.ExtensionExecutors .FirstOrDefault(it => it.Name == extension.Type); if (executor is IMutableExtensionExecutor) { item.Parameters[i] = executor.ProvideValue(context, extension); } break; default: item.Parameters[i] = DynamicVisit(parameter, context); break; } } return(item); }
private object Visit(JavaScriptValue value, IShibaContext context) { switch (value.ValueType) { case JavaScriptValueType.Error: case JavaScriptValueType.Object: return(VisitJavascriptObject(value)); case JavaScriptValueType.Array: return(VisitJavascriptArray(value)); case JavaScriptValueType.Boolean: return(value.ToBoolean()); case JavaScriptValueType.Null: return(null); case JavaScriptValueType.Number: return(value.ToDouble()); case JavaScriptValueType.String: return(value.ToString()); case JavaScriptValueType.Undefined: case JavaScriptValueType.Function: default: return(value); } }
private NativeBinding Visit(ShibaFunction item, IShibaContext context) { var function = ParseFunction(item, context); var extensions = GetExtensions(function)?.ToList(); if (extensions == null || !extensions.Any()) { return new NativeBinding { ConverterParameter = Singleton <ShibaFunctionExecutor> .Instance.Execute(function, null), Converter = Singleton <RawDataConverter> .Instance } } ; if (extensions.Count == 1) { var extension = extensions.FirstOrDefault(); var extensionValue = DynamicVisit(extension, context); switch (extensionValue) { case NativeBinding binding: if (binding.Converter != null) { binding.ConverterParameter = new ShibaConverterParameter { InnerConverter = binding.Converter, InnerParameter = binding.ConverterParameter, Function = function } } ; else { binding.ConverterParameter = function; } binding.Converter = Singleton <SingleBindingFunctionConverter> .Instance; return(binding); default: return(new NativeBinding { ConverterParameter = Singleton <SingleBindingShibaFunctionExecutor> .Instance.Execute(function, extensionValue), Converter = Singleton <RawDataConverter> .Instance }); } } if (extensions.Count > 1) { throw new ArgumentOutOfRangeException("Currently only support single ShibaExtension"); } throw new ArgumentOutOfRangeException($"Can not handle function call ${item}"); }
public object DynamicVisit(object obj, IShibaContext context) { if (obj == null) { return(null); } return(Visit((dynamic)obj, context)); }
protected override MarkdownTextBlock CreateNativeView(IShibaContext context) { return(base.CreateNativeView(context).Also(it => { it.ImageMaxHeight = 14; it.Background = new SolidColorBrush(Colors.Transparent); it.TextWrapping = TextWrapping.Wrap; })); }
public static NativeView RenderFromFunction(string name, IShibaContext context) { var result = ShibaApp.Instance.Configuration.ScriptRuntime.CallFunction(name); if (result is JavaScriptValue javaScriptValue) { return(Render(Singleton <JSViewVisitor> .Instance.Visit(javaScriptValue) as View, context)); } return(null); }
protected override ItemsRepeater CreateNativeView(IShibaContext context) { return(new ItemsRepeater().Also(it => { it.SetBinding(ItemsRepeater.DataContextProperty, new Binding { Source = context, Path = new PropertyPath(nameof(context.DataContext)), }); })); }
protected override ContentControl CreateNativeView(IShibaContext context) { return(new ContentControl().Also(it => { it.SetBinding(ContentControl.ContentProperty, new Binding { Source = context, Path = new PropertyPath(nameof(context.DataContext)) }); })); }
private ShibaObject Visit(JObject item, IShibaContext context) { var dic = new ShibaObject(); foreach (var(key, value) in item) { dic.TryAdd(key, DynamicVisit(value, context)); } return(dic); }
protected override ShibaHost Map(View view, IShibaContext context) { var target = CreateNativeView(context); foreach (var property in view.Properties) { var cache = _propertyCache.Value.LastOrDefault(it => it.Name == property.Name); if (cache != null) { SetValue(context, property.Value, cache, target); } } return(target); }
public virtual NativeBinding ProvideNativeBinding(IShibaContext context, ShibaExtension value) { var dataContextPath = nameof(context.DataContext); var targetPath = value.Value; var path = string.IsNullOrEmpty(targetPath) ? dataContextPath : $"{dataContextPath}.{targetPath}"; return(new NativeBinding { Source = context, Path = new PropertyPath(path), UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }); }
public override NativeBinding ProvideNativeBinding(IShibaContext context, ShibaExtension value) { var dataContextPath = nameof(context.DataContext); var targetPath = value.Value; var path = dataContextPath; return(new NativeBinding { Converter = Singleton <JsonConverter> .Instance, ConverterParameter = targetPath, Source = context, Path = new PropertyPath(path), UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged }); }
private object Visit(ShibaExtension item, IShibaContext context) { var executor = ShibaApp.Instance.Configuration.ExtensionExecutors.FirstOrDefault(it => it.Name == item.Type); if (executor != null) { var value = executor.ProvideValue(context, item); if (string.IsNullOrEmpty(item.ScriptName)) { return(value); } var func = new ShibaFunction(item.ScriptName) { Parameters = { item } }; if (value is NativeBinding binding) { if (binding.Converter != null) { binding.ConverterParameter = new ShibaConverterParameter { InnerConverter = binding.Converter, InnerParameter = binding.ConverterParameter, Function = func } } ; else { binding.ConverterParameter = func; } binding.Converter = Singleton <SingleBindingFunctionConverter> .Instance; return(binding); } return(new NativeBinding { ConverterParameter = Singleton <SingleBindingShibaFunctionExecutor> .Instance.Execute(func, item), Converter = Singleton <RawDataConverter> .Instance }); } throw new NotImplementedException(); }
private object Visit(JValue item, IShibaContext context) { switch (item.Type) { case JTokenType.Integer: return(item.Value <int>()); case JTokenType.Float: return(item.Value <float>()); case JTokenType.String: return(item.Value <string>()); case JTokenType.Boolean: return(item.Value <bool>()); case JTokenType.Date: return(item.Value <DateTime>()); case JTokenType.Raw: return(item.Value <string>()); case JTokenType.Bytes: return(item.Value <byte[]>()); case JTokenType.Guid: return(item.Value <Guid>()); case JTokenType.Uri: return(item.Value <string>()); case JTokenType.TimeSpan: return(item.Value <TimeSpan>()); default: return(null); } }
public object ProvideValue(IShibaContext context, ShibaExtension value) { return(ProvideNativeBinding(context, value)); }
private KeyValuePair <string, object> Visit(JProperty item, IShibaContext context) { return(new KeyValuePair <string, object>(item.Name, DynamicVisit(item.Value, context))); }
protected override ImageEx CreateNativeView(IShibaContext context) { return(base.CreateNativeView(context).Also(it => it.Stretch = Stretch.UniformToFill)); }
private List <object> Visit(JArray obj, IShibaContext context) { return(obj.Select(it => DynamicVisit(it, context)).ToList()); }
protected override ImageEx CreateNativeView(IShibaContext context) { return(base.CreateNativeView(context).Also(it => it.CornerRadius = new CornerRadius(999))); }
object IViewMapper.Map(ShibaView view, IShibaContext context) { return(Map(view, context)); }
protected virtual TNativeView CreateNativeView(IShibaContext context) { return(new TNativeView()); }
public object ProvideValue(IShibaContext context, ShibaExtension value) { return(Application.Current.Resources.ContainsKey(value.Value) ? Application.Current.Resources[value.Value] : null); }
private object Visit(object obj, IShibaContext context) { return(obj); }
private NativeView Visit(View view, IShibaContext context) { var attribute = ShibaApp.Instance.ViewMappings.LastOrDefault(it => view.ViewName == it.ViewName); if (attribute == null) { if (ShibaApp.Instance.Components.ContainsKey(view.ViewName)) { view.Properties.Add(new Property("componentName", view.ViewName)); return(ShibaHostMapper.Map(view, context) as ShibaHost); } return(null); } var renderer = Renderer.GetOrAdd(attribute.ViewName, type => CreateRenderer(attribute)); if (context == null) { throw new ArgumentNullException($"{nameof(context)} can not be null"); } var target = renderer.Map(view, context) as NativeView; if (view.Children.Any() && target is NativeViewGroup panel) { var commonprops = new List <(ShibaView view, NativeView native, List <Property> properties)>(); view.Children.ForEach(it => { var child = Visit(it, context); if (renderer is IAllowChildViewMapper viewGroupMapper) { viewGroupMapper.AddChild(panel, child); } else { panel.Children.Add(child); } var commonprop = it.Properties.Where(prop => ShibaApp.Instance.Configuration.CommonProperties.Any(cp => cp.Name == prop.Name)) .ToList(); if (commonprop.Any()) { commonprops.Add((it, child, commonprop)); } }); commonprops.ForEach(it => { var(view1, native, properties) = it; properties.ForEach(prop => { ShibaApp.Instance.Configuration.CommonProperties .Where(cp => cp.Name == prop.Name).ToList() .ForEach(cp => cp.Handle(prop.Value, view1, native, target)); }); }); } return(target); }
public static NativeView Render(View view, IShibaContext context) { return(Singleton <ValueVisitor> .Instance.DynamicVisit(view, context) as NativeView); }