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);
        }
Пример #2
0
 internal ArrayDescriptor(IJsCsGlue father, IReadOnlyList <IJsCsGlue> childrenDescription, int offfset = 0)
 {
     Father          = father;
     OrdenedChildren = childrenDescription;
     OffSet          = offfset;
     Count           = childrenDescription.Count;
 }
Пример #3
0
        private BridgeUpdater Update(Func <IJsCsGlue, BridgeUpdater> updaterBuilder, IJsCsGlue glue)
        {
            var updater = updaterBuilder(glue);

            updater.Cache = _SessionCache;
            return(updater);
        }
Пример #4
0
        public static string AsCircularJson(this IJsCsGlue glue)
        {
            var descriptionBuilder = GetConventionedBuilder();

            glue.BuilString(descriptionBuilder);
            return(descriptionBuilder.BuildString());
        }
Пример #5
0
 public JavascriptObjectSynchroneousBuilder(IJavascriptObjectFactory factory, ISessionCache cache, IJsCsGlue root, bool mapping)
 {
     _Mapping = mapping;
     _Factory = factory;
     _Cache   = cache;
     _Root    = root;
 }
Пример #6
0
        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);
            }
        }
Пример #8
0
        private IJsCsGlue ReplaceAndReturnOld(int index, IJsCsGlue newValue)
        {
            var old = Items[index];

            Items[index] = newValue;
            return(old);
        }
Пример #9
0
        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);
 }
Пример #11
0
 private static BridgeUpdater CheckForRemove(BridgeUpdater updater, IJsCsGlue glue)
 {
     if (glue.Release())
     {
         updater.Remove(glue);
     }
     return(updater);
 }
Пример #12
0
        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));
        }
Пример #13
0
 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);
     }));
 }
Пример #16
0
        private void CheckForRemoveNoReturn(IJsCsGlue old)
        {
            if (old?.Release() != true)
            {
                return;
            }

            _ExitingObjects = _ExitingObjects ?? new HashSet <IJsCsGlue>();
            CollectAllRemoved(old, _ExitingObjects);
        }
Пример #17
0
        private void UpdateOnJavascriptContextAllContext(BridgeUpdater updater, IJsCsGlue value)
        {
            if (Context.JavascriptFrameworkIsMappingObject)
            {
                DispatchInJavascriptContext(() => UpdateOnJavascriptContextWithMapping(updater, value));
                return;
            }

            DispatchInJavascriptContext(() => UpdateOnJavascriptContextWithoutMapping(updater, value));
        }
Пример #18
0
        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);
     }
 }
Пример #20
0
        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());
        }
Пример #21
0
        internal BridgeUpdater Remove(IJsCsGlue old)
        {
            if (old == null)
            {
                return(this);
            }

            _ExitingObjects = _ExitingObjects ?? new HashSet <IJsCsGlue>();
            CollectAllRemoved(old, _ExitingObjects);
            return(this);
        }
Пример #22
0
        public void RemoveFromJsToCSharp(IJsCsGlue value)
        {
            var id = value.JsId;

            if (id == 0)
            {
                return;
            }

            _FromJavascriptGlobal.Remove(id);
        }
Пример #23
0
        public void RemoveFromCSharpToJs(IJsCsGlue value)
        {
            var key = value.CValue;

            if (key == null)
            {
                return;
            }

            _FromCSharp.Remove(key);
        }
Пример #24
0
        internal void RequestExecutableCreation(IJsCsGlue glueObject)
        {
            if (!_Mapping)
            {
                _ExecutableObjectsToCreate.Add(glueObject);
                return;
            }

            var command = _Factory.CreateObject(true);

            glueObject.SetJsValue(command, _Cache);
        }
Пример #25
0
        private async void SetResult(IJavascriptObject promise, IJsCsGlue bridgevalue)
        {
            if (promise == null)
            {
                return;
            }

            await WebView.RunAsync(async() =>
            {
                await promise.InvokeAsync("fullfill", WebView, bridgevalue.GetJsSessionValue());
            });
        }
Пример #26
0
        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);
        }
Пример #28
0
        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);
        }
Пример #30
0
 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);
 }