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

133 lines
4.2 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.OpenBackingTrackDialog = 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 $templateOpenBackingTrackRow = null;
var $downloadedTrackHelp = null;
var $whatAreBackingTracks = null;
function emptyList() {
$tbody.empty();
}
function resetPagination() {
$dialog.find('.paginator').remove();
}
function beforeShow() {
emptyList();
resetPagination();
showing = true;
getBackingTracks()
.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 getBackingTracks(targetPage);
}
function getBackingTracks(page) {
return rest.getBackingTracks({page:page + 1, per_page:10})
.done(function(result) {
console.log("result: ", result)
var backingTracks = result.backing_tracks
console.log("Backing Tracks: ", backingTracks)
emptyList();
$.each(backingTracks, function(index, backingTrack) {
console.log("Backing TRACK: ", backingTrack)
var options = {
backingTrackState: null,
path: backingTrack.path,
name: backingTrack.name,
length: backingTrack.length ? backingTrack.length : 0
}
console.log("options: ", options)
var $tr = $(context._.template($templateOpenBackingTrackRow.html(), options, { variable: 'data' }));
console.log("foo")
$tr.data('server-model', backingTrack);
console.log("bar")
console.log("Appending TR:")
$tbody.append($tr);
});
})
.fail(function(jqXHR, textStatus, errorMessage) {
app.ajaxError(jqXHR, textStatus, errorMessage);
});
}
function registerStaticEvents() {
$tbody.on('click', 'tr', function(e) {
var backingTrack = $(this).data('server-model');
// tell the server we are about to open a backing track:
rest.openBackingTrack({id: context.JK.CurrentSessionModel.id(), backing_track_path: backingTrack.path})
.done(function(response) {
var result = context.jamClient.SessionOpenBackingTrackFile(backingTrack.path);
console.log("BackingTrackPlay response: %o", result);
// TODO: Possibly actually check the result. Investigate
// what real client returns:
// // if(result) {
app.layout.closeDialog('open-backing-track-dialog');
// }
// else {
// logger.error("unable to open backing track")
// }
context.JK.CurrentSessionModel.refreshCurrentSession(true);
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, "Unable to Open BackingTrack For Playback");
})
return false;
})
context.JK.helpBubble($whatAreBackingTracks, 'no help yet for this topic', {}, {positions:['bottom'], offsetParent: $dialog})
$whatAreBackingTracks.on('click', false) // no help yet
}
function initialize(){
var dialogBindings = {
'beforeShow' : beforeShow,
'afterHide': afterHide
};
app.bindDialog('open-backing-track-dialog', dialogBindings);
$dialog = $('#open-backing-track-dialog');
$tbody = $dialog.find('table.open-backing-tracks tbody');
$paginatorHolder = $dialog.find('.paginator-holder');
$templateOpenBackingTrackRow = $('#template-backing-track-row')
$whatAreBackingTracks = $dialog.find('.what-are-backingtracks')
registerStaticEvents();
};
this.initialize = initialize;
this.isShowing = function isShowing() { return showing; }
}
return this;
})(window,jQuery);