Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop
This commit is contained in:
commit
974049f204
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 '<div class=\'no-jamtracks-msg\'>There\'s no jamtracks.</div>'
|
||||
@content.append '<div class=\'no-jamtracks-msg\'>No JamTracks found.</div>'
|
||||
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: $('<div class="infinite-scroll-loader">Loading ...</div>')
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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 '<div class=\'no-jamtracks-msg\'>There\'s no jamtracks.</div>'
|
||||
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: $('<div class="infinite-scroll-loader">Loading ...</div>')
|
||||
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()
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue