Commit 1c1cd21

mo khan <mo@mokhan.ca>
2016-07-19 03:43:22
start a timer for the plank sets.
1 parent 03e9bc0
Changed files (4)
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()