Revert "SAAS-1061 - implement podcast list view skeleton; small bugfixes"
This reverts commit 0fcf6a8dac
.
This commit is contained in:
parent
0fcf6a8dac
commit
893d60ed44
|
@ -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';
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Basic enumeration implementation; from http://stackoverflow.com/questions/254514/php-and-enumerations
|
||||
*
|
||||
* Class Enum
|
||||
*/
|
||||
abstract class Enum {
|
||||
|
||||
const __default = NULL;
|
||||
private static $constCacheArray = NULL;
|
||||
|
||||
private function __construct() {}
|
||||
|
||||
private static function getConstants() {
|
||||
if (self::$constCacheArray == NULL) {
|
||||
self::$constCacheArray = [];
|
||||
}
|
||||
$calledClass = get_called_class();
|
||||
if (!array_key_exists($calledClass, self::$constCacheArray)) {
|
||||
$reflect = new ReflectionClass($calledClass);
|
||||
self::$constCacheArray[$calledClass] = $reflect->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;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
<?php
|
||||
|
||||
require_once "Enum.php";
|
||||
final class MediaType extends Enum {
|
||||
|
||||
const __default = self::FILE;
|
||||
|
||||
const FILE = 1;
|
||||
const PLAYLIST = 2;
|
||||
const BLOCK = 3;
|
||||
const WEBSTREAM = 4;
|
||||
const PODCAST = 5;
|
||||
|
||||
}
|
|
@ -66,21 +66,22 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|||
<a href="#"><?php echo _("Webstream") ?></a>
|
||||
</li>
|
||||
</ul>
|
||||
<a href="/plupload">
|
||||
<a href="/Plupload">
|
||||
<button id="add_media_btn" class="btn btn-small dashboard-btn btn-new">
|
||||
<span><?php echo _("Upload") ?></span>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="media_type_selector top-link" data-selection-id="<?php echo MediaType::getDefault(); ?>">
|
||||
<a href="/showbuilder#">
|
||||
<i class='icon-home icon-white'></i>
|
||||
<?php echo _("Dashboard") ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php $subnavPrefix = "/showbuilder"; require_once APPLICATION_PATH . "views/scripts/partialviews/dashboard-sub-nav.php"; ?>
|
||||
|
||||
<div class="media_type_selector top-link" data-selection-id="1">
|
||||
<a href="/showbuilder#"><i class='icon-home icon-white'></i><?php echo _("Dashboard") ?></a></div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="1">
|
||||
<a href="/showbuilder#tracks"><i class='icon-music icon-white'></i><?php echo _("Tracks") ?></a></div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="2">
|
||||
<a href="/showbuilder#playlists"><i class='icon-list icon-white'></i><?php echo _("Playlists") ?></a></div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="3">
|
||||
<a href="/showbuilder#smart-blocks"><i class='icon-time icon-white'></i><?php echo _("Smart Blocks") ?></a></div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="4">
|
||||
<a href="/showbuilder#webstreams"><i class='icon-random icon-white'></i><?php echo _("Webstreams") ?></a></div>
|
||||
<hr style="margin-left: 5px; margin-right: 5px">
|
||||
<div id="nav">
|
||||
<?php echo $this->navigation()->menu(); ?>
|
||||
|
@ -89,6 +90,7 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|||
<?php
|
||||
$partitions = Application_Model_Systemstatus::GetDiskInfo();
|
||||
$status = new StdClass;
|
||||
$partitions = $partitions;
|
||||
$disk = $partitions[0];
|
||||
$used = $disk->totalSpace-$disk->totalFreeSpace;
|
||||
$total = $disk->totalSpace;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::FILE ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#tracks">
|
||||
<i class='icon-music icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Tracks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::PLAYLIST ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#playlists">
|
||||
<i class='icon-list icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Playlists") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::BLOCK ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#smart-blocks">
|
||||
<i class='icon-time icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Smart Blocks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::WEBSTREAM ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#webstreams">
|
||||
<i class='icon-random icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Webstreams") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="<?php echo MediaType::PODCAST ?>">
|
||||
<a href="<?php echo $subnavPrefix; ?>#podcasts">
|
||||
<i class='icon-headphones icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Podcasts") ?></span>
|
||||
</a>
|
||||
</div>
|
|
@ -1,7 +1,30 @@
|
|||
<div><!-- jQuery UI changes the styling on the outermost div; use a blank div so as not to break the .wrapper styling-->
|
||||
<div class="wrapper">
|
||||
<div id="media_selector_wrapper">
|
||||
<?php $subnavPrefix = ""; require_once APPLICATION_PATH . "views/scripts/partialviews/dashboard-sub-nav.php"; ?>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="1">
|
||||
<a href="#tracks">
|
||||
<i class='icon-music icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Tracks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="2">
|
||||
<a href="#playlists">
|
||||
<i class='icon-list icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Playlists") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="3">
|
||||
<a href="#smart-blocks">
|
||||
<i class='icon-time icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Smart Blocks") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="media_type_selector dashboard_sub_nav" data-selection-id="4">
|
||||
<a href="#webstreams">
|
||||
<i class='icon-random icon-white'></i>
|
||||
<span class="selector-name"><?php echo _("Webstreams") ?></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $this->csrf ?>
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
</div>
|
||||
<div class="outer-datatable-wrapper">
|
||||
<table id="library_display" cellpadding="0" cellspacing="0" class="datatable"></table>
|
||||
<table id="podcast_table" cellpadding="0" cellspacing="0" class="datatable"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -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."
|
||||
}
|
|
@ -716,15 +716,3 @@ th.library_checkbox {
|
|||
background-color: #FF5D1A !important;
|
||||
height: 38px !important;
|
||||
}
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~
|
||||
Podcasts
|
||||
~~~~~~~~~~~~~~~~ */
|
||||
|
||||
#podcast_table {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~
|
||||
END Podcasts
|
||||
~~~~~~~~~~~~~~~~ */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 + ".")
|
||||
+ "<br/>" + $.i18n._(opts.subtext)
|
||||
+ "<br/><a target='_blank' href='" + opts.href + "'>" + $.i18n._("Learn about " + opts.media) + "</a>"
|
||||
);
|
||||
// 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 + ".")
|
||||
+ "<br/>" + $.i18n._(opts.subtext)
|
||||
+ "<br/><a target='_blank' href='" + opts.href + "'>" + $.i18n._("Learn about " + opts.media) + "</a>"
|
||||
);
|
||||
});
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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("<input type='checkbox' name='cb_" + aData.id + "'>");
|
||||
|
||||
$(nRow).find('td.library_actions')
|
||||
.text("...")
|
||||
.on('click', function (e) {
|
||||
$(this).contextMenu({x: $(e.target).offset().left, y: $(e.target).offset().top})
|
||||
}).html("<div class='library_actions_btn'>...</div>");
|
||||
|
||||
// add audio preview image/button
|
||||
if (aData.ftype === "audioclip") {
|
||||
$(nRow).find('td.library_type').html('<img title="' + $.i18n._("Track preview") + '" src="' + baseUrl + 'css/images/icon_audioclip.png">');
|
||||
} else if (aData.ftype === "playlist") {
|
||||
$(nRow).find('td.library_type').html('<img title="' + $.i18n._("Playlist preview") + '" src="' + baseUrl + 'css/images/icon_playlist.png">');
|
||||
} else if (aData.ftype === "block") {
|
||||
$(nRow).find('td.library_type').html('<img title="' + $.i18n._("Smart Block") + '" src="' + baseUrl + 'css/images/icon_smart-block.png">');
|
||||
} else if (aData.ftype === "stream") {
|
||||
$(nRow).find('td.library_type').html('<img title="' + $.i18n._("Webstream preview") + '" src="' + baseUrl + 'css/images/icon_webstream.png">');
|
||||
}
|
||||
|
||||
if (aData.is_scheduled) {
|
||||
$(nRow).find("td.library_is_scheduled").html('<span class="small-icon is_scheduled"></span>');
|
||||
} else if (!aData.is_scheduled) {
|
||||
$(nRow).find("td.library_is_scheduled").html('');
|
||||
}
|
||||
if (aData.is_playlist) {
|
||||
$(nRow).find("td.library_is_playlist").html('<span class="small-icon is_playlist"></span>');
|
||||
} 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("<input type='checkbox' name='cb_"+aData.id+"'>");
|
||||
|
||||
$(nRow).find('td.library_actions')
|
||||
.text("...")
|
||||
.on('click', function(e) {
|
||||
$(this).contextMenu({x: $(e.target).offset().left, y: $(e.target).offset().top})
|
||||
}).html("<div class='library_actions_btn'>...</div>");
|
||||
|
||||
// add audio preview image/button
|
||||
if (aData.ftype === "audioclip") {
|
||||
$(nRow).find('td.library_type').html('<img title="'+$.i18n._("Track preview")+'" src="'+baseUrl+'css/images/icon_audioclip.png">');
|
||||
} else if (aData.ftype === "playlist") {
|
||||
$(nRow).find('td.library_type').html('<img title="'+$.i18n._("Playlist preview")+'" src="'+baseUrl+'css/images/icon_playlist.png">');
|
||||
} else if (aData.ftype === "block") {
|
||||
$(nRow).find('td.library_type').html('<img title="'+$.i18n._("Smart Block")+'" src="'+baseUrl+'css/images/icon_smart-block.png">');
|
||||
} else if (aData.ftype === "stream") {
|
||||
$(nRow).find('td.library_type').html('<img title="'+$.i18n._("Webstream preview")+'" src="'+baseUrl+'css/images/icon_webstream.png">');
|
||||
}
|
||||
|
||||
if (aData.is_scheduled) {
|
||||
$(nRow).find("td.library_is_scheduled").html('<span class="small-icon is_scheduled"></span>');
|
||||
} else if (!aData.is_scheduled) {
|
||||
$(nRow).find("td.library_is_scheduled").html('');
|
||||
}
|
||||
if (aData.is_playlist) {
|
||||
$(nRow).find("td.library_is_playlist").html('<span class="small-icon is_playlist"></span>');
|
||||
} 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);
|
||||
|
|
|
@ -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 += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
|
||||
});
|
||||
},
|
||||
|
||||
UploadProgress: function(up, file) {
|
||||
document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
|
||||
},
|
||||
|
||||
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.
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue