From 0076f0205ab0ce5e8592c4dd7e101d72ca379f2c Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 4 Sep 2015 15:00:45 -0500 Subject: [PATCH] * VRFS-352 - instrument-centric landing page --- ruby/lib/jam_ruby/models/jam_track.rb | 2 +- ...e => IndividualJamTrackPage.js.jsx.coffee} | 4 +- .../landing/JamTrackCta.js.jsx.coffee | 53 +++++++++++++------ .../javascripts/web/individual_jamtrack.js | 23 ++++++++ .../landings/individual_jamtrack.css.scss | 12 +++++ web/app/controllers/landings_controller.rb | 14 ++++- web/config/routes.rb | 1 + web/spec/features/individual_jamtrack_spec.rb | 18 +++++++ 8 files changed, 107 insertions(+), 20 deletions(-) rename web/app/assets/javascripts/react-components/landing/{InvidualJamTrackPage.js.jsx.coffee => IndividualJamTrackPage.js.jsx.coffee} (92%) diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index 260a6a851..acbc2df32 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -328,7 +328,7 @@ module JamRuby end - query = query.where("jam_tracks.status = ?", 'Production') unless user.admin + query = query.where("jam_tracks.status = ?", 'Production') unless user && user.admin unless options[:genre].blank? query = query.joins(:genres) diff --git a/web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee b/web/app/assets/javascripts/react-components/landing/IndividualJamTrackPage.js.jsx.coffee similarity index 92% rename from web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee rename to web/app/assets/javascripts/react-components/landing/IndividualJamTrackPage.js.jsx.coffee index 2a29f9555..b2764cddf 100644 --- a/web/app/assets/javascripts/react-components/landing/InvidualJamTrackPage.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/landing/IndividualJamTrackPage.js.jsx.coffee @@ -9,7 +9,9 @@ context = window render: () -> header = null - if @props.band + if @props.instrument + header = "We Have #{@props.instrument_count} JamTracks With #{@props.instrument} Parts - Play Along With Your Favorites!" + else if @props.band header = "#{@props.jam_track.original_artist} Backing Tracks - Complete Multitracks" else if @props.generic? header = "Backing Tracks + Free Amazing App = Unmatched Experience" diff --git a/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee b/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee index 3562a1284..490751fd5 100644 --- a/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/landing/JamTrackCta.js.jsx.coffee @@ -39,29 +39,48 @@ rest = context.JK.Rest() {processing: false} render: () -> - bandBrowseUrl = "/client?artist=#{this.props.jam_track.original_artist}#/jamtrack/search" + isFree = context.JK.currentUserFreeJamTrack + if isFree img =`` else img =`` - `
-
- - {img} - - $1.99 value -
-
-
- or browse all {this.props.band_track_count} {this.props.jam_track.original_artist} backing tracks -
-
-
- or browse all {this.props.all_track_count} backing tracks! -
-
` + + if @props.instrument? + getFreeText = "Get \"#{this.props.jam_track.name}\" JamTrack Free Now" + instrumentBrowseUrl = "/client?instrument=#{this.props.instrument_id}#/jamtrack/filter" + + `
+
+ + {getFreeText} + +
+ Or Browse All {this.props.instrument_count} JamTracks With {this.props.instrument} Parts
And Get Your Favorite Free!
+
+
+
` + else + bandBrowseUrl = "/client?artist=#{this.props.jam_track.original_artist}#/jamtrack/search" + + `
+
+ + {img} + + $1.99 value +
+
+
+ or browse all {this.props.band_track_count} {this.props.jam_track.original_artist} backing tracks +
+
+
+ or browse all {this.props.all_track_count} backing tracks! +
+
` }) \ No newline at end of file diff --git a/web/app/assets/javascripts/web/individual_jamtrack.js b/web/app/assets/javascripts/web/individual_jamtrack.js index 6b0b8fd78..fc20baa68 100644 --- a/web/app/assets/javascripts/web/individual_jamtrack.js +++ b/web/app/assets/javascripts/web/individual_jamtrack.js @@ -12,10 +12,33 @@ var $jamTracksButton = null; var $ctaJamTracksButton = null; + function computeWeight (jam_track_track, instrument) { + var weight; + + if (jam_track_track.track_type == 'Master') { + weight = 0 + } + else if (jam_track_track.instrument.id == instrument) { + weight = 1 + jam_track_track.position + } + else { + weight = 10000 + jam_track_track.position + } + return weight; + } + function fetchJamTrack() { rest.getJamTrackWithArtistInfo({plan_code: gon.jam_track_plan_code}) .done(function (jam_track) { + if(gon.instrument_id) { + jam_track.tracks.sort(function(a, b) { + var aWeight = computeWeight(a, gon.instrument_id) + var bWeight = computeWeight(b, gon.instrument_id) + return aWeight - bWeight + }) + } + context._.each(jam_track.tracks, function (track) { var $element = $('
') diff --git a/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss b/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss index a45d0d720..575a36152 100644 --- a/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss +++ b/web/app/assets/stylesheets/landings/individual_jamtrack.css.scss @@ -108,6 +108,18 @@ body.web.landing_jamtrack.individual_jamtrack { } .cta-holder { + + &.instrument-selection { + a { + font-size: 18px; + text-decoration:underline; + } + + .browse-instrument { + margin-top:20px; + text-decoration:underline; + } + } margin-top:30px; text-align:center; .checkout { diff --git a/web/app/controllers/landings_controller.rb b/web/app/controllers/landings_controller.rb index c6a3730bd..d1e95e2ad 100644 --- a/web/app/controllers/landings_controller.rb +++ b/web/app/controllers/landings_controller.rb @@ -70,18 +70,30 @@ class LandingsController < ApplicationController def individual_jamtrack @no_landing_tag = true + instrument_id = nil + instrument_name = nil + instrument_count = 0 + if params[:instrument] + instrument = params[:instrument].downcase.sub('-', ' ') + instrument = Instrument.find_by_id(instrument) + instrument_id = instrument.id if instrument + instrument_name = instrument.description + query, next_ptr, instrument_count = JamTrack.index({instrument: instrument_id}, current_user) + end @jam_track = JamTrack.find_by_slug(params[:plan_code]) @jam_track = JamTrack.find_by_plan_code("jamtrack-" + params[:plan_code]) unless @jam_track band_jam_track_count = @jam_track.band_jam_track_count jam_track_count = JamTrack.count @title = individual_jamtrack_title(false, params[:generic], @jam_track) @description = individual_jamtrack_desc(false, params[:generic], @jam_track) - @page_data = {jam_track: @jam_track, all_track_count: jam_track_count, band_track_count: band_jam_track_count, band: false, generic: params[:generic]} + @page_data = {jam_track: @jam_track, all_track_count: jam_track_count, band_track_count: band_jam_track_count, band: false, generic: params[:generic], instrument: instrument_name, instrument_id: instrument_id, instrument_count: instrument_count} gon.jam_track_plan_code = @jam_track.plan_code if @jam_track gon.generic = params[:generic] + gon.instrument_id = instrument_id render 'individual_jamtrack', layout: 'web' end + def individual_jamtrack_band @no_landing_tag = true @jam_track = JamTrack.find_by_slug(params[:plan_code]) diff --git a/web/config/routes.rb b/web/config/routes.rb index e0e9ea630..233521e2c 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -32,6 +32,7 @@ SampleApp::Application.routes.draw do match '/landing/kick4', to: 'landings#watch_overview_kick4', via: :get, as: 'landing_kick4' match '/landing/jamtracks/:plan_code', to: 'landings#individual_jamtrack', via: :get, as: 'individual_jamtrack' match '/landing/jamtracks/band/:plan_code', to: 'landings#individual_jamtrack_band', via: :get, as: 'individual_jamtrack_band' + match '/landing/jamtracks/:instrument/:plan_code', to: 'landings#individual_jamtrack', via: :get, as: 'individual_jamtrack_instrument' # these are the older versions of the landing pages match '/landing/jamtracks/v1/:plan_code', to: 'landings#individual_jamtrack_v1', via: :get, as: 'individual_jamtrack_v1' match '/landing/jamtracks/v1/band/:plan_code', to: 'landings#individual_jamtrack_band_v1', via: :get, as: 'individual_jamtrack_band_v1' diff --git a/web/spec/features/individual_jamtrack_spec.rb b/web/spec/features/individual_jamtrack_spec.rb index 52f10c1a7..103e0eae8 100644 --- a/web/spec/features/individual_jamtrack_spec.rb +++ b/web/spec/features/individual_jamtrack_spec.rb @@ -120,5 +120,23 @@ describe "Individual JamTrack", :js => true, :type => :feature, :capybara_featur find('h1', text: 'check out') find('h3', text: 'OR SIGN UP USING YOUR EMAIL') end + + it "instrument version" do + visit "/landing/jamtracks/electric%20guitar/acdc-backinblack" + + find('h1', "We Have 1 JamTracks With Electric Guitar Parts - Play Along With Your Favorites!") + jamtrack_acdc_backinblack.jam_track_tracks.each do |track| + if track.master? + find('.jam-track-preview-holder[data-id="' + track.id + '"] img.instrument-icon[data-instrument-id="other"]') + find('.jam-track-preview-holder[data-id="' + track.id + '"] .instrument-name', text:'Master Mix') + else + find('.jam-track-preview-holder[data-id="' + track.id + '"] img.instrument-icon[data-instrument-id="' + track.instrument.id + '"]') + find('.jam-track-preview-holder[data-id="' + track.id + '"] .instrument-name', text:track.instrument.description) + end + end + find('a.cta-free-jamtrack').trigger(:click) + find('h1', text: 'check out') + find('h3', text: 'OR SIGN UP USING YOUR EMAIL') + end end end