Commit 1c1cd21
Changed files (4)
app
assets
javascripts
app/assets/javascripts/models/set.js.coffee
@@ -15,3 +15,6 @@ class Stronglifters.Set extends Backbone.Model
workSet: ->
@get("type") == "WorkSet"
+
+ timed: ->
+ @get("target_duration")?
app/assets/javascripts/models/timer.js.coffee
@@ -1,24 +1,28 @@
class Stronglifters.Timer
- constructor: (view) ->
- @view = view
+ constructor: (databag, key = 'clock', maxMilliseconds = 600000) ->
+ @databag = databag
+ @format = 'mm:ss'
+ @interval = 1000
+ @key = key
+ @maxMilliseconds = maxMilliseconds
start: ->
@stop()
- @view.set('timer', 0)
- @intervalId = setInterval @refreshTimer, 1000
+ @databag.set('timer', 0)
+ @intervalId = setInterval @refreshTimer, @interval
refreshTimer: =>
- @view.add('timer', 1000)
- @view.set('clock', moment.utc(@view.get('timer')).format('mm:ss'))
- if @view.get('timer') > 600000
+ @databag.add('timer', @interval)
+ @databag.set(@key, moment.utc(@databag.get('timer')).format(@format))
+ if @databag.get('timer') > @maxMilliseconds
@stop()
stop: =>
if @running()
clearTimeout @intervalId
@intervalId = null
- @view.set('clock', null)
+ @databag.set(@key, null)
running: ->
@intervalId?
app/assets/javascripts/templates/workout_view.ractive
@@ -14,7 +14,11 @@
<div class="row">
<div class="columns">
<button id='{{id}}' on-click="updateProgress" class="button {{status}}">
- {{actual_repetitions}}
+ {{#if target_duration}}
+ {{actual_duration}}
+ {{else}}
+ {{actual_repetitions}}
+ {{/if}}
</button>
</div>
<div class="columns">
app/assets/javascripts/views/workout_view.js.coffee
@@ -11,10 +11,11 @@ class Stronglifters.WorkoutView extends Ractive
@observe 'workout.exercises.*.sets.*', (newValue, oldValue, keypath) ->
@withModel keypath, (model) =>
- @refreshStatus(model, keypath)
+ @refreshStatus model, keypath
withModel: (keypath, callback) ->
model = new Stronglifters.Set(@get(keypath))
+ model.set 'keypath', keypath
callback(model)
prefix = (x, key) ->
x["#{keypath}.#{key}"] = model.changed[key]
@@ -22,6 +23,10 @@ class Stronglifters.WorkoutView extends Ractive
@set(_.reduce(_.keys(model.changed), prefix, {}))
updateProgress: (model) ->
+ if model.timed()
+ @startTimerFor(model)
+ return
+
if !model.started()
model.complete()
else
@@ -33,21 +38,28 @@ class Stronglifters.WorkoutView extends Ractive
message = "If it was easy break for 1:30, otherwise rest for 3:00."
else
message = "No rest for the wicked. Let's do this!"
- @displayMessage(message, 'success')
+ @displayMessage message, 'success'
else
- @displayMessage("Take a 5:00 break.", 'alert')
+ @displayMessage "Take a 5:00 break.", 'alert'
@clock.start()
refreshStatus: (model, keypath) ->
+ if model.timed()
+ return
+
if !model.started()
- @set("#{keypath}.status", "secondary hollow")
+ @set "#{keypath}.status", "secondary hollow"
return
if model.successful()
- @set("#{keypath}.status", "success")
+ @set "#{keypath}.status", "success"
else
- @set("#{keypath}.status", "alert")
+ @set "#{keypath}.status", "alert"
displayMessage: (message, status) ->
- @set('message', message)
- @set('alertStatus', status)
+ @set 'message', message
+ @set 'alertStatus', status
+
+ startTimerFor: (model) ->
+ @setTimer ?= new Stronglifters.Timer(@, "#{model.get('keypath')}.actual_duration", 60000)
+ @setTimer.start()