diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php
index 9eed5f2df..08ae57b8e 100644
--- a/airtime_mvc/application/controllers/PlaylistController.php
+++ b/airtime_mvc/application/controllers/PlaylistController.php
@@ -256,42 +256,37 @@ class PlaylistController extends Zend_Controller_Action
$this->view->description = $pl->getDescription();
unset($this->view->pl);
-
- return;
}
public function setCueAction()
{
- $request = $this->getRequest();
$pos = $this->_getParam('pos');
$pl = $this->getPlaylist();
- if($pl === false){
+ if ($pl === false){
$this->view->playlist_error = true;
return false;
}
- if($request->isPost()) {
- $cueIn = $this->_getParam('cueIn', null);
- $cueOut = $this->_getParam('cueOut', null);
+ $cueIn = $this->_getParam('cueIn', null);
+ $cueOut = $this->_getParam('cueOut', null);
- $response = $pl->changeClipLength($pos, $cueIn, $cueOut);
+ $response = $pl->changeClipLength($pos, $cueIn, $cueOut);
- $this->view->response = $response;
- return;
+ $this->view->response = $response;
+
+ if(!isset($response["error"])) {
+ $this->view->pl = $pl;
+ $this->view->html = $this->view->render('playlist/update.phtml');
+ $this->view->name = $pl->getName();
+ $this->view->length = $pl->getLength();
+ $this->view->description = $pl->getDescription();
+
+ unset($this->view->pl);
}
-
- $cues = $pl->getCueInfo($pos);
-
- $this->view->pos = $pos;
- $this->view->cueIn = $cues[0];
- $this->view->cueOut = $cues[1];
- $this->view->origLength = $cues[2];
- $this->view->html = $this->view->render('playlist/set-cue.phtml');
}
public function setFadeAction()
{
- $request = $this->getRequest();
$pos = $this->_getParam('pos');
$pl = $this->getPlaylist();
if($pl === false){
@@ -299,24 +294,22 @@ class PlaylistController extends Zend_Controller_Action
return false;
}
- if($request->isPost()) {
- $fadeIn = $this->_getParam('fadeIn', null);
- $fadeOut = $this->_getParam('fadeOut', null);
+ $fadeIn = $this->_getParam('fadeIn', null);
+ $fadeOut = $this->_getParam('fadeOut', null);
- $response = $pl->changeFadeInfo($pos, $fadeIn, $fadeOut);
+ $response = $pl->changeFadeInfo($pos, $fadeIn, $fadeOut);
- $this->view->response = $response;
- return;
- }
+ $this->view->response = $response;
- $this->view->pos = intval($pos);
+ if(!isset($response["error"])) {
+ $this->view->pl = $pl;
+ $this->view->html = $this->view->render('playlist/update.phtml');
+ $this->view->name = $pl->getName();
+ $this->view->length = $pl->getLength();
+ $this->view->description = $pl->getDescription();
- $fades = $pl->getFadeInfo($pos+1);
- $this->view->fadeIn = $fades[0];
-
- $fades = $pl->getFadeInfo($pos);
- $this->view->fadeOut = $fades[1];
- $this->view->html = $this->view->render('playlist/set-fade.phtml');
+ unset($this->view->pl);
+ }
}
public function deleteAction()
diff --git a/airtime_mvc/application/views/scripts/playlist/update.phtml b/airtime_mvc/application/views/scripts/playlist/update.phtml
index 0191d9add..5c36f3633 100644
--- a/airtime_mvc/application/views/scripts/playlist/update.phtml
+++ b/airtime_mvc/application/views/scripts/playlist/update.phtml
@@ -4,10 +4,10 @@ if (count($items)) : ?>
-
+ ">
-
+
+ partial('playlist/set-cue.phtml', array(
+ 'pos' => $i,
+ 'cueIn' => $item['cuein'],
+ 'cueOut' => $item['cueout'],
+ 'origLength' => $item["CcFiles"]['length'])); ?>
+
-
-
+
+
+
+ partial('playlist/set-fade.phtml', array(
+ 'pos' => $i,
+ 'fadeOut' => $items[$i]['fadeout'],
+ 'fadeIn' => $items[$i+1]['fadein'])); ?>
+
@@ -36,5 +53,5 @@ if (count($items)) : ?>
-Empty playlist
+Empty playlist
diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js
index a3d342e03..6d90069fe 100644
--- a/airtime_mvc/public/js/airtime/library/spl.js
+++ b/airtime_mvc/public/js/airtime/library/spl.js
@@ -2,6 +2,11 @@
//Side Playlist Functions
//--------------------------------------------------------------------------------------------------------------------------------
+function stopAudioPreview() {
+ // stop any preview playing
+ $('#jquery_jplayer_1').jPlayer('stop');
+}
+
function isTimeValid(time) {
var regExpr = new RegExp("^\\d{2}[:]\\d{2}[:]\\d{2}([.]\\d{1,6})?$");
@@ -12,17 +17,6 @@ function isTimeValid(time) {
return true;
}
-function changeClipLength(pos, json) {
-
- $("#spl_"+pos).find(".spl_playlength")
- .empty()
- .append(json.response.cliplength);
-
- $("#spl_length")
- .empty()
- .append(json.response.length);
-}
-
function showError(el, error) {
$(el).parent().next()
.empty()
@@ -39,41 +33,47 @@ function hideError(el) {
function changeCueIn(event) {
event.stopPropagation();
- var pos, url, cueIn, div;
+ var pos, url, cueIn, li, unqid;
span = $(this);
pos = span.parent().attr("id").split("_").pop();
url = "/Playlist/set-cue";
cueIn = span.text().trim();
+ li = span.parent().parent().parent().parent();
+ unqid = li.attr("unqid");
if(!isTimeValid(cueIn)){
showError(span, "please put in a time '00:00:00 (.000000)'");
return;
}
- $.post(url, {format: "json", cueIn: cueIn, pos: pos}, function(json){
- if(json.playlist_error == true){
- alertPlaylistErrorAndReload();
- }
- if(json.response.error) {
+ $.post(url, {format: "json", cueIn: cueIn, pos: pos, type: event.type}, function(json){
+
+ if(json.response !== undefined && json.response.error) {
showError(span, json.response.error);
return;
}
-
- changeClipLength(pos, json);
- hideError(span);
+
+ setSPLContent(json);
+
+ li = $('#side_playlist li[unqid='+unqid+']');
+ li.find(".cue-edit").toggle();
+ highlightActive(li);
+ highlightActive(li.find('.spl_cue'));
});
}
function changeCueOut(event) {
event.stopPropagation();
- var pos, url, cueOut, div;
+ var pos, url, cueOut, li, unqid;
span = $(this);
pos = span.parent().attr("id").split("_").pop();
url = "/Playlist/set-cue";
cueOut = span.text().trim();
+ li = span.parent().parent().parent().parent();
+ unqid = li.attr("unqid");
if(!isTimeValid(cueOut)){
showError(span, "please put in a time '00:00:00 (.000000)'");
@@ -81,28 +81,32 @@ function changeCueOut(event) {
}
$.post(url, {format: "json", cueOut: cueOut, pos: pos}, function(json){
- if(json.playlist_error == true){
- alertPlaylistErrorAndReload();
- }
- if(json.response.error) {
+
+ if(json.response !== undefined && json.response.error) {
showError(span, json.response.error);
return;
}
- changeClipLength(pos, json);
- hideError(span);
+ setSPLContent(json);
+
+ li = $('#side_playlist li[unqid='+unqid+']');
+ li.find(".cue-edit").toggle();
+ highlightActive(li);
+ highlightActive(li.find('.spl_cue'));
});
}
function changeFadeIn(event) {
event.stopPropagation();
- var pos, url, fadeIn, div;
+ var pos, url, fadeIn, li, unqid;
span = $(this);
pos = span.parent().attr("id").split("_").pop();
url = "/Playlist/set-fade";
fadeIn = span.text().trim();
+ li = span.parent().parent().parent().parent();
+ unqid = li.attr("unqid");
if(!isTimeValid(fadeIn)){
showError(span, "please put in a time '00:00:00 (.000000)'");
@@ -110,26 +114,31 @@ function changeFadeIn(event) {
}
$.post(url, {format: "json", fadeIn: fadeIn, pos: pos}, function(json){
- if(json.playlist_error == true){
- alertPlaylistErrorAndReload();
- }
- if(json.response.error) {
+
+ if(json.response !== undefined && json.response.error) {
+ showError(span, json.response.error);
return;
}
- hideError(span);
+ setSPLContent(json);
+
+ li = $('#side_playlist li[unqid='+unqid+']');
+ li.find('.crossfade').toggle();
+ highlightActive(li.find('.spl_fade_control'));
});
}
function changeFadeOut(event) {
event.stopPropagation();
- var pos, url, fadeOut, div;
+ var pos, url, fadeOut, li, unqid;
span = $(this);
pos = span.parent().attr("id").split("_").pop();
url = "/Playlist/set-fade";
fadeOut = span.text().trim();
+ li = span.parent().parent().parent().parent();
+ unqid = li.attr("unqid");
if(!isTimeValid(fadeOut)){
showError(span, "please put in a time '00:00:00 (.000000)'");
@@ -137,14 +146,16 @@ function changeFadeOut(event) {
}
$.post(url, {format: "json", fadeOut: fadeOut, pos: pos}, function(json){
- if(json.playlist_error == true){
- alertPlaylistErrorAndReload();
- }
- if(json.response.error) {
+ if(json.response !== undefined && json.response.error) {
+ showError(span, json.response.error);
return;
}
- hideError(span);
+ setSPLContent(json);
+
+ li = $('#side_playlist li[unqid='+unqid+']');
+ li.find('.crossfade').toggle();
+ highlightActive(li.find('.spl_fade_control'));
});
}
@@ -156,100 +167,49 @@ function submitOnEnter(event) {
}
}
-function setCueEvents(el) {
-
- $(el).find(".spl_cue_in span:last").blur(changeCueIn);
- $(el).find(".spl_cue_out span:last").blur(changeCueOut);
-
- $(el).find(".spl_cue_in span:first, .spl_cue_out span:first")
- .keydown(submitOnEnter);
-}
-
-function setFadeEvents(el) {
-
- $(el).find(".spl_fade_in span:first").blur(changeFadeIn);
- $(el).find(".spl_fade_out span:first").blur(changeFadeOut);
-
- $(el).find(".spl_fade_in span:first, .spl_fade_out span:first")
- .keydown(submitOnEnter);
-}
-
function highlightActive(el) {
$(el).addClass("ui-state-active");
}
-function openFadeEditor(event) {
- event.stopPropagation();
+function unHighlightActive(el) {
- var pos, url, li;
+ $(el).removeClass("ui-state-active");
+}
+
+function openFadeEditor(event) {
+ var pos, url, li;
+
+ event.stopPropagation();
li = $(this).parent().parent();
- pos = parseInt(li.attr("id").split("_").pop());
+ li.find(".crossfade").toggle();
if($(this).hasClass("ui-state-active")) {
- $(this).removeClass("ui-state-active");
-
- $("#crossfade_"+pos+"-"+(pos+1))
- .empty()
- .hide();
-
- return;
+ unHighlightActive(this);
+ }
+ else {
+ highlightActive(this);
}
-
- url = '/Playlist/set-fade';
-
- highlightActive(this);
-
- $.get(url, {format: "json", pos: pos}, function(json){
- if(json.playlist_error == true){
- alertPlaylistErrorAndReload();
- }
- $("#crossfade_"+(pos)+"-"+(pos+1))
- .empty()
- .append(json.html)
- .show();
-
- setFadeEvents(li);
- });
}
function openCueEditor(event) {
+ var pos, url, li, icon;
+
event.stopPropagation();
- var pos, url, li, icon;
+ icon = $(this);
+ li = $(this).parent().parent().parent();
+ li.find(".cue-edit").toggle();
- li = $(this).parent().parent().parent();
- icon = $(this);
- pos = li.attr("id").split("_").pop();
-
- if(li.hasClass("ui-state-active")) {
- li.removeClass("ui-state-active");
- icon.attr("class", "spl_cue ui-state-default");
-
- $("#cues_"+pos)
- .empty()
- .hide();
-
- return;
+ if (li.hasClass("ui-state-active")) {
+ unHighlightActive(li);
+ unHighlightActive(icon);
+ }
+ else {
+ highlightActive(li);
+ highlightActive(icon);
}
-
- icon.attr("class", "spl_cue ui-state-default ui-state-active");
- url = '/Playlist/set-cue';
-
- highlightActive(li);
-
- $.get(url, {format: "json", pos: pos}, function(json){
- if(json.playlist_error == true){
- alertPlaylistErrorAndReload();
- }
- $("#cues_"+pos)
- .empty()
- .append(json.html)
- .show();
-
- setCueEvents(li);
- });
}
function redrawDataTablePage() {
@@ -268,21 +228,18 @@ function setSPLContent(json) {
return;
}
- $('#spl_name > a').empty()
+ $('#spl_name > a')
+ .empty()
.append(json.name);
- $('#spl_length').empty()
+ $('#spl_length')
+ .empty()
.append(json.length);
$('#fieldset-metadate_change textarea')
.empty()
.val(json.description);
- $('#spl_sortable').empty()
+ $('#spl_sortable')
+ .empty()
.append(json.html);
- $("#spl_editor")
- .empty();
-
- $("#spl_sortable .ui-icon-closethick").click(deleteSPLItem);
- $(".spl_fade_control").click(openFadeEditor);
- $(".spl_cue").click(openCueEditor);
//redraw the library list
redrawDataTablePage();
@@ -319,10 +276,8 @@ function addSPLItem(event, ui){
}
function deleteSPLItem(event){
- event.stopPropagation();
-
- // stop any preview playing
- $('#jquery_jplayer_1').jPlayer('stop');
+ event.stopPropagation();
+ stopAudioPreview();
var url, pos;
@@ -371,7 +326,7 @@ function createPlaylistMetaForm(json) {
event.preventDefault();
$("#new_playlist_submit").click();
}
- })
+ });
form.find("#new_playlist_submit")
.button()
@@ -390,8 +345,7 @@ function createPlaylistMetaForm(json) {
openDiffSPL(json);
//redraw the library list
redrawDataTablePage();
- })
-
+ });
});
$("#side_playlist")
@@ -404,8 +358,7 @@ function createPlaylistMetaForm(json) {
function newSPL() {
var url;
- // stop any preview playing
- $('#jquery_jplayer_1').jPlayer('stop');
+ stopAudioPreview();
url = '/Playlist/new/format/json';
@@ -415,8 +368,7 @@ function newSPL() {
function deleteSPL() {
var url;
- // stop any preview playing
- $('#jquery_jplayer_1').jPlayer('stop');
+ stopAudioPreview();
url = '/Playlist/delete-active/format/json';
@@ -610,23 +562,63 @@ function setUpSPL() {
$("#spl_delete")
.button()
.click(deleteSPL);
-
- $("#spl_sortable .ui-icon-closethick").click(deleteSPLItem);
- $(".spl_fade_control").click(openFadeEditor);
- $(".spl_cue").click(openCueEditor);
+
$("#spl_sortable").droppable();
$("#spl_sortable" ).bind( "drop", addSPLItem);
}
+//sets events dynamically for playlist entries (each row in the playlist)
+function setPlaylistEntryEvents(el) {
+
+ $(el).delegate("#spl_sortable .ui-icon-closethick",
+ {"click": deleteSPLItem});
+
+ $(el).delegate(".spl_fade_control",
+ {"click": openFadeEditor});
+
+ $(el).delegate(".spl_cue",
+ {"click": openCueEditor});
+}
+
+//sets events dynamically for the cue editor.
+function setCueEvents(el) {
+
+ $(el).delegate(".spl_cue_in span",
+ {"focusout": changeCueIn,
+ "keydown": submitOnEnter});
+
+ $(el).delegate(".spl_cue_out span",
+ {"focusout": changeCueOut,
+ "keydown": submitOnEnter});
+}
+
+//sets events dynamically for the fade editor.
+function setFadeEvents(el) {
+
+ $(el).delegate(".spl_fade_in span",
+ {"focusout": changeFadeIn,
+ "keydown": submitOnEnter});
+
+ $(el).delegate(".spl_fade_out span",
+ {"focusout": changeFadeOut,
+ "keydown": submitOnEnter});
+}
+
// Alert the error and reload the page
// this function is used to resolve concurrency issue
function alertPlaylistErrorAndReload(){
alert("The playlist doesn't exist anymore!");
window.location.reload();
-}
+}
$(document).ready(function() {
var currentlyOpenedSplId;
- setUpSPL();
+ var playlist = $("#side_playlist");
+
+ setUpSPL(playlist);
+
+ setPlaylistEntryEvents(playlist);
+ setCueEvents(playlist);
+ setFadeEvents(playlist);
});