style(legacy): format (#2039)

This commit is contained in:
Jonas L 2022-08-10 13:38:19 +02:00 committed by GitHub
parent 7082c9693d
commit 1550d44ac5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
122 changed files with 18369 additions and 15819 deletions

View File

@ -32,7 +32,7 @@ repos:
hooks:
- id: prettier
files: \.(md|mdx|yml|yaml|js|jsx|ts|tsx|json|css)$
exclude: ^legacy/public
exclude: ^legacy/public(?!/js/airtime)
- repo: https://github.com/asottile/pyupgrade
rev: v2.34.0

View File

@ -21,7 +21,10 @@
$scs = $this->SourceConnectionStatus();
?>
<?php echo $this->partial('partialviews/header.phtml', array(
"live_dj_switch" => $sss['live_dj'], "live_dj_connection" => $scs['live_dj'], "master_dj_switch" => $sss['master_dj'], "master_dj_connection" => $scs['master_dj'],
"live_dj_switch" => $sss['live_dj'],
"live_dj_connection" => $scs['live_dj'],
"master_dj_switch" => $sss['master_dj'],
"master_dj_connection" => $scs['master_dj'],
"scheduled_play_switch" => $sss['scheduled_play']
)) ?>
<?php $partial = array('menu.phtml', 'default');

View File

@ -77,9 +77,11 @@
</div>
<div class="jp-no-solution">
<span><?php echo _("Update Required") ?></span>
<?php sprintf(_("To play the media you will need to either update your browser to a recent version or update your %sFlash plugin%s."),
<?php sprintf(
_("To play the media you will need to either update your browser to a recent version or update your %sFlash plugin%s."),
"<a href='http://get.adobe.com/flashplayer/' target='_blank'>",
"</a>") ?>
"</a>"
) ?>
</div>
</div>
</div>

View File

@ -6,9 +6,11 @@
$productSiteAnchor = "<a href='" . PRODUCT_SITE_URL . "' target='_blank'>"
. PRODUCT_NAME
. "</a>";
echo sprintf(_('%1$s %2$s, the open radio software for scheduling and remote station management.'),
echo sprintf(
_('%1$s %2$s, the open radio software for scheduling and remote station management.'),
$productSiteAnchor,
$this->airtime_version)
$this->airtime_version
)
?>
<br />
<br />© <?php echo (gmdate('Y')); ?>
@ -19,8 +21,12 @@ $companySiteAnchor = "<a href='" . COMPANY_SITE_URL . "' target='_blank'>"
$licenseAnchor = "<a href='" . LICENSE_URL . "' target='_blank'>"
. LICENSE_VERSION
. "</a>";
echo sprintf(_('%1$s %2$s is distributed under the %3$s'),
$companySiteAnchor, PRODUCT_NAME, $licenseAnchor)
echo sprintf(
_('%1$s %2$s is distributed under the %3$s'),
$companySiteAnchor,
PRODUCT_NAME,
$licenseAnchor
)
?>
</p>
</div>

View File

@ -3,11 +3,16 @@
<p><?php echo sprintf(_("Here's how you can get started using %s to automate your broadcasts: "), PRODUCT_NAME) ?></p>
<ol>
<li><h4><?php echo _("Upload audio tracks");?></h4>
<?php echo _("Click the 'Upload' button in the left corner to upload tracks to your library.")?></li>
<li><h4><?php echo _("Schedule a show");?></h4>
<?php echo _("Click on 'Calendar' in the navigation bar on the left. From there click the '+ New Show' button and fill out the required fields.")?></li>
<li><h4><?php echo _("Add tracks to your show"); ?></h4>
<li>
<h4><?php echo _("Upload audio tracks"); ?></h4>
<?php echo _("Click the 'Upload' button in the left corner to upload tracks to your library.") ?>
</li>
<li>
<h4><?php echo _("Schedule a show"); ?></h4>
<?php echo _("Click on 'Calendar' in the navigation bar on the left. From there click the '+ New Show' button and fill out the required fields.") ?>
</li>
<li>
<h4><?php echo _("Add tracks to your show"); ?></h4>
<?php echo _("Click on your show in the calendar and select 'Schedule Show'. In the popup window drag tracks into your show."); ?>
</li>
@ -16,8 +21,11 @@
<p><strong><?php echo _("Now you're good to go!") ?></strong><br />
<?php
$userManualAnchorOpen = "<a href='" . USER_MANUAL_URL . "' target='_blank'>";
echo sprintf(_("For more detailed help, read the %suser manual%s."),
$userManualAnchorOpen, "</a>")
echo sprintf(
_("For more detailed help, read the %suser manual%s."),
$userManualAnchorOpen,
"</a>"
)
?>
</p>

View File

@ -119,6 +119,7 @@
playerhtml5_audio.pause();
togglePlayStopButton();
};
function togglePlayStopButton() {
document.getElementById("play_button").classList.toggle("hide_button");
document.getElementById("stop_button").classList.toggle("hide_button");
@ -145,8 +146,12 @@
//
// The metadata is fetched when the current track is about to end.
function attachStreamMetadataToPlayer() {
$.ajax({url: "<?php echo $this->metadata_api_url?>",
data: {type:"interval",limit:"5"},
$.ajax({
url: "<?php echo $this->metadata_api_url ?>",
data: {
type: "interval",
limit: "5"
},
dataType: "jsonp",
success: function(data) {
@ -201,8 +206,6 @@
}
</script>
<style type="text/css">
@ -212,14 +215,19 @@
not work. It has to be "visible" on the page. As a hacky work around we
set the height and width to 1px so users will not see it.
*/
#html5player_skin{width:0; height:0; overflow: hidden;}
#html5player_skin {
width: 0;
height: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="player" <?php if ($this->player_style == "basic") echo "style='display:block;'"; else echo "style='display:none'"; ?>>
<div id="player" <?php if ($this->player_style == "basic") echo "style='display:block;'";
else echo "style='display:none'"; ?>>
<div class="airtime_player">
<div class="airtime_header">
@ -249,7 +257,8 @@
</div>
</div>
<div id="premium_player" <?php if ($this->player_style == "premium") echo "style='display:block;'"; else echo "style='display:none'"; ?>>
<div id="premium_player" <?php if ($this->player_style == "premium") echo "style='display:block;'";
else echo "style='display:none'"; ?>>
<div class="bottom_bar">
<div class="play cont_btn"></div>
@ -267,4 +276,5 @@
</div>
</body>
</html>

View File

@ -56,10 +56,15 @@
var format_start_date = start_date.getFullYear() + "-" + (start_date.getMonth() + 1) + "-" + start_date.getDate();
// Assign show to correct location
if (importSchedule["weekDays"][format_start_date] !== undefined) {
importSchedule["weekDays"][format_start_date]["shows"].push(
{
"show_start_hour": start_date.toLocaleTimeString([], { hour: 'numeric', minute : 'numeric' }),
"show_end_hour": end_date.toLocaleTimeString([], { hour: 'numeric', minute : 'numeric' }),
importSchedule["weekDays"][format_start_date]["shows"].push({
"show_start_hour": start_date.toLocaleTimeString([], {
hour: 'numeric',
minute: 'numeric'
}),
"show_end_hour": end_date.toLocaleTimeString([], {
hour: 'numeric',
minute: 'numeric'
}),
"name": element.name
});
}
@ -98,7 +103,7 @@
$("#" + tab_id).addClass('active');
});
});
</script>
</body>
</html>

View File

@ -1,10 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo _("An error has occurred.") ?></title>
<?php echo $this->headLink(); ?>
</head>
<body>
<div class="error-content" id="error-400">
<h2><?php echo _("Bad Request!") ?></h2>
@ -14,4 +16,5 @@
</div>
</div>
</body>
</html>

View File

@ -1,10 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo _("An error has occurred.") ?></title>
<?php echo $this->headLink(); ?>
</head>
<body>
<div class="error-content" id="error-403">
<h2><?php echo _("Access Denied!") ?></h2>
@ -14,4 +16,5 @@
</div>
</div>
</body>
</html>

View File

@ -1,10 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo _("An error has occurred.") ?></title>
<?php echo $this->headLink(); ?>
</head>
<body>
<div class="error-content" id="error-404">
<h2><?php echo _("Page not found!") ?></h2>
@ -14,4 +16,5 @@
</div>
</div>
</body>
</html>

View File

@ -1,10 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo _("An error has occurred.") ?></title>
<?php echo $this->headLink(); ?>
</head>
<body>
<div class="error-content" id="error-500">
<h2><?php echo _("Oops!") ?></h2>
@ -14,4 +16,5 @@
</div>
</div>
</body>
</html>

View File

@ -1,11 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN";
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ; "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
<html xmlns=" http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo _("An error has occurred.") ?></title>
<?php echo $this->headLink(); ?>
</head>
<body>
<div class="error-content">
<h2><?php echo $this->escape($this->message) ?></h2>
@ -15,4 +16,5 @@
</div>
</div>
</body>
</html>

View File

@ -1,6 +1,8 @@
<dt id="<?php echo $this->element->getName() ?>-label" class="<?php echo $this->class ?>">
<?php echo $this->formLabel($this->element->getName(),
$this->element->getLabel()) ?>
<?php echo $this->formLabel(
$this->element->getName(),
$this->element->getLabel()
) ?>
</dt>
<dd id="<?php echo $this->element->getName() ?>-element" class="<?php echo $this->class ?>">
<?php echo $this->{$this->element->helper}(

View File

@ -8,7 +8,10 @@
<?php for ($i = 1; $i <= 10; $i++) : ?>
<li <?php if (($i > 1)
&& ($this->element->getElement('add_show_rebroadcast_date_absolute_' . $i)->getValue() == ""
&& $this->element->getElement('add_show_rebroadcast_time_absolute_'.$i)->getValue() == "")){echo 'style=display:none';} ?>>
&& $this->element->getElement('add_show_rebroadcast_time_absolute_' . $i)->getValue() == "")
) {
echo 'style=display:none';
} ?>>
<?php echo $this->element->getElement('add_show_rebroadcast_date_absolute_' . $i) ?>
<span class="inline-text">@</span>
<?php echo $this->element->getElement('add_show_rebroadcast_time_absolute_' . $i) ?>
@ -19,7 +22,8 @@
</a>
<?php endif; ?>
<?php if (($this->element->getElement('add_show_rebroadcast_date_absolute_' . $i)->hasErrors())
|| ($this->element->getElement('add_show_rebroadcast_time_absolute_'.$i)->hasErrors())) : ?>
|| ($this->element->getElement('add_show_rebroadcast_time_absolute_' . $i)->hasErrors())
) : ?>
<ul class='errors'>
<?php $errors = array_merge(
$this->element->getElement('add_show_rebroadcast_date_absolute_' . $i)->getMessages(),

View File

@ -8,7 +8,10 @@
<?php for ($i = 1; $i <= 10; $i++) : ?>
<li <?php if (($i > 1)
&& ($this->element->getElement('add_show_rebroadcast_date_' . $i)->getValue() == ""
&& $this->element->getElement('add_show_rebroadcast_time_'.$i)->getValue() == "")){echo 'style=display:none';} ?>>
&& $this->element->getElement('add_show_rebroadcast_time_' . $i)->getValue() == "")
) {
echo 'style=display:none';
} ?>>
<?php echo $this->element->getElement('add_show_rebroadcast_date_' . $i) ?>
<span class="inline-text">@</span>
<?php echo $this->element->getElement('add_show_rebroadcast_time_' . $i) ?>
@ -19,7 +22,8 @@
</a>
<?php endif; ?>
<?php if (($this->element->getElement('add_show_rebroadcast_date_' . $i)->hasErrors())
|| ($this->element->getElement('add_show_rebroadcast_time_'.$i)->hasErrors())) : ?>
|| ($this->element->getElement('add_show_rebroadcast_time_' . $i)->hasErrors())
) : ?>
<ul class='errors'>
<?php $errors = array_merge(
$this->element->getElement('add_show_rebroadcast_date_' . $i)->getMessages(),

View File

@ -1,6 +1,8 @@
<dt id="<?php echo $this->element->getName() ?>-label" class="<?php echo $this->class ?>">
<?php echo $this->formLabel($this->element->getName(),
$this->element->getLabel()) ?>
<?php echo $this->formLabel(
$this->element->getName(),
$this->element->getLabel()
) ?>
</dt>
<dd id="<?php echo $this->element->getName() ?>-element">
<?php echo $this->{$this->element->helper}(
@ -9,5 +11,7 @@
$this->element->getAttribs()
) ?>
<?php if($this->element->hasErrors()) { echo $this->formErrors($this->element->getMessages());} ?>
<?php if ($this->element->hasErrors()) {
echo $this->formErrors($this->element->getMessages());
} ?>
</dd>

View File

@ -12,7 +12,8 @@
<dt id="add_show_start_date-label">
<label for="add_show_start_date" class="required">
<?php //echo $this->element->getElement('add_show_start_date')->getLabel()?>
<?php //echo $this->element->getElement('add_show_start_date')->getLabel()
?>
</label>
</dt>
<dd>

View File

@ -1,19 +1,15 @@
<style type="text/css">
.player-title {
width: 70px;
border-style: none
float: left;
border-style: none float: left;
}
.preview-label {
line-height: 60px;
border-style: none
float: left;
border-style: none float: left;
font-size: 20px;
color: #fff
}
</style>
<fieldset class="padded">
<dl class="zend_form">
@ -38,7 +34,8 @@
<?php echo $this->element->getElement('player_embed_src')->render(); ?>
<?php //echo $this->element->getElement('player_display_track_metadata'); ?>
<?php //echo $this->element->getElement('player_display_track_metadata');
?>
<table id="player_compatibility_chart" style="text-align:center; position:relative; top:40px;">
<th colspan="5" style="text-align:center"><?php echo _("Stream Compatibility") ?></th>

View File

@ -16,7 +16,8 @@
</ul>
<?php endif; ?>
</dd>
<dd class="block-display selected-item"><strong><?php echo _("Current Import Folder:"); ?></strong><?php $stor = Application_Model_MusicDir::getStorDir(); echo $stor->getDirectory(); ?></dd>
<dd class="block-display selected-item"><strong><?php echo _("Current Import Folder:"); ?></strong><?php $stor = Application_Model_MusicDir::getStorDir();
echo $stor->getDirectory(); ?></dd>
<dt id="watchedFolder-label" class="block-display">
<label class="required" for="watchedFolder"><?php echo $this->element->getElement('watchedFolder')->getLabel() ?></label>

View File

@ -9,8 +9,13 @@
<?php echo $this->element->getElement('sb_show_filter') ?>
<!-- --><?php //if ($this->element->getElement('sb_my_shows')):?>
<!-- <label>--><?php //echo $this->element->getElement('sb_my_shows')->getLabel(); ?><!--</label>-->
<!-- --><?php //echo $this->element->getElement('sb_my_shows'); ?>
<!-- --><?php //endif;?>
<!-- --><?php //if ($this->element->getElement('sb_my_shows')):
?>
<!-- <label>--><?php //echo $this->element->getElement('sb_my_shows')->getLabel();
?>
<!--</label>-->
<!-- --><?php //echo $this->element->getElement('sb_my_shows');
?>
<!-- --><?php //endif;
?>
</div>

View File

@ -21,7 +21,6 @@
} elseif ($j + 1 <= $this->modRowMap[$i] - 1) {
$n = $j + 1;
$nextIndex = $i . "_" . $n;
}
$nextDisabled = $this->element->getElement("sp_criteria_field_" . $nextIndex)->getAttrib('disabled') == 'disabled' ? true : false;
?>
@ -34,7 +33,9 @@
<?php echo $this->element->getElement("sp_criteria_value_" . $i . "_" . $j) ?>
<span class='sp_text_font' id="datetime_select" <?php echo $this->element->getElement("sp_criteria_datetime_select_" . $i . "_" . $j)->getAttrib("disabled") == "disabled" ? 'style="display:none;"' : "" ?>><?php echo $this->element->getElement('sp_criteria_datetime_select_' . $i . "_" . $j) ?><?php echo _(" ago "); ?></span>
<a <?php if ($disabled) { echo 'style=display:none'; } ?> class='modifier_add_link' id='modifier_add_<?php echo $i ?>'>
<a <?php if ($disabled) {
echo 'style=display:none';
} ?> class='modifier_add_link' id='modifier_add_<?php echo $i ?>'>
+ <?php echo (_("New Modifier")); ?>
</a>
@ -93,7 +94,9 @@
foreach ($this->element->getElement('sp_type')->getMultiOptions() as $radio) : ?>
<label class='sp-label' for='sp_type-<?php echo $i ?>'>
<input type="radio" value="<?php echo $i ?>" id="sp_type-<?php echo $i ?>" name="sp_type" <?php if($i == $value){echo 'checked="checked"';}?> ><?php echo $radio ?>
<input type="radio" value="<?php echo $i ?>" id="sp_type-<?php echo $i ?>" name="sp_type" <?php if ($i == $value) {
echo 'checked="checked"';
} ?>><?php echo $radio ?>
</label>
<?php $i = $i + 1; ?>
<?php endforeach; ?>

View File

@ -133,6 +133,7 @@
<script type="text/javascript">
var playlist;
function buildJplayerPlaylist(page, data) {
playlist = new Array();
var media;
@ -292,7 +293,6 @@
}
}
);
</script>
</div>
<?php
@ -354,5 +354,4 @@
});
});
</script>

View File

@ -6,28 +6,94 @@ foreach ($this->md as $key => &$value) {
?>
<?php if ($this->type == "audioclip") : ?>
<table class='library-track-md'>
<tr><td><?php echo _("Title:"); ?></td><td><?php echo ($this->md["MDATA_KEY_TITLE"]);?></td></tr>
<tr><td><?php echo _("Creator:"); ?></td><td><?php echo ($this->md["MDATA_KEY_CREATOR"]);?></td></tr>
<tr><td><?php echo _("Album:"); ?></td><td><?php echo ($this->md["MDATA_KEY_SOURCE"]);?></td></tr>
<tr><td><?php echo _("Track:"); ?></td><td><?php echo ($this->md["MDATA_KEY_TRACKNUMBER"]);?></td></tr>
<tr><td><?php echo _("Length:"); ?></td><td><?php echo ($this->md["MDATA_KEY_DURATION"]);?></td></tr>
<tr><td class='file-md-qtip-nowrap'><?php echo _("Sample Rate:"); ?></td><td><?php echo ($this->md["MDATA_KEY_SAMPLERATE"]);?></td></tr>
<tr><td><?php echo _("Bit Rate:"); ?></td><td><?php echo ($this->md["MDATA_KEY_BITRATE"]);?></td></tr>
<tr><td><?php echo _("Mood:"); ?></td><td><?php echo ($this->md["MDATA_KEY_MOOD"]);?></td></tr>
<tr><td><?php echo _("Genre:"); ?></td><td><?php echo ($this->md["MDATA_KEY_GENRE"]);?></td></tr>
<tr><td><?php echo _("Year:"); ?></td><td><?php echo ($this->md["MDATA_KEY_YEAR"]);?></td></tr>
<tr><td><?php echo _("Label:"); ?></td><td><?php echo ($this->md["MDATA_KEY_LABEL"]);?></td></tr>
<tr><td><?php echo _("BPM:"); ?></td><td><?php echo ($this->md["MDATA_KEY_BPM"]);?></td></tr>
<tr><td><?php echo _("Composer:"); ?></td><td><?php echo ($this->md["MDATA_KEY_COMPOSER"]);?></td></tr>
<tr><td><?php echo _("Conductor:"); ?></td><td><?php echo ($this->md["MDATA_KEY_CONDUCTOR"]);?></td></tr>
<tr><td><?php echo _("Copyright:"); ?></td><td><?php echo ($this->md["MDATA_KEY_COPYRIGHT"]);?></td></tr>
<tr><td><?php echo _("Isrc Number:"); ?></td><td><?php echo ($this->md["MDATA_KEY_ISRC"]);?></td></tr>
<tr><td><?php echo _("Website:"); ?></td><td><?php echo ($this->md["MDATA_KEY_URL"]);?></td></tr>
<tr><td><?php echo _("Artwork:"); ?></td><td><?php echo ($this->md["MDATA_KEY_ARTWORK"]);?></td></tr>
<tr><td><?php echo _("Artwork Data:"); ?></td><td><?php echo ($this->md["MDATA_KEY_ARTWORK_DATA"]);?></td></tr>
<tr><td><?php echo _("Language:"); ?></td><td><?php echo ($this->md["MDATA_KEY_LANGUAGE"]);?></td></tr>
<tr><td><?php echo _("Track Type:"); ?></td><td><?php echo ($this->md["MDATA_KEY_TRACK_TYPE"]);?></td></tr>
<tr><td class='file-md-qtip-nowrap'><?php echo _("File Path:"); ?></td><td><?php echo ($this->md["MDATA_KEY_FILEPATH"]);?></td></tr>
<tr>
<td><?php echo _("Title:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_TITLE"]); ?></td>
</tr>
<tr>
<td><?php echo _("Creator:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_CREATOR"]); ?></td>
</tr>
<tr>
<td><?php echo _("Album:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_SOURCE"]); ?></td>
</tr>
<tr>
<td><?php echo _("Track:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_TRACKNUMBER"]); ?></td>
</tr>
<tr>
<td><?php echo _("Length:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_DURATION"]); ?></td>
</tr>
<tr>
<td class='file-md-qtip-nowrap'><?php echo _("Sample Rate:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_SAMPLERATE"]); ?></td>
</tr>
<tr>
<td><?php echo _("Bit Rate:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_BITRATE"]); ?></td>
</tr>
<tr>
<td><?php echo _("Mood:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_MOOD"]); ?></td>
</tr>
<tr>
<td><?php echo _("Genre:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_GENRE"]); ?></td>
</tr>
<tr>
<td><?php echo _("Year:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_YEAR"]); ?></td>
</tr>
<tr>
<td><?php echo _("Label:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_LABEL"]); ?></td>
</tr>
<tr>
<td><?php echo _("BPM:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_BPM"]); ?></td>
</tr>
<tr>
<td><?php echo _("Composer:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_COMPOSER"]); ?></td>
</tr>
<tr>
<td><?php echo _("Conductor:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_CONDUCTOR"]); ?></td>
</tr>
<tr>
<td><?php echo _("Copyright:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_COPYRIGHT"]); ?></td>
</tr>
<tr>
<td><?php echo _("Isrc Number:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_ISRC"]); ?></td>
</tr>
<tr>
<td><?php echo _("Website:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_URL"]); ?></td>
</tr>
<tr>
<td><?php echo _("Artwork:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_ARTWORK"]); ?></td>
</tr>
<tr>
<td><?php echo _("Artwork Data:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_ARTWORK_DATA"]); ?></td>
</tr>
<tr>
<td><?php echo _("Language:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_LANGUAGE"]); ?></td>
</tr>
<tr>
<td><?php echo _("Track Type:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_TRACK_TYPE"]); ?></td>
</tr>
<tr>
<td class='file-md-qtip-nowrap'><?php echo _("File Path:"); ?></td>
<td><?php echo ($this->md["MDATA_KEY_FILEPATH"]); ?></td>
</tr>
</table>
<?php endif; ?>
@ -82,7 +148,8 @@ foreach ($this->md as $key => &$value) {
<?php if ($row["type"] == 2) {
$bl = new Application_Model_Block($row["item_id"]);
$isStatic = $bl->isStatic(); ?>
<tr class='file-md-qtip-playlist <?php if ($isStatic) echo 'static'; else echo 'dynamic';?>'>
<tr class='file-md-qtip-playlist <?php if ($isStatic) echo 'static';
else echo 'dynamic'; ?>'>
<td class='file-md-qtip-row-width-title file-md-qtip-nowrap'><?php echo $row["track_title"] ?></td>
<td class='file-md-qtip-row-width-artist file-md-qtip-nowrap'><?php echo $row["creator"] ?></td>
<td class='file-md-qtip-row-width-small'><?php echo $bl->getLength(); ?></td>

View File

@ -10,7 +10,9 @@
<h3><?php echo _("Stream Data Collection Status") ?></h3>
<fieldset class="padded stream-setting-global">
<?php foreach ($this->errorStatus as $k => $v) { ?>
<div class='stream-status <?php echo ($v == 'OK')? 'status-good' : 'status-error' ?>'><p><?php echo $k?>: <?php echo $v?></p></div>
<div class='stream-status <?php echo ($v == 'OK') ? 'status-good' : 'status-error' ?>'>
<p><?php echo $k ?>: <?php echo $v ?></p>
</div>
<?php } ?>
</fieldset>
</div>

View File

@ -14,10 +14,13 @@
}
?>
<?php if ($this->navigation()->accept($page)) : ?>
<li class="top <?php if($page->isActive(true)){echo 'active';} ?>">
<li class="top <?php if ($page->isActive(true)) {
echo 'active';
} ?>">
<?php if ($page->hasPages()) : ?>
<a class="top_link" href="<?php echo $page->getHref(); ?>">
<span class="down"><?php echo $page->getClass(); echo _($page->getLabel()); ?></span>
<span class="down"><?php echo $page->getClass();
echo _($page->getLabel()); ?></span>
</a>
<ul class="sub">
@ -29,14 +32,16 @@
<?php if ($this->navigation()->accept($sub)) : ?>
<li>
<a href="<?php echo $sub->getHref(); ?>" <?php echo ($sub->getTarget() != "")?"target=\"".$sub->getTarget()."\"":""; ?>><?php echo $page->getClass(); echo _($sub->getLabel()); ?></a>
<a href="<?php echo $sub->getHref(); ?>" <?php echo ($sub->getTarget() != "") ? "target=\"" . $sub->getTarget() . "\"" : ""; ?>><?php echo $page->getClass();
echo _($sub->getLabel()); ?></a>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<?php else : ?>
<a class="top_link" href="<?php echo $page->getHref(); ?>">
<span><?php echo $page->getClass(); echo _($page->getLabel()); ?></span>
<span><?php echo $page->getClass();
echo _($page->getLabel()); ?></span>
</a>
<?php endif; ?>
</li>

View File

@ -9,7 +9,8 @@
<div class="text-row"><strong><?php echo _("Previous:"); ?></strong> <span id='previous'></span> <span id='prev-length'></span></div>
<div class="now-playing-info song">
<div class="time-flow"><span class="song-length" id="song-length"></span><span class="time-elapsed" id="time-elapsed"></span><span class="time-remaining" id="time-remaining"></span></div>
<span id='current'></span></div>
<span id='current'></span>
</div>
<div class="progressbar">
<div class="progress-song" id="progress-bar" style="width:0%;"></div>
</div>

View File

@ -1,4 +1,8 @@
<?php if ($this->objType == "block") { $displayText = "smart block"; } else { $displayText = $this->escape($this->objType); } ?>
<?php if ($this->objType == "block") {
$displayText = "smart block";
} else {
$displayText = $this->escape($this->objType);
} ?>
<h3>You do not have permission to edit this <?php echo $displayText; ?>.</h3>
<input class="obj_id" type="hidden" value="<?php echo $this->obj->getId(); ?>" />
<input class='obj_type' type='hidden' value="<?php echo $this->escape($this->objType); ?>" />

View File

@ -28,7 +28,8 @@ if (isset($this->obj)) {
</dd>
</dl>
<?php //echo $this->form; ?>
<?php //echo $this->form;
?>
</div>

View File

@ -3,16 +3,12 @@
<input type="button" class="pl-waveform-cues-btn" value="<?php echo _("Show Waveform") ?>"></input>
</dd>
<dt><?php echo _("Cue In: "); ?><span class='spl_cue_hint'><?php echo _("(hh:mm:ss.t)") ?></span></dt>
<dd id="spl_cue_in_<?php echo $this->id; ?>" class="spl_cue_in"
data-cue-in="<?php echo $this->cueIn; ?>"
data-cue-sec="<?php echo $this->cueInSec; ?>">
<dd id="spl_cue_in_<?php echo $this->id; ?>" class="spl_cue_in" data-cue-in="<?php echo $this->cueIn; ?>" data-cue-sec="<?php echo $this->cueInSec; ?>">
<span contenteditable="true" class="spl_text_input"><?php echo $this->cueIn; ?></span>
</dd>
<dd class="edit-error"></dd>
<dt><?php echo _("Cue Out: "); ?><span class='spl_cue_hint'><?php echo _("(hh:mm:ss.t)") ?></span></dt>
<dd id="spl_cue_out_<?php echo $this->id; ?>" class="spl_cue_out"
data-cue-out="<?php echo $this->cueOut; ?>"
data-cue-sec="<?php echo $this->cueOutSec; ?>">
<dd id="spl_cue_out_<?php echo $this->id; ?>" class="spl_cue_out" data-cue-out="<?php echo $this->cueOut; ?>" data-cue-sec="<?php echo $this->cueOutSec; ?>">
<span contenteditable="true" class="spl_text_input"><?php echo $this->cueOut; ?></span>
</dd>
<dd class="edit-error"></dd>

View File

@ -4,26 +4,18 @@
</dd>
<?php if ($this->item1Type == 0) { ?>
<dt><?php echo _("Fade out: "); ?><span class='spl_cue_hint'><?php echo _("(ss.t)") ?></span></dt>
<dd id="spl_fade_out_<?php echo $this->item1; ?>" class="spl_fade_out"
data-fadeout="<?php echo $this->item1Url; ?>"
data-cuein="<?php echo $this->cueIn1; ?>"
data-cueout="<?php echo $this->cueOut1; ?>"
data-length="<?php echo $this->fadeOut; ?>"
data-type="logarithmic"
data-item="<?php echo $this->item1; ?>">
<dd id="spl_fade_out_<?php echo $this->item1; ?>" class="spl_fade_out" data-fadeout="<?php echo $this->item1Url; ?>" data-cuein="<?php echo $this->cueIn1; ?>" data-cueout="<?php echo $this->cueOut1; ?>" data-length="<?php echo $this->fadeOut; ?>" data-type="logarithmic" data-item="<?php echo $this->item1; ?>">
<span contenteditable="true" class="spl_text_input"><?php echo $this->fadeOut; ?></span>
</dd>
<dd class="edit-error"></dd>
<?php }
if (isset($this->item2Url)) { ?>
<dt><?php echo _("Fade in: "); ?><span class='spl_cue_hint'><?php echo _("(ss.t)") ?></span></dt>
<dd id="spl_fade_in_<?php echo $this->item2; ?>" class="spl_fade_in"
data-fadein="<?php echo $this->item2Url; ?>"
data-offset="<?php if ($this->item1Type == 0) { echo $this->offset; } else { echo 0; } ?>"
data-cuein="<?php echo $this->cueIn2; ?>"
data-cueout="<?php echo $this->cueOut2; ?>" data-length="<?php echo $this->fadeIn; ?>"
data-type="logarithmic"
data-item="<?php echo $this->item2; ?>">
<dd id="spl_fade_in_<?php echo $this->item2; ?>" class="spl_fade_in" data-fadein="<?php echo $this->item2Url; ?>" data-offset="<?php if ($this->item1Type == 0) {
echo $this->offset;
} else {
echo 0;
} ?>" data-cuein="<?php echo $this->cueIn2; ?>" data-cueout="<?php echo $this->cueOut2; ?>" data-length="<?php echo $this->fadeIn; ?>" data-type="logarithmic" data-item="<?php echo $this->item2; ?>">
<span contenteditable="true" class="spl_text_input"><?php echo $this->fadeIn; ?></span>
</dd>
<dd class="edit-error"></dd>

View File

@ -72,10 +72,12 @@ if (isset($this->obj)) {
<dl id="spl_editor-main" class="inline-list">
<dt><?php echo _("Fade in: "); ?></dt>
<dd>
<input class="spl_main_fade_in playlist_main_fade_input" value="0" /><span class='spl_cue_hint'> seconds</span></dd>
<input class="spl_main_fade_in playlist_main_fade_input" value="0" /><span class='spl_cue_hint'> seconds</span>
</dd>
<dd class="edit-error"></dd>
<dt><?php echo _("Fade out: "); ?></dt>
<dd><input class="spl_main_fade_out playlist_main_fade_input" value="0" /><span class='spl_cue_hint'> seconds</span></dd></dd>
<dd><input class="spl_main_fade_out playlist_main_fade_input" value="0" /><span class='spl_cue_hint'> seconds</span></dd>
</dd>
<dd class="edit-error"></dd>
</dl>
</div>
@ -91,7 +93,8 @@ if (isset($this->obj)) {
<div class='btn-group pull-right'>
<button class="btn" title='Save smart block&#39s title, description, and criteria' type="button" id="save_button"><?php echo _("Save") ?></button>
</div>
<div id='sp-success-saved' class='success' style='display:none'><span</div>
<div id='sp-success-saved' class='success' style='display:none'>
<span< /div>
</div>
<?php else : ?>

View File

@ -12,8 +12,7 @@ if ($isSmartBlock && $this->showPoolCount) { ?>
</span>
<?php if ($this->poolCount > 0) { ?>
<span class='checked-icon sp-checked-icon' id='sp_pool_count_icon'></span>
<?php }
else { ?>
<?php } else { ?>
<span class='sp-warning-icon' id='sp_pool_count_icon'></span>
<?php } ?>
</div>
@ -22,7 +21,8 @@ if ($isSmartBlock && $this->showPoolCount) { ?>
if (count($items) && ($isSmartBlock || $isPlaylist)) : ?>
<?php $i = 0; ?>
<?php if ($isSmartBlock && !($this->obj->isStatic())) {
echo _("</br>This is only a preview of possible content generated by the smart block based upon the above criteria.");}
echo _("</br>This is only a preview of possible content generated by the smart block based upon the above criteria.");
}
?>
<?php foreach ($items as $item) :
$staticBlock = null;
@ -31,11 +31,9 @@ if ($item['type'] == 2) {
$bl = new Application_Model_Block($item['item_id']);
$staticBlock = $bl->isStatic();
$fileUrl = null;
}
else if ($item['type'] == 1) {
} else if ($item['type'] == 1) {
$fileUrl = null;
}
else if ($item['type'] == 0) {
} else if ($item['type'] == 0) {
$audiofile = Application_Model_StoredFile::RecallById($item['item_id']);
$fileUrl = $audiofile->getFileUrl();
}
@ -104,7 +102,8 @@ if (($i < count($items) -1) && ($items[$i+1]['type'] == 0)) {
'cueInSec' => $item['cueInSec'],
'cueOutSec' => $item['cueOutSec'],
'uri' => $fileUrl,
'origLength' => $item['orig_length'])); ?>
'origLength' => $item['orig_length']
)); ?>
</div>
<?php } ?>

View File

@ -1 +1 @@
<?php echo $this->form; ?>
<?php echo $this->form;

View File

@ -2,7 +2,9 @@
<div>
<h2><?php echo (_("Playout History Templates")); ?></h2>
<div><h4><?php echo _("Log Sheet Templates") ?></h4></div>
<div>
<h4><?php echo _("Log Sheet Templates") ?></h4>
</div>
<button id="new_item_template" class="btn btn-new"><?php echo _("New Log Sheet Template") ?></button>
<ul id="template_list">
<?php if (count($this->template_list) == 0) : ?>
@ -33,7 +35,9 @@
</div>
<br><br>
<div>
<div><h4><?php echo _("File Summary Templates") ?></h4></div>
<div>
<h4><?php echo _("File Summary Templates") ?></h4>
</div>
<button id="new_file_template" class="btn btn-new"><?php echo _("New File Summary Template") ?></button>
<ul id="template_file">
<?php if (count($this->template_file) == 0) : ?>

View File

@ -21,13 +21,7 @@
$usedFileMD[] = $field["name"];
} ?>
<li id="<?php echo "field_".$i?>"
data-id="<?php echo isset($field["id"]) ? $field["id"] : ""; ?>"
data-name="<?php echo $field["name"]?>"
data-label="<?php echo $field["label"]?>"
data-type="<?php echo $field["type"]?>"
data-filemd="<?php echo var_export($field["isFileMd"], true)?>"
class="<?php echo ($field["isFileMd"]) ? 'field_filemd' : 'field_other' ?>">
<li id="<?php echo "field_" . $i ?>" data-id="<?php echo isset($field["id"]) ? $field["id"] : ""; ?>" data-name="<?php echo $field["name"] ?>" data-label="<?php echo $field["label"] ?>" data-type="<?php echo $field["type"] ?>" data-filemd="<?php echo var_export($field["isFileMd"], true) ?>" class="<?php echo ($field["isFileMd"]) ? 'field_filemd' : 'field_other' ?>">
<span><?php echo $field["label"] ?></span>
<span><?php echo $field["type"] ?></span>
<?php if (!in_array($field["name"], $this->required_fields)) : ?>
@ -52,10 +46,7 @@
continue;
} ?>
<li id="<?php echo "md_".$md["name"]?>"
data-name="<?php echo $md["name"]?>"
data-type="<?php echo $md["type"]?>"
data-label="<?php echo $md["label"]?>">
<li id="<?php echo "md_" . $md["name"] ?>" data-name="<?php echo $md["name"] ?>" data-type="<?php echo $md["type"] ?>" data-label="<?php echo $md["label"] ?>">
<?php echo $md["label"] ?>
<a class="field_add" href="#"><i class="icon icon-plus"></i></a>
</li>

View File

@ -1,4 +1,5 @@
<?php
/**
* Created by PhpStorm.
* User: asantoni

View File

@ -1,4 +1,5 @@
<?php
/**
* Created by PhpStorm.
* User: asantoni

View File

@ -114,10 +114,14 @@
</div>
<p id="station_podcast_help_text">
<?php echo(sprintf(_("For detailed information on what these metadata fields mean, please see the %sRSS specification%s
<?php echo (sprintf(
_("For detailed information on what these metadata fields mean, please see the %sRSS specification%s
or %sApple's podcasting documentation%s."),
'<a href="http://cyber.law.harvard.edu/rss/rss.html#requiredChannelElements">', '</a>',
'<a target="_blank" href="http://www.apple.com/ca/itunes/podcasts/specs.html">', "</a>")); ?>
'<a href="http://cyber.law.harvard.edu/rss/rss.html#requiredChannelElements">',
'</a>',
'<a target="_blank" href="http://www.apple.com/ca/itunes/podcasts/specs.html">',
"</a>"
)); ?>
</p>
</form>

View File

@ -1,3 +1,2 @@
<?php
echo $this->entries;
?>

View File

@ -1,3 +1,2 @@
<?php
echo $this->data;
?>

View File

@ -1,4 +1,3 @@
<table id="schedule_block_table">
<tr>
<td>

View File

@ -11,7 +11,11 @@
</tr>
<?php $i = 0; ?>
<?php foreach ($this->showContent as $row) : ?>
<tr id="au_<?php echo $row["item_id"] ?>" class="<?php if($i&1){echo "even";}else{echo "odd";}?>">
<tr id="au_<?php echo $row["item_id"] ?>" class="<?php if ($i & 1) {
echo "even";
} else {
echo "odd";
} ?>">
<td><?php echo $row["starts"] ?></td>
<td><?php echo $this->escape($row["track_title"]) ?></td>
<td><?php echo $this->escape($row["creator"]) ?></td>

View File

@ -1,7 +1,9 @@
<div><!-- jQuery UI changes the styling on the outermost div; use a blank div so as not to break the .wrapper styling-->
<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"; ?>
<?php $subnavPrefix = "";
require_once APPLICATION_PATH . "/views/scripts/partialviews/dashboard-sub-nav.php"; ?>
</div>
<?php echo $this->csrf ?>

View File

@ -41,7 +41,8 @@
<td class="description">
<?php echo _("PDO and PostgreSQL libraries") ?>
</td>
<td class="solution <?php if ($postgres) {echo 'check';?>">
<td class="solution <?php if ($postgres) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -58,7 +59,8 @@
<td class="description">
<?php echo _("Database configuration for LibreTime") ?>
</td>
<td class="solution <?php if ($database) {echo 'check';?>">
<td class="solution <?php if ($database) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -77,7 +79,8 @@
<td class="description">
<?php echo _("RabbitMQ configuration for LibreTime") ?>
</td>
<td class="solution <?php if ($rabbitmq) {echo 'check';?>">
<td class="solution <?php if ($rabbitmq) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -98,7 +101,8 @@
<td class="description">
<?php echo _("LibreTime media analyzer service") ?>
</td>
<td class="solution <?php if ($analyzer) {echo 'check';?>">
<td class="solution <?php if ($analyzer) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -118,7 +122,8 @@
<td class="description">
<?php echo _("LibreTime playout service") ?>
</td>
<td class="solution <?php if ($pypo) {echo 'check';?>">
<td class="solution <?php if ($pypo) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -138,7 +143,8 @@
<td class="description">
<?php echo _("LibreTime liquidsoap service") ?>
</td>
<td class="solution <?php if ($liquidsoap) {echo 'check';?>" >
<td class="solution <?php if ($liquidsoap) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -158,7 +164,8 @@
<td class="description">
<?php echo _("LibreTime Celery Task service") ?>
</td>
<td class="solution <?php if ($celery) {echo 'check';?>" >
<td class="solution <?php if ($celery) {
echo 'check'; ?>">
<?php
} else {
?>">
@ -178,7 +185,8 @@
<td class="description">
<?php echo _("LibreTime API service") ?>
</td>
<td class="solution <?php if ($api) {echo 'check';?>" >
<td class="solution <?php if ($api) {
echo 'check'; ?>">
<?php
} else {
?>">

View File

@ -1,4 +1,3 @@
<div class="ui-widget prefpanel clearfix padded-strong tracktype-management">
<h2><?php echo _("Manage Track Types") ?></h2>

View File

@ -1,3 +1,2 @@
<?php
echo $this->entries;
?>

View File

@ -1,3 +1,2 @@
<?php
echo $this->entries;
?>

View File

@ -1,3 +1,2 @@
<?php
echo $this->entries;
?>

View File

@ -1,3 +1,2 @@
<?php
echo $this->entries;
?>

View File

@ -1,6 +1,7 @@
<?php if (isset($this->obj)) : ?>
<input class="obj_id" type="hidden" value="<?php echo $this->obj->getId(); ?>" />
<input class="obj_lastMod" type="hidden" value="<?php echo "1";//$this->obj->getLastModified('U'); ?>"/>
<input class="obj_lastMod" type="hidden" value="<?php echo "1"; //$this->obj->getLastModified('U');
?>" />
<input class="obj_type" type="hidden" value="webstream" />
<div class="status" style="display:none;"></div>

View File

@ -1,5 +1,5 @@
$(document).ready(function () {
$.ajaxSetup({
cache: false
cache: false,
});
});

View File

@ -8,29 +8,30 @@ var URL_BAR_HEIGHT = 32;
*or a playlist or a show.
*/
$(document).ready(function () {
$.jPlayer.timeFormat.showHour = true;
var audioUri = $('.audioUri').text();
var audioMime = $('.audioMime').text();
var playlistID = $('.playlistID').text();
var playlistIndex = $('.playlistIndex').text();
var showID = $('.showID').text();
var showIndex = $('.showIndex').text();
var blockId = $('.blockId').text();
var blockIndex = $('.blockIndex').text();
var audioUri = $(".audioUri").text();
var audioMime = $(".audioMime").text();
var playlistID = $(".playlistID").text();
var playlistIndex = $(".playlistIndex").text();
var showID = $(".showID").text();
var showIndex = $(".showIndex").text();
var blockId = $(".blockId").text();
var blockIndex = $(".blockIndex").text();
_playlist_jplayer = new jPlayerPlaylist({
_playlist_jplayer = new jPlayerPlaylist(
{
jPlayer: "#jquery_jplayer_1",
cssSelectorAncestor: "#jp_container_1"
},[], //array of songs will be filled with below's json call
cssSelectorAncestor: "#jp_container_1",
},
[], //array of songs will be filled with below's json call
{
swfPath: baseUrl + "js/jplayer",
supplied: "oga, mp3, m4v, m4a, wav",
size: {
width: "0px",
height: "0px",
cssClass: "jp-video-270p"
cssClass: "jp-video-270p",
},
playlistOptions: {
autoPlay: false,
@ -40,7 +41,7 @@ $(document).ready(function(){
displayTime: 0,
addTime: 0,
removeTime: 0,
shuffleTime: 0
shuffleTime: 0,
},
ready: function () {
if (playlistID != "" && playlistID !== "") {
@ -52,8 +53,9 @@ $(document).ready(function(){
} else if (blockId != "" && blockIndex != "") {
playBlock(blockId, blockIndex);
}
},
}
});
);
$("#jp_container_1").on("mouseenter", "ul.jp-controls li", function (ev) {
$(this).addClass("ui-state-hover");
@ -62,7 +64,6 @@ $(document).ready(function(){
$("#jp_container_1").on("mouseleave", "ul.jp-controls li", function (ev) {
$(this).removeClass("ui-state-hover");
});
});
/**
@ -72,23 +73,28 @@ $(document).ready(function(){
* - Select the element played from and start playing. If playlist is null then start at index 0.
**/
function playAllPlaylist(p_playlistID, p_playlistIndex) {
var viewsPlaylistID = $('.playlistID').text();
var viewsPlaylistID = $(".playlistID").text();
if (_idToPostionLookUp !== undefined && viewsPlaylistID == p_playlistID) {
play(p_playlistIndex);
} else {
buildplaylist(baseUrl+"audiopreview/get-playlist/playlistID/"+p_playlistID, p_playlistIndex);
buildplaylist(
baseUrl + "audiopreview/get-playlist/playlistID/" + p_playlistID,
p_playlistIndex
);
}
}
function playBlock(p_blockId, p_blockIndex)
{
var viewsBlockId = $('.blockId').text();
function playBlock(p_blockId, p_blockIndex) {
var viewsBlockId = $(".blockId").text();
if (_idToPostionLookUp !== undefined && viewsBlockId == p_blockId) {
play(p_blockIndex);
} else {
buildplaylist(baseUrl+"audiopreview/get-block/blockId/"+p_blockId, p_blockIndex);
buildplaylist(
baseUrl + "audiopreview/get-block/blockId/" + p_blockId,
p_blockIndex
);
}
}
@ -101,12 +107,14 @@ function playBlock(p_blockId, p_blockIndex)
* and call the controller.
**/
function playAllShow(p_showID, p_index) {
var viewsShowID = $('.showID').text();
var viewsShowID = $(".showID").text();
if (_idToPostionLookUp !== undefined && viewsShowID == p_showID) {
play(p_index);
} else {
buildplaylist(baseUrl+"audiopreview/get-show/showID/"+p_showID, p_index);
buildplaylist(
baseUrl + "audiopreview/get-show/showID/" + p_showID,
p_index
);
}
}
@ -119,7 +127,8 @@ function playAllShow(p_showID, p_index) {
*/
function buildplaylist(p_url, p_playIndex) {
_idToPostionLookUp = Array();
$.getJSON(p_url, function(data){ // get the JSON array produced by my PHP
$.getJSON(p_url, function (data) {
// get the JSON array produced by my PHP
var myPlaylist = new Array();
var media;
var index;
@ -127,26 +136,30 @@ function buildplaylist(p_url, p_playIndex) {
var skipped = 0;
for (index in data) {
if (data[index]['type'] == 0) {
if (data[index]['element_mp3'] != undefined){
media = {title: data[index]['element_title'],
artist: data[index]['element_artist'],
mp3:data[index]['uri']
if (data[index]["type"] == 0) {
if (data[index]["element_mp3"] != undefined) {
media = {
title: data[index]["element_title"],
artist: data[index]["element_artist"],
mp3: data[index]["uri"],
};
} else if (data[index]['element_oga'] != undefined) {
media = {title: data[index]['element_title'],
artist: data[index]['element_artist'],
oga:data[index]['uri']
} else if (data[index]["element_oga"] != undefined) {
media = {
title: data[index]["element_title"],
artist: data[index]["element_artist"],
oga: data[index]["uri"],
};
} else if (data[index]['element_m4a'] != undefined) {
media = {title: data[index]['element_title'],
artist: data[index]['element_artist'],
m4a:data[index]['uri']
} else if (data[index]["element_m4a"] != undefined) {
media = {
title: data[index]["element_title"],
artist: data[index]["element_artist"],
m4a: data[index]["uri"],
};
} else if (data[index]['element_wav'] != undefined) {
media = {title: data[index]['element_title'],
artist: data[index]['element_artist'],
wav:data[index]['uri']
} else if (data[index]["element_wav"] != undefined) {
media = {
title: data[index]["element_title"],
artist: data[index]["element_artist"],
wav: data[index]["uri"],
};
} else {
// skip this track since it's not supported
@ -154,8 +167,8 @@ function buildplaylist(p_url, p_playIndex) {
skipped++;
continue;
}
} else if (data[index]['type'] == 1) {
var mime = data[index]['mime'];
} else if (data[index]["type"] == 1) {
var mime = data[index]["mime"];
if (mime.search(/mp3/i) > 0 || mime.search(/mpeg/i) > 0) {
key = "mp3";
} else if (mime.search(/og(g|a)/i) > 0 || mime.search(/vorbis/i) > 0) {
@ -167,13 +180,14 @@ function buildplaylist(p_url, p_playIndex) {
}
if (key) {
media = {title: data[index]['element_title'],
artist: data[index]['element_artist']
media = {
title: data[index]["element_title"],
artist: data[index]["element_artist"],
};
media[key] = data[index]['uri']
media[key] = data[index]["uri"];
}
}
if (media && isAudioSupported(data[index]['mime'])) {
if (media && isAudioSupported(data[index]["mime"])) {
// javascript doesn't support associative array with numeric key
// so we need to remove the gap if we skip any of tracks due to
// browser incompatibility.
@ -181,7 +195,7 @@ function buildplaylist(p_url, p_playIndex) {
}
// we should create a map according to the new position in the
// player itself total is the index on the player
_idToPostionLookUp[data[index]['element_id']] = total;
_idToPostionLookUp[data[index]["element_id"]] = total;
total++;
}
_playlist_jplayer.setPlaylist(myPlaylist);
@ -192,7 +206,10 @@ function buildplaylist(p_url, p_playIndex) {
var container = $("#jp_container_1");
// Add 2px to account for borders
window.resizeTo(container.width() + 2, container.height() + URL_BAR_HEIGHT + 2);
window.resizeTo(
container.width() + 2,
container.height() + URL_BAR_HEIGHT + 2
);
});
}
@ -203,7 +220,7 @@ function buildplaylist(p_url, p_playIndex) {
function play(p_playlistIndex) {
playlistIndex = _idToPostionLookUp[p_playlistIndex];
if (playlistIndex == undefined) {
playlistIndex = 0
playlistIndex = 0;
}
//_playlist_jplayer.select(playlistIndex);
_playlist_jplayer.play(playlistIndex);
@ -229,8 +246,15 @@ function playOne(uri, mime) {
}
if (key) {
media = {title: $('.audioFileTitle').text() != 'null' ?$('.audioFileTitle').text():"",
artist: $('.audioFileArtist').text() != 'null' ?$('.audioFileArtist').text():""
media = {
title:
$(".audioFileTitle").text() != "null"
? $(".audioFileTitle").text()
: "",
artist:
$(".audioFileArtist").text() != "null"
? $(".audioFileArtist").text()
: "",
};
media[key] = uri;
}
@ -244,5 +268,8 @@ function playOne(uri, mime) {
var container = $("#jp_container_1");
// Add 2px to account for borders
window.resizeTo(container.width() + 2, container.height() + URL_BAR_HEIGHT + 2);
window.resizeTo(
container.width() + 2,
container.height() + URL_BAR_HEIGHT + 2
);
}

View File

@ -1,5 +1,7 @@
var AIRTIME = (function (AIRTIME) {
var mod, DEFAULT_CLASS = 'ui-button ui-state-default', DISABLED_CLASS = 'ui-state-disabled';
var mod,
DEFAULT_CLASS = "ui-button ui-state-default",
DISABLED_CLASS = "ui-state-disabled";
if (AIRTIME.button === undefined) {
AIRTIME.button = {};
@ -28,7 +30,7 @@ var AIRTIME = (function(AIRTIME) {
if (button.hasClass(DISABLED_CLASS)) {
button.removeClass(DISABLED_CLASS);
button.removeAttr('disabled');
button.removeAttr("disabled");
}
};
@ -41,10 +43,9 @@ var AIRTIME = (function(AIRTIME) {
if (!button.hasClass(DISABLED_CLASS)) {
button.addClass(DISABLED_CLASS);
button.attr('disabled', 'disabled');
button.attr("disabled", "disabled");
}
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});

View File

@ -1,8 +1,7 @@
function isAudioSupported(mime) {
var audio = new Audio();
if ((typeof mime) !== "string" || (mime === null)) {
if (typeof mime !== "string" || mime === null) {
return false;
}
@ -17,8 +16,13 @@ function isAudioSupported(mime){
//file is an mp3 and flash is installed (jPlayer will fall back to flash to play mp3s).
//Note that checking the navigator.mimeTypes value does not work for IE7, but the alternative
//is adding a javascript library to do the work for you, which seems like overkill....
return (!!audio.canPlayType && audio.canPlayType(bMime) != "") ||
(mime.indexOf("mp3") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) ||
(mime.indexOf("mp4") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) ||
(mime.indexOf("mpeg") != -1 && navigator.mimeTypes ["application/x-shockwave-flash"] != undefined);
return (
(!!audio.canPlayType && audio.canPlayType(bMime) != "") ||
(mime.indexOf("mp3") != -1 &&
navigator.mimeTypes["application/x-shockwave-flash"] != undefined) ||
(mime.indexOf("mp4") != -1 &&
navigator.mimeTypes["application/x-shockwave-flash"] != undefined) ||
(mime.indexOf("mpeg") != -1 &&
navigator.mimeTypes["application/x-shockwave-flash"] != undefined)
);
}

View File

@ -2,7 +2,6 @@ var previewWidth = 482,
previewHeight = 110;
$(document).ready(function () {
/* Removed as this is now (hopefully) unnecessary */
//$("#Panel").stickyPanel({
// topPadding: 1,
@ -11,7 +10,9 @@ $(document).ready(function() {
//});
//this statement tells the browser to fade out any success message after 5 seconds
setTimeout(function(){$(".success").fadeOut("slow")}, 5000);
setTimeout(function () {
$(".success").fadeOut("slow");
}, 5000);
});
/*
@ -30,7 +31,7 @@ var i18n_months = [
$.i18n._("September"),
$.i18n._("October"),
$.i18n._("November"),
$.i18n._("December")
$.i18n._("December"),
];
var i18n_months_short = [
@ -45,7 +46,7 @@ var i18n_months_short = [
$.i18n._("Sep"),
$.i18n._("Oct"),
$.i18n._("Nov"),
$.i18n._("Dec")
$.i18n._("Dec"),
];
var i18n_days_short = [
@ -55,7 +56,7 @@ var i18n_days_short = [
$.i18n._("We"),
$.i18n._("Th"),
$.i18n._("Fr"),
$.i18n._("Sa")
$.i18n._("Sa"),
];
var HTTPMethods = Object.freeze({
@ -64,7 +65,7 @@ var HTTPMethods = Object.freeze({
PUT: "PUT",
PATCH: "PATCH",
DELETE: "DELETE",
OPTIONS: "OPTIONS"
OPTIONS: "OPTIONS",
});
var dateStartId = "#sb_date_start",
@ -73,25 +74,24 @@ var dateStartId = "#sb_date_start",
timeEndId = "#sb_time_end";
function getDatatablesStrings(overrideDict) {
var dict = {
"sEmptyTable": $.i18n._("No data available in table"),
"sInfo": $.i18n._("Showing _START_ to _END_ of _TOTAL_ entries"),
"sInfoEmpty": $.i18n._("Showing 0 to 0 of 0 entries"),
"sInfoFiltered": "", // $.i18n._("(filtered from _MAX_ total entries)"),
"sInfoPostFix": $.i18n._(""),
"sInfoThousands": $.i18n._(","),
"sLengthMenu": $.i18n._("Show _MENU_"),
"sLoadingRecords": $.i18n._("Loading..."),
sEmptyTable: $.i18n._("No data available in table"),
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ entries"),
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 entries"),
sInfoFiltered: "", // $.i18n._("(filtered from _MAX_ total entries)"),
sInfoPostFix: $.i18n._(""),
sInfoThousands: $.i18n._(","),
sLengthMenu: $.i18n._("Show _MENU_"),
sLoadingRecords: $.i18n._("Loading..."),
//"sProcessing": $.i18n._("Processing..."),
"sProcessing": $.i18n._(""),
"sSearch": $.i18n._(""),
"sZeroRecords": $.i18n._("No matching records found"),
"oPaginate": {
"sFirst": "&laquo;",
"sLast": "&raquo;",
"sNext": "&rsaquo;",
"sPrevious": "&lsaquo;"
sProcessing: $.i18n._(""),
sSearch: $.i18n._(""),
sZeroRecords: $.i18n._("No matching records found"),
oPaginate: {
sFirst: "&laquo;",
sLast: "&raquo;",
sNext: "&rsaquo;",
sPrevious: "&lsaquo;",
},
//"oPaginate": {
// "sFirst": $.i18n._("First"),
@ -99,10 +99,10 @@ function getDatatablesStrings(overrideDict) {
// "sNext": $.i18n._("Next"),
// "sPrevious": $.i18n._("Previous")
//},
"oAria": {
"sSortAscending": $.i18n._(": activate to sort column ascending"),
"sSortDescending": $.i18n._(": activate to sort column descending")
}
oAria: {
sSortAscending: $.i18n._(": activate to sort column ascending"),
sSortDescending: $.i18n._(": activate to sort column descending"),
},
};
return $.extend({}, dict, overrideDict);
@ -131,10 +131,10 @@ var _preview_window = null;
function openAudioPreview(p_event) {
p_event.stopPropagation();
var audioFileID = $(this).attr('audioFile');
var objId = $('.obj_id:first').attr('value');
var objType = $('.obj_type:first').attr('value');
var playIndex = $(this).parent().parent().attr('id');
var audioFileID = $(this).attr("audioFile");
var objId = $(".obj_id:first").attr("value");
var objType = $(".obj_type:first").attr("value");
var playIndex = $(this).parent().parent().attr("id");
playIndex = playIndex.substring(4); //remove the spl_
if (objType == "playlist") {
@ -148,7 +148,11 @@ function open_audio_preview(type, id) {
// The reason that we need to encode artist and title string is that
// sometime they contain '/' or '\' and apache reject %2f or %5f
// so the work around is to encode it twice.
openPreviewWindow(baseUrl+'audiopreview/audio-preview/audioFileID/'+id+'/type/'+type, previewWidth, previewHeight);
openPreviewWindow(
baseUrl + "audiopreview/audio-preview/audioFileID/" + id + "/type/" + type,
previewWidth,
previewHeight
);
_preview_window.focus();
}
@ -159,25 +163,42 @@ function open_audio_preview(type, id) {
*given index.
*/
function open_playlist_preview(p_playlistID, p_playlistIndex) {
if (p_playlistIndex == undefined) //Use a resonable default.
if (p_playlistIndex == undefined)
//Use a resonable default.
p_playlistIndex = 0;
if (_preview_window != null && !_preview_window.closed)
_preview_window.playAllPlaylist(p_playlistID, p_playlistIndex);
else
openPreviewWindow(baseUrl+'audiopreview/playlist-preview/playlistIndex/'+p_playlistIndex+'/playlistID/'+p_playlistID, previewWidth, previewHeight);
openPreviewWindow(
baseUrl +
"audiopreview/playlist-preview/playlistIndex/" +
p_playlistIndex +
"/playlistID/" +
p_playlistID,
previewWidth,
previewHeight
);
_preview_window.focus();
}
function open_block_preview(p_blockId, p_blockIndex) {
if (p_blockIndex == undefined) //Use a resonable default.
if (p_blockIndex == undefined)
//Use a resonable default.
p_blockIndex = 0;
if (_preview_window != null && !_preview_window.closed)
_preview_window.playBlock(p_blockId, p_blockIndex);
else
openPreviewWindow(baseUrl+'audiopreview/block-preview/blockIndex/'+p_blockIndex+'/blockId/'+p_blockId, previewWidth, previewHeight);
openPreviewWindow(
baseUrl +
"audiopreview/block-preview/blockIndex/" +
p_blockIndex +
"/blockId/" +
p_blockId,
previewWidth,
previewHeight
);
_preview_window.focus();
}
@ -191,61 +212,80 @@ function open_show_preview(p_showID, p_showIndex) {
if (_preview_window != null && !_preview_window.closed)
_preview_window.playAllShow(p_showID, p_showIndex);
else
openPreviewWindow(baseUrl+'audiopreview/show-preview/showID/'+p_showID+'/showIndex/'+p_showIndex, previewWidth, previewHeight);
openPreviewWindow(
baseUrl +
"audiopreview/show-preview/showID/" +
p_showID +
"/showIndex/" +
p_showIndex,
previewWidth,
previewHeight
);
_preview_window.focus();
}
function openPreviewWindow(url, w, h) {
var dim = (w && h) ? 'width=' + w + ',height=' + h + ',' : '';
var dim = w && h ? "width=" + w + ",height=" + h + "," : "";
// Hardcoding this here is kinda gross, but the alternatives aren't much better...
_preview_window = window.open(url, $.i18n._('Audio Player'), dim + 'scrollbars=yes');
_preview_window = window.open(
url,
$.i18n._("Audio Player"),
dim + "scrollbars=yes"
);
return false;
}
function validateTimeRange() {
var oRange,
inputs = $('.sb-timerange > input'),
start, end;
inputs = $(".sb-timerange > input"),
start,
end;
oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId);
oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
start = oRange.start;
end = oRange.end;
if (end >= start) {
inputs.removeClass('error');
inputs.removeClass("error");
} else {
if (!inputs.hasClass('error')) {
inputs.addClass('error');
if (!inputs.hasClass("error")) {
inputs.addClass("error");
}
}
return {
start: start,
end: end,
isValid: end >= start
isValid: end >= start,
};
}
// validate uploaded images
function validateImage(img, el) {
// remove any existing error messages
if ($("#img-err")) { $("#img-err").remove(); }
if ($("#img-err")) {
$("#img-err").remove();
}
if (img.size > 2048000) { // 2MB - pull this from somewhere instead?
if (img.size > 2048000) {
// 2MB - pull this from somewhere instead?
// hack way of inserting an error message
var err = $.i18n._("Selected file is too large");
el.parent().after(
"<ul id='img-err' class='errors'>" +
"<li>" + err + "</li>" +
"</ul>");
"<ul id='img-err' class='errors'>" + "<li>" + err + "</li>" + "</ul>"
);
return false;
} else if (validateMimeType(img.type) < 0) {
var err = $.i18n._("File format is not supported");
el.parent().after(
"<ul id='img-err' class='errors'>" +
"<li>" + err + "</li>" +
"</ul>");
"<ul id='img-err' class='errors'>" + "<li>" + err + "</li>" + "</ul>"
);
return false;
}
return true;
@ -254,9 +294,9 @@ function validateImage(img, el) {
// validate image mime type
function validateMimeType(mime) {
var extensions = [
'image/jpeg',
'image/png',
'image/gif'
"image/jpeg",
"image/png",
"image/gif",
// BMP?
];
return $.inArray(mime, extensions);
@ -267,9 +307,11 @@ function pad(number, length) {
}
function removeSuccessMsg() {
var $status = $('.success');
var $status = $(".success");
$status.fadeOut("slow", function(){$status.empty()});
$status.fadeOut("slow", function () {
$status.empty();
});
}
function hideHint(h) {
@ -282,8 +324,11 @@ function showHint(h) {
function getUsabilityHint() {
var pathname = window.location.pathname;
$.getJSON(baseUrl + "api/get-usability-hint", {"format": "json", "userPath": pathname}, function(json) {
var $hint_div = $('.usability_hint');
$.getJSON(
baseUrl + "api/get-usability-hint",
{ format: "json", userPath: pathname },
function (json) {
var $hint_div = $(".usability_hint");
var current_hint = $hint_div.html();
if (json === "") {
// there are no more hints to display to the user
@ -301,7 +346,8 @@ function getUsabilityHint() {
showHint($hint_div);
}
}
});
}
);
}
// TODO: build this out so we can use it as a fallback in fail cases
@ -314,7 +360,7 @@ function buildErrorDialog(message) {
resizable: false,
modal: true,
width: "auto",
height: "auto"
height: "auto",
});
}
@ -340,17 +386,26 @@ jQuery.fn.addTitles = function(selector) {
jQuery.fn.scrollText = function (selector) {
this.each(function () {
$(this).on("mouseenter", selector, function () {
var sw = $(this)[0].scrollWidth - parseFloat($(this).css("textIndent")), iw = $(this).innerWidth();
var sw = $(this)[0].scrollWidth - parseFloat($(this).css("textIndent")),
iw = $(this).innerWidth();
if (sw > iw) {
$(this).stop().animate({
textIndent: "-" + (sw + 1 - iw) + "px"
}, sw * 8);
$(this)
.stop()
.animate(
{
textIndent: "-" + (sw + 1 - iw) + "px",
},
sw * 8
);
}
});
$(this).on("mouseleave", selector, function () {
$(this).stop().animate({
textIndent: "0"
}, 500);
$(this).stop().animate(
{
textIndent: "0",
},
500
);
});
});

View File

@ -1,21 +1,18 @@
$(document).ready(function () {
$("#facebook-login").click(function () {
AIRTIME.facebook.promptForFacebookPage();
});
});
window.fbAsyncInit = function () {
FB.init({
appId: FACEBOOK_APP_ID,
xfbml: true,
version : 'v2.4'
version: "v2.4",
});
};
var AIRTIME = (function (AIRTIME) {
//Module initialization
if (AIRTIME.facebook === undefined) {
AIRTIME.facebook = {};
@ -24,7 +21,8 @@ var AIRTIME = (function(AIRTIME) {
var mod = AIRTIME.facebook;
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
var js,
fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
@ -32,47 +30,62 @@ var AIRTIME = (function(AIRTIME) {
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
})(document, "script", "facebook-jssdk");
mod.promptForFacebookPage = function () {
FB.login(function (response) {
FB.login(
function (response) {
if (response.authResponse) {
mod.getPagesOwnedByUser(response.authResponse.userID, response.authResponse.accessToken);
mod.getPagesOwnedByUser(
response.authResponse.userID,
response.authResponse.accessToken
);
mod.addPageTab();
} else {
console.log('Authorization failed.');
}
}, {scope: 'manage_pages'});
console.log("Authorization failed.");
}
},
{ scope: "manage_pages" }
);
};
mod.getPagesOwnedByUser = function (userId, accessToken) {
FB.api('/' + userId + '/accounts', function (response) {
FB.api(
"/" + userId + "/accounts",
function (response) {
console.log(response);
}, {access_token: accessToken});
}
},
{ access_token: accessToken }
);
};
mod.addPageTab = function () {
FB.ui(
{ method: 'pagetab' },
{ method: "pagetab" },
function (resp) {
console.log("response:");
console.log(resp);
var pageIdList = [];
var tabs = resp["tabs_added"];
if ((tabs != undefined) && (Object.keys(tabs).length > 0)) {
if (tabs != undefined && Object.keys(tabs).length > 0) {
for (var pageId in tabs) {
pageIdList.push(pageId);
}
//POST these back to Airtime, which will then proxy it over to our social app. (multiple requests from Airtime)
$.post('facebook-tab-success', { "pages" : JSON.stringify(pageIdList) }, function() {
$.post(
"facebook-tab-success",
{ pages: JSON.stringify(pageIdList) },
function () {
alert("Successfully added to your Facebook page!");
}).done(function() {
}).fail(function() {
alert("Sorry, an error occurred and we were unable to add the widget to your Facebook page.");
}
)
.done(function () {})
.fail(function () {
alert(
"Sorry, an error occurred and we were unable to add the widget to your Facebook page."
);
});
}
},
@ -81,8 +94,7 @@ var AIRTIME = (function(AIRTIME) {
//redirect_uri: 'https://localhost'
}
);
}
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});

View File

@ -22,7 +22,6 @@ var live_dj_on_air = false;
var scheduled_play_on_air = false;
var scheduled_play_source = false;
//a reference returned by setTimeout. Useful for when we want clearTimeout()
var newSongTimeoutId = null;
@ -56,7 +55,7 @@ function secondsTimer(){
function newSongStart() {
nextSongPrepare = true;
if (nextSong.type == 'track') {
if (nextSong.type == "track") {
currentSong = nextSong;
nextSong = null;
}
@ -71,22 +70,30 @@ function nextShowStart(){
function updateProgressBarValue() {
var showPercentDone = 0;
if (currentShow.length > 0) {
showPercentDone = (approximateServerTime - currentShow[0].showStartPosixTime)/currentShow[0].showLengthMs*100;
showPercentDone =
((approximateServerTime - currentShow[0].showStartPosixTime) /
currentShow[0].showLengthMs) *
100;
if (showPercentDone < 0 || showPercentDone > 100) {
showPercentDone = 0;
currentShow = new Array();
currentSong = null;
}
}
$('#progress-show').attr("style", "width:"+showPercentDone+"%");
$("#progress-show").attr("style", "width:" + showPercentDone + "%");
var songPercentDone = 0;
var scheduled_play_div = $("#scheduled_play_div");
var scheduled_play_line_to_switch = scheduled_play_div.parent().find(".line-to-switch");
var scheduled_play_line_to_switch = scheduled_play_div
.parent()
.find(".line-to-switch");
if (currentSong !== null) {
var songElapsedTime = 0;
songPercentDone = (approximateServerTime - currentSong.songStartPosixTime)/currentSong.songLengthMs*100;
songPercentDone =
((approximateServerTime - currentSong.songStartPosixTime) /
currentSong.songLengthMs) *
100;
songElapsedTime = approximateServerTime - currentSong.songStartPosixTime;
if (songPercentDone < 0) {
songPercentDone = 0;
@ -94,134 +101,188 @@ function updateProgressBarValue(){
} else if (songPercentDone > 100) {
songPercentDone = 100;
} else {
if ((currentSong.media_item_played == true && currentShow.length > 0) || (songElapsedTime < 5000 && currentShow[0].record != 1)) {
if (
(currentSong.media_item_played == true && currentShow.length > 0) ||
(songElapsedTime < 5000 && currentShow[0].record != 1)
) {
scheduled_play_line_to_switch.attr("class", "line-to-switch on");
scheduled_play_div.addClass("ready");
scheduled_play_source = true;
}
else{
} else {
scheduled_play_source = false;
scheduled_play_line_to_switch.attr("class", "line-to-switch off");
scheduled_play_div.removeClass("ready");
}
$('#progress-show').attr("class", "progress-show");
$("#progress-show").attr("class", "progress-show");
}
} else {
scheduled_play_source = false;
scheduled_play_line_to_switch.attr("class", "line-to-switch off");
scheduled_play_div.removeClass("ready");
$('#progress-show').attr("class", "progress-show-error");
$("#progress-show").attr("class", "progress-show-error");
}
$('#progress-bar').attr("style", "width:"+songPercentDone+"%");
$("#progress-bar").attr("style", "width:" + songPercentDone + "%");
}
function updatePlaybar() {
/* Column 0 update */
if (previousSong !== null) {
$('#previous').text(previousSong.name+",");
$('#prev-length').text(convertToHHMMSSmm(previousSong.songLengthMs));
$("#previous").text(previousSong.name + ",");
$("#prev-length").text(convertToHHMMSSmm(previousSong.songLengthMs));
} else {
$('#previous').empty();
$('#prev-length').empty();
$("#previous").empty();
$("#prev-length").empty();
}
if (currentSong !== null && !master_dj_on_air && !live_dj_on_air) {
if (currentSong.record == "1") {
$('#current').html("<span style='color:red; font-weight:bold'>"+$.i18n._("Recording:")+"</span>"+currentSong.name+",");
$("#current").html(
"<span style='color:red; font-weight:bold'>" +
$.i18n._("Recording:") +
"</span>" +
currentSong.name +
","
);
} else {
$('#current').text(currentSong.name+",");
$("#current").text(currentSong.name + ",");
if (currentSong.metadata && currentSong.metadata.artwork_data) {
var check_current_song = Cookies.get('current_track');
var loaded = Cookies.get('loaded');
var check_current_song = Cookies.get("current_track");
var loaded = Cookies.get("loaded");
if (check_current_song != currentSong.name) {
$('#now-playing-artwork_containter').html("<img height='75' width='75' class'artwork' src='"+ currentSong.metadata.artwork_data +"' />");
Cookies.remove('current_track');
Cookies.set('current_track', currentSong.name);
$("#now-playing-artwork_containter").html(
"<img height='75' width='75' class'artwork' src='" +
currentSong.metadata.artwork_data +
"' />"
);
Cookies.remove("current_track");
Cookies.set("current_track", currentSong.name);
}
// makes sure it stays updated with current track if page loads
if (loaded != UNIQID) {
Cookies.remove('current_track');
Cookies.remove('loaded');
Cookies.set('loaded', UNIQID);
Cookies.remove("current_track");
Cookies.remove("loaded");
Cookies.set("loaded", UNIQID);
}
}
}
} else {
if (master_dj_on_air) {
if (showName) {
$('#current').html($.i18n._("Current")+": <span style='color:red; font-weight:bold'>"+showName+" - "+$.i18n._("Master Stream")+"</span>");
$("#current").html(
$.i18n._("Current") +
": <span style='color:red; font-weight:bold'>" +
showName +
" - " +
$.i18n._("Master Stream") +
"</span>"
);
} else {
$('#current').html($.i18n._("Current")+": <span style='color:red; font-weight:bold'>"+$.i18n._("Master Stream")+"</span>");
$("#current").html(
$.i18n._("Current") +
": <span style='color:red; font-weight:bold'>" +
$.i18n._("Master Stream") +
"</span>"
);
}
} else if (live_dj_on_air) {
if (showName) {
$('#current').html($.i18n._("Current")+": <span style='color:red; font-weight:bold'>"+showName+" - "+$.i18n._("Live Stream")+"</span>");
$("#current").html(
$.i18n._("Current") +
": <span style='color:red; font-weight:bold'>" +
showName +
" - " +
$.i18n._("Live Stream") +
"</span>"
);
} else {
$('#current').html($.i18n._("Current")+": <span style='color:red; font-weight:bold'>"+$.i18n._("Live Stream")+"</span>");
$("#current").html(
$.i18n._("Current") +
": <span style='color:red; font-weight:bold'>" +
$.i18n._("Live Stream") +
"</span>"
);
}
} else {
$('#current').html($.i18n._("Current")+": <span style='color:red; font-weight:bold'>"+$.i18n._("Nothing Scheduled")+"</span>");
$("#current").html(
$.i18n._("Current") +
": <span style='color:red; font-weight:bold'>" +
$.i18n._("Nothing Scheduled") +
"</span>"
);
}
}
if (nextSong !== null) {
$('#next').text(nextSong.name+",");
$('#next-length').text(convertToHHMMSSmm(nextSong.songLengthMs));
$("#next").text(nextSong.name + ",");
$("#next-length").text(convertToHHMMSSmm(nextSong.songLengthMs));
} else {
$('#next').empty();
$('#next-length').empty();
$("#next").empty();
$("#next-length").empty();
}
$('#start').empty();
$('#end').empty();
$('#time-elapsed').empty();
$('#time-remaining').empty();
$('#song-length').empty();
$("#start").empty();
$("#end").empty();
$("#time-elapsed").empty();
$("#time-remaining").empty();
$("#song-length").empty();
if (currentSong !== null && !master_dj_on_air && !live_dj_on_air) {
$('#start').text(currentSong.starts.split(' ')[1]);
$('#end').text(currentSong.ends.split(' ')[1]);
$("#start").text(currentSong.starts.split(" ")[1]);
$("#end").text(currentSong.ends.split(" ")[1]);
/* Get rid of the millisecond accuracy so that the second counters for both
* show and song change at the same time. */
var songStartRoughly = parseInt(Math.round(currentSong.songStartPosixTime/1000), 10)*1000;
var songEndRoughly = parseInt(Math.round(currentSong.songEndPosixTime/1000), 10)*1000;
var songStartRoughly =
parseInt(Math.round(currentSong.songStartPosixTime / 1000), 10) * 1000;
var songEndRoughly =
parseInt(Math.round(currentSong.songEndPosixTime / 1000), 10) * 1000;
$('#time-elapsed').text(convertToHHMMSS(approximateServerTime - songStartRoughly));
$('#time-remaining').text(convertToHHMMSS(songEndRoughly - approximateServerTime));
$('#song-length').text(convertToHHMMSS(currentSong.songLengthMs));
$("#time-elapsed").text(
convertToHHMMSS(approximateServerTime - songStartRoughly)
);
$("#time-remaining").text(
convertToHHMMSS(songEndRoughly - approximateServerTime)
);
$("#song-length").text(convertToHHMMSS(currentSong.songLengthMs));
}
/* Column 1 update */
$('#playlist').text($.i18n._("Current Show:"));
var recElem = $('.recording-show');
$("#playlist").text($.i18n._("Current Show:"));
var recElem = $(".recording-show");
if (currentShow.length > 0) {
$('#playlist').text(currentShow[0].name);
(currentShow[0].record == "1") ? recElem.show(): recElem.hide();
$("#playlist").text(currentShow[0].name);
currentShow[0].record == "1" ? recElem.show() : recElem.hide();
} else {
recElem.hide();
}
$('#show-length').empty();
$("#show-length").empty();
if (currentShow.length > 0) {
$('#show-length').text(convertDateToHHMM(currentShow[0].showStartPosixTime) + " - " + convertDateToHHMM(currentShow[0].showEndPosixTime));
$("#show-length").text(
convertDateToHHMM(currentShow[0].showStartPosixTime) +
" - " +
convertDateToHHMM(currentShow[0].showEndPosixTime)
);
}
/* Column 2 update */
$('#time').text(convertDateToHHMMSS(approximateServerTime));
$("#time").text(convertDateToHHMMSS(approximateServerTime));
}
function calcAdditionalData(currentItem) {
currentItem.songStartPosixTime = convertDateToPosixTime(currentItem.starts);
currentItem.songEndPosixTime = convertDateToPosixTime(currentItem.ends);
currentItem.songLengthMs = currentItem.songEndPosixTime - currentItem.songStartPosixTime;
currentItem.songLengthMs =
currentItem.songEndPosixTime - currentItem.songStartPosixTime;
}
function calcAdditionalShowData(show) {
if (show.length > 0) {
show[0].showStartPosixTime = convertDateToPosixTime(show[0].start_timestamp);
show[0].showStartPosixTime = convertDateToPosixTime(
show[0].start_timestamp
);
show[0].showEndPosixTime = convertDateToPosixTime(show[0].end_timestamp);
show[0].showLengthMs = show[0].showEndPosixTime - show[0].showStartPosixTime;
show[0].showLengthMs =
show[0].showEndPosixTime - show[0].showStartPosixTime;
}
}
@ -288,7 +349,6 @@ function parseItems(obj){
calculateTimeToNextShow();
}
var schedulePosixTime = convertDateToPosixTime(obj.schedulerTime);
var date = new Date();
localRemoteTimeOffset = date.getTime() - schedulePosixTime;
@ -318,7 +378,6 @@ function parseSourceStatus(obj){
}
function parseSwitchStatus(obj) {
if (obj.live_dj_source == "on") {
live_dj_on_air = true;
} else {
@ -355,7 +414,7 @@ function parseSwitchStatus(obj){
live_dj_switch.removeClass("active");
}
master_dj_switch.find("span").html(obj.master_dj_source)
master_dj_switch.find("span").html(obj.master_dj_source);
if (master_dj_on_air) {
master_dj_switch.addClass("active");
} else {
@ -364,8 +423,12 @@ function parseSwitchStatus(obj){
}
function controlOnAirLight() {
if ((scheduled_play_on_air && scheduled_play_source) || live_dj_on_air || master_dj_on_air) {
$('#on-air-info').attr("class", "on-air-info on");
if (
(scheduled_play_on_air && scheduled_play_source) ||
live_dj_on_air ||
master_dj_on_air
) {
$("#on-air-info").attr("class", "on-air-info on");
onAirOffIterations = 0;
} else if (onAirOffIterations < 20) {
//if less than 4 seconds have gone by (< 20 executions of this function)
@ -374,7 +437,7 @@ function controlOnAirLight(){
//off between tracks: CC-3725
onAirOffIterations++;
} else {
$('#on-air-info').attr("class", "on-air-info off");
$("#on-air-info").attr("class", "on-air-info off");
}
}
@ -383,66 +446,88 @@ function controlSwitchLight(){
var master_li = $("#master_dj_div").parent();
var scheduled_play_li = $("#scheduled_play_div").parent();
if((scheduled_play_on_air && scheduled_play_source) && !live_dj_on_air && !master_dj_on_air){
scheduled_play_li.find(".line-to-on-air").attr("class", "line-to-on-air on");
if (
scheduled_play_on_air &&
scheduled_play_source &&
!live_dj_on_air &&
!master_dj_on_air
) {
scheduled_play_li
.find(".line-to-on-air")
.attr("class", "line-to-on-air on");
live_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
master_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
} else if (live_dj_on_air && !master_dj_on_air) {
scheduled_play_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
scheduled_play_li
.find(".line-to-on-air")
.attr("class", "line-to-on-air off");
live_li.find(".line-to-on-air").attr("class", "line-to-on-air on");
master_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
} else if (master_dj_on_air) {
scheduled_play_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
scheduled_play_li
.find(".line-to-on-air")
.attr("class", "line-to-on-air off");
live_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
master_li.find(".line-to-on-air").attr("class", "line-to-on-air on");
} else {
scheduled_play_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
scheduled_play_li
.find(".line-to-on-air")
.attr("class", "line-to-on-air off");
live_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
master_li.find(".line-to-on-air").attr("class", "line-to-on-air off");
}
}
function getScheduleFromServer() {
$.ajax({ url: baseUrl+"Schedule/get-current-playlist/format/json",
$.ajax({
url: baseUrl + "Schedule/get-current-playlist/format/json",
dataType: "json",
success: function (data) {
parseItems(data.entries);
parseSourceStatus(data.source_status);
parseSwitchStatus(data.switch_status);
showName = data.show_name;
}, error:function(jqXHR, textStatus, errorThrown){}});
},
error: function (jqXHR, textStatus, errorThrown) {},
});
}
function setupQtip() {
var qtipElem = $('#about-link');
var qtipElem = $("#about-link");
if (qtipElem.length > 0) {
qtipElem.qtip({
content: $('#about-txt').html(),
show: 'mouseover',
hide: { when: 'mouseout', fixed: true },
content: $("#about-txt").html(),
show: "mouseover",
hide: { when: "mouseout", fixed: true },
position: {
corner: {
target: 'center',
tooltip: 'topRight'
}
target: "center",
tooltip: "topRight",
},
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
name: "light", // Use the default light style
},
name: 'light' // Use the default light style
}
});
}
}
function setSwitchListener(ele) {
var sourcename = $(ele).attr('id');
var sourcename = $(ele).attr("id");
var status_span = $(ele).find("span");
var status = status_span.html();
$.get(baseUrl+"Dashboard/switch-source/format/json/sourcename/"+sourcename+"/status/"+status, function(data){
$.get(
baseUrl +
"Dashboard/switch-source/format/json/sourcename/" +
sourcename +
"/status/" +
status,
function (data) {
if (data.error) {
alert(data.error);
} else {
@ -453,17 +538,23 @@ function setSwitchListener(ele){
}
status_span.html(data.status);
}
});
}
);
}
function kickSource(ele) {
var sourcename = $(ele).attr('id');
var sourcename = $(ele).attr("id");
$.get(baseUrl+"Dashboard/disconnect-source/format/json/sourcename/"+sourcename, function(data){
$.get(
baseUrl +
"Dashboard/disconnect-source/format/json/sourcename/" +
sourcename,
function (data) {
if (data.error) {
alert(data.error);
}
});
}
);
}
var stream_window = null;
@ -477,9 +568,13 @@ function init() {
setupQtip();
$('.listen-control-button').click(function() {
$(".listen-control-button").click(function () {
if (stream_window == null || stream_window.closed)
stream_window=window.open(baseUrl+"Dashboard/stream-player", 'name', 'width=400,height=158');
stream_window = window.open(
baseUrl + "Dashboard/stream-player",
"name",
"width=400,height=158"
);
stream_window.focus();
return false;
});
@ -491,8 +586,8 @@ function init() {
* field. Therefore, we fill the password field with 6 x's
*/
function setCurrentUserPseudoPassword() {
$('#cu_password').val("xxxxxx");
$('#cu_passwordVerify').val("xxxxxx");
$("#cu_password").val("xxxxxx");
$("#cu_passwordVerify").val("xxxxxx");
}
/*$(window).resize(function() {
@ -503,26 +598,25 @@ function setCurrentUserPseudoPassword() {
});*/
$(document).ready(function () {
if ($('#master-panel').length > 0)
init();
if ($('.errors').length === 0) {
if ($("#master-panel").length > 0) init();
if ($(".errors").length === 0) {
setCurrentUserPseudoPassword();
}
$('body').on('click','#current-user', function() {
$("body").on("click", "#current-user", function () {
$.ajax({
url: baseUrl+'user/edit-user/format/json'
url: baseUrl + "user/edit-user/format/json",
});
});
$('body').on('click', '#cu_save_user', function() {
Cookies.set('airtime_locale', $('#cu_locale').val(), {path: '/'});
$("body").on("click", "#cu_save_user", function () {
Cookies.set("airtime_locale", $("#cu_locale").val(), { path: "/" });
});
// When the 'Listen' button is clicked we set the width
// of the share button to the width of the 'Live Stream'
// text. This differs depending on the language setting
$('#popup-link').css('width', $('.jp-container h1').css('width'));
$("#popup-link").css("width", $(".jp-container h1").css("width"));
/*$('#menu-btn').click(function() {
$('#nav .responsive-menu').slideToggle();

View File

@ -1,13 +1,10 @@
/* function to create popup window */
function popup(mylink) {
if (!window.focus)
return true;
if (!window.focus) return true;
var href;
if (typeof(mylink) == 'string')
href=mylink;
else
href=mylink.href;
window.open(href, "player", 'width=300,height=100,scrollbars=yes');
if (typeof mylink == "string") href = mylink;
else href = mylink.href;
window.open(href, "player", "width=300,height=100,scrollbars=yes");
return false;
}
@ -29,12 +26,10 @@ function getDateFromString(time){
}
return new Date(year, month, day);
}
function convertSecondsToDaysHoursMinutesSeconds(seconds) {
if (seconds < 0)
seconds = 0;
if (seconds < 0) seconds = 0;
seconds = parseInt(seconds, 10);
@ -67,12 +62,9 @@ function convertToHHMMSS(timeInMS){
minutes = minutes.toString();
seconds = seconds.toString();
if (hours.length == 1)
hours = "0" + hours;
if (minutes.length == 1)
minutes = "0" + minutes;
if (seconds.length == 1)
seconds = "0" + seconds;
if (hours.length == 1) hours = "0" + hours;
if (minutes.length == 1) minutes = "0" + minutes;
if (seconds.length == 1) seconds = "0" + seconds;
return hours + ":" + minutes + ":" + seconds;
}
@ -95,24 +87,16 @@ function convertToHHMMSSmm(timeInMS){
seconds = seconds.toString();
ms = ms.toString();
if (hours.length == 1)
hours = "0" + hours;
if (minutes.length == 1)
minutes = "0" + minutes;
if (seconds.length == 1)
seconds = "0" + seconds;
if (hours.length == 1) hours = "0" + hours;
if (minutes.length == 1) minutes = "0" + minutes;
if (seconds.length == 1) seconds = "0" + seconds;
if (ms.length == 3)
ms = ms.substring(0, 2);
else if (ms.length == 2)
ms = "0" + ms.substring(0,1);
else if (ms.length == 1)
ms = "00";
if (ms.length == 3) ms = ms.substring(0, 2);
else if (ms.length == 2) ms = "0" + ms.substring(0, 1);
else if (ms.length == 1) ms = "00";
if (hours == "00")
return minutes + ":" + seconds + "." + ms;
else
return hours + ":" + minutes + ":" + seconds+ "." + ms;
if (hours == "00") return minutes + ":" + seconds + "." + ms;
else return hours + ":" + minutes + ":" + seconds + "." + ms;
}
function convertDateToHHMM(epochTime) {
@ -121,10 +105,8 @@ function convertDateToHHMM(epochTime){
var hours = d.getUTCHours().toString();
var minutes = d.getUTCMinutes().toString();
if (hours.length == 1)
hours = "0" + hours;
if (minutes.length == 1)
minutes = "0" + minutes;
if (hours.length == 1) hours = "0" + hours;
if (minutes.length == 1) minutes = "0" + minutes;
return hours + ":" + minutes;
}
@ -136,19 +118,15 @@ function convertDateToHHMMSS(epochTime){
var minutes = d.getUTCMinutes().toString();
var seconds = d.getUTCSeconds().toString();
if (hours.length == 1)
hours = "0" + hours;
if (minutes.length == 1)
minutes = "0" + minutes;
if (seconds.length == 1)
seconds = "0" + seconds;
if (hours.length == 1) hours = "0" + hours;
if (minutes.length == 1) minutes = "0" + minutes;
if (seconds.length == 1) seconds = "0" + seconds;
return hours + ":" + minutes + ":" + seconds;
}
/* Takes in a string of format similar to 2011-02-07 02:59:57,
* and converts this to epoch/posix time. */
function convertDateToPosixTime(s) {
var datetime = s.split(" ");
var date = datetime[0].split("-");
@ -166,14 +144,13 @@ function convertDateToPosixTime(s){
var temp = time[2].split(".");
sec = temp[0];
msec = temp[1];
} else
sec = time[2];
} else sec = time[2];
return Date.UTC(year, month - 1, day, hour, minute, sec, msec);
}
function getFileExt(filename) {
return filename.split('.').pop();
return filename.split(".").pop();
}
function resizeImg(ele, targetWidth, targetHeight) {
@ -226,7 +203,11 @@ function isInView(el) {
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
rect.bottom <=
(window.innerHeight ||
document.documentElement.clientHeight) /*or $(window).height() */ &&
rect.right <=
(window.innerWidth ||
document.documentElement.clientWidth) /*or $(window).width() */
);
}

View File

@ -14,23 +14,41 @@ function getContent() {
if (isUpToDate()) {
msg = $.i18n._("You are running the latest version");
} else {
msg = $.i18n._("New version available: ") + link + '<ul>';
msg = $.i18n._("New version available: ") + link + "<ul>";
if (isPreRelease) {
msg += '<li>'+$.i18n._("You have a pre-release version of LibreTime intalled.");
msg +=
"<li>" +
$.i18n._("You have a pre-release version of LibreTime intalled.");
}
if (hasPatch) {
msg += '<li>'+$.i18n._("A patch update for your LibreTime installation is available.");
msg +=
"<li>" +
$.i18n._(
"A patch update for your LibreTime installation is available."
);
}
if (hasMinor) {
msg += '<li>'+$.i18n._("A feature update for your LibreTime installation is available.");
msg +=
"<li>" +
$.i18n._(
"A feature update for your LibreTime installation is available."
);
}
if (hasMajor && !hasMultiMajor) {
msg += '<li>'+$.i18n._("A major update for your LibreTime installation is available.");
msg +=
"<li>" +
$.i18n._(
"A major update for your LibreTime installation is available."
);
}
if (hasMultiMajor) {
msg += '<li>'+$.i18n._("Multiple major updates for LibreTime installation are available. Please upgrade as soon as possible.");
msg +=
"<li>" +
$.i18n._(
"Multiple major updates for LibreTime installation are available. Please upgrade as soon as possible."
);
}
msg += '</ul>';
msg += "</ul>";
}
return msg;
@ -41,7 +59,6 @@ function getContent() {
*/
function getHasPatch() {
return versionNotifyInfo.hasPatch;
}
/**
@ -72,9 +89,6 @@ function getIsPreRelease() {
return versionNotifyInfo.isPreRelease;
}
/**
* Get the current version
*/
@ -93,7 +107,9 @@ function getLatestVersion() {
* Returns the download link to latest release in HTML
*/
function getLatestLink() {
return "<a href='' onclick='openLatestLink();'>" + getLatestVersion() + "</a>";
return (
"<a href='' onclick='openLatestLink();'>" + getLatestVersion() + "</a>"
);
}
/**
@ -114,37 +130,37 @@ function openLatestLink() {
* Sets up the tooltip for version notification
*/
function setupVersionQtip() {
var qtipElem = $('#version-icon');
var qtipElem = $("#version-icon");
if (qtipElem.length > 0) {
qtipElem.qtip({
id: 'version',
id: "version",
content: {
text: getContent(),
title: {
text: getCurrentVersion(),
button: isUpToDate() ? false : true
}
button: isUpToDate() ? false : true,
},
},
hide: {
event: isUpToDate() ? 'mouseleave' : 'unfocus'
event: isUpToDate() ? "mouseleave" : "unfocus",
},
position: {
my: "top right",
at: "bottom left"
at: "bottom left",
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
}
});
}
}
$(document).ready(function () {
if($('#version-icon').length > 0) {
if ($("#version-icon").length > 0) {
setupVersionQtip();
}
});

View File

@ -8,11 +8,10 @@ var AIRTIME = (function(AIRTIME) {
mod = AIRTIME.library;
mod.checkAddButton = function () {
var selected = mod.getChosenItemsLength(),
sortable = $('.spl_sortable:visible'),
sortable = $(".spl_sortable:visible"),
check = false,
blockType = $('input[name=sp_type]:checked', '#smart-block-form').val();
blockType = $("input[name=sp_type]:checked", "#smart-block-form").val();
// make sure audioclips are selected and a playlist or static block is currently open.
// static blocks have value of 0
@ -27,23 +26,26 @@ var AIRTIME = (function(AIRTIME) {
AIRTIME.button.disableButton("btn-group #library-plus", false);
}
var objType = $('.obj_type').val(),
var objType = $(".obj_type").val(),
btnText;
if (objType === 'playlist') {
btnText = ' '+$.i18n._('Add to current playlist');
} else if (objType === 'block') {
btnText = ' '+$.i18n._('Add to current smart block');
if (objType === "playlist") {
btnText = " " + $.i18n._("Add to current playlist");
} else if (objType === "block") {
btnText = " " + $.i18n._("Add to current smart block");
} else {
btnText = ' '+$.i18n._('Add to current playlist');
btnText = " " + $.i18n._("Add to current playlist");
}
AIRTIME.library.changeAddButtonText($('.btn-group #library-plus #lib-plus-text'), btnText);
AIRTIME.library.changeAddButtonText(
$(".btn-group #library-plus #lib-plus-text"),
btnText
);
};
mod.fnRowCallback = function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
var $nRow = $(nRow);
if (aData.ftype === "audioclip") {
$nRow.addClass("lib-audio");
$image = $nRow.find('td.library_type');
$image = $nRow.find("td.library_type");
if (!isAudioSupported(aData.mime)) {
$image.html('<span class="ui-icon ui-icon-locked"></span>');
aData.image = '<span class="ui-icon ui-icon-locked"></span>';
@ -56,8 +58,10 @@ var AIRTIME = (function(AIRTIME) {
$nRow.addClass("lib-pl");
}
$nRow.attr("id", aData["tr_id"]).data("aData", aData).data("screen",
"playlist");
$nRow
.attr("id", aData["tr_id"])
.data("aData", aData)
.data("screen", "playlist");
if (aData["bl_type"] !== undefined) {
$nRow.attr("bl_type", aData["bl_type"]);
@ -65,18 +69,20 @@ var AIRTIME = (function(AIRTIME) {
};
mod.fnDrawCallback = function () {
mod.redrawChosen();
mod.checkToolBarIcons();
$('#library_display tr.lib-audio, tr.lib-stream, tr.lib-pl, tr.lib-block')
.draggable(
{
$(
"#library_display tr.lib-audio, tr.lib-stream, tr.lib-pl, tr.lib-block"
).draggable({
helper: function () {
var $el = $(this), selected = mod
.getChosenAudioFilesLength(), container, message, li = $(".side_playlist ul[id='spl_sortable'] li:first"),
width = li.width(), height = 55;
var $el = $(this),
selected = mod.getChosenAudioFilesLength(),
container,
message,
li = $(".side_playlist ul[id='spl_sortable'] li:first"),
width = li.width(),
height = 55;
if (width > 798) width = 798;
// dragging an element that has an unselected
@ -91,35 +97,43 @@ var AIRTIME = (function(AIRTIME) {
message = sprintf($.i18n._("Adding %s Items"), selected);
}
container = $('<div class="helper"/>').append(
"<li/>").find("li").addClass(
"ui-state-default").append("<div/>")
.find("div").addClass(
"list-item-container").append(
message).end().width(width)
.height(height).end();
container = $('<div class="helper"/>')
.append("<li/>")
.find("li")
.addClass("ui-state-default")
.append("<div/>")
.find("div")
.addClass("list-item-container")
.append(message)
.end()
.width(width)
.height(height)
.end();
return container;
},
cursor : 'pointer',
cursor: "pointer",
cursorAt: {
top: 30,
left: 100
left: 100,
},
connectToSortable : '.spl_sortable'
connectToSortable: ".spl_sortable",
});
};
mod.dblClickAdd = function (data, type) {
var i, aMediaIds = [];
var i,
aMediaIds = [];
// process selected files/playlists.
aMediaIds.push(new Array(data.id, data.ftype));
// check if a playlist/block is open before adding items
if ($('input[id="obj_type"]').val() == 'playlist'
|| $('input[id="obj_type"]').val() == 'block') {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, 'after');
if (
$('input[id="obj_type"]').val() == "playlist" ||
$('input[id="obj_type"]').val() == "block"
) {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, "after");
}
};
@ -130,45 +144,53 @@ var AIRTIME = (function(AIRTIME) {
$toolbar.append($menu);
// add to playlist button
$toolbar
.find('.icon-plus').parent()
.find(".icon-plus")
.parent()
.click(function () {
if (AIRTIME.button.isDisabled('btn-group #library-plus') === true) {
if (AIRTIME.button.isDisabled("btn-group #library-plus") === true) {
return;
}
var aData = AIRTIME.library.getSelectedData(), i, temp, length, aMediaIds = [];
var aData = AIRTIME.library.getSelectedData(),
i,
temp,
length,
aMediaIds = [];
// process selected files/playlists.
for (i = 0, length = aData.length; i < length; i++) {
temp = aData[i];
if (temp.ftype === "audioclip"
|| temp.ftype === "block"
|| (temp.ftype === "stream" && $(
".obj_type").val() === "playlist")) {
aMediaIds.push(new Array(temp.id,
temp.ftype));
if (
temp.ftype === "audioclip" ||
temp.ftype === "block" ||
(temp.ftype === "stream" && $(".obj_type").val() === "playlist")
) {
aMediaIds.push(new Array(temp.id, temp.ftype));
}
}
if (aMediaIds.length > 0) {
AIRTIME.playlist.fnAddItems(aMediaIds,
undefined, 'after');
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, "after");
} else {
if ($('.obj_type').val() == 'block') {
alert($.i18n._('You can only add tracks to smart blocks.'));
} else if ($('.obj_type').val() == 'playlist') {
alert($.i18n._('You can only add tracks, smart blocks, and webstreams to playlists.'));
if ($(".obj_type").val() == "block") {
alert($.i18n._("You can only add tracks to smart blocks."));
} else if ($(".obj_type").val() == "playlist") {
alert(
$.i18n._(
"You can only add tracks, smart blocks, and webstreams to playlists."
)
);
}
}
});
// delete from library.
$toolbar.find('.icon-trash').parent().click(function() {
if (AIRTIME.button.isDisabled('icon-trash') === true) {
$toolbar
.find(".icon-trash")
.parent()
.click(function () {
if (AIRTIME.button.isDisabled("icon-trash") === true) {
return;
}
@ -179,5 +201,4 @@ var AIRTIME = (function(AIRTIME) {
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});

View File

@ -8,10 +8,16 @@ var AIRTIME = (function(AIRTIME) {
mod = AIRTIME.library;
mod.checkAddButton = function () {
var selected = mod.getChosenItemsLength(), $cursor = $('tr.sb-selected'), check = false,
shows = $('tr.sb-header'), current = $('tr.sb-current-show'),
var selected = mod.getChosenItemsLength(),
$cursor = $("tr.sb-selected"),
check = false,
shows = $("tr.sb-header"),
current = $("tr.sb-current-show"),
// TODO: this is an ugly way of doing this... we should find a more robust way of checking which view we're in.
btnText = (window.location.href.toLowerCase().indexOf("schedule") > -1) ? $.i18n._('Add to show') : $.i18n._('Add to next show');
btnText =
window.location.href.toLowerCase().indexOf("schedule") > -1
? $.i18n._("Add to show")
: $.i18n._("Add to next show");
// make sure library items are selected and a cursor is selected.
if (selected !== 0) {
@ -25,16 +31,16 @@ var AIRTIME = (function(AIRTIME) {
}
if ($cursor.length !== 0) {
btnText = $.i18n._('Add after selected items');
btnText = $.i18n._("Add after selected items");
} else if (current.length !== 0) {
btnText = $.i18n._('Add to current show');
btnText = $.i18n._("Add to current show");
}
} else if (sortable.length > 0 && sortable.is(":visible")) {
var objType = $('.active-tab .obj_type').val();
if (objType === 'block') {
btnText = $.i18n._('Add to current smart block');
var objType = $(".active-tab .obj_type").val();
if (objType === "block") {
btnText = $.i18n._("Add to current smart block");
} else {
btnText = $.i18n._('Add to current playlist');
btnText = $.i18n._("Add to current playlist");
}
} else {
check = false;
@ -46,7 +52,10 @@ var AIRTIME = (function(AIRTIME) {
AIRTIME.button.disableButton("btn-group #library-plus", false);
}
AIRTIME.library.changeAddButtonText($('.btn-group #library-plus #lib-plus-text'), btnText);
AIRTIME.library.changeAddButtonText(
$(".btn-group #library-plus #lib-plus-text"),
btnText
);
};
mod.fnRowCallback = function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
@ -54,7 +63,7 @@ var AIRTIME = (function(AIRTIME) {
if (aData.ftype === "audioclip") {
$nRow.addClass("lib-audio");
$image = $nRow.find('td.library_type');
$image = $nRow.find("td.library_type");
if (!isAudioSupported(aData.mime)) {
$image.html('<span class="ui-icon ui-icon-locked"></span>');
aData.image = '<span class="ui-icon ui-icon-locked"></span>';
@ -65,8 +74,10 @@ var AIRTIME = (function(AIRTIME) {
$nRow.addClass("lib-pl");
}
$nRow.attr("id", aData["tr_id"]).data("aData", aData).data("screen",
"timeline");
$nRow
.attr("id", aData["tr_id"])
.data("aData", aData)
.data("screen", "timeline");
};
/**
@ -83,29 +94,40 @@ var AIRTIME = (function(AIRTIME) {
return;
}
}
var emptyRow = table.find('tr:has(td.dataTables_empty)'),
var emptyRow = table.find("tr:has(td.dataTables_empty)"),
wrapper = table.closest(".dataTables_wrapper"),
libEmpty = wrapper.find('.empty_placeholder');
libEmpty = wrapper.find(".empty_placeholder");
if (emptyRow.length > 0) {
emptyRow.hide();
var mediaType = parseInt($('.media_type_selector.selected').data('selection-id')),
img = wrapper.find('.empty_placeholder_image');
var mediaType = parseInt(
$(".media_type_selector.selected").data("selection-id")
),
img = wrapper.find(".empty_placeholder_image");
if (!opts && isNaN(mediaType)) {
return;
}
// Remove all classes for when we change between empty media types
img.removeClass(function() { return $(this).attr("class"); });
img.removeClass(function () {
return $(this).attr("class");
});
if (opts) {
img.addClass("empty_placeholder_image " + opts.iconClass);
wrapper.find('.empty_placeholder_text').html(opts.html);
wrapper.find(".empty_placeholder_text").html(opts.html);
} else {
opts = AIRTIME.library.placeholder(mediaType);
img.addClass("empty_placeholder_image icon-white " + opts.icon);
wrapper.find('.empty_placeholder_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>"
wrapper
.find(".empty_placeholder_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>"
);
}
@ -116,7 +138,7 @@ var AIRTIME = (function(AIRTIME) {
};
mod.fnDrawCallback = function fnLibDrawCallback() {
var table = $('#library_display'),
var table = $("#library_display"),
cb = table.find('th[class*="checkbox"]');
if (cb.find("input").length == 0) {
cb.append("<input id='super-checkbox' type='checkbox'>");
@ -135,14 +157,15 @@ var AIRTIME = (function(AIRTIME) {
sortable = ".active-tab .spl_sortable";
}
$('#library_display tr[class*="lib-"]')
.draggable(
{
$('#library_display tr[class*="lib-"]').draggable({
helper: function () {
var $el = $(this), selected = mod
.getChosenItemsLength(), container, thead = $("#show_builder_table thead"), colspan = thead
.find("th").length, width = $el.width(), message;
var $el = $(this),
selected = mod.getChosenItemsLength(),
container,
thead = $("#show_builder_table thead"),
colspan = thead.find("th").length,
width = $el.width(),
message;
// dragging an element that has an unselected
// checkbox.
@ -156,36 +179,47 @@ var AIRTIME = (function(AIRTIME) {
message = sprintf($.i18n._("Adding %s Items"), selected);
}
container = $('<div/>').attr('id',
'draggingContainer').append('<tr/>')
.find("tr").append('<td/>').find("td")
.attr("colspan", colspan).width(width)
.addClass("ui-state-highlight").append(
message).end().end();
container = $("<div/>")
.attr("id", "draggingContainer")
.append("<tr/>")
.find("tr")
.append("<td/>")
.find("td")
.attr("colspan", colspan)
.width(width)
.addClass("ui-state-highlight")
.append(message)
.end()
.end();
return container;
},
create: function (event, ui) {
$(this).draggable("option", "cursorAt", {
top: 20,
left: Math.floor($(this).outerWidth() / 2)
left: Math.floor($(this).outerWidth() / 2),
});
},
tolerance: 'pointer',
cursor: 'move',
tolerance: "pointer",
cursor: "move",
distance: 25, // min-distance for dragging
connectToSortable: sortable
connectToSortable: sortable,
});
};
mod.dblClickAdd = function (data, type) {
var i, length, temp, aMediaIds = [], aSchedIds = [], aData = [];
var i,
length,
temp,
aMediaIds = [],
aSchedIds = [],
aData = [];
if ($("#show_builder_table").is(":visible")) {
// process selected files/playlists.
aMediaIds.push({
"id": data.id,
"type": type
id: data.id,
type: type,
});
$("#show_builder_table tr.sb-selected").each(function (i, el) {
@ -196,9 +230,9 @@ var AIRTIME = (function(AIRTIME) {
for (i = 0, length = aData.length; i < length; i++) {
temp = aData[i];
aSchedIds.push({
"id": temp.id,
"instance": temp.instance,
"timestamp": temp.timestamp
id: temp.id,
instance: temp.instance,
timestamp: temp.timestamp,
});
}
@ -214,9 +248,11 @@ var AIRTIME = (function(AIRTIME) {
aMediaIds.push(new Array(data.id, data.ftype));
// check if a playlist/block is open before adding items
if ($('.active-tab .obj_type').val() == 'playlist'
|| $('.active-tab .obj_type').val() == 'block') {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, 'after');
if (
$(".active-tab .obj_type").val() == "playlist" ||
$(".active-tab .obj_type").val() == "block"
) {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, "after");
}
}
};
@ -228,20 +264,25 @@ var AIRTIME = (function(AIRTIME) {
var data = el.prev().data("aData");
if (data === undefined) {
alert($.i18n._("Cannot schedule outside a show.\nTry creating a show first."));
alert(
$.i18n._("Cannot schedule outside a show.\nTry creating a show first.")
);
return false;
}
arr.push({
"id" : data.id,
"instance" : data.instance,
"timestamp" : data.timestamp
id: data.id,
instance: data.instance,
timestamp: data.timestamp,
});
if (!isInView(el)) {
$('.dataTables_scrolling.sb-padded').animate({
scrollTop: el.offset().top
}, 0);
$(".dataTables_scrolling.sb-padded").animate(
{
scrollTop: el.offset().top,
},
0
);
}
return true;
@ -249,26 +290,30 @@ var AIRTIME = (function(AIRTIME) {
mod.addToSchedule = function (selected) {
console.log(selected);
var aMediaIds = [], aSchedIds = [], aData = [];
var aMediaIds = [],
aSchedIds = [],
aData = [];
$.each(selected, function () {
aMediaIds.push({
"id": this.id,
"type": this.ftype
id: this.id,
type: this.ftype,
});
});
// process selected files/playlists.
$("#show_builder_table").find("tr.sb-selected").each(function (i, el) {
$("#show_builder_table")
.find("tr.sb-selected")
.each(function (i, el) {
aData.push($(el).data("aData"));
});
// process selected schedule rows to add media after.
$.each(aData, function () {
aSchedIds.push({
"id": this.id,
"instance": this.instance,
"timestamp": this.timestamp
id: this.id,
instance: this.instance,
timestamp: this.timestamp,
});
});
@ -290,19 +335,16 @@ var AIRTIME = (function(AIRTIME) {
e.stopPropagation();
});
if (localStorage.getItem('user-type') != 'G') {
if (localStorage.getItem("user-type") != "G") {
$toolbar.append($menu);
// add to timeline button
$toolbar
.find('#library-plus')
.click(
function () {
if (AIRTIME.button.isDisabled('btn-group #library-plus') === true) {
$toolbar.find("#library-plus").click(function () {
if (AIRTIME.button.isDisabled("btn-group #library-plus") === true) {
return;
}
var selected = AIRTIME.library.getSelectedData(), aMediaIds = [];
var selected = AIRTIME.library.getSelectedData(),
aMediaIds = [];
if ($("#show_builder_table").is(":visible")) {
mod.addToSchedule(selected);
@ -312,15 +354,17 @@ var AIRTIME = (function(AIRTIME) {
});
// check if a playlist/block is open before adding items
if ($('.active-tab .obj_type').val() == 'playlist'
|| $('.active-tab .obj_type').val() == 'block') {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, 'after');
if (
$(".active-tab .obj_type").val() == "playlist" ||
$(".active-tab .obj_type").val() == "block"
) {
AIRTIME.playlist.fnAddItems(aMediaIds, undefined, "after");
}
}
});
$toolbar.find('#publish-btn').click(function () {
if (AIRTIME.button.isDisabled('btn-group #publish-btn') === true) {
$toolbar.find("#publish-btn").click(function () {
if (AIRTIME.button.isDisabled("btn-group #publish-btn") === true) {
return;
}
@ -333,16 +377,16 @@ var AIRTIME = (function(AIRTIME) {
});
// delete from library.
$toolbar.find('#sb-delete').click(function () {
if (AIRTIME.button.isDisabled('btn-group #sb-delete') === true) {
$toolbar.find("#sb-delete").click(function () {
if (AIRTIME.button.isDisabled("btn-group #sb-delete") === true) {
return;
}
AIRTIME.library.fnDeleteSelectedItems();
});
$toolbar.find('#sb-new').click(function () {
if (AIRTIME.button.isDisabled('btn-group #sb-new') === true) {
$toolbar.find("#sb-new").click(function () {
if (AIRTIME.button.isDisabled("btn-group #sb-new") === true) {
return;
}
@ -352,14 +396,15 @@ var AIRTIME = (function(AIRTIME) {
AIRTIME.playlist.fnNew();
} else if (selection == AIRTIME.library.MediaTypeIntegerEnum.BLOCK) {
AIRTIME.playlist.fnNewBlock();
} else if (selection == AIRTIME.library.MediaTypeIntegerEnum.WEBSTREAM) {
} else if (
selection == AIRTIME.library.MediaTypeIntegerEnum.WEBSTREAM
) {
AIRTIME.playlist.fnWsNew();
}
});
$toolbar.find('#sb-edit').click(function () {
if (AIRTIME.button.isDisabled('btn-group #sb-edit') === true) {
$toolbar.find("#sb-edit").click(function () {
if (AIRTIME.button.isDisabled("btn-group #sb-edit") === true) {
return;
}
@ -369,15 +414,19 @@ var AIRTIME = (function(AIRTIME) {
var data = $(el).data("aData");
if (data.ftype === "audioclip") {
$.get(baseUrl + "library/edit-file-md/id/" + data.id, {format: "json"}, function (json) {
$.get(
baseUrl + "library/edit-file-md/id/" + data.id,
{ format: "json" },
function (json) {
AIRTIME.playlist.fileMdEdit(json, data.tr_id);
//buildEditMetadataDialog(json);
});
}
);
} else if (data.ftype === "playlist" || data.ftype === "block") {
AIRTIME.playlist.fnEdit(data, baseUrl + 'playlist/edit');
AIRTIME.playlist.fnEdit(data, baseUrl + "playlist/edit");
AIRTIME.playlist.validatePlaylistElements();
} else if (data.ftype === "stream") {
AIRTIME.playlist.fnEdit(data, baseUrl + 'webstream/edit');
AIRTIME.playlist.fnEdit(data, baseUrl + "webstream/edit");
}
});
});
@ -387,5 +436,4 @@ var AIRTIME = (function(AIRTIME) {
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
$(document).ready(function () {
var uploadProgress;
var self = this;
self.uploadFilter = "all";
@ -8,14 +7,14 @@ $(document).ready(function () {
0: { message: $.i18n._("Successfully imported") },
1: { message: $.i18n._("Pending import") },
2: { message: $.i18n._("Import failed.") },
UNKNOWN: {message: $.i18n._("Unknown")}
UNKNOWN: { message: $.i18n._("Unknown") },
};
if (Object.freeze) {
Object.freeze(self.IMPORT_STATUS_CODES);
}
Dropzone.options.addMediaDropzone = {
url: '/rest/media',
url: "/rest/media",
//clickable: false,
acceptedFiles: acceptedMimeTypes.join(),
addRemoveLinks: true,
@ -42,13 +41,18 @@ $(document).ready(function () {
this.on("queuecomplete", function () {
uploadProgress = false;
});
}
},
};
$(window).bind('beforeunload', function () {
$(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?"),
"\n", "\n");
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?"
),
"\n",
"\n"
);
}
});
@ -68,12 +72,17 @@ $(document).ready(function () {
self.renderFileActions = function (data, type, full) {
if (full.import_status == 0) {
return '<a class="deleteFileAction">' + $.i18n._('Delete from Library') + '</a>';
return (
'<a class="deleteFileAction">' +
$.i18n._("Delete from Library") +
"</a>"
);
} else if (full.import_status == 1) {
//No actions for pending files
return $.i18n._('N/A');
} else { //Failed downloads
return '<a class="deleteFileAction">' + $.i18n._('Clear') + '</a>';
return $.i18n._("N/A");
} else {
//Failed downloads
return '<a class="deleteFileAction">' + $.i18n._("Clear") + "</a>";
}
};
@ -82,58 +91,66 @@ $(document).ready(function () {
// Some tips from the DataTables forums:
// fnGetData is used to get the object behind the row - you can also use
// fnGetPosition if you need to get the index instead
file = $("#recent_uploads_table").dataTable().fnGetData($(this).closest("tr")[0]);
file = $("#recent_uploads_table")
.dataTable()
.fnGetData($(this).closest("tr")[0]);
$.ajax({
type: 'DELETE',
url: 'rest/media/' + file.id + "?csrf_token=" + $("#csrf").attr('value'),
type: "DELETE",
url: "rest/media/" + file.id + "?csrf_token=" + $("#csrf").attr("value"),
success: function (resp) {
self.recentUploadsTable.fnDraw();
},
error: function () {
alert($.i18n._("Error: The file could not be deleted. Please try again later."));
}
alert(
$.i18n._(
"Error: The file could not be deleted. Please try again later."
)
);
},
});
});
self.setupRecentUploadsTable = function () {
return $("#recent_uploads_table").dataTable({
"bJQueryUI": true,
"bProcessing": false,
"bServerSide": true,
"sAjaxSource": '/plupload/recent-uploads/format/json',
"sAjaxDataProp": 'files',
"bSearchable": false,
"bInfo": true,
bJQueryUI: true,
bProcessing: false,
bServerSide: true,
sAjaxSource: "/plupload/recent-uploads/format/json",
sAjaxDataProp: "files",
bSearchable: false,
bInfo: true,
//"sScrollY": "200px",
"bFilter": false,
"bSort": false,
bFilter: false,
bSort: false,
//"sDom": '<"H">frtip<"F"l>',
"sDom": '<"dataTables_scrolling"frt><"F"lip>',
"bPaginate": true,
"sPaginationType": "full_numbers",
"oLanguage": getDatatablesStrings({
"sEmptyTable": $.i18n._("No files have been uploaded yet."),
"sInfoEmpty": $.i18n._("Showing 0 to 0 of 0 uploads"),
"sInfo": $.i18n._("Showing _START_ to _END_ of _TOTAL_ uploads"),
"sInfoFiltered": $.i18n._("(filtered from _MAX_ total uploads)"),
sDom: '<"dataTables_scrolling"frt><"F"lip>',
bPaginate: true,
sPaginationType: "full_numbers",
oLanguage: getDatatablesStrings({
sEmptyTable: $.i18n._("No files have been uploaded yet."),
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 uploads"),
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ uploads"),
sInfoFiltered: $.i18n._("(filtered from _MAX_ total uploads)"),
}),
"aoColumns": [
{"mData": "artist_name", "sTitle": $.i18n._("Creator")},
{"mData": "track_title", "sTitle": $.i18n._("Title")},
aoColumns: [
{ mData: "artist_name", sTitle: $.i18n._("Creator") },
{ mData: "track_title", sTitle: $.i18n._("Title") },
{
"mData": "import_status", "sTitle": $.i18n._("Import Status"),
"mRender": self.renderImportStatus
mData: "import_status",
sTitle: $.i18n._("Import Status"),
mRender: self.renderImportStatus,
},
{"mData": "utime", "sTitle": $.i18n._("Uploaded")},
{ mData: "utime", sTitle: $.i18n._("Uploaded") },
{
"mData": "id", "sTitle": $.i18n._("Actions"),
"mRender": self.renderFileActions
}
mData: "id",
sTitle: $.i18n._("Actions"),
mRender: self.renderFileActions,
},
],
"fnServerData": function (sSource, aoData, fnCallback) {
fnServerData: function (sSource, aoData, fnCallback) {
/* Add some extra data to the sender */
aoData.push({"name": "uploadFilter", "value": self.uploadFilter});
aoData.push({ name: "uploadFilter", value: self.uploadFilter });
$.getJSON(sSource, aoData, function (json) {
fnCallback(json);
if (json.files) {
@ -158,7 +175,7 @@ $(document).ready(function () {
getUsabilityHint();
}
});
}
},
});
};
@ -167,7 +184,8 @@ $(document).ready(function () {
self.isRecentUploadsRefreshTimerActive = false;
self.startRefreshingRecentUploads = function () {
if (!self.isRecentUploadsRefreshTimerActive) { //Prevent multiple timers from running
if (!self.isRecentUploadsRefreshTimerActive) {
//Prevent multiple timers from running
self.recentUploadsRefreshTimer = setInterval(function () {
self.recentUploadsTable.fnDraw();
}, 3000);
@ -214,6 +232,6 @@ $(document).ready(function () {
$("#upload_type").text(" Tracks");
$("#upload_type").css("color", "#ffffff");
}
Cookies.set('tt_upload', ttValue);
Cookies.set("tt_upload", ttValue);
});
});

View File

@ -8,7 +8,8 @@ var AIRTIME = (function (AIRTIME) {
mod = AIRTIME.podcast;
mod.episodeTables = {};
var endpoint = '/rest/podcast/', PodcastEpisodeTable;
var endpoint = "/rest/podcast/",
PodcastEpisodeTable;
/**
* PodcastController constructor.
@ -36,7 +37,7 @@ var AIRTIME = (function (AIRTIME) {
view.find("table").attr("id", "podcast_episodes_" + podcast.id);
self.onSaveCallback = function () {
var successMsg = $('.active-tab .btn-toolbar .success')
var successMsg = $(".active-tab .btn-toolbar .success");
successMsg.text($.i18n._("Podcast settings saved")).show("fast");
setTimeout(function () {
successMsg.hide("fast");
@ -49,13 +50,16 @@ var AIRTIME = (function (AIRTIME) {
* Save and update the podcast object.
*/
$scope.savePodcast = function () {
$http.put(endpoint + $scope.podcast.id, {csrf_token: $scope.csrf, podcast: $scope.podcast})
$http
.put(endpoint + $scope.podcast.id, {
csrf_token: $scope.csrf,
podcast: $scope.podcast,
})
.success(function () {
self.onSaveCallback();
});
};
/**
* Generate a smartblock and playlist for this smartblock.
*/
@ -66,21 +70,21 @@ var AIRTIME = (function (AIRTIME) {
{
csrf_token: $("#csrf").val(),
id: $scope.podcast.id,
title: $scope.podcast.title
title: $scope.podcast.title,
},
function () {
// show success message
var successMsg = $('.active-tab .pc-sb-success')
var successMsg = $(".active-tab .pc-sb-success");
successMsg.show("fast");
setTimeout(function () {
successMsg.hide("fast");
}, 5000);
// save podcast but do not display notification beside save button below
$http.put(endpoint + $scope.podcast.id,
{
$http
.put(endpoint + $scope.podcast.id, {
csrf_token: $scope.csrf,
podcast: $scope.podcast
podcast: $scope.podcast,
})
.success(function () {
AIRTIME.library.podcastDataTable.fnDraw();
@ -108,9 +112,6 @@ var AIRTIME = (function (AIRTIME) {
return self;
}
/**
* Initialize the controller.
*
@ -150,13 +151,19 @@ var AIRTIME = (function (AIRTIME) {
PodcastController.call(this, $scope, $http, podcast, tab);
this.onSaveCallback = function () {
$http({
method: 'POST',
url: '/preference/station-podcast-settings',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: { stationPodcastPrivacy: $("#podcast-settings").find("input:checked").val() }
method: "POST",
url: "/preference/station-podcast-settings",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
data: {
stationPodcastPrivacy: $("#podcast-settings")
.find("input:checked")
.val(),
},
}).success(function (data) {
jQuery.extend($scope.podcast, data);
$(".success").text($.i18n._("Podcast settings saved")).slideDown("fast");
$(".success")
.text($.i18n._("Podcast settings saved"))
.slideDown("fast");
setTimeout(function () {
$(".success").slideUp("fast");
}, 2000);
@ -170,16 +177,27 @@ var AIRTIME = (function (AIRTIME) {
*
* @type {PodcastController}
*/
StationPodcastController.prototype = Object.create(PodcastController.prototype);
StationPodcastController.prototype = Object.create(
PodcastController.prototype
);
/**
* Remove the selected episodes from the station podcast feed.
*/
StationPodcastController.prototype.unpublishSelectedEpisodes = function () {
var self = this, $scope = self.$scope,
var self = this,
$scope = self.$scope,
episodes = self.episodeTable.getSelectedRows();
jQuery.each(episodes, function () {
self.$http.delete(endpoint + $scope.podcast.id + '/episodes/' + this.id + '?csrf_token=' + $scope.csrf)
self.$http
.delete(
endpoint +
$scope.podcast.id +
"/episodes/" +
this.id +
"?csrf_token=" +
$scope.csrf
)
.success(function () {
self.reloadEpisodeTable();
});
@ -192,32 +210,43 @@ var AIRTIME = (function (AIRTIME) {
* @private
*/
StationPodcastController.prototype._initTable = function () {
var self = this, $scope = this.$scope,
var self = this,
$scope = this.$scope,
buttons = {
deleteBtn: {
title : $.i18n._('Unpublish'),
iconClass : 'icon-trash',
extraBtnClass : 'btn-danger',
elementId : '',
title: $.i18n._("Unpublish"),
iconClass: "icon-trash",
extraBtnClass: "btn-danger",
elementId: "",
eventHandlers: {
click: self.unpublishSelectedEpisodes.bind(self)
click: self.unpublishSelectedEpisodes.bind(self),
},
validateConstraints: function () {
return this.getSelectedRows().length >= 1;
}
}
},
},
},
params = {
sAjaxSource : endpoint + $scope.podcast.id + '/episodes',
sAjaxSource: endpoint + $scope.podcast.id + "/episodes",
aoColumns: [
// TODO: it might be wrong to use CcFiles here? We should alias this instead
/* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "CcFiles.track_title" , "sClass" : "podcast_episodes_title" , "sWidth" : "170px" },
/* Description */ { "sTitle" : $.i18n._("Description") , "mDataProp" : "CcFiles.description" , "sClass" : "podcast_episodes_description" , "sWidth" : "300px" }
]
/* Title */ {
sTitle: $.i18n._("Title"),
mDataProp: "CcFiles.track_title",
sClass: "podcast_episodes_title",
sWidth: "170px",
},
/* Description */ {
sTitle: $.i18n._("Description"),
mDataProp: "CcFiles.description",
sClass: "podcast_episodes_description",
sWidth: "300px",
},
],
};
this.episodeTable = AIRTIME.podcast.initPodcastEpisodeDatatable(
$('.podcast_episodes'),
$(".podcast_episodes"),
params,
buttons,
{
@ -225,10 +254,16 @@ var AIRTIME = (function (AIRTIME) {
podcastId: $scope.podcast.id,
emptyPlaceholder: {
iconClass: "icon-white icon-th-list",
html: $.i18n._("You haven't published any episodes!")
+ "<br/>" + $.i18n._("You can publish your uploaded content from the 'Tracks' view.")
+ "<br/><a target='_parent' href='/showbuilder#tracks'>" + $.i18n._("Try it now") + "</a>"
}
html:
$.i18n._("You haven't published any episodes!") +
"<br/>" +
$.i18n._(
"You can publish your uploaded content from the 'Tracks' view."
) +
"<br/><a target='_parent' href='/showbuilder#tracks'>" +
$.i18n._("Try it now") +
"</a>",
},
}
);
@ -257,9 +292,22 @@ var AIRTIME = (function (AIRTIME) {
*
* Bootstrapped for each podcast or Station podcast tab.
*/
mod.podcastApp = angular.module('podcast', [])
.controller('Podcast', ['$scope', '$http', 'podcast', 'tab', PodcastController])
.controller('StationPodcast', ['$scope', '$http', 'podcast', 'tab', StationPodcastController]);
mod.podcastApp = angular
.module("podcast", [])
.controller("Podcast", [
"$scope",
"$http",
"podcast",
"tab",
PodcastController,
])
.controller("StationPodcast", [
"$scope",
"$http",
"podcast",
"tab",
StationPodcastController,
]);
/**
* Implement bulk editing of podcasts in order to accommodate the existing selection
@ -288,7 +336,11 @@ var AIRTIME = (function (AIRTIME) {
});
if (ids.length > 0) {
$.post(endpoint + "bulk", {csrf_token: $("#csrf").val(), method: method, ids: ids}, callback);
$.post(
endpoint + "bulk",
{ csrf_token: $("#csrf").val(), method: method, ids: ids },
callback
);
}
}
@ -300,8 +352,8 @@ var AIRTIME = (function (AIRTIME) {
* @private
*/
function _bootstrapAngularApp(podcast, tab) {
mod.podcastApp.value('podcast', podcast);
mod.podcastApp.value('tab', tab);
mod.podcastApp.value("podcast", podcast);
mod.podcastApp.value("tab", tab);
var wrapper = tab.contents.find(".angular_wrapper");
angular.bootstrap(wrapper.get(0), ["podcast"]);
}
@ -329,32 +381,35 @@ var AIRTIME = (function (AIRTIME) {
$(".album_names.help_icon").qtip({
content: {
text: $.i18n._('Overwrite downloaded podcast episodes\' "Album" and "Creator" metadata tag with the Podcast Name specified above and set the track title to the title of the Podcast Episode. This album name can then be used as a search criteria by a smartblock. ')
text: $.i18n._(
'Overwrite downloaded podcast episodes\' "Album" and "Creator" metadata tag with the Podcast Name specified above and set the track title to the title of the Podcast Episode. This album name can then be used as a search criteria by a smartblock. '
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
}
at: "right center",
},
});
// Add podcast episode table in right-side panel below podcast edit form
var episodeTable = AIRTIME.podcast.initPodcastEpisodeDatatableWithButtonEvents(
var episodeTable =
AIRTIME.podcast.initPodcastEpisodeDatatableWithButtonEvents(
$("#podcast_episodes_" + podcast.id),
podcast.id.toString()
);
episodeTable.reload(podcast.id);
episodeTable.clearSelection()
episodeTable.clearSelection();
}
/**
@ -365,17 +420,32 @@ var AIRTIME = (function (AIRTIME) {
* @private
*/
function _initPodcastEpisodeTable() {
PodcastEpisodeTable = function(wrapperDOMNode, bItemSelection, toolbarButtons, dataTablesOptions, config) {
PodcastEpisodeTable = function (
wrapperDOMNode,
bItemSelection,
toolbarButtons,
dataTablesOptions,
config
) {
this.config = config; // Internal configuration object
this._setupImportListener();
// Call the superconstructor
return AIRTIME.widgets.Table.call(this, wrapperDOMNode, bItemSelection, toolbarButtons, dataTablesOptions, config.emptyPlaceholder);
return AIRTIME.widgets.Table.call(
this,
wrapperDOMNode,
bItemSelection,
toolbarButtons,
dataTablesOptions,
config.emptyPlaceholder
);
}; // Subclass AIRTIME.widgets.Table
PodcastEpisodeTable.prototype = Object.create(AIRTIME.widgets.Table.prototype);
PodcastEpisodeTable.prototype = Object.create(
AIRTIME.widgets.Table.prototype
);
PodcastEpisodeTable.prototype.constructor = PodcastEpisodeTable;
PodcastEpisodeTable.prototype._SELECTORS = Object.freeze({
SELECTION_CHECKBOX: ".airtime_table_checkbox:has(input)",
SELECTION_TABLE_ROW: "tr:has(td.airtime_table_checkbox > input)"
SELECTION_TABLE_ROW: "tr:has(td.airtime_table_checkbox > input)",
});
/**
@ -392,15 +462,34 @@ var AIRTIME = (function (AIRTIME) {
* @returns {string}
* @private
*/
PodcastEpisodeTable.prototype._datatablesCheckboxDataDelegate = function(rowData, callType, dataToSave) {
PodcastEpisodeTable.prototype._datatablesCheckboxDataDelegate = function (
rowData,
callType,
dataToSave
) {
var defaultIcon = "<span class='icon icon-circle-arrow-down'></span>",
importIcon = "<span class='sp-checked-icon checked-icon imported-flag'></span>",
importIcon =
"<span class='sp-checked-icon checked-icon imported-flag'></span>",
pendingIcon = "<span class='loading-icon'></span>";
if (this.config.hideIngestCheckboxes && rowData.ingested && rowData.ingested != 0) {
if (
this.config.hideIngestCheckboxes &&
rowData.ingested &&
rowData.ingested != 0
) {
return rowData.ingested > 0 ? importIcon : pendingIcon;
}
rowData.importIcon = (rowData.ingested != 0) ? (rowData.ingested > 0 ? importIcon : pendingIcon) : defaultIcon;
return AIRTIME.widgets.Table.prototype._datatablesCheckboxDataDelegate.call(this, rowData, callType, dataToSave);
rowData.importIcon =
rowData.ingested != 0
? rowData.ingested > 0
? importIcon
: pendingIcon
: defaultIcon;
return AIRTIME.widgets.Table.prototype._datatablesCheckboxDataDelegate.call(
this,
rowData,
callType,
dataToSave
);
};
/**
@ -414,13 +503,14 @@ var AIRTIME = (function (AIRTIME) {
// When using static source data, we instantiate an empty table
// and pass this function the ID of the podcast we want to display.
if (id) this.config.podcastId = id;
var self = this, dt = self._datatable;
var self = this,
dt = self._datatable;
dt.block({
message: "",
theme: true,
applyPlatformOpacityRules: false
applyPlatformOpacityRules: false,
});
$.get(endpoint + self.config.podcastId + '/episodes', function (json) {
$.get(endpoint + self.config.podcastId + "/episodes", function (json) {
dt.fnClearTable(false);
dt.fnAddData(JSON.parse(json));
}).done(function () {
@ -439,9 +529,11 @@ var AIRTIME = (function (AIRTIME) {
PodcastEpisodeTable.prototype._setupImportListener = function () {
var self = this;
self.importListener = setInterval(function () {
var podcastId = self.config.podcastId, pendingRows = [];
var podcastId = self.config.podcastId,
pendingRows = [];
if (!podcastId) return false;
var dt = self.getDatatable(), data = dt.fnGetData();
var dt = self.getDatatable(),
data = dt.fnGetData();
// Iterate over the table data to check for any rows pending import
$.each(data, function () {
if (this.ingested == -1) {
@ -451,11 +543,11 @@ var AIRTIME = (function (AIRTIME) {
if (pendingRows.length > 0) {
// Manually trigger the Celery task to update the internal
// task reference because the upload will often finish quickly
$.get('/api/poll-celery');
$.get("/api/poll-celery");
// Fetch the table data if there are pending rows,
// then check if any of the pending rows have
// succeeded or failed before reloading the table.
$.get(endpoint + podcastId + '/episodes', function (json) {
$.get(endpoint + podcastId + "/episodes", function (json) {
data = JSON.parse(json);
var delta = false;
$.each(data, function () {
@ -465,7 +557,8 @@ var AIRTIME = (function (AIRTIME) {
pendingRows.slice(idx, 0);
}
});
if (delta) { // Has there been a change?
if (delta) {
// Has there been a change?
// We already have the data, so there's no reason to call
// reload() here; this also provides a smoother transition
dt.fnClearTable(false);
@ -481,24 +574,24 @@ var AIRTIME = (function (AIRTIME) {
*/
PodcastEpisodeTable.prototype.destroy = function () {
clearInterval(this.importListener);
}
};
}
/**
* Create and show the URL dialog for podcast creation.
*/
mod.createUrlDialog = function () {
$.get('/render/podcast-url-dialog', function(json) {
$.get("/render/podcast-url-dialog", function (json) {
$(document.body).append(json.html);
$("#podcast_url_dialog").dialog({
title: $.i18n._("Add New Podcast"),
resizable: false,
modal: true,
width: '450px',
width: "450px",
height: 129,
close: function () {
$(this).remove();
}
},
});
});
};
@ -510,7 +603,10 @@ var AIRTIME = (function (AIRTIME) {
* FIXME: we should probably be passing the serialized form into this function instead
*/
mod.addPodcast = function () {
$.post(endpoint, $("#podcast_url_dialog").find("form").serialize(), function(json) {
$.post(
endpoint,
$("#podcast_url_dialog").find("form").serialize(),
function (json) {
// Refresh left-side library pane to show newly created podcast
AIRTIME.library.podcastDataTable.fnDraw();
@ -519,7 +615,8 @@ var AIRTIME = (function (AIRTIME) {
// open newly created podcast in right-side edit pane
_initAppFromResponse(json);
}).fail(function (e) {
}
).fail(function (e) {
var errors = $("#podcast_url_dialog").find(".errors");
errors.show(200).text(e.responseText);
setTimeout(function () {
@ -532,21 +629,35 @@ var AIRTIME = (function (AIRTIME) {
* Create a bulk request to edit all currently selected podcasts.
*/
mod.editSelectedPodcasts = function () {
_bulkAction(AIRTIME.library.podcastTableWidget.getSelectedRows(), HTTPMethods.GET, function(json) {
_bulkAction(
AIRTIME.library.podcastTableWidget.getSelectedRows(),
HTTPMethods.GET,
function (json) {
json.forEach(function (data) {
_initAppFromResponse(data);
});
});
}
);
};
/**
* Create a bulk request to delete all currently selected podcasts.
*/
mod.deleteSelectedPodcasts = function () {
if (confirm($.i18n._("Are you sure you want to delete the selected podcasts from your library?"))) {
_bulkAction(AIRTIME.library.podcastTableWidget.getSelectedRows(), HTTPMethods.DELETE, function () {
if (
confirm(
$.i18n._(
"Are you sure you want to delete the selected podcasts from your library?"
)
)
) {
_bulkAction(
AIRTIME.library.podcastTableWidget.getSelectedRows(),
HTTPMethods.DELETE,
function () {
AIRTIME.library.podcastDataTable.fnDraw();
});
}
);
}
};
@ -558,10 +669,15 @@ var AIRTIME = (function (AIRTIME) {
mod.editSelectedEpisodes = function (episodes) {
$.each(episodes, function () {
if (this.file && !Object.keys(this.file).length > 0) return false;
var fileId = this.file_id || this.file.id, uid = AIRTIME.library.MediaTypeStringEnum.FILE + "_" + fileId;
$.get(baseUrl + "library/edit-file-md/id/" + fileId, {format: "json"}, function (json) {
var fileId = this.file_id || this.file.id,
uid = AIRTIME.library.MediaTypeStringEnum.FILE + "_" + fileId;
$.get(
baseUrl + "library/edit-file-md/id/" + fileId,
{ format: "json" },
function (json) {
AIRTIME.playlist.fileMdEdit(json, uid);
});
}
);
});
};
@ -579,12 +695,16 @@ var AIRTIME = (function (AIRTIME) {
return false;
}
if (this.file && Object.keys(this.file).length > 0) return false;
$.post(endpoint + this.podcast_id + '/episodes', JSON.stringify({
$.post(
endpoint + this.podcast_id + "/episodes",
JSON.stringify({
csrf_token: $("#csrf").val(),
episode: this
}), function () {
episode: this,
}),
function () {
dt.reload(dt.config.podcastId);
});
}
);
remainingDiskSpace -= this.enclosure.length;
});
@ -607,8 +727,10 @@ var AIRTIME = (function (AIRTIME) {
/**
* Initialize the podcast episode table with working buttons
*/
mod.initPodcastEpisodeDatatableWithButtonEvents = function (domNode, podcastId) {
mod.initPodcastEpisodeDatatableWithButtonEvents = function (
domNode,
podcastId
) {
/**
* Check the import statuses of each selected episode to see which
* buttons should be enabled or disabled.
@ -620,7 +742,8 @@ var AIRTIME = (function (AIRTIME) {
* the button should be enabled, otherwise false.
*/
var checkSelectedEpisodeImportStatus = function (shouldBeImported) {
var selected = this.getSelectedRows(), isValid = true;
var selected = this.getSelectedRows(),
isValid = true;
if (selected.length == 0) return false;
$.each(selected, function () {
if (this.ingested < 0) isValid = false;
@ -634,72 +757,94 @@ var AIRTIME = (function (AIRTIME) {
// Setup the default buttons (new, edit, delete)
podcastEpisodeButtons = AIRTIME.widgets.Table.getStandardToolbarButtons();
$.extend(true, podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.NEW],
$.extend(
true,
podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.NEW],
{
title: $.i18n._("Import"),
eventHandlers: {
click: function () {
var episodes = mod.episodeTables[podcastId].getSelectedRows();
AIRTIME.podcast.importSelectedEpisodes(episodes, mod.episodeTables[podcastId]);
}
AIRTIME.podcast.importSelectedEpisodes(
episodes,
mod.episodeTables[podcastId]
);
},
},
validateConstraints: function () {
return checkSelectedEpisodeImportStatus.call(this, false);
},
}
});
$.extend(true, podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.EDIT],
);
$.extend(
true,
podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.EDIT],
{
eventHandlers: {
click: function () {
var episodes = mod.episodeTables[podcastId].getSelectedRows();
AIRTIME.podcast.editSelectedEpisodes(episodes);
}
},
},
validateConstraints: function () {
return checkSelectedEpisodeImportStatus.call(this, true);
},
}
});
$.extend(true, podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.DELETE],
);
$.extend(
true,
podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.DELETE],
{
eventHandlers: {
click: function () {
var data = [], episodes = mod.episodeTables[podcastId].getSelectedRows();
var data = [],
episodes = mod.episodeTables[podcastId].getSelectedRows();
$.each(episodes, function () {
data.push({ id: this.file.id, type: this.file.ftype });
});
AIRTIME.podcast.deleteSelectedEpisodes(data, podcastId);
}
},
},
validateConstraints: function () {
return checkSelectedEpisodeImportStatus.call(this, true);
},
}
});
);
// Reassign these because integer keys take precedence in iteration order - we want to order based on insertion
// FIXME: this is a pretty flimsy way to try to set up iteration order (possibly not xbrowser compatible?)
podcastEpisodeButtons = {
newBtn : podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.NEW],
editBtn: podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.EDIT],
delBtn : podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.DELETE]
newBtn:
podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.NEW],
editBtn:
podcastEpisodeButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.EDIT],
delBtn:
podcastEpisodeButtons[
AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.DELETE
],
};
$.extend(true, podcastEpisodeButtons, {
addToScheduleBtn: {
title : $.i18n._('Add to Schedule'),
iconClass : 'icon-plus',
extraBtnClass : 'btn-small',
elementId : '',
title: $.i18n._("Add to Schedule"),
iconClass: "icon-plus",
extraBtnClass: "btn-small",
elementId: "",
eventHandlers: {
click: function () {
var data = [], selected = AIRTIME.podcast.episodeTables[podcastId].getSelectedRows();
$.each(selected, function () { data.push(this.file); });
var data = [],
selected =
AIRTIME.podcast.episodeTables[podcastId].getSelectedRows();
$.each(selected, function () {
data.push(this.file);
});
AIRTIME.library.addToSchedule(data);
}
},
},
validateConstraints: function () {
// TODO: change text + behaviour for playlists, smart blocks, etc.
return checkSelectedEpisodeImportStatus.call(this, true);
}
},
},
viewDescBtn: {
title: $.i18n._("View"),
@ -709,12 +854,12 @@ var AIRTIME = (function (AIRTIME) {
eventHandlers: {
click: function () {
AIRTIME.library.openPodcastEpisodeDialog(podcastId);
}
},
},
validateConstraints: function () {
return this.getSelectedRows().length == 1;
}
}
},
},
});
mod.episodeTables[podcastId] = AIRTIME.podcast.initPodcastEpisodeDatatable(
@ -725,10 +870,16 @@ var AIRTIME = (function (AIRTIME) {
hideIngestCheckboxes: false,
emptyPlaceholder: {
iconClass: "icon-white icon-th-list",
html: $.i18n._("This podcast doesn't have any episodes!")
+ "<br/>" + $.i18n._("Make sure the RSS feed contains audio items (with enclosure tags).")
+ "<br/><a target='_blank' href='http://www.apple.com/ca/itunes/podcasts/specs.html'>" + $.i18n._("Learn about podcasts") + "</a>"
}
html:
$.i18n._("This podcast doesn't have any episodes!") +
"<br/>" +
$.i18n._(
"Make sure the RSS feed contains audio items (with enclosure tags)."
) +
"<br/><a target='_blank' href='http://www.apple.com/ca/itunes/podcasts/specs.html'>" +
$.i18n._("Learn about podcasts") +
"</a>",
},
}
);
@ -738,8 +889,12 @@ var AIRTIME = (function (AIRTIME) {
if (!$.isEmptyObject(data.file)) {
mod.dblClickAdd(data.file, data.file.ftype);
} else {
if (data.ingested >= 0) { // Only import if the file isn't pending
AIRTIME.podcast.importSelectedEpisodes([data], mod.episodeTables[podcastId]);
if (data.ingested >= 0) {
// Only import if the file isn't pending
AIRTIME.podcast.importSelectedEpisodes(
[data],
mod.episodeTables[podcastId]
);
}
}
});
@ -759,16 +914,56 @@ var AIRTIME = (function (AIRTIME) {
*
* @returns {Table} the created Table object
*/
mod.initPodcastEpisodeDatatable = function (domNode, params, buttons, config) {
mod.initPodcastEpisodeDatatable = function (
domNode,
params,
buttons,
config
) {
params = $.extend(true, params, {
aoColumns: [
/* GUID */ { "sTitle" : "" , "mDataProp" : "guid" , "sClass" : "podcast_episodes_guid" , "bVisible" : false },
/* Ingested */ { "sTitle" : $.i18n._("Imported?") , "mDataProp" : "importIcon" , "sClass" : "podcast_episodes_imported" , "sWidth" : "120px" },
/* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "title" , "sClass" : "podcast_episodes_title" , "sWidth" : "170px" },
/* Author */ { "sTitle" : $.i18n._("Author") , "mDataProp" : "author" , "sClass" : "podcast_episodes_author" , "sWidth" : "170px" },
/* Description */ { "sTitle" : $.i18n._("Description") , "mDataProp" : "description" , "sClass" : "podcast_episodes_description" , "sWidth" : "300px" },
/* Link */ { "sTitle" : $.i18n._("Link") , "mDataProp" : "link" , "sClass" : "podcast_episodes_link" , "sWidth" : "170px" },
/* Publication Date */ { "sTitle" : $.i18n._("Publication Date") , "mDataProp" : "pub_date" , "sClass" : "podcast_episodes_pub_date" , "sWidth" : "170px" }
/* GUID */ {
sTitle: "",
mDataProp: "guid",
sClass: "podcast_episodes_guid",
bVisible: false,
},
/* Ingested */ {
sTitle: $.i18n._("Imported?"),
mDataProp: "importIcon",
sClass: "podcast_episodes_imported",
sWidth: "120px",
},
/* Title */ {
sTitle: $.i18n._("Title"),
mDataProp: "title",
sClass: "podcast_episodes_title",
sWidth: "170px",
},
/* Author */ {
sTitle: $.i18n._("Author"),
mDataProp: "author",
sClass: "podcast_episodes_author",
sWidth: "170px",
},
/* Description */ {
sTitle: $.i18n._("Description"),
mDataProp: "description",
sClass: "podcast_episodes_description",
sWidth: "300px",
},
/* Link */ {
sTitle: $.i18n._("Link"),
mDataProp: "link",
sClass: "podcast_episodes_link",
sWidth: "170px",
},
/* Publication Date */ {
sTitle: $.i18n._("Publication Date"),
mDataProp: "pub_date",
sClass: "podcast_episodes_pub_date",
sWidth: "170px",
},
],
bServerSide: false,
sAjaxSource: null,
@ -778,39 +973,63 @@ var AIRTIME = (function (AIRTIME) {
oColVis: {
buttonText: $.i18n._("Columns"),
iOverlayFade: 0,
aiExclude: [0, 1, 2]
aiExclude: [0, 1, 2],
},
bDeferRender: true,
oColReorder: {
iFixedColumns: 3 // Checkbox + imported
iFixedColumns: 3, // Checkbox + imported
},
fnCreatedRow: function (nRow, aData, iDataIndex) {
var self = this;
if (aData.file && Object.keys(aData.file).length > 0) {
$(nRow).draggable({
helper: function () {
var $row = $(this), data = self._datatable.fnGetData(nRow);
var $row = $(this),
data = self._datatable.fnGetData(nRow);
$row.data("aData", data.file);
self.selectRow(this, data, self.SELECTION_MODE.SINGLE, $row.index());
var selected = self.getSelectedRows().length, container,
width = self._$wrapperDOMNode.closest(".dataTables_wrapper").outerWidth(), message;
self.selectRow(
this,
data,
self.SELECTION_MODE.SINGLE,
$row.index()
);
var selected = self.getSelectedRows().length,
container,
width = self._$wrapperDOMNode
.closest(".dataTables_wrapper")
.outerWidth(),
message;
message = sprintf($.i18n._(selected > 1 ? "Adding %s Items" : "Adding %s Item"), selected);
container = $('<div/>').attr('id', 'draggingContainer').append('<tr/>')
.find("tr").append('<td/>').find("td")
.attr("colspan", 100).width(width).css("max-width", "none")
.addClass("ui-state-highlight").append(message).end().end();
message = sprintf(
$.i18n._(selected > 1 ? "Adding %s Items" : "Adding %s Item"),
selected
);
container = $("<div/>")
.attr("id", "draggingContainer")
.append("<tr/>")
.find("tr")
.append("<td/>")
.find("td")
.attr("colspan", 100)
.width(width)
.css("max-width", "none")
.addClass("ui-state-highlight")
.append(message)
.end()
.end();
return container;
},
tolerance: 'pointer',
cursor: 'move',
tolerance: "pointer",
cursor: "move",
cursorAt: {
top: 20,
left: Math.floor(self._datatable.outerWidth() / 2)
left: Math.floor(self._datatable.outerWidth() / 2),
},
distance: 25, // min-distance for dragging
connectToSortable: $("#show_builder_table, .active-tab .spl_sortable")
connectToSortable: $(
"#show_builder_table, .active-tab .spl_sortable"
),
});
}
},
@ -818,11 +1037,15 @@ var AIRTIME = (function (AIRTIME) {
AIRTIME.library.drawEmptyPlaceholder(this);
// Hide the processing div
var dt = this.getDatatable();
!dt || dt.closest(".dataTables_wrapper").find(".dataTables_processing").css("visibility", "hidden");
}
!dt ||
dt
.closest(".dataTables_wrapper")
.find(".dataTables_processing")
.css("visibility", "hidden");
},
});
if (typeof PodcastEpisodeTable === 'undefined') {
if (typeof PodcastEpisodeTable === "undefined") {
_initPodcastEpisodeTable();
}
@ -839,7 +1062,7 @@ var AIRTIME = (function (AIRTIME) {
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});
$(document).ready(function () {
$(document).on("submit", "#podcast_url_form", function (e) {

View File

@ -1,4 +1,3 @@
var AIRTIME = (function (AIRTIME) {
var mod;
@ -8,13 +7,14 @@ var AIRTIME = (function (AIRTIME) {
mod = AIRTIME.publish;
var endpoint = 'rest/media/';
var dialogUrl = 'library/publish-dialog';
var PUBLISH_APP_NAME = 'publish';
var endpoint = "rest/media/";
var dialogUrl = "library/publish-dialog";
var PUBLISH_APP_NAME = "publish";
//AngularJS app
var publishApp = angular.module(PUBLISH_APP_NAME, [])
.controller('Publish', function ($sce, $scope, $http, mediaId, tab) {
var publishApp = angular
.module(PUBLISH_APP_NAME, [])
.controller("Publish", function ($sce, $scope, $http, mediaId, tab) {
$scope.publishData = {};
var sourceInterval;
@ -30,7 +30,8 @@ var AIRTIME = (function (AIRTIME) {
function fetchSourceData() {
var csrfToken = jQuery("#csrf").val();
$http.get(endpoint + mediaId, {csrf_token: csrfToken})
$http
.get(endpoint + mediaId, { csrf_token: csrfToken })
.success(function (json) {
$scope.media = json;
tab.setName($scope.media.track_title);
@ -38,7 +39,10 @@ var AIRTIME = (function (AIRTIME) {
// Get an object containing all sources, their translated labels,
// and their publication state for the file with the given ID
$http.get(endpoint + mediaId + '/publish-sources', {csrf_token: csrfToken})
$http
.get(endpoint + mediaId + "/publish-sources", {
csrf_token: csrfToken,
})
.success(function (json) {
$scope.sources = { toPublish: [], published: [] };
$.each(json, function () {
@ -63,24 +67,31 @@ var AIRTIME = (function (AIRTIME) {
});
}
$scope.openEditDialog = function () {
var uid = AIRTIME.library.MediaTypeStringEnum.FILE + "_" + mediaId;
$.get(baseUrl + "library/edit-file-md/id/" + mediaId, {format: "json"}, function (json) {
$.get(
baseUrl + "library/edit-file-md/id/" + mediaId,
{ format: "json" },
function (json) {
AIRTIME.playlist.fileMdEdit(json, uid);
});
}
);
};
$scope.publish = function () {
var data = {};
jQuery.each($scope.publishData, function (k, v) {
if (v) {
data[k] = 'publish'; // FIXME: should be more robust
data[k] = "publish"; // FIXME: should be more robust
}
});
if (data && Object.keys(data).length > 0) {
$http.put(endpoint + mediaId + '/publish', {csrf_token: jQuery("#csrf").val(), sources: data})
$http
.put(endpoint + mediaId + "/publish", {
csrf_token: jQuery("#csrf").val(),
sources: data,
})
.success(function () {
tab.contents.find(".publish-btn").prop("disabled", true);
fetchSourceData();
@ -92,8 +103,12 @@ var AIRTIME = (function (AIRTIME) {
$scope.remove = function (source) {
var data = {};
data[source] = 'unpublish'; // FIXME: should be more robust
$http.put(endpoint + mediaId + '/publish', {csrf_token: jQuery("#csrf").val(), sources: data})
data[source] = "unpublish"; // FIXME: should be more robust
$http
.put(endpoint + mediaId + "/publish", {
csrf_token: jQuery("#csrf").val(),
sources: data,
})
.success(function () {
fetchSourceData();
});
@ -107,7 +122,6 @@ var AIRTIME = (function (AIRTIME) {
init();
});
/*
var selected = $("#podcast_table").find(".selected"),
ids = [];
@ -117,8 +131,8 @@ var AIRTIME = (function (AIRTIME) {
});*/
function _bootstrapAngularApp(mediaId, tab) {
publishApp.value('mediaId', mediaId);
publishApp.value('tab', tab);
publishApp.value("mediaId", mediaId);
publishApp.value("tab", tab);
var wrapper = AIRTIME.tabs.getActiveTab().contents.find(".angular_wrapper");
angular.bootstrap(wrapper.get(0), [PUBLISH_APP_NAME]);
}
@ -138,14 +152,17 @@ var AIRTIME = (function (AIRTIME) {
});
});
});*/
};
mod.openPublishDialog = function (mediaId) {
jQuery.get(dialogUrl, { csrf_token: jQuery("#csrf").val() })
jQuery
.get(dialogUrl, { csrf_token: jQuery("#csrf").val() })
.success(function (html) {
var tab = AIRTIME.tabs.openTab(html, PUBLISH_APP_NAME+"_"+mediaId, null);
var tab = AIRTIME.tabs.openTab(
html,
PUBLISH_APP_NAME + "_" + mediaId,
null
);
_bootstrapAngularApp(mediaId, tab);
});
@ -165,4 +182,4 @@ var AIRTIME = (function (AIRTIME) {
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,25 @@
$(document).ready(function () {
listenerstat_content = $("#listenerstat_content")
dateStartId = "#his_date_start",
timeStartId = "#his_time_start",
dateEndId = "#his_date_end",
timeEndId = "#his_time_end";
listenerstat_content = $("#listenerstat_content");
(dateStartId = "#his_date_start"),
(timeStartId = "#his_time_start"),
(dateEndId = "#his_date_end"),
(timeEndId = "#his_time_end");
// set width dynamically
var width = $("#listenerstat_content").width();
width = width * .91;
width = width * 0.91;
$("#listenerstat_content").find("#flot_placeholder").width(width);
$("#listenerstat_content").find("#legend").width(width);
getDataAndPlot();
listenerstat_content.find("#his_submit").click(function () {
var oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId);
var oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
var start = oRange.start;
var end = oRange.end;
getDataAndPlot(start, end);
@ -25,7 +30,7 @@ $(document).ready(function() {
* Toggle a spinner overlay so the user knows the page is processing
*/
function toggleOverlay() {
$('#flot_placeholder').toggleClass('processing');
$("#flot_placeholder").toggleClass("processing");
}
function getDataAndPlot(startTimestamp, endTimestamp) {
@ -33,7 +38,10 @@ function getDataAndPlot(startTimestamp, endTimestamp) {
toggleOverlay();
// get data
$.get(baseUrl+'Listenerstat/get-data', {start: startTimestamp, end: endTimestamp}, function(data){
$.get(
baseUrl + "Listenerstat/get-data",
{ start: startTimestamp, end: endTimestamp },
function (data) {
out = new Object();
$.each(data, function (mpName, v) {
plotData = new Object();
@ -43,105 +51,122 @@ function getDataAndPlot(startTimestamp, endTimestamp) {
var d = new Date(0);
d.setUTCSeconds(ele.timestamp);
plotData.data.push([d, ele.listener_count]);
})
});
out[mpName] = plotData;
});
plot(out);
// Turn off the processing overlay
toggleOverlay();
})
}
);
}
function plot(datasets) {
var plot;
data = null;
function plotByChoice(doAll)
{
function plotByChoice(doAll) {
// largest date object that you can set
firstTimestamp = new Date(8640000000000000);
// smallest
lastTimestamp = new Date(0);
data = [];
if (doAll != null)
{
if (doAll != null) {
$.each(datasets, function (key, val) {
if (firstTimestamp.getTime() > val.data[0][0].getTime()) {
firstTimestamp = val.data[0][0];
}
if (lastTimestamp.getTime() < val.data[val.data.length-1][0].getTime()) {
if (
lastTimestamp.getTime() < val.data[val.data.length - 1][0].getTime()
) {
lastTimestamp = val.data[val.data.length - 1][0];
}
data.push(val);
});
}
else
{
$('#legend .legendCB').each(
function(){
if (this.checked)
{
} else {
$("#legend .legendCB").each(function () {
if (this.checked) {
data.push(datasets[this.id]);
if (firstTimestamp.getTime() > datasets[this.id].data[0][0].getTime()) {
if (
firstTimestamp.getTime() > datasets[this.id].data[0][0].getTime()
) {
firstTimestamp = datasets[this.id].data[0][0];
}
if (lastTimestamp.getTime() < datasets[this.id].data[datasets[this.id].data.length-1][0].getTime()) {
lastTimestamp = datasets[this.id].data[datasets[this.id].data.length-1][0];
if (
lastTimestamp.getTime() <
datasets[this.id].data[
datasets[this.id].data.length - 1
][0].getTime()
) {
lastTimestamp =
datasets[this.id].data[datasets[this.id].data.length - 1][0];
}
} else {
data.push({ label: this.id, data: [] });
}
else
{
data.push({label: this.id, data: []})
}
}
);
});
}
numOfTicks = 10;
tickSize = (lastTimestamp.getTime() - firstTimestamp.getTime())/1000/numOfTicks;
tickSize =
(lastTimestamp.getTime() - firstTimestamp.getTime()) / 1000 / numOfTicks;
plot = $.plot($("#flot_placeholder"), data, {
yaxis: { min: 0, tickDecimals: 0, color: '#d6d6d6', tickColor: '#d6d6d6' },
xaxis: { mode: "time", timeformat:"%y/%m/%0d %H:%M", tickSize: [tickSize, "second"],
color: '#d6d6d6', tickColor: '#d6d6d6' },
yaxis: {
min: 0,
tickDecimals: 0,
color: "#d6d6d6",
tickColor: "#d6d6d6",
},
xaxis: {
mode: "time",
timeformat: "%y/%m/%0d %H:%M",
tickSize: [tickSize, "second"],
color: "#d6d6d6",
tickColor: "#d6d6d6",
},
grid: {
hoverable: true,
backgroundColor: { colors: ["#333", "#555"] }
backgroundColor: { colors: ["#333", "#555"] },
},
series: {
lines: {
show: true,
fill: 0.3
fill: 0.3,
},
points: { show: true }
points: { show: true },
},
legend: {
container: $('#legend'),
container: $("#legend"),
noColumns: 5,
color: '#c0c0c0',
color: "#c0c0c0",
labelFormatter: function (label, series) {
var cb = '<input style="float:left;" class="legendCB" type="checkbox" ';
var cb =
'<input style="float:left;" class="legendCB" type="checkbox" ';
if (series.data.length > 0) {
cb += 'checked="true" ';
}
cb += 'id="' + label + '" /> ';
cb += label;
return cb;
}
}
},
},
});
function showTooltip(x, y, contents) {
$('<div id="tooltip">' + contents + '</div>').css( {
position: 'absolute',
display: 'none',
$('<div id="tooltip">' + contents + "</div>")
.css({
position: "absolute",
display: "none",
top: y + 5,
left: x + 5,
border: '1px solid #fdd',
padding: '2px',
'background-color': '#fee',
opacity: 0.80
}).appendTo("body").fadeIn(200);
border: "1px solid #fdd",
padding: "2px",
"background-color": "#fee",
opacity: 0.8,
})
.appendTo("body")
.fadeIn(200);
}
var previousPoint = null;
@ -153,28 +178,38 @@ function plot(datasets){
$("#tooltip").remove();
var y = item.datapoint[1].toFixed(2);
showTooltip(item.pageX, item.pageY,
sprintf($.i18n._("Listener Count on %s: %s"), item.series.label, Math.floor(y)));
showTooltip(
item.pageX,
item.pageY,
sprintf(
$.i18n._("Listener Count on %s: %s"),
item.series.label,
Math.floor(y)
)
);
}
}
else {
} else {
$("#tooltip").remove();
previousPoint = null;
}
});
$('#legend').find("input").click(function(){setTimeout(plotByChoice,100);});
$("#legend")
.find("input")
.click(function () {
setTimeout(plotByChoice, 100);
});
}
plotByChoice(true);
oBaseDatePickerSettings = {
dateFormat: 'yy-mm-dd',
dateFormat: "yy-mm-dd",
//i18n_months, i18n_days_short are in common.js
monthNames: i18n_months,
dayNamesMin: i18n_days_short,
onSelect: function (sDate, oDatePicker) {
$(this).datepicker("setDate", sDate);
}
},
};
oBaseTimePickerSettings = {
@ -182,9 +217,9 @@ function plot(datasets){
showCloseButton: true,
closeButtonText: $.i18n._("Done"),
showLeadingZero: false,
defaultTime: '0:00',
defaultTime: "0:00",
hourText: $.i18n._("Hour"),
minuteText: $.i18n._("Minute")
minuteText: $.i18n._("Minute"),
};
listenerstat_content.find(dateStartId).datepicker(oBaseDatePickerSettings);

View File

@ -1,19 +1,24 @@
$(document).ready(function () {
showlistenerstat_content = $("#showlistenerstat_content")
dateStartId = "#his_date_start",
timeStartId = "#his_time_start",
dateEndId = "#his_date_end",
timeEndId = "#his_time_end",
show_id = "#his_show_filter";
showlistenerstat_content = $("#showlistenerstat_content");
(dateStartId = "#his_date_start"),
(timeStartId = "#his_time_start"),
(dateEndId = "#his_date_end"),
(timeEndId = "#his_time_end"),
(show_id = "#his_show_filter");
// set width dynamically
var width = $("#showlistenerstat_content").width();
width = width * .91;
width = width * 0.91;
addDatePicker();
showlistenerstat_content.find("#his_submit").click(function () {
// var show_id = $("#sb_show_filter").val();
var oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId);
var oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
var start = oRange.start;
var end = oRange.end;
showListenerDataTable();
@ -22,105 +27,144 @@ $(document).ready(function() {
function getShowData(startTimestamp, endTimestamp, show_id) {
// get data
$.get(baseUrl+'Listenerstat/get-all-show-data', {start: startTimestamp, end: endTimestamp }, function(data) {
$.get(
baseUrl + "Listenerstat/get-all-show-data",
{ start: startTimestamp, end: endTimestamp },
function (data) {
return data;
});
}
);
}
function addDatePicker() {
oBaseDatePickerSettings = {
dateFormat: 'yy-mm-dd',
dateFormat: "yy-mm-dd",
//i18n_months, i18n_days_short are in common.js
monthNames: i18n_months,
dayNamesMin: i18n_days_short,
onSelect: function (sDate, oDatePicker) {
$(this).datepicker("setDate", sDate);
},
onClose: validateTimeRange
onClose: validateTimeRange,
};
oBaseTimePickerSettings = {
showPeriodLabels: false,
showCloseButton: true,
closeButtonText: $.i18n._("Done"),
showLeadingZero: false,
defaultTime: '0:00',
defaultTime: "0:00",
hourText: $.i18n._("Hour"),
minuteText: $.i18n._("Minute"),
onClose: validateTimeRange
onClose: validateTimeRange,
};
showlistenerstat_content.find(dateStartId).datepicker(oBaseDatePickerSettings).blur(validateTimeRange());
showlistenerstat_content.find(timeStartId).timepicker(oBaseTimePickerSettings).blur(validateTimeRange());
showlistenerstat_content.find(dateEndId).datepicker(oBaseDatePickerSettings).blur(validateTimeRange());
showlistenerstat_content.find(timeEndId).timepicker(oBaseTimePickerSettings).blur(validateTimeRange());
showlistenerstat_content
.find(dateStartId)
.datepicker(oBaseDatePickerSettings)
.blur(validateTimeRange());
showlistenerstat_content
.find(timeStartId)
.timepicker(oBaseTimePickerSettings)
.blur(validateTimeRange());
showlistenerstat_content
.find(dateEndId)
.datepicker(oBaseDatePickerSettings)
.blur(validateTimeRange());
showlistenerstat_content
.find(timeEndId)
.timepicker(oBaseTimePickerSettings)
.blur(validateTimeRange());
}
function getStartEnd() {
return AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId);
return AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
}
function validateTimeRange() {
var oRange,
inputs = $('.date_form > input'),
error_window = $('.error_window'),
start, end;
inputs = $(".date_form > input"),
error_window = $(".error_window"),
start,
end;
oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId);
oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
start = oRange.start;
end = oRange.end;
if (end >= start) {
error_window.removeClass('error');
$('.error_window').html('');
}
else {
error_window.addClass('error');
console.log('bad')
$('.error_window').html('Your start date time is after your end date time');
error_window.removeClass("error");
$(".error_window").html("");
} else {
error_window.addClass("error");
console.log("bad");
$(".error_window").html("Your start date time is after your end date time");
}
return {
start: start,
end: end,
isValid: end >= start
isValid: end >= start,
};
}
function showListenerDataTable() {
var oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId, dateEndId, timeEndId);
var oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
var start = oRange.start;
var lengthMenu = [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, $.i18n._("All")]];
var lengthMenu = [
[10, 25, 50, 100, 500, -1],
[10, 25, 50, 100, 500, $.i18n._("All")],
];
var end = oRange.end;
var sDom = 'l<"dt-process-rel"r><"H"T><"dataTables_scrolling"t><"F"ip>';
var show_id = $("#sb_show_filter").val();
var dt = $('#show_stats_datatable');
var dt = $("#show_stats_datatable");
info = getStartEnd();
dt.dataTable({
"aoColumns": [
/* first name */ {"sName": "show", "mDataProp": "show"},
/* air date */ {"sName": "time", "mDataProp": "time"},
/* last name */ {"sName": "average_number_of_listeners", "mDataProp": "average_number_of_listeners"},
/* last name */ {"sName": "maximum_number_of_listeners", "mDataProp": "maximum_number_of_listeners"}],
"sAjaxSource": baseUrl+'Listenerstat/get-all-show-data',
"sAjaxDataProp": "",
"bDestroy": true,
"aLengthMenu": lengthMenu,
"iDisplayLength": 25,
"sPaginationType": "full_numbers",
"bJQueryUI": true,
"bAutoWidth": true,
"sDom": sDom,
"fnServerData": function ( sSource, aoData, fnCallback ) {
aoData.push({"start": start, "end": end});
aoColumns: [
/* first name */ { sName: "show", mDataProp: "show" },
/* air date */ { sName: "time", mDataProp: "time" },
/* last name */ {
sName: "average_number_of_listeners",
mDataProp: "average_number_of_listeners",
},
/* last name */ {
sName: "maximum_number_of_listeners",
mDataProp: "maximum_number_of_listeners",
},
],
sAjaxSource: baseUrl + "Listenerstat/get-all-show-data",
sAjaxDataProp: "",
bDestroy: true,
aLengthMenu: lengthMenu,
iDisplayLength: 25,
sPaginationType: "full_numbers",
bJQueryUI: true,
bAutoWidth: true,
sDom: sDom,
fnServerData: function (sSource, aoData, fnCallback) {
aoData.push({ start: start, end: end });
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": {"start": start, "end": end},
"success": fnCallback
dataType: "json",
type: "POST",
url: sSource,
data: { start: start, end: end },
success: fnCallback,
});
},
});

View File

@ -4,6 +4,6 @@ $(window).load(function() {
$(document).ready(function () {
$("#submit").click(function () {
Cookies.set('airtime_locale', $('#locale').val(), {path: '/'});
Cookies.set("airtime_locale", $("#locale").val(), { path: "/" });
});
});

View File

@ -1,5 +1,4 @@
$(document).ready(function () {
var dialog = $("#lang-timezone-popup");
dialog.dialog({
@ -8,8 +7,8 @@ $(document).ready(function() {
resizable: false,
modal: true,
closeOnEscape: false,
position:['center','center'],
dialogClass: 'no-close',
position: ["center", "center"],
dialogClass: "no-close",
buttons: [
/* Testing removing the Not Now button for higher engagement
{
@ -23,12 +22,12 @@ $(document).ready(function() {
{
id: "help_airtime",
text: $.i18n._("OK"),
"class": "btn",
class: "btn",
click: function () {
$("#lang-timezone-form").submit();
}
}
]
},
},
],
});
var language = window.navigator.userLanguage || window.navigator.language;
@ -38,8 +37,8 @@ $(document).ready(function() {
language = language.replace("-", "_");
$("#setup_language").val(language);
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(utc);
dayjs.extend(timezone);
var timezone_name = dayjs.tz.guess();
if (timezone_name === undefined) {
@ -47,5 +46,5 @@ $(document).ready(function() {
}
$("#setup_timezone").val(timezone_name);
dialog.dialog('open');
dialog.dialog("open");
});

View File

@ -1,7 +1,8 @@
$(document).ready(function () {
function doNotShowPopup() {
$.get(baseUrl+"Usersettings/donotshowregistrationpopup", {format:"json"});
$.get(baseUrl + "Usersettings/donotshowregistrationpopup", {
format: "json",
});
}
var dialog = $("#register_popup");
@ -11,82 +12,84 @@ $(document).ready(function(){
width: 500,
resizable: false,
modal: true,
position:['center',50],
position: ["center", 50],
close: doNotShowPopup,
buttons: [
{
id: "remind_me",
text: $.i18n._("Remind me in 1 week"),
"class": "btn",
class: "btn",
click: function () {
var url = baseUrl+'Usersettings/remindme';
var url = baseUrl + "Usersettings/remindme";
$.ajax({
url: url,
data: {format:"json"}
data: { format: "json" },
});
$(this).dialog("close");
}
},
},
{
id: "remind_never",
text: $.i18n._("Remind me never"),
"class": "btn",
class: "btn",
click: function () {
var url =baseUrl+'Usersettings/remindme-never';
var url = baseUrl + "Usersettings/remindme-never";
$.ajax({
url: url,
data: {format:"json"}
data: { format: "json" },
});
$(this).dialog("close");
}
},
},
{
id: "help_airtime",
text: sprintf($.i18n._("Yes, help %s"), PRODUCT_NAME),
"class": "btn",
class: "btn",
click: function () {
$("#register-form").submit();
}
}
]
},
},
],
});
var button = $("#help_airtime");
if ($("#link_to_terms_and_condition").length > 0) {
button.removeAttr('disabled').removeClass('ui-state-disabled');
button.removeAttr("disabled").removeClass("ui-state-disabled");
} else {
button.attr('disabled', 'disabled' ).addClass('ui-state-disabled');
button.attr("disabled", "disabled").addClass("ui-state-disabled");
}
dialog.dialog('open');
dialog.dialog("open");
$('.collapsible-header').live('click',function() {
$(this).next().toggle('fast');
$(".collapsible-header")
.live("click", function () {
$(this).next().toggle("fast");
$(this).toggleClass("close");
return false;
}).next().hide();
})
.next()
.hide();
$("#SupportFeedback").live('click', function(){
$("#SupportFeedback").live("click", function () {
var pub = $("#Publicise");
var privacy = $("#Privacy");
var button = $("#help_airtime");
if( !$(this).is(':checked') ){
if (!$(this).is(":checked")) {
pub.removeAttr("checked");
pub.attr("disabled", true);
$("#public-info").hide();
button.attr('disabled', 'disabled' ).addClass('ui-state-disabled');
button.attr("disabled", "disabled").addClass("ui-state-disabled");
} else {
pub.removeAttr("disabled");
if(privacy.length == 0 || privacy.is(':checked')){
button.removeAttr('disabled').removeClass('ui-state-disabled');
if (privacy.length == 0 || privacy.is(":checked")) {
button.removeAttr("disabled").removeClass("ui-state-disabled");
}
}
});
var promote = $("#Publicise");
promote.live('click', function(){
if($(this).is(':checked')){
promote.live("click", function () {
if ($(this).is(":checked")) {
$("#public-info").show();
} else {
$("#public-info").hide();
@ -96,28 +99,31 @@ $(document).ready(function(){
$("#public-info").show();
}
$("#Privacy").live('click', function(){
$("#Privacy").live("click", function () {
var support = $("#SupportFeedback");
var button = $("#help_airtime");
if($(this).is(':checked') && support.is(':checked')){
button.removeAttr('disabled').removeClass('ui-state-disabled');
if ($(this).is(":checked") && support.is(":checked")) {
button.removeAttr("disabled").removeClass("ui-state-disabled");
} else {
button.attr('disabled', 'disabled' ).addClass('ui-state-disabled');
button.attr("disabled", "disabled").addClass("ui-state-disabled");
}
});
if($("#SupportFeedback").is(':checked') && ($("#Privacy").length == 0 || $("#Privacy").is(':checked'))){
button.removeAttr('disabled').removeClass('ui-state-disabled');
if (
$("#SupportFeedback").is(":checked") &&
($("#Privacy").length == 0 || $("#Privacy").is(":checked"))
) {
button.removeAttr("disabled").removeClass("ui-state-disabled");
} else {
button.attr('disabled', 'disabled' ).addClass('ui-state-disabled');
button.attr("disabled", "disabled").addClass("ui-state-disabled");
}
$('.toggle legend').live('click',function() {
$('.toggle').toggleClass('closed');
$(".toggle legend").live("click", function () {
$(".toggle").toggleClass("closed");
return false;
});
$("#Logo").live('change', function(ev){
$("#Logo").live("change", function (ev) {
var content, res, logoEl;
content = $(this).val();
@ -128,24 +134,20 @@ $(document).ready(function(){
if (!res) {
var ul, li;
ul = logoEl.find('.errors');
li = $("<li/>").append($.i18n._("Image must be one of jpg, jpeg, png, or gif"));
ul = logoEl.find(".errors");
li = $("<li/>").append(
$.i18n._("Image must be one of jpg, jpeg, png, or gif")
);
//errors ul has already been created.
if (ul.length > 0) {
ul.empty()
.append(li);
}
else {
logoEl
.append('<ul class="errors"></ul>')
.find(".errors")
.append(li);
ul.empty().append(li);
} else {
logoEl.append('<ul class="errors"></ul>').find(".errors").append(li);
}
$(this).val("");
}
else {
} else {
logoEl.find(".errors").remove();
}
});

View File

@ -1,5 +1,4 @@
function updateEmbedSrcParams()
{
function updateEmbedSrcParams() {
var $embedCodeParams = "?";
var $streamMode = getStreamMode();
if ($streamMode == "manual") {
@ -11,7 +10,7 @@ function updateEmbedSrcParams()
$embedCodeParams += "&title=" + getPlayerTitle();
$embedCodeParams += "\"";
$embedCodeParams += '"';
$("textarea[name=player_embed_src]").val(function (index, value) {
return value.replace(/\?.*?"/, $embedCodeParams);
@ -23,7 +22,7 @@ function updateEmbedSrcParams()
function updatePlayerIframeSrc(iframe_text) {
var $player_iframe = $("#player_form iframe");
var player_iframe_src = iframe_text.match(/http.*?"/)[0].slice(0, -1);
$player_iframe.attr('src', player_iframe_src);
$player_iframe.attr("src", player_iframe_src);
}
function getStreamMode() {
@ -35,7 +34,6 @@ function getPlayerTitle() {
}
$(document).ready(function () {
$("#player_stream_url-element").hide();
// stream mode change event
@ -44,7 +42,6 @@ $(document).ready(function() {
if ($streamMode == "auto") {
$("#player_stream_url-element").hide();
} else if ($streamMode == "manual") {
$("#player_stream_url-element").show();

View File

@ -2,18 +2,36 @@ function getRandomIdPlayer(max) {
return "playerHtml5Libretime_" + Math.floor(Math.random() * Math.floor(max));
}
function playerhtml5_insert(settings)
{
atp='';
if(settings.autoplay==true) atp='autoplay';
if(settings.forceHTTPS==true&&settings.url.indexOf('https')==-1) settings.url=settings.url.replace(/http/g, 'https');
if(settings.replacePort!=''&&settings.replacePort!=false&&settings.replacePort!='false')
{
if(settings.replacePortTo!='') settings.replacePortTo=':'+settings.replacePortTo;
settings.url=settings.url.replace(':'+settings.replacePort, settings.replacePortTo);
function playerhtml5_insert(settings) {
atp = "";
if (settings.autoplay == true) atp = "autoplay";
if (settings.forceHTTPS == true && settings.url.indexOf("https") == -1)
settings.url = settings.url.replace(/http/g, "https");
if (
settings.replacePort != "" &&
settings.replacePort != false &&
settings.replacePort != "false"
) {
if (settings.replacePortTo != "")
settings.replacePortTo = ":" + settings.replacePortTo;
settings.url = settings.url.replace(
":" + settings.replacePort,
settings.replacePortTo
);
}
if(settings.codec=='mp3') settings.codec='mpeg';
document.getElementById('html5player_skin').innerHTML += '<div id="div_'+settings.elementId+'" style="" ><audio loop controls id="'+settings.elementId+'" src="'+settings.url+'" '+atp+' type="audio/'+settings.codec+'" >'
+'Ihr Browser unterstützt das Element <code>audio</code> nicht.'
+'<\/audio><\/div>';
if (settings.codec == "mp3") settings.codec = "mpeg";
document.getElementById("html5player_skin").innerHTML +=
'<div id="div_' +
settings.elementId +
'" style="" ><audio loop controls id="' +
settings.elementId +
'" src="' +
settings.url +
'" ' +
atp +
' type="audio/' +
settings.codec +
'" >' +
"Ihr Browser unterstützt das Element <code>audio</code> nicht." +
"</audio></div>";
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,6 @@ var AIRTIME = (function(AIRTIME) {
//config: name, type, filemd, required
function createTemplateLi(config) {
var templateRequired =
"<li " +
"data-name='<%= name %>' " +
@ -37,7 +36,8 @@ var AIRTIME = (function(AIRTIME) {
"<span class='template_item_remove'><i class='icon icon-trash'></i></span>" +
"</li>";
var template = (config.required) === true ? templateRequired : templateOptional;
var template =
config.required === true ? templateRequired : templateOptional;
template = _.template(template);
var $li = $(template(config));
@ -49,8 +49,8 @@ var AIRTIME = (function(AIRTIME) {
//http://stackoverflow.com/questions/1349404/generate-a-string-of-5-random-characters-in-javascript
function randomString(len, charSet) {
//can only use small letters to avoid DB query problems.
charSet = charSet || 'abcdefghijklmnopqrstuvwxyz';
var randomString = '';
charSet = charSet || "abcdefghijklmnopqrstuvwxyz";
var randomString = "";
for (var i = 0; i < len; i++) {
var randomPoz = Math.floor(Math.random() * charSet.length);
randomString += charSet.substring(randomPoz, randomPoz + 1);
@ -59,36 +59,31 @@ var AIRTIME = (function(AIRTIME) {
}
function addField(config) {
$templateList.append(createTemplateLi(config));
}
function getFieldData($el) {
return {
name: $el.data("name"),
type: $el.data("type"),
label: $el.data("label"),
isFileMd: $el.data("filemd")
isFileMd: $el.data("filemd"),
};
}
mod.onReady = function () {
$templateDiv = $("#configure_item_template");
$templateList = $(".template_item_list");
$fileMDList = $(".template_file_md");
$fileMDList.on("click", "i.icon-plus", function () {
var $li = $(this).parents("li");
var config = {
name: $li.data("name"),
type: $li.data("type"),
label: $li.data("label"),
filemd: true,
required: false
required: false,
};
addField(config);
@ -116,7 +111,7 @@ var AIRTIME = (function(AIRTIME) {
label: label,
type: $div.find("select").val(),
filemd: false,
required: false
required: false,
};
addField(config);
@ -138,9 +133,18 @@ var AIRTIME = (function(AIRTIME) {
data[i] = getFieldData($li);
}
$.post(url, {'id': template_id, 'name': templateName, 'fields': data, 'setDefault': isDefault}, function(json) {
$.post(
url,
{
id: template_id,
name: templateName,
fields: data,
setDefault: isDefault,
},
function (json) {
var x;
});
}
);
}
$templateDiv.on("click", "#template_item_save", function () {
@ -152,16 +156,15 @@ var AIRTIME = (function(AIRTIME) {
$templateDiv.on("click", "#template_set_default", function () {
var $btn = $(this),
template_id = $btn.data("template"),
url = baseUrl+"Playouthistorytemplate/set-template-default/format/json";
url =
baseUrl + "Playouthistorytemplate/set-template-default/format/json";
$btn.remove();
$.post(url, { id: template_id });
});
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});
$(document).ready(AIRTIME.itemTemplate.onReady);

File diff suppressed because it is too large Load Diff

View File

@ -8,10 +8,14 @@ var AIRTIME = (function(AIRTIME) {
mod = AIRTIME.template;
function createItemLi(id, name, configured) {
var editUrl = baseUrl+"Playouthistorytemplate/configure-template/id/"+id;
var defaultUrl = baseUrl+"Playouthistorytemplate/set-template-default/format/json/id/"+id;
var removeUrl = baseUrl+"Playouthistorytemplate/delete-template/format/json/id/"+id;
var editUrl =
baseUrl + "Playouthistorytemplate/configure-template/id/" + id;
var defaultUrl =
baseUrl +
"Playouthistorytemplate/set-template-default/format/json/id/" +
id;
var removeUrl =
baseUrl + "Playouthistorytemplate/delete-template/format/json/id/" + id;
var itemConfigured =
"<li class='template_configured' data-template='<%= id %>' data-name='<%= name %>'>" +
@ -23,24 +27,32 @@ var AIRTIME = (function(AIRTIME) {
"<li data-template='<%= id %>' data-name='<%= name %>'>" +
"<a href='<%= editUrl %>' class='template_name'><%= name %></a>" +
"<a href='<%= removeUrl %>' class='template_remove'><i class='icon icon-trash'></i></a>" +
"<a href='<%= defaultUrl %>' class='template_default'>" + $.i18n._('Set Default') + "</a>" +
"<a href='<%= defaultUrl %>' class='template_default'>" +
$.i18n._("Set Default") +
"</a>" +
"</li>";
var template = (configured) === true ? itemConfigured : item;
var template = configured === true ? itemConfigured : item;
var template = _.template(template);
var $li = $(template({id: id, name: name, editUrl: editUrl, defaultUrl: defaultUrl, removeUrl: removeUrl}));
var $li = $(
template({
id: id,
name: name,
editUrl: editUrl,
defaultUrl: defaultUrl,
removeUrl: removeUrl,
})
);
return $li;
}
mod.onReady = function () {
$historyTemplate = $("#history_template");
$historyTemplate.on("click", ".template_remove", function (ev) {
ev.preventDefault();
var $a = $(this);
@ -53,7 +65,6 @@ var AIRTIME = (function(AIRTIME) {
});
$historyTemplate.on("click", ".template_default", function (ev) {
ev.preventDefault();
var $a = $(this);
@ -63,8 +74,12 @@ var AIRTIME = (function(AIRTIME) {
$oldLi = $a.parents("ul").find("li.template_configured");
$newLi = $a.parents("li");
$oldLi.replaceWith(createItemLi($oldLi.data('template'), $oldLi.data('name'), false));
$newLi.replaceWith(createItemLi($newLi.data('template'), $newLi.data('name'), true));
$oldLi.replaceWith(
createItemLi($oldLi.data("template"), $oldLi.data("name"), false)
);
$newLi.replaceWith(
createItemLi($newLi.data("template"), $newLi.data("name"), true)
);
$.post(url, function () {
var x;
@ -72,11 +87,9 @@ var AIRTIME = (function(AIRTIME) {
});
function createTemplate(type) {
var createUrl = baseUrl + "Playouthistorytemplate/create-template";
$.post(createUrl, { format: "json", type: type }, function (json) {
if (json.error !== undefined) {
alert(json.error);
return;
@ -96,7 +109,6 @@ var AIRTIME = (function(AIRTIME) {
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});
$(document).ready(AIRTIME.template.onReady);

View File

@ -1,129 +1,153 @@
function setWatchedDirEvents() {
$('#storageFolder-selection').serverBrowser({
$("#storageFolder-selection").serverBrowser({
onSelect: function (path) {
$('#storageFolder').val(path);
$("#storageFolder").val(path);
},
onLoad: function () {
return $('#storageFolder').val();
return $("#storageFolder").val();
},
width: 500,
height: 250,
position: ['center', 'center'],
position: ["center", "center"],
//knownPaths: [{text:'Desktop', image:'desktop.png', path:'/home'}],
knownPaths: [],
imageUrl: 'img/icons/',
systemImageUrl: baseUrl+'css/img/',
handlerUrl: baseUrl+'Preference/server-browse/format/json',
title: $.i18n._('Choose Storage Folder'),
basePath: '',
requestMethod: 'POST',
imageUrl: "img/icons/",
systemImageUrl: baseUrl + "css/img/",
handlerUrl: baseUrl + "Preference/server-browse/format/json",
title: $.i18n._("Choose Storage Folder"),
basePath: "",
requestMethod: "POST",
});
$('#watchedFolder-selection').serverBrowser({
$("#watchedFolder-selection").serverBrowser({
onSelect: function (path) {
$('#watchedFolder').val(path);
$("#watchedFolder").val(path);
},
onLoad: function () {
return $('#watchedFolder').val();
return $("#watchedFolder").val();
},
width: 500,
height: 250,
position: ['center', 'center'],
position: ["center", "center"],
//knownPaths: [{text:'Desktop', image:'desktop.png', path:'/home'}],
knownPaths: [],
imageUrl: 'img/icons/',
systemImageUrl: baseUrl+'css/img/',
handlerUrl: baseUrl+'Preference/server-browse/format/json',
title: $.i18n._('Choose Folder to Watch'),
basePath: '',
requestMethod: 'POST',
imageUrl: "img/icons/",
systemImageUrl: baseUrl + "css/img/",
handlerUrl: baseUrl + "Preference/server-browse/format/json",
title: $.i18n._("Choose Folder to Watch"),
basePath: "",
requestMethod: "POST",
});
$('#storageFolder-ok').click(function(){
$("#storageFolder-ok").click(function () {
var url, chosen;
if(confirm(sprintf($.i18n._("Are you sure you want to change the storage folder?\nThis will remove the files from your %s library!"), PRODUCT_NAME))){
if (
confirm(
sprintf(
$.i18n._(
"Are you sure you want to change the storage folder?\nThis will remove the files from your %s library!"
),
PRODUCT_NAME
)
)
) {
url = baseUrl + "Preference/change-stor-directory";
chosen = $('#storageFolder').val();
chosen = $("#storageFolder").val();
$.post(url,
$.post(
url,
{ format: "json", dir: chosen, element: "storageFolder" },
function (json) {
$("#watched-folder-section").empty();
$("#watched-folder-section").append(json.subform);
setWatchedDirEvents();
});
}
else {
$('#storageFolder').val("");
);
} else {
$("#storageFolder").val("");
}
});
$('#watchedFolder-ok').click(function(){
$("#watchedFolder-ok").click(function () {
var url, chosen;
url = baseUrl + "Preference/reload-watch-directory";
chosen = $('#watchedFolder').val();
chosen = $("#watchedFolder").val();
$.post(url,
$.post(
url,
{ format: "json", dir: chosen, element: "watchedFolder" },
function (json) {
$("#watched-folder-section").empty();
$("#watched-folder-section").append("<h2>"+$.i18n._("Manage Media Folders")+"</h2>");
$("#watched-folder-section").append(
"<h2>" + $.i18n._("Manage Media Folders") + "</h2>"
);
$("#watched-folder-section").append(json.subform);
setWatchedDirEvents();
});
}
);
});
$('.selected-item').find('.ui-icon-refresh').click(function(){
$(".selected-item")
.find(".ui-icon-refresh")
.click(function () {
var folder = $(this).prev().text();
$.get(baseUrl+"Preference/rescan-watch-directory", {format: "json", dir: folder});
$.get(baseUrl + "Preference/rescan-watch-directory", {
format: "json",
dir: folder,
});
});
$('.selected-item').find('.ui-icon-close').click(function(){
if(confirm($.i18n._("Are you sure you want to remove the watched folder?"))){
$(".selected-item")
.find(".ui-icon-close")
.click(function () {
if (
confirm($.i18n._("Are you sure you want to remove the watched folder?"))
) {
var row = $(this).parent();
var folder = row.find('#folderPath').text();
var folder = row.find("#folderPath").text();
url = baseUrl + "Preference/remove-watch-directory";
$.post(url,
$.post(
url,
{ format: "json", dir: folder },
function (json) {
$("#watched-folder-section").empty();
$("#watched-folder-section").append("<h2>"+$.i18n._("Manage Media Folders")+"</h2>");
$("#watched-folder-section").append(
"<h2>" + $.i18n._("Manage Media Folders") + "</h2>"
);
$("#watched-folder-section").append(json.subform);
setWatchedDirEvents();
});
}
);
}
});
}
$(document).ready(function () {
setWatchedDirEvents();
$(".ui-icon-alert").qtip({
content: {
text: $.i18n._("This path is currently not accessible.")
text: $.i18n._("This path is currently not accessible."),
},
position: {
adjust: {
resize: true,
method: "flip flip"
method: "flip flip",
},
at: "right center",
my: "left top",
viewport: $(window)
viewport: $(window),
},
style: {
classes: "ui-tooltip-dark"
classes: "ui-tooltip-dark",
},
show: 'mouseover',
hide: 'mouseout'
show: "mouseover",
hide: "mouseout",
});
});

View File

@ -33,7 +33,7 @@ function setPodcastAutoSmartblockReadonly() {
var disablePodcastAutomSmartblock = $("#podcastAutoSmartblock-0");
var enablePodcastAutomSmartblock = $("#podcastAutoSmartblock-1");
var podcastOverride = $("#podcastAlbumOverride-1");
if ($(podcastOverride).is(':checked')) {
if ($(podcastOverride).is(":checked")) {
enablePodcastAutomSmartblock.removeAttr("readonly");
} else {
disablePodcastAutomSmartblock.prop("checked", true);
@ -45,7 +45,7 @@ function setPodcastAutoSmartblockReadonly() {
function setSystemFromEmailReadonly() {
var enableSystemEmails = $("#enableSystemEmail");
var systemFromEmail = $("#systemEmail");
if ($(enableSystemEmails).is(':checked')) {
if ($(enableSystemEmails).is(":checked")) {
systemFromEmail.removeAttr("readonly");
} else {
systemFromEmail.attr("readonly", "readonly");
@ -58,7 +58,7 @@ function setMailServerInputReadonly() {
var port = $("#port");
var requiresAuthCB = $("#msRequiresAuth");
if (configMailServer.is(':checked')) {
if (configMailServer.is(":checked")) {
mailServer.removeAttr("readonly");
port.removeAttr("readonly");
requiresAuthCB.parent().show();
@ -84,7 +84,7 @@ function setTuneInSettingsReadonly() {
var partnerKey = $("#tunein_partner_key");
var partnerId = $("#tunein_partner_id");
if (enableTunein.is(':checked')) {
if (enableTunein.is(":checked")) {
stationId.removeAttr("readonly");
partnerKey.removeAttr("readonly");
partnerId.removeAttr("readonly");
@ -103,35 +103,44 @@ function setMsAuthenticationFieldsReadonly(ele) {
var password = $("#ms_password");
var configureMailServer = $("#configureMailServer");
if (ele.is(':checked') && configureMailServer.is(':checked')) {
if (ele.is(":checked") && configureMailServer.is(":checked")) {
email.removeAttr("readonly");
password.removeAttr("readonly");
} else if (ele.not(':checked') || configureMailServer.not(':checked')) {
} else if (ele.not(":checked") || configureMailServer.not(":checked")) {
email.attr("readonly", "readonly");
password.attr("readonly", "readonly");
}
}
function removeLogo() {
$.post(baseUrl+'preference/remove-logo', {'csrf_token' : $('#csrf').val()}, function(json){
$.post(
baseUrl + "preference/remove-logo",
{ csrf_token: $("#csrf").val() },
function (json) {
// Reload without resubmitting the form
location.href = location.href.replace(location.hash, "");
});
}
);
}
function deleteAllFiles() {
var resp = confirm($.i18n._("Are you sure you want to delete all the tracks in your library?"))
var resp = confirm(
$.i18n._("Are you sure you want to delete all the tracks in your library?")
);
if (resp) {
$.post(baseUrl+'preference/delete-all-files', {'csrf_token' : $('#csrf').val()}, function(json){
$.post(
baseUrl + "preference/delete-all-files",
{ csrf_token: $("#csrf").val() },
function (json) {
location.reload();
});
}
);
}
}
$(document).ready(function () {
$('.collapsible-header').live('click',function() {
$(this).next().toggle('fast');
$(".collapsible-header").live("click", function () {
$(this).next().toggle("fast");
$(this).toggleClass("closed");
return false;
});
@ -164,7 +173,7 @@ $(document).ready(function() {
var reader = new FileReader(); // browser compatibility?
reader.onload = function (e) {
console.log("Reader loaded");
preview.attr('src', e.target.result);
preview.attr("src", e.target.result);
};
// check image size so we don't crash the page trying to render
@ -173,7 +182,7 @@ $(document).ready(function() {
reader.readAsDataURL(this.files[0]);
} else {
// remove the file element data
$(this).val('').replaceWith($(this).clone(true));
$(this).val("").replaceWith($(this).clone(true));
preview.hide();
}
} else {
@ -181,7 +190,7 @@ $(document).ready(function() {
}
});
if (preview.attr('src').indexOf('images/') > -1) {
if (preview.attr("src").indexOf("images/") > -1) {
$("#logo-remove-btn").hide();
}

View File

@ -1,83 +1,116 @@
function showErrorSections() {
$(".errors").each(function (i) {
if ($(this).length > 0) {
var div = $(this).closest("div")
if(div.attr('class') == "stream-setting-content"){
var div = $(this).closest("div");
if (div.attr("class") == "stream-setting-content") {
$(this).closest("div").show();
$(this).closest("fieldset").removeClass('closed');
$(this).closest("fieldset").removeClass("closed");
$(window).scrollTop($(this).closest("div").position().top);
}
}
});
}
function rebuildStreamURL(ele) {
var div = ele.closest("div")
host = div.find("input[id$=-host]").val()
port = div.find("input[id$=-port]").val()
mount = div.find("input[id$=-mount]").val()
streamurl = ""
var div = ele.closest("div");
host = div.find("input[id$=-host]").val();
port = div.find("input[id$=-port]").val();
mount = div.find("input[id$=-mount]").val();
streamurl = "";
if (div.find("select[id$=-output]").val() == "icecast") {
streamurl = "http://"+host
streamurl = "http://" + host;
if ($.trim(port) != "") {
streamurl += ":"+port
streamurl += ":" + port;
}
if ($.trim(mount) != "") {
streamurl += "/"+mount
streamurl += "/" + mount;
}
} else {
streamurl = "http://"+host+":"+port+"/"
streamurl = "http://" + host + ":" + port + "/";
}
div.find("#stream_url").html('<a href="' + streamurl + '" target="_blank">' + streamurl + '</a>')
div
.find("#stream_url")
.html('<a href="' + streamurl + '" target="_blank">' + streamurl + "</a>");
}
function restrictOggBitrate(ele, on) {
var div = ele.closest("div")
var div = ele.closest("div");
if (on) {
if (parseInt(div.find("select[id$=data-bitrate]").val(), 10) < 48) {
div.find("select[id$=data-bitrate]").find("option[value='48']").attr("selected","selected");
div
.find("select[id$=data-bitrate]")
.find("option[value='48']")
.attr("selected", "selected");
}
div.find("select[id$=data-bitrate]").find("option[value='24']").attr("disabled","disabled");
div.find("select[id$=data-bitrate]").find("option[value='32']").attr("disabled","disabled");
div
.find("select[id$=data-bitrate]")
.find("option[value='24']")
.attr("disabled", "disabled");
div
.find("select[id$=data-bitrate]")
.find("option[value='32']")
.attr("disabled", "disabled");
} else {
div.find("select[id$=data-bitrate]").find("option[value='24']").removeAttr("disabled");
div.find("select[id$=data-bitrate]").find("option[value='32']").removeAttr("disabled");
div
.find("select[id$=data-bitrate]")
.find("option[value='24']")
.removeAttr("disabled");
div
.find("select[id$=data-bitrate]")
.find("option[value='32']")
.removeAttr("disabled");
}
}
function hideForShoutcast(ele) {
var div = ele.closest("div")
div.find("#outputMountpoint-label").hide()
div.find("#outputMountpoint-element").hide()
div.find("#outputUser-label").hide()
div.find("#outputUser-element").hide()
div.find("select[id$=data-type]").find("option[value='mp3']").attr('selected','selected');
div.find("select[id$=data-type]").find("option[value='ogg']").attr("disabled","disabled");
div.find("select[id$=data-type]").find("option[value='opus']").attr("disabled","disabled");
var div = ele.closest("div");
div.find("#outputMountpoint-label").hide();
div.find("#outputMountpoint-element").hide();
div.find("#outputUser-label").hide();
div.find("#outputUser-element").hide();
div
.find("select[id$=data-type]")
.find("option[value='mp3']")
.attr("selected", "selected");
div
.find("select[id$=data-type]")
.find("option[value='ogg']")
.attr("disabled", "disabled");
div
.find("select[id$=data-type]")
.find("option[value='opus']")
.attr("disabled", "disabled");
restrictOggBitrate(ele, false)
restrictOggBitrate(ele, false);
}
function validate(ele, evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
if ((ele.val().length >= 5 || (key < 48 || key > 57)) && !(key == 8 || key == 9 || key == 13 || key == 37 || key == 39 || key == 46)) {
if (
(ele.val().length >= 5 || key < 48 || key > 57) &&
!(key == 8 || key == 9 || key == 13 || key == 37 || key == 39 || key == 46)
) {
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
}
function showForIcecast(ele) {
var div = ele.closest("div");
div.find("#outputMountpoint-label").show();
div.find("#outputMountpoint-element").show();
div.find("#outputUser-label").show();
div.find("#outputUser-element").show();
div.find("select[id$=data-type]").find("option[value='ogg']").removeAttr("disabled");
div.find("select[id$=data-type]").find("option[value='opus']").removeAttr("disabled");
div
.find("select[id$=data-type]")
.find("option[value='ogg']")
.removeAttr("disabled");
div
.find("select[id$=data-type]")
.find("option[value='opus']")
.removeAttr("disabled");
}
function checkLiquidsoapStatus() {
var url = baseUrl+'Preference/get-liquidsoap-status/format/json';
var url = baseUrl + "Preference/get-liquidsoap-status/format/json";
var id = $(this).attr("id");
$.post(url, function (json_obj) {
for (var i = 0; i < json_obj.length; i++) {
@ -94,13 +127,27 @@ function checkLiquidsoapStatus(){
}
var html;
if (status == "OK") {
html = '<div class="stream-status status-good"><p>'+$.i18n._("Connected to the streaming server")+'</p></div>';
html =
'<div class="stream-status status-good"><p>' +
$.i18n._("Connected to the streaming server") +
"</p></div>";
} else if (status == "N/A") {
html = '<div class="stream-status status-disabled"><p>'+$.i18n._("The stream is disabled")+'</p></div>';
html =
'<div class="stream-status status-disabled"><p>' +
$.i18n._("The stream is disabled") +
"</p></div>";
} else if (status == "waiting") {
html = '<div class="stream-status status-info"><p>'+$.i18n._("Getting information from the server...")+'</p></div>';
html =
'<div class="stream-status status-info"><p>' +
$.i18n._("Getting information from the server...") +
"</p></div>";
} else {
html = '<div class="stream-status status-error"><p>'+$.i18n._("Can not connect to the streaming server")+'</p><p>'+status+'</p></div>';
html =
'<div class="stream-status status-error"><p>' +
$.i18n._("Can not connect to the streaming server") +
"</p><p>" +
status +
"</p></div>";
}
$("#s" + id + "Liquidsoap-error-msg-element").html(html);
}
@ -111,7 +158,10 @@ function checkLiquidsoapStatus(){
function setLiveSourceConnectionOverrideListener() {
$("[id=connection_url_override]").click(function (event) {
var url_input = $(this).parent().find("dd[id$='_source_host-element']").children();
var url_input = $(this)
.parent()
.find("dd[id$='_source_host-element']")
.children();
url_input.removeAttr("readonly");
$(this).parent().find("div[id$='_dj_connection_url_actions']").show();
event.preventDefault();
@ -119,9 +169,15 @@ function setLiveSourceConnectionOverrideListener(){
// set action for "OK" and "X"
var live_dj_actions = $("#live_dj_connection_url_actions");
var live_dj_input = live_dj_actions.parent().find("dd[id$='_source_host-element']").children();
var live_dj_input = live_dj_actions
.parent()
.find("dd[id$='_source_host-element']")
.children();
var master_dj_actions = $("#master_dj_connection_url_actions");
var master_dj_input = master_dj_actions.parent().find("dd[id$='_source_host-element']").children();
var master_dj_input = master_dj_actions
.parent()
.find("dd[id$='_source_host-element']")
.children();
live_dj_actions.find("#ok").click(function (event) {
event.preventDefault();
@ -129,7 +185,12 @@ function setLiveSourceConnectionOverrideListener(){
live_dj_input.val(url);
live_dj_input.attr("readonly", "readonly");
live_dj_actions.hide();
$.get(baseUrl+"Preference/set-source-connection-url", {format: "json", type: "livedj", url:encodeURIComponent(url), override: 1});
$.get(baseUrl + "Preference/set-source-connection-url", {
format: "json",
type: "livedj",
url: encodeURIComponent(url),
override: 1,
});
event.preventDefault();
});
@ -137,14 +198,19 @@ function setLiveSourceConnectionOverrideListener(){
event.preventDefault();
var port = $("#show_source_port").val();
var mount = $("#show_source_mount").val();
if (mount.charAt(0) != '/') {
mount = ('/').concat(mount);
if (mount.charAt(0) != "/") {
mount = "/".concat(mount);
}
var url = "http://" + location.hostname + ":" + port + mount;
live_dj_input.val(url);
live_dj_input.attr("readonly", "readonly");
live_dj_actions.hide();
$.get(baseUrl+"Preference/set-source-connection-url", {format: "json", type: "livedj", url:encodeURIComponent(url), override: 0});
$.get(baseUrl + "Preference/set-source-connection-url", {
format: "json",
type: "livedj",
url: encodeURIComponent(url),
override: 0,
});
event.preventDefault();
});
@ -153,31 +219,40 @@ function setLiveSourceConnectionOverrideListener(){
master_dj_input.val(url);
master_dj_input.attr("readonly", "readonly");
master_dj_actions.hide();
$.get(baseUrl+"Preference/set-source-connection-url", {format: "json", type: "masterdj", url:encodeURIComponent(url), override: 1});
$.get(baseUrl + "Preference/set-source-connection-url", {
format: "json",
type: "masterdj",
url: encodeURIComponent(url),
override: 1,
});
event.preventDefault();
});
master_dj_actions.find("#reset").click(function (event) {
var port = $("#master_source_port").val();
var mount = $("#master_source_mount").val();
if (mount.charAt(0) != '/') {
mount = ('/').concat(mount);
if (mount.charAt(0) != "/") {
mount = "/".concat(mount);
}
var url = "http://" + location.hostname + ":" + port + mount;
master_dj_input.val(url);
master_dj_input.attr("readonly", "readonly");
master_dj_actions.hide();
$.get(baseUrl+"Preference/set-source-connection-url", {format: "json", type: "masterdj", url:encodeURIComponent(url), override: 0});
$.get(baseUrl + "Preference/set-source-connection-url", {
format: "json",
type: "masterdj",
url: encodeURIComponent(url),
override: 0,
});
event.preventDefault();
});
}
function setupEventListeners() {
// initial stream url
$("dd[id=outputStreamURL-element]").each(function () {
rebuildStreamURL($(this));
})
});
$("input[id$=-host], input[id$=-port], input[id$=-mount]").keyup(function () {
rebuildStreamURL($(this));
@ -191,22 +266,22 @@ function setupEventListeners() {
rebuildStreamURL($(this));
});
if(!$("#output_sound_device").is(':checked')){
$("select[id=output_sound_device_type]").attr('disabled', 'disabled');
if (!$("#output_sound_device").is(":checked")) {
$("select[id=output_sound_device_type]").attr("disabled", "disabled");
} else {
$("select[id=output_sound_device_type]").removeAttr('disabled');
$("select[id=output_sound_device_type]").removeAttr("disabled");
}
$("#output_sound_device").change(function () {
if($(this).is(':checked')){
$("select[id=output_sound_device_type]").removeAttr('disabled');
if ($(this).is(":checked")) {
$("select[id=output_sound_device_type]").removeAttr("disabled");
} else {
$("select[id=output_sound_device_type]").attr('disabled', 'disabled');
$("select[id=output_sound_device_type]").attr("disabled", "disabled");
}
});
$("select[id$=data-type]").change(function () {
if($(this).val() == 'ogg'){
if ($(this).val() == "ogg") {
restrictOggBitrate($(this), true);
} else {
restrictOggBitrate($(this), false);
@ -214,13 +289,13 @@ function setupEventListeners() {
});
$("select[id$=data-type]").each(function () {
if($(this).val() == 'ogg'){
if ($(this).val() == "ogg") {
restrictOggBitrate($(this), true);
}
});
$("select[id$=data-output]").change(function () {
if($(this).val() == 'shoutcast'){
if ($(this).val() == "shoutcast") {
hideForShoutcast($(this));
} else {
showForIcecast($(this));
@ -228,18 +303,18 @@ function setupEventListeners() {
});
$("select[id$=data-output]").each(function () {
if($(this).val() == 'shoutcast'){
if ($(this).val() == "shoutcast") {
hideForShoutcast($(this));
}
});
$('.toggle legend').click(function() {
$(this).parent().toggleClass('closed');
$(".toggle legend").click(function () {
$(this).parent().toggleClass("closed");
return false;
});
$('.collapsible-header').click(function() {
$(this).next().toggle('fast');
$(".collapsible-header").click(function () {
$(this).next().toggle("fast");
$(this).toggleClass("closed");
return false;
});
@ -249,181 +324,208 @@ function setupEventListeners() {
showErrorSections();
checkLiquidsoapStatus();
var userManualAnchorOpen = "<a target='_blank' href='" + USER_MANUAL_URL + "'>";
var userManualAnchorOpen =
"<a target='_blank' href='" + USER_MANUAL_URL + "'>";
// qtip for help text
$(".override_help_icon").qtip({
content: {
text: sprintf($.i18n._("If %s is behind a router or firewall, you may need to configure port forwarding and this field information will be incorrect. In this case you will need to manually update this field so it shows the correct host/port/mount that your DJ's need to connect to. The allowed range is between 1024 and 49151."), PRODUCT_NAME)+" "+
sprintf($.i18n._(
"For more details, please read the %s%s Manual%s"), userManualAnchorOpen, PRODUCT_NAME, "</a>")
text:
sprintf(
$.i18n._(
"If %s is behind a router or firewall, you may need to configure port forwarding and this field information will be incorrect. In this case you will need to manually update this field so it shows the correct host/port/mount that your DJ's need to connect to. The allowed range is between 1024 and 49151."
),
PRODUCT_NAME
) +
" " +
sprintf(
$.i18n._("For more details, please read the %s%s Manual%s"),
userManualAnchorOpen,
PRODUCT_NAME,
"</a>"
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$(".icecast_metadata_help_icon").qtip({
content: {
text: $.i18n._("Check this option to enable metadata for OGG streams (stream metadata is the track title, artist, and show name that is displayed in an audio player). VLC and mplayer have a serious bug when playing an OGG/VORBIS stream that has metadata information enabled: they will disconnect from the stream after every song. If you are using an OGG stream and your listeners do not require support for these audio players, then feel free to enable this option.")
text: $.i18n._(
"Check this option to enable metadata for OGG streams (stream metadata is the track title, artist, and show name that is displayed in an audio player). VLC and mplayer have a serious bug when playing an OGG/VORBIS stream that has metadata information enabled: they will disconnect from the stream after every song. If you are using an OGG stream and your listeners do not require support for these audio players, then feel free to enable this option."
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$("#auto_transition_help").qtip({
content: {
text: $.i18n._("Check this box to automatically switch off Master/Show source upon source disconnection.")
text: $.i18n._(
"Check this box to automatically switch off Master/Show source upon source disconnection."
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$("#auto_switch_help").qtip({
content: {
text: $.i18n._("Check this box to automatically switch on Master/Show source upon source connection.")
text: $.i18n._(
"Check this box to automatically switch on Master/Show source upon source connection."
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$(".stream_username_help_icon").qtip({
content: {
text: $.i18n._("If your Icecast server expects a username of 'source', this field can be left blank.")
text: $.i18n._(
"If your Icecast server expects a username of 'source', this field can be left blank."
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$(".admin_username_help_icon").qtip({
content: {
text: $.i18n._("This is the admin username and password for Icecast/SHOUTcast to get listener statistics.")
text: $.i18n._(
"This is the admin username and password for Icecast/SHOUTcast to get listener statistics."
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$(".master_username_help_icon").qtip({
content: {
text: $.i18n._("If your live streaming client does not ask for a username, this field should be 'source'.")
text: $.i18n._(
"If your live streaming client does not ask for a username, this field should be 'source'."
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
$(".stream_type_help_icon").qtip({
content: {
text: sprintf(
$.i18n._("Some stream types require extra configuration. Details about enabling %sAAC+ Support%s or %sOpus Support%s are provided."),
$.i18n._(
"Some stream types require extra configuration. Details about enabling %sAAC+ Support%s or %sOpus Support%s are provided."
),
"<a target='_blank' href='https://wiki.sourcefabric.org/x/NgPQ'>",
"</a>",
"<a target='_blank' href='https://wiki.sourcefabric.org/x/KgPQ'>",
"</a>")
"</a>"
),
},
hide: {
delay: 500,
fixed: true
fixed: true,
},
style: {
border: {
width: 0,
radius: 4
radius: 4,
},
classes: "ui-tooltip-dark ui-tooltip-rounded"
classes: "ui-tooltip-dark ui-tooltip-rounded",
},
position: {
my: "left bottom",
at: "right center"
at: "right center",
},
});
}
@ -437,30 +539,34 @@ function setSliderForReplayGain(){
slide: function (event, ui) {
$("#replayGainModifier").val(ui.value);
$("#rg_modifier_value").html(ui.value);
}
},
});
$("#replayGainModifier").val($("#slider-range-max").slider("value"));
}
function setPseudoAdminPassword(s1, s2, s3, s4) {
if (s1) {
$('#s1_data-admin_pass').val('xxxxxx');
$("#s1_data-admin_pass").val("xxxxxx");
}
if (s2) {
$('#s2_data-admin_pass').val('xxxxxx');
$("#s2_data-admin_pass").val("xxxxxx");
}
if (s3) {
$('#s3_data-admin_pass').val('xxxxxx');
$("#s3_data-admin_pass").val("xxxxxx");
}
if (s4) {
$('#s4_data-admin_pass').val('xxxxxx');
$("#s4_data-admin_pass").val("xxxxxx");
}
}
function getAdminPasswordStatus() {
$.ajax({ url: baseUrl+'Preference/get-admin-password-status/format/json', dataType:"json", success:function(data){
$.ajax({
url: baseUrl + "Preference/get-admin-password-status/format/json",
dataType: "json",
success: function (data) {
setPseudoAdminPassword(data.s1, data.s2, data.s3, data.s4);
}});
},
});
}
$(document).ready(function () {
@ -469,16 +575,22 @@ $(document).ready(function() {
getAdminPasswordStatus();
var s = $("[name^='customStreamSettings']:checked");
$("[id^='stream_save'], [name^='customStreamSettings']").live('click', function() {
$("[id^='stream_save'], [name^='customStreamSettings']").live(
"click",
function () {
var e = $(this);
if (e[0] == s[0]) { return; }
var confirm_pypo_restart_text = $.i18n._("WARNING: This will restart your stream and may cause a short dropout for your listeners!");
if (e[0] == s[0]) {
return;
}
var confirm_pypo_restart_text = $.i18n._(
"WARNING: This will restart your stream and may cause a short dropout for your listeners!"
);
if (confirm(confirm_pypo_restart_text)) {
var data = $('#stream_form').serialize();
var url = baseUrl+'Preference/stream-setting';
var data = $("#stream_form").serialize();
var url = baseUrl + "Preference/stream-setting";
$.post(url, { format: "json", data: data }, function (json) {
$('#content').empty().append(json.html);
$("#content").empty().append(json.html);
if (json.valid) {
window.location.reload();
}
@ -487,12 +599,13 @@ $(document).ready(function() {
getAdminPasswordStatus();
});
} else {
if (e.prop('checked')) {
if (e.prop("checked")) {
if (e[0] != s[0]) {
e.prop('checked', false);
s.prop('checked', true);
e.prop("checked", false);
s.prop("checked", true);
}
}
}
});
}
);
});

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,7 @@ function scheduleRefetchEvents(json) {
$("#add-show-close").click();
}
}
$("#schedule_calendar").fullCalendar('refetchEvents');
$("#schedule_calendar").fullCalendar("refetchEvents");
}
function makeTimeStamp(date) {
@ -28,7 +28,18 @@ function makeTimeStamp(date) {
m = date.getMinutes();
s = date.getSeconds();
timestamp = sy + "-" + pad(sm, 2) + "-" + pad(sd, 2) + " " + pad(h, 2) + ":" + pad(m, 2) + ":" + pad(s, 2);
timestamp =
sy +
"-" +
pad(sm, 2) +
"-" +
pad(sd, 2) +
" " +
pad(h, 2) +
":" +
pad(m, 2) +
":" +
pad(s, 2);
return timestamp;
}
@ -43,14 +54,25 @@ function dayClick(date, allDay, jsEvent, view) {
if (view.name === "month") {
today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
selected = new Date(date.getFullYear(), date.getMonth(), date.getDate());
}
else {
today = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes());
selected = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes());
} else {
today = new Date(
now.getFullYear(),
now.getMonth(),
now.getDate(),
now.getHours(),
now.getMinutes()
);
selected = new Date(
date.getFullYear(),
date.getMonth(),
date.getDate(),
date.getHours(),
date.getMinutes()
);
}
if (selected >= today) {
var addShow = $('.add-button');
var addShow = $(".add-button");
//remove the +show button if it exists.
if (addShow.length == 1) {
@ -72,17 +94,18 @@ function dayClick(date, allDay, jsEvent, view) {
duration_m = parseInt(duration_info[1], 10);
}
// duration in milisec
var duration = (duration_h * 60 * 60 * 1000) + (duration_m * 60 * 1000);
var duration = duration_h * 60 * 60 * 1000 + duration_m * 60 * 1000;
var startTime_string;
var startTime = 0;
// get start time value on the form
if (view.name === "month") {
startTime_string = $("#add_show_start_time").val();
var startTime_info = startTime_string.split(':');
var startTime_info = startTime_string.split(":");
if (startTime_info.length == 2) {
var start_time_temp = (parseInt(startTime_info[0], 10) * 60 * 60 * 1000)
+ (parseInt(startTime_info[1], 10) * 60 * 1000);
var start_time_temp =
parseInt(startTime_info[0], 10) * 60 * 60 * 1000 +
parseInt(startTime_info[1], 10) * 60 * 1000;
if (!isNaN(start_time_temp)) {
startTime = start_time_temp;
}
@ -90,28 +113,41 @@ function dayClick(date, allDay, jsEvent, view) {
} else {
// if in day or week view, selected has all the time info as well
// so we don't ahve to calculate it explicitly
startTime_string = pad(selected.getHours(), 2) + ":" + pad(selected.getMinutes(), 2)
startTime = 0
startTime_string =
pad(selected.getHours(), 2) + ":" + pad(selected.getMinutes(), 2);
startTime = 0;
}
// calculate endDateTime
var endDateTime = new Date(selected.getTime() + startTime + duration);
chosenDate = selected.getFullYear() + '-' + pad(selected.getMonth() + 1, 2) + '-' + pad(selected.getDate(), 2);
var endDateFormat = endDateTime.getFullYear() + '-' + pad(endDateTime.getMonth() + 1, 2) + '-' + pad(endDateTime.getDate(), 2);
chosenDate =
selected.getFullYear() +
"-" +
pad(selected.getMonth() + 1, 2) +
"-" +
pad(selected.getDate(), 2);
var endDateFormat =
endDateTime.getFullYear() +
"-" +
pad(endDateTime.getMonth() + 1, 2) +
"-" +
pad(endDateTime.getDate(), 2);
//TODO: This should all be refactored into a proper initialize() function for the show form.
$("#add_show_start_now-future").attr('checked', 'checked');
$("#add_show_start_now-now").removeProp('disabled');
$("#add_show_start_now-future").attr("checked", "checked");
$("#add_show_start_now-now").removeProp("disabled");
setupStartTimeWidgets(); //add-show.js
$("#add_show_start_date").val(chosenDate);
$("#add_show_end_date_no_repeat").val(endDateFormat);
$("#add_show_end_date").val(endDateFormat);
if (view.name !== "month") {
var endTimeString = pad(endDateTime.getHours(), 2) + ":" + pad(endDateTime.getMinutes(), 2);
$("#add_show_start_time").val(startTime_string)
$("#add_show_end_time").val(endTimeString)
var endTimeString =
pad(endDateTime.getHours(), 2) +
":" +
pad(endDateTime.getMinutes(), 2);
$("#add_show_start_time").val(startTime_string);
$("#add_show_end_time").val(endTimeString);
}
calculateShowColor();
$("#schedule-show-when").show();
@ -126,21 +162,20 @@ function dayClick(date, allDay, jsEvent, view) {
function viewDisplay(view) {
view_name = view.name;
if (view.name === 'agendaDay' || view.name === 'agendaWeek') {
if (view.name === "agendaDay" || view.name === "agendaWeek") {
var calendarEl = this;
var select = $('<select class="schedule_change_slots input_select"/>')
.append('<option value="1">' + $.i18n._("1m") + '</option>')
.append('<option value="5">' + $.i18n._("5m") + '</option>')
.append('<option value="10">' + $.i18n._("10m") + '</option>')
.append('<option value="15">' + $.i18n._("15m") + '</option>')
.append('<option value="30">' + $.i18n._("30m") + '</option>')
.append('<option value="60">' + $.i18n._("60m") + '</option>')
.append('<option value="1">' + $.i18n._("1m") + "</option>")
.append('<option value="5">' + $.i18n._("5m") + "</option>")
.append('<option value="10">' + $.i18n._("10m") + "</option>")
.append('<option value="15">' + $.i18n._("15m") + "</option>")
.append('<option value="30">' + $.i18n._("30m") + "</option>")
.append('<option value="60">' + $.i18n._("60m") + "</option>")
.change(function () {
var slotMin = $(this).val();
var opt = view.calendar.options;
var date = $(calendarEl).fullCalendar('getDate');
var date = $(calendarEl).fullCalendar("getDate");
opt.slotMinutes = parseInt(slotMin);
opt.events = getFullCalendarEvents;
@ -148,12 +183,12 @@ function viewDisplay(view) {
//re-initialize calendar with new slotmin options
$(calendarEl)
.fullCalendar('destroy')
.fullCalendar("destroy")
.fullCalendar(opt)
.fullCalendar('gotoDate', date);
.fullCalendar("gotoDate", date);
//save slotMin value to db
var url = baseUrl + 'Schedule/set-time-interval/format/json';
var url = baseUrl + "Schedule/set-time-interval/format/json";
$.post(url, { timeInterval: slotMin });
});
@ -162,15 +197,20 @@ function viewDisplay(view) {
//select.width(topLeft.width())
// .height(topLeft.height());
topLeft.empty()
.append(select);
topLeft.empty().append(select);
var slotMin = view.calendar.options.slotMinutes;
$('.schedule_change_slots option[value="' + slotMin + '"]').attr('selected', 'selected');
$('.schedule_change_slots option[value="' + slotMin + '"]').attr(
"selected",
"selected"
);
}
if (($("#add-show-form").length == 1) && ($("#add-show-form").css('display') == 'none') && ($('.fc-header-left > span').length == 5)) {
if (
$("#add-show-form").length == 1 &&
$("#add-show-form").css("display") == "none" &&
$(".fc-header-left > span").length == 5
) {
//userType is defined in bootstrap.php, and is derived from the currently logged in user.
if (userType == "S" || userType == "A" || userType == "P") {
makeAddShowButton();
@ -179,7 +219,7 @@ function viewDisplay(view) {
//save view name to db if it was changed
if (calendarPref.timeScale !== view.name) {
var url = baseUrl + 'Schedule/set-time-scale/format/json';
var url = baseUrl + "Schedule/set-time-scale/format/json";
$.post(url, { timeScale: view.name });
calendarPref.timeScale = view.name;
}
@ -192,35 +232,39 @@ function eventRender(event, element, view) {
$(element).data("event", event);
//only put progress bar on shows that aren't being recorded.
if ((view.name === 'agendaDay' || view.name === 'agendaWeek') && event.record === 0) {
var div = $('<div/>');
if (
(view.name === "agendaDay" || view.name === "agendaWeek") &&
event.record === 0
) {
var div = $("<div/>");
div
.height('5px')
.width('95%')
.css('margin-top', '1px')
.css('margin-left', 'auto')
.css('margin-right', 'auto')
.height("5px")
.width("95%")
.css("margin-top", "1px")
.css("margin-left", "auto")
.css("margin-right", "auto")
.progressbar({
value: event.percent
value: event.percent,
});
$(element).find(".fc-event-content").append(div);
}
if (event.record === 0 && event.rebroadcast === 0) {
if (view.name === 'agendaDay' || view.name === 'agendaWeek') {
if (view.name === "agendaDay" || view.name === "agendaWeek") {
if (event.show_empty === 1) {
if (event.linked) {
$(element)
.find(".fc-event-time")
.before('<span class="small-icon linked"></span><span class="small-icon show-empty"></span>');
.before(
'<span class="small-icon linked"></span><span class="small-icon show-empty"></span>'
);
// in theory a linked show shouldn't have an automatic playlist so adding this here
} else if (event.show_has_auto_playlist === true) {
$(element)
.find(".fc-event-time")
.before('<span class="small-icon autoplaylist"></span>');
}
else {
} else {
$(element)
.find(".fc-event-time")
.before('<span class="small-icon show-empty"></span>');
@ -229,7 +273,9 @@ function eventRender(event, element, view) {
if (event.linked) {
$(element)
.find(".fc-event-time")
.before('<span class="small-icon linked"></span><span class="small-icon show-partial-filled"></span>');
.before(
'<span class="small-icon linked"></span><span class="small-icon show-partial-filled"></span>'
);
} else if (event.show_has_auto_playlist === true) {
$(element)
.find(".fc-event-time")
@ -243,7 +289,9 @@ function eventRender(event, element, view) {
if (event.linked) {
$(element)
.find(".fc-event-time")
.before('<span class="small-icon linked"></span><span class="small-icon show-overbooked"></span>');
.before(
'<span class="small-icon linked"></span><span class="small-icon show-overbooked"></span>'
);
} else if (event.show_has_auto_playlist === true) {
$(element)
.find(".fc-event-time")
@ -253,7 +301,6 @@ function eventRender(event, element, view) {
.find(".fc-event-time")
.before('<span class="small-icon show-overbooked"></span>');
}
} else {
if (event.linked) {
$(element)
@ -265,48 +312,88 @@ function eventRender(event, element, view) {
.before('<span class="small-icon autoplaylist"></span>');
}
}
} else if (view.name === 'month') {
} else if (view.name === "month") {
if (event.show_empty === 1) {
if (event.linked) {
$(element)
.find(".fc-event-title")
.after('<span class="small-icon linked"></span><span title="' + $.i18n._("Show is empty") + '" class="small-icon show-empty"></span>');
.after(
'<span class="small-icon linked"></span><span title="' +
$.i18n._("Show is empty") +
'" class="small-icon show-empty"></span>'
);
} else if (event.show_has_auto_playlist === true) {
$(element)
.find(".fc-event-title")
.after('<span title="' + $.i18n._("Show has an automatic playlist") + '"class="small-icon autoplaylist"></span>');
.after(
'<span title="' +
$.i18n._("Show has an automatic playlist") +
'"class="small-icon autoplaylist"></span>'
);
} else {
$(element)
.find(".fc-event-title")
.after('<span title="' + $.i18n._("Show is empty") + '" class="small-icon show-empty"></span>');
.after(
'<span title="' +
$.i18n._("Show is empty") +
'" class="small-icon show-empty"></span>'
);
}
} else if (event.show_partial_filled === true) {
if (event.linked) {
$(element)
.find(".fc-event-title")
.after('<span class="small-icon linked"></span><span title="' + $.i18n._("Show is partially filled") + '" class="small-icon show-partial-filled"></span>');
.after(
'<span class="small-icon linked"></span><span title="' +
$.i18n._("Show is partially filled") +
'" class="small-icon show-partial-filled"></span>'
);
} else if (event.show_has_auto_playlist === true) {
$(element)
.find(".fc-event-title")
.after('<span title="' + $.i18n._("Show has an automatic playlist") + '"class="small-icon autoplaylist"></span>');
.after(
'<span title="' +
$.i18n._("Show has an automatic playlist") +
'"class="small-icon autoplaylist"></span>'
);
} else {
$(element)
.find(".fc-event-title")
.after('<span title="' + $.i18n._("Show is partially filled") + '" class="small-icon show-partial-filled"></span>');
.after(
'<span title="' +
$.i18n._("Show is partially filled") +
'" class="small-icon show-partial-filled"></span>'
);
}
} else if (event.percent > 100) {
if (event.linked) {
$(element)
.find(".fc-event-title")
.after('<span class="small-icon linked"></span><span title="' + $.i18n._("Shows longer than their scheduled time will be cut off by a following show.") + '" class="small-icon show-overbooked"></span>');
.after(
'<span class="small-icon linked"></span><span title="' +
$.i18n._(
"Shows longer than their scheduled time will be cut off by a following show."
) +
'" class="small-icon show-overbooked"></span>'
);
} else if (event.show_has_auto_playlist === true) {
$(element)
.find(".fc-event-title")
.after('<span title="' + $.i18n._("Show has an automatic playlist") + '"class="small-icon autoplaylist"></span>');
.after(
'<span title="' +
$.i18n._("Show has an automatic playlist") +
'"class="small-icon autoplaylist"></span>'
);
} else {
$(element)
.find(".fc-event-title")
.after('<span title="' + $.i18n._("Shows longer than their scheduled time will be cut off by a following show.") + '" class="small-icon show-overbooked"></span>');
.after(
'<span title="' +
$.i18n._(
"Shows longer than their scheduled time will be cut off by a following show."
) +
'" class="small-icon show-overbooked"></span>'
);
}
} else {
if (event.linked) {
@ -324,10 +411,14 @@ function eventRender(event, element, view) {
//rebroadcast icon
if (event.rebroadcast === 1) {
if (view.name === 'agendaDay' || view.name === 'agendaWeek') {
$(element).find(".fc-event-time").before('<span class="small-icon rebroadcast"></span>');
} else if (view.name === 'month') {
$(element).find(".fc-event-title").after('<span class="small-icon rebroadcast"></span>');
if (view.name === "agendaDay" || view.name === "agendaWeek") {
$(element)
.find(".fc-event-time")
.before('<span class="small-icon rebroadcast"></span>');
} else if (view.name === "month") {
$(element)
.find(".fc-event-title")
.after('<span class="small-icon rebroadcast"></span>');
}
}
@ -335,29 +426,36 @@ function eventRender(event, element, view) {
var span = '<span class="small-icon now-playing"></span>';
if (event.nowPlaying === true) {
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
if (view_name === "agendaDay" || view_name === "agendaWeek") {
$(element).find(".fc-event-time").before(span);
}
else if (view_name === 'month') {
} else if (view_name === "month") {
$(element).find(".fc-event-title").after(span);
}
}
}
function eventAfterRender(event, element, view) {
$(element).find(".small-icon").live('mouseover', function () {
$(element)
.find(".small-icon")
.live("mouseover", function () {
addQtipsToIcons($(this), event.id);
});
}
function eventDrop(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view) {
var url = baseUrl + 'Schedule/move-show/format/json';
function eventDrop(
event,
dayDelta,
minuteDelta,
allDay,
revertFunc,
jsEvent,
ui,
view
) {
var url = baseUrl + "Schedule/move-show/format/json";
$.post(url,
$.post(
url,
{ day: dayDelta, min: minuteDelta, showInstanceId: event.id },
function (json) {
if (json.show_error == true) {
@ -372,15 +470,29 @@ function eventDrop(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui
//time changes in a different way than Airtime does.
//(Airtime preserves show duration, FullCalendar doesn't.)
scheduleRefetchEvents(json);
});
}
);
}
function eventResize(event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view) {
var url = baseUrl + 'Schedule/resize-show/format/json';
function eventResize(
event,
dayDelta,
minuteDelta,
revertFunc,
jsEvent,
ui,
view
) {
var url = baseUrl + "Schedule/resize-show/format/json";
$.post(url,
{ day: dayDelta, min: minuteDelta, showId: event.showId, instanceId: event.id },
$.post(
url,
{
day: dayDelta,
min: minuteDelta,
showId: event.showId,
instanceId: event.id,
},
function (json) {
if (json.show_error == true) {
alertShowErrorAndReload();
@ -391,14 +503,15 @@ function eventResize(event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view
}
scheduleRefetchEvents(json);
});
}
);
}
function windowResize() {
// 200 px for top dashboard and 50 for padding on main content
// this calculation was copied from schedule.js line 326
var mainHeight = $(window).height() - 200 - 24;
$('#schedule_calendar').fullCalendar('option', 'contentHeight', mainHeight);
$("#schedule_calendar").fullCalendar("option", "contentHeight", mainHeight);
}
function preloadEventFeed() {
@ -407,7 +520,6 @@ function preloadEventFeed() {
var initialLoad = true;
function getFullCalendarEvents(start, end, callback) {
if (initialLoad) {
initialLoad = false;
callback(calendarEvents);
@ -416,13 +528,17 @@ function getFullCalendarEvents(start, end, callback) {
start_date = makeTimeStamp(start);
end_date = makeTimeStamp(end);
url = baseUrl + 'Schedule/event-feed';
url = baseUrl + "Schedule/event-feed";
var d = new Date();
$.post(url, { format: "json", start: start_date, end: end_date, cachep: d.getTime() }, function (json) {
$.post(
url,
{ format: "json", start: start_date, end: end_date, cachep: d.getTime() },
function (json) {
callback(json.events);
getUsabilityHint();
});
}
);
}
$(".fc-button").addClass("btn").addClass("btn-small");
@ -433,26 +549,20 @@ function getFullCalendarEvents(start, end, callback) {
* show icon
*/
function getCurrentShow() {
var url = baseUrl + 'Schedule/get-current-show/format/json';
var url = baseUrl + "Schedule/get-current-show/format/json";
function addNowPlaying(json) {
var $el,
span = '<span class="small-icon now-playing"></span>';
$(".now-playing").remove();
if (json.current_show === true) {
$el = $(".fc-show-instance-" + json.si_id);
if (view_name === 'agendaDay' || view_name === 'agendaWeek') {
if (view_name === "agendaDay" || view_name === "agendaWeek") {
$el.find(".fc-event-time").before(span);
}
else if (view_name === 'month') {
} else if (view_name === "month") {
$el.find(".fc-event-title").after(span);
}
}
@ -464,90 +574,91 @@ function getCurrentShow() {
}
function addQtipsToIcons(ele, id) {
if ($(ele).hasClass("progress")) {
$(ele).qtip({
content: {
text: $.i18n._("Uploading in progress...")
text: $.i18n._("Uploading in progress..."),
},
position: {
adjust: {
resize: true,
method: "flip flip"
method: "flip flip",
},
at: "right center",
my: "left top",
viewport: $(window)
viewport: $(window),
},
style: {
classes: "ui-tooltip-dark file-md-long"
classes: "ui-tooltip-dark file-md-long",
},
show: {
ready: true // Needed to make it show on first mouseover event
}
ready: true, // Needed to make it show on first mouseover event
},
});
} else if ($(ele).hasClass("show-empty")) {
$(ele).qtip({
content: {
text: $.i18n._("This show has no scheduled content.")
text: $.i18n._("This show has no scheduled content."),
},
position: {
adjust: {
resize: true,
method: "flip flip"
method: "flip flip",
},
at: "right center",
my: "left top",
viewport: $(window)
viewport: $(window),
},
style: {
classes: "ui-tooltip-dark file-md-long"
classes: "ui-tooltip-dark file-md-long",
},
show: {
ready: true // Needed to make it show on first mouseover event
}
ready: true, // Needed to make it show on first mouseover event
},
});
} else if ($(ele).hasClass("show-partial-filled")) {
$(ele).qtip({
content: {
text: $.i18n._("This show is not completely filled with content.")
text: $.i18n._("This show is not completely filled with content."),
},
position: {
adjust: {
resize: true,
method: "flip flip"
method: "flip flip",
},
at: "right center",
my: "left top",
viewport: $(window)
viewport: $(window),
},
style: {
classes: "ui-tooltip-dark file-md-long"
classes: "ui-tooltip-dark file-md-long",
},
show: {
ready: true // Needed to make it show on first mouseover event
}
ready: true, // Needed to make it show on first mouseover event
},
});
} else if ($(ele).hasClass("show-overbooked")) {
$(ele).qtip({
content: {
text: $.i18n._("Shows longer than their scheduled time will be cut off by a following show.")
text: $.i18n._(
"Shows longer than their scheduled time will be cut off by a following show."
),
},
position: {
adjust: {
resize: true,
method: "flip flip"
method: "flip flip",
},
at: "right center",
my: "left top",
viewport: $(window)
viewport: $(window),
},
style: {
classes: "ui-tooltip-dark file-md-long"
classes: "ui-tooltip-dark file-md-long",
},
show: {
ready: true // Needed to make it show on first mouseover event
}
ready: true, // Needed to make it show on first mouseover event
},
});
}
}

View File

@ -7,73 +7,72 @@ var AIRTIME = (function(AIRTIME){
mod = AIRTIME.schedule;
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});
var serverTimezoneOffset = 0;
function closeDialogCalendar(event, ui) {
$el = $(this);
$el.dialog('destroy');
$el.dialog("destroy");
$el.remove();
//need to refetch the events to update scheduled status.
$("#schedule_calendar").fullCalendar( 'refetchEvents' );
$("#schedule_calendar").fullCalendar("refetchEvents");
}
function confirmCancelShow(show_instance_id) {
if (confirm($.i18n._('Cancel Current Show?'))) {
if (confirm($.i18n._("Cancel Current Show?"))) {
var url = baseUrl + "Schedule/cancel-current-show";
$.ajax({
url: url,
data: { format: "json", id: show_instance_id },
success: function (data) {
scheduleRefetchEvents(data);
}
},
});
}
}
function confirmCancelRecordedShow(show_instance_id) {
if (confirm($.i18n._('Stop recording current show?'))) {
if (confirm($.i18n._("Stop recording current show?"))) {
var url = baseUrl + "Schedule/cancel-current-show";
$.ajax({
url: url,
data: { format: "json", id: show_instance_id },
success: function (data) {
scheduleRefetchEvents(data);
}
},
});
}
}
function findViewportDimensions() {
var viewportwidth,
viewportheight;
var viewportwidth, viewportheight;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use
// window.innerWidth and window.innerHeight
if (typeof window.innerWidth != 'undefined') {
viewportwidth = window.innerWidth, viewportheight = window.innerHeight;
if (typeof window.innerWidth != "undefined") {
(viewportwidth = window.innerWidth), (viewportheight = window.innerHeight);
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first
// line in the document)
else if (typeof document.documentElement != 'undefined'
&& typeof document.documentElement.clientWidth != 'undefined'
&& document.documentElement.clientWidth != 0) {
else if (
typeof document.documentElement != "undefined" &&
typeof document.documentElement.clientWidth != "undefined" &&
document.documentElement.clientWidth != 0
) {
viewportwidth = document.documentElement.clientWidth;
viewportheight = document.documentElement.clientHeight;
}
// older versions of IE
else {
viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
viewportheight = document.getElementsByTagName('body')[0].clientHeight;
viewportwidth = document.getElementsByTagName("body")[0].clientWidth;
viewportheight = document.getElementsByTagName("body")[0].clientHeight;
}
return {
width: viewportwidth,
height: viewportheight-45
height: viewportheight - 45,
};
}
@ -82,7 +81,7 @@ function highlightMediaTypeSelector(dialog) {
if (location.hash === "") {
selected = dialog.find("a[href$='#tracks']");
} else {
selected = dialog.find("a[href$='"+location.hash+"']")
selected = dialog.find("a[href$='" + location.hash + "']");
}
selected.parent().addClass("selected");
@ -94,7 +93,7 @@ function highlightMediaTypeSelector(dialog) {
$(this).find("a").get(0).click();
});
$(window).on('hashchange', function() {
$(window).on("hashchange", function () {
var selected = dialog.find("a[href$='" + location.hash + "']");
AIRTIME.library.selectNone();
dialog.find(".media_type_selector").each(function () {
@ -109,24 +108,24 @@ function highlightMediaTypeSelector(dialog) {
function buildTimerange(dialog) {
var builder = dialog.find("#show_builder"),
oBaseDatePickerSettings = {
dateFormat: 'yy-mm-dd',
dateFormat: "yy-mm-dd",
//i18n_months, i18n_days_short are in common.js
monthNames: i18n_months,
dayNamesMin: i18n_days_short,
onClick: function (sDate, oDatePicker) {
$(this).datepicker("setDate", sDate);
},
onClose: validateTimeRange
onClose: validateTimeRange,
},
oBaseTimePickerSettings = {
showPeriodLabels: false,
showCloseButton: true,
closeButtonText: $.i18n._("Done"),
showLeadingZero: false,
defaultTime: '0:00',
defaultTime: "0:00",
hourText: $.i18n._("Hour"),
minuteText: $.i18n._("Minute"),
onClose: validateTimeRange
onClose: validateTimeRange,
};
/*
@ -139,17 +138,17 @@ function buildTimerange(dialog) {
$(this).removeClass("ui-state-hover");
});
builder.find(dateStartId)
.datepicker(oBaseDatePickerSettings);
builder.find(timeStartId)
.timepicker(oBaseTimePickerSettings);
builder.find(dateEndId)
.datepicker(oBaseDatePickerSettings);
builder.find(timeEndId)
.timepicker(oBaseTimePickerSettings);
builder.find(dateStartId).datepicker(oBaseDatePickerSettings);
builder.find(timeStartId).timepicker(oBaseTimePickerSettings);
builder.find(dateEndId).datepicker(oBaseDatePickerSettings);
builder.find(timeEndId).timepicker(oBaseTimePickerSettings);
var oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId,
dateEndId, timeEndId);
var oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
AIRTIME.showbuilder.fnServerData.start = oRange.start;
AIRTIME.showbuilder.fnServerData.end = oRange.end;
}
@ -177,9 +176,9 @@ function buildScheduleDialog (json, instance_id) {
click: function () {
$(this).dialog("close");
//getUsabilityHint();
}
}
]
},
},
],
});
//set the start end times so the builder datatables knows its time range.
@ -193,7 +192,7 @@ function buildScheduleDialog (json, instance_id) {
AIRTIME.library.libraryInit();
AIRTIME.showbuilder.builderDataTable();
dialog.dialog('open');
dialog.dialog("open");
highlightMediaTypeSelector(dialog);
buildTimerange(dialog);
}
@ -201,15 +200,15 @@ function buildScheduleDialog (json, instance_id) {
function buildContentDialog(json) {
var dialog = $(json.dialog),
viewport = findViewportDimensions(),
height = viewport.height * 2/3,
width = viewport.width * 4/5;
height = (viewport.height * 2) / 3,
width = (viewport.width * 4) / 5;
if (json.show_error == true) {
alertShowErrorAndReload();
}
dialog.find("#show_progressbar").progressbar({
value: json.percentFilled
value: json.percentFilled,
});
dialog.dialog({
@ -222,15 +221,15 @@ function buildContentDialog (json){
buttons: [
{
text: $.i18n._("Ok"),
"class": "btn",
class: "btn",
click: function () {
dialog.remove();
}
}
]
},
},
],
});
dialog.dialog('open');
dialog.dialog("open");
}
/**
@ -248,66 +247,65 @@ function getTimeIntervalPreference(data) {
}
function createFullCalendar(data) {
serverTimezoneOffset = data.calendarInit.timezoneOffset;
var mainHeight = $(window).height() - 200 - 35;
$('#schedule_calendar').fullCalendar({
$("#schedule_calendar").fullCalendar({
header: {
left: 'prev, next, today',
center: 'title',
right: 'agendaDay, agendaWeek, month'
left: "prev, next, today",
center: "title",
right: "agendaDay, agendaWeek, month",
},
defaultView: getTimeScalePreference(data),
slotMinutes: getTimeIntervalPreference(data),
firstDay: data.calendarInit.weekStartDay,
editable: false,
allDaySlot: false,
axisFormat: 'H:mm',
axisFormat: "H:mm",
timeFormat: {
agenda: 'H:mm{ - H:mm}',
month: 'H:mm{ - H:mm}'
agenda: "H:mm{ - H:mm}",
month: "H:mm{ - H:mm}",
},
//i18n_months is in common.js
monthNames: i18n_months,
monthNamesShort: [
$.i18n._('Jan'),
$.i18n._('Feb'),
$.i18n._('Mar'),
$.i18n._('Apr'),
$.i18n._('May'),
$.i18n._('Jun'),
$.i18n._('Jul'),
$.i18n._('Aug'),
$.i18n._('Sep'),
$.i18n._('Oct'),
$.i18n._('Nov'),
$.i18n._('Dec')
$.i18n._("Jan"),
$.i18n._("Feb"),
$.i18n._("Mar"),
$.i18n._("Apr"),
$.i18n._("May"),
$.i18n._("Jun"),
$.i18n._("Jul"),
$.i18n._("Aug"),
$.i18n._("Sep"),
$.i18n._("Oct"),
$.i18n._("Nov"),
$.i18n._("Dec"),
],
buttonText: {
today: $.i18n._('Today'),
month: $.i18n._('Month'),
week: $.i18n._('Week'),
day: $.i18n._('Day')
today: $.i18n._("Today"),
month: $.i18n._("Month"),
week: $.i18n._("Week"),
day: $.i18n._("Day"),
},
dayNames: [
$.i18n._('Sunday'),
$.i18n._('Monday'),
$.i18n._('Tuesday'),
$.i18n._('Wednesday'),
$.i18n._('Thursday'),
$.i18n._('Friday'),
$.i18n._('Saturday')
$.i18n._("Sunday"),
$.i18n._("Monday"),
$.i18n._("Tuesday"),
$.i18n._("Wednesday"),
$.i18n._("Thursday"),
$.i18n._("Friday"),
$.i18n._("Saturday"),
],
dayNamesShort: [
$.i18n._('Sun'),
$.i18n._('Mon'),
$.i18n._('Tue'),
$.i18n._('Wed'),
$.i18n._('Thu'),
$.i18n._('Fri'),
$.i18n._('Sat')
$.i18n._("Sun"),
$.i18n._("Mon"),
$.i18n._("Tue"),
$.i18n._("Wed"),
$.i18n._("Thu"),
$.i18n._("Fri"),
$.i18n._("Sat"),
],
contentHeight: mainHeight,
theme: true,
@ -324,7 +322,7 @@ function createFullCalendar(data){
eventAfterRender: eventAfterRender,
eventDrop: eventDrop,
eventResize: eventResize,
windowResize: windowResize
windowResize: windowResize,
});
}
@ -336,29 +334,28 @@ function alertShowErrorAndReload(){
}
$(document).ready(function () {
$.contextMenu({
selector: 'div.fc-event',
selector: "div.fc-event",
trigger: "left",
ignoreRightClick: true,
className: 'calendar-context-menu',
className: "calendar-context-menu",
build: function ($el, e) {
var data,
items,
callback;
var data, items, callback;
data = $el.data("event");
function processMenuItems(oItems) {
//define a schedule callback.
if (oItems.schedule !== undefined) {
callback = function () {
$.post(oItems.schedule.url, {format: "json", id: data.id}, function(json){
$.post(
oItems.schedule.url,
{ format: "json", id: data.id },
function (json) {
buildScheduleDialog(json, data.id);
});
}
);
};
oItems.schedule.callback = callback;
@ -366,12 +363,15 @@ $(document).ready(function() {
//define a clear callback.
if (oItems.clear !== undefined) {
callback = function () {
if (confirm($.i18n._("Remove all content?"))) {
$.post(oItems.clear.url, {format: "json", id: data.id}, function(json){
$.post(
oItems.clear.url,
{ format: "json", id: data.id },
function (json) {
scheduleRefetchEvents(json);
});
}
);
}
};
oItems.clear.callback = callback;
@ -382,27 +382,53 @@ $(document).ready(function() {
if (oItems.edit.items !== undefined) {
var edit = oItems.edit.items;
//edit a single instance
callback = function () {
$.get(edit.instance.url, {format: "json", showId: data.showId, instanceId: data.id, type: "instance"}, function(json){
$.get(
edit.instance.url,
{
format: "json",
showId: data.showId,
instanceId: data.id,
type: "instance",
},
function (json) {
beginEditShow(json);
});
}
);
};
edit.instance.callback = callback;
//edit this instance and all
callback = function () {
$.get(edit.all.url, {format: "json", showId: data.showId, instanceId: data.id, type: "all"}, function(json){
$.get(
edit.all.url,
{
format: "json",
showId: data.showId,
instanceId: data.id,
type: "all",
},
function (json) {
beginEditShow(json);
});
}
);
};
edit.all.callback = callback;
} else {
callback = function () {
$.get(oItems.edit.url, {format: "json", showId: data.showId, instanceId: data.id, type: oItems.edit._type}, function(json){
$.get(
oItems.edit.url,
{
format: "json",
showId: data.showId,
instanceId: data.id,
type: oItems.edit._type,
},
function (json) {
beginEditShow(json);
});
}
);
};
oItems.edit.callback = callback;
}
@ -410,18 +436,20 @@ $(document).ready(function() {
//define a content callback.
if (oItems.content !== undefined) {
callback = function () {
$.get(oItems.content.url, {format: "json", id: data.id}, function(json){
$.get(
oItems.content.url,
{ format: "json", id: data.id },
function (json) {
buildContentDialog(json);
});
}
);
};
oItems.content.callback = callback;
}
//define a cancel recorded show callback.
if (oItems.cancel_recorded !== undefined) {
callback = function () {
confirmCancelRecordedShow(data.id);
};
@ -431,17 +459,20 @@ $(document).ready(function() {
//define a view recorded callback.
if (oItems.view_recorded !== undefined) {
callback = function () {
$.get(oItems.view_recorded.url, {format: "json"}, function(json){
$.get(
oItems.view_recorded.url,
{ format: "json" },
function (json) {
//in library.js
buildEditMetadataDialog(json);
});
}
);
};
oItems.view_recorded.callback = callback;
}
//define a cancel callback.
if (oItems.cancel !== undefined) {
callback = function () {
confirmCancelShow(data.id);
};
@ -450,34 +481,44 @@ $(document).ready(function() {
//define a delete callback.
if (oItems.del !== undefined) {
//repeating show multiple delete options
if (oItems.del.items !== undefined) {
var del = oItems.del.items;
//delete a single instance
callback = function () {
$.post(del.single.url, {format: "json", id: data.id}, function(json){
$.post(
del.single.url,
{ format: "json", id: data.id },
function (json) {
scheduleRefetchEvents(json);
});
}
);
};
del.single.callback = callback;
//delete this instance and all following instances.
callback = function () {
$.post(del.following.url, {format: "json", id: data.id}, function(json){
$.post(
del.following.url,
{ format: "json", id: data.id },
function (json) {
scheduleRefetchEvents(json);
});
}
);
};
del.following.callback = callback;
}
//single show
else {
callback = function () {
$.post(oItems.del.url, {format: "json", id: data.id}, function(json){
$.post(
oItems.del.url,
{ format: "json", id: data.id },
function (json) {
scheduleRefetchEvents(json);
});
}
);
};
oItems.del.callback = callback;
}
@ -494,18 +535,25 @@ $(document).ready(function() {
async: false,
success: function (json) {
processMenuItems(json.items);
}
},
});
return {
className: 'calendar-context-menu',
className: "calendar-context-menu",
items: items,
determinePosition: function ($menu, x, y) {
$menu.css('display', 'block')
.position({ my: "left top", at: "right top", of: this, offset: "-20 10", collision: "fit"})
.css('display', 'none');
}
$menu
.css("display", "block")
.position({
my: "left top",
at: "right top",
of: this,
offset: "-20 10",
collision: "fit",
})
.css("display", "none");
},
};
}
},
});
});

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
AIRTIME = (function (AIRTIME) {
var viewport,
$lib,
$libWrapper,
@ -23,14 +22,14 @@ AIRTIME = (function(AIRTIME) {
mod = AIRTIME.builderMain;
oBaseDatePickerSettings = {
dateFormat: 'yy-mm-dd',
dateFormat: "yy-mm-dd",
//i18n_months, i18n_days_short are in common.js
monthNames: i18n_months,
dayNamesMin: i18n_days_short,
onClick: function (sDate, oDatePicker) {
$(this).datepicker("setDate", sDate);
},
onClose: validateTimeRange
onClose: validateTimeRange,
};
oBaseTimePickerSettings = {
@ -38,10 +37,10 @@ AIRTIME = (function(AIRTIME) {
showCloseButton: true,
closeButtonText: $.i18n._("Done"),
showLeadingZero: false,
defaultTime: '0:00',
defaultTime: "0:00",
hourText: $.i18n._("Hour"),
minuteText: $.i18n._("Minute"),
onClose: validateTimeRange
onClose: validateTimeRange,
};
function setWidgetSize() {
@ -53,7 +52,7 @@ AIRTIME = (function(AIRTIME) {
builderTableHeight = widgetHeight - 95,
oTable;
if ($fs.is(':visible')) {
if ($fs.is(":visible")) {
builderTableHeight = builderTableHeight - 40;
}
@ -69,8 +68,7 @@ AIRTIME = (function(AIRTIME) {
//.css("max-height", libTableHeight)
.end();
if ($lib.filter(':visible').length > 0) {
if ($lib.filter(":visible").length > 0) {
//$lib.width(Math.floor(screenWidth * 0.47));
$builder //.width(Math.floor(screenWidth * 0.47))
@ -81,7 +79,7 @@ AIRTIME = (function(AIRTIME) {
.css("margin-left", 0)
.end();
oTable = $('#show_builder_table').dataTable();
oTable = $("#show_builder_table").dataTable();
//oTable.fnDraw();
}
}
@ -89,7 +87,7 @@ AIRTIME = (function(AIRTIME) {
function showSearchSubmit() {
var fn,
op,
oTable = $('#show_builder_table').dataTable(),
oTable = $("#show_builder_table").dataTable(),
check;
check = validateTimeRange();
@ -104,21 +102,19 @@ AIRTIME = (function(AIRTIME) {
op = $("div.sb-options-form");
if (op.is(":visible")) {
if (fn.ops === undefined) {
fn.ops = {};
}
fn.ops.showFilter = op.find("#sb_show_filter").val();
// Hacky?
fn.ops.myShows = (fn.ops.showFilter == -1) ? 1 : 0;
fn.ops.myShows = fn.ops.showFilter == -1 ? 1 : 0;
}
oTable.fnDraw();
}
}
function highlightMediaTypeSelector()
{
function highlightMediaTypeSelector() {
$(".media_type_selector:first").addClass("highlight");
var selected;
if (location.hash === "") {
@ -131,12 +127,15 @@ AIRTIME = (function(AIRTIME) {
selected.parent().addClass("selected");
$("#library_filter").text(selected.text());
$(window).on('hashchange', function() {
$(window).on("hashchange", function () {
var selected = $("a[href$='" + location.hash + "']"),
dashboardLink = $(".media_type_selector:first"),
tableType;
if (selected.parent().data("selection-id") == AIRTIME.library.MediaTypeIntegerEnum.PODCAST) {
if (
selected.parent().data("selection-id") ==
AIRTIME.library.MediaTypeIntegerEnum.PODCAST
) {
tableType = AIRTIME.library.DataTableTypeEnum.PODCAST;
} else {
tableType = AIRTIME.library.DataTableTypeEnum.LIBRARY;
@ -155,12 +154,11 @@ AIRTIME = (function(AIRTIME) {
});
}
mod.onReady = function () {
// Normally we would just use audio/*, but it includes file types that we can't handle (like .m4a)
// We initialize the acceptedMimeTypes variable in Bootstrap so we don't have to duplicate the list
Dropzone.options.content = {
url:'/rest/media',
url: "/rest/media",
clickable: false,
acceptedFiles: acceptedMimeTypes.join(),
init: function () {
@ -168,21 +166,21 @@ AIRTIME = (function(AIRTIME) {
data.append("csrf_token", $("#csrf").val());
});
},
dictDefaultMessage: '',
dictDefaultMessage: "",
createImageThumbnails: false,
previewTemplate : '<div style="display:none"></div>'
previewTemplate: '<div style="display:none"></div>',
};
// define module vars.
$lib = $("#library_content");
$builder = $("#show_builder");
$fs = $builder.find('fieldset');
$fs = $builder.find("fieldset");
//Highlight the media type selector we're currently on.
highlightMediaTypeSelector();
// always re-show builder if dashboard button was clicked
$('.media_type_selector:first').on('click', function() {
$(".media_type_selector:first").on("click", function () {
$builder.show();
AIRTIME.tabs.openScheduleTab();
});
@ -197,25 +195,32 @@ AIRTIME = (function(AIRTIME) {
$(this).removeClass("ui-state-hover");
});
$builder.find(dateStartId)
$builder
.find(dateStartId)
.datepicker(oBaseDatePickerSettings)
.blur(validateTimeRange);
$builder.find(timeStartId)
$builder
.find(timeStartId)
.timepicker(oBaseTimePickerSettings)
.blur(validateTimeRange);
$builder.find(dateEndId)
$builder
.find(dateEndId)
.datepicker(oBaseDatePickerSettings)
.blur(validateTimeRange);
$builder.find(timeEndId)
$builder
.find(timeEndId)
.timepicker(oBaseTimePickerSettings)
.blur(validateTimeRange);
oRange = AIRTIME.utilities.fnGetScheduleRange(dateStartId, timeStartId,
dateEndId, timeEndId);
oRange = AIRTIME.utilities.fnGetScheduleRange(
dateStartId,
timeStartId,
dateEndId,
timeEndId
);
AIRTIME.showbuilder.fnServerData.start = oRange.start;
AIRTIME.showbuilder.fnServerData.end = oRange.end;
@ -241,9 +246,14 @@ AIRTIME = (function(AIRTIME) {
$lib.show().width(Math.floor(screenWidth * 0.48));
$builder.width(Math.floor(screenWidth * 0.48)).find("#sb_edit")
.remove().end().find("#sb_date_start")
.css("margin-left", 0).end();
$builder
.width(Math.floor(screenWidth * 0.48))
.find("#sb_edit")
.remove()
.end()
.find("#sb_date_start")
.css("margin-left", 0)
.end();
schedTable.fnDraw();
@ -252,13 +262,12 @@ AIRTIME = (function(AIRTIME) {
type: "POST",
data: {
settings: {
library : true
library: true,
},
format : "json"
format: "json",
},
dataType: "json",
success : function() {
}
success: function () {},
});
});
@ -266,8 +275,13 @@ AIRTIME = (function(AIRTIME) {
var schedTable = $("#show_builder_table").dataTable();
$lib.hide();
$builder.width(screenWidth).find(".sb-timerange").find("#sb_date_start").css("margin-left", 30)
.end().end();
$builder
.width(screenWidth)
.find(".sb-timerange")
.find("#sb_date_start")
.css("margin-left", 30)
.end()
.end();
schedTable.fnDraw();
@ -276,21 +290,17 @@ AIRTIME = (function(AIRTIME) {
type: "POST",
data: {
settings: {
library : false
library: false,
},
format : "json"
format: "json",
},
dataType: "json",
success : function() {
}
success: function () {},
});
});
$builder.find('legend').click(
function(ev, item) {
$builder.find("legend").click(function (ev, item) {
if ($fs.hasClass("closed")) {
$fs.removeClass("closed");
//$builder.find('.dataTables_scrolling').css(
// "max-height", widgetHeight - 150);
@ -298,9 +308,8 @@ AIRTIME = (function(AIRTIME) {
$fs.addClass("closed");
// set defaults for the options.
$fs.find('select').val(0);
$fs.find('input[type="checkbox"]').attr("checked",
false);
$fs.find("select").val(0);
$fs.find('input[type="checkbox"]').attr("checked", false);
//$builder.find('.dataTables_scrolling').css(
// "max-height", widgetHeight - 110);
}
@ -308,29 +317,28 @@ AIRTIME = (function(AIRTIME) {
// set click event for all my shows checkbox.
$builder.on("click", "#sb_my_shows", function (ev) {
if ($(this).is(':checked')) {
$(ev.delegateTarget).find('#sb_show_filter').val(0);
if ($(this).is(":checked")) {
$(ev.delegateTarget).find("#sb_show_filter").val(0);
}
showSearchSubmit();
});
//set select event for choosing a show.
$builder.on("change", '#sb_show_filter', function(ev) {
$builder.on("change", "#sb_show_filter", function (ev) {
if ($(this).val() !== 0) {
$(ev.delegateTarget).find('#sb_my_shows')
.attr("checked", false);
$(ev.delegateTarget).find("#sb_my_shows").attr("checked", false);
}
showSearchSubmit();
});
function checkScheduleUpdates() {
var data = {}, oTable = $('#show_builder_table').dataTable(), fn = oTable
.fnSettings().fnServerData, start = fn.start, end = fn.end;
var data = {},
oTable = $("#show_builder_table").dataTable(),
fn = oTable.fnSettings().fnServerData,
start = fn.start,
end = fn.end;
data["format"] = "json";
data["start"] = start;
@ -345,16 +353,16 @@ AIRTIME = (function(AIRTIME) {
}
$.ajax({
"dataType" : "json",
"type" : "GET",
"url" : baseUrl+"showbuilder/check-builder-feed",
"data" : data,
"success" : function(json) {
dataType: "json",
type: "GET",
url: baseUrl + "showbuilder/check-builder-feed",
data: data,
success: function (json) {
if (json.update === true) {
oTable.fnDraw();
}
setTimeout(checkScheduleUpdates, 5000);
}
},
});
//check if the timeline view needs updating.
@ -363,14 +371,12 @@ AIRTIME = (function(AIRTIME) {
};
mod.onResize = function () {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(setWidgetSize, 100);
};
return AIRTIME;
} (AIRTIME || {}));
})(AIRTIME || {});
$(document).ready(AIRTIME.builderMain.onReady);
$(window).resize(AIRTIME.builderMain.onResize);

View File

@ -70,15 +70,30 @@ var AIRTIME = (function(AIRTIME){
self.uid = uid;
// TODO: clean this up a bit and use js instead of strings to create elements
var wrapper = "<div data-tab-id='" + self.id + "' id='pl-tab-content-" + self.id + "' class='side_playlist pl-content'><div class='editor_pane_wrapper'></div></div>",
t = $("#show_builder").append(wrapper).find("#pl-tab-content-" + self.id),
var wrapper =
"<div data-tab-id='" +
self.id +
"' id='pl-tab-content-" +
self.id +
"' class='side_playlist pl-content'><div class='editor_pane_wrapper'></div></div>",
t = $("#show_builder")
.append(wrapper)
.find("#pl-tab-content-" + self.id),
pane = $(".editor_pane_wrapper:last").append(html),
name = pane.find("#track_title").length > 0 ? pane.find("#track_title").val() + $.i18n._(" - Metadata Editor")
name =
pane.find("#track_title").length > 0
? pane.find("#track_title").val() + $.i18n._(" - Metadata Editor")
: pane.find(".playlist_name_display").val(),
tab =
"<li data-tab-id='" + self.id + "' id='pl-tab-" + self.id + "' role='presentation' class='active'>" +
"<li data-tab-id='" +
self.id +
"' id='pl-tab-" +
self.id +
"' role='presentation' class='active'>" +
"<a href='javascript:void(0)'>" +
"<span class='tab-name'>" + name + "</span>" +
"<span class='tab-name'>" +
name +
"</span>" +
"<span href='#' class='lib_pl_close icon-remove'></span>" +
"</a>" +
"</li>",
@ -111,7 +126,7 @@ var AIRTIME = (function(AIRTIME){
Tab.prototype._init = function () {
var self = this;
self.assignTabClickHandler(function (e) {
if (!$(this).hasClass('active')) {
if (!$(this).hasClass("active")) {
self.switchTo();
}
});
@ -130,9 +145,9 @@ var AIRTIME = (function(AIRTIME){
self.contents.on("click", ".toggle-editor-form", function (event) {
self.contents.find(".inner_editor_wrapper").slideToggle(200);
var buttonIcon = $(this).find('.icon-white');
buttonIcon.toggleClass('icon-chevron-up');
buttonIcon.toggleClass('icon-chevron-down');
var buttonIcon = $(this).find(".icon-white");
buttonIcon.toggleClass("icon-chevron-up");
buttonIcon.toggleClass("icon-chevron-down");
});
};
@ -206,9 +221,14 @@ var AIRTIME = (function(AIRTIME){
Tab.prototype.close = function () {
var self = this;
var ascTabs = Object.keys($openTabs).sort(function(a, b){return a-b}),
var ascTabs = Object.keys($openTabs).sort(function (a, b) {
return a - b;
}),
pos = ascTabs.indexOf(self.uid),
toTab = pos < ascTabs.length-1 ? $openTabs[ascTabs[++pos]] : $openTabs[ascTabs[--pos]];
toTab =
pos < ascTabs.length - 1
? $openTabs[ascTabs[++pos]]
: $openTabs[ascTabs[--pos]];
delete $openTabs[self.uid]; // Remove this tab from the open tab array
delete $tabMap[self.id]; // Remove this tab from the internal tab mapping
@ -222,15 +242,15 @@ var AIRTIME = (function(AIRTIME){
self.contents.hide();
}
if (self.isActive() && toTab) { // Closing the current tab, otherwise we don't need to switch tabs
if (self.isActive() && toTab) {
// Closing the current tab, otherwise we don't need to switch tabs
toTab.switchTo();
} else {
mod.onResize();
}
if (Object.keys($openTabs).length < 1) {
$('#show_builder').hide();
$("#show_builder").hide();
}
self._destroy();
@ -265,7 +285,8 @@ var AIRTIME = (function(AIRTIME){
* @constructor
*/
var ScheduleTab = function () {
var self = this, uid = 0,
var self = this,
uid = 0,
tab = $("#schedule-tab"),
pane = $("#show_builder"),
contents = pane.find(".outer-datatable-wrapper");
@ -321,7 +342,7 @@ var AIRTIME = (function(AIRTIME){
* @returns {Tab} the created Tab object
*/
mod.openTab = function (html, uid, callback) {
$('#show_builder').show();
$("#show_builder").show();
var newTab = new Tab(html, uid);
if (callback) callback(newTab);
return newTab;
@ -334,7 +355,7 @@ var AIRTIME = (function(AIRTIME){
*/
mod.openScheduleTab = function () {
var $scheduleTab = this.getScheduleTab();
$('#show_builder').show();
$("#show_builder").show();
$openTabs[0] = $scheduleTab;
$scheduleTab.tab.show();
$scheduleTab.contents.show();
@ -409,8 +430,7 @@ var AIRTIME = (function(AIRTIME){
mod.Tab = Tab;
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});
$(document).ready(function () {
var sb = $("#show_builder");
@ -418,7 +438,7 @@ $(document).ready(function() {
sb.addTitles(".tab-name");
sb.find(".nav.nav-tabs").sortable({
containment: "parent",
distance: 25
distance: 25,
});
// Initialize the ScheduleTab
AIRTIME.tabs.initScheduleTab();

View File

@ -1,44 +1,54 @@
function generatePartitions(partitions) {
var rowTemplate =
'<tr class="partition-info">' +
'<td><span class="strong">'+$.i18n._("Disk")+' #%s</span>'+
'<td><span class="strong">' +
$.i18n._("Disk") +
" #%s</span>" +
'<ul id="watched-dir-list-%s">' +
'</ul>'+
'</td>'+
'<td>%sGB of %sGB</td>'+
"</ul>" +
"</td>" +
"<td>%sGB of %sGB</td>" +
'<td colspan="3">' +
'<div class="big">' +
'<div class="diskspace" style="width:%s%%;">' +
'</div>'+
'</div>'+
'<div>%s%% '+$.i18n._("in use")+'</div>'+
'</td>'+
'</tr>';
"</div>" +
"</div>" +
"<div>%s%% " +
$.i18n._("in use") +
"</div>" +
"</td>" +
"</tr>";
$(".partition-info").remove();
var lastElement = $('#partitions');
var lastElement = $("#partitions");
for (var i = 0; i < partitions.length; i++) {
var spaceUsed = partitions[i].totalSpace - partitions[i].totalFreeSpace;
var totalSpace = partitions[i].totalSpace;
var percUsed = sprintf("%01.1f", spaceUsed/totalSpace*100);
var percUsed = sprintf("%01.1f", (spaceUsed / totalSpace) * 100);
var spaceUsedGb = sprintf("%01.1f", spaceUsed / Math.pow(2, 30));
var totalSpaceGb = sprintf("%01.1f", totalSpace / Math.pow(2, 30));
var row = sprintf(rowTemplate, i+1, i, spaceUsedGb, totalSpaceGb, percUsed, percUsed);
var row = sprintf(
rowTemplate,
i + 1,
i,
spaceUsedGb,
totalSpaceGb,
percUsed,
percUsed
);
var tr = $(row);
lastElement.after(tr);
if (partitions[i].dirs) {
var watched_dirs_ul = $('#watched-dir-list-'+i);
var watched_dirs_ul = $("#watched-dir-list-" + i);
for (var j = 0; j < partitions[i].dirs.length; j++) {
watched_dirs_ul.append('<li>'+partitions[i].dirs[j]+'</li>');
watched_dirs_ul.append("<li>" + partitions[i].dirs[j] + "</li>");
}
}
lastElement = tr;
}
}
function success(data, textStatus, jqXHR) {
@ -58,20 +68,32 @@ function success(data, textStatus, jqXHR){
}
$($(children[1]).children()[0]).attr("class", status_class);
$(children[2]).text(sprintf('%(days)sd %(hours)sh %(minutes)sm %(seconds)ss', convertSecondsToDaysHoursMinutesSeconds(s.uptime_seconds)));
$(children[2]).text(
sprintf(
"%(days)sd %(hours)sh %(minutes)sm %(seconds)ss",
convertSecondsToDaysHoursMinutesSeconds(s.uptime_seconds)
)
);
$(children[3]).text(s.cpu_perc);
$(children[4]).text(sprintf('%01.1fMB (%s)', parseInt(s.memory_kb)/1000, s.memory_perc));
$(children[4]).text(
sprintf("%01.1fMB (%s)", parseInt(s.memory_kb) / 1000, s.memory_perc)
);
}
}
if (data.status.partitions) {
generatePartitions(data.status.partitions);
}
setTimeout(function(){updateStatus(false);}, 5000);
setTimeout(function () {
updateStatus(false);
}, 5000);
}
function updateStatus(getDiskInfo) {
$.getJSON( baseUrl+"api/status/format/json/diskinfo/"+getDiskInfo, null, success);
$.getJSON(
baseUrl + "api/status/format/json/diskinfo/" + getDiskInfo,
null,
success
);
}
$(document).ready(function () {

View File

@ -1,146 +1,185 @@
function populateForm(entries) {
$(".errors").remove();
$(".success").remove();
$('.errors').remove();
$('.success').remove();
$('#tracktype_id').val(entries.id);
$('#code').val(entries.code);
$('#type_name').val(entries.type_name);
$('#description').val(entries.description);
$("#tracktype_id").val(entries.id);
$("#code").val(entries.code);
$("#type_name").val(entries.type_name);
$("#description").val(entries.description);
if (entries.visibility) {
var visibility_value = 1;
} else {
var visibility_value = 0;
}
$('#visibility').val(visibility_value);
$("#visibility").val(visibility_value);
if (entries.id.length != 0) {
$('#code').attr('readonly', 'readonly');
$("#code").attr("readonly", "readonly");
} else {
$('#code').removeAttr('readonly');
$("#code").removeAttr("readonly");
}
}
function rowClickCallback(row_id) {
$.ajax({ url: baseUrl+'Tracktype/get-tracktype-data/id/'+ row_id +'/format/json', dataType:"json", success:function(data){
$.ajax({
url: baseUrl + "Tracktype/get-tracktype-data/id/" + row_id + "/format/json",
dataType: "json",
success: function (data) {
populateForm(data.entries);
$("#tracktype_details").css("visibility", "visible");
}});
},
});
}
function removeTracktypeCallback(row_id, nRow) {
if (confirm($.i18n._("Are you sure you want to delete this tracktype?"))) {
$.ajax({
url: baseUrl + 'Tracktype/remove-tracktype/id/' + row_id + '/format/json',
url: baseUrl + "Tracktype/remove-tracktype/id/" + row_id + "/format/json",
dataType: "text",
success: function (data) {
var o = $('#tracktypes_datatable').dataTable().fnDeleteRow(nRow);
}
var o = $("#tracktypes_datatable").dataTable().fnDeleteRow(nRow);
},
});
}
}
function rowCallback(nRow, aData, iDisplayIndex) {
$(nRow).click(function(){rowClickCallback(aData['id'])});
if( aData['delete'] != "self"){
$('td:eq(4)', nRow).append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); removeTracktypeCallback(aData['id'], nRow)});
$(nRow).click(function () {
rowClickCallback(aData["id"]);
});
if (aData["delete"] != "self") {
$("td:eq(4)", nRow)
.append('<span class="ui-icon ui-icon-closethick"></span>')
.children("span")
.click(function (e) {
e.stopPropagation();
removeTracktypeCallback(aData["id"], nRow);
});
} else {
$('td:eq(4)', nRow).empty().append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); alert("Can't delete yourself!")});
$("td:eq(4)", nRow)
.empty()
.append('<span class="ui-icon ui-icon-closethick"></span>')
.children("span")
.click(function (e) {
e.stopPropagation();
alert("Can't delete yourself!");
});
}
if ( aData['visibility'] == "1" ) {
$('td:eq(3)', nRow).html( $.i18n._('Enabled') );
if (aData["visibility"] == "1") {
$("td:eq(3)", nRow).html($.i18n._("Enabled"));
} else {
$('td:eq(3)', nRow).html( $.i18n._('Disabled') );
$("td:eq(3)", nRow).html($.i18n._("Disabled"));
}
return nRow;
}
function populateTracktypeTable() {
var dt = $('#tracktypes_datatable');
var dt = $("#tracktypes_datatable");
dt.dataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": baseUrl+"Tracktype/get-tracktype-data-table-info/format/json",
"fnServerData": function ( sSource, aoData, fnCallback ) {
bProcessing: true,
bServerSide: true,
sAjaxSource:
baseUrl + "Tracktype/get-tracktype-data-table-info/format/json",
fnServerData: function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
dataType: "json",
type: "POST",
url: sSource,
data: aoData,
success: fnCallback,
});
},
"fnRowCallback": rowCallback,
"aoColumns": [
/* Id */ { "sName": "id", "bSearchable": false, "bVisible": false, "mDataProp": "id" },
/* code */ { "sName": "code", "mDataProp": "code" },
/* type_name */ { "sName": "type_name", "mDataProp": "type_name" },
/* description */ { "sName": "description", "mDataProp": "description" },
/* visibility */ { "sName": "visibility", "bSearchable": false, "mDataProp": "visibility" },
/* del button */ { "sName": "null as delete", "bSearchable": false, "bSortable": false, "mDataProp": "delete"}
fnRowCallback: rowCallback,
aoColumns: [
/* Id */ {
sName: "id",
bSearchable: false,
bVisible: false,
mDataProp: "id",
},
/* code */ { sName: "code", mDataProp: "code" },
/* type_name */ { sName: "type_name", mDataProp: "type_name" },
/* description */ { sName: "description", mDataProp: "description" },
/* visibility */ {
sName: "visibility",
bSearchable: false,
mDataProp: "visibility",
},
/* del button */ {
sName: "null as delete",
bSearchable: false,
bSortable: false,
mDataProp: "delete",
},
],
"bJQueryUI": true,
"bAutoWidth": false,
"bLengthChange": false,
"oLanguage": getDatatablesStrings({
"sEmptyTable": $.i18n._("No track types were found."),
"sEmptyTable": $.i18n._("No track types found"),
"sZeroRecords": $.i18n._("No matching track types found"),
"sInfo": $.i18n._("Showing _START_ to _END_ of _TOTAL_ track types"),
"sInfoEmpty": $.i18n._("Showing 0 to 0 of 0 track types"),
"sInfoFiltered": $.i18n._("(filtered from _MAX_ total track types)"),
bJQueryUI: true,
bAutoWidth: false,
bLengthChange: false,
oLanguage: getDatatablesStrings({
sEmptyTable: $.i18n._("No track types were found."),
sEmptyTable: $.i18n._("No track types found"),
sZeroRecords: $.i18n._("No matching track types found"),
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ track types"),
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 track types"),
sInfoFiltered: $.i18n._("(filtered from _MAX_ total track types)"),
}),
"sDom": '<"H"lf<"dt-process-rel"r>><"#tracktype_list_inner_wrapper"t><"F"ip>'
sDom: '<"H"lf<"dt-process-rel"r>><"#tracktype_list_inner_wrapper"t><"F"ip>',
});
}
function sizeFormElements() {
$("dt[id$='label']").addClass('tracktype-form-label');
$("dd[id$='element']").addClass('tracktype-form-element');
$("dt[id$='label']").addClass("tracktype-form-label");
$("dd[id$='element']").addClass("tracktype-form-element");
}
function initTracktypeData() {
var visibility = $('#visibility');
var visibility = $("#visibility");
var table = $("#tracktypes_datable"); //.DataTable();
$('.datatable tbody').on( 'click', 'tr', function () {
$(this).parent().find('tr.selected').removeClass('selected');
$(this).addClass('selected');
$(".datatable tbody").on("click", "tr", function () {
$(this).parent().find("tr.selected").removeClass("selected");
$(this).addClass("selected");
});
$('#button').click( function () {
table.row('.selected').remove().draw( false );
$("#button").click(function () {
table.row(".selected").remove().draw(false);
});
var newTracktype = {code:"", type_name:"", description:"", visibility:"1", id:""};
var newTracktype = {
code: "",
type_name: "",
description: "",
visibility: "1",
id: "",
};
$('#add_tracktype_button').live('click', function(){
$("#add_tracktype_button").live("click", function () {
populateForm(newTracktype);
$("#tracktype_details").css("visibility", "visible");
});
}
$(document).ready(function () {
populateTracktypeTable();
initTracktypeData();
$('#save_tracktype').live('click', function(){
var data = $('#tracktype_form').serialize();
var url = baseUrl+'Tracktype/add-tracktype';
$("#save_tracktype").live("click", function () {
var data = $("#tracktype_form").serialize();
var url = baseUrl + "Tracktype/add-tracktype";
$.post(url, { format: "json", data: data }, function (json) {
if (json.valid === "true") {
$('#content').empty().append(json.html);
$("#content").empty().append(json.html);
populateTracktypeTable();
init(); // Reinitialize
} else {
//if form is invalid we only need to redraw the form
$('#tracktype_form').empty().append($(json.html).find('#tracktype_form').children());
$("#tracktype_form")
.empty()
.append($(json.html).find("#tracktype_form").children());
}
setTimeout(removeSuccessMsg, 5000);
sizeFormElements();

View File

@ -1,187 +1,241 @@
function populateForm(entries) {
//$('#user_details').show();
$('.errors').remove();
$('.success').remove();
$(".errors").remove();
$(".success").remove();
if (entries.type === 'S')
{
if (entries.type === "S") {
$("#user_details").hide();
$("#user_details_superadmin_message").show();
$('#type').attr('disabled', '1');
$("#type").attr("disabled", "1");
} else {
$("#user_details").show();
$("#user_details_superadmin_message").hide();
$('#type').removeAttr('disabled');
$("#type").removeAttr("disabled");
}
$('#user_id').val(entries.id);
$('#login').val(entries.login);
$('#first_name').val(entries.first_name);
$('#last_name').val(entries.last_name);
$('#type').val(entries.type);
$('#email').val(entries.email);
$('#cell_phone').val(entries.cell_phone);
$('#skype').val(entries.skype_contact);
$('#jabber').val(entries.jabber_contact);
$("#user_id").val(entries.id);
$("#login").val(entries.login);
$("#first_name").val(entries.first_name);
$("#last_name").val(entries.last_name);
$("#type").val(entries.type);
$("#email").val(entries.email);
$("#cell_phone").val(entries.cell_phone);
$("#skype").val(entries.skype_contact);
$("#jabber").val(entries.jabber_contact);
if (entries.id.length != 0) {
$('#login').attr('readonly', 'readonly');
$('#password').val("xxxxxx");
$('#passwordVerify').val("xxxxxx");
$("#login").attr("readonly", "readonly");
$("#password").val("xxxxxx");
$("#passwordVerify").val("xxxxxx");
} else {
$('#login').removeAttr('readonly');
$('#password').val("");
$('#passwordVerify').val("");
$("#login").removeAttr("readonly");
$("#password").val("");
$("#passwordVerify").val("");
}
}
function rowClickCallback(row_id) {
$.ajax({ url: baseUrl+'User/get-user-data/id/'+ row_id +'/format/json', dataType:"json", success:function(data){
$.ajax({
url: baseUrl + "User/get-user-data/id/" + row_id + "/format/json",
dataType: "json",
success: function (data) {
populateForm(data.entries);
$("#user_details").css("visibility", "visible");
}});
},
});
}
function removeUserCallback(row_id, nRow) {
if (confirm($.i18n._("Are you sure you want to delete this user?"))) {
$.ajax({
url: baseUrl + 'User/remove-user/id/' + row_id + '/format/json',
url: baseUrl + "User/remove-user/id/" + row_id + "/format/json",
dataType: "text",
success: function (data) {
var o = $('#users_datatable').dataTable().fnDeleteRow(nRow);
}
var o = $("#users_datatable").dataTable().fnDeleteRow(nRow);
},
});
}
}
function rowCallback(nRow, aData, iDisplayIndex) {
$(nRow).click(function(){rowClickCallback(aData['id'])});
if( aData['delete'] != "self"){
$('td:eq(4)', nRow).append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); removeUserCallback(aData['id'], nRow)});
$(nRow).click(function () {
rowClickCallback(aData["id"]);
});
if (aData["delete"] != "self") {
$("td:eq(4)", nRow)
.append('<span class="ui-icon ui-icon-closethick"></span>')
.children("span")
.click(function (e) {
e.stopPropagation();
removeUserCallback(aData["id"], nRow);
});
} else {
$('td:eq(4)', nRow).empty().append( '<span class="ui-icon ui-icon-closethick"></span>').children('span').click(function(e){e.stopPropagation(); alert($.i18n._("Can't delete yourself!"))});
$("td:eq(4)", nRow)
.empty()
.append('<span class="ui-icon ui-icon-closethick"></span>')
.children("span")
.click(function (e) {
e.stopPropagation();
alert($.i18n._("Can't delete yourself!"));
});
}
if ( aData['type'] == "A" )
{
$('td:eq(3)', nRow).html( $.i18n._('Admin') );
} else if ( aData['type'] == "H" )
{
$('td:eq(3)', nRow).html( $.i18n._('DJ') );
} else if ( aData['type'] == "G" )
{
$('td:eq(3)', nRow).html( $.i18n._('Guest') );
} else if ( aData['type'] == "P" )
{
$('td:eq(3)', nRow).html( $.i18n._('Program Manager') );
} else if ( aData['type'] == "S" )
{
$('td:eq(3)', nRow).html( $.i18n._('Super Admin') );
$('td:eq(4)', nRow).html(""); //Disable deleting the super admin
if (aData["type"] == "A") {
$("td:eq(3)", nRow).html($.i18n._("Admin"));
} else if (aData["type"] == "H") {
$("td:eq(3)", nRow).html($.i18n._("DJ"));
} else if (aData["type"] == "G") {
$("td:eq(3)", nRow).html($.i18n._("Guest"));
} else if (aData["type"] == "P") {
$("td:eq(3)", nRow).html($.i18n._("Program Manager"));
} else if (aData["type"] == "S") {
$("td:eq(3)", nRow).html($.i18n._("Super Admin"));
$("td:eq(4)", nRow).html(""); //Disable deleting the super admin
}
return nRow;
}
function populateUserTable() {
var dt = $('#users_datatable');
var dt = $("#users_datatable");
dt.dataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": baseUrl+"User/get-user-data-table-info/format/json",
"fnServerData": function ( sSource, aoData, fnCallback ) {
bProcessing: true,
bServerSide: true,
sAjaxSource: baseUrl + "User/get-user-data-table-info/format/json",
fnServerData: function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": fnCallback
dataType: "json",
type: "POST",
url: sSource,
data: aoData,
success: fnCallback,
});
},
"fnRowCallback": rowCallback,
"aoColumns": [
/* Id */ { "sName": "id", "bSearchable": false, "bVisible": false, "mDataProp": "id" },
/* user name */ { "sName": "login", "mDataProp": "login" },
/* first name */ { "sName": "first_name", "mDataProp": "first_name" },
/* last name */ { "sName": "last_name", "mDataProp": "last_name" },
/* user type */ { "sName": "type", "bSearchable": false, "mDataProp": "type" },
/* del button */ { "sName": "null as delete", "bSearchable": false, "bSortable": false, "mDataProp": "delete"}
fnRowCallback: rowCallback,
aoColumns: [
/* Id */ {
sName: "id",
bSearchable: false,
bVisible: false,
mDataProp: "id",
},
/* user name */ { sName: "login", mDataProp: "login" },
/* first name */ { sName: "first_name", mDataProp: "first_name" },
/* last name */ { sName: "last_name", mDataProp: "last_name" },
/* user type */ { sName: "type", bSearchable: false, mDataProp: "type" },
/* del button */ {
sName: "null as delete",
bSearchable: false,
bSortable: false,
mDataProp: "delete",
},
],
"bJQueryUI": true,
"bAutoWidth": false,
"bLengthChange": false,
"oLanguage": getDatatablesStrings({
"sEmptyTable": $.i18n._("No users were found."),
"sEmptyTable": $.i18n._("No users found"),
"sZeroRecords": $.i18n._("No matching users found"),
"sInfo": $.i18n._("Showing _START_ to _END_ of _TOTAL_ users"),
"sInfoEmpty": $.i18n._("Showing 0 to 0 of 0 users"),
"sInfoFiltered": $.i18n._("(filtered from _MAX_ total users)"),
bJQueryUI: true,
bAutoWidth: false,
bLengthChange: false,
oLanguage: getDatatablesStrings({
sEmptyTable: $.i18n._("No users were found."),
sEmptyTable: $.i18n._("No users found"),
sZeroRecords: $.i18n._("No matching users found"),
sInfo: $.i18n._("Showing _START_ to _END_ of _TOTAL_ users"),
sInfoEmpty: $.i18n._("Showing 0 to 0 of 0 users"),
sInfoFiltered: $.i18n._("(filtered from _MAX_ total users)"),
}),
"sDom": '<"H"lf<"dt-process-rel"r>><"#user_list_inner_wrapper"t><"F"ip>'
sDom: '<"H"lf<"dt-process-rel"r>><"#user_list_inner_wrapper"t><"F"ip>',
});
}
function sizeFormElements() {
$("dt[id$='label']").addClass('user-form-label');
$("dd[id$='element']").addClass('user-form-element');
$("dt[id$='label']").addClass("user-form-label");
$("dd[id$='element']").addClass("user-form-element");
}
function assignUserRightsToUserTypes() {
//assign user-rights and id to each user type option so we can
//display user rights for each with tipsy tooltip
$.each($('#type').children(), function(i, opt) {
$.each($("#type").children(), function (i, opt) {
switch ($(this).val()) {
case 'G':
$(this).attr('id', 'user-type-G');
$(this).attr('user-rights',
$.i18n._('Guests can do the following:')+'<br><br>'+
$.i18n._('View schedule')+'<br>'+
$.i18n._('View show content')
case "G":
$(this).attr("id", "user-type-G");
$(this).attr(
"user-rights",
$.i18n._("Guests can do the following:") +
"<br><br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View show content")
);
break;
case 'H':
$(this).attr('id', 'user-type-H');
$(this).attr('user-rights',
$.i18n._('DJs can do the following:')+'<br><br>'+
$.i18n._('View schedule')+'<br>'+
$.i18n._('View show content')+'<br>'+
$.i18n._('Manage assigned show content')+'<br>'+
$.i18n._('Import media files')+'<br>'+
$.i18n._('Create playlists, smart blocks, and webstreams')+'<br>'+
$.i18n._('Manage their own library content')
case "H":
$(this).attr("id", "user-type-H");
$(this).attr(
"user-rights",
$.i18n._("DJs can do the following:") +
"<br><br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View show content") +
"<br>" +
$.i18n._("Manage assigned show content") +
"<br>" +
$.i18n._("Import media files") +
"<br>" +
$.i18n._("Create playlists, smart blocks, and webstreams") +
"<br>" +
$.i18n._("Manage their own library content")
);
break;
case 'P':
$(this).attr('id', 'user-type-P');
$(this).attr('user-rights',
$.i18n._('Program Managers can do the following:')+'<br><br>'+
$.i18n._('View schedule')+'<br>'+
$.i18n._('View and manage show content')+'<br>'+
$.i18n._('Schedule shows')+'<br>'+
$.i18n._('Import media files')+'<br>'+
$.i18n._('Create playlists, smart blocks, and webstreams')+'<br>'+
$.i18n._('Manage all library content')
case "P":
$(this).attr("id", "user-type-P");
$(this).attr(
"user-rights",
$.i18n._("Program Managers can do the following:") +
"<br><br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View and manage show content") +
"<br>" +
$.i18n._("Schedule shows") +
"<br>" +
$.i18n._("Import media files") +
"<br>" +
$.i18n._("Create playlists, smart blocks, and webstreams") +
"<br>" +
$.i18n._("Manage all library content")
);
break;
case 'A':
$(this).attr('id', 'user-type-A');
$(this).attr('user-rights',
$.i18n._('Admins can do the following:')+'<br><br>'+
$.i18n._('Manage preferences')+'<br>'+
$.i18n._('Manage users')+'<br>'+
$.i18n._('Manage watched folders')+'<br>'+
$.i18n._('Send support feedback')+'<br>'+
$.i18n._('View system status')+'<br>'+
$.i18n._('Access playout history')+'<br>'+
$.i18n._('View listener stats')+'<br>'+
$.i18n._('View schedule')+'<br>'+
$.i18n._('View and manage show content')+'<br>'+
$.i18n._('Schedule shows')+'<br>'+
$.i18n._('Import media files')+'<br>'+
$.i18n._('Create playlists, smart blocks, and webstreams')+'<br>'+
$.i18n._('Manage all library content')
case "A":
$(this).attr("id", "user-type-A");
$(this).attr(
"user-rights",
$.i18n._("Admins can do the following:") +
"<br><br>" +
$.i18n._("Manage preferences") +
"<br>" +
$.i18n._("Manage users") +
"<br>" +
$.i18n._("Manage watched folders") +
"<br>" +
$.i18n._("Send support feedback") +
"<br>" +
$.i18n._("View system status") +
"<br>" +
$.i18n._("Access playout history") +
"<br>" +
$.i18n._("View listener stats") +
"<br>" +
$.i18n._("View schedule") +
"<br>" +
$.i18n._("View and manage show content") +
"<br>" +
$.i18n._("Schedule shows") +
"<br>" +
$.i18n._("Import media files") +
"<br>" +
$.i18n._("Create playlists, smart blocks, and webstreams") +
"<br>" +
$.i18n._("Manage all library content")
);
break;
}
@ -189,40 +243,40 @@ function assignUserRightsToUserTypes() {
}
function initUserData() {
var type = $('#type');
var type = $("#type");
type.live("change", function () {
//when the title changes on live tipsy tooltips the changes take
//affect the next time tipsy is shown so we need to hide and re-show it
$(this).tipsy('hide').tipsy('show');
$(this).tipsy("hide").tipsy("show");
});
type.tipsy({
gravity: 'w',
gravity: "w",
html: true,
opacity: 0.9,
trigger: 'manual',
trigger: "manual",
live: true,
title: function () {
return $('#user-type-'+$(this).val()).attr('user-rights');
}
return $("#user-type-" + $(this).val()).attr("user-rights");
},
});
var table = $("#users_datable"); //.DataTable();
$('.datatable tbody').on( 'click', 'tr', function () {
$(this).parent().find('tr.selected').removeClass('selected');
$(this).addClass('selected');
$(".datatable tbody").on("click", "tr", function () {
$(this).parent().find("tr.selected").removeClass("selected");
$(this).addClass("selected");
});
$('#button').click( function () {
table.row('.selected').remove().draw( false );
$("#button").click(function () {
table.row(".selected").remove().draw(false);
});
type.tipsy('show');
type.tipsy("show");
var newUser = { login: "", first_name: "", last_name: "", type: "G", id: "" };
$('#add_user_button').live('click', function(){
$("#add_user_button").live("click", function () {
populateForm(newUser);
$("#user_details").css("visibility", "visible");
});
@ -233,21 +287,23 @@ $(document).ready(function() {
assignUserRightsToUserTypes();
initUserData();
$('#save_user').live('click', function(){
var data = $('#user_form').serialize();
var url = baseUrl+'User/add-user';
$("#save_user").live("click", function () {
var data = $("#user_form").serialize();
var url = baseUrl + "User/add-user";
$.post(url, { format: "json", data: data }, function (json) {
if (json.valid === "true") {
$('#content').empty().append(json.html);
$("#content").empty().append(json.html);
populateUserTable();
assignUserRightsToUserTypes();
init(); // Reinitialize
} else {
//if form is invalid we only need to redraw the form
$('#user_form').empty().append($(json.html).find('#user_form').children());
$('#password').val("");
$('#passwordVerify').val("");
$("#user_form")
.empty()
.append($(json.html).find("#user_form").children());
$("#password").val("");
$("#passwordVerify").val("");
}
setTimeout(removeSuccessMsg, 5000);
sizeFormElements();

View File

@ -7,31 +7,33 @@ var AIRTIME = (function(AIRTIME){
mod = AIRTIME.utilities;
mod.findViewportDimensions = function () {
var viewportwidth,
viewportheight;
var viewportwidth, viewportheight;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use
// window.innerWidth and window.innerHeight
if (typeof window.innerWidth != 'undefined') {
viewportwidth = window.innerWidth, viewportheight = window.innerHeight;
if (typeof window.innerWidth != "undefined") {
(viewportwidth = window.innerWidth),
(viewportheight = window.innerHeight);
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first
// line in the document)
else if (typeof document.documentElement != 'undefined'
&& typeof document.documentElement.clientWidth != 'undefined'
&& document.documentElement.clientWidth != 0) {
else if (
typeof document.documentElement != "undefined" &&
typeof document.documentElement.clientWidth != "undefined" &&
document.documentElement.clientWidth != 0
) {
viewportwidth = document.documentElement.clientWidth;
viewportheight = document.documentElement.clientHeight;
}
// older versions of IE
else {
viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
viewportheight = document.getElementsByTagName('body')[0].clientHeight;
viewportwidth = document.getElementsByTagName("body")[0].clientWidth;
viewportheight = document.getElementsByTagName("body")[0].clientHeight;
}
return {
width: viewportwidth,
height: viewportheight
height: viewportheight,
};
};
@ -40,10 +42,13 @@ var AIRTIME = (function(AIRTIME){
*
* @return Object {"start", "end", "range"}
*/
mod.fnGetScheduleRange = function(dateStartId, timeStartId, dateEndId, timeEndId) {
var start,
end,
time;
mod.fnGetScheduleRange = function (
dateStartId,
timeStartId,
dateEndId,
timeEndId
) {
var start, end, time;
start = $(dateStartId).val();
start = start === "" ? null : start;
@ -67,10 +72,9 @@ var AIRTIME = (function(AIRTIME){
return {
start: start,
end: end
end: end,
};
};
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});

View File

@ -2,31 +2,77 @@
* Created by asantoni on 11/09/15.
*/
$(document).ready(function () {
var aoColumns = [
/* Artwork */ { "sTitle" : $.i18n._("Artwork") , "mDataProp" : "artwork" , "bVisible" : false , "sClass" : "library_artwork" , "sWidth" : "150px" },
/* Title */ { "sTitle" : $.i18n._("Title") , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" },
/* Creator */ { "sTitle" : $.i18n._("Creator") , "mDataProp" : "artist_name" , "sClass" : "library_creator" , "sWidth" : "160px" },
/* 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" },
/* Artwork */ {
sTitle: $.i18n._("Artwork"),
mDataProp: "artwork",
bVisible: false,
sClass: "library_artwork",
sWidth: "150px",
},
/* Title */ {
sTitle: $.i18n._("Title"),
mDataProp: "track_title",
sClass: "library_title",
sWidth: "170px",
},
/* Creator */ {
sTitle: $.i18n._("Creator"),
mDataProp: "artist_name",
sClass: "library_creator",
sWidth: "160px",
},
/* 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",
},
];
var ajaxSourceURL = baseUrl + "rest/media";
var myToolbarButtons = AIRTIME.widgets.Table.getStandardToolbarButtons();
myToolbarButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.NEW].eventHandlers.click = function(e) { alert('New!'); };
myToolbarButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.EDIT].eventHandlers.click = function(e) { alert('Edit!'); };
myToolbarButtons[AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.DELETE].eventHandlers.click = function(e) { alert('Delete!'); };
myToolbarButtons[
AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.NEW
].eventHandlers.click = function (e) {
alert("New!");
};
myToolbarButtons[
AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.EDIT
].eventHandlers.click = function (e) {
alert("Edit!");
};
myToolbarButtons[
AIRTIME.widgets.Table.TOOLBAR_BUTTON_ROLES.DELETE
].eventHandlers.click = function (e) {
alert("Delete!");
};
//Set up the div with id "example-table" as a datatable.
var table = new AIRTIME.widgets.Table(
$('#example-table'), //DOM node to create the table inside.
$("#example-table"), //DOM node to create the table inside.
true, //Enable item selection
myToolbarButtons, //Toolbar buttons
{ //Datatables overrides.
'aoColumns' : aoColumns,
'sAjaxSource' : ajaxSourceURL
});
{
//Datatables overrides.
aoColumns: aoColumns,
sAjaxSource: ajaxSourceURL,
}
);
});

View File

@ -3,7 +3,6 @@
*/
var AIRTIME = (function (AIRTIME) {
//Module initialization
if (AIRTIME.widgets === undefined) {
AIRTIME.widgets = {};
@ -24,8 +23,13 @@ var AIRTIME = (function(AIRTIME) {
* @returns {Table}
* @constructor
*/
var Table = function(wrapperDOMNode, bItemSelection, toolbarButtons, dataTablesOptions, emptyPlaceholder) {
var Table = function (
wrapperDOMNode,
bItemSelection,
toolbarButtons,
dataTablesOptions,
emptyPlaceholder
) {
var self = this;
self.HUGE_INT = Math.pow(2, 53) - 1;
@ -34,7 +38,7 @@ var AIRTIME = (function(AIRTIME) {
self.SELECTION_MODE = {
SINGLE: 0,
MULTI_SHIFT: 1,
MULTI_CTRL : 2
MULTI_CTRL: 2,
};
//Member variables
@ -58,52 +62,63 @@ var AIRTIME = (function(AIRTIME) {
// If selection is enabled, add in the checkbox column.
if (bItemSelection) {
dataTablesOptions["aoColumns"].unshift(
/* Checkbox */ { "sTitle" : "", "mData" : self._datatablesCheckboxDataDelegate.bind(this), "bSortable" : false , "bSearchable" : false , "sWidth" : "24px" , "sClass" : "airtime_table_checkbox" }
/* Checkbox */ {
sTitle: "",
mData: self._datatablesCheckboxDataDelegate.bind(this),
bSortable: false,
bSearchable: false,
sWidth: "24px",
sClass: "airtime_table_checkbox",
}
);
}
var options = {
"aoColumns": [
/* Title */ { "sTitle" : $.i18n._("Make sure to override me") , "mDataProp" : "track_title" , "sClass" : "library_title" , "sWidth" : "170px" },
aoColumns: [
/* Title */ {
sTitle: $.i18n._("Make sure to override me"),
mDataProp: "track_title",
sClass: "library_title",
sWidth: "170px",
},
],
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": baseUrl+"rest/media", //Override me
"sAjaxDataProp": "aaData",
"bScrollCollapse": false,
"deferLoading" : 1, //0 tells it there's zero elements loaded and disables the automatic AJAX. We don't want to load until after we bind all our event handlers, to prevent a race condition with the "init" event callback.
"sPaginationType": "full_numbers",
"bJQueryUI": true,
"bAutoWidth": false,
"aaSorting": [],
"iDisplayLength": 25,
"aLengthMenu": [25, 50, 100],
"oLanguage" : getDatatablesStrings({
"sEmptyTable": $.i18n._(""),
"sZeroRecords": $.i18n._("No matching results found.")
bProcessing: true,
bServerSide: true,
sAjaxSource: baseUrl + "rest/media", //Override me
sAjaxDataProp: "aaData",
bScrollCollapse: false,
deferLoading: 1, //0 tells it there's zero elements loaded and disables the automatic AJAX. We don't want to load until after we bind all our event handlers, to prevent a race condition with the "init" event callback.
sPaginationType: "full_numbers",
bJQueryUI: true,
bAutoWidth: false,
aaSorting: [],
iDisplayLength: 25,
aLengthMenu: [25, 50, 100],
oLanguage: getDatatablesStrings({
sEmptyTable: $.i18n._(""),
sZeroRecords: $.i18n._("No matching results found."),
}),
"oColVis": {
"sAlign": "right",
"aiExclude": self._colVisExcludeColumns,
"buttonText": $.i18n._("Columns"),
"iOverlayFade": 0
oColVis: {
sAlign: "right",
aiExclude: self._colVisExcludeColumns,
buttonText: $.i18n._("Columns"),
iOverlayFade: 0,
},
// z = ColResize, R = ColReorder, C = ColVis
"sDom": 'Rf<"dt-process-rel"r><"H"<"table_toolbar"C>><"dataTables_scrolling"t<".empty_placeholder"<".empty_placeholder_image"><".empty_placeholder_text">>><"F"lip>>',
sDom: 'Rf<"dt-process-rel"r><"H"<"table_toolbar"C>><"dataTables_scrolling"t<".empty_placeholder"<".empty_placeholder_image"><".empty_placeholder_text">>><"F"lip>>',
"fnPreDrawCallback": function () {
fnPreDrawCallback: function () {
$("#draggingContainer").remove();
},
"fnServerData": self._fetchData.bind(self),
fnServerData: self._fetchData.bind(self),
//"fnInitComplete" : function() { self._setupEventHandlers(bItemSelection) }
"fnDrawCallback": function () {
fnDrawCallback: function () {
self.clearSelection();
}
},
};
//Override any options with those passed in as arguments to this constructor.
for (var key in dataTablesOptions)
{
for (var key in dataTablesOptions) {
options[key] = dataTablesOptions[key];
}
@ -123,22 +138,27 @@ var AIRTIME = (function(AIRTIME) {
};
Table.prototype.assignDblClickHandler = function (fn) {
$(this._datatable, 'tbody tr').on('dblclick', this._SELECTORS.SELECTION_TABLE_ROW, fn);
$(this._datatable, "tbody tr").on(
"dblclick",
this._SELECTORS.SELECTION_TABLE_ROW,
fn
);
};
/* Set up global event handlers for the datatable.
* @param bItemSelection Whether or not row selection behaviour should be enabled for this widget.
* */
Table.prototype._setupEventHandlers = function (bItemSelection) {
var self = this;
/** This table row event handler is created once and catches events for any row. (It's less resource intensive
* than having a per-row callback...)
*/
if (bItemSelection) {
$(self._datatable, 'tbody tr').on('click contextmenu', self._SELECTORS.SELECTION_TABLE_ROW, function (e) {
$(self._datatable, "tbody tr").on(
"click contextmenu",
self._SELECTORS.SELECTION_TABLE_ROW,
function (e) {
var aData = self._datatable.fnGetData(this);
var iDisplayIndex = $(this).index(); // The index of the row in the current page in the table.
var nRow = this;
@ -158,9 +178,13 @@ var AIRTIME = (function(AIRTIME) {
selectionMode = self.SELECTION_MODE.SINGLE;
}
self.selectRow(nRow, aData, selectionMode, iDisplayIndex);
});
}
);
$(self._datatable, 'tbody tr').on('click', self._SELECTORS.SELECTION_CHECKBOX, function(e) {
$(self._datatable, "tbody tr").on(
"click",
self._SELECTORS.SELECTION_CHECKBOX,
function (e) {
$this = $(this);
var iVisualRowIdx = $this.parent().index();
@ -172,34 +196,45 @@ var AIRTIME = (function(AIRTIME) {
self.selectRow($this.parent(), aData, selectionMode, iVisualRowIdx); //Always multiselect for checkboxes
e.stopPropagation();
return true;
});
}
);
// Clear selection when switching pages
$(self._datatable).on('page', function () {
$(self._datatable).on("page", function () {
self.clearSelection();
});
}
// On filter, display the number of total and filtered results in the search bar
$(self._datatable).on('filter', function() {
var dt = self._datatable, f = dt.closest(".dataTables_wrapper").find(".filter-message"),
$(self._datatable).on("filter", function () {
var dt = self._datatable,
f = dt.closest(".dataTables_wrapper").find(".filter-message"),
totalRecords = dt.fnSettings().fnRecordsTotal(),
totalDisplayRecords = dt.fnSettings().fnRecordsDisplay();
if (f.length === 0) {
var el = document.createElement("span");
el.setAttribute("class", "filter-message");
f = dt.closest(".dataTables_wrapper").find(".dataTables_filter").append(el).find(".filter-message");
f = dt
.closest(".dataTables_wrapper")
.find(".dataTables_filter")
.append(el)
.find(".filter-message");
}
f.text(totalRecords > totalDisplayRecords ?
$.i18n._("Filtering out ") + (totalRecords - totalDisplayRecords)
+ $.i18n._(" of ") + totalRecords
+ $.i18n._(" records") : ""
f.text(
totalRecords > totalDisplayRecords
? $.i18n._("Filtering out ") +
(totalRecords - totalDisplayRecords) +
$.i18n._(" of ") +
totalRecords +
$.i18n._(" records")
: ""
);
dt.closest(".dataTables_wrapper").find('.dataTables_filter input[type="text"]')
.css('padding-right', f.outerWidth());
dt.closest(".dataTables_wrapper")
.find('.dataTables_filter input[type="text"]')
.css("padding-right", f.outerWidth());
});
//Since this function is already called when the datatables initialization is complete, we know the DOM
@ -207,7 +242,6 @@ var AIRTIME = (function(AIRTIME) {
self._setupToolbarButtons(self._toolbarButtons);
};
/**
* Member functions
*
@ -220,18 +254,28 @@ var AIRTIME = (function(AIRTIME) {
*/
Table.prototype._setupToolbarButtons = function (buttons) {
var self = this;
var $menu = self._$wrapperDOMNode.parent().parent().find("div.table_toolbar");
var $menu = self._$wrapperDOMNode
.parent()
.parent()
.find("div.table_toolbar");
$menu.addClass("btn-toolbar");
//Create the toolbar buttons.
$.each(buttons, function (idx, btn) {
var buttonElement = self._createToolbarButton(btn.title, btn.iconClass, btn.extraBtnClass, btn.elementId);
var buttonElement = self._createToolbarButton(
btn.title,
btn.iconClass,
btn.extraBtnClass,
btn.elementId
);
$menu.append(buttonElement);
btn.element = buttonElement; //Save this guy in case you need it later.
//Bind event handlers to each button
$.each(btn.eventHandlers, function (eventName, eventCallback) {
$(buttonElement).on(eventName, function () {
if ($(buttonElement).find("button").is(':disabled')) { return; }
if ($(buttonElement).find("button").is(":disabled")) {
return;
}
eventCallback();
});
});
@ -254,23 +298,27 @@ var AIRTIME = (function(AIRTIME) {
};
/** Create the DOM element for a toolbar button and return it. */
Table.prototype._createToolbarButton = function(title, iconClass, extraBtnClass, elementId) {
Table.prototype._createToolbarButton = function (
title,
iconClass,
extraBtnClass,
elementId
) {
if (!iconClass) {
iconClass = 'icon-plus';
iconClass = "icon-plus";
}
// var title = $.i18n._('Delete');
var outerDiv = document.createElement("div");
outerDiv.className = 'btn-group';
outerDiv.className = "btn-group";
outerDiv.title = title;
var innerButton = document.createElement("button");
//innerButton.className = 'btn btn-small ' + extraBtnClass;
innerButton.className = 'btn ' + extraBtnClass;
innerButton.className = "btn " + extraBtnClass;
innerButton.id = elementId;
var innerIcon = document.createElement("i");
innerIcon.className = 'icon-white ' + iconClass;
var innerTextSpan = document.createElement('span');
innerIcon.className = "icon-white " + iconClass;
var innerTextSpan = document.createElement("span");
var innerText = document.createTextNode(title);
innerTextSpan.appendChild(innerText);
innerButton.appendChild(innerIcon);
@ -292,8 +340,11 @@ var AIRTIME = (function(AIRTIME) {
//self._selectedRowVisualIdxMap = [];
this._selectedRowVisualIdxMin = self.HUGE_INT;
this._selectedRowVisualIdxMax = -1;
this._$wrapperDOMNode.find('.selected').removeClass('selected');
this._$wrapperDOMNode.find(this._SELECTORS.SELECTION_CHECKBOX).find('input').attr('checked', false);
this._$wrapperDOMNode.find(".selected").removeClass("selected");
this._$wrapperDOMNode
.find(this._SELECTORS.SELECTION_CHECKBOX)
.find("input")
.attr("checked", false);
this._checkToolbarButtons();
};
@ -303,8 +354,12 @@ var AIRTIME = (function(AIRTIME) {
* @param iVisualRowIdx is an integer which corresponds to the index of the clicked row, as it appears to the user.
* eg. The 5th row in the table will have an iVisualRowIdx of 4 (0-based).
*/
Table.prototype.selectRow = function(nRow, aData, selectionMode, iVisualRowIdx) {
Table.prototype.selectRow = function (
nRow,
aData,
selectionMode,
iVisualRowIdx
) {
var self = this;
//Default to single item selection.
@ -323,12 +378,14 @@ var AIRTIME = (function(AIRTIME) {
self._selectedRowVisualIdxMax = iVisualRowIdx;
//self._selectedRowVisualIdxMap[iVisualRowIdx] = aData;
$nRow.addClass('selected');
$nRow.find(self._SELECTORS.SELECTION_CHECKBOX).find('input').attr('checked', true);
$nRow.addClass("selected");
$nRow
.find(self._SELECTORS.SELECTION_CHECKBOX)
.find("input")
.attr("checked", true);
}
//Ctrl-click multi row selection mode
else if (selectionMode == self.SELECTION_MODE.MULTI_CTRL) {
var foundAtIdx = $.inArray(aData, self._selectedRows);
//console.log('checkbox mouse', iVisualRowIdx, foundAtIdx);
@ -336,25 +393,34 @@ var AIRTIME = (function(AIRTIME) {
//If the clicked row is already selected, deselect it.
if (foundAtIdx >= 0 && self._selectedRows.length >= 1) {
self._selectedRows.splice(foundAtIdx, 1);
$nRow.removeClass('selected');
$nRow.find(self._SELECTORS.SELECTION_CHECKBOX).find('input').attr('checked', false);
}
else {
$nRow.removeClass("selected");
$nRow
.find(self._SELECTORS.SELECTION_CHECKBOX)
.find("input")
.attr("checked", false);
} else {
self._selectedRows.push(aData);
self._selectedRowVisualIdxMin = iVisualRowIdx;
self._selectedRowVisualIdxMax = iVisualRowIdx;
$nRow.addClass('selected');
$nRow.find(self._SELECTORS.SELECTION_CHECKBOX).find('input').attr('checked', true);
$nRow.addClass("selected");
$nRow
.find(self._SELECTORS.SELECTION_CHECKBOX)
.find("input")
.attr("checked", true);
}
}
//Shift-click multi row selection mode
else if (selectionMode == self.SELECTION_MODE.MULTI_SHIFT) {
//If there's no rows selected, just behave like single selection.
if (self._selectedRows.length == 0) {
return self.selectRow(nRow, aData, self.SELECTION_MODE.SINGLE, iVisualRowIdx);
return self.selectRow(
nRow,
aData,
self.SELECTION_MODE.SINGLE,
iVisualRowIdx
);
}
if (iVisualRowIdx > self._selectedRowVisualIdxMax) {
@ -364,24 +430,33 @@ var AIRTIME = (function(AIRTIME) {
self._selectedRowVisualIdxMin = iVisualRowIdx;
}
var selectionStartRowIdx = Math.min(iVisualRowIdx, self._selectedRowVisualIdxMin);
var selectionEndRowIdx = Math.min(iVisualRowIdx, self._selectedRowVisualIdxMax);
var selectionStartRowIdx = Math.min(
iVisualRowIdx,
self._selectedRowVisualIdxMin
);
var selectionEndRowIdx = Math.min(
iVisualRowIdx,
self._selectedRowVisualIdxMax
);
//We can assume there's at least 1 row already selected now.
var allRows = self._datatable.fnGetData();
self._selectedRows = [];
for (var i = self._selectedRowVisualIdxMin; i <= self._selectedRowVisualIdxMax; i++)
{
for (
var i = self._selectedRowVisualIdxMin;
i <= self._selectedRowVisualIdxMax;
i++
) {
self._selectedRows.push(allRows[i]);
$row = $($nRow.parent().children()[i]);
$row.addClass('selected');
$row.find(self._SELECTORS.SELECTION_CHECKBOX).find('input').attr('checked', true);
$row.addClass("selected");
$row
.find(self._SELECTORS.SELECTION_CHECKBOX)
.find("input")
.attr("checked", true);
}
}
else {
} else {
console.log("Unimplemented selection mode");
}
@ -400,22 +475,32 @@ var AIRTIME = (function(AIRTIME) {
// If the request was denied due to permissioning
if (r.status === 403) {
$(".dt-process-rel").hide();
$('.empty_placeholder_text').text($.i18n._("You don't have permission to view this resource."));
$('.empty_placeholder').show();
$(".empty_placeholder_text").text(
$.i18n._("You don't have permission to view this resource.")
);
$(".empty_placeholder").show();
}
};
/** Grab data from a REST API and format so that DataTables can display it.
* This is the DataTables REST adapter function, basically.
* */
Table.prototype._fetchData = function ( sSource, aoData, fnCallback, oSettings )
{
Table.prototype._fetchData = function (
sSource,
aoData,
fnCallback,
oSettings
) {
var self = this;
var echo = aoData[0].value; //Datatables state tracking. Must be included.
var sortColName = "";
var sortDir = "";
var search = self._$wrapperDOMNode.closest(".dataTables_wrapper").find(".dataTables_filter").find("input").val();
var search = self._$wrapperDOMNode
.closest(".dataTables_wrapper")
.find(".dataTables_filter")
.find("input")
.val();
if (oSettings.aaSorting.length > 0) {
var sortColIdx = oSettings.aaSorting[0][0];
sortColName = oSettings.aoColumns[sortColIdx].mDataProp;
@ -424,46 +509,49 @@ var AIRTIME = (function(AIRTIME) {
// FIXME: We should probably just be sending aoData back here..?
$.ajax({
"dataType": 'json',
"type": "GET",
"url": sSource,
"data": {
"limit": oSettings._iDisplayLength,
"offset": oSettings._iDisplayStart,
"sort": sortColName,
"sort_dir": sortDir,
"search": search
dataType: "json",
type: "GET",
url: sSource,
data: {
limit: oSettings._iDisplayLength,
offset: oSettings._iDisplayStart,
sort: sortColName,
sort_dir: sortDir,
search: search,
},
"success": function (json, textStatus, jqXHR) {
success: function (json, textStatus, jqXHR) {
var rawResponseJSON = json;
json = [];
json.aaData = rawResponseJSON;
json.iTotalRecords = jqXHR.getResponseHeader('X-TOTAL-COUNT');
json.iTotalRecords = jqXHR.getResponseHeader("X-TOTAL-COUNT");
json.iTotalDisplayRecords = json.iTotalRecords;
json.sEcho = echo;
//Pass it along to datatables.
fnCallback(json);
},
"error": self._handleAjaxError
error: self._handleAjaxError,
});
};
Table.prototype._datatablesCheckboxDataDelegate = function(rowData, callType, dataToSave) {
Table.prototype._datatablesCheckboxDataDelegate = function (
rowData,
callType,
dataToSave
) {
if (callType == undefined) {
//Supposed to return the raw data for the type here.
return null;
} else if (callType == 'display') {
} else if (callType == "display") {
return "<input type='checkbox'>";
} else if (callType == 'sort') {
} else if (callType == "sort") {
return null;
} else if (callType == 'type') {
} else if (callType == "type") {
return "input";
} else if (callType == 'set') {
} else if (callType == "set") {
//The data to set is in dataToSave.
return;
} else if (callType == 'filter') {
} else if (callType == "filter") {
return null;
}
@ -471,59 +559,60 @@ var AIRTIME = (function(AIRTIME) {
return "check";
};
//Accessors / Mutators
Table.prototype.getDatatable = function () {
return this._datatable;
};
//Static initializers / Class variables
Table.prototype._SELECTORS = Object.freeze({
SELECTION_CHECKBOX: ".airtime_table_checkbox",
SELECTION_TABLE_ROW: "tr"
SELECTION_TABLE_ROW: "tr",
});
Table.TOOLBAR_BUTTON_ROLES = {
NEW: 0,
EDIT: 1,
DELETE : 2
DELETE: 2,
};
Object.freeze(Table.TOOLBAR_BUTTON_ROLES);
//Set of standard buttons. Use getStandardToolbarButtons() to grab these and pass them to the init() function.
Table._STANDARD_TOOLBAR_BUTTONS = {};
Table._STANDARD_TOOLBAR_BUTTONS[Table.TOOLBAR_BUTTON_ROLES.NEW] = {
title : $.i18n._('New'),
title: $.i18n._("New"),
iconClass: "icon-plus",
extraBtnClass: "btn-small btn-new",
elementId : '',
elementId: "",
eventHandlers: {},
validateConstraints: function () { return true; }
validateConstraints: function () {
return true;
},
};
Table._STANDARD_TOOLBAR_BUTTONS[Table.TOOLBAR_BUTTON_ROLES.EDIT] = {
title : $.i18n._('Edit'),
title: $.i18n._("Edit"),
iconClass: "icon-pencil",
extraBtnClass: "btn-small",
elementId : '',
elementId: "",
eventHandlers: {},
validateConstraints: function () { return true; }
validateConstraints: function () {
return true;
},
};
Table._STANDARD_TOOLBAR_BUTTONS[Table.TOOLBAR_BUTTON_ROLES.DELETE] = {
title : $.i18n._('Delete'),
title: $.i18n._("Delete"),
iconClass: "icon-trash",
extraBtnClass: "btn-small btn-danger",
elementId : '',
elementId: "",
eventHandlers: {},
validateConstraints: function () { return true; }
validateConstraints: function () {
return true;
},
};
Object.freeze(Table._STANDARD_TOOLBAR_BUTTONS);
//Static method
Table.getStandardToolbarButtons = function () {
//Return a deep copy
@ -533,7 +622,5 @@ var AIRTIME = (function(AIRTIME) {
//Add Table to the widgets namespace
AIRTIME.widgets.Table = Table;
return AIRTIME;
}(AIRTIME || {}));
})(AIRTIME || {});