(function(context,$) { "use strict"; context.JK = context.JK || {}; context.JK.OpenJamTrackDialog = function(app) { var logger = context.JK.logger; var rest = context.JK.Rest(); var showing = false; var perPage = 10; var $dialog = null; var $tbody = null; var $paginatorHolder = null; var $templateOpenJamTrackRow = null; var $downloadedTrackHelp = null; var $whatAreJamTracks = null; var sampleRate = null; var sampleRateForFilename = null; function emptyList() { $tbody.empty(); } function resetPagination() { $dialog.find('.paginator').remove(); } function beforeShow() { } function afterShow() { $dialog.data('result', null) emptyList(); resetPagination(); showing = true; sampleRate = context.jamClient.GetSampleRate() sampleRateForFilename = sampleRate == 48 ? '48' : '44'; getPurchasedJamTracks(0) .done(function(data, textStatus, jqXHR) { // initialize pagination var $paginator = context.JK.Paginator.create(parseInt(jqXHR.getResponseHeader('total-entries')), perPage, 0, onPageSelected) $paginatorHolder.append($paginator); }); } function afterHide() { showing = false; } function onPageSelected(targetPage) { return getPurchasedJamTracks(targetPage); } function getPurchasedJamTracks(page) { return rest.getPurchasedJamTracks({page:page + 1, per_page:10}) .done(function(purchasedJamTracks) { emptyList(); $.each(purchasedJamTracks.jamtracks, function(index, jamTrack) { var options = {} options.jamTrackState = null; options.jamTrackId = jamTrack.id; options.name = jamTrack.name; options.artist = jamTrack.original_artist; var detail = context.jamClient.JamTrackGetTrackDetail(jamTrack.id + '-' + sampleRateForFilename) || {} options.downloaded = detail.key_state == 'ready' ? 'Yes' : 'No' var $tr = $(context._.template($templateOpenJamTrackRow.html(), options, { variable: 'data' })); $tr.data('server-model', jamTrack); $tbody.append($tr); }); }) .fail(function(jqXHR, textStatus, errorMessage) { app.ajaxError(jqXHR, textStatus, errorMessage); }); } function registerStaticEvents() { $tbody.on('click', 'tr', function(e) { var jamTrack = $(this).data('server-model'); // tell the server we are about to open a jamtrack rest.openJamTrack({id: context.SessionStore.id(), jam_track_id: jamTrack.id}) .done(function(response) { $dialog.data('result', {success:true, jamTrack: jamTrack}) context.SessionActions.updateSession.trigger(response); app.layout.closeDialog('open-jam-track-dialog'); }) .fail(function(jqXHR) { app.notifyServerError(jqXHR, "Unable to Open JamTrack For Playback"); }) return false; }) context.JK.helpBubble($downloadedTrackHelp, 'downloaded-jamtrack', {}, {width:'400px'}) $downloadedTrackHelp.on('click', false) context.JK.helpBubble($whatAreJamTracks, 'no help yet for this topic', {}, {positions:['bottom'], offsetParent: $dialog}) $whatAreJamTracks.on('click', false) // no help yet } function initialize(){ var dialogBindings = { 'beforeShow' : beforeShow, 'afterShow' : afterShow, 'afterHide': afterHide }; app.bindDialog('open-jam-track-dialog', dialogBindings); $dialog = $('#open-jam-track-dialog'); $tbody = $dialog.find('table.open-jam-tracks tbody'); $paginatorHolder = $dialog.find('.paginator-holder'); $templateOpenJamTrackRow = $('#template-jam-track-row') $downloadedTrackHelp = $dialog.find('.downloaded-jamtrack-help') $whatAreJamTracks = $dialog.find('.what-are-jamtracks') registerStaticEvents(); }; this.initialize = initialize; this.isShowing = function isShowing() { return showing; } } return this; })(window,jQuery);