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 9309da3c4..2c249f675 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_playlistbuilder.js @@ -5,11 +5,10 @@ var AIRTIME = (function(AIRTIME){ AIRTIME.library = {}; } - AIRTIME.library.events = {}; - mod = AIRTIME.library.events; + mod = AIRTIME.library; - mod.enableAddButtonCheck = function() { - var selected = $('#library_display tr[id ^= "au"] input[type=checkbox]').filter(":checked"), + mod.checkAddButton = function() { + var selected = mod.getChosenItemsLength(), sortable = $('#spl_sortable'), check = false; @@ -36,6 +35,9 @@ var AIRTIME = (function(AIRTIME){ mod.fnDrawCallback = function() { + mod.redrawChosen(); + mod.checkToolBarIcons(); + $('#library_display tr[id ^= "au"]').draggable({ helper: function(){ var selected = $('#library_display tr:not(:first) input:checked').parents('tr[id^="au"]'), 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 4d51a3719..926678c0c 100644 --- a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js +++ b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js @@ -5,16 +5,15 @@ var AIRTIME = (function(AIRTIME){ AIRTIME.library = {}; } - AIRTIME.library.events = {}; - mod = AIRTIME.library.events; + mod = AIRTIME.library; - mod.enableAddButtonCheck = function() { - var selected = $('#library_display tr input[type=checkbox]').filter(":checked"), + mod.checkAddButton = function() { + var selected = mod.getChosenItemsLength(), 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) { + if (mod.chosenItems.length !== 0 && cursor.length !== 0) { check = true; } @@ -36,6 +35,9 @@ var AIRTIME = (function(AIRTIME){ mod.fnDrawCallback = function fnLibDrawCallback() { + mod.redrawChosen(); + mod.checkToolBarIcons(); + $('#library_display tr:not(:first)').draggable({ helper: function(){ var selected = $('#library_display tr:not(:first) input:checked').parents('tr'), @@ -73,7 +75,7 @@ var AIRTIME = (function(AIRTIME){ }, cursor: 'pointer', connectToSortable: '#show_builder_table' - }); + }); }; mod.setupLibraryToolbar = function() { diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js index 6835d983b..b69ebf385 100644 --- a/airtime_mvc/public/js/airtime/library/library.js +++ b/airtime_mvc/public/js/airtime/library/library.js @@ -4,38 +4,128 @@ var AIRTIME = (function(AIRTIME) { oTable, $libContent, $libTable, - LIB_SELECTED_CLASS = "lib-selected"; + LIB_SELECTED_CLASS = "lib-selected", + chosenItems = {}; if (AIRTIME.library === undefined) { AIRTIME.library = {}; } mod = AIRTIME.library; - mod.getSelectedData = function() { - var $selected = $libTable.find("tbody").find("input:checkbox").filter(":checked").parents("tr"), - aData = [], - i, length, - $item; + mod.getChosenItemsLength = function(){ + var selected = Object.keys(chosenItems).length; - for (i = 0, length = $selected.length; i < length; i++) { - $item = $($selected.get(i)); - aData.push($item.data('aData')); + return selected; + }; + + mod.checkDeleteButton = function() { + var selected = mod.getChosenItemsLength(), + check = false; + + if (selected !== 0) { + check = true; } - return aData.reverse(); + if (check === true) { + AIRTIME.button.enableButton("lib-button-delete"); + } + else { + AIRTIME.button.disableButton("lib-button-delete"); + } }; - mod.selectAll = function () { - $libTable.find("input:checkbox").attr("checked", true); - }; - - mod.selectNone = function () { - $libTable.find("input:checkbox").attr("checked", false); - $libTable.find("tr").removeClass(LIB_SELECTED_CLASS); + mod.checkToolBarIcons = function() { - //disable all lib buttons. - AIRTIME.button.disableButton("lib-button-delete"); - AIRTIME.button.disableButton("lib-button-add"); + AIRTIME.library.checkAddButton(); + AIRTIME.library.checkDeleteButton(); + }; + + mod.getSelectedData = function() { + var id, + data = []; + + for (id in chosenItems) { + + if (chosenItems.hasOwnProperty(id)) { + data.push(chosenItems[id]); + } + } + + return data; + }; + + mod.redrawChosen = function() { + var ids = Object.keys(chosenItems), + i, length, + $el; + + for (i = 0, length = ids.length; i < length; i++) { + $el = $libTable.find("#"+ids[i]); + + if ($el.length !== 0) { + mod.highlightItem($el); + } + } + }; + + mod.highlightItem = function($el) { + var $input = $el.find("input"); + + $input.attr("checked", true); + $el.addClass(LIB_SELECTED_CLASS); + }; + + mod.selectItem = function($el) { + var id; + + mod.highlightItem($el); + + id = $el.attr("id"); + chosenItems[id] = $el.data('aData'); + + mod.checkToolBarIcons(); + }; + + mod.deselectItem = function($el) { + var id, + $input = $el.find("input"); + + $input.attr("checked", false); + $el.removeClass(LIB_SELECTED_CLASS); + + id = $el.attr("id"); + delete chosenItems[id]; + + mod.checkToolBarIcons(); + }; + + /* + * select all selects all items which the user can currently see. + * (behaviour taken from gmail) + */ + mod.selectAll = function () { + var $trs = $libTable.find("tbody input:checkbox").parents("tr"); + + $trs.each(function(i, el){ + $el = $(this); + + mod.selectItem($el); + }); + }; + + /* + * select none deselects all items that the user can currently see. + * (behaviour taken from gmail) + */ + mod.selectNone = function () { + + var $trs = $libTable.find("tbody input:checkbox").filter(":checked").parents("tr"); + + $trs.each(function(i, el){ + $el = $(this); + + mod.deselectItem($el); + }); }; mod.fnDeleteItems = function(aMedia) { @@ -181,7 +271,7 @@ var AIRTIME = (function(AIRTIME) { "success": fnCallback } ); }, - "fnRowCallback": AIRTIME.library.events.fnRowCallback, + "fnRowCallback": AIRTIME.library.fnRowCallback, "fnCreatedRow": function( nRow, aData, iDataIndex ) { //add the play function to the library_type td @@ -248,10 +338,8 @@ var AIRTIME = (function(AIRTIME) { //remove any selected nodes before the draw. "fnPreDrawCallback": function( oSettings ) { - AIRTIME.button.disableButton("lib-button-delete"); - AIRTIME.button.disableButton("lib-button-add"); }, - "fnDrawCallback": AIRTIME.library.events.fnDrawCallback, + "fnDrawCallback": AIRTIME.library.fnDrawCallback, "fnHeaderCallback": function(nHead) { $(nHead).find("input[type=checkbox]").attr("checked", false); }, @@ -283,7 +371,7 @@ var AIRTIME = (function(AIRTIME) { $libContent.find(".dataTables_scrolling").css("max-height", tableHeight); - AIRTIME.library.events.setupLibraryToolbar(oTable); + AIRTIME.library.setupLibraryToolbar(oTable); $("#library_display_type") .addClass("dataTables_type") @@ -298,63 +386,38 @@ var AIRTIME = (function(AIRTIME) { }); $libTable.find('[name="pl_cb_all"]').click(function() { - var $cbs = $libTable.find("input:checkbox"), - $trs; if ($(this).is(":checked")) { - $cbs.attr("checked", true); - //checking to enable buttons - $trs = $cbs.parents("tr"); - $trs.addClass(LIB_SELECTED_CLASS); - - AIRTIME.button.enableButton("lib-button-delete"); - AIRTIME.library.events.enableAddButtonCheck(); + AIRTIME.library.selectAll(); } else { - $cbs.attr("checked", false); - - $trs = $cbs.parents("tr"); - $trs.removeClass(LIB_SELECTED_CLASS); - - AIRTIME.button.disableButton("lib-button-delete"); - AIRTIME.button.disableButton("lib-button-add"); + AIRTIME.library.selectNone(); } }); $libTable.find("tbody").on("click", "input[type=checkbox]", function(ev) { var $cb = $(this), - $selectedCb, $prev, - $tr = $cb.parents("tr"); + $tr = $cb.parents("tr"), + $trs; if ($cb.is(":checked")) { if (ev.shiftKey) { $prev = $libTable.find("tbody").find("tr."+LIB_SELECTED_CLASS).eq(-1); + $trs = $prev.nextUntil($tr); - $prev.nextUntil($tr) - .addClass(LIB_SELECTED_CLASS) - .find("input:checkbox") - .attr("checked", true) - .end(); + $trs.each(function(i, el){ + mod.selectItem($(el)); + }); } - $tr.addClass(LIB_SELECTED_CLASS); - //checking to enable buttons - AIRTIME.button.enableButton("lib-button-delete"); - AIRTIME.library.events.enableAddButtonCheck(); + mod.selectItem($tr); } else { - $selectedCb = $libTable.find("tbody input:checkbox").filter(":checked"); - $tr.removeClass(LIB_SELECTED_CLASS); - - //checking to disable buttons - if ($selectedCb.length === 0) { - AIRTIME.button.disableButton("lib-button-delete"); - } - AIRTIME.library.events.enableAddButtonCheck(); + mod.deselectItem($tr); } }); diff --git a/airtime_mvc/public/js/airtime/library/spl.js b/airtime_mvc/public/js/airtime/library/spl.js index a3b01f335..927ca3d08 100644 --- a/airtime_mvc/public/js/airtime/library/spl.js +++ b/airtime_mvc/public/js/airtime/library/spl.js @@ -275,9 +275,9 @@ var AIRTIME = (function(AIRTIME){ } function redrawLib() { - var dt = $("#library_display").dataTable(); + var dt = $lib.find("#library_display").dataTable(); - dt.fnStandingRedraw(); + dt.fnDraw(); } function setPlaylistContent(json) { diff --git a/airtime_mvc/public/js/airtime/showbuilder/builder.js b/airtime_mvc/public/js/airtime/showbuilder/builder.js index 3b211f9b6..61f5134b2 100644 --- a/airtime_mvc/public/js/airtime/showbuilder/builder.js +++ b/airtime_mvc/public/js/airtime/showbuilder/builder.js @@ -79,7 +79,6 @@ var AIRTIME = (function(AIRTIME){ function(json){ checkError(json); oSchedTable.fnDraw(); - AIRTIME.library.selectNone(); }); }; @@ -541,7 +540,7 @@ var AIRTIME = (function(AIRTIME){ AIRTIME.button.enableButton("sb-button-cancel"); } - AIRTIME.library.events.enableAddButtonCheck(); + AIRTIME.library.checkAddButton(); }, "fnHeaderCallback": function(nHead) { $(nHead).find("input[type=checkbox]").attr("checked", false); @@ -876,7 +875,7 @@ var AIRTIME = (function(AIRTIME){ } //check if add button can still be enabled. - AIRTIME.library.events.enableAddButtonCheck(); + AIRTIME.library.checkAddButton(); return false; });