diff --git a/airtime_mvc/application/Bootstrap.php b/airtime_mvc/application/Bootstrap.php
index e64c74136..26a6843c7 100644
--- a/airtime_mvc/application/Bootstrap.php
+++ b/airtime_mvc/application/Bootstrap.php
@@ -31,7 +31,6 @@ require_once "Auth.php";
require_once "interface/OAuth2.php";
require_once "TaskManager.php";
require_once "UsabilityHints.php";
-require_once "MediaType.php";
require_once __DIR__.'/models/formatters/LengthFormatter.php';
require_once __DIR__.'/services/CeleryService.php';
require_once __DIR__.'/services/SoundcloudService.php';
diff --git a/airtime_mvc/application/airtime-boot.php b/airtime_mvc/application/airtime-boot.php
index 5ed3cb4bc..08a5b9869 100644
--- a/airtime_mvc/application/airtime-boot.php
+++ b/airtime_mvc/application/airtime-boot.php
@@ -36,8 +36,6 @@ set_include_path(implode(PATH_SEPARATOR, array(
)));
set_include_path(APPLICATION_PATH . 'common' . PATH_SEPARATOR . get_include_path());
-set_include_path(APPLICATION_PATH . 'common/enum' . PATH_SEPARATOR . get_include_path());
-set_include_path(APPLICATION_PATH . 'common/interface' . PATH_SEPARATOR . get_include_path());
//Propel classes.
set_include_path(APPLICATION_PATH . 'models' . PATH_SEPARATOR . get_include_path());
diff --git a/airtime_mvc/application/common/enum/Enum.php b/airtime_mvc/application/common/enum/Enum.php
deleted file mode 100644
index b0d34fbc3..000000000
--- a/airtime_mvc/application/common/enum/Enum.php
+++ /dev/null
@@ -1,47 +0,0 @@
-getConstants();
- }
- return self::$constCacheArray[$calledClass];
- }
-
- public static function isValidName($name, $strict = false) {
- $constants = self::getConstants();
-
- if ($strict) {
- return array_key_exists($name, $constants);
- }
-
- $keys = array_map('strtolower', array_keys($constants));
- return in_array(strtolower($name), $keys);
- }
-
- public static function isValidValue($value) {
- $values = array_values(self::getConstants());
- return in_array($value, $values, $strict = true);
- }
-
- public static function getDefault() {
- return static::__default;
- }
-
-}
\ No newline at end of file
diff --git a/airtime_mvc/application/common/enum/MediaType.php b/airtime_mvc/application/common/enum/MediaType.php
deleted file mode 100644
index 69843c0d7..000000000
--- a/airtime_mvc/application/common/enum/MediaType.php
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
+
-
-
navigation()->menu(); ?>
@@ -89,6 +90,7 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
totalSpace-$disk->totalFreeSpace;
$total = $disk->totalSpace;
diff --git a/airtime_mvc/application/models/StoredFile.php b/airtime_mvc/application/models/StoredFile.php
index 21973887a..3cffe1fcb 100644
--- a/airtime_mvc/application/models/StoredFile.php
+++ b/airtime_mvc/application/models/StoredFile.php
@@ -805,17 +805,21 @@ SQL;
$unionTable = "({$plTable} UNION {$blTable} UNION {$fileTable} UNION {$streamTable}) AS RESULTS";
//choose which table we need to select data from.
+ // TODO : use constants instead of numbers -- RG
switch ($type) {
- case MediaType::FILE:
+ case 0:
+ $fromTable = $unionTable;
+ break;
+ case 1:
$fromTable = $fileTable." AS File"; //need an alias for the table if it's standalone.
break;
- case MediaType::PLAYLIST:
+ case 2:
$fromTable = $plTable." AS Playlist"; //need an alias for the table if it's standalone.
break;
- case MediaType::BLOCK:
+ case 3:
$fromTable = $blTable." AS Block"; //need an alias for the table if it's standalone.
break;
- case MediaType::WEBSTREAM:
+ case 4:
$fromTable = $streamTable." AS StreamTable"; //need an alias for the table if it's standalone.
break;
default:
diff --git a/airtime_mvc/application/views/scripts/partialviews/dashboard-sub-nav.php b/airtime_mvc/application/views/scripts/partialviews/dashboard-sub-nav.php
deleted file mode 100644
index fe9428f1e..000000000
--- a/airtime_mvc/application/views/scripts/partialviews/dashboard-sub-nav.php
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
diff --git a/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml b/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml
index 9ac17f639..fb346cc94 100644
--- a/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml
+++ b/airtime_mvc/application/views/scripts/showbuilder/builderDialog.phtml
@@ -1,7 +1,30 @@
csrf ?>
diff --git a/airtime_mvc/application/views/scripts/showbuilder/index.phtml b/airtime_mvc/application/views/scripts/showbuilder/index.phtml
index d36794257..b3f90508b 100644
--- a/airtime_mvc/application/views/scripts/showbuilder/index.phtml
+++ b/airtime_mvc/application/views/scripts/showbuilder/index.phtml
@@ -15,7 +15,6 @@
diff --git a/airtime_mvc/public/ajax/library_placeholders.json b/airtime_mvc/public/ajax/library_placeholders.json
new file mode 100644
index 000000000..d1fa5f8af
--- /dev/null
+++ b/airtime_mvc/public/ajax/library_placeholders.json
@@ -0,0 +1,28 @@
+{
+ "1": {
+ "media": "tracks",
+ "icon": "icon-music",
+ "subtext": "Click 'Upload' to add some now.",
+ "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/add-media/"
+ },
+ "2": {
+ "media": "playlists",
+ "icon": "icon-list",
+ "subtext": "Click 'New' to create one now.",
+ "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
+ },
+ "3": {
+ "media": "smart blocks",
+ "icon": "icon-time",
+ "subtext": "Click 'New' to create one now.",
+ "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
+
+ },
+ "4": {
+ "media": "webstreams",
+ "icon": "icon-random",
+ "subtext": "Click 'New' to create one now.",
+ "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
+ },
+ "unauthorized": "You don't have permission to view the library."
+}
\ No newline at end of file
diff --git a/airtime_mvc/public/css/dashboard.css b/airtime_mvc/public/css/dashboard.css
index d6a668d48..4cb70ee68 100644
--- a/airtime_mvc/public/css/dashboard.css
+++ b/airtime_mvc/public/css/dashboard.css
@@ -716,15 +716,3 @@ th.library_checkbox {
background-color: #FF5D1A !important;
height: 38px !important;
}
-
-/* ~~~~~~~~~~~~~~~~
- Podcasts
- ~~~~~~~~~~~~~~~~ */
-
-#podcast_table {
- display: none;
-}
-
-/* ~~~~~~~~~~~~~~~~
- END Podcasts
- ~~~~~~~~~~~~~~~~ */
diff --git a/airtime_mvc/public/css/styles.css b/airtime_mvc/public/css/styles.css
index 0780d3b44..9f4294be8 100644
--- a/airtime_mvc/public/css/styles.css
+++ b/airtime_mvc/public/css/styles.css
@@ -3598,7 +3598,7 @@ button.btn-icon-text > i.icon-white {
.media_type_selector a {
text-decoration: none;
color: #cecece;
- padding: 10px 0 10px 10px;
+ padding: 10px 10px 10px 10px;
display: block;
}
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 4be63d7c9..c6d8f8bbd 100644
--- a/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js
+++ b/airtime_mvc/public/js/airtime/library/events/library_showbuilder.js
@@ -80,20 +80,22 @@ var AIRTIME = (function(AIRTIME) {
var libEmpty = $('#library_empty');
if (emptyRow.length > 0) {
emptyRow.hide();
- var mediaType = parseInt($('.media_type_selector.selected').data('selection-id')),
+ var mediaType = parseInt($('.media_type_selector.selected').attr('data-selection-id')),
img = $('#library_empty_image');
// Remove all classes for when we change between empty media types
img.removeClass(function() {
return $( this ).attr( "class" );
});
-
- var opts = AIRTIME.library.placeholder(mediaType);
- img.addClass("icon-white " + opts.icon);
- $('#library_empty_text').html(
- $.i18n._("You haven't added any " + opts.media + ".")
- + "
" + $.i18n._(opts.subtext)
- + "
" + $.i18n._("Learn about " + opts.media) + " "
- );
+ // TODO: once the new manual pages are added, change links!
+ $.getJSON( "ajax/library_placeholders.json", function( data ) {
+ var opts = data[mediaType];
+ img.addClass("icon-white " + opts.icon);
+ $('#library_empty_text').html(
+ $.i18n._("You haven't added any " + opts.media + ".")
+ + "
" + $.i18n._(opts.subtext)
+ + "
" + $.i18n._("Learn about " + opts.media) + " "
+ );
+ });
libEmpty.show();
} else {
@@ -331,13 +333,13 @@ var AIRTIME = (function(AIRTIME) {
return;
}
- var selection = $(".media_type_selector.selected").data("selection-id");
+ var selection = $(".media_type_selector.selected").attr("data-selection-id");
- if (selection == AIRTIME.library.MediaTypeEnum.PLAYLIST) {
+ if (selection == 2) {
AIRTIME.playlist.fnNew();
- } else if (selection == AIRTIME.library.MediaTypeEnum.BLOCK) {
+ } else if (selection == 3) {
AIRTIME.playlist.fnNewBlock();
- } else if (selection == AIRTIME.library.MediaTypeEnum.WEBSTREAM) {
+ } else if (selection == 4) {
AIRTIME.playlist.fnWsNew();
}
});
diff --git a/airtime_mvc/public/js/airtime/library/library.js b/airtime_mvc/public/js/airtime/library/library.js
index 1d9cb57f7..680c7816c 100644
--- a/airtime_mvc/public/js/airtime/library/library.js
+++ b/airtime_mvc/public/js/airtime/library/library.js
@@ -58,67 +58,6 @@ var AIRTIME = (function(AIRTIME) {
}
mod = AIRTIME.library;
- /* ############################################
- CONFIGURATION
- ############################################ */
-
- mod.MediaTypeEnum = Object.freeze({
- DEFAULT: 1,
- FILE: 1,
- PLAYLIST: 2,
- BLOCK: 3,
- WEBSTREAM: 4,
- PODCAST: 5
- });
-
- // TODO: once the new manual pages are added, change links!
- mod.placeholder = function(mediaType) {
- switch (mediaType) {
- // TODO: remove duplication in a nice way?
- case MediaTypeEnum.FILE:
- return {
- "media": "tracks",
- "icon": "icon-music",
- "subtext": "Click 'Upload' to add some now.",
- "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/add-media/"
- };
- case MediaTypeEnum.PLAYLIST:
- return {
- "media": "playlists",
- "icon": "icon-list",
- "subtext": "Click 'New' to create one now.",
- "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
- };
- case MediaTypeEnum.BLOCK:
- return {
- "media": "smart blocks",
- "icon": "icon-time",
- "subtext": "Click 'New' to create one now.",
- "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
- };
- case MediaTypeEnum.WEBSTREAM:
- return {
- "media": "webstreams",
- "icon": "icon-random",
- "subtext": "Click 'New' to create one now.",
- "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
- };
- case MediaTypeEnum.PODCAST:
- return {
- "media": "podcasts",
- "icon": "icon-headphones",
- "subtext": "Click 'Add' to create one now.",
- "href": "http://sourcefabric.booktype.pro/airtime-pro-for-broadcasters/library/"
- };
- default:
- break;
- }
- };
-
- /* ############################################
- END CONFIGURATION
- ############################################ */
-
mod.getChosenItemsLength = function(){
var cItem,
selected,
@@ -259,10 +198,10 @@ var AIRTIME = (function(AIRTIME) {
};
mod.checkNewButton = function() {
- var selected = $(".media_type_selector.selected").data("selection-id"),
+ var selected = $(".media_type_selector.selected").attr("data-selection-id"),
check = false;
- if (selected != AIRTIME.library.MediaTypeEnum.FILE) {
+ if (selected != 1) {
check = true;
}
@@ -515,262 +454,7 @@ var AIRTIME = (function(AIRTIME) {
var colReorderMap = new Array();
- $libTable = $("#library_display");
-
- /* ############################################
- DATATABLES
- ############################################ */
-
- mod.libraryDataTable = $libTable.dataTable({
-
- // put hidden columns at the top to insure they can never be visible
- // on the table through column reordering.
-
- //IMPORTANT: WHEN ADDING A NEW COLUMN PLEASE CONSULT WITH THE WIKI
- // https://wiki.sourcefabric.org/display/CC/Adding+a+new+library+datatable+column
- "aoColumns": [
- /* ftype */ {"sTitle": "", "mDataProp": "ftype", "bSearchable": false, "bVisible": false},
- /* Checkbox */ {"sTitle": "", "mDataProp": "checkbox", "bSortable": false, "bSearchable": false, "sWidth": "16px", "sClass": "library_checkbox"},
- /* Type */ {"sTitle": "", "mDataProp": "image", "bSortable": false, "bSearchable": false, "sWidth": "16px", "sClass": "library_type", "iDataSort": 0},
- /* Is Scheduled */ {"sTitle": $.i18n._("Scheduled"), "mDataProp": "is_scheduled", "bVisible": false, "bSearchable": false, "sWidth": "90px", "sClass": "library_is_scheduled"},
- ///* Is Playlist */ { "sTitle" : $.i18n._("Playlist / Block") , "mDataProp" : "is_playlist" , "bSearchable" : false , "sWidth" : "110px" , "sClass" : "library_is_playlist"} ,
- /* Title */ {"sTitle": $.i18n._("Title"), "mDataProp": "track_title", "sClass": "library_title", "sWidth": "170px"},
- /* Creator */ {"sTitle": $.i18n._("Creator"), "mDataProp": "artist_name", "sClass": "library_creator", "sWidth": "160px"},
- /* Album */ {"sTitle": $.i18n._("Album"), "mDataProp": "album_title", "sClass": "library_album", "sWidth": "150px"},
- /* Bit Rate */ {"sTitle": $.i18n._("Bit Rate"), "mDataProp": "bit_rate", "bVisible": false, "sClass": "library_bitrate", "sWidth": "80px"},
- /* BPM */ {"sTitle": $.i18n._("BPM"), "mDataProp": "bpm", "bVisible": false, "sClass": "library_bpm", "sWidth": "50px"},
- /* Composer */ {"sTitle": $.i18n._("Composer"), "mDataProp": "composer", "bVisible": false, "sClass": "library_composer", "sWidth": "150px"},
- /* Conductor */ {"sTitle": $.i18n._("Conductor"), "mDataProp": "conductor", "bVisible": false, "sClass": "library_conductor", "sWidth": "125px"},
- /* Copyright */ {"sTitle": $.i18n._("Copyright"), "mDataProp": "copyright", "bVisible": false, "sClass": "library_copyright", "sWidth": "125px"},
- /* Cue In */ {"sTitle": $.i18n._("Cue In"), "mDataProp": "cuein", "bVisible": false, "sClass": "library_length", "sWidth": "80px"},
- /* Cue Out */ {"sTitle": $.i18n._("Cue Out"), "mDataProp": "cueout", "bVisible": false, "sClass": "library_length", "sWidth": "80px"},
- /* Encoded */ {"sTitle": $.i18n._("Encoded By"), "mDataProp": "encoded_by", "bVisible": false, "sClass": "library_encoded", "sWidth": "150px"},
- /* Genre */ {"sTitle": $.i18n._("Genre"), "mDataProp": "genre", "bVisible": false, "sClass": "library_genre", "sWidth": "100px"},
- /* ISRC Number */ {"sTitle": $.i18n._("ISRC"), "mDataProp": "isrc_number", "bVisible": false, "sClass": "library_isrc", "sWidth": "150px"},
- /* Label */ {"sTitle": $.i18n._("Label"), "mDataProp": "label", "bVisible": false, "sClass": "library_label", "sWidth": "125px"},
- /* Language */ {"sTitle": $.i18n._("Language"), "mDataProp": "language", "bVisible": false, "sClass": "library_language", "sWidth": "125px"},
- /* Last Modified */ {"sTitle": $.i18n._("Last Modified"), "mDataProp": "mtime", "bVisible": false, "sClass": "library_modified_time", "sWidth": "155px"},
- /* Last Played */ {"sTitle": $.i18n._("Last Played"), "mDataProp": "lptime", "bVisible": false, "sClass": "library_modified_time", "sWidth": "155px"},
- /* Length */ {"sTitle": $.i18n._("Length"), "mDataProp": "length", "sClass": "library_length", "sWidth": "80px"},
- /* Mime */ {"sTitle": $.i18n._("Mime"), "mDataProp": "mime", "bVisible": false, "sClass": "library_mime", "sWidth": "80px"},
- /* Mood */ {"sTitle": $.i18n._("Mood"), "mDataProp": "mood", "bVisible": false, "sClass": "library_mood", "sWidth": "70px"},
- /* Owner */ {"sTitle": $.i18n._("Owner"), "mDataProp": "owner_id", "bVisible": false, "sClass": "library_language", "sWidth": "125px"},
- /* Replay Gain */ {"sTitle": $.i18n._("Replay Gain"), "mDataProp": "replay_gain", "bVisible": false, "sClass": "library_replay_gain", "sWidth": "125px"},
- /* Sample Rate */ {"sTitle": $.i18n._("Sample Rate"), "mDataProp": "sample_rate", "bVisible": false, "sClass": "library_sr", "sWidth": "125px"},
- /* Track Number */ {"sTitle": $.i18n._("Track Number"), "mDataProp": "track_number", "bVisible": false, "sClass": "library_track", "sWidth": "125px"},
- /* Upload Time */ {"sTitle": $.i18n._("Uploaded"), "mDataProp": "utime", "bVisible": false, "sClass": "library_upload_time", "sWidth": "155px"},
- /* Website */ {"sTitle": $.i18n._("Website"), "mDataProp": "info_url", "bVisible": false, "sClass": "library_url", "sWidth": "150px"},
- /* Year */ {"sTitle": $.i18n._("Year"), "mDataProp": "year", "bVisible": false, "sClass": "library_year", "sWidth": "60px"},
- /* Context Menu */ {"sTitle": "", "mDataProp": "options", "bSortable": false, "bSearchable": false, "sWidth": "20px", "sClass": "library_actions"}
- ],
-
- "bProcessing": true,
- "bServerSide": true,
-
- "aLengthMenu": [25, 50, 100],
-
- "bStateSave": true,
- "fnStateSaveParams": function (oSettings, oData) {
- // remove oData components we don't want to save.
- delete oData.oSearch;
- delete oData.aoSearchCols;
- },
- "fnStateSave": function (oSettings, oData) {
- localStorage.setItem('datatables-library', JSON.stringify(oData));
-
- // Sadly, this is necessary because we need to unscramble the colReorder map on the backend
- $.ajax({
- url: baseUrl + "usersettings/set-library-datatable",
- type: "POST",
- data: {settings: oData, format: "json"},
- dataType: "json"
- });
-
- colReorderMap = oData.ColReorder;
- },
- "fnStateLoad": function fnLibStateLoad(oSettings) {
- var settings = JSON.parse(localStorage.getItem('datatables-library'));
- // Hacky; always set the visibility of the last column (actions buttons) to true
- if (settings && settings.abVisCols) settings.abVisCols[settings.abVisCols.length - 1] = true;
-
- try {
- return settings;
- } catch (e) {
- return null;
- }
- },
- "fnStateLoadParams": function (oSettings, oData) {
- var i,
- length,
- a = oData.abVisCols;
-
- if (a) {
- // putting serialized data back into the correct js type to make
- // sure everything works properly.
- for (i = 0, length = a.length; i < length; i++) {
- if (typeof(a[i]) === "string") {
- a[i] = (a[i] === "true");
- }
- }
- }
-
- a = oData.ColReorder;
- if (a) {
- for (i = 0, length = a.length; i < length; i++) {
- if (typeof(a[i]) === "string") {
- a[i] = parseInt(a[i], 10);
- }
- }
- }
-
- oData.iEnd = parseInt(oData.iEnd, 10);
- oData.iLength = parseInt(oData.iLength, 10);
- oData.iStart = parseInt(oData.iStart, 10);
- oData.iCreate = parseInt(oData.iCreate, 10);
- },
-
- "sAjaxSource": baseUrl + "Library/contents-feed",
- "sAjaxDataProp": "files",
-
- "fnServerData": function (sSource, aoData, fnCallback) {
- /*
- * The real validation check is done in
- * dataTables.columnFilter.js We also need to check it here
- * because datatable is redrawn everytime an action is performed
- * in the Library page. In order for datatable to redraw the
- * advanced search fields MUST all be valid.
- */
- var advSearchFields = $("div#advanced_search").children(':visible');
- var advSearchValid = validateAdvancedSearch(advSearchFields);
- var type;
- aoData.push({name: "format", value: "json"});
- aoData.push({name: "advSearch", value: advSearchValid});
-
- // push whether to search files/playlists or all.
- type = $(".media_type_selector.selected").data("selection-id");
- type = (type === undefined) ? AIRTIME.library.MediaTypeEnum.DEFAULT : type;
- aoData.push({name: "type", value: type});
-
- //getUsabilityHint();
-
- $.ajax({
- "dataType": 'json',
- "type": "POST",
- "url": sSource,
- "data": aoData,
- "success": fnCallback,
- "error": handleAjaxError
- }).done(function (data) {
- if (data.iTotalRecords > data.iTotalDisplayRecords) {
- $('#filter_message').text(
- $.i18n._("Filtering out ") + (data.iTotalRecords - data.iTotalDisplayRecords)
- + $.i18n._(" of ") + data.iTotalRecords
- + $.i18n._(" records")
- );
- $('#library_empty').hide();
- $('#library_display').find('tr:has(td.dataTables_empty)').show();
- } else {
- $('#filter_message').text("");
- }
- $('#library_content').find('.dataTables_filter input[type="text"]')
- .css('padding-right', $('#advanced-options').find('button').outerWidth());
- });
- },
- "fnRowCallback": AIRTIME.library.fnRowCallback,
- "fnCreatedRow": function (nRow, aData, iDataIndex) {
- // add checkbox
- $(nRow).find('td.library_checkbox').html("
");
-
- $(nRow).find('td.library_actions')
- .text("...")
- .on('click', function (e) {
- $(this).contextMenu({x: $(e.target).offset().left, y: $(e.target).offset().top})
- }).html("
...
");
-
- // add audio preview image/button
- if (aData.ftype === "audioclip") {
- $(nRow).find('td.library_type').html('
');
- } else if (aData.ftype === "playlist") {
- $(nRow).find('td.library_type').html('
');
- } else if (aData.ftype === "block") {
- $(nRow).find('td.library_type').html('
');
- } else if (aData.ftype === "stream") {
- $(nRow).find('td.library_type').html('
');
- }
-
- if (aData.is_scheduled) {
- $(nRow).find("td.library_is_scheduled").html('
');
- } else if (!aData.is_scheduled) {
- $(nRow).find("td.library_is_scheduled").html('');
- }
- if (aData.is_playlist) {
- $(nRow).find("td.library_is_playlist").html('
');
- } else if (!aData.is_playlist) {
- $(nRow).find("td.library_is_playlist").html('');
- }
-
- // add the play function to the library_type td
- $(nRow).find('td.library_type').click(function () {
- if (aData.ftype === 'playlist' && aData.length !== '0.0') {
- open_playlist_preview(aData.audioFile, 0);
- } else if (aData.ftype === 'audioclip') {
- if (isAudioSupported(aData.mime)) {
- open_audio_preview(aData.ftype, aData.id);
- }
- } else if (aData.ftype == 'stream') {
- if (isAudioSupported(aData.mime)) {
- open_audio_preview(aData.ftype, aData.id);
- }
- } else if (aData.ftype == 'block' && aData.bl_type == 'static') {
- open_block_preview(aData.audioFile, 0);
- }
- return false;
- });
- },
- // remove any selected nodes before the draw.
- "fnPreDrawCallback": function (oSettings) {
-
- // make sure any dragging helpers are removed or else they'll be
- // stranded on the screen.
- $("#draggingContainer").remove();
- },
- "fnDrawCallback": AIRTIME.library.fnDrawCallback,
-
- "aaSorting": [[5, 'asc']],
- "sPaginationType": "full_numbers",
- "bJQueryUI": true,
- "bAutoWidth": false,
- "oLanguage": getLibraryDatatableStrings(),
-
- // z = ColResize, R = ColReorder, C = ColVis
- "sDom": 'Rf<"dt-process-rel"r><"H"<"library_toolbar"C>><"dataTables_scrolling"t<"#library_empty"<"#library_empty_image"><"#library_empty_text">>><"F"lip>>',
-
- "oColVis": {
- "sAlign": "right",
- "aiExclude": [0, 1, 2, 31],
- "sSize": "css",
- "fnStateChange": setFilterElement,
- "buttonText": $.i18n._("Columns"),
- "iOverlayFade": 0
- },
-
- "oColReorder": {
- "iFixedColumnsRight": 1,
- "iFixedColumns": 3
- },
-
- "bScrollCollapse": false
-
- });
-
- /* TODO: implement podcast datatable
- * mod.podcastDataTable = $("#podcast_table").dataTable({});
- */
- mod.podcastDataTable = mod.libraryDataTable;
-
- /* ############################################
- END DATATABLES
- ############################################ */
+ $libTable = $libContent.find("table");
function getTableHeight() {
return $libContent.height() - 175;
@@ -842,8 +526,8 @@ var AIRTIME = (function(AIRTIME) {
function getLibraryDatatableStrings() {
//Set up the datatables string translation table with different strings depending on
//whether you're viewing files, playlists, smart blocks, etc.
- var type = parseInt($(".media_type_selector.selected").data("selection-id"));
- type = (type === undefined) ? AIRTIME.library.MediaTypeEnum.DEFAULT : type;
+ var type = parseInt($(".media_type_selector.selected").attr("data-selection-id"));
+ type = (type === undefined) ? 1 : type;
//FIXME: The code that calls this function doesn't work as intended because you can't
// change the oLanguage property of a datatable dynamically. :(
@@ -886,19 +570,255 @@ var AIRTIME = (function(AIRTIME) {
if (r.status === 403) {
// Hide the processing div
$("#library_display_wrapper").find(".dt-process-rel").hide();
- $('#library_empty_text').text($.i18n._("You don't have permission to view the library."));
+ $.getJSON( "ajax/library_placeholders.json", function( data ) {
+ $('#library_empty_text').text($.i18n._(data.unauthorized));
+ }) ;
$('#library_empty').show();
}
}
- var selected = $("a[href$='"+location.hash+"']");
- if (selected.parent().data("selection-id") == AIRTIME.library.MediaTypeEnum.PODCAST) {
- $("#library_display_wrapper").hide();
- oTable = mod.podcastDataTable.show();
- } else {
- oTable = mod.libraryDataTable;
- }
+ oTable = $libTable.dataTable( {
+
+ // put hidden columns at the top to insure they can never be visible
+ // on the table through column reordering.
+
+ //IMPORTANT: WHEN ADDING A NEW COLUMN PLEASE CONSULT WITH THE WIKI
+ // https://wiki.sourcefabric.org/display/CC/Adding+a+new+library+datatable+column
+ "aoColumns": [
+ /* ftype */ { "sTitle" : "" , "mDataProp" : "ftype" , "bSearchable" : false , "bVisible" : false },
+ /* Checkbox */ { "sTitle" : "" , "mDataProp" : "checkbox" , "bSortable" : false , "bSearchable" : false , "sWidth" : "16px" , "sClass" : "library_checkbox" },
+ /* Type */ { "sTitle" : "" , "mDataProp" : "image" , "bSortable" : false , "bSearchable" : false , "sWidth" : "16px" , "sClass" : "library_type" , "iDataSort" : 0 },
+ /* Is Scheduled */ { "sTitle" : $.i18n._("Scheduled") , "mDataProp" : "is_scheduled" , "bVisible" : false , "bSearchable" : false , "sWidth" : "90px" , "sClass" : "library_is_scheduled" },
+ ///* Is Playlist */ { "sTitle" : $.i18n._("Playlist / Block") , "mDataProp" : "is_playlist" , "bSearchable" : false , "sWidth" : "110px" , "sClass" : "library_is_playlist"} ,
+ /* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" },
+ /* Creator */ { "sTitle" : $.i18n._("Creator") , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" },
+ /* Album */ { "sTitle" : $.i18n._("Album") , "mDataProp" : "album_title" , "sClass" : "library_album" , "sWidth" : "150px" },
+ /* Bit Rate */ { "sTitle" : $.i18n._("Bit Rate") , "mDataProp" : "bit_rate" , "bVisible" : false , "sClass" : "library_bitrate" , "sWidth" : "80px" },
+ /* BPM */ { "sTitle" : $.i18n._("BPM") , "mDataProp" : "bpm" , "bVisible" : false , "sClass" : "library_bpm" , "sWidth" : "50px" },
+ /* Composer */ { "sTitle" : $.i18n._("Composer") , "mDataProp" : "composer" , "bVisible" : false , "sClass" : "library_composer" , "sWidth" : "150px" },
+ /* Conductor */ { "sTitle" : $.i18n._("Conductor") , "mDataProp" : "conductor" , "bVisible" : false , "sClass" : "library_conductor" , "sWidth" : "125px" },
+ /* Copyright */ { "sTitle" : $.i18n._("Copyright") , "mDataProp" : "copyright" , "bVisible" : false , "sClass" : "library_copyright" , "sWidth" : "125px" },
+ /* Cue In */ { "sTitle" : $.i18n._("Cue In") , "mDataProp" : "cuein" , "bVisible" : false , "sClass" : "library_length" , "sWidth" : "80px" },
+ /* Cue Out */ { "sTitle" : $.i18n._("Cue Out") , "mDataProp" : "cueout" , "bVisible" : false , "sClass" : "library_length" , "sWidth" : "80px" },
+ /* Encoded */ { "sTitle" : $.i18n._("Encoded By") , "mDataProp" : "encoded_by" , "bVisible" : false , "sClass" : "library_encoded" , "sWidth" : "150px" },
+ /* Genre */ { "sTitle" : $.i18n._("Genre") , "mDataProp" : "genre" , "bVisible" : false , "sClass" : "library_genre" , "sWidth" : "100px" },
+ /* ISRC Number */ { "sTitle" : $.i18n._("ISRC") , "mDataProp" : "isrc_number" , "bVisible" : false , "sClass" : "library_isrc" , "sWidth" : "150px" },
+ /* Label */ { "sTitle" : $.i18n._("Label") , "mDataProp" : "label" , "bVisible" : false , "sClass" : "library_label" , "sWidth" : "125px" },
+ /* Language */ { "sTitle" : $.i18n._("Language") , "mDataProp" : "language" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" },
+ /* Last Modified */ { "sTitle" : $.i18n._("Last Modified") , "mDataProp" : "mtime" , "bVisible" : false , "sClass" : "library_modified_time" , "sWidth" : "155px" },
+ /* Last Played */ { "sTitle" : $.i18n._("Last Played") , "mDataProp" : "lptime" , "bVisible" : false , "sClass" : "library_modified_time" , "sWidth" : "155px" },
+ /* Length */ { "sTitle" : $.i18n._("Length") , "mDataProp" : "length" , "sClass" : "library_length" , "sWidth" : "80px" },
+ /* Mime */ { "sTitle" : $.i18n._("Mime") , "mDataProp" : "mime" , "bVisible" : false , "sClass" : "library_mime" , "sWidth" : "80px" },
+ /* Mood */ { "sTitle" : $.i18n._("Mood") , "mDataProp" : "mood" , "bVisible" : false , "sClass" : "library_mood" , "sWidth" : "70px" },
+ /* Owner */ { "sTitle" : $.i18n._("Owner") , "mDataProp" : "owner_id" , "bVisible" : false , "sClass" : "library_language" , "sWidth" : "125px" },
+ /* Replay Gain */ { "sTitle" : $.i18n._("Replay Gain") , "mDataProp" : "replay_gain" , "bVisible" : false , "sClass" : "library_replay_gain" , "sWidth" : "125px" },
+ /* Sample Rate */ { "sTitle" : $.i18n._("Sample Rate") , "mDataProp" : "sample_rate" , "bVisible" : false , "sClass" : "library_sr" , "sWidth" : "125px" },
+ /* Track Number */ { "sTitle" : $.i18n._("Track Number") , "mDataProp" : "track_number" , "bVisible" : false , "sClass" : "library_track" , "sWidth" : "125px" },
+ /* Upload Time */ { "sTitle" : $.i18n._("Uploaded") , "mDataProp" : "utime" , "bVisible" : false , "sClass" : "library_upload_time" , "sWidth" : "155px" },
+ /* Website */ { "sTitle" : $.i18n._("Website") , "mDataProp" : "info_url" , "bVisible" : false , "sClass" : "library_url" , "sWidth" : "150px" },
+ /* Year */ { "sTitle" : $.i18n._("Year") , "mDataProp" : "year" , "bVisible" : false , "sClass" : "library_year" , "sWidth" : "60px" },
+ /* Context Menu */ { "sTitle" : "" , "mDataProp" : "options" , "bSortable" : false , "bSearchable" : false , "sWidth" : "20px", "sClass" : "library_actions" }
+ ],
+
+ "bProcessing": true,
+ "bServerSide": true,
+
+ "aLengthMenu": [25, 50, 100],
+
+ "bStateSave": true,
+ "fnStateSaveParams": function (oSettings, oData) {
+ // remove oData components we don't want to save.
+ delete oData.oSearch;
+ delete oData.aoSearchCols;
+ },
+ "fnStateSave": function (oSettings, oData) {
+ localStorage.setItem('datatables-library', JSON.stringify(oData));
+
+ // Sadly, this is necessary because we need to unscramble the colReorder map on the backend
+ $.ajax({
+ url: baseUrl + "usersettings/set-library-datatable",
+ type: "POST",
+ data: {settings: oData, format: "json"},
+ dataType: "json"
+ });
+
+ colReorderMap = oData.ColReorder;
+ },
+ "fnStateLoad": function fnLibStateLoad(oSettings) {
+ var settings = JSON.parse(localStorage.getItem('datatables-library'));
+ // Hacky; always set the visibility of the last column (actions buttons) to true
+ if (settings && settings.abVisCols) settings.abVisCols[settings.abVisCols.length - 1] = true;
+
+ try {
+ return settings;
+ } catch (e) {
+ return null;
+ }
+ },
+ "fnStateLoadParams": function (oSettings, oData) {
+ var i,
+ length,
+ a = oData.abVisCols;
+
+ if (a) {
+ // putting serialized data back into the correct js type to make
+ // sure everything works properly.
+ for (i = 0, length = a.length; i < length; i++) {
+ if (typeof(a[i]) === "string") {
+ a[i] = (a[i] === "true");
+ }
+ }
+ }
+
+ a = oData.ColReorder;
+ if (a) {
+ for (i = 0, length = a.length; i < length; i++) {
+ if (typeof(a[i]) === "string") {
+ a[i] = parseInt(a[i], 10);
+ }
+ }
+ }
+
+ oData.iEnd = parseInt(oData.iEnd, 10);
+ oData.iLength = parseInt(oData.iLength, 10);
+ oData.iStart = parseInt(oData.iStart, 10);
+ oData.iCreate = parseInt(oData.iCreate, 10);
+ },
+
+ "sAjaxSource": baseUrl+"Library/contents-feed",
+ "sAjaxDataProp": "files",
+
+ "fnServerData": function ( sSource, aoData, fnCallback ) {
+ /*
+ * The real validation check is done in
+ * dataTables.columnFilter.js We also need to check it here
+ * because datatable is redrawn everytime an action is performed
+ * in the Library page. In order for datatable to redraw the
+ * advanced search fields MUST all be valid.
+ */
+ var advSearchFields = $("div#advanced_search").children(':visible');
+ var advSearchValid = validateAdvancedSearch(advSearchFields);
+ var type;
+ aoData.push( { name: "format", value: "json"} );
+ aoData.push( { name: "advSearch", value: advSearchValid} );
+
+ // push whether to search files/playlists or all.
+ type = $(".media_type_selector.selected").attr("data-selection-id");
+ type = (type === undefined) ? 1 : type;
+ aoData.push( { name: "type", value: type} );
+
+ //getUsabilityHint();
+
+ $.ajax({
+ "dataType": 'json',
+ "type": "POST",
+ "url": sSource,
+ "data": aoData,
+ "success": fnCallback,
+ "error": handleAjaxError
+ }).done(function(data) {
+ if (data.iTotalRecords > data.iTotalDisplayRecords) {
+ $('#filter_message').text(
+ $.i18n._("Filtering out ") + (data.iTotalRecords - data.iTotalDisplayRecords)
+ + $.i18n._(" of ") + data.iTotalRecords
+ + $.i18n._(" records")
+ );
+ $('#library_empty').hide();
+ $('#library_display').find('tr:has(td.dataTables_empty)').show();
+ } else {
+ $('#filter_message').text("");
+ }
+ $('#library_content').find('.dataTables_filter input[type="text"]')
+ .css('padding-right', $('#advanced-options').find('button').outerWidth());
+ });
+ },
+ "fnRowCallback": AIRTIME.library.fnRowCallback,
+ "fnCreatedRow": function( nRow, aData, iDataIndex ) {
+ // add checkbox
+ $(nRow).find('td.library_checkbox').html("
");
+
+ $(nRow).find('td.library_actions')
+ .text("...")
+ .on('click', function(e) {
+ $(this).contextMenu({x: $(e.target).offset().left, y: $(e.target).offset().top})
+ }).html("
...
");
+
+ // add audio preview image/button
+ if (aData.ftype === "audioclip") {
+ $(nRow).find('td.library_type').html('
');
+ } else if (aData.ftype === "playlist") {
+ $(nRow).find('td.library_type').html('
');
+ } else if (aData.ftype === "block") {
+ $(nRow).find('td.library_type').html('
');
+ } else if (aData.ftype === "stream") {
+ $(nRow).find('td.library_type').html('
');
+ }
+
+ if (aData.is_scheduled) {
+ $(nRow).find("td.library_is_scheduled").html('
');
+ } else if (!aData.is_scheduled) {
+ $(nRow).find("td.library_is_scheduled").html('');
+ }
+ if (aData.is_playlist) {
+ $(nRow).find("td.library_is_playlist").html('
');
+ } else if (!aData.is_playlist) {
+ $(nRow).find("td.library_is_playlist").html('');
+ }
+
+ // add the play function to the library_type td
+ $(nRow).find('td.library_type').click(function(){
+ if (aData.ftype === 'playlist' && aData.length !== '0.0'){
+ open_playlist_preview(aData.audioFile, 0);
+ } else if (aData.ftype === 'audioclip') {
+ if (isAudioSupported(aData.mime)) {
+ open_audio_preview(aData.ftype, aData.id);
+ }
+ } else if (aData.ftype == 'stream') {
+ if (isAudioSupported(aData.mime)) {
+ open_audio_preview(aData.ftype, aData.id);
+ }
+ } else if (aData.ftype == 'block' && aData.bl_type == 'static') {
+ open_block_preview(aData.audioFile, 0);
+ }
+ return false;
+ });
+ },
+ // remove any selected nodes before the draw.
+ "fnPreDrawCallback": function( oSettings ) {
+
+ // make sure any dragging helpers are removed or else they'll be
+ // stranded on the screen.
+ $("#draggingContainer").remove();
+ },
+ "fnDrawCallback": AIRTIME.library.fnDrawCallback,
+
+ "aaSorting": [[5, 'asc']],
+ "sPaginationType": "full_numbers",
+ "bJQueryUI": true,
+ "bAutoWidth": false,
+ "oLanguage": getLibraryDatatableStrings(),
+
+ // z = ColResize, R = ColReorder, C = ColVis
+ "sDom": 'Rf<"dt-process-rel"r><"H"<"library_toolbar"C>><"dataTables_scrolling"t<"#library_empty"<"#library_empty_image"><"#library_empty_text">>><"F"lip>>',
+
+ "oColVis": {
+ "sAlign": "right",
+ "aiExclude": [0, 1, 2, 31],
+ "sSize": "css",
+ "fnStateChange": setFilterElement,
+ "buttonText": $.i18n._("Columns"),
+ "iOverlayFade": 0
+ },
+
+ "oColReorder": {
+ "iFixedColumnsRight": 1,
+ "iFixedColumns": 3
+ },
+
+ "bScrollCollapse": false
+
+ });
setColumnFilter(oTable);
oTable.fnSetFilteringDelay(350);
diff --git a/airtime_mvc/public/js/airtime/library/plupload.js b/airtime_mvc/public/js/airtime/library/plupload.js
index 21a92de9f..b8f1d2a32 100644
--- a/airtime_mvc/public/js/airtime/library/plupload.js
+++ b/airtime_mvc/public/js/airtime/library/plupload.js
@@ -37,13 +37,90 @@ $(document).ready(function () {
self.recentUploadsTable.fnDraw(); //Only works because we're using bServerSide
//In DataTables 1.10 and greater, we can use .fnAjaxReload()
});
-
- this.on("queuecomplete", function() {
+ this.on("complete", function() {
uploadProgress = false;
});
}
};
+ /*
+ var uploader = new plupload.Uploader({
+ runtimes: 'html5, flash, html4',
+ browse_button: 'pickfiles',
+ container: $("#container"),
+ url : baseUrl+'rest/media',
+ filters : [
+ {title: "Audio Files", extensions: "ogg,mp3,oga,flac,wav,m4a,mp4,opus,aac,oga,mp1,mp2,wma,au"}
+ ],
+ multipart_params : {
+ "csrf_token" : $("#csrf").attr('value')
+ },
+
+ init: {
+ PostInit: function() {
+ document.getElementById('filelist').innerHTML = '';
+
+ document.getElementById('uploadfiles').onclick = function() {
+ uploader.start();
+ return false;
+ };
+ },
+
+ FilesAdded: function(up, files) {
+ plupload.each(files, function(file) {
+ document.getElementById('filelist').innerHTML += '
' + file.name + ' (' + plupload.formatSize(file.size) + ')
';
+ });
+ },
+
+ UploadProgress: function(up, file) {
+ document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '
' + file.percent + "% ";
+ },
+
+ Error: function(up, err) {
+ document.getElementById('console').innerHTML += "\nError #" + err.code + ": " + err.message;
+ }
+ }
+ });
+
+ uploader.init();
+ */
+
+
+ /*
+ $("#plupload_files").pluploadQueue({
+ // General settings
+ runtimes : 'gears, html5, html4',
+ url : baseUrl+'rest/media',
+ //chunk_size : '5mb', //Disabling chunking since we're using the File Upload REST API now
+ unique_names : 'true',
+ multiple_queues : 'true',
+ filters : [
+ {title: "Audio Files", extensions: "ogg,mp3,oga,flac,wav,m4a,mp4,opus,aac,oga,mp1,mp2,wma,au"}
+ ],
+ multipart_params : {
+ "csrf_token" : $("#csrf").attr('value'),
+ }
+ });
+
+ uploader = $("#plupload_files").pluploadQueue();
+
+ uploader.bind('FileUploaded', function(up, file, json)
+ {
+ //Refresh the upload table:
+ self.recentUploadsTable.fnDraw(); //Only works because we're using bServerSide
+ //In DataTables 1.10 and greater, we can use .fnAjaxReload()
+ });
+
+ var uploadProgress = false;
+
+ uploader.bind('QueueChanged', function(){
+ uploadProgress = (uploader.files.length > 0);
+ });
+
+ uploader.bind('UploadComplete', function(){
+ uploadProgress = false;
+ });*/
+
$(window).bind('beforeunload', function () {
if (uploadProgress) {
return sprintf($.i18n._("You are currently uploading files. %sGoing to another screen will cancel the upload process. %sAre you sure you want to leave the page?"),
@@ -96,11 +173,11 @@ $(document).ready(function () {
});
self.setupRecentUploadsTable = function () {
- return $("#recent_uploads_table").dataTable({
+ recentUploadsTable = $("#recent_uploads_table").dataTable({
"bJQueryUI": true,
"bProcessing": false,
"bServerSide": true,
- "sAjaxSource": '/plupload/recent-uploads/format/json',
+ "sAjaxSource": '/Plupload/recent-uploads/format/json',
"sAjaxDataProp": 'files',
"bSearchable": false,
"bInfo": true,
@@ -144,13 +221,11 @@ $(document).ready(function () {
areAnyFileImportsPending = true;
}
}
-
if (areAnyFileImportsPending) {
//alert("pending uploads, starting refresh on timer");
self.startRefreshingRecentUploads();
- } else if (self.isRecentUploadsRefreshTimerActive) {
+ } else {
self.stopRefreshingRecentUploads();
- self.recentUploadsTable.fnDraw();
}
// Update usability hint - in common.js
@@ -164,7 +239,7 @@ $(document).ready(function () {
var sw = $(this)[0].scrollWidth, iw = $(this).innerWidth();
if (sw > iw) {
$(this).stop().animate({
- textIndent: "-" + (sw - iw) + "px"
+ textIndent: "-" + (sw + 2 - iw) + "px"
}, sw * 8);
}
},
@@ -176,41 +251,37 @@ $(document).ready(function () {
);
}
});
+
+ return recentUploadsTable;
};
- self.isRecentUploadsRefreshTimerActive = false;
-
self.startRefreshingRecentUploads = function () {
- if (!self.isRecentUploadsRefreshTimerActive) { //Prevent multiple timers from running
- self.recentUploadsRefreshTimer = setInterval(function() {
- self.recentUploadsTable.fnDraw();
- }, 3000);
- self.isRecentUploadsRefreshTimerActive = true;
+ if (self.isRecentUploadsRefreshTimerActive()) { //Prevent multiple timers from running
+ return;
}
+ self.recentUploadsRefreshTimer = setInterval("self.recentUploadsTable.fnDraw()", 3000);
+ };
+
+ self.isRecentUploadsRefreshTimerActive = function () {
+ return (self.recentUploadsRefreshTimer != null);
};
self.stopRefreshingRecentUploads = function () {
clearInterval(self.recentUploadsRefreshTimer);
- self.isRecentUploadsRefreshTimerActive = false;
+ self.recentUploadsRefreshTimer = null;
};
$("#upload_status_all").click(function () {
- if (self.uploadFilter !== "all") {
- self.uploadFilter = "all";
- self.recentUploadsTable.fnPageChange(0).fnDraw();
- }
+ self.uploadFilter = "all";
+ self.recentUploadsTable.fnPageChange(0).fnDraw();
});
$("#upload_status_pending").click(function () {
- if (self.uploadFilter !== "pending") {
- self.uploadFilter = "pending";
- self.recentUploadsTable.fnPageChange(0).fnDraw();
- }
+ self.uploadFilter = "pending";
+ self.recentUploadsTable.fnPageChange(0).fnDraw();
});
$("#upload_status_failed").click(function () {
- if (self.uploadFilter !== "failed") {
- self.uploadFilter = "failed";
- self.recentUploadsTable.fnPageChange(0).fnDraw();
- }
+ self.uploadFilter = "failed";
+ self.recentUploadsTable.fnPageChange(0).fnDraw();
});
//Create the recent uploads table.
diff --git a/airtime_mvc/public/js/airtime/showbuilder/main_builder.js b/airtime_mvc/public/js/airtime/showbuilder/main_builder.js
index 6ea091420..e114d677e 100644
--- a/airtime_mvc/public/js/airtime/showbuilder/main_builder.js
+++ b/airtime_mvc/public/js/airtime/showbuilder/main_builder.js
@@ -137,24 +137,8 @@ AIRTIME = (function(AIRTIME) {
});
$(window).on('hashchange', function() {
- var selected = $("a[href$='"+location.hash+"']"),
- dashboardLink = $(".media_type_selector:first"),
- t;
-
- if (selected.parent().data("selection-id") == AIRTIME.library.MediaTypeEnum.PODCAST) {
- $("#library_display_wrapper").hide();
- $("#podcast_table").show();
-
- t = AIRTIME.library.podcastDataTable;
- } else {
- if (typeof oTable === 'undefined') {
- oTable = AIRTIME.library.libraryDataTable;
- }
-
- $("#library_display_wrapper").show();
- $("#podcast_table").hide();
- t = oTable;
- }
+ var selected = $("a[href$='"+location.hash+"']");
+ var dashboardLink = $(".media_type_selector:first");
dashboardLink.find("a").attr("href", selected.attr("href"));
AIRTIME.library.selectNone();
@@ -162,7 +146,7 @@ AIRTIME = (function(AIRTIME) {
$(this).removeClass("selected");
});
selected.parent().addClass("selected");
- t.fnDraw();
+ oTable.fnDraw();
$("#library_filter").text(selected.text());
// Highlight the dashboard link
dashboardLink.addClass("highlight");