function format_length(seconds) { var length = Math.round(seconds); var minutes = Math.floor(length / 60); var seconds = length % 60; return minutes + ":" + ( "0" + seconds ).slice(-2); } function format_track(index, title, length, bpm, notes, cue_start, cue_bkdn, cue_next, cue_last, bars_in, bars_out) { length = format_length(length); bpm = Math.round(bpm); cue_start = format_length(cue_start); cue_bkdn = format_length(cue_bkdn); cue_next = '-' + format_length(cue_next); cue_last = '-' + format_length(cue_last); if ( notes == null ) notes = '-'; entry = $('
'); entry.append($('' + index + '')); tn = $('
'); tn.append($('' + title.slice(0,65) + '
')); tn.append($('' + notes.slice(0,80) + '')); entry.append(tn); if ( index > 0 ) { lb = $('
'); lb.append($('' + length + '
')); lb.append($('' + bpm + 'BPM')); entry.append(lb); cues = $('
'); cues.append($('Next: ' + cue_next + '
')); cues.append($('Last: ' + cue_last + '
')); cues.append($('(' + bars_out + ' bars)')); entry.append(cues); cues = $('
'); cues.append($('Start: ' + cue_start + '
')); cues.append($('Bkdn: ' + cue_bkdn + '
')); cues.append($('(' + bars_in + ' bars)
')); entry.append(cues); } return entry; } function init() { for (var index in tracklist) { track = tracklist[index]; entry = format_track( track['index'], track['title'], track['length'], track['bpm'], track['notes'], track['start'], track['bkdn'], track['next'], track['last'], track['in'], track['out'] ); $('#tracks').append(entry); } } /* Track 0 is 'no current track' */ function current(index) { if (index < 0 || index > maximum_index) return; current_index = index; $("div.track").removeClass("current"); $("div.track > .index").off('click.commit'); $("div#track_" + index).addClass("current"); $("div#track_" + index + " > .index").on('click.commit', commit); } function updating(index) { if (index < 0 || index > maximum_index) return; $("div.track").removeClass("running sending"); $("div#track_" + index).addClass("sending"); } function running(index) { if (index < 0 || index > maximum_index) return; $("div.track").removeClass("running sending"); $("div#track_" + index).addClass("running"); } function next() { current(current_index + 1); } function prev() { current(current_index - 1); } function commit() { running_index = current_index; commit_update(); params = { url: "/commit", type: "POST", data: { index: current_index } }; var req = $.ajax(params) .done(function(data, textStatus, req) { commit_ready(); }) .fail(function(req, textStatus, errorThrown) { console.log("AjaxFailed:" + textStatus + " - " + errorThrown); commit_failed(); }); } function commit_ready() { running(running_index); } function commit_update() { updating(running_index); } function commit_failed() { current(running_index); $('div.track').removeClass("running sending"); } maximum_index = tracklist.length; current_index = 0; running_index = 0; $(document).ready(init);