* VRFS-2869 - band landing page

This commit is contained in:
Seth Call 2015-03-31 16:17:17 -05:00
parent 47c6b3ec16
commit b1b2d3ad24
14 changed files with 291 additions and 12 deletions

View File

@ -103,6 +103,10 @@ module JamRuby
warnings.join(',')
end
def band_jam_track_count
JamTrack.where(original_artist: original_artist).count
end
class << self
# @return array[artist_name(string)]
def all_artists

View File

@ -1443,6 +1443,15 @@
});
}
function getJamTrackWithArtistInfo(options) {
return $.ajax({
type: "GET",
url: '/api/jamtracks/band/' + options['plan_code'] + '?' + $.param(options),
dataType: "json",
contentType: 'application/json'
});
}
function getJamtracks(options) {
return $.ajax({
type: "GET",
@ -1752,6 +1761,7 @@
this.getLatencyTester = getLatencyTester;
this.updateAudioLatency = updateAudioLatency;
this.getJamTrack = getJamTrack;
this.getJamTrackWithArtistInfo = getJamTrackWithArtistInfo;
this.getJamtracks = getJamtracks;
this.getPurchasedJamTracks = getPurchasedJamTracks;
this.getPaymentHistory = getPaymentHistory;

View File

@ -1,4 +1,4 @@
body.web.landing_jamtrack.individual {
body.web.landing_jamtrack.individual_jamtrack {
.previews {
margin-top:10px;
@ -11,6 +11,11 @@ body.web.landing_jamtrack.individual {
margin-top: 20px;
}
.browse-jamtracks-wrapper {
text-align:center;
width:90%;
}
.jam-track-preview-holder {
margin-bottom: 7px;

View File

@ -0,0 +1,32 @@
body.web.landing_jamtrack.individual_jamtrack_band {
.previews {
margin-top:10px;
}
.jamtrack-reasons {
margin: 10px 0 0 20px;
}
.white-bordered-button {
margin-top: 20px;
}
.browse-jamtracks-wrapper {
text-align:center;
width:90%;
}
.jam-track-preview-holder {
margin-bottom: 7px;
float: left;
&[data-track-type="Master"] {
width: 100%;
}
&[data-track-type="Track"] {
width: 50%;
}
}
}

View File

@ -23,6 +23,7 @@ body.web.landing_page {
.landing-tag {
left:50%;
text-align:center;
}
p, ul, li {
font-size:14px;

View File

@ -1,8 +1,8 @@
class ApiJamTracksController < ApiController
# have to be signed in currently to see this screen
before_filter :api_signed_in_user, :except => [:index, :show]
before_filter :api_any_user, :only => [:index, :show]
before_filter :api_signed_in_user, :except => [:index, :show, :show_with_artist_info]
before_filter :api_any_user, :only => [:index, :show, :show_with_artist_info]
before_filter :lookup_jam_track_right, :only => [:download,:enqueue, :show_jam_track_right]
respond_to :json
@ -11,6 +11,10 @@ class ApiJamTracksController < ApiController
@jam_track = JamTrack.find_by_plan_code!(params[:plan_code])
end
def show_with_artist_info
@jam_track = JamTrack.find_by_plan_code!(params[:plan_code])
end
def index
data = JamTrack.index(params, any_user)
@jam_tracks, @next = data[0], data[1]

View File

@ -66,11 +66,16 @@ class LandingsController < ApplicationController
render 'watch_overview_tight', layout: 'web'
end
def individual_song
def individual_jamtrack
gon.jam_track_plan_code = params[:plan_code] ? "jamtrack-" + params[:plan_code] : nil
render 'individual_jamtrack', layout: 'web'
end
render 'individual_song', layout: 'web'
def individual_jamtrack_band
gon.jam_track_plan_code = params[:plan_code] ? "jamtrack-" + params[:plan_code] : nil
render 'individual_jamtrack_band', layout: 'web'
end
end

View File

@ -1,6 +1,6 @@
object @jam_track
attributes :id, :name, :description, :recording_type, :original_artist, :songwriter, :publisher, :sales_region, :price, :version, :duration
attributes :id, :name, :description, :recording_type, :original_artist, :songwriter, :publisher, :sales_region, :price, :version
node :genres do |item|
[item.genre.description] # XXX: need to return single genre; not array

View File

@ -0,0 +1,7 @@
object @jam_track
attributes :band_jam_track_count
node do |jam_track|
partial "api_jam_tracks/show", object: @jam_track
end

View File

@ -1,4 +1,4 @@
- provide(:page_name, 'landing_page full landing_jamtrack individual')
- provide(:page_name, 'landing_page full landing_jamtrack individual_jamtrack')
.two_by_two
.row
@ -43,7 +43,7 @@ javascript:
"use strict";
context.JK = context.JK || {};
context.JK.IndividualSong = function (app) {
context.JK.IndividualJamTrack = function (app) {
var rest = context.JK.Rest();
var logger = context.JK.logger;
@ -66,7 +66,7 @@ javascript:
$previews.append($element);
new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: true})
new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: false})
})
$previews.append('<br clear = "all" />')
@ -90,6 +90,6 @@ javascript:
})(window, jQuery);
$(document).on('JAMKAZAM_READY', function(e, data) {
var song = new JK.IndividualSong(data.app);
var song = new JK.IndividualJamTrack(data.app);
song.initialize();
})

View File

@ -0,0 +1,106 @@
- provide(:page_name, 'landing_page full landing_jamtrack individual_jamtrack_band')
.two_by_two
.row
.column
h1
| We Have&nbsp;
span.jamtrack_band_info
| &nbsp;
span.jamtrack_noun JamTracks
span.check-it-out , Check One Out!
p Click the play buttons below to hear the master mix and each fully isolated track. All are included in each single JamTrack.
.previews
.column
h1 See What You Can Do With JamTracks
.video-wrapper
.video-container
iframe src="//www.youtube.com/embed/gAJAIHMyois" frameborder="0" allowfullscreen
br clear="all"
.row
.column
h1
| Get Your First JamTrack Free Now!
p Click the GET A JAMTRACK FREE button below. Browse to find the one you want. Click Add to cart, and we'll apply a credit during checkout to make this first one free! We're confident you'll be back for more.
.browse-jamtracks-wrapper
a.white-bordered-button href="/client#/jamtrack" GET A JAMTRACK FREE!
.column
h1 Why Are JamTracks Different & Better?
p
| JamTracks are the best way to play with your favorite music.&nbsp;
| Unlike traditional backing tracks, JamTracks are complete multitrack recordings,&nbsp;
| with fully isolated tracks for each part. Used with the free JamKazam app/service, you can:
ul.jamtrack-reasons
li - Solo just the individual track you want to play to hear and learn it
li - Mute just the track you want to play, and play along with the rest
li - Make audio recordings and share them via Facebook or URL
li - Make video recordings and share them via YouTube or URL
li - And even go online to play JamTracks with others in real time!
br clear="all"
br clear="all"
javascript:
(function (context, $) {
"use strict";
context.JK = context.JK || {};
context.JK.IndividualJamTrackBand = function (app) {
var rest = context.JK.Rest();
var logger = context.JK.logger;
var $page = null;
var $jamTrackBandInfo = null;
var $jamTrackNoun = null;
var $previews = null;
var $jamTracksButton = null;
var $checkItOut = null;
function fetchJamTrack() {
rest.getJamTrackWithArtistInfo({plan_code: gon.jam_track_plan_code})
.done(function (jam_track) {
logger.debug("jam_track", jam_track)
$jamTrackBandInfo.text(jam_track.band_jam_track_count + ' ' + jam_track.original_artist);
$jamTracksButton.attr('href', '/client?artist=' + jam_track.original_artist + '#/jamtrack')
if(jam_track.band_jam_track_count == 1) {
$jamTrackNoun.text('JamTrack')
$checkItOut.text(', Check It Out!')
}
context._.each(jam_track.tracks, function (track) {
var $element = $('<div class="jam-track-preview-holder"></div>')
$previews.append($element);
new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: false})
})
$previews.append('<br clear = "all" />')
})
.fail(function () {
app.notify({title: 'Unable to fetch JamTrack', text: "Please refresh the page or try again later."})
})
}
function initialize() {
$page = $('body')
$jamTrackBandInfo = $page.find('.jamtrack_band_info')
$previews = $page.find('.previews')
$jamTracksButton = $page.find('.browse-jamtracks-wrapper .white-bordered-button')
$jamTrackNoun = $page.find('.jamtrack_noun')
$checkItOut = $page.find('.check-it-out')
fetchJamTrack();
}
this.initialize = initialize;
}
})(window, jQuery);
$(document).on('JAMKAZAM_READY', function(e, data) {
var song = new JK.IndividualJamTrackBand(data.app);
song.initialize();
})

View File

@ -30,7 +30,8 @@ SampleApp::Application.routes.draw do
match '/landing/kick2', to: 'landings#watch_overview_kick2', via: :get, as: 'landing_kick2'
match '/landing/kick3', to: 'landings#watch_overview_kick3', via: :get, as: 'landing_kick3'
match '/landing/kick4', to: 'landings#watch_overview_kick4', via: :get, as: 'landing_kick4'
match '/landing/jamtracks/:plan_code', to: 'landings#individual_song', via: :get, as: 'individual_song'
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'
# oauth
match '/auth/:provider/callback', :to => 'sessions#oauth_callback'
@ -207,6 +208,7 @@ SampleApp::Application.routes.draw do
# Jamtracks
match '/jamtracks/:plan_code' => 'api_jam_tracks#show', :via => :get, :as => 'api_jam_tracks_show'
match '/jamtracks/band/:plan_code' => 'api_jam_tracks#show_with_artist_info', :via => :get, :as => 'api_jam_tracks_show_with_artist_info'
match '/jamtracks' => 'api_jam_tracks#index', :via => :get, :as => 'api_jam_tracks_list'
match '/jamtracks/purchased' => 'api_jam_tracks#purchased', :via => :get, :as => 'api_jam_tracks_purchased'
match '/jamtracks/download/:id' => 'api_jam_tracks#download', :via => :get, :as => 'api_jam_tracks_download'

View File

@ -0,0 +1,103 @@
require 'spec_helper'
describe "Individual JamTrack Band", :js => true, :type => :feature, :capybara_feature => true do
subject { page }
before(:all) do
ShoppingCart.delete_all
JamTrackRight.delete_all
JamTrack.delete_all
JamTrackTrack.delete_all
JamTrackLicensor.delete_all
end
let(:user) { FactoryGirl.create(:user) }
let(:jamtrack_acdc_backinblack) { @jamtrack_acdc_backinblack }
let(:jamtrack_pearljam_evenflow) { @jamtrack_pearljam_evenflow }
let(:billing_info) {
{
first_name: 'Seth',
last_name: 'Call',
address1: '10704 Buckthorn Drive',
city: 'Austin',
state: 'Texas',
country: 'US',
zip: '78759',
number: '4111111111111111',
month: '08',
year: '2017',
verification_value: '012'
}
}
def create_account(user, billing_info)
@recurlyClient.create_account(user, billing_info)
@created_accounts << user
end
before(:all) do
@recurlyClient = RecurlyClient.new
@created_accounts = []
@jamtrack_acdc_backinblack = FactoryGirl.create(:jam_track, name: 'Back in Black', original_artist: 'AC/DC', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-acdc-backinblack')
@jamtrack_pearljam_evenflow = FactoryGirl.create(:jam_track, name: 'Even Flow', original_artist: 'Pearl Jam', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-pearljam-evenflow')
# make sure plans are there
@recurlyClient.create_jam_track_plan(@jamtrack_acdc_backinblack) unless @recurlyClient.find_jam_track_plan(@jamtrack_acdc_backinblack)
@recurlyClient.create_jam_track_plan(@jamtrack_pearljam_evenflow) unless @recurlyClient.find_jam_track_plan(@jamtrack_pearljam_evenflow)
end
after(:each) do
@created_accounts.each do |user|
if user.recurly_code
begin
@account = Recurly::Account.find(user.recurly_code)
if @account.present?
@account.destroy
end
rescue
end
end
end
end
describe "AC/DC Back in Black" do
it "logged out" do
visit "/landing/jamtracks/band/acdc-backinblack"
find('h1', text: "We Have 1 #{@jamtrack_acdc_backinblack.original_artist} JamTrack, Check It Out!")
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.white-bordered-button')['href'].should eq("/client?artist=#{jamtrack_acdc_backinblack.original_artist}#/jamtrack")
end
it "logged in" do
fast_signin(user, "/landing/jamtracks/band/acdc-backinblack")
find('h1', text: "We Have 1 #{@jamtrack_acdc_backinblack.original_artist} JamTrack, Check It Out!")
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.white-bordered-button')['href'].should eq("/client?artist=#{jamtrack_acdc_backinblack.original_artist}#/jamtrack")
end
end
end

View File

@ -1,6 +1,6 @@
require 'spec_helper'
describe "Home Screen", :js => true, :type => :feature, :capybara_feature => true do
describe "Individual JamTrack", :js => true, :type => :feature, :capybara_feature => true do
subject { page }