jivagoalves/pomodoro

View on GitHub
app/assets/javascripts/views/timer.js.coffee

Summary

Maintainability
Test Coverage
class Pomodoro.Views.Timer extends Backbone.View
  el: '#timer'

  defaultOptions: ->
    time_in_seconds: 25 * 60
    autostart: false
    tick: (timer, currentTime, formattedTime) =>
      @trigger('running')
    buzzer: (timer) =>
      @alarm.play()
      @resetTimerGracefully()

  initialize: ->
    @alarm = new buzz.sound('/alarm.wav')
    @options = _.extend @defaultOptions(), @options
    @createTimer()

  totalTime: ->
    @$el.
      data('countdown.settings').
      time_in_seconds

  remainingTime: ->
    time = Math.round(@$el.data('countdown.duration') / 1000)
    return 0 if time <= 0
    time

  spentTime: ->
    @totalTime() - @remainingTime()

  createTimer: (options)->
    @$el.createTimer _.extend(@options, options)
    @trigger('ready')

  startTimer: (options = {})->
    @$el.hide().fadeIn(1000)
    @$el.startTimer _.extend(@options, options)
    @trigger('ready')

  pauseTimer: ->
    @$el.pauseTimer()
    @trigger('paused')

  resetTimer: (options = {})->
    @$el.resetTimer _.extend(@options, options)
    @trigger('ready')

  resetTimerGracefully: ->
    @trigger('reset')

  isRunning: ->
    @$el.data('countdown.state') == 'running'

  isPaused: ->
    @$el.data('countdown.state') == 'paused'

  isReady: ->
    @$el.data('countdown.state') == 'ready'