Merge branch 'feature/VRFS-2998' into develop

This commit is contained in:
Steven Miers 2015-04-07 12:08:03 -05:00
commit 34edd24972
5 changed files with 122 additions and 349 deletions

View File

@ -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

View File

@ -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()

View File

@ -90,13 +90,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 +127,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 +162,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;
}

View File

@ -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. &nbsp;&nbsp;&nbsp;&nbsp;
a.license-us-why.orange href="#" why?
="{% }; %}"
.clearall

View File

@ -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