jam-cloud/web/app/assets/javascripts/dialog/openJamTrackDialog.js

134 lines
4.1 KiB
JavaScript

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