summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2017-03-11 19:33:25 -0700
committermo khan <mo@mokhan.ca>2017-03-11 19:33:25 -0700
commit2522f4e3efb0092b64f30396efcf25f37ba866fa (patch)
treeab535d918f1077bb37786db205db5d5357bfec7f
parent93e0de131db5370d47a05fd32517b2147c787647 (diff)
connect the backbone automodel.
-rw-r--r--app/assets/javascripts/lib/auto_model.js.coffee10
-rw-r--r--app/assets/javascripts/lib/autoview.js.coffee10
-rw-r--r--app/assets/javascripts/lib/behaviours/autoview_setup.js.coffee (renamed from app/assets/javascripts/lib/behaviours/autoview.js.coffee)2
-rw-r--r--app/assets/javascripts/models/set.js.coffee3
-rw-r--r--app/assets/javascripts/views/workouts/edit.js.coffee34
-rw-r--r--app/models/exercise_set.rb4
-rw-r--r--app/views/workouts/edit.html.erb14
7 files changed, 65 insertions, 12 deletions
diff --git a/app/assets/javascripts/lib/auto_model.js.coffee b/app/assets/javascripts/lib/auto_model.js.coffee
new file mode 100644
index 0000000..af4eb23
--- /dev/null
+++ b/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 || {})
diff --git a/app/assets/javascripts/lib/autoview.js.coffee b/app/assets/javascripts/lib/autoview.js.coffee
index 91c79f6..7a70863 100644
--- a/app/assets/javascripts/lib/autoview.js.coffee
+++ b/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())
diff --git a/app/assets/javascripts/lib/behaviours/autoview.js.coffee b/app/assets/javascripts/lib/behaviours/autoview_setup.js.coffee
index 3f031de..f2546f6 100644
--- a/app/assets/javascripts/lib/behaviours/autoview.js.coffee
+++ b/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: ->
diff --git a/app/assets/javascripts/models/set.js.coffee b/app/assets/javascripts/models/set.js.coffee
index 8cea7d4..1fc7b71 100644
--- a/app/assets/javascripts/models/set.js.coffee
+++ b/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")
diff --git a/app/assets/javascripts/views/workouts/edit.js.coffee b/app/assets/javascripts/views/workouts/edit.js.coffee
index 183b13e..f9eaa0f 100644
--- a/app/assets/javascripts/views/workouts/edit.js.coffee
+++ b/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)
diff --git a/app/models/exercise_set.rb b/app/models/exercise_set.rb
index 3a0cd16..29a7f5a 100644
--- a/app/models/exercise_set.rb
+++ b/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,
diff --git a/app/views/workouts/edit.html.erb b/app/views/workouts/edit.html.erb
index 77403fb..9c1be92 100644
--- a/app/views/workouts/edit.html.erb
+++ b/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 %>