travis-web/app/mixins/polling.coffee
2015-05-07 13:49:22 +02:00

70 lines
1.6 KiB
CoffeeScript

`import Ember from 'ember'`
mixin = Ember.Mixin.create
polling: Ember.inject.service()
didInsertElement: ->
@_super.apply(this, arguments)
@startPolling()
willDestroyElement: ->
@_super.apply(this, arguments)
@stopPolling()
willDestroy: ->
@_super.apply(this, arguments)
@stopPolling()
pollModelDidChange: (sender, key, value) ->
@pollModel(key)
pollModelWillChange: (sender, key, value) ->
@stopPollingModel(key)
pollModel: (property) ->
addToPolling = (model) =>
@get('polling').startPolling(model)
if model = @get(property)
if model.then
model.then (resolved) ->
addToPolling(resolved)
else
addToPolling(model)
stopPollingModel: (property) ->
model = @get(property)
@get('polling').stopPolling(model)
startPolling: ->
pollModels = @get('pollModels')
if pollModels
pollModels = [pollModels] unless pollModels.forEeach
pollModels.forEach (property) =>
@pollModel(property)
@addObserver(property, this, 'pollModelDidChange')
Ember.addBeforeObserver(this, property, this, 'pollModelWillChange')
@get('polling').startPollingHook(this) if @pollHook
stopPolling: ->
pollModels = @get('pollModels')
return unless pollModels
pollModels = [pollModels] unless pollModels.forEeach
pollModels.forEach (property) =>
@stopPollingModel(property)
@removeObserver(property, this, 'pollModelDidChange')
Ember.removeBeforeObserver(this, property, this, 'pollModelWillChange')
@get('polling').stopPollingHook(this)
`export default mixin`