diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 99fa19b7a..f0b72099d 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -36,7 +36,7 @@ class LibraryController extends Zend_Controller_Action $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/contextmenu.css'); - + $this->_helper->layout->setLayout('library'); $this->_helper->viewRenderer->setResponseSegment('library'); @@ -90,7 +90,7 @@ class LibraryController extends Zend_Controller_Action $url = $file->getRelativeFileUrl($baseUrl).'/download/true'; $menu[] = array('action' => array('type' => 'gourl', 'url' => $url), 'title' => 'Download'); - + if (Application_Model_Preference::GetUploadToSoundcloudOption()) { $text = "Upload to SoundCloud"; if(!is_null($file->getSoundCloudId())){ @@ -98,12 +98,12 @@ class LibraryController extends Zend_Controller_Action } $menu[] = array('action' => array('type' => 'ajax', 'url' => '/Library/upload-file-soundcloud/id/#id#', 'callback'=>"window['addProgressIcon']('$file_id')"),'title' => $text); - + $scid = $file->getSoundCloudId(); - + if($scid > 0){ $link_to_file = $file->getSoundCloudLinkToFile(); - $menu[] = array('action' => array('type' => 'fn', + $menu[] = array('action' => array('type' => 'fn', 'callback' => "window['openFileOnSoundCloud']('$link_to_file')"), 'title' => 'View on SoundCloud'); } @@ -132,8 +132,6 @@ class LibraryController extends Zend_Controller_Action 'title' => 'Close'); } - //$menu[] = array('action' => array('type' => 'ajax', 'url' => '/Playlist/metadata/format/json/id/#id#', 'callback' => 'window["createPlaylistMetaForm"]'), 'title' => 'Edit Metadata'); - $menu[] = array('action' => array('type' => 'fn', 'callback' => "window['confirmDeletePlaylist']('$paramsPop')"), 'title' => 'Delete'); @@ -210,7 +208,7 @@ class LibraryController extends Zend_Controller_Action { $request = $this->getRequest(); $form = new Application_Form_EditAudioMD(); - + $file_id = $this->_getParam('id', null); $file = Application_Model_StoredFile::Recall($file_id); $form->populate($file->getDbColMetadata()); @@ -222,7 +220,7 @@ class LibraryController extends Zend_Controller_Action $file->setDbColMetadata($formdata); $data = $file->getMetadata(); - + // set MDATA_KEY_FILEPATH $data['MDATA_KEY_FILEPATH'] = $file->getFilePath(); Logging::log($data['MDATA_KEY_FILEPATH']); @@ -254,14 +252,14 @@ class LibraryController extends Zend_Controller_Action } } - + public function uploadFileSoundcloudAction(){ $id = $this->_getParam('id'); $res = exec("/usr/lib/airtime/utils/soundcloud-uploader $id > /dev/null &"); // we should die with ui info die(); } - + public function getUploadToSoundcloudStatusAction(){ $id = $this->_getParam('id'); $type = $this->_getParam('type'); @@ -278,7 +276,7 @@ class LibraryController extends Zend_Controller_Action $this->view->error_msg = $file->getSoundCloudErrorMsg(); } } - + /** * Stores the number of entries user chose to show in the Library * to the pref db diff --git a/airtime_mvc/application/controllers/PlaylistController.php b/airtime_mvc/application/controllers/PlaylistController.php index 9eed5f2df..9c3bc11ec 100644 --- a/airtime_mvc/application/controllers/PlaylistController.php +++ b/airtime_mvc/application/controllers/PlaylistController.php @@ -2,7 +2,6 @@ class PlaylistController extends Zend_Controller_Action { - protected $pl_sess = null; public function init() @@ -15,7 +14,6 @@ class PlaylistController extends Zend_Controller_Action ->addActionContext('move-item', 'json') ->addActionContext('close', 'json') ->addActionContext('new', 'json') - ->addActionContext('metadata', 'json') ->addActionContext('edit', 'json') ->addActionContext('delete-active', 'json') ->addActionContext('delete', 'json') @@ -102,58 +100,11 @@ class PlaylistController extends Zend_Controller_Action $pl->setPLMetaData('dc:creator', $userInfo->login); $this->changePlaylist($pl->getId()); - $form = new Application_Form_PlaylistMetadata(); - $this->view->fieldset = $form; - $this->view->form = $this->view->render('playlist/new.phtml'); - } - public function metadataAction() - { - $request = $this->getRequest(); - $form = new Application_Form_PlaylistMetadata(); - - $pl_id = $this->_getParam('id', null); - //not a new playlist - if(!is_null($pl_id)) { - $this->changePlaylist($pl_id); - - $pl = $this->getPlaylist(); - if($pl === false){ - $this->view->playlist_error = true; - return false; - } - $title = $pl->getPLMetaData("dc:title"); - $desc = $pl->getPLMetaData("dc:description"); - - $data = array( 'title' => $title, 'description' => $desc); - $form->populate($data); - } - - if ($request->isPost()) { - $title = $this->_getParam('title', null); - $description = $this->_getParam('description', null); - - $pl = $this->getPlaylist(); - if($pl === false){ - $this->view->playlist_error = true; - return false; - } - - if($title) - $pl->setName($title); - - if(isset($description)) { - $pl->setPLMetaData("dc:description", $description); - } - - $this->view->pl = $pl; - $this->view->html = $this->view->render('playlist/index.phtml'); - unset($this->view->pl); - } - - $this->view->pl_id = $pl_id; - $this->view->fieldset = $form; - $this->view->form = $this->view->render('playlist/new.phtml'); + $this->view->pl = $pl; + $this->view->pl_id = $pl->getId(); + $this->view->html = $this->view->render('playlist/index.phtml'); + unset($this->view->pl); } public function editAction() @@ -256,42 +207,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 +245,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() @@ -430,7 +374,5 @@ class PlaylistController extends Zend_Controller_Action $this->view->playlistDescription = $description; } - - } diff --git a/airtime_mvc/application/forms/PlaylistMetadata.php b/airtime_mvc/application/forms/PlaylistMetadata.php deleted file mode 100644 index d53a4ddab..000000000 --- a/airtime_mvc/application/forms/PlaylistMetadata.php +++ /dev/null @@ -1,32 +0,0 @@ -addElement('text', 'title', array( - 'label' => 'Title:', - 'class' => 'input_text', - 'required' => false, - 'filters' => array('StringTrim'), - 'validators' => array( - 'NotEmpty', - ) - )); - - // Add the comment element - $this->addElement('textarea', 'description', array( - 'label' => 'Description:', - 'class' => 'input_text_area', - 'required' => false, - )); - - // Add the comment element - $this->addElement('button', 'new_playlist_submit', array( - 'label' => 'Save', - 'ignore' => true - )); - } -} - diff --git a/airtime_mvc/application/views/scripts/playlist/add-item.phtml b/airtime_mvc/application/views/scripts/playlist/add-item.phtml deleted file mode 100644 index dcba31552..000000000 --- a/airtime_mvc/application/views/scripts/playlist/add-item.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name addItem
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/playlist/close.phtml b/airtime_mvc/application/views/scripts/playlist/close.phtml deleted file mode 100644 index 421ba5dd4..000000000 --- a/airtime_mvc/application/views/scripts/playlist/close.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name close
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/playlist/delete-active.phtml b/airtime_mvc/application/views/scripts/playlist/delete-active.phtml deleted file mode 100644 index 61f99953e..000000000 --- a/airtime_mvc/application/views/scripts/playlist/delete-active.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name deleteActive
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/playlist/delete-item.phtml b/airtime_mvc/application/views/scripts/playlist/delete-item.phtml deleted file mode 100644 index f1a489d89..000000000 --- a/airtime_mvc/application/views/scripts/playlist/delete-item.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name deleteItem
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/playlist/delete.phtml b/airtime_mvc/application/views/scripts/playlist/delete.phtml deleted file mode 100644 index c4e7b62a1..000000000 --- a/airtime_mvc/application/views/scripts/playlist/delete.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name delete
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/playlist/metadata.phtml b/airtime_mvc/application/views/scripts/playlist/metadata.phtml deleted file mode 100644 index 63e18ca2c..000000000 --- a/airtime_mvc/application/views/scripts/playlist/metadata.phtml +++ /dev/null @@ -1,3 +0,0 @@ -
-view->fieldset; ?> -
diff --git a/airtime_mvc/application/views/scripts/playlist/move-item.phtml b/airtime_mvc/application/views/scripts/playlist/move-item.phtml deleted file mode 100644 index b739285c1..000000000 --- a/airtime_mvc/application/views/scripts/playlist/move-item.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name moveItem
\ No newline at end of file diff --git a/airtime_mvc/application/views/scripts/playlist/new.phtml b/airtime_mvc/application/views/scripts/playlist/new.phtml deleted file mode 100644 index 33f84edd5..000000000 --- a/airtime_mvc/application/views/scripts/playlist/new.phtml +++ /dev/null @@ -1,6 +0,0 @@ -

Playlist Metadata

-
-
- fieldset; ?> -
-
diff --git a/airtime_mvc/application/views/scripts/playlist/set-playlist-fades.phtml b/airtime_mvc/application/views/scripts/playlist/set-playlist-fades.phtml deleted file mode 100644 index e6112eb51..000000000 --- a/airtime_mvc/application/views/scripts/playlist/set-playlist-fades.phtml +++ /dev/null @@ -1 +0,0 @@ -

View script for controller Playlist and script/action name setPlaylistFades
\ No newline at end of file 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)) : ?> -
  • +
  • ">
    - ', + ', 'spl_')">
    @@ -19,16 +19,33 @@ if (count($items)) : ?>
    - +
    - + - - + + +
  • @@ -36,5 +53,5 @@ if (count($items)) : ?> -
  • Empty playlist
  • +
  • Empty playlist
  • diff --git a/airtime_mvc/public/css/playlist_builder.css b/airtime_mvc/public/css/playlist_builder.css index 2d02f4676..2357b5c04 100644 --- a/airtime_mvc/public/css/playlist_builder.css +++ b/airtime_mvc/public/css/playlist_builder.css @@ -1,445 +1,447 @@ -#side_playlist { - width: 40%; - min-height: 475px; - padding: 8px; - padding-bottom: 0px; - font-size: 16px; -} - -#side_playlist, -#side_playlist ul, -#side_playlist li { - float: left; -} - -#spl_sortable, -#spl_sortable > li, -#side_playlist > div, -#spl_editor, -.spl_artist, -.spl_cue_in, -.spl_fade_in, -.spl_cue_out, -.spl_fade_out { - clear: left; -} - -#side_playlist button { - font-size: 12px; -} - -#side_playlist input, -#side_playlist textarea { - width: 200px; -} - -#side_playlist textarea { - height: 100px; -} - -#spl_sortable { - list-style: none; - padding:0; - padding-bottom:50px; - width:100%; - min-height: 320px; - margin-top:0; - margin-bottom:0; -} - -#side_playlist li { - width: 99.5%; - margin-bottom:-1px; - position:relative; -} - -#side_playlist li div.list-item-container, #side_playlist li div.list-item-container.ui-state-active { - height:56px; - border: none; -} - -#spl_name { - -} - -.ui-icon-closethick { - margin-top: 7px; -} - -.spl_title { - font-size:14px; -} - -.spl_playlength { - float:right; - font-size:14px; - padding:0 5px 0 0; - width:100px; - text-align:right; -} - -.spl_artist { - font-size:12px; - color:#d5d5d5; -} - -.spl_offset { - float: right; - text-align: right; - padding: 0 5px 0 0; - color: #D5D5D5; -} - -/*#spl_editor { - height: 50px; -}*/ - -#spl_editor > div > span { -/* display: inline-block; - width: 150px;*/ -} - -.ui-icon-closethick, -.ui-icon-play, -.spl_fade_control, -.spl_text_input { - cursor: pointer; -} - -.spl_text_input input { - cursor: text; -} - -#spl_error { - font-size: 14px; - padding: 0.3em; - /*width: 440px;*/ - text-align: center; -} - -#side_playlist h3 { - font-size:20px; - margin:9px 0 3px 0; - padding:0; - color:#444444; - font-weight:normal; - clear:both; - float:left; -} -#side_playlist h4 { - font-size:15px; - margin:8px 0 10px 0; - padding:0; - color:#4f4f4f; - font-weight:normal; - clear:both; - float:left; -} -#side_playlist h3 + h4 { - margin:0 0 11px 0; -} -#spl_sortable a.big_play { - display:block; - width:20px; - height:50px; - margin:2px 0 0 2px; - text-align:center; - border:1px solid #5b5b5b; - float:left; - background-color: #707070; - background: -moz-linear-gradient(top, #707070 0, #666666 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #707070), color-stop(100%, #666666)); -} -#spl_sortable a.big_play:hover { - border:1px solid #282828; - background-color: #3b3b3b; - background: -moz-linear-gradient(top, #3b3b3b 0, #292929 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3b3b3b), color-stop(100%, #292929)); -} -#spl_sortable a.big_play .ui-icon-play { - margin: 17px 0 0 1px; -} - -#spl_sortable a.big_play .ui-icon-pause { - margin: 17px 0 0 1px; -} - -#spl_sortable a.big_play:hover .ui-icon-play, #spl_sortable a.big_play:hover .ui-icon-pause { - background-image:url(redmond/images/ui-icons_ff5d1a_256x240.png); -} -#spl_sortable .ui-icon-closethick { - position:absolute; - top:3px; - right:6px; - z-index:3; -} -#spl_sortable .ui-icon-closethick:hover { - background-image:url(redmond/images/ui-icons_ff5d1a_256x240.png) -} -#spl_sortable .spl_fade_control { - position:absolute; - right:35px; - z-index: 6; - height:15px; - width:33px; - font-size:9px; - background-color:transparent; -} - -#spl_sortable li .container { - -} -#spl_sortable .text-row { - height: 20px; - line-height: 19px; - overflow: hidden; - padding: 0 30px 0 10px; - text-indent: 2px; - margin:-1px 0 0 0; - float:none; -} -#spl_sortable .top { - padding-top:9px; -} -#spl_sortable li .spl_fade_control.ui-state-default { - background: transparent url(images/crossfade_playlist.png) no-repeat 0 0; - border:none; -} -#spl_sortable li .spl_fade_control.ui-state-active { - background: transparent url(images/crossfade_playlist.png) no-repeat 0 -30px; - border:none; -} -#spl_sortable li .crossfade, #spl_sortable li .cue-edit { - background:#debc9e url(images/crossfade_bg.png) repeat-x 0 0 !important; - border:1px solid #5d5d5d; - border-width: 1px 0 0 0; - min-height:35px; -} -#spl_sortable li .cue-edit { - background:#b6d1d5 url(images/cue-editor_bg.png) repeat-x 0 0 !important; -} -#spl_sortable dl.inline-list { - margin:10px 0 0 37px; -} - - -#spl_sortable li .spl_fade_start, #spl_sortable li .spl_fade_end { - background-color: transparent; - float:right; - font-size: 9px; - height: 15px; - right: 35px; - width: 33px; - margin-top:2px; -} -#spl_sortable li .spl_fade_start.ui-state-default { - background: transparent url(images/fade_in.png) no-repeat 0 0; - border:none; -} -#spl_sortable li .spl_fade_start.ui-state-active { - background: transparent url(images/fade_in.png) no-repeat 0 -30px; - border:none; -} - -#spl_sortable li .spl_fade_end.ui-state-default { - background: transparent url(images/fade_out.png) no-repeat 0 0; - border:none; -} -#spl_sortable li .spl_fade_end.ui-state-active { - background: transparent url(images/fade_out.png) no-repeat 0 -30px; - border:none; -} -.crossfade dl.inline-list, .cue-edit dl.inline-list, .crossfade-main dl.inline-list { - padding-bottom:5px; - clear:left; - -} -.crossfade dl.inline-list dt, .cue-edit dl.inline-list dt, .crossfade-main dl.inline-list dt { - min-width: 90px; - - -} -.crossfade dl.inline-list dd, .cue-edit dl.inline-list dd, .crossfade-main dl.inline-list dd { - float: left; - font-size: 12px; - margin: 0; - -} -.edit-error { - color:#b80000; - margin:0; - padding-bottom:0; - font-size:12px; - display:none; -} - -/*.edit-error:last-child { - padding-bottom:10px; -}*/ -.spl_text_input { - color:#fff; -} -.crossfade-main { - background:#debc9e; - border:1px solid #5b5b5b; - padding:10px 10px 0 10px; - margin:0 1px 16px 0; - position:relative; -} - -.crossfade-main .edit-error { - padding-bottom:4px; - margin:0; -} - -.crossfade-main .edit-error:last-child { - padding-bottom:2px; -} -.crossfade-main .ui-icon-closethick { - position: absolute; - right: 6px; - top: 3px; - z-index: 3; -} - -#spl_sortable li .spl_cue { - background-color: transparent; - float:right; - font-size: 9px; - height: 15px; - right: 35px; - width: 33px; - margin-top:2px; - cursor:pointer; -} -#spl_sortable li .spl_cue.ui-state-default { - background: transparent url(images/cue_playlist.png) no-repeat 0 0; - border:none; -} -#spl_sortable li .spl_cue.ui-state-default:hover { - background: transparent url(images/cue_playlist.png) no-repeat 0 -15px; - border:none; -} -#spl_sortable li .spl_cue.ui-state-active, #spl_sortable li .spl_cue.ui-state-active:hover { - background: transparent url(images/cue_playlist.png) no-repeat 0 -30px; - border:none; -} - -/*--/////////////// Changes 16.05.2011 ////////////--*/ - -.playlist_title { - margin: 16px 0 10px 0; - height:26px; - clear:both; -} -#side_playlist .playlist_title h3, #side_playlist .playlist_title h4 { - margin: 0; - padding: 0; -} -#side_playlist .playlist_title h3 { - float:left; - width:84%; -} -#side_playlist .playlist_title h4 { - float:right; - clear:none; - font-size: 16px; - padding-top:4px; -} - -#side_playlist .playlist_title h3 a { - padding: 0 22px 0 2px; - background:url(images/icon_edit_l.png) no-repeat right center; - text-decoration:none; - -} -#side_playlist .playlist_title h3 a:hover { - background-color:#D8D8D8; -} -.element_hidden { - display: none; -} -#side_playlist .playlist_title h3 input[type="text"] { - background-color: #dddddd; - border: 1px solid #8F8F8F; - font-family: Arial,Helvetica,sans-serif; - font-size: 12px; - height: 23px; - margin: 0; - padding: 0; - text-indent: 3px; - -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - width:95%; -} - -#side_playlist .zend_form { - margin: 0; - padding: 0; -} -#side_playlist .zend_form dt, #side_playlist .zend_form dd { - display: block; - float: none; - margin: 4px 0 0; - padding: 0; - width:100%; -} -#side_playlist .zend_form dd.buttons { - margin-top: 8px; - text-align:right; -} -#side_playlist .zend_form dd.buttons .ui-button { - margin: 0 0 0 10px; -} - -#side_playlist .zend_form dt { - color:#5B5B5B; - font-weight: bold; - margin: 9px 0 0; - padding: 0 2px; -} - -#side_playlist .zend_form dt:first-child { - margin-top: 0; -} - -#side_playlist .zend_form dd textarea { - background-color: #dddddd; - border: 1px solid #5B5B5B; - font-family: Arial,Helvetica,sans-serif; - font-size: 12px; - margin: 0; - padding: 2px 0 0 0; - -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); - width:99.7%; -} - -#side_playlist fieldset { - border: 1px solid #9a9a9a; - margin: 0 0 8px 0; - padding: 8px; -} -#side_playlist fieldset.closed .zend_form{ - display:none; -} -#side_playlist fieldset.closed { - border-width: 1px 0 0; - margin-bottom: -6px; - margin-left:1px; -} -fieldset > legend { - color: #4f4f4f; - font-size: 12px; - line-height: 140%; -} -.ui-widget-content fieldset legend .ui-icon { - float: left; - background-image:url(redmond/images/ui-icons_454545_256x240.png); -} -#side_playlist .zend_form input, #side_playlist .zend_form textarea { - width: auto; -} +#side_playlist { + width: 40%; + min-height: 475px; + padding: 8px; + padding-bottom: 0px; + font-size: 16px; +} + +#side_playlist, +#side_playlist ul, +#side_playlist li { + float: left; +} + +#spl_sortable, +#spl_sortable > li, +#side_playlist > div, +#spl_editor, +.spl_artist, +.spl_cue_in, +.spl_fade_in, +.spl_cue_out, +.spl_fade_out { + clear: left; +} + +#side_playlist button { + font-size: 12px; +} + +#side_playlist input, +#side_playlist textarea { + width: 200px; +} + +#side_playlist textarea { + height: 100px; +} + +#spl_sortable { + list-style: none; + padding:0; + padding-bottom:50px; + width:100%; + min-height: 320px; + margin-top:0; + margin-bottom:0; +} + +#side_playlist li { + width: 99.5%; + margin-bottom:-1px; + position:relative; +} + +#side_playlist li div.list-item-container, #side_playlist li div.list-item-container.ui-state-active { + height:56px; + border: none; +} + +#spl_name { + +} + +.ui-icon-closethick { + margin-top: 7px; +} + +.spl_title { + font-size:14px; +} + +.spl_playlength { + float:right; + font-size:14px; + padding:0 5px 0 0; + width:100px; + text-align:right; +} + +.spl_artist { + font-size:12px; + color:#d5d5d5; +} + +.spl_offset { + float: right; + text-align: right; + padding: 0 5px 0 0; + color: #D5D5D5; +} +.ui-state-active .spl_artist, .ui-state-active .spl_offset { + color: #606060 !important; +} +/*#spl_editor { + height: 50px; +}*/ + +#spl_editor > div > span { +/* display: inline-block; + width: 150px;*/ +} + +.ui-icon-closethick, +.ui-icon-play, +.spl_fade_control, +.spl_text_input { + cursor: pointer; +} + +.spl_text_input input { + cursor: text; +} + +#spl_error { + font-size: 14px; + padding: 0.3em; + /*width: 440px;*/ + text-align: center; +} + +#side_playlist h3 { + font-size:20px; + margin:9px 0 3px 0; + padding:0; + color:#444444; + font-weight:normal; + clear:both; + float:left; +} +#side_playlist h4 { + font-size:15px; + margin:8px 0 10px 0; + padding:0; + color:#4f4f4f; + font-weight:normal; + clear:both; + float:left; +} +#side_playlist h3 + h4 { + margin:0 0 11px 0; +} +#spl_sortable a.big_play { + display:block; + width:20px; + height:50px; + margin:2px 0 0 2px; + text-align:center; + border:1px solid #5b5b5b; + float:left; + background-color: #707070; + background: -moz-linear-gradient(top, #707070 0, #666666 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #707070), color-stop(100%, #666666)); +} +#spl_sortable a.big_play:hover { + border:1px solid #282828; + background-color: #3b3b3b; + background: -moz-linear-gradient(top, #3b3b3b 0, #292929 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3b3b3b), color-stop(100%, #292929)); +} +#spl_sortable a.big_play .ui-icon-play { + margin: 17px 0 0 1px; +} + +#spl_sortable a.big_play .ui-icon-pause { + margin: 17px 0 0 1px; +} + +#spl_sortable a.big_play:hover .ui-icon-play, #spl_sortable a.big_play:hover .ui-icon-pause { + background-image:url(redmond/images/ui-icons_ff5d1a_256x240.png); +} +#spl_sortable .ui-icon-closethick { + position:absolute; + top:3px; + right:6px; + z-index:3; +} +#spl_sortable .ui-icon-closethick:hover { + background-image:url(redmond/images/ui-icons_ff5d1a_256x240.png) +} +#spl_sortable .spl_fade_control { + position:absolute; + right:35px; + z-index: 6; + height:15px; + width:33px; + font-size:9px; + background-color:transparent; +} + +#spl_sortable li .container { + +} +#spl_sortable .text-row { + height: 20px; + line-height: 19px; + overflow: hidden; + padding: 0 30px 0 10px; + text-indent: 2px; + margin:-1px 0 0 0; + float:none; +} +#spl_sortable .top { + padding-top:9px; +} +#spl_sortable li .spl_fade_control.ui-state-default { + background: transparent url(images/crossfade_playlist.png) no-repeat 0 0; + border:none; +} +#spl_sortable li .spl_fade_control.ui-state-active { + background: transparent url(images/crossfade_playlist.png) no-repeat 0 -30px; + border:none; +} +#spl_sortable li .crossfade, #spl_sortable li .cue-edit { + background:#debc9e url(images/crossfade_bg.png) repeat-x 0 0 !important; + border:1px solid #5d5d5d; + border-width: 1px 0 0 0; + min-height:35px; +} +#spl_sortable li .cue-edit { + background:#b6d1d5 url(images/cue-editor_bg.png) repeat-x 0 0 !important; +} +#spl_sortable dl.inline-list { + margin:10px 0 0 37px; +} + + +#spl_sortable li .spl_fade_start, #spl_sortable li .spl_fade_end { + background-color: transparent; + float:right; + font-size: 9px; + height: 15px; + right: 35px; + width: 33px; + margin-top:2px; +} +#spl_sortable li .spl_fade_start.ui-state-default { + background: transparent url(images/fade_in.png) no-repeat 0 0; + border:none; +} +#spl_sortable li .spl_fade_start.ui-state-active { + background: transparent url(images/fade_in.png) no-repeat 0 -30px; + border:none; +} + +#spl_sortable li .spl_fade_end.ui-state-default { + background: transparent url(images/fade_out.png) no-repeat 0 0; + border:none; +} +#spl_sortable li .spl_fade_end.ui-state-active { + background: transparent url(images/fade_out.png) no-repeat 0 -30px; + border:none; +} +.crossfade dl.inline-list, .cue-edit dl.inline-list, .crossfade-main dl.inline-list { + padding-bottom:5px; + clear:left; + +} +.crossfade dl.inline-list dt, .cue-edit dl.inline-list dt, .crossfade-main dl.inline-list dt { + min-width: 90px; + + +} +.crossfade dl.inline-list dd, .cue-edit dl.inline-list dd, .crossfade-main dl.inline-list dd { + float: left; + font-size: 12px; + margin: 0; + +} +.edit-error { + color:#b80000; + margin:0; + padding-bottom:0; + font-size:12px; + display:none; +} + +/*.edit-error:last-child { + padding-bottom:10px; +}*/ +.spl_text_input { + color:#fff; +} +.crossfade-main { + background:#debc9e; + border:1px solid #5b5b5b; + padding:10px 10px 0 10px; + margin:0 1px 16px 0; + position:relative; +} + +.crossfade-main .edit-error { + padding-bottom:4px; + margin:0; +} + +.crossfade-main .edit-error:last-child { + padding-bottom:2px; +} +.crossfade-main .ui-icon-closethick { + position: absolute; + right: 6px; + top: 3px; + z-index: 3; +} + +#spl_sortable li .spl_cue { + background-color: transparent; + float:right; + font-size: 9px; + height: 15px; + right: 35px; + width: 33px; + margin-top:2px; + cursor:pointer; +} +#spl_sortable li .spl_cue.ui-state-default { + background: transparent url(images/cue_playlist.png) no-repeat 0 0; + border:none; +} +#spl_sortable li .spl_cue.ui-state-default:hover { + background: transparent url(images/cue_playlist.png) no-repeat 0 -15px; + border:none; +} +#spl_sortable li .spl_cue.ui-state-active, #spl_sortable li .spl_cue.ui-state-active:hover { + background: transparent url(images/cue_playlist.png) no-repeat 0 -30px; + border:none; +} + +/*--/////////////// Changes 16.05.2011 ////////////--*/ + +.playlist_title { + margin: 16px 0 10px 0; + height:26px; + clear:both; +} +#side_playlist .playlist_title h3, #side_playlist .playlist_title h4 { + margin: 0; + padding: 0; +} +#side_playlist .playlist_title h3 { + float:left; + width:84%; +} +#side_playlist .playlist_title h4 { + float:right; + clear:none; + font-size: 16px; + padding-top:4px; +} + +#side_playlist .playlist_title h3 a { + padding: 0 22px 0 2px; + background:url(images/icon_edit_l.png) no-repeat right center; + text-decoration:none; + +} +#side_playlist .playlist_title h3 a:hover { + background-color:#D8D8D8; +} +.element_hidden { + display: none; +} +#side_playlist .playlist_title h3 input[type="text"] { + background-color: #dddddd; + border: 1px solid #8F8F8F; + font-family: Arial,Helvetica,sans-serif; + font-size: 12px; + height: 23px; + margin: 0; + padding: 0; + text-indent: 3px; + -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); + width:95%; +} + +#side_playlist .zend_form { + margin: 0; + padding: 0; +} +#side_playlist .zend_form dt, #side_playlist .zend_form dd { + display: block; + float: none; + margin: 4px 0 0; + padding: 0; + width:100%; +} +#side_playlist .zend_form dd.buttons { + margin-top: 8px; + text-align:right; +} +#side_playlist .zend_form dd.buttons .ui-button { + margin: 0 0 0 10px; +} + +#side_playlist .zend_form dt { + color:#5B5B5B; + font-weight: bold; + margin: 9px 0 0; + padding: 0 2px; +} + +#side_playlist .zend_form dt:first-child { + margin-top: 0; +} + +#side_playlist .zend_form dd textarea { + background-color: #dddddd; + border: 1px solid #5B5B5B; + font-family: Arial,Helvetica,sans-serif; + font-size: 12px; + margin: 0; + padding: 2px 0 0 0; + -moz-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0px 2px 2px rgba(0, 0, 0, 0.1); + width:99.7%; +} + +#side_playlist fieldset { + border: 1px solid #9a9a9a; + margin: 0 0 8px 0; + padding: 8px; +} +#side_playlist fieldset.closed .zend_form{ + display:none; +} +#side_playlist fieldset.closed { + border-width: 1px 0 0; + margin-bottom: -6px; + margin-left:1px; +} +fieldset > legend { + color: #4f4f4f; + font-size: 12px; + line-height: 140%; +} +.ui-widget-content fieldset legend .ui-icon { + float: left; + background-image:url(redmond/images/ui-icons_454545_256x240.png); +} +#side_playlist .zend_form input, #side_playlist .zend_form textarea { + width: auto; +} \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index a3d342e03..2b56d1686 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; @@ -358,65 +313,24 @@ function noOpenPL(json) { .click(newSPL); } -function createPlaylistMetaForm(json) { - var submit, form; - - form = $(json.form); - form.find("fieldset").addClass("simple-formblock metadata"); - - form.find("input, textarea") - .keydown(function(event){ - //enter was pressed - if(event.keyCode === 13) { - event.preventDefault(); - $("#new_playlist_submit").click(); - } - }) - - form.find("#new_playlist_submit") - .button() - .click(function(event){ - event.preventDefault(); - - var url, data; - - url = '/Playlist/metadata/format/json'; - data = $("#side_playlist form").serialize(); - - $.post(url, data, function(json){ - if(json.playlist_error == true){ - alertPlaylistErrorAndReload(); - } - openDiffSPL(json); - //redraw the library list - redrawDataTablePage(); - }) - - }); - - $("#side_playlist") - .empty() - .append(form); - - currentlyOpenedSplId = json.pl_id; -} - function newSPL() { var url; - // stop any preview playing - $('#jquery_jplayer_1').jPlayer('stop'); - + stopAudioPreview(); url = '/Playlist/new/format/json'; - $.post(url, createPlaylistMetaForm); + $.post(url, function(json){ + openDiffSPL(json); + + //redraw the library list + redrawDataTablePage(); + }); } function deleteSPL() { var url; - // stop any preview playing - $('#jquery_jplayer_1').jPlayer('stop'); + stopAudioPreview(); url = '/Playlist/delete-active/format/json'; @@ -431,6 +345,7 @@ function deleteSPL() { } function openDiffSPL(json) { + if(json.playlist_error == true){ alertPlaylistErrorAndReload(); } @@ -439,8 +354,7 @@ function openDiffSPL(json) { .append(json.html); currentlyOpenedSplId = json.pl_id; - - setUpSPL(); + setUpSPL(); } function editName() { @@ -610,23 +524,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); });