aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/assets/javascripts/cable/connection_monitor.js.coffee9
-rw-r--r--lib/assets/javascripts/cable/subscriptions.js.coffee13
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/assets/javascripts/cable/connection_monitor.js.coffee b/lib/assets/javascripts/cable/connection_monitor.js.coffee
index cac65d9043..5573ea5a77 100644
--- a/lib/assets/javascripts/cable/connection_monitor.js.coffee
+++ b/lib/assets/javascripts/cable/connection_monitor.js.coffee
@@ -30,9 +30,11 @@ class Cable.ConnectionMonitor
delete @stoppedAt
@startedAt = now()
@poll()
+ document.addEventListener("visibilitychange", @visibilityDidChange)
stop: ->
@stoppedAt = now()
+ document.removeEventListener("visibilitychange", @visibilityDidChange)
poll: ->
setTimeout =>
@@ -57,6 +59,13 @@ class Cable.ConnectionMonitor
else
secondsSince(@startedAt) > @staleThreshold.startedAt
+ visibilityDidChange: =>
+ if document.visibilityState is "visible"
+ setTimeout =>
+ if @connectionIsStale() or not @consumer.connection.isOpen()
+ @consumer.connection.reopen()
+ , 200
+
toJSON: ->
interval = @getInterval()
connectionIsStale = @connectionIsStale()
diff --git a/lib/assets/javascripts/cable/subscriptions.js.coffee b/lib/assets/javascripts/cable/subscriptions.js.coffee
index fe6975c870..eeaa697081 100644
--- a/lib/assets/javascripts/cable/subscriptions.js.coffee
+++ b/lib/assets/javascripts/cable/subscriptions.js.coffee
@@ -9,6 +9,7 @@
class Cable.Subscriptions
constructor: (@consumer) ->
@subscriptions = []
+ @history = []
create: (channelName, mixin) ->
channel = channelName
@@ -49,6 +50,10 @@ class Cable.Subscriptions
for subscription in subscriptions
subscription[callbackName]?(args...)
+ if callbackName in ["initialized", "connected", "disconnected"]
+ {identifier} = subscription
+ @record(notification: {identifier, callbackName, args})
+
sendCommand: (subscription, command) ->
{identifier} = subscription
if identifier is Cable.PING_IDENTIFIER
@@ -56,5 +61,11 @@ class Cable.Subscriptions
else
@consumer.send({command, identifier})
+ record: (data) ->
+ data.time = new Date()
+ @history = @history.slice(-19)
+ @history.push(data)
+
toJSON: ->
- subscription.identifier for subscription in @subscriptions
+ history: @history
+ identifiers: (subscription.identifier for subscription in @subscriptions)