From fbe0b0a75d22a1ef2dcfbd14c4dc30134f90f467 Mon Sep 17 00:00:00 2001 From: Naomi Date: Wed, 29 Jan 2014 18:03:44 -0500 Subject: [PATCH] CC-5450 : Refactor Media Management (Classes/DB) in Airtime creating service function for column datatables settings script. context menu on right click, dblclick event now used for adding to shows/playlist. --- .../controllers/LibraryController.php | 13 +---- .../controllers/ShowbuilderController.php | 9 ++- .../application/services/MediaService.php | 17 ++++++ .../airtime/audiopreview/preview_jp_window.js | 30 ++++++++++ .../js/airtime/library/lib_separate_table.js | 56 +++++++------------ 5 files changed, 76 insertions(+), 49 deletions(-) create mode 100644 airtime_mvc/public/js/airtime/audiopreview/preview_jp_window.js diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index bcf69c7da..93344d4e3 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -65,18 +65,7 @@ class LibraryController extends Zend_Controller_Action //set audio columns for display of data. $mediaService = new Application_Service_MediaService(); - $columns = json_encode($mediaService->makeDatatablesColumns('AudioFile')); - $script = "localStorage.setItem( 'datatables-audiofile-aoColumns', JSON.stringify($columns) ); "; - - //set webstream columns for display of data. - $columns = json_encode($mediaService->makeDatatablesColumns('Webstream')); - $script .= "localStorage.setItem( 'datatables-webstream-aoColumns', JSON.stringify($columns) ); "; - - //set playlist columns for display of data. - $columns = json_encode($mediaService->makeDatatablesColumns('Playlist')); - $script .= "localStorage.setItem( 'datatables-playlist-aoColumns', JSON.stringify($columns) ); "; - - $this->view->headScript()->appendScript($script); + $this->view->headScript()->appendScript($mediaService->createLibraryColumnsJavascript()); $this->view->obj = $mediaService->getSessionMediaObject(); } diff --git a/airtime_mvc/application/controllers/ShowbuilderController.php b/airtime_mvc/application/controllers/ShowbuilderController.php index c3e75b78a..12a34e1ea 100644 --- a/airtime_mvc/application/controllers/ShowbuilderController.php +++ b/airtime_mvc/application/controllers/ShowbuilderController.php @@ -128,6 +128,11 @@ class ShowbuilderController extends Zend_Controller_Action //only include library things on the page if the user can see it. if (!$disableLib) { + + //set media columns for display of data. + $mediaService = new Application_Service_MediaService(); + $this->view->headScript()->appendScript($mediaService->createLibraryColumnsJavascript()); + $this->view->headScript()->appendFile($baseUrl.'js/airtime/library/events/lib_showbuilder.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'js/airtime/library/lib_separate_table.js?'.$CC_CONFIG['airtime_version'], 'text/javascript'); @@ -136,7 +141,7 @@ class ShowbuilderController extends Zend_Controller_Action $libraryTable = json_encode($data); $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', JSON.stringify($libraryTable) );"); } else { - $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', '' );"); + $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-library', null );"); } } @@ -145,7 +150,7 @@ class ShowbuilderController extends Zend_Controller_Action $timelineTable = json_encode($data); $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', JSON.stringify($timelineTable) );"); } else { - $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', '' );"); + $this->view->headScript()->appendScript("localStorage.setItem( 'datatables-timeline', null );"); } //populate date range form for show builder. diff --git a/airtime_mvc/application/services/MediaService.php b/airtime_mvc/application/services/MediaService.php index 51ad9fb3b..e6128cc79 100644 --- a/airtime_mvc/application/services/MediaService.php +++ b/airtime_mvc/application/services/MediaService.php @@ -707,6 +707,23 @@ class Application_Service_MediaService } } + public function createLibraryColumnsJavascript() { + + //set audio columns for display of data. + $columns = json_encode(self::makeDatatablesColumns('AudioFile')); + $script = "localStorage.setItem( 'datatables-audiofile-aoColumns', JSON.stringify($columns) ); "; + + //set webstream columns for display of data. + $columns = json_encode(self::makeDatatablesColumns('Webstream')); + $script .= "localStorage.setItem( 'datatables-webstream-aoColumns', JSON.stringify($columns) ); "; + + //set playlist columns for display of data. + $columns = json_encode(self::makeDatatablesColumns('Playlist')); + $script .= "localStorage.setItem( 'datatables-playlist-aoColumns', JSON.stringify($columns) ); "; + + return $script; + } + /* * @param $obj MediaItem object. * @return $service proper service for this item type. diff --git a/airtime_mvc/public/js/airtime/audiopreview/preview_jp_window.js b/airtime_mvc/public/js/airtime/audiopreview/preview_jp_window.js new file mode 100644 index 000000000..52dc2bb0f --- /dev/null +++ b/airtime_mvc/public/js/airtime/audiopreview/preview_jp_window.js @@ -0,0 +1,30 @@ +/* +sample playlist element here +element_artist: "" +element_id: 8041 +element_mp3: 6291 +element_position: 12 +element_title: "Mis-Adventures of Dirty Rice and Canned Beans" +mime: "audio/mp3" +type: 0 +uri: "/airtime_web_241/public/api/get-media/file/6291" +*/ + +/* +sample show element here +"element_title":"Angel gets high (live)", +"element_artist":"theAngelcy", +"element_position":0, +"element_id":1, +"mime":"audio\/mp3", +"type":0, +"element_mp3":6630, +"uri":"\/airtime_web_241\/public\/api\/get-media\/file\/6630" +*/ + +/* +sample audio file element here +title +artist +mp3 +*/ diff --git a/airtime_mvc/public/js/airtime/library/lib_separate_table.js b/airtime_mvc/public/js/airtime/library/lib_separate_table.js index 44d458f66..0bfdf4ae0 100644 --- a/airtime_mvc/public/js/airtime/library/lib_separate_table.js +++ b/airtime_mvc/public/js/airtime/library/lib_separate_table.js @@ -7,11 +7,8 @@ var AIRTIME = (function(AIRTIME) { //stored in format chosenItems[tabname] = object of chosen ids for the tab. var chosenItems = {}, - LIB_SELECTED_CLASS = "lib-selected", - //used for using dbclick vs click events on the library rows. - alreadyclicked = false, - alreadyclickedTimeout; - + LIB_SELECTED_CLASS = "lib-selected"; + function createDatatable(config) { var table = $("#"+config.id).dataTable({ @@ -400,42 +397,31 @@ var AIRTIME = (function(AIRTIME) { } }); - // call the context menu so we can prevent the event from - // propagating. - $library.on("click", 'td:not(.library_checkbox)', function(e) { + $library.on("mousedown", 'td:not(.library_checkbox)', function(e) { + //only trigger context menu on right click. + if (e.which === 3) { + var $el = $(this); + + $el.contextMenu({x: e.pageX, y: e.pageY}); + } + }); + + //perform the double click action on an item row. + $library.on("dblclick", 'td:not(.library_checkbox)', function(e) { + var $el = $(this), + $tr, + data; - var $el = $(this); - - if (mod.alreadyclicked) { - - // reset - mod.alreadyclicked = false; - // prevent this from happening - clearTimeout(mod.alreadyclickedTimeout); - - // do what needs to happen on double click. - $tr = $el.parent(); - data = $tr.data("aData"); - mod.dblClickAdd(data); - } - else - { - mod.alreadyclicked = true; - mod.alreadyclickedTimeout = setTimeout(function() { - // reset when it happens - mod.alreadyclicked = false; - // do what needs to happen on single click. - $el.contextMenu({x: e.pageX, y: e.pageY}); - }, 200); // <-- dblclick tolerance here - } - return false; - }); + $tr = $el.parent(); + data = $tr.data("aData"); + mod.dblClickAdd(data); + }); // begin context menu initialization. $.contextMenu({ selector: '#lib_tabs td', trigger: "none", - ignoreRightClick: true, + ignoreRightClick: false, build: function($el, e) { var data, items, $tr;