diff options
| author | mo khan <mo@mokhan.ca> | 2017-03-11 19:33:25 -0700 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2017-03-11 19:33:25 -0700 |
| commit | 2522f4e3efb0092b64f30396efcf25f37ba866fa (patch) | |
| tree | ab535d918f1077bb37786db205db5d5357bfec7f | |
| parent | 93e0de131db5370d47a05fd32517b2147c787647 (diff) | |
connect the backbone automodel.
| -rw-r--r-- | app/assets/javascripts/lib/auto_model.js.coffee | 10 | ||||
| -rw-r--r-- | app/assets/javascripts/lib/autoview.js.coffee | 10 | ||||
| -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.coffee | 3 | ||||
| -rw-r--r-- | app/assets/javascripts/views/workouts/edit.js.coffee | 34 | ||||
| -rw-r--r-- | app/models/exercise_set.rb | 4 | ||||
| -rw-r--r-- | app/views/workouts/edit.html.erb | 14 |
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 }} </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 %> </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 %> |
