diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 23400c344..467ebda77 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -27,6 +27,7 @@ class LibraryController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jjmenu.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/jplayer/jquery.jplayer.min.js'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js','text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/advancedsearch.js','text/javascript'); diff --git a/airtime_mvc/application/controllers/ScheduleController.php b/airtime_mvc/application/controllers/ScheduleController.php index 59b3f9e30..5a76b215c 100644 --- a/airtime_mvc/application/controllers/ScheduleController.php +++ b/airtime_mvc/application/controllers/ScheduleController.php @@ -39,6 +39,7 @@ class ScheduleController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jjmenu.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js','text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/fullcalendar/fullcalendar.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/timepicker/jquery.ui.timepicker-0.0.6.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/colorpicker/js/colorpicker.js','text/javascript'); diff --git a/airtime_mvc/application/controllers/UserController.php b/airtime_mvc/application/controllers/UserController.php index 77740d7ba..28ed5c5dc 100644 --- a/airtime_mvc/application/controllers/UserController.php +++ b/airtime_mvc/application/controllers/UserController.php @@ -22,6 +22,7 @@ class UserController extends Zend_Controller_Action $request = $this->getRequest(); $baseUrl = $request->getBaseUrl(); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js','text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js','text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/user/user.js','text/javascript'); $form = new Application_Form_AddUser(); diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index 916471de7..fae59e97c 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -259,9 +259,9 @@ function setSPLContent(json) { //$(".spl_playlength").click(openCueEditor); $(".spl_cue").click(openCueEditor); - //Update length on library list - $("#pl_"+json.pl_id).children("#length").empty().append(json.length); - //var pos = dt.fnGetPosition($("#pl_"+json.pl_id)); + //redraw the library list + dt = $("#library_display").dataTable(); + dt.fnStandingRedraw(); return false; } @@ -367,7 +367,7 @@ function createPlaylistMetaForm(json) { //redraw the library list dt = $("#library_display").dataTable(); - dt.fnDraw(); + dt.fnStandingRedraw(); }); $("#side_playlist") diff --git a/airtime_mvc/public/js/datatables/plugin/dataTables.pluginAPI.js b/airtime_mvc/public/js/datatables/plugin/dataTables.pluginAPI.js new file mode 100644 index 000000000..810c9c493 --- /dev/null +++ b/airtime_mvc/public/js/datatables/plugin/dataTables.pluginAPI.js @@ -0,0 +1,55 @@ +$.fn.dataTableExt.oApi.fnStandingRedraw = function(oSettings) { + //redraw to account for filtering and sorting + // concept here is that (for client side) there is a row got inserted at the end (for an add) + // or when a record was modified it could be in the middle of the table + // that is probably not supposed to be there - due to filtering / sorting + // so we need to re process filtering and sorting + // BUT - if it is server side - then this should be handled by the server - so skip this step + if(oSettings.oFeatures.bServerSide === false){ + var before = oSettings._iDisplayStart; + oSettings.oApi._fnReDraw(oSettings); + //iDisplayStart has been reset to zero - so lets change it back + oSettings._iDisplayStart = before; + oSettings.oApi._fnCalculateEnd(oSettings); + } + + //draw the 'current' page + oSettings.oApi._fnDraw(oSettings); +}; + +$.fn.dataTableExt.oApi.fnAddDataAndDisplay = function ( oSettings, aData ) +{ + /* Add the data */ + var iAdded = this.oApi._fnAddData( oSettings, aData ); + var nAdded = oSettings.aoData[ iAdded ].nTr; + + /* Need to re-filter and re-sort the table to get positioning correct, not perfect + * as this will actually redraw the table on screen, but the update should be so fast (and + * possibly not alter what is already on display) that the user will not notice + */ + this.oApi._fnReDraw( oSettings ); + + /* Find it's position in the table */ + var iPos = -1; + for( var i=0, iLen=oSettings.aiDisplay.length ; i= 0 ) + { + oSettings._iDisplayStart = ( Math.floor(i / oSettings._iDisplayLength) ) * oSettings._iDisplayLength; + this.oApi._fnCalculateEnd( oSettings ); + } + + this.oApi._fnDraw( oSettings ); + return { + "nTr": nAdded, + "iPos": iAdded + }; +} \ No newline at end of file