jam-cloud/web/app/assets/javascripts/feed_item_session.js

106 lines
3.0 KiB
JavaScript

(function(context, $) {
"use strict";
context.JK = context.JK || {};
context.JK.FeedItemSessionTimer = null;
context.JK.FeedItemSession = function($parentElement, options){
var logger = context.JK.logger;
var rest = new context.JK.Rest();
var $feedItem = $parentElement;
var $description = $('.description', $feedItem)
var $musicians = $('.musician-detail', $feedItem)
var $controls = $('.session-controls', $feedItem);
var $status = $('.session-status', $feedItem);
var playing = false;
var toggledOpen = false;
var musicSessionId = $feedItem.attr('data-music-session');
if(!$feedItem.is('.feed-entry')) {
throw "$parentElement must be a .feed-entry"
}
function startPlay() {
var img = $('.play-icon', $feedItem);
img.attr('src', '/assets/content/icon_pausebutton.png');
$controls.trigger('play.listenBroadcast');
playing = true;
}
function stopPlay() {
var img = $('.play-icon', $feedItem);
img.attr('src', '/assets/content/icon_playbutton.png');
$controls.trigger('pause.listenBroadcast');
playing = false;
}
function togglePlay() {
if(playing) {
$status.text('SESSION IN PROGRESS');
stopPlay();
}
else {
startPlay();
}
return false;
}
function toggleDetails() {
if(toggledOpen) {
$feedItem.css('height', $feedItem.height() + 'px')
$feedItem.animate({'height': $feedItem.data('original-max-height')}).promise().done(function() {
$feedItem.css('height', 'auto').css('max-height', $feedItem.data('original-max-height'));
$musicians.hide();
$description.css('height', $description.data('original-height'));
$description.dotdotdot();
});
}
else {
$description.trigger('destroy.dot');
$description.data('original-height', $description.css('height')).css('height', 'auto');
$musicians.show();
$feedItem.animate({'max-height': '1000px'});
}
toggledOpen = !toggledOpen;
return false;
}
function stateChange(e, data) {
if(data.displayText) $status.text(data.displayText);
if(data.isEnd) stopPlay();
if(data.isSessionOver) {
$controls.removeClass('inprogress').addClass('ended')
}
}
function events() {
$('.details', $feedItem).click(toggleDetails);
$('.details-arrow', $feedItem).click(toggleDetails);
$('.play-button', $feedItem).click(togglePlay);
$controls.bind('statechange.listenBroadcast', stateChange);
}
function initialize() {
$('.timeago', $feedItem).timeago();
$('.dotdotdot', $feedItem).dotdotdot();
$controls.listenBroadcast();
context.JK.prettyPrintElements($('time.duration', $feedItem).show());
context.JK.setInstrumentAssetPath($('.instrument-icon', $feedItem));
$feedItem.data('original-max-height', $feedItem.css('height'));
events();
}
initialize();
return this;
}
})(window, jQuery);