Commit 0d35677
Changed files (9)
app
assets
javascripts
views
programs
controllers
views
layouts
programs
app/assets/javascripts/lib/autoview.js.coffee
@@ -0,0 +1,19 @@
+class Stronglifters.Autoview extends Backbone.View
+ @views: {}
+ @constructors: {}
+
+ @viewName: (name) ->
+ @constructors[name] = this
+ @::name = name
+
+ @install: (element) ->
+ $element = $(element)
+ name = $element.data("autoview-name")
+ view = new @constructors[name]
+ el: element
+ $el: $element
+ view.render()
+
+document.addEventListener "turbolinks:load", ->
+ for element in $("[data-autoview-name]")
+ Stronglifters.Autoview.install(element)
app/assets/javascripts/views/programs/texas_method/volume_display.js.coffee
@@ -0,0 +1,48 @@
+Vue.component "personal-records",
+ props: ['personal_records']
+
+Vue.component "volume-day",
+ props: ['personal_records']
+ methods:
+ rounded: (n) ->
+ n - (n % 5)
+ computed:
+ squat: ->
+ @rounded(@personal_records.squat * 0.9)
+ bench_press: ->
+ @rounded(@personal_records.bench_press * 0.9)
+ overhead_press: ->
+ @rounded(@personal_records.overhead_press * 0.9)
+ barbell_row: ->
+ 0
+
+Vue.component "recovery-day",
+ props: ['personal_records']
+ methods:
+ rounded: (n) ->
+ n - (n % 5)
+ computed:
+ squat: ->
+ @rounded(@rounded(@personal_records.squat * 0.9) * 0.8)
+ bench_press: ->
+ @rounded(@personal_records.bench_press * 0.9)
+ overhead_press: ->
+ @rounded(@personal_records.overhead_press * 0.9)
+
+Vue.component "intensity-day",
+ props: ['personal_records']
+ computed:
+ squat: ->
+ @personal_records.squat + 5
+ bench_press: ->
+ @personal_records.bench_press + 5
+ overhead_press: ->
+ @personal_records.overhead_press + 5
+ deadlift: ->
+ @personal_records.deadlift + 5
+
+document.addEventListener "turbolinks:load", ->
+ for element in $("[data-autovue]")
+ window.app = new Vue
+ el: element
+ data: gon
app/assets/javascripts/views/programs/texas_method.jst.eco
@@ -0,0 +1,1 @@
+<h1>hello</h1>
app/assets/javascripts/views/programs/texas_method_view.js.coffee
@@ -0,0 +1,7 @@
+class TexasMethodView extends Stronglifters.Autoview
+ @viewName "texas-method-view"
+ template: JST['views/programs/texas_method']
+
+ render: () ->
+ html = @template(message: 'hello')
+ @$el.html(html)
app/controllers/programs_controller.rb
@@ -4,11 +4,13 @@ class ProgramsController < ApplicationController
end
def texas_method
- @barbell_row = personal_record_for(:barbell_row)
- @bench_press = personal_record_for(:bench_press)
- @deadlift = personal_record_for(:deadlift)
- @overhead_press = personal_record_for(:overhead_press)
- @squat = personal_record_for(:squat)
+ gon.personal_records = {
+ barbell_row: personal_record_for(:barbell_row),
+ bench_press: personal_record_for(:bench_press),
+ deadlift: personal_record_for(:deadlift),
+ overhead_press: personal_record_for(:overhead_press),
+ squat: personal_record_for(:squat),
+ }
end
private
app/views/layouts/application.html.erb
@@ -8,7 +8,7 @@
<title><%= t('.title') %> <%= content_for?(:title) ? "| #{yield(:title)}" : "" %></title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
- <%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?key=#{ENV['GOOGLE_MAPS_API_KEY']}" %>
+ <%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?key=#{ENV['GOOGLE_MAPS_API_KEY']}" if ENV['GOOGLE_MAPS_API_KEY'].present? %>
<%= yield(:head) %>
</head>
<body class="<%= current_layout %> <%= controller_name %> <%= action_name %>">
@@ -20,5 +20,6 @@
<script type="text/javascript" charset="utf-8">
<%= content_for :javascript %>
</script>
+ <%= include_gon %>
</body>
</html>
app/views/programs/texas_method.html.erb
@@ -1,4 +1,4 @@
-<div class="container">
+<div class="container" data-autovue="texas-method">
<div class="columns">
<div class="column is-12">
<h1 class="title">Texas Method</h1>
@@ -6,8 +6,26 @@
</div>
</div>
- <div class="columns">
- <div id="volume" class="column is-4">
+ <div class="columns" >
+ <div class="column is-3">
+ <personal-records v-bind:personal_records="personal_records" inline-template>
+ <%= form_tag texas_method_programs_path, method: :get do %>
+ <%= label_tag :bench_press, nil, class: 'label' %>
+ <%= number_field_tag :bench_press, nil, placeholder: 'Bench Press', class: 'input', 'v-model': 'personal_records.bench_press' %>
+ <%= label_tag :barbell_row, nil, class: 'label' %>
+ <%= number_field_tag :barbell_row, nil, placeholder: 'Barbell Row', class: 'input', 'v-model': 'personal_records.barbell_row' %>
+ <%= label_tag :deadlift, nil, class: 'label' %>
+ <%= number_field_tag :deadlift, nil, placeholder: 'Deadlift', class: 'input', 'v-model': 'personal_records.deadlift' %>
+ <%= label_tag :overhead_press, nil, class: 'label' %>
+ <%= number_field_tag :overhead_press, nil, placeholder: 'Overhead Press', class: 'input', 'v-model': 'personal_records.overhead_press' %>
+ <%= label_tag :squat, nil, class: 'label' %>
+ <%= number_field_tag :squat, nil, placeholder: 'Squat', class: 'input', 'v-model': 'personal_records.squat' %>
+ <% end %>
+ </personal-records>
+ </div>
+
+ <volume-day v-bind:personal_records="personal_records" inline-template>
+ <div class="column is-3">
<h1 class="title">Monday</h1>
<h2 class="subtitle">Volume Day</h2>
<table class="table">
@@ -32,75 +50,66 @@
</table>
<p class="content is-small">*Complete either Bench Press or Overhead Press.</p>
</div>
+ </volume-day>
- <div className="column is-4">
- <%= react_component('RecoveryDay', squat: @squat, bench_press: @bench_press, overhead_press: @overhead_press) %>
+ <recovery-day v-bind:personal_records="personal_records" inline-template>
+ <div class="column is-3">
+ <h1 class="title">Wednesday</h1>
+ <h2 class="subtitle">Recovery Day</h2>
+ <table class="table">
+ <tbody>
+ <tr>
+ <td><strong>Squat</strong> 2x5 @ 80% of Monday's work weight</td>
+ <td>{{squat}}lbs</td>
+ </tr>
+ <tr>
+ <td><strong>*Bench Press</strong> (3x5 @ 90% 5RM)</td>
+ <td>{{bench_press}}lbs</td>
+ </tr>
+ <tr>
+ <td>*<strong>Overhead Press</strong> 3x5 @ 90% 5RM</td>
+ <td>{{overhead_press}}lbs</td>
+ </tr>
+ <tr>
+ <td><strong>Chin-up</strong> 3 x body weight</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><strong>Back Extension</strong> or <strong>Glute Ham Raise</strong> 5x10</td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ <p class="content is-small">*Bench press if you overhead pressed on Monday.</p>
</div>
+ </recovery-day>
- <div class="column is-4">
+ <intensity-day v-bind:personal_records="personal_records" inline-template>
+ <div class="column is-3">
<h1 class="title">Friday</h1>
<h2 class="subtitle">Intensity Day</h2>
<table class="table">
<tbody>
<tr>
<td><strong>Squat</strong> (1x5 @ new 5RM)</td>
- <td><%= @squat + 5 %>lbs</td>
+ <td>{{squat}}lbs</td>
</tr>
<tr>
<td>*<strong>Bench Press</strong> (1x5 @ new 5RM)</td>
- <td><%= @bench_press + 5 %>lbs</td>
+ <td>{{bench_press}}lbs</td>
</tr>
<tr>
<td>*<strong>Overhead Press</strong> (1x5 @ new 5RM)</td>
- <td><%= @overhead_press + 5 %>lbs</td>
+ <td>{{overhead_press}}lbs</td>
</tr>
<tr>
<td><strong>Deadlift</strong> (1x5 @ new 5RM)</td>
- <td><%= rounded(@deadlift + 5) %>lbs</td>
+ <td>{{deadlift}}lbs</td>
</tr>
</tbody>
</table>
<p class="content is-small">*Complete either Bench Press or Overhead Press. Match the exercise from Monday.</p>
</div>
- </div>
-
- <div class="columns">
- <div class="column is-6 is-offset-3">
- <%= form_tag texas_method_programs_path, method: :get do %>
- <%= label_tag :bench_press, nil, class: 'label' %>
- <%= number_field_tag :bench_press, @bench_press, placeholder: 'Bench Press', class: 'input' %>
- <%= label_tag :barbell_row, nil, class: 'label' %>
- <%= number_field_tag :barbell_row, @barbell_row, placeholder: 'Barbell Row', class: 'input' %>
- <%= label_tag :deadlift, nil, class: 'label' %>
- <%= number_field_tag :deadlift, @deadlift, placeholder: 'Deadlift', class: 'input' %>
- <%= label_tag :overhead_press, nil, class: 'label' %>
- <%= number_field_tag :overhead_press, @overhead_press, placeholder: 'Overhead Press', class: 'input' %>
- <%= label_tag :squat, nil, class: 'label' %>
- <%= number_field_tag :squat, @squat, placeholder: 'Squat', class: 'input' %>
- <%= submit_tag "Submit", class: 'button is-primary is-fullwidth' %>
- <% end %>
- </div>
+ </volume-day>
</div>
</div>
-
-<% content_for :javascript do %>
- $(function(){
- window.volume = new Vue({
- el: '#volume',
- data: {
- squat_pr: <%= @squat %>,
- bench_press_pr: <%= @bench_press %>,
- overhead_press_pr: <%= @overhead_press %>,
- barbell_row: 0,
- },
- computed: {
- squat: function() { return this.rounded(this.squat_pr * 0.9); },
- bench_press: function() { return this.rounded(this.bench_press_pr * 0.9); },
- overhead_press: function() { return this.rounded(this.overhead_press_pr * 0.9); },
- },
- methods: {
- rounded: function(n) { return n - n % 5; }
- }
- });
- });
-<% end %>
Gemfile
@@ -16,6 +16,7 @@ source "https://rubygems.org" do
gem "dalli"
gem "database_cleaner", group: :test
gem "dotenv-rails"
+ gem "eco"
gem "email_validator"
gem "exception_notification"
gem "factory_girl_rails", group: :test
@@ -28,6 +29,7 @@ source "https://rubygems.org" do
gem "gaffe"
gem "geocoder"
gem "geokit-rails"
+ gem "gon"
gem "griddler"
gem "griddler-sendgrid"
gem "groupdate"
Gemfile.lock
@@ -140,6 +140,11 @@ GEM
json
thread
thread_safe
+ eco (1.0.0)
+ coffee-script
+ eco-source
+ execjs
+ eco-source (1.1.0.rc.1)
email_validator (1.6.0)
activemodel
equalizer (0.0.11)
@@ -178,6 +183,11 @@ GEM
gherkin (4.0.0)
globalid (0.3.7)
activesupport (>= 4.1.0)
+ gon (6.1.0)
+ actionpack (>= 3.0)
+ json
+ multi_json
+ request_store (>= 1.0)
griddler (1.3.1)
htmlentities
rails (>= 3.2.0)
@@ -330,6 +340,7 @@ GEM
tilt
redis (3.3.0)
ref (2.0.0)
+ request_store (1.3.2)
rspec-core (3.5.1)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
@@ -464,6 +475,7 @@ DEPENDENCIES
dalli!
database_cleaner!
dotenv-rails!
+ eco!
email_validator!
exception_notification!
factory_girl_rails!
@@ -476,6 +488,7 @@ DEPENDENCIES
gaffe!
geocoder!
geokit-rails!
+ gon!
griddler!
griddler-sendgrid!
groupdate!