diff --git a/Project.toml b/Project.toml index 1a341c14..dd85c48d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "WebIO" uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" license = "MIT" -version = "0.8.18" +version = "0.8.19" [deps] AssetRegistry = "bf4720bc-e11a-5d0c-854e-bdca1663c893" @@ -24,7 +24,7 @@ AssetRegistry = "0.1.0" FunctionalCollections = "0.5.0" JSExpr = "0.5" JSON = "0.18, 0.19, 0.20, 0.21" -Observables = "0.3, 0.4, 0.5" +Observables = "0.5" Requires = "0.4.4, 0.5, 1.0.0" WebSockets = "1.5.0" Widgets = "0.6.2" diff --git a/src/scope.jl b/src/scope.jl index f80a6bd5..9700673d 100644 --- a/src/scope.jl +++ b/src/scope.jl @@ -242,7 +242,7 @@ function JSON.lower(scope::Scope) if sync === nothing # by default, we sync if there are any listeners # other than the JS back edge - sync = any(f-> !isa(f, SyncCallback), listeners(ob)) + sync = any(((_, f),) -> !isa(f, SyncCallback), listeners(ob)) end obs_dict[k] = Dict( "sync" => sync, @@ -332,31 +332,21 @@ struct SyncCallback end (s::SyncCallback)(xs...) = s.f(xs...) + """ Set observable without synchronizing with the counterpart on the browser. This is mostly used to update observables in response to updates sent from th browser (so that we aren't sending the same update *back* to the browser). """ -function set_nosync end - -if isdefined(Observables, :setexcludinghandlers) - # Observables <=0.3 - function set_nosync(ob, val) - Observables.setexcludinghandlers(ob, val, x -> !(x isa SyncCallback)) - return - end -else - # Observables >=0.4 - function set_nosync(ob, val) - Observables.setexcludinghandlers!(ob, val) - for f in listeners(ob) - if !(f isa SyncCallback) - Base.invokelatest(f, val) - end +function set_nosync(ob, val) + Observables.setexcludinghandlers!(ob, val) + for (_, f) in listeners(ob) + if !(f isa SyncCallback) + Base.invokelatest(f, val) end - return end + return end const lifecycle_commands = ["scope_created"] @@ -388,7 +378,7 @@ end function ensure_sync(ctx, key) ob = ctx.observs[key][1] # have at most one synchronizing handler per observable - if !any(x->isa(x, SyncCallback) && x.ctx==ctx, listeners(ob)) + if !any(((_, x),) ->isa(x, SyncCallback) && x.ctx==ctx, listeners(ob)) f = SyncCallback(ctx, (msg) -> send_update_observable(ctx, key, msg)) on(SyncCallback(ctx, f), ob) end