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