-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground-timer.coffee
67 lines (54 loc) · 1.61 KB
/
background-timer.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class BackgroundTimer
constructor: (@interval, @callback)->
start: ->
console.log "starting"
@startTicking() if @tickingEnabled
@timerID = setTimeout =>
@callback()
@cancel()
, @interval
document.addEventListener 'resume', =>
console.log "resume"
@wakeup()
, false
@expirationDate = moment(moment() + @interval)
@running = true
getRemaining: ->
@expirationDate - moment()
wakeup: ->
if @running
remaining = @getRemaining()
@cancel()
if remaining > 0
@constructor(remaining, @callback)
@start()
else
@callback()
@cancel
enableTicking: (@tickInterval, @tickCallback) ->
@tickingEnabled = true
pauseTicking: ->
if @tickerID
clearInterval @tickerID
@tickerID = null
resumeTicking: ->
@startTicking()
roundTime: (time) ->
Math.floor((time + 100) / 1000) * 1000
startTicking: ->
if @tickingEnabled
@tickerID = setInterval =>
@tickCallback @roundTime(@getRemaining())
, @tickInterval
disableTicking: ->
if @tickerID
@tickingEnabled = false
clearInterval @tickerID
@tickerID = null
cancel: ->
console.log "cancel"
if @running
@running = false
@pauseTicking()
clearTimeout @timerID
@timerID = null