public void OnUiContext(ObjectChangesListener off) { var currentfather = _JsUpdateHelper.GetCached <JsGenericObject>(_Sender); if (currentfather == null) { return; } var propertyUpdater = currentfather.GetPropertyUpdater(_PropertyName); if (!propertyUpdater.IsValid) { return; } _NewValue = propertyUpdater.GetCurrentChildValue(); if (!propertyUpdater.HasChanged(_NewValue)) { return; } _NewJsValue = _JsUpdateHelper.Map(_NewValue); if (_NewJsValue == null) { return; } _BridgeUpdater = currentfather.GetUpdater(propertyUpdater, _NewJsValue); _JsUpdateHelper.UpdateOnUiContext(_BridgeUpdater, off); }
internal ArrayDescriptor(IJsCsGlue father, IReadOnlyList <IJsCsGlue> childrenDescription, int offfset = 0) { Father = father; OrdenedChildren = childrenDescription; OffSet = offfset; Count = childrenDescription.Count; }
private BridgeUpdater Update(Func <IJsCsGlue, BridgeUpdater> updaterBuilder, IJsCsGlue glue) { var updater = updaterBuilder(glue); updater.Cache = _SessionCache; return(updater); }
public static string AsCircularJson(this IJsCsGlue glue) { var descriptionBuilder = GetConventionedBuilder(); glue.BuilString(descriptionBuilder); return(descriptionBuilder.BuildString()); }
public JavascriptObjectSynchroneousBuilder(IJavascriptObjectFactory factory, ISessionCache cache, IJsCsGlue root, bool mapping) { _Mapping = mapping; _Factory = factory; _Cache = cache; _Root = root; }
public static void VisitDescendantsSafe(this IJsCsGlue @this, Func <IJsCsGlue, bool> visit) { var res = new HashSet <IJsCsGlue>(); Func <IJsCsGlue, bool> newVisitor = (glue) => (res.Add(glue)) && visit(glue); @this.VisitDescendants(newVisitor); }
private BridgeUpdater GetBridgeUpdater(JsArray array) { switch (_Change.Action) { case NotifyCollectionChangedAction.Add: _NewJsValue = _JsUpdateHelper.Map(_Change.NewItems[0]); if (_NewJsValue == null) { return(null); } return(array.GetAddUpdater(_NewJsValue, _Change.NewStartingIndex)); case NotifyCollectionChangedAction.Replace: _NewJsValue = _JsUpdateHelper.Map(_Change.NewItems[0]); if (_NewJsValue == null) { return(null); } return(array.GetReplaceUpdater(_NewJsValue, _Change.NewStartingIndex)); case NotifyCollectionChangedAction.Remove: return(array.GetRemoveUpdater(_Change.OldStartingIndex)); case NotifyCollectionChangedAction.Reset: return(array.GetResetUpdater());; case NotifyCollectionChangedAction.Move: return(array.GetMoveUpdater(_Change.OldStartingIndex, _Change.NewStartingIndex)); default: return(null); } }
private IJsCsGlue ReplaceAndReturnOld(int index, IJsCsGlue newValue) { var old = Items[index]; Items[index] = newValue; return(old); }
public BridgeUpdater GetReplaceUpdater(IJsCsGlue glue, int index) { var bridgeUpdater = new BridgeUpdater(viewModelUpdater => Splice(viewModelUpdater, index, 1, glue)); var old = ReplaceAndReturnOld(index, glue.AddRef()); return(bridgeUpdater.CheckForRemove(old)); }
public void UpdateOnJavascriptContext(BridgeUpdater updater, IJsCsGlue value) { if (value != null) { UpdateJavascriptValue(value); } UpdateOnJavascriptContext(updater); }
private static BridgeUpdater CheckForRemove(BridgeUpdater updater, IJsCsGlue glue) { if (glue.Release()) { updater.Remove(glue); } return(updater); }
public BridgeUpdater GetReplaceUpdater(IJsCsGlue glue, int index) { var bridgeUpdater = new BridgeUpdater(viewModelUpdater => Splice(viewModelUpdater, index, 1, glue)); var old = Items[index]; Items[index] = glue.AddRef(); return(CheckForRemove(bridgeUpdater, old)); }
public JavascriptObjectSynchroneousBuilderAdapter(IJavascriptObjectFactory factory, IJavascriptSessionCache cache, IJsCsGlue @object, bool mapping) { _Mapping = mapping; _Factory = factory; _Cache = cache; _Object = @object; _AfterChildrenUpdates = null; }
public JavascriptObjectBulkBuilder(IJavascriptObjectFactory factory, ISessionCache cache, IBulkUpdater bulkPropertyUpdater, IJsCsGlue root, bool mapping) { _Mapping = mapping; _Factory = factory; _Cache = cache; _Root = root; _BulkUpdater = bulkPropertyUpdater; }
private BridgeUpdater GetUnrootedEntitiesUpdater(IJsCsGlue newBridgeChild, Action <IJsCsGlue> performAfterBuild) { _UnrootedEntities.Add(newBridgeChild.AddRef()); return(new BridgeUpdater(updater => { updater.InjectDetached(newBridgeChild.GetJsSessionValue()); performAfterBuild(newBridgeChild); })); }
private void CheckForRemoveNoReturn(IJsCsGlue old) { if (old?.Release() != true) { return; } _ExitingObjects = _ExitingObjects ?? new HashSet <IJsCsGlue>(); CollectAllRemoved(old, _ExitingObjects); }
private void UpdateOnJavascriptContextAllContext(BridgeUpdater updater, IJsCsGlue value) { if (Context.JavascriptFrameworkIsMappingObject) { DispatchInJavascriptContext(() => UpdateOnJavascriptContextWithMapping(updater, value)); return; } DispatchInJavascriptContext(() => UpdateOnJavascriptContextWithoutMapping(updater, value)); }
public bool Visit(IJsCsGlue @object) { if (@object.JsValue != null) { return(false); } _Object = @object; _Object.RequestBuildInstruction(this); return(true); }
public void AddRequest(IJsCsGlue commandGlue, bool canExecute) { if (canExecute) { CommandExecutableBuildingRequested.Add(commandGlue); } else { CommandNotExecutableBuildingRequested.Add(commandGlue); } }
public static string AsCircularJson(this IJsCsGlue glue) { var descriptionBuilder = new DescriptionBuilder("cmd({0})"); glue.BuilString(descriptionBuilder); if (glue.Type == JsCsGlueType.Object) { descriptionBuilder.Prepend($@"{(descriptionBuilder.StringLength > 2 ? "," : "")}""version"":2"); } return(descriptionBuilder.BuildString()); }
internal BridgeUpdater Remove(IJsCsGlue old) { if (old == null) { return(this); } _ExitingObjects = _ExitingObjects ?? new HashSet <IJsCsGlue>(); CollectAllRemoved(old, _ExitingObjects); return(this); }
public void RemoveFromJsToCSharp(IJsCsGlue value) { var id = value.JsId; if (id == 0) { return; } _FromJavascriptGlobal.Remove(id); }
public void RemoveFromCSharpToJs(IJsCsGlue value) { var key = value.CValue; if (key == null) { return; } _FromCSharp.Remove(key); }
internal void RequestExecutableCreation(IJsCsGlue glueObject) { if (!_Mapping) { _ExecutableObjectsToCreate.Add(glueObject); return; } var command = _Factory.CreateObject(true); glueObject.SetJsValue(command, _Cache); }
private async void SetResult(IJavascriptObject promise, IJsCsGlue bridgevalue) { if (promise == null) { return; } await WebView.RunAsync(async() => { await promise.InvokeAsync("fullfill", WebView, bridgevalue.GetJsSessionValue()); }); }
public static string AsCircularVersionedJson(this IJsCsGlue glue, int?version = null) { version = version ?? CurrentVersion; var descriptionBuilder = GetConventionedBuilder(); glue.BuilString(descriptionBuilder); if (glue.Type == JsCsGlueType.Object) { descriptionBuilder.Prepend($@"{(descriptionBuilder.StringLength > 2 ? "," : "")}""version"":{version}"); } return(descriptionBuilder.BuildString()); }
internal void RequestExecutableCreation(IJsCsGlue glueObject) { if (!_Mapping) { ExecutableObjectsToCreate.Add(glueObject); return; } var command = _Factory.CreateObject(ObjectObservability.ReadOnlyObservable); glueObject.SetJsValue(command, _Cache); }
private void VisitUpdate(IJsCsGlue glue) { if (glue.JsValue != null) { return; } var updater = new JavascriptObjectSynchroneousBuilderAdapter(_Factory, _Cache, glue, _Mapping); updater.ApplyLocalChanges(); glue.VisitChildren(VisitUpdate); updater.AfterChildrenUpdates(); }
internal void RequestCommandCreation(IJsCsGlue glueObject, bool canExecute) { if (!_Mapping) { _CommandCreationRequest.AddRequest(glueObject, canExecute); return; } var command = _Factory.CreateObject(ObjectObservability.ReadOnlyObservable); command.SetValue("CanExecuteValue", _Factory.CreateBool(canExecute)); command.SetValue("CanExecuteCount", _Factory.CreateInt(1)); glueObject.SetJsValue(command, _Cache); }
public Result(IJsCsGlue value = null) { if (value == null) { TentativeValue = null; Success = false; } else { TentativeValue = value.CValue; Success = (TentativeValue is T) || (typeof(T).IsClass && TentativeValue == null); } Value = Success ? (T)TentativeValue : default(T); }