From 0f91f91c41ff27b0b56722d6a64b3ac2c78fd41a Mon Sep 17 00:00:00 2001 From: Naomi Aro Date: Wed, 29 Feb 2012 15:47:11 +0100 Subject: [PATCH] CC-3174 : showbuilder adding checks to enable/disable buttons for playlist & timeline. --- .../controllers/LibraryController.php | 1 + .../public/js/airtime/buttons/buttons.js | 29 ++++++++ .../library/events/library_playlistbuilder.js | 23 ++++++- .../library/events/library_showbuilder.js | 32 ++++++--- .../public/js/airtime/library/library.js | 69 ++++++++++++------- .../public/js/airtime/showbuilder/builder.js | 36 ++++++---- 6 files changed, 142 insertions(+), 48 deletions(-) create mode 100644 airtime_mvc/public/js/airtime/buttons/buttons.js diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index dd16c377c..772b83a4d 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -55,6 +55,7 @@ class LibraryController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.TableTools.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); + $this->view->headScript()->appendFile($baseUrl.'/js/airtime/buttons/buttons.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js?'.$CC_CONFIG['airtime_version'],'text/javascript'); $this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css?'.$CC_CONFIG['airtime_version']); diff --git a/airtime_mvc/public/js/airtime/buttons/buttons.js b/airtime_mvc/public/js/airtime/buttons/buttons.js new file mode 100644 index 000000000..e11814aae --- /dev/null +++ b/airtime_mvc/public/js/airtime/buttons/buttons.js @@ -0,0 +1,29 @@ +var AIRTIME = (function(AIRTIME){ + var mod, + DEFAULT_CLASS = 'ui-button ui-state-default', + DISABLED_CLASS = 'ui-state-disabled'; + + if (AIRTIME.button === undefined) { + AIRTIME.button = {}; + } + mod = AIRTIME.button; + + mod.enableButton = function(c) { + var button = $("."+c).find("button"); + + if (button.hasClass(DISABLED_CLASS)) { + button.removeClass(DISABLED_CLASS); + } + }; + + mod.disableButton = function(c) { + var button = $("."+c).find("button"); + + if (!button.hasClass(DISABLED_CLASS)) { + button.addClass(DISABLED_CLASS); + } + }; + + return AIRTIME; + +}(AIRTIME || {})); \ No newline at end of file diff --git a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js index 3f0216faf..0178d5688 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js @@ -7,6 +7,24 @@ var AIRTIME = (function(AIRTIME){ AIRTIME.library.events = {}; mod = AIRTIME.library.events; + + mod.enableAddButtonCheck = function() { + var selected = $('#library_display tr[id ^= "au"] input[type=checkbox]').filter(":checked"), + sortable = $('#spl_sortable'), + check = false; + + //make sure audioclips are selected and a playlist is currently open. + if (selected.length !== 0 && sortable.length !== 0) { + check = true; + } + + if (check === true) { + AIRTIME.button.enableButton("library_group_add"); + } + else { + AIRTIME.button.disableButton("library_group_add"); + } + }; mod.fnRowCallback = function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { var $nRow = $(nRow); @@ -63,7 +81,6 @@ var AIRTIME = (function(AIRTIME){ */ mod.setupLibraryToolbar = function( oLibTable ) { var aButtons, - fnResetCol, fnAddSelectedItems; fnAddSelectedItems = function() { @@ -89,8 +106,8 @@ var AIRTIME = (function(AIRTIME){ //[1] = id //[2] = enabled //[3] = click event - aButtons = [["Delete", "library_group_delete", true, AIRTIME.library.fnDeleteSelectedItems], - ["Add", "library_group_add", true, fnAddSelectedItems]]; + aButtons = [["Delete", "library_group_delete", false, AIRTIME.library.fnDeleteSelectedItems], + ["Add", "library_group_add", false, fnAddSelectedItems]]; addToolBarButtonsLibrary(aButtons); }; diff --git a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js index 822b2f82f..c18d36b9e 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js @@ -8,6 +8,24 @@ var AIRTIME = (function(AIRTIME){ AIRTIME.library.events = {}; mod = AIRTIME.library.events; + mod.enableAddButtonCheck = function() { + var selected = $('#library_display tr input[type=checkbox]').filter(":checked"), + cursor = $('tr.cursor-selected-row'), + check = false; + + //make sure library items are selected and a cursor is selected. + if (selected.length !== 0 && cursor.length !== 0) { + check = true; + } + + if (check === true) { + AIRTIME.button.enableButton("library_group_add"); + } + else { + AIRTIME.button.disableButton("library_group_add"); + } + }; + mod.fnRowCallback = function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { var $nRow = $(nRow); @@ -21,7 +39,6 @@ var AIRTIME = (function(AIRTIME){ $('#library_display tr:not(:first)').draggable({ helper: function(){ var selected = $('#library_display tr:not(:first) input:checked').parents('tr'), - aItems = [], container, thead = $("#show_builder_table thead"), colspan = thead.find("th").length, @@ -34,10 +51,10 @@ var AIRTIME = (function(AIRTIME){ } if (selected.length === 1) { - message = "Moving "+selected.length+" Item." + message = "Moving "+selected.length+" Item."; } else { - message = "Moving "+selected.length+" Items." + message = "Moving "+selected.length+" Items."; } container = $('
').attr('id', 'draggingContainer') @@ -61,8 +78,6 @@ var AIRTIME = (function(AIRTIME){ mod.setupLibraryToolbar = function(oLibTable) { var aButtons, - fnTest, - fnResetCol, fnAddSelectedItems, fnAddSelectedItems = function() { @@ -75,7 +90,7 @@ var AIRTIME = (function(AIRTIME){ aSchedIds = []; //process selected files/playlists. - for (i=0, length = aData.length; i < length; i++) { + for (i = 0, length = aData.length; i < length; i++) { temp = aData[i]; aMediaIds.push({"id": temp.id, "type": temp.ftype}); } @@ -93,12 +108,13 @@ var AIRTIME = (function(AIRTIME){ AIRTIME.showbuilder.fnAdd(aMediaIds, aSchedIds); }; + //[0] = button text //[1] = id //[2] = enabled //[3] = click event - aButtons = [["Delete", "library_group_delete", true, AIRTIME.library.fnDeleteSelectedItems], - ["Add", "library_group_add", true, fnAddSelectedItems]]; + aButtons = [["Delete", "library_group_delete", false, AIRTIME.library.fnDeleteSelectedItems], + ["Add", "library_group_add", false, fnAddSelectedItems]]; addToolBarButtonsLibrary(aButtons); }; diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 626de54c0..5953a9cca 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -43,42 +43,45 @@ var AIRTIME = (function(AIRTIME){ function addToolBarButtonsLibrary(aButtons) { var i, length = aButtons.length, - libToolBar, + libToolBar = $(".library_toolbar"), html, buttonClass = '', DEFAULT_CLASS = 'ui-button ui-state-default', - DISABLED_CLASS = 'ui-state-disabled'; + DISABLED_CLASS = 'ui-state-disabled', + fn; - libToolBar = $(".library_toolbar"); - - for ( i=0; i < length; i+=1 ) { + for ( i = 0; i < length; i += 1 ) { buttonClass = ''; //add disabled class if not enabled. if (aButtons[i][2] === false) { - buttonClass+=DISABLED_CLASS; + buttonClass += DISABLED_CLASS; } - html = '
'; + html = '
'; libToolBar.append(html); - libToolBar.find("#"+aButtons[i][1]).click(aButtons[i][3]); + + //create a closure to preserve the state of i. + (function(index){ + + libToolBar.find("."+aButtons[index][1]).click(function(){ + fn = function() { + var $button = $(this).find("button"); + + //only call the passed function if the button is enabled. + if (!$button.hasClass(DISABLED_CLASS)) { + aButtons[index][3](); + } + }; + + fn.call(this); + }); + + }(i)); + } } -function enableGroupBtn(btnId, func) { - btnId = '#' + btnId; - if ($(btnId).hasClass('ui-state-disabled')) { - $(btnId).removeClass('ui-state-disabled'); - } -} - -function disableGroupBtn(btnId) { - btnId = '#' + btnId; - if (!$(btnId).hasClass('ui-state-disabled')) { - $(btnId).addClass('ui-state-disabled'); - } -} - function checkImportStatus(){ $.getJSON('/Preference/is-import-in-progress', function(data){ var div = $('#import_status'); @@ -400,24 +403,40 @@ $(document).ready(function() { "sRowSelect": "multi", "aButtons": [], "fnRowSelected": function ( node ) { + var selected; //seems to happen if everything is selected if ( node === null) { - oTable.find("input[type=checkbox]").attr("checked", true); + selected = oTable.find("input[type=checkbox]"); + selected.attr("checked", true); } else { $(node).find("input[type=checkbox]").attr("checked", true); + selected = oTable.find("input[type=checkbox]").filter(":checked"); } + + //checking to enable buttons + AIRTIME.button.enableButton("library_group_delete"); + AIRTIME.library.events.enableAddButtonCheck(); }, "fnRowDeselected": function ( node ) { + var selected; //seems to happen if everything is deselected if ( node === null) { oTable.find("input[type=checkbox]").attr("checked", false); + selected = []; } else { $(node).find("input[type=checkbox]").attr("checked", false); + selected = oTable.find("input[type=checkbox]").filter(":checked"); } + + //checking to disable buttons + if (selected.length === 0) { + AIRTIME.button.disableButton("library_group_delete"); + } + AIRTIME.library.events.enableAddButtonCheck(); } }, @@ -472,7 +491,7 @@ $(document).ready(function() { ignoreRightClick: true, build: function($el, e) { - var x, request, data, screen, items, callback, $tr; + var data, screen, items, callback, $tr; $tr = $el.parent(); data = $tr.data("aData"); @@ -527,7 +546,7 @@ $(document).ready(function() { media.push({"id": data.id, "type": data.ftype}); $.post(oItems.del.url, {format: "json", media: media }, function(json){ - var oTable, tr; + var oTable; if (json.message) { alert(json.message); diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index 85c2e2932..b8000fc0c 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -419,16 +419,26 @@ $(document).ready(function() { else { $(node).find("input[type=checkbox]").attr("checked", true); } + + //checking to enable buttons + AIRTIME.button.enableButton("sb_delete"); }, "fnRowDeselected": function ( node ) { - + var selected; + //seems to happen if everything is deselected if ( node === null) { - var oTable = $("#show_builder_table").dataTable(); - oTable.find("input[type=checkbox]").attr("checked", false); + tableDiv.find("input[type=checkbox]").attr("checked", false); + selected = []; } else { $(node).find("input[type=checkbox]").attr("checked", false); + selected = tableDiv.find("input[type=checkbox]").filter(":checked"); + } + + //checking to disable buttons + if (selected.length === 0) { + AIRTIME.button.disableButton("sb_delete"); } } }, @@ -501,7 +511,7 @@ $(document).ready(function() { var aMediaIds = [], aSchedIds = []; - for(i=0; i < aItemData.length; i++) { + for(i = 0; i < aItemData.length; i++) { aMediaIds.push({"id": aItemData[i].id, "type": aItemData[i].ftype}); } aSchedIds.push({"id": oPrevData.id, "instance": oPrevData.instance, "timestamp": oPrevData.timestamp}); @@ -521,9 +531,7 @@ $(document).ready(function() { fnReceive = function(event, ui) { var aItems = [], - oLibTT = TableTools.fnGetInstance('library_display'), - i, - length; + oLibTT = TableTools.fnGetInstance('library_display'); aItems = oLibTT.fnGetSelectedData(); @@ -579,7 +587,7 @@ $(document).ready(function() { tableDiv.sortable(sortableConf); $("#show_builder .fg-toolbar") - .append('
') + .append('
') .click(fnRemoveSelectedItems); //set things like a reference to the table. @@ -587,15 +595,19 @@ $(document).ready(function() { //add event to cursors. tableDiv.find("tbody").on("click", "div.marker", function(event){ - var tr = $(this).parents("tr"); + var tr = $(this).parents("tr"), + cursorSelClass = "cursor-selected-row"; - if (tr.hasClass("cursor-selected-row")) { - tr.removeClass("cursor-selected-row"); + if (tr.hasClass(cursorSelClass)) { + tr.removeClass(cursorSelClass); } else { - tr.addClass("cursor-selected-row"); + tr.addClass(cursorSelClass); } + //check if add button can still be enabled. + AIRTIME.library.events.enableAddButtonCheck(); + return false; });