Commit 2522f4e
Changed files (7)
app
assets
javascripts
lib
models
views
workouts
models
views
workouts
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 }} </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 %>