| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- class app.ServiceWorker
- $.extend @prototype, Events
- @isEnabled: ->
- !!navigator.serviceWorker and app.config.service_worker_enabled
- constructor: ->
- @registration = null
- @notifyUpdate = true
- navigator.serviceWorker.register(app.config.service_worker_path, {scope: '/'})
- .then(
- (registration) => @updateRegistration(registration),
- (error) -> console.error('Could not register service worker:', error)
- )
- update: ->
- return unless @registration
- @notifyUpdate = true
- return @registration.update().catch(->)
- updateInBackground: ->
- return unless @registration
- @notifyUpdate = false
- return @registration.update().catch(->)
- reload: ->
- return @updateInBackground().then(() -> app.reboot())
- updateRegistration: (registration) ->
- @registration = registration
- $.on @registration, 'updatefound', @onUpdateFound
- return
- onUpdateFound: =>
- $.off @installingRegistration, 'statechange', @onStateChange() if @installingRegistration
- @installingRegistration = @registration.installing
- $.on @installingRegistration, 'statechange', @onStateChange
- return
- onStateChange: =>
- if @installingRegistration and @installingRegistration.state == 'installed' and navigator.serviceWorker.controller
- @installingRegistration = null
- @onUpdateReady()
- return
- onUpdateReady: ->
- @trigger 'updateready' if @notifyUpdate
- return
|