Commit 2522f4e

mo khan <mo@mokhan.ca>
2017-03-12 02:33:25
connect the backbone automodel.
1 parent 93e0de1
Changed files (7)
app/assets/javascripts/lib/behaviours/autoview.js.coffee → app/assets/javascripts/lib/behaviours/autoview_setup.js.coffee
@@ -1,4 +1,4 @@
-class Autoview extends Stronglifters.Behaviour
+class Stronglifters.AutoviewSetup extends Stronglifters.Behaviour
   @on "turbolinks:load"
 
   execute: ->
app/assets/javascripts/lib/auto_model.js.coffee
@@ -0,0 +1,10 @@
+class Stronglifters.AutoModel extends Backbone.Model
+  @factories: {}
+  @modelName: (name) ->
+    @factories[name] = this
+
+  @createModel: (name, attributes) ->
+    if (factory = @factories[name])
+      new factory(attributes || {})
+    else
+      new Backbone.Model(attributes || {})
app/assets/javascripts/lib/autoview.js.coffee
@@ -21,7 +21,17 @@ class Stronglifters.Autoview extends Backbone.View
   @install: (element) ->
     $element = $(element)
     name = $element.data("autoview-name")
+
     view = new @constructors[name]
       el: element
       $el: $element
+      model: @createModel($element.data('model'), $element.data('model-attributes'))
     view.render()
+    @views[name] ?= []
+    @views[name].push(view)
+
+  @createModel: (name, attributes) ->
+    Stronglifters.AutoModel.createModel(name, attributes)
+
+  render: ->
+    console.log(@$el.html())
app/assets/javascripts/models/set.js.coffee
@@ -1,4 +1,5 @@
-class Stronglifters.Set extends Backbone.Model
+class Stronglifters.Set extends Stronglifters.AutoModel
+  @modelName "set"
   urlRoot: '/sets'
   started: ->
     completed = @get("actual_repetitions")
app/assets/javascripts/views/workouts/edit.js.coffee
@@ -1,2 +1,36 @@
 Vue.component "exercise-set",
   props: ['set']
+  methods:
+    updateProgress: ->
+      @actual_repetitions = 1
+      console.log(@set)
+      console.log('update')
+
+class ExerciseSetView extends Stronglifters.Autoview
+  @viewName "exercise-set-view"
+  events:
+    'click button': 'updateProgress'
+
+  updateProgress: ->
+    if !@model.started()
+      @model.complete()
+    else
+      @model.decrement()
+    @model.save()
+    @$('button').html(@model.get('actual_repetitions'))
+
+    if @model.successful()
+      @$('button').addClass('is-success')
+      @$('button').removeClass('is-danger')
+      if @model.workSet()
+        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, 'is-success'
+    else
+      @$('button').removeClass('is-success')
+      @$('button').addClass('is-danger')
+      @displayMessage "Take a 5:00 break.", 'is-danger'
+
+  displayMessage: (message) ->
+    console.log(message)
app/models/exercise_set.rb
@@ -32,6 +32,10 @@ class ExerciseSet < ApplicationRecord
     !success?
   end
 
+  def started?
+    !actual_repetitions.nil?
+  end
+
   def to_hash
     {
       id: id,
app/views/workouts/edit.html.erb
@@ -9,7 +9,7 @@
               <p class="heading">
                 {{ set.target_repetitions }} x {{ set.target_weight }}
               </p>
-                <button on-click="updateProgress" class="button is-large">
+                <button v-on:click="updateProgress" class="button is-large">
                   {{ set.actual_repetitions }}
                 </button>
               <p> {{ set.weight_per_side }} &nbsp; </p>
@@ -26,7 +26,6 @@
     </div>
   </div>
 
-  <div id="workout-view"></div>
 <% @workout.exercises.primary.order_by_name.distinct.find_each do |exercise| %>
   <div class="columns content is-small has-text-centered">
     <div class="column is-12">
@@ -34,11 +33,11 @@
         <div class="level">
         <% @workout.sets.for(exercise).each do |set| %>
           <div class="level-item has-text-centered">
-            <div>
+            <div data-autoview-name="exercise-set-view" data-model="set" data-model-attributes="<%= set.to_json %>">
               <p class="heading">
                 <%= set.target_repetitions %> x <%= set.target_weight %>
               </p>
-              <button on-click="updateProgress" class="button is-large">
+              <button class="button is-large <%= set.success? ? "is-success" : set.started? ? "is-danger" : '' %>">
                 <%= set.actual_repetitions %>
               </button>
               <p> <%= set.weight_per_side %> &nbsp; </p>
@@ -52,11 +51,6 @@
 </div>
 
 <% content_for :javascript do %>
-window.currentView = new Stronglifters.WorkoutView({
-  el: 'workout-view',
-  data: function() {
-    return <%= raw render partial: 'edit.json.jbuilder', locals: { workout: @workout } %>;
-  }
-})
 new Stronglifters.Autovue().execute();
+new Stronglifters.AutoviewSetup().execute();
 <% end %>