diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb
index a4d293276..31bf42893 100644
--- a/ruby/lib/jam_ruby/models/jam_track.rb
+++ b/ruby/lib/jam_ruby/models/jam_track.rb
@@ -161,16 +161,21 @@ module JamRuby
query = query.where("original_artist=?", options[:artist])
end
+
if options[:group_artist]
+ query = query.select("original_artist, array_agg(jam_tracks.id) AS id, MIN(name) AS name, MIN(description) AS description, MIN(recording_type) AS recording_type, MIN(original_artist) AS original_artist, MIN(songwriter) AS songwriter, MIN(publisher) AS publisher, MIN(sales_region) AS sales_region, MIN(price) AS price, MIN(version) AS version, MIN(genre_id) AS genre_id")
query = query.group("original_artist")
+ query = query.order('jam_tracks.original_artist')
+ else
+ query = query.group("jam_tracks.id")
+ query = query.order('jam_tracks.name')
end
query = query.where("jam_tracks.status = ?", 'Production') unless user.admin
query = query.where("jam_tracks.genre_id = '#{options[:genre]}'") unless options[:genre].blank?
query = query.where("jam_track_tracks.instrument_id = '#{options[:instrument]}'") unless options[:instrument].blank?
- query = query.where("jam_tracks.sales_region = '#{options[:availability]}'") unless options[:availability].blank?
- query = query.group("jam_tracks.id")
- query = query.order('jam_tracks.name')
+ query = query.where("jam_tracks.sales_region = '#{options[:availability]}'") unless options[:availability].blank?
+
if query.length == 0
[query, nil]
diff --git a/web/app/assets/javascripts/accounts_jamtracks.js.coffee b/web/app/assets/javascripts/accounts_jamtracks.js.coffee
index 43e1e51b9..f7bdef10f 100644
--- a/web/app/assets/javascripts/accounts_jamtracks.js.coffee
+++ b/web/app/assets/javascripts/accounts_jamtracks.js.coffee
@@ -18,37 +18,28 @@ context.JK.AccountJamTracks = class AccountJamTracks
@screen = $('#account-jamtracks')
beforeShow:() =>
- @logger.debug("beforeShow")
rest.getPurchasedJamTracks({})
.done(@populateJamTracks)
.fail(@app.ajaxError);
afterShow:() =>
- @logger.debug("afterShow")
-
+
populateJamTracks:(data) =>
- @logger.debug("populateJamTracks", data)
- template = context._.template($('#template-account-jamtrack').html(), {jamtracks:data.jamtracks}, { variable: 'data' })
-
- # template = context._.template($('#template-account-jamtrack').html(), {
- # jamtracks: data.jamtracks
- # current_user: @userId
- # }, variable: 'data')
- @logger.debug("TEMPLATE", template)
- this.appendJamTracks template
- @screen.find('.jamtrack-solo-session').on 'click', @soloSession
- @screen.find('.jamtrack-group-session').on 'click', @groupSession
+ if (data.jamtracks? && data.jamtracks.length > 0)
+ @screen.find(".no-jamtracks-found").addClass("hidden")
+ @appendJamTracks context._.template($('#template-account-jamtrack').html(), {jamtracks:data.jamtracks}, { variable: 'data' })
+ @screen.find('.jamtrack-solo-session').on 'click', @soloSession
+ @screen.find('.jamtrack-group-session').on 'click', @groupSession
+ else
+ @screen.find(".no-jamtracks-found").removeClass("hidden")
appendJamTracks:(template) =>
$('#account-my-jamtracks table tbody').replaceWith template
soloSession:(e) =>
#context.location="client#/createSession"
- @logger.debug "BLEH", e
jamRow = $(e.target).parents("tr")
- @logger.debug "BLEH2", e, jamRow.data()
@createSession(jamRow.data(), true)
- #@logger.debug "BLEH", $(this), $(this).data()
groupSession:(e) =>
#context.location="client#/createSession"
@@ -59,7 +50,6 @@ context.JK.AccountJamTracks = class AccountJamTracks
tracks = context.JK.TrackHelpers.getUserTracks(context.jamClient)
if (context.JK.guardAgainstBrowser(@app))
- @logger.debug("CRATING SESSION", sessionData.genre, solo)
data = {}
data.client_id = @app.clientId
#data.description = $('#description').val()
diff --git a/web/app/assets/javascripts/jam_track_screen.js.coffee b/web/app/assets/javascripts/jam_track_screen.js.coffee
index d2f1f21a0..9aaedfe3a 100644
--- a/web/app/assets/javascripts/jam_track_screen.js.coffee
+++ b/web/app/assets/javascripts/jam_track_screen.js.coffee
@@ -20,8 +20,8 @@ context.JK.JamTrackScreen=class JamTrackScreen
@currentPage = 0
@next = null
@currentQuery = this.defaultQuery()
- @expanded = false
-
+ @expanded = null
+
beforeShow:(data) =>
this.setFilterFromURL()
this.refresh()
@@ -67,10 +67,10 @@ context.JK.JamTrackScreen=class JamTrackScreen
refresh:() =>
@currentQuery = this.buildQuery()
that = this
- rest.getJamtracks(@currentQuery).done((response) ->
+ rest.getJamtracks(@currentQuery).done((response) =>
that.clearResults()
that.handleJamtrackResponse(response)
- ).fail (jqXHR) ->
+ ).fail (jqXHR) =>
that.clearResults()
that.noMoreJamtracks.show()
that.app.notifyServerError jqXHR, 'Jamtrack Unavailable'
@@ -118,7 +118,7 @@ context.JK.JamTrackScreen=class JamTrackScreen
# if we less results than asked for, end searching
@scroller.infinitescroll 'pause'
if @currentPage == 0 and response.jamtracks.length == 0
- @content.append '
There\'s no jamtracks.
'
+ @content.append 'No JamTracks found.
'
if @currentPage > 0
@noMoreJamtracks.show()
# there are bugs with infinitescroll not removing the 'loading'.
@@ -131,6 +131,7 @@ context.JK.JamTrackScreen=class JamTrackScreen
registerInfiniteScroll:() =>
+ that = this
@scroller.infinitescroll {
behavior: 'local'
navSelector: '#jamtrackScreen .btn-next-pager'
@@ -143,10 +144,10 @@ context.JK.JamTrackScreen=class JamTrackScreen
loading:
msg: $('Loading ...
')
img: '/assets/shared/spinner.gif'
- path: (page) ->
- '/api/jamtracks?' + $.param(this.buildQuery())
+ path: (page) =>
+ '/api/jamtracks?' + $.param(that.buildQuery())
- }, (json, opts) ->
+ }, (json, opts) =>
this.handleJamtrackResponse(json)
@scroller.infinitescroll 'resume'
@@ -156,7 +157,7 @@ context.JK.JamTrackScreen=class JamTrackScreen
addToCartJamtrack:(e) =>
e.preventDefault()
params = id: $(e.target).attr('data-jamtrack-id')
- rest.addJamtrackToShoppingCart(params).done((response) ->
+ rest.addJamtrackToShoppingCart(params).done((response) =>
context.location = '/client#/shoppingCart'
).fail @app.ajaxError
@@ -165,33 +166,61 @@ context.JK.JamTrackScreen=class JamTrackScreen
@app.layout.showDialog 'jamtrack-availability-dialog'
registerEvents:() =>
- @screen.find('.jamtrack-detail-btn').on 'click', this.showJamtrackDescription
+ #@screen.find('.jamtrack-detail-btn').on 'click', this.showJamtrackDescription
@screen.find('.play-button').on 'click', this.playJamtrack
@screen.find('.jamtrack-add-cart').on 'click', this.addToCartJamtrack
@screen.find('.license-us-why').on 'click', this.licenseUSWhy
@screen.find('.jamtrack-detail-btn').on 'click', this.toggleExpanded
-
+ # @screen.find('.jamtrack-preview').each (index, element) =>
+ # new JK.JamTrackPreview(data.app, $element, jamTrack, track, {master_shows_duration: true})
+
+ rerenderJamtracks:() =>
+ if @currentData?
+ @clearResults()
+ @renderJamtracks(@currentData)
+ false
+
renderJamtracks:(data) =>
+ @currentData = data
that = this
for jamtrack in data.jamtracks
+ jamtrackExpanded = this.expanded==jamtrack.id
+ trackRow = _.clone(jamtrack)
+ trackRow.track_cnt = jamtrack.tracks.length
+ trackRow.tracks = []
for track in jamtrack.tracks
- continue if track.track_type=='Master'
- inst = '../assets/content/icon_instrument_default24.png'
- if track.instrument.id in instrument_logo_map
- inst = instrument_logo_map[track.instrument.id].asset
- track.instrument_url = inst
- track.instrument_desc = track.instrument.description
- if track.part != ''
- track.instrument_desc += ' (' + track.part + ')'
+ if track.track_type != 'Master'
+ trackRow.tracks.push(track)
+ if track.track_type=='Master'
+ track.instrument_desc = "Master"
+ else
+ inst = '../assets/content/icon_instrument_default24.png'
+ if track.instrument?
+ if track.instrument.id in instrument_logo_map
+ inst = instrument_logo_map[track.instrument.id].asset
+ track.instrument_desc = track.instrument.description
+ track.instrument_url = inst
+
+ if track.part != ''
+ track.instrument_desc += ' (' + track.part + ')'
options =
- jamtrack: jamtrack
- expanded: that.expanded
-
+ jamtrack: trackRow
+ expanded: jamtrackExpanded
@jamtrackItem = $(context._.template($('#template-jamtrack').html(), options, variable: 'data'))
- that.renderJamtrack(@jamtrackItem)
+ that.renderJamtrack(@jamtrackItem, jamtrack)
+
this.registerEvents()
+ renderJamtrack:(jamtrackElement, jamTrack) =>
+ @content.append jamtrackElement
+
+ if this.expanded==jamTrack.id
+ for track in jamTrack.tracks
+ trackRow = jamtrackElement.find("[jamtrack-track-id='#{track.id}']")
+ previewElement = trackRow.find(".jamtrack-preview")
+ new JK.JamTrackPreview(@app, previewElement, jamTrack, track, {master_shows_duration: false})
+
showJamtrackDescription:(e) =>
e.preventDefault()
@description = $(e.target).parent('.detail-arrow').next()
@@ -200,13 +229,16 @@ context.JK.JamTrackScreen=class JamTrackScreen
else
@description.hide()
- toggleExpanded:() =>
- this.expanded = !this.expanded
- this.refresh()
-
- renderJamtrack:(jamtrack) =>
- @content.append jamtrack
-
+ toggleExpanded:(e) =>
+ e.preventDefault()
+ jamtrackRecord = $(e.target).parents('.jamtrack-record')
+ jamTrackId = jamtrackRecord.attr("jamtrack-id")
+ if this.expanded==jamTrackId
+ this.expanded = null
+ else
+ this.expanded = jamTrackId
+ this.rerenderJamtracks()
+
initialize:() =>
screenBindings =
'beforeShow': this.beforeShow
diff --git a/web/app/assets/javascripts/jamtrack.js.coffee b/web/app/assets/javascripts/jamtrack.js.coffee
deleted file mode 100644
index 95a1c89f0..000000000
--- a/web/app/assets/javascripts/jamtrack.js.coffee
+++ /dev/null
@@ -1,243 +0,0 @@
-$ = jQuery
-context = window
-context.JK ||= {}
-
-context.JK.JamTrackScreen=class JamTrackScreen
- LIMIT = 10
- instrument_logo_map = context.JK.getInstrumentIconMap24()
-
- constructor: (@app) ->
- @logger = context.JK.logger
- @screen = null
- @content = null
- @scroller = null
- @genre = null
- @artist = null
- @instrument = null
- @availability = null
- @nextPager = null
- @noMoreJamtracks = null
- @currentPage = 0
- @next = null
- @currentQuery = this.defaultQuery()
- @expanded = false
-
- beforeShow:(data) =>
- this.setFilterFromURL()
- this.refresh()
-
- afterShow:(data) =>
-
- events:() =>
- @genre.on 'change', this.search
- @artist.on 'change', this.search
- @instrument.on 'change', this.search
- @availability.on 'change', this.search
-
- clearResults:() =>
- #$logger.debug("CLEARING CONTENT")
- @currentPage = 0
- @content.empty()
- @noMoreJamtracks.hide()
- @next = null
-
- setFilterFromURL:() =>
- # Grab parms from URL for artist, instrument, and availability
- parms=this.getParams()
- this.logger.debug("parms", parms)
- if(parms.artist?)
- @artist.val(parms.artist)
- if(parms.instrument?)
- @instrument.val(parms.instrument)
- if(parms.availability?)
- @availability.val(parms.availability)
- window.history.replaceState({}, "", "/client#/jamtrack")
-
- getParams:() =>
- params = {}
- q = window.location.href.split("?")[1]
- if q?
- q = q.split('#')[0]
- raw_vars = q.split("&")
- for v in raw_vars
- [key, val] = v.split("=")
- params[key] = decodeURIComponent(val)
- params
-
- refresh:() =>
- @currentQuery = this.buildQuery()
- that = this
- rest.getJamtracks(@currentQuery).done((response) ->
- that.clearResults()
- that.handleJamtrackResponse(response)
- ).fail (jqXHR) ->
- that.clearResults()
- that.noMoreJamtracks.show()
- that.app.notifyServerError jqXHR, 'Jamtrack Unavailable'
-
- search:() =>
- this.refresh()
- false
-
- defaultQuery:() =>
- query =
- per_page: LIMIT
- page: @currentPage+1
- if @next
- query.since = @next
- query
-
- buildQuery:() =>
- @currentQuery = this.defaultQuery()
- # genre filter
- # var genres = @screen.find('#jamtrack_genre').val()
- # if (genres !== undefined) {
- # @currentQuery.genre = genres
- # }
- # instrument filter
-
- instrument = @instrument.val()
- if instrument?
- @currentQuery.instrument = instrument
-
- # artist filter
- art = @artist.val()
- if art?
- @currentQuery.artist = art
-
- # availability filter
- availability = @availability.val()
- if availability?
- @currentQuery.availability = availability
- @currentQuery
-
- handleJamtrackResponse:(response) =>
- #logger.debug("Handling response", JSON.stringify(response))
- @next = response.next
- this.renderJamtracks(response)
- if response.next == null
- # if we less results than asked for, end searching
- @scroller.infinitescroll 'pause'
- if @currentPage == 0 and response.jamtracks.length == 0
- @content.append 'There\'s no jamtracks.
'
- if @currentPage > 0
- @noMoreJamtracks.show()
- # there are bugs with infinitescroll not removing the 'loading'.
- # it's most noticeable at the end of the list, so whack all such entries
- $('.infinite-scroll-loader').remove()
- else
- @currentPage++
- this.buildQuery()
- this.registerInfiniteScroll()
-
-
- registerInfiniteScroll:() =>
- @scroller.infinitescroll {
- behavior: 'local'
- navSelector: '#jamtrackScreen .btn-next-pager'
- nextSelector: '#jamtrackScreen .btn-next-pager'
- binder: @scroller
- dataType: 'json'
- appendCallback: false
- prefill: false
- bufferPx: 100
- loading:
- msg: $('Loading ...
')
- img: '/assets/shared/spinner.gif'
- path: (page) ->
- '/api/jamtracks?' + $.param(this.buildQuery())
-
- }, (json, opts) ->
- this.handleJamtrackResponse(json)
- @scroller.infinitescroll 'resume'
-
- playJamtrack:(e) =>
- e.preventDefault()
-
- addToCartJamtrack:(e) =>
- e.preventDefault()
- params = id: $(e.target).attr('data-jamtrack-id')
- rest.addJamtrackToShoppingCart(params).done((response) ->
- context.location = '/client#/shoppingCart'
- ).fail @app.ajaxError
-
- licenseUSWhy:(e) =>
- e.preventDefault()
- @app.layout.showDialog 'jamtrack-availability-dialog'
-
- registerEvents:() =>
- @screen.find('.jamtrack-detail-btn').on 'click', this.showJamtrackDescription
- @screen.find('.play-button').on 'click', this.playJamtrack
- @screen.find('.jamtrack-add-cart').on 'click', this.addToCartJamtrack
- @screen.find('.license-us-why').on 'click', this.licenseUSWhy
- @screen.find('.jamtrack-detail-btn').on 'click', this.toggleExpanded
-
- renderJamtracks:(data) =>
- that = this
- for jamtrack in data.jamtracks
- for track in jamtrack.tracks
- continue if track.track_type=='Master'
- inst = '../assets/content/icon_instrument_default24.png'
- if track.instrument.id in instrument_logo_map
- inst = instrument_logo_map[track.instrument.id].asset
- track.instrument_url = inst
- track.instrument_desc = track.instrument.description
- if track.part != ''
- track.instrument_desc += ' (' + track.part + ')'
-
- options =
- jamtrack: jamtrack
- expanded: that.expanded
-
- @jamtrackItem = $(context._.template($('#template-jamtrack').html(), options, variable: 'data'))
- that.renderJamtrack(@jamtrackItem)
- this.registerEvents()
-
- showJamtrackDescription:(e) =>
- e.preventDefault()
- @description = $(e.target).parent('.detail-arrow').next()
- if @description.css('display') == 'none'
- @description.show()
- else
- @description.hide()
-
- toggleExpanded:() =>
- this.expanded = !this.expanded
- this.refresh()
-
- renderJamtrack:(jamtrack) =>
- @content.append jamtrack
-
- initialize:() =>
- screenBindings =
- 'beforeShow': this.beforeShow
- 'afterShow': this.afterShow
- @app.bindScreen 'jamtrack', screenBindings
- @screen = $('#jamtrack-find-form')
- @scroller = @screen.find('.content-body-scroller')
- @content = @screen.find('.jamtrack-content')
- @genre = @screen.find('#jamtrack_genre')
- @artist = @screen.find('#jamtrack_artist')
- @instrument = @screen.find('#jamtrack_instrument')
- @availability = @screen.find('#jamtrack_availability')
- @nextPager = @screen.find('a.btn-next-pager')
- @noMoreJamtracks = @screen.find('.end-of-jamtrack-list')
- if @screen.length == 0
- throw new Error('@screen must be specified')
- if @scroller.length == 0
- throw new Error('@scroller must be specified')
- if @content.length == 0
- throw new Error('@content must be specified')
- if @noMoreJamtracks.length == 0
- throw new Error('@noMoreJamtracks must be specified')
- #if(@genre.length == 0) throw new Error("@genre must be specified")
-
- if @artist.length == 0
- throw new Error('@artist must be specified')
- if @instrument.length == 0
- throw new Error('@instrument must be specified')
- if @availability.length == 0
- throw new Error('@availability must be specified')
- this.events()
-
-
diff --git a/web/app/assets/stylesheets/client/jamtrack.css.scss b/web/app/assets/stylesheets/client/jamtrack.css.scss
index d63839387..b9ed8314b 100644
--- a/web/app/assets/stylesheets/client/jamtrack.css.scss
+++ b/web/app/assets/stylesheets/client/jamtrack.css.scss
@@ -1,17 +1,40 @@
@import 'common';
#jamtrackLanding {
- ul {
- li {
- margin: 1px 4px 1px 4em;
- font-size:9px;
+ font-family: verdana;
+ .two-column-list-container {
+ -moz-column-count: 2;
+ -moz-column-gap: 20px;
+ -webkit-column-count: 2;
+ -webkit-column-gap: 20px;
+ column-count: 2;
+ column-gap: 20px;
+ margin-left: 0px;
+ ul {
+ list-style-type: none;
+ li {
+ margin: 1px 4px 1px 0px;
+ font-size:11px;
+ }
}
}
+ ul {
+ li {
+ margin: 1px 4px 1px 4px;
+ font-size:11px;
+ }
+ }
+
+ .browse-header {
+ padding: 4px 0 4px 0;
+ }
+
.list-columns {
+ padding: 4px;
h2 {
font-size: 16pt;
- font-weight:300;
+ font-weight:600;
font-style: bolder;
font-family: verdana;
text-transform: lowercase;
@@ -23,24 +46,26 @@
padding: 3px;
@include border-radius(7px);
background-color:$ColorScreenPrimary;
+ color: white !important;
text-align: center;
vertical-align: center;
}
.what, .howto {
margin-bottom: 2em;
- }
- p {
- font-size: 12pt !important;
- font-weight: normal;
- line-height: 16px;
- color: #dddddd;
* {
- font-size: 10pt !important;
- font-weight: normal;
- line-height: 16px;
- }
- }
+ font-family: arial;
+ font-size: 11pt;
+ font-weight: 200;
+ line-height: 17px;
+ color: #cccccc;
+ }
+ }
+
+ .details {
+ margin-bottom: 4px !important;
+ }
+
.about {
@include border_box_sizing;
float: left;
@@ -90,13 +115,13 @@
}
.jamtrack-record {
- border-bottom: 1px solid black;
+ //border-bottom: 1px solid black;
text-align: left;
}
.jamtrack-detail {
+ width: 35%;
@include border_box_sizing;
- float: left;
width: 30%;
padding: 10px 0px;
.detail-label {
@@ -127,22 +152,21 @@
.jamtrack-description {
display: none;
}
+
+ }
- .jamtrack-detail-btn {
- cursor: pointer;
- margin-top: 7px;
- margin-right: 5px;
- padding-top: 5px;
- vertical-align: bottom;
- }
+ .jamtrack-detail-btn {
+ cursor: pointer;
+ margin-top: 7px;
+ margin-right: 5px;
+ padding-top: 5px;
+ vertical-align: bottom;
}
.jamtrack-tracks {
@include border_box_sizing;
- float: left;
- width: 50%;
- padding: 10px 0px;
-
+ width: 35%;
+ padding: 10px 0px;
.tracks-caption {
margin-top: 5px;
margin-bottom: 10px;
@@ -163,14 +187,17 @@
margin-left: 10px;
}
}
+
+ .jamtrack-track {
+ margin-left: 7px;
+ }
.jamtrack-action {
@include border_box_sizing;
- float: left;
- width: 20%;
- padding: 10px 0px;
+ width: 35%;
+ // padding: 0px 0px;
text-align: center;
-
+ // vertical-align: top;
.play-button {
margin-top: 5px;
}
diff --git a/web/app/views/clients/_account_jamtracks.html.slim b/web/app/views/clients/_account_jamtracks.html.slim
index 966523768..c04de8d3c 100644
--- a/web/app/views/clients/_account_jamtracks.html.slim
+++ b/web/app/views/clients/_account_jamtracks.html.slim
@@ -22,7 +22,12 @@
th ORIGINAL ARTIST
th ACTIONS
tbody
+ tr.no-jamtracks-found.hidden
+ td colspan="3"
+ | You don't currently own any JamTracks.
+ a.orange href="/client#/jamtracks" Browse JamTracks Now
.right
+ a.button-orange href="/client#/jamtracks" JAMTRACKS
a.button-grey href="javascript:history.go(-1)" BACK
script#template-account-jamtrack type='text/template'
diff --git a/web/app/views/clients/_jamtrack.html.slim b/web/app/views/clients/_jamtrack.html.slim
index 79e2cf17e..6cf0504e2 100644
--- a/web/app/views/clients/_jamtrack.html.slim
+++ b/web/app/views/clients/_jamtrack.html.slim
@@ -9,30 +9,24 @@
=render(:partial => "web_filter", :locals => {:search_type => Search::PARAM_JAMTRACK})
.filter-body
.content-body-scroller
- .profile-wrapper
- .jamtrack-content
+ .profile-wrapper
+ table.generaltable
+ thead
+ tr
+ th JAMTRACK
+ th TRACKS INCLUDED/PREVIEW
+ th SHOP
+ tbody.jamtrack-content
a.btn-next-pager href="/api/jamtracks?page=1" Next
.end-of-jamtrack-list.end-of-list="No more Jamtracks"
script#template-jamtrack type='text/template'
- .jamtrack-record jamtrack-id="{{data.jamtrack.id}}"
- .top_bar
- .jamtrack-detail.jamtrack-header JAMTRACK
- .jamtrack-tracks.jamtrack-header TRACKS INCLUDED/PREVIEW
- .jamtrack-action.jamtrack-header SHOP
- .jamtrack-detail
+ tr.jamtrack-record jamtrack-id="{{data.jamtrack.id}}"
+ td.jamtrack-detail
.detail-label
| Title:
.detail-value
| {{data.jamtrack.name}}
- / .clearall.detail-label
- / | Type:
- / .detail-value
- / | {{data.jamtrack.recording_type}}
- / .clearall.detail-label
- / | Original Artist:
- / .detail-value
- / | {{data.jamtrack.original_artist}}
.clearall.detail-label
| Original Artist:
.detail-value
@@ -55,46 +49,27 @@ script#template-jamtrack type='text/template'
.detail-value
| {{data.jamtrack.description}}
="{% } %}"
-
-
- / / / .clearall.detail-label
- / | Copyright:
- / .copyright-value
- / ="{% if (data.jamtrack.licensor !=null) { %}"
- / | {{data.jamtrack.licensor.name}}
- / ="{% }; %}"
- / .clearall.jamtrack-description
- / .detail-label
- / | Description
- / .detail-value
- / | {{data.jamtrack.description}}
- / .clearall
- .jamtrack-tracks
- / .tracks-caption
- / | Tracks in This Recording:
- ="{% counter = 0 %}"
- ="{% _.each(data.jamtrack.tracks, function(track) { %}"
- ="{% if(track.track_type == JK.MASTER_TRACK) return; %}"
- .track-instrument href="{{track.url_44}}"
- .instrument-image
- img src="/assets/shared/play_button.png" width=24 height=24
- .instrument-image
- img src="{{track.instrument_url}}" width=24 height=24
- .instrument-desc
- | {{track.instrument_desc}}
- .clearall
- ="{% }); %}"
+ td.jamtrack-tracks
.detail-arrow
- .jamtrack-detail-btn
+ .jamtrack-detail-btn.orange
="{% if (data.expanded) { %}"
- | hide tracks
- =image_tag("up_arrow.png")
+ | hide tracks ({{data.jamtrack.tracks.length}})
+ a.details-arrow.arrow-up-orange
="{% } else { %}"
- | preview all tracks
- =image_tag("down_arrow.png")
+ | show tracks ({{data.jamtrack.tracks.length}})
+ a.details-arrow.arrow-down-orange
="{% } %}"
-
- .jamtrack-action
+ ="{% if (data.expanded) { %}"
+ ="{% _.each(data.jamtrack.tracks, function(track) { %}"
+ .jamtrack-track jamtrack-track-id="{{track.id}}"
+ / .instrument-desc
+ / | {{track.instrument_desc}}
+ /.track-instrument
+ .jamtrack-preview
+ .clearall
+ ="{% }); %}"
+ ="{% } %}"
+ td.jamtrack-action
/ a.play-button href="#" data-jamtrack-id="{{data.jamtrack.id}}"
/ =image_tag "shared/play_button.png"
.jamtrack-price
@@ -108,7 +83,6 @@ script#template-jamtrack type='text/template'
="{% }; %}"
="{% if (data.jamtrack.sales_region==JK.AVAILABILITY_US) { %}"
.jamtrack-license
- | This JamTrack available only to US customers.
- a.license-us-why href="#", why?
+ | This JamTrack available only to US customers.
+ a.license-us-why.orange href="#" why?
="{% }; %}"
- .clearall
diff --git a/web/app/views/clients/_jamtrack_landing.html.slim b/web/app/views/clients/_jamtrack_landing.html.slim
index 06e3efc2f..3096da3c8 100644
--- a/web/app/views/clients/_jamtrack_landing.html.slim
+++ b/web/app/views/clients/_jamtrack_landing.html.slim
@@ -8,7 +8,7 @@
.list-columns
.about
h2 what are jamtracks?
- p.what
+ .what
.details JamTracks are the best way to play along with your favorite music! Unlike traditional backing tracks, JamTracks are professionally mastered, complete multitrack recordings, with fully isolated tracks for each and every part of the master mix. Used with the free JamKazam app & Internet service, you can:
ul
li Solo just the part you want to play in order to hear and learn it
@@ -19,17 +19,17 @@
/ TODO: put in video thumbnail when available:
.browse
h2 my jamtracks
- p.howto
+ .howto
.details
span="To play with your JamTracks, open a JamTrack while in a session in the JamKazam app. Or "
a href="client#/jamtrack" visit the JamTracks Section of your account.
- .free-jamtrack.orange-fill
+ .free-jamtrack.orange-fill.details
| For a limited time, get one JamTrack free. Browse JamTracks below, add one to your shopping cart, and we'll make it free during the checkout process.
h2 browse jamtracks
.browse-header
- span="browse by band "
+ | browse by band
a href="client#/jamtrack" or browse all jamtracks
- .band-browse
+ .band-browse.two-column-list-container
ul#band_list
li#no_bands_found.hidden No bands found
diff --git a/web/config/routes.rb b/web/config/routes.rb
index b2e89c9d0..021dc0efc 100644
--- a/web/config/routes.rb
+++ b/web/config/routes.rb
@@ -212,10 +212,10 @@ SampleApp::Application.routes.draw do
match '/backing_tracks' => 'api_backing_tracks#index', :via => :get, :as => 'api_backing_tracks_list'
# Jamtracks
+ match '/jamtracks/purchased' => 'api_jam_tracks#purchased', :via => :get, :as => 'api_jam_tracks_purchased'
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'
match '/jamtracks/played/:id' => 'api_jam_tracks#played', :via => :post, :as => 'api_jam_tracks_played'
match '/jamtracks/enqueue/:id' => 'api_jam_tracks#enqueue', :via => :post, :as => 'api_jam_tracks_enqueue'
diff --git a/web/spec/features/jamtrack_shopping_spec.rb b/web/spec/features/jamtrack_shopping_spec.rb
index daeb34152..95f887979 100644
--- a/web/spec/features/jamtrack_shopping_spec.rb
+++ b/web/spec/features/jamtrack_shopping_spec.rb
@@ -49,15 +49,12 @@ describe "JamTrack Shopping", :js => true, :type => :feature, :capybara_feature
find('#jamtrack-availability-dialog #dialog-close-button').trigger(:click)
end
- jamtrack.jam_track_tracks.each do |track|
- jamtrack_record.find('.instrument-desc', "#{track.instrument.description} ( #{track.part} }")
- end
-
if options[:added_cart]
jamtrack_record.find('a.jamtrack-add-cart-disabled', text: 'Already In Cart')
else
jamtrack_record.find('a.jamtrack-add-cart.button-orange', text: 'Add to Cart')
end
+ jamtrack_record
end
def not_find_jamtrack jamtrack
@@ -144,5 +141,16 @@ describe "JamTrack Shopping", :js => true, :type => :feature, :capybara_feature
find('.shopping-sub-total', text: "Subtotal: $ #{jt_us.price + jt_ww.price}")
end
+
+ it "can expand" do
+ jamtrack = find_jamtrack(jt_us)
+ jamtrack.find('.jamtrack-detail-btn').trigger(:click)
+
+ jt_us.jam_track_tracks.each do |track|
+ jamtrack.find('.instrument-name', track.instrument.description)
+ jamtrack.find('.part', "(#{track.part}}")
+ end
+ end
+
end
end