* VRFS-2869 - band landing page
This commit is contained in:
parent
47c6b3ec16
commit
b1b2d3ad24
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,6 +23,7 @@ body.web.landing_page {
|
|||
|
||||
.landing-tag {
|
||||
left:50%;
|
||||
text-align:center;
|
||||
}
|
||||
p, ul, li {
|
||||
font-size:14px;
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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();
|
||||
})
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
- provide(:page_name, 'landing_page full landing_jamtrack individual_jamtrack_band')
|
||||
|
||||
.two_by_two
|
||||
.row
|
||||
.column
|
||||
h1
|
||||
| We Have
|
||||
span.jamtrack_band_info
|
||||
|
|
||||
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.
|
||||
| Unlike traditional backing tracks, JamTracks are complete multitrack recordings,
|
||||
| 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();
|
||||
})
|
||||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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 }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue