Initial mobile setup!

This commit is contained in:
Buster Neece 2014-03-03 03:11:48 -06:00
parent 3de2e14444
commit 25536aaff8
168 changed files with 10746 additions and 2222 deletions

View File

@ -6,7 +6,5 @@ web/static/api/*
*.DS_Store
*.apdisk
*.zip
<<<<<<< local
*.mp3
=======
>>>>>>> other
db.sql

View File

@ -24,7 +24,7 @@ define("DF_INCLUDE_LIB_LOCAL", DF_INCLUDE_BASE.'/library_local');
define("DF_UPLOAD_FOLDER", DF_INCLUDE_STATIC);
define("DF_URL_STATIC", (DF_IS_SECURE ? 'https:' : 'http:').'//static.ponyvillelive.com');
define("DF_URL_STATIC", (DF_IS_SECURE ? 'https:' : 'http:').'//ponyvillelive.com/static');
// Self-reference to current script.
if (isset($_SERVER['REQUEST_URI']))

View File

@ -19,7 +19,7 @@ $affiliates = array(
'name' => 'PonyMC',
'description' => 'A Ponyville Live! Minecraft Partner',
'url' => 'http://ponymc.com/',
'image' => \DF\Url::content('affiliates/ponymc.png'),
'image' => '//ponymc.com/img/logos/random_logo.php?width=150&height=150', // \DF\Url::content('affiliates/ponymc.png'),
),
array(
@ -116,7 +116,7 @@ $cols = array($col1, $affiliates);
</div>
<div class="media-body">
<h4>
<? if ($affiliate['custom']): ?>
<? if (isset($affiliate['custom'])): ?>
<?=$affiliate['custom'] ?><br>
<? else: ?>
<a href="<?=$affiliate['url'] ?>" target="_blank"><?=$affiliate['name'] ?></a><br>
@ -147,18 +147,21 @@ $cols = array($col1, $affiliates);
<div class="headline"><h3>Contact Us</h3></div>
<ul class="unstyled">
<li>Public Relations:<br><?=$this->mailto('pr@ponyvillelive.com') ?></li>
<li>Director:<br><?=$this->mailto('silvereagle@ponyvillelive.com') ?></li>
<li>Associate Director:<br><?=$this->mailto('weareborg@ponyvillelive.com') ?></li>
<li><a href="mailto:info@ponyvillelive.com"><i class="icon-envelope"></i> General Information</a></li>
<li><a href="mailto:pr@ponyvillelive.com"><i class="icon-envelope"></i> Public Relations</a></li>
<li><a href="mailto:silvereagle@ponyvillelive.com"><i class="icon-envelope"></i> Director, Silver Eagle</a></li>
<li><a href="mailto:weareborg@ponyvillelive.com"><i class="icon-envelope"></i> Associate Director, WeAreBorg</a></li>
</ul>
<div class="headline"><h3>Stay Connected</h3></div>
<div class="headline"><h3>Follow &amp; Like Us</h3></div>
<ul class="unstyled">
<li><a href="http://news.ponyvillelive.com/" target="_blank"><img src="<?=\DF\Url::content('social/tumblr_16.png') ?>" alt="Tumblr"> Tumblr</a></li>
<li><a href="http://steamcommunity.com/groups/ponyvillelive" target="_blank"><img src="<?=\DF\Url::content('social/steam_16.png') ?>" alt="Steam"> Steam</a></li>
<li><a href="http://news.ponyvillelive.com/" target="_blank"><img src="<?=\DF\Url::content('social/tumblr_16.png') ?>" alt="Tumblr"> Tumblr</a></li>
<li><a href="https://plus.google.com/+PonyvilleLiveGlobal" rel="publisher" target="_blank"><img src="<?=\DF\Url::content('social/google_plus_16.png') ?>" alt="Google Plus"> Google+</a></li>
<li><a href="https://www.youtube.com/ponyvilleliveglobal" target="_blank"><img src="<?=\DF\Url::content('social/youtube_16.png') ?>" alt="YouTube"> YouTube</a></li>
<li><a href="https://www.facebook.com/pages/Ponyville-LIVE/517435684948331" target="_blank"><img src="<?=\DF\Url::content('social/facebook_16.png') ?>" alt="Facebook"> Facebook</a></li>
<li><a href="https://twitter.com/PonyvilleLive" target="_blank"><img src="<?=\DF\Url::content('social/twitter_16.png') ?>" alt="Twitter"> Twitter</a></li>
<li><a href="http://steamcommunity.com/groups/ponyvillelive" target="_blank"><img src="<?=\DF\Url::content('social/steam_16.png') ?>" alt="Steam"> Steam</a></li>
</ul>
</div>
</div>

View File

@ -1,58 +1,40 @@
<div class="well">
<!-- Player Interface -->
<div id="jquery_jplayer" style="width: 0; height: 0;"></div>
<div id="jp_container" class="jp-audio" style="display: none;">
<div id="sidebar-shortcuts">
<div id="sidebar-shortcuts-large">
<div class="jp-type-single">
<div id="jp_interface_1" class="jp-interface">
<ul class="jp-controls">
<li><a href="#" class="jp-play" tabindex="1">play</a></li>
<li><a href="#" class="jp-pause" tabindex="1">pause</a></li>
<li><a href="#" class="jp-mute" tabindex="1">mute</a></li>
<li><a href="#" class="jp-unmute" tabindex="1">unmute</a></li>
</ul>
<div class="jp-progress-container">
<div class="jp-progress">
<div class="jp-seek-bar">
<div class="jp-play-bar"></div>
</div>
</div>
</div>
<div class="jp-volume-bar-container">
<div class="jp-volume-bar">
<div class="jp-volume-bar-value"></div>
</div>
</div>
</div>
</div>
<div id="nowplaying">
<b><span id="nowplaying-title">Now Playing...</span></b><br>
<span id="nowplaying-artist">Loading...</span>
</div>
</div>
</div>
</div>
<script type="text/javascript">
soundManager.url = '/static/fap/swf/';
soundManager.flashVersion = 9;
soundManager.useHTML5Audio = true;
soundManager.debugMode = false;
</script>
<div id="sidebar" class="well">
<ul class="nav nav-list">
<li><a href="<?=$this->route(array('module' => 'mlpma')) ?>" class="ajax"><i class="icon-home"></i> Home</a></li>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'index', 'action' => 'download')) ?>" class="ajax"><i class="icon-download"></i> Download the Archive</a></li>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'submit')) ?>"><i class="icon-plus-sign"></i> Submit a Song </a></li>
<li class="nav-header">Search the Archive</li>
<li>
<form id="form-search" action="<?=$this->route(array('module' => 'mlpma', 'controller' => 'search', 'origin' => 'header')) ?>" method="get" class="form-inline no-disable">
<input type="text" name="q" title="Search terms" placeholder="Song, Artist, Album..." class="half-width" value="<?=$this->q ?>">
<?=$this->button(array(
'type' => 'submit',
'class' => 'primary btn-small',
'text' => 'Search',
)) ?>
</form>
</li>
<li class="nav-header">Browse the Archive</li>
<li class="nav-header">Top Artists</li>
<li class="nav-header">Top Genres</li>
<?
$genres = \Entity\ArchiveGenre::getTop();
foreach($genres as $genre_id => $genre): ?>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'search', 'genre' => $genre['name'])) ?>" class="ajax"><i class="icon-double-angle-right"></i> <?=$genre['name'] ?></a></li>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'search', 'genre' => $genre['name'])) ?>" class="ajax"><i class="icon-folder-close"></i> <?=$genre['name'] ?></a></li>
<? endforeach; ?>
<li class="nav-header">Other Actions</li>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'index', 'action' => 'download')) ?>" class="ajax"><i class="icon-download"></i> Download the Archive</a></li>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'submit')) ?>"><i class="icon-plus-sign"></i> Submit a Song </a></li>
<? if ($this->acl->isAllowed('administer mlpma songs')): ?>
<li class="nav-header">Administration</li>

View File

@ -12,4 +12,6 @@ return array(
'db_pass' => 'PVLRadio2013!',
'db_name' => 'centova',
// Time zone to use when submitting requests.
'timezone' => 'US/Eastern',
);

View File

@ -8,23 +8,17 @@ $skin = \PVL\Customization::get('theme');
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,requiresActiveX=true">
<meta name="viewport" content="initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="keywords" content="Pony, Brony, Radio, Video, Podcast, Multimedia, Convention, Ponyville, Live, MLP, MLP:FiM" />
<meta name="description" content="Equestria's newest Brony multimedia network, featuring 24/7 pony radio, videos, podcasts, convention coverage, and more." />
<link rel="canonical" href="http://www.ponyvillelive.com" />
<!-- iPhone/iPhone Retina -->
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="<?=\DF\Url::content('ios/touch_icon_iphone.png') ?>" />
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="<?=\DF\Url::content('ios/touch_icon_iphone.png') ?>" />
<!-- iPad/iPad Retina -->
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="<?=\DF\Url::content('ios/touch_icon_ipad.png') ?>" />
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?=\DF\Url::content('ios/touch_icon_ipad.png') ?>" />
<link rel="canonical" href="http://ponyvillelive.com" />
<!-- Facebook and Other Social Sites -->
<meta property="og:site_name" content="Ponyville Live!" />
<meta property="og:url" content="http://ponyvillelive.com/" />
<meta property="og:image" content="<?=\DF\Url::content('pvl_square.png') ?>" />
<link rel="image_src" href="<?=\DF\Url::content('pvl_square.png') ?>" />
<link href="https://plus.google.com/+PonyvilleLiveGlobal" rel="publisher" />
<?php
$title_items = $this->headTitle()->getIterator();

View File

@ -54,15 +54,26 @@ $this->headLink()
->appendStylesheet('//fonts.googleapis.com/css?family=Source+Sans+Pro:400,700', 'screen')
->appendStylesheet(\DF\Url::content('mid2013/style.css'), 'all')
->appendStylesheet(\DF\Url::content('mid2013/skin_'.$skin.'.css'))
->appendStylesheet(\DF\Url::content('mlpma/style.css'));
->appendStylesheet(\DF\Url::content('mlpma/style.css'))
->appendStylesheet(\DF\Url::content('fap/css/jquery.fullwidthAudioPlayer.css'), 'all')
->appendStylesheet(\DF\Url::content('fap/css/jquery.fullwidthAudioPlayer-responsive.css'), 'all');
$this->headScript()
->prependFile(\DF\Url::cdn('jquery', '1.8.3'))
->prependFile(\DF\Url::cdn('jquery', '1.10.1'))
->appendFile(\DF\Url::content('common/jquery/fancybox/jquery.fancybox.pack.js'))
->appendFile(\DF\Url::content('common/bootstrap2_r2/bootstrap/js/bootstrap.min.js'))
->appendFile(\DF\Url::content('common/bootstrap2_r2/layout.js'))
->appendFile(\DF\Url::content('swfobject.js'))
->appendFile(\DF\Url::content('global.js'));
->appendFile(\DF\Url::content('global.js'))
->appendFile(\DF\Url::content('mlpma/jquery.scrollto.min.js'))
->appendFile(\DF\Url::content('mlpma/jquery.history.min.js'))
->appendFile(\DF\Url::content('mlpma/jquery.ajaxify.js'))
->appendFile(\DF\Url::content('fap/js/jquery-ui.js'))
->appendFile(\DF\Url::content('fap/js/soundmanager2-nodebug-jsmin.js'))
->appendFile('//connect.soundcloud.com/sdk.js')
->appendFile(\DF\Url::content('fap/js/jquery.fullwidthAudioPlayer.js'))
->appendFile(\DF\Url::content('fap/js/amplify.min.js'))
->appendFile(\DF\Url::content('mlpma/custom.js'));
echo $this->headMeta()."\n";
echo $this->headLink()."\n";
@ -112,7 +123,7 @@ ga('send', 'pageview');
</div>
</div>
<div id="secondary_header_stripe"><img src="<?=\DF\Url::content('mlpma/mlpma_logo.png') ?>" alt="The MLP Music Archive, a Ponyville Live! Project"></div>
<div id="secondary_header_stripe"><a href="<?=$this->route(array('module' => 'mlpma')) ?>" class="ajax"><img src="<?=\DF\Url::content('mlpma/mlpma_logo.png') ?>" alt="The MLP Music Archive, a Ponyville Live! Project"></a></div>
<div id="body-wrapper">
<div id="body" class="container">
@ -139,11 +150,13 @@ ga('send', 'pageview');
<?=$this->renderCommon('mlpma') ?>
</div>
<div class="span9">
<? if (!$this->layout()->hide_title): ?>
<h1 class="title"><?=$title ?></h1>
<? endif; ?>
<div id="page-content">
<? if (!$this->layout()->hide_title): ?>
<h1 class="title"><?=$title ?></h1>
<? endif; ?>
<?php echo $this->layout()->content; ?>
<?php echo $this->layout()->content; ?>
</div>
</div>
</div>
</div>

126
app/layouts/mobile.phtml Normal file
View File

@ -0,0 +1,126 @@
<?php
header("Content-type: text/html; charset=utf-8");
echo $this->doctype();
?>
<html class="full_layout">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,requiresActiveX=true">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="keywords" content="Pony, Brony, Radio, Video, Podcast, Multimedia, Convention, Ponyville, Live, MLP, MLP:FiM" />
<meta name="description" content="Equestria's newest Brony multimedia network, featuring 24/7 pony radio, videos, podcasts, convention coverage, and more." />
<link rel="canonical" href="http://ponyvillelive.com" />
<!-- iPhone/iPhone Retina -->
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="<?=\DF\Url::content('ios/touch_icon_iphone.png') ?>" />
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="<?=\DF\Url::content('ios/touch_icon_iphone.png') ?>" />
<!-- iPad/iPad Retina -->
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="<?=\DF\Url::content('ios/touch_icon_ipad.png') ?>" />
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?=\DF\Url::content('ios/touch_icon_ipad.png') ?>" />
<!-- Facebook and Other Social Sites -->
<meta property="og:site_name" content="Ponyville Live!" />
<meta property="og:url" content="http://ponyvillelive.com/" />
<meta property="og:image" content="<?=\DF\Url::content('pvl_square.png') ?>" />
<link rel="image_src" href="<?=\DF\Url::content('pvl_square.png') ?>" />
<link href="https://plus.google.com/+PonyvilleLiveGlobal" rel="publisher" />
<?php
$title_items = $this->headTitle()->getIterator();
$title = current($title_items);
if (!$this->layout()->subtitle && $this->layout()->show_subtitle)
$this->layout()->subtitle = next($title_items);
$this->headTitle($this->config->application->name);
if (DF_APPLICATION_ENV != "production")
$this->headTitle()->prepend('('.ucfirst(DF_APPLICATION_ENV).')');
echo $this->headTitle()->setSeparator(" - ")->toString();
$this->headLink()
->appendStylesheet('//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css', 'all')
->appendStylesheet('//fonts.googleapis.com/css?family=Source+Sans+Pro:400,700', 'screen')
->appendStylesheet(\DF\Url::content('mobile/jquery.mobile-1.4.0.min.css'), 'all')
->appendStylesheet(\DF\Url::content('mobile/custom.css'), 'all');
$this->headScript()
->prependFile(\DF\Url::cdn('jquery', '1.11.0'))
->appendFile(\DF\Url::content('swfobject.js'))
->appendFile(\DF\Url::content('mobile/jquery.mobile-1.4.0.min.js'))
->appendFile(\DF\Url::content('mobile/custom.js'))
->appendFile(\DF\Url::content('jplayer/jquery.jplayer.min.js'));
echo $this->headMeta()."\n";
echo $this->headLink()."\n";
echo $this->headScript()."\n";
?>
<script>
var DF_ContentPath = '<?php echo \DF\Url::content(); ?>';
</script>
</head>
<body class="<?=$this->body_class ?>">
<!-- Google Universal Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '<?=$this->config->application->analytics_code ?>', 'ponyvillelive.com');
ga('send', 'pageview');
</script>
<!-- End Google Universal Analytics -->
<!-- Header -->
<div data-role="header" data-position="fixed" data-theme="a" data-add-back-btn="true">
<a id="btn_back" href="#" data-rel="back" class="ui-btn-left ui-alt-icon ui-nodisc-icon ui-btn ui-icon-carat-l ui-btn-icon-notext ui-corner-all" data-role="button" role="button">Back</a>
<h1><?=$title ?></h1>
</div>
<!-- Main Body -->
<div id="page" data-role="page" data-title="<?=$title ?>" class="jqm-demos">
<div role="main" class="ui-content jqm-content jqm-fullwidth">
<?php echo $this->layout()->content; ?>
</div>
</div>
<!-- Footer Nav -->
<div data-role="footer" data-position="fixed" data-theme="a">
<div id="player_controls" data-role="controlgroup">
<a id="btn_stop" class="ui-btn ui-btn-left ui-corner-all ui-btn-icon-notext" id="player_pause" href="#">Stop</a>
<input type="range" class="volume_slider" name="player_volume" id="player_volume" min="0" max="100" value="50" data-highlight="true">
</div>
<div data-role="navbar">
<ul>
<li><a href="<?=$this->route(array('module' => 'mobile', 'action' => 'view', 'type' => 'radio')) ?>">
<span class="icon"><i class="fa fa-music"></i></span>
<span class="tab-label">Radio</span>
</a></li>
<li><a href="<?=$this->route(array('module' => 'mobile', 'action' => 'view', 'type' => 'video')) ?>">
<span class="icon"><i class="fa fa-video-camera"></i></span>
<span class="tab-label">Video</span>
</a></li>
<li><a href="<?=$this->route(array('module' => 'mobile', 'action' => 'view', 'type' => 'show')) ?>">
<span class="icon"><i class="fa fa-rss"></i></span>
<span class="tab-label">Shows</span>
</a></li>
<li><a href="<?=$this->route(array('module' => 'mobile', 'controller' => 'station', 'action' => 'request')) ?>">
<span class="icon"><i class="fa fa-comments"></i></span>
<span class="tab-label">Requests</span>
</a></li>
</ul>
</div>
</div>
<!-- Radio Player -->
<div id="pvl-jplayer" style="width: 0; height: 0;"></div>
</body>
</html>

View File

@ -104,6 +104,12 @@ class Action extends \Zend_Controller_Action
if ($is_ajax)
\Zend_Layout::getMvcInstance()->disableLayout();
if ($this->_hasParam('debug') && $this->_getParam('debug') === 'true')
{
error_reporting(E_ALL & ~E_STRICT);
ini_set('display_errors', 1);
}
}
public function postDispatch()

View File

@ -3,6 +3,7 @@ namespace PVL;
use \Entity\Station;
use \Entity\StationMedia;
use \Entity\StationRequest;
class CentovaCast
{
@ -38,6 +39,11 @@ class CentovaCast
{
$db = self::getDatabase();
$em = self::getEntityManager();
$settings = self::getSettings();
// Forbid web crawlers from using this feature.
if (\PVL\Utilities::isCrawler())
throw new \DF\Exception('Search engine crawlers are not permitted to use this feature.');
// Verify that the station supports CentovaCast requests.
$station_id = self::getStationID($station);
@ -108,17 +114,28 @@ class CentovaCast
if (count($existing_request) > 0)
throw new \DF\Exception('You already have a pending request with this station! Please try again later.');
// Check for any request (on any station) within 5 minutes.
$recent_threshold = time()-(60*5);
$recent_requests = $em->createQuery('SELECT sr FROM Entity\StationRequest sr WHERE sr.ip = :user_ip AND sr.timestamp >= :threshold')
->setParameter('user_ip', $user_ip)
->setParameter('threshold', $recent_threshold)
->getArrayResult();
if (count($recent_requests) > 0)
throw new \DF\Exception('You have submitted a request too recently! Please wait a while before submitting another one.');
// Enable the "Automated Song Requests" playlist.
$updated_playlist = array(
'status' => 'enabled',
);
$db->update('playlists', $updated_playlist, array('id' => $playlist_id));
$db->update('playlists', array('status' => 'enabled'), array('id' => $playlist_id));
$requesttime = new \DateTime('NOW');
$requesttime->setTimezone(new \DateTimeZone($settings['timezone']));
// Create a new request if all other checks pass.
$new_request = array(
'playlistid' => $playlist_id,
'trackid' => $track_id,
'requesttime' => date('Y-m-d h:i:s'),
'requesttime' => $requesttime->format('Y-m-d h:i:s'),
'sendername' => 'Ponyville Live!',
'senderemail' => 'requests@ponyvillelive.com',
'dedication' => '',
@ -139,6 +156,7 @@ class CentovaCast
{
$db = self::getDatabase();
$em = self::getEntityManager();
$settings = self::getSettings();
// Force correct account settings (enable global unified request system).
$account_values = array(
@ -157,6 +175,23 @@ class CentovaCast
$db->executeQuery('DELETE FROM playbackstats_tracks WHERE endtime <= ?', array($threshold_date));
$db->executeQuery('DELETE FROM visitorstats_sessions WHERE endtime <= ?', array($threshold_date));
// Delete old requests still listed as pending.
$requesttime = new \DateTime('NOW');
$requesttime->modify('-3 hours');
$requesttime->setTimezone(new \DateTimeZone($settings['timezone']));
$threshold_requests = $requesttime->format('Y-m-d h:i:s');
$db->executeQuery('DELETE FROM playlist_tracks_requests WHERE requesttime <= ?', array($threshold_requests));
// Force playlist enabling for existing pending requests.
$request_playlists_raw = $db->fetchAll('SELECT DISTINCT ptr.playlistid AS pid FROM playlist_tracks_requests AS ptr');
foreach($request_playlists_raw as $pl)
{
$pl_id = $pl['pid'];
$db->update('playlists', array('status' => 'enabled'), array('id' => $pl_id));
}
// Preload all station media locally.
$stations = $em->createQuery('SELECT s FROM Entity\Station s WHERE s.requests_enabled = 1')->execute();

View File

@ -1,6 +1,9 @@
<?php
namespace PVL\Controller\Action;
use \Entity\ArchiveGenre;
use \Entity\ArchiveSong;
class Mlpma extends \DF\Controller\Action
{
public function init()
@ -13,7 +16,8 @@ class Mlpma extends \DF\Controller\Action
public function preDispatch()
{
parent::preDispatch();
\Zend_Layout::getMvcInstance()->enableLayout();
$this->view->top_genres = ArchiveGenre::getTop(5);
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace PVL\Controller\Action;
class Mobile extends \DF\Controller\Action
{
public function init()
{
parent::init();
\Zend_Layout::getMvcInstance()->setLayout('mobile');
}
public function preDispatch()
{
parent::preDispatch();
\Zend_Layout::getMvcInstance()->enableLayout();
}
}

View File

@ -12,8 +12,8 @@ class MusicManager
const MUSIC_DIR = '/www/mlpmusicarchive.com/music';
const ART_DIR = '/www/mlpmusicarchive.com/art';
const MUSIC_URL = 'http://www.mlpmusicarchive.com/music';
const ART_URL = 'http://www.mlpmusicarchive.com/art';
const MUSIC_URL = '//static.ponyvillelive.com/mlpmusicarchive/music';
const ART_URL = '//static.ponyvillelive.com/mlpmusicarchive/art';
public static function checkPendingFolder()
{

View File

@ -3,30 +3,9 @@ namespace PVL\NewsAdapter;
class YouTube extends AdapterAbstract
{
public static function getAccount($url)
{
if (stristr($url, 'youtube.com') !== FALSE)
{
$url_parts = parse_url($url);
$path = rtrim($url_parts['path'], '/');
$url_components = explode('/', $path);
$url_last_element = array_pop($url_components);
$account = trim($url_last_element);
}
else
{
$account = trim($url);
}
return $account;
}
public static function fetch($url, $params = array())
{
$api_key = 'AI39si5oveOXVqbMmAeF-7oZ8NeDTeqo27ghNJVTi1yTBVpf3j03Vfs2hx908oI0zCAF07tpFS4N8cAXJnH9TaYhFPKWN6_hLA';
$username = self::getAccount($url);
$v3_api_key = 'AIzaSyC1vhf1rFShf9mzbUEL2LpfaD0E0BNOURk';
$client = new \Zend_Http_Client();
$client->setConfig(array(
@ -34,19 +13,45 @@ class YouTube extends AdapterAbstract
'keepalive' => true,
));
$client->setUri('http://gdata.youtube.com/feeds/api/videos');
$account_info = self::getAccount($url);
if ($account_info['type'] == 'user')
{
$client->setUri('https://www.googleapis.com/youtube/v3/channels');
$client->setParameterGet(array(
'part' => 'id,contentDetails',
'forUsername' => $account_info['id'],
'maxResults' => 25,
'key' => $v3_api_key,
));
$response = $client->request('GET');
if ($response->isSuccessful())
{
$response_text = $response->getBody();
$data = @json_decode($response_text, TRUE);
$playlist_id = $data['items'][0]['contentDetails']['relatedPlaylists']['uploads'];
}
}
else
{
$playlist_id = $account_info['id'];
}
if (!$playlist_id)
return null;
$client->setUri('https://www.googleapis.com/youtube/v3/playlistItems');
$client->setParameterGet(array(
'alt' => 'json',
'author' => $username,
'orderby' => 'published',
'safeSearch' => 'none',
'racy' => 'include',
'part' => 'id,snippet,status,contentDetails',
'playlistId' => $playlist_id,
'maxResults' => 25,
'key' => $v3_api_key,
));
$client->setHeaders('GData-Version: 2');
$client->setHeaders('X-GData-Key: key='.$api_key);
$response = $client->request('GET');
$news_items = array();
if ($response->isSuccessful())
@ -54,35 +59,57 @@ class YouTube extends AdapterAbstract
$response_text = $response->getBody();
$data = @json_decode($response_text, TRUE);
$feed_items = (array)$data['feed']['entry'];
$feed_items = (array)$data['items'];
foreach($feed_items as $item)
{
$embed_src = $item['link'][0]['href'];
$thumbnails = (array)$item['media$group']['media$thumbnail'];
foreach($thumbnails as $thumb)
{
if (stristr($thumb['url'], 'mqdefault') !== FALSE)
$thumbnail = $thumb['url'];
}
if (!$thumbnail)
$thumbnail = $thumbnails[0]['url'];
$body = '<a class="fancybox fancybox.iframe" href="'.$embed_src.'"><img src="'.$thumbnail.'" alt="Click to Watch Video"></a>';
$body .= '<p>'.$item['media$group']['media$description']['$t'].'</p>';
$embed_src = 'http://www.youtube.com/watch?v='.$item['contentDetails']['videoId'];
$news_items[] = array(
'guid' => 'youtube_'.md5($item['id']['$t']),
'timestamp' => strtotime($item['published']['$t']),
'title' => $item['title']['$t'],
'body' => $body,
'guid' => 'youtube_'.md5($item['id']),
'timestamp' => strtotime($item['snippet']['publishedAt']),
'title' => $item['snippet']['title'],
'body' => $item['snippet']['description'],
'web_url' => $embed_src,
'author' => $item['author'][0]['name']['$t'],
'author' => $item['snippet']['channelTitle'],
);
}
}
return $news_items;
}
public static function getAccount($url)
{
if (stristr($url, 'youtube.com') !== FALSE)
{
$url_parts = \PVL\Utilities::parseUrl($url);
if ($url_parts['path_clean'] == 'playlist')
{
return array(
'type' => 'playlist',
'id' => $url_parts['query_arr']['list'],
);
}
else
{
$url_components = explode('/', $url_parts['path']);
$url_last_element = array_pop($url_components);
$account = trim($url_last_element);
return array(
'type' => 'user',
'id' => $account,
);
}
}
else
{
return array(
'type' => 'user',
'id' => trim($url),
);
}
}
}

View File

@ -221,7 +221,12 @@ class NowPlaying
$np['listeners'] = (int)$return['listeners'];
$np['artist'] = $return['now_playing']['artist'];
$np['title'] = $return['now_playing']['song'];
if ($return['now_playing']['track'])
$np['title'] = $return['now_playing']['track'];
else
$np['title'] = $return['now_playing']['song'];
$np['text'] = $return['title'];
$np['is_live'] = ($return['mount'] != '/autodj');
}
@ -246,7 +251,7 @@ class NowPlaying
list($artist, $track) = explode(" - ",$temp_array[9], 2);
$np['listeners'] = $temp_array[5];
$np['listeners'] = (int)$temp_array[5];
$np['artist'] = $artist;
$np['title'] = $track;
$np['text'] = $temp_array[9];

View File

@ -31,7 +31,7 @@ class Timezone
$dt_in_tz = new \DateTime('now', $current_tz);
return array(
'name' => $tz['name'],
'name' => $transition[0]['name'],
'abbr' => $transition[0]['abbr'],
'tz_object' => $current_tz,
'utc_object' => $utc,

View File

@ -0,0 +1,46 @@
<?
namespace PVL;
class Utilities
{
public static function parseUrl($url)
{
$url_parts = @parse_url($url);
$url_parts['path_clean'] = trim($url_parts['path'], '/');
$url_parts['query_arr'] = self::convertUrlQuery($url_parts['query']);
return $url_parts;
}
public static function convertUrlQuery($query)
{
$queryParts = explode('&', $query);
$params = array();
foreach ($queryParts as $param)
{
$item = explode('=', $param);
$params[$item[0]] = $item[1];
}
return $params;
}
/**
* User-Agent Detection
*/
public static function isCrawler()
{
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
$crawlers_agents = strtolower('Bloglines subscriber|Dumbot|Sosoimagespider|QihooBot|FAST-WebCrawler|Superdownloads Spiderman|LinkWalker|msnbot|ASPSeek|WebAlta Crawler|Lycos|FeedFetcher-Google|Yahoo|YoudaoBot|AdsBot-Google|Googlebot|Scooter|Gigabot|Charlotte|eStyle|AcioRobot|GeonaBot|msnbot-media|Baidu|CocoCrawler|Google|Charlotte t|Yahoo! Slurp China|Sogou web spider|YodaoBot|MSRBOT|AbachoBOT|Sogou head spider|AltaVista|IDBot|Sosospider|Yahoo! Slurp|Java VM|DotBot|LiteFinder|Yeti|Rambler|Scrubby|Baiduspider|accoona');
$crawlers = explode("|", $crawlers_agents);
foreach($crawlers as $crawler)
{
if (strpos($ua, trim($crawler)) !== false)
return true;
}
return false;
}
}

View File

View File

@ -53,15 +53,18 @@ class ArchiveGenre extends \DF\Doctrine\Entity
return $totals;
}
public static function getTop($offset_num = 5)
public static function getTop($num_to_show = 5)
{
$totals = self::getTotals();
$all_totals = self::getTotals();
$totals = array_filter($all_totals, function($var) {
return ($var['total'] > 2);
});
uasort($totals, function($a, $b) {
return $b['total'] - $a['total'];
});
$totals = array_slice($totals, 0, $offset_num, TRUE);
return $totals;
return array_slice($totals, 0, $num_to_show);
}
}

View File

@ -103,14 +103,20 @@ class Podcast extends \DF\Doctrine\Entity
{
$em = self::getEntityManager();
$latest_podcast_episodes = $em->createQuery('SELECT pe FROM Entity\PodcastEpisode pe WHERE pe.timestamp > :threshold ORDER BY pe.timestamp DESC')
->setParameter('threshold', strtotime('-3 months'))
->useResultCache(true, 300, 'homepage_podcast_episodes')
->getArrayResult();
$podcast_episodes = \DF\Cache::get('homepage_podcast_episodes');
$podcast_episodes = array();
foreach($latest_podcast_episodes as $ep)
$podcast_episodes[$ep['podcast_id']][] = $ep;
if (!$podcast_episodes)
{
$latest_podcast_episodes = $em->createQuery('SELECT pe FROM Entity\PodcastEpisode pe WHERE pe.timestamp > :threshold ORDER BY pe.timestamp DESC')
->setParameter('threshold', strtotime('-3 months'))
->getArrayResult();
$podcast_episodes = array();
foreach($latest_podcast_episodes as $ep)
$podcast_episodes[$ep['podcast_id']][] = $ep;
\DF\Cache::save($podcast_episodes, 'homepage_podcast_episodes', array(), 300);
}
$podcasts = array();
foreach($podcast_episodes as $podcast_id => $episodes)

View File

@ -227,4 +227,17 @@ class Schedule extends \DF\Doctrine\Entity
return $range_text;
}
public static function formatName($string)
{
$string = trim($string);
// Detect Twitter handles.
$string = preg_replace_callback('/@([A-Za-z0-9_]{1,15})/', function($matches) {
$twitter_username = substr($matches[0], 1);
return '<a href="https://twitter.com/'.$twitter_username.'" target="_blank">@'.$twitter_username.'</a>';
}, $string);
return $string;
}
}

View File

@ -6,6 +6,7 @@ use \Doctrine\Common\Collections\ArrayCollection;
/**
* @Table(name="short_urls")
* @Entity
* @HasLifecycleCallbacks
*/
class ShortUrl extends \DF\Doctrine\Entity
{
@ -29,11 +30,35 @@ class ShortUrl extends \DF\Doctrine\Entity
/** @Column(name="short_url", type="string", length=100) */
protected $short_url;
public function setShortUrl($new_short_url)
{
$this->short_url = preg_replace("/[^A-Za-z0-9_\-]/", '', $new_short_url);
}
public function getUrl()
{
return self::getFullUrl($this->short_url);
}
public function checkUrl()
{
if (empty($this->short_url))
$this->short_url = substr(md5($this->long_url), 0, 10);
// Check for a station URL.
$station_urls = self::stationUrls();
if (isset($station_urls[$this->short_url]))
return false;
$records = self::getRepository()->findBy(array('short_url' => $this->short_url));
// Updating an existing record, exclude existing item.
if ($this->id)
return (count($records) <= 1);
else
return (count($records) == 0);
}
/** @Column(name="long_url", type="string", length=300) */
protected $long_url;
@ -61,20 +86,10 @@ class ShortUrl extends \DF\Doctrine\Entity
return \DF\Url::route();
// Check for a station's short code (overrides manual input URLs).
$station_short_names = Station::getShortNameLookup();
$station_urls = self::stationUrls();
if (isset($station_short_names[$origin]))
{
$station = $station_short_names[$origin];
return \DF\Url::route(array(
'module' => 'default',
'controller' => 'index',
'action' => 'index',
'id' => $station['id'],
'autoplay' => 'true',
));
}
if (isset($station_urls[$origin]))
return $station_urls[$origin];
// Check for a matching URL.
$url = self::getRepository()->findOneBy(array('short_url' => $origin));
@ -86,6 +101,25 @@ class ShortUrl extends \DF\Doctrine\Entity
return \DF\Url::route();
}
public static function stationUrls()
{
$station_urls = array();
$station_short_names = Station::getShortNameLookup();
foreach($station_short_names as $short_name => $station)
{
$station_urls[$short_name] = \DF\Url::route(array(
'module' => 'default',
'controller' => 'index',
'action' => 'index',
'id' => $station['id'],
'autoplay' => 'true',
));
}
return $station_urls;
}
public static function stationUrl(Station $station)
{
$short_name = $station->short_name;

View File

@ -263,7 +263,7 @@ class Station extends \DF\Doctrine\Entity
if (!$stations || !$cached)
{
$em = self::getEntityManager();
$stations = $em->createQuery('SELECT s FROM '.__CLASS__.' s WHERE s.is_active=1 ORDER BY s.weight ASC')->getArrayResult();
$stations = $em->createQuery('SELECT s FROM '.__CLASS__.' s WHERE s.is_active=1 ORDER BY s.category ASC, s.weight ASC')->getArrayResult();
foreach($stations as &$station)
{

View File

@ -68,6 +68,11 @@ class StationMedia extends \DF\Doctrine\Entity
{
$this->requests = (int)$this->requests + 1;
$this->newest_request = time();
$record = new StationRequest;
$record->track = $this;
$record->station = $this->station;
$record->save();
}
public function setLength($length)

View File

@ -0,0 +1,52 @@
<?php
namespace Entity;
use \Doctrine\Common\Collections\ArrayCollection;
/**
* @Table(name="station_requests")
* @Entity
*/
class StationRequest extends \DF\Doctrine\Entity
{
public function __construct()
{
$this->timestamp = time();
$this->ip = $_SERVER['REMOTE_ADDR'];
}
/**
* @Column(name="id", type="integer")
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/** @Column(name="station_id", type="integer") */
protected $station_id;
/** @Column(name="track_id", type="integer") */
protected $track_id;
/** @Column(name="timestamp", type="integer") */
protected $timestamp;
/** @Column(name="ip", type="string", length=15) */
protected $ip;
/**
* @ManyToOne(targetEntity="Station", inversedBy="media")
* @JoinColumns({
* @JoinColumn(name="station_id", referencedColumnName="id", onDelete="CASCADE")
* })
*/
protected $station;
/**
* @ManyToOne(targetEntity="StationMedia")
* @JoinColumns({
* @JoinColumn(name="track_id", referencedColumnName="id", onDelete="CASCADE")
* })
*/
protected $track;
}

View File

@ -1,36 +0,0 @@
<?php
/**
* New User form
*/
return array(
/**
* Form Configuration
*/
'form' => array(
'method' => 'post',
'elements' => array(
'uin' => array('textarea', array(
'label' => 'UIN',
'required' => true,
'attribs' => array(
'class' => 'half-width full-height',
),
'description' => 'Multiple UINs can be added at once; enter each UIN on its own line.',
)),
'roles' => array('multicheckbox', array(
'label' => 'Roles',
'multiOptions' => \Entity\Role::fetchSelect(),
)),
'submit' => array('submit', array(
'type' => 'submit',
'label' => 'Create User',
'helper' => 'formButton',
'class' => 'ui-button',
)),
),
),
);

View File

@ -28,77 +28,33 @@ class Admin_UsersController extends \DF\Controller\Action
$this->view->pager = new \DF\Paginator\Doctrine($query, $this->_getParam('page', 1), 50);
}
public function addAction()
{
$form = new \DF\Form($this->current_module_config->forms->user_new->form);
if( !empty($_POST) && $form->isValid($_POST) )
{
$data = $form->getValues();
$uins_raw = explode("\n", $data['uin']);
foreach((array)$uins_raw as $uin)
{
$uin = trim($uin);
if (strlen($uin) == 9)
{
$user = User::getOrCreate($uin);
$user->fromArray(array('roles' => $data['roles']));
$this->em->persist($user);
$this->alert('User <a href="'.\DF\Url::route(array('module' => 'admin', 'controller' => 'users', 'action' => 'edit', 'id' => $user->id)).'" title="Edit User">'.$user->lastname.', '.$user->firstname.'</a> successfully updated/added.');
}
}
$this->em->flush();
$this->redirectToRoute(array('module' => 'admin', 'controller' => 'users'));
return;
}
$this->view->headTitle('Add User');
$this->renderForm($form);
}
public function editAction()
{
// Handle UIN translation.
if ($this->_hasParam('uin'))
$form = new \DF\Form($this->current_module_config->forms->user_edit->form);
if ($this->_hasParam('id'))
{
$user = User::getRepository()->findOneByUin($this->_getParam('uin'));
$record = User::find($this->_getParam('id'));
$form->setDefaults($record->toArray());
}
if(!empty($_POST) && $form->isValid($_POST))
{
$data = $form->getValues();
if ($user instanceof User)
$this->redirectFromHere(array('uin' => NULL, 'id' => $user->id));
else
throw new \DF\Exception\DisplayOnly('User not found!');
return;
}
$id = (int)$this->_getParam('id');
$user = User::find($id);
$form = new \DF\Form($this->current_module_config->forms->user_edit->form);
if (!($user instanceof User))
throw new \DF\Exception\DisplayOnly('User not found!');
if (!($record instanceof User))
$record = new User;
$record->fromArray($data);
$record->save();
$this->alert('User updated.', 'green');
$this->redirectFromHere(array('action' => 'index', 'id' => NULL, 'csrf' => NULL));
return;
}
$form->setDefaults($user->toArray(TRUE, TRUE));
if( !empty($_POST) && $form->isValid($_POST) )
{
$data = $form->getValues();
$user->fromArray($data);
$user->save();
$this->alert('<b>User updated!</b>', 'green');
$this->redirectToRoute(array('module'=>'admin','controller'=>'users'));
return;
}
$this->view->headTitle('Edit User');
$this->renderForm($form);
$this->view->headTitle('Add/Edit User');
$this->renderForm($form);
}
public function deleteAction()
@ -106,10 +62,10 @@ class Admin_UsersController extends \DF\Controller\Action
$id = (int)$this->_getParam('id');
$user = User::find($id);
$user->flag_delete = !($user->flag_delete);
$user->save();
if ($user instanceof User)
$user->delete();
$this->alert('<b>User deleted status toggled.</b>', 'green');
$this->alert('<b>User deleted.</b>', 'green');
$this->redirectFromHere(array('action' => 'index', 'id' => NULL));
}

View File

@ -6,8 +6,8 @@ $this->headTitle('Manage Users');
<?=$this->button(array(
'type' => 'link',
'class' => 'success',
'href' => $this->route(array('module' => 'admin', 'controller' => 'users', 'action' => 'add' )),
'icon' => 'add',
'href' => $this->routeFromHere(array('action' => 'edit')),
'icon' => 'icon-plus-sign',
'text' => 'Add New User',
)) ?>
</div>
@ -62,15 +62,6 @@ $this->headTitle('Manage Users');
'icon' => 'pencil',
'text' => 'Edit',
)) ?>
<? if ($user->flag_delete): ?>
<?=$this->button(array(
'type' => 'small',
'href' => $this->routeFromHere(array('action' => 'delete', 'id' => $user->id)),
'class' => 'success',
'icon' => 'add',
'text' => 'Undelete',
)) ?>
<? else: ?>
<?=$this->button(array(
'type' => 'small',
'href' => $this->routeFromHere(array('action' => 'delete', 'id' => $user->id)),
@ -78,7 +69,6 @@ $this->headTitle('Manage Users');
'icon' => 'delete',
'text' => 'Delete',
)) ?>
<? endif; ?>
</div>
</td>
<td><big><?=$user->name ?></big></td>

View File

@ -77,9 +77,9 @@ class IndexController extends \DF\Controller\Action
$autoplay = $this->_getParam('autoplay');
if ($this->_hasParam('autoplay'))
$autoplay = ((bool)$autoplay == true);
$autoplay = ($autoplay === 'true' || $autoplay === '1');
else
$autoplay = ($this->_getParam('showonlystation', false) == 'true');
$autoplay = false;
$this->view->autoplay = $autoplay;
$this->view->standalone = true;
@ -141,9 +141,11 @@ class IndexController extends \DF\Controller\Action
$this->categories = \Entity\Station::getCategories();
/*
$special_event = Settings::getSetting('special_event', 0);
if (!$special_event)
unset($this->categories['event']);
*/
if ($station_id && $this->_getParam('showonlystation', false) == 'true')
{

View File

@ -16,10 +16,18 @@ class UtilController extends \DF\Controller\Action
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 1);
\PVL\CentovaCast::sync();
$db = \PVL\CentovaCast::getDatabase();
$settings = \PVL\CentovaCast::getSettings();
echo 'CC Synced';
// Delete old requests still listed as pending.
$requesttime = new \DateTime('NOW');
$requesttime->modify('-3 hours');
$requesttime->setTimezone(new \DateTimeZone($settings['timezone']));
$threshold_requests = $requesttime->format('Y-m-d h:i:s');
$db->executeQuery('DELETE FROM playlist_tracks_requests WHERE requesttime <= ?', array($threshold_requests));
echo 'Deleted all records before '.$threshold_requests;
exit;
$results = \Entity\StationMedia::search(1, 'Lost on the');

View File

@ -54,7 +54,7 @@ $this->headTitle('Station Schedules');
<? if ($this->station == 'all'): ?>
<? if ($event['station']): ?><?=$event['station']['name'] ?><? else: ?>Network-Wide<? endif; ?>:<br>
<? endif; ?>
<big><?=$event['title'] ?></big>
<?=\Entity\Schedule::formatName($event['title']) ?>
<br><small><?=$event['time'] ?></small>
<!-- </a> -->
</div>

View File

@ -148,7 +148,7 @@ $(function() {
showNickSelection: 'true',
navigationPosition: 'top',
realname: 'Ponyville Live! Visitor',
quitMessage: 'Watch and listen live at http://www.ponyvillelive.com'
quitMessage: 'Watch and listen live at http://pvlive.me'
};
swfobject.embedSWF("<?=\DF\Url::content('lightIRC/lightIRC.swf') ?>", "lightIRC", "100%", "650", "10.0.0", "<?=\DF\Url::content('lightIRC/expressInstall.swf') ?>", params);

View File

@ -226,7 +226,7 @@ for($i = 0; $i <= $num_cols-1; $i++)
<? foreach((array)$date_row['events'] as $event): ?>
<li class="clearfix">
<img class="pull-left" src="<?=$event['image_url'] ?>" style="width: 32px; margin-right: 5px; margin-top: 5px;">
<h5><?=$event['title'] ?><br><small>
<h5><?=\Entity\Schedule::formatName($event['title']) ?><br><small>
<? if ($event['status'] == "now"): ?>
<b>Right now</b>
<? else: ?>

View File

@ -377,7 +377,7 @@ function playStation(id)
volumechange: function(event) {
volume = Math.round(event.jPlayer.options.volume * 100);
},
swfPath: '/static/jplayer/jplayer.swf',
swfPath: DF_ContentPath+'/jplayer/jplayer.swf',
solution: (canPlayMp3()) ? 'html, flash' : 'flash',
supplied: 'mp3',
preload: 'none',

View File

@ -10,14 +10,7 @@ class Mlpma_IndexController extends \PVL\Controller\Action\Mlpma
->setMaxResults(10)
->execute();
$this->view->genres = ArchiveGenre::getTotals();
$this->render('test');
}
public function testAction()
{
$this->view->genres = ArchiveGenre::getTop(25);
}
public function downloadAction()

View File

@ -5,7 +5,7 @@ $this->headTitle('Artist: '.$this->artist_name);
<h2>Albums</h2>
<? foreach($this->albums as $album_name => $songs): ?>
<h4><?=$album_name ?></h4>
<h3><?=$album_name ?></h3>
<?
$this->songs = $songs;
echo $this->renderHere('songs', true);

View File

@ -2,10 +2,28 @@
$this->headTitle('Download the Archive');
?>
<h2>Your Favorite Pony Songs, All In One Place.</h2>
<p>You can download the existing MLP Music Archive using the link below.<br>This version of the archive was created on November 27, 2012.</p>
<h2>Latest Version</h2>
<p>You can download the newest MLP Music Archive using the link below.</p>
<div class="buttons">
<a href="https://docs.google.com/open?id=0B5LW1ZIpaxUIZkIwdUtsQnFKUVU" class="btn btn-xlarge btn-primary">Download v14 (Torrent)</a>
</div>
<?=$this->button(array(
'type' => 'link',
'class' => 'btn-large btn-primary',
'icon' => 'icon-download',
'text' => 'Download MLPMA Version 15, Fall 2013 (.torrent)',
'href' => '//ponyvillelive.com/resources/mlpma_v15.torrent',
)) ?>
</div>
<h2>Older Versions</h2>
<p>Old versions of the MLP Music Archive are available for download below.</p>
<ul class="nav nav-list">
<li><a href="//ponyvillelive.com/resources/mlpma_v14.torrent"><i class="icon-download"></i> MLPMA Version 14, Fall 2012 (.torrent)</a></li>
</ul>
<br>
<h2>About .torrent Files</h2>
<p>A .torrent file lets you download files from the BitTorrent peer-to-peer file sharing network. Since the MLPMA is so large, this is the best way to make sure everyone can download it at the fastest possible speeds, without overloading servers in the process.</p>
<p>In order to download .torrent files, you will need a BitTorrent downloader tool. There are many options available, but a simple lightweight option is the <a href="http://deluge-torrent.org/">Deluge</a> client.</p>

View File

@ -1,33 +1,29 @@
<?
$this->headTitle('The MLP Music Archive');
$this->headTitle('Welcome to the MLP Music Archive');
$this->layout()->manual = true;
$this->layout()->hide_title = true;
?>
<!-- A tab to launch the Classic Widget -->
<script>
UserVoice = window.UserVoice || [];
UserVoice.push(['showTab', 'classic_widget', {
mode: 'feedback',
primary_color: '#3f51c4',
link_color: '#59baeb',
forum_id: 203269,
tab_label: 'Feedback & Support',
tab_color: '#006fe6',
tab_position: 'middle-right',
tab_inverted: false
}]);
</script>
<h1 class="title">Welcome to the <b>MLP Music Archive</b>!</h1>
<p>The MLP Music Archive project is now a proud member of the <a href="http://www.ponyvillelive.com/" target="_blank">Ponyville Live!</a> family. We are working hard to bring you a brand spankin' new and improved version of the archive, with the latest and greatest in pony hits included, plus tons of new features.</p>
<div class="container-fluid" id="intro">
<div class="container">
<div class="row span8 center">
<h1>Your Favorite Pony Songs,<br>All In One Place.</h1>
<p>The MLP Music Archive project is now a proud member of the <a href="http://www.ponyvillelive.com/" target="_blank">Ponyville Live!</a> family. We are working hard to bring you a brand spankin' new and improved version of the archive, with the latest and greatest in pony hits included, plus tons of new features.</p>
<p>You can download the existing MLP Music Archive using the link below.<br>This version of the archive was created on November 27, 2012.</p>
<a href="https://docs.google.com/open?id=0B5LW1ZIpaxUIZkIwdUtsQnFKUVU" class="btn btn-xlarge btn-primary">Download v14 (Torrent)</a>
<a href="https://docs.google.com/folder/d/0B60Mv4AgTPp8WjY4NnpuT05ZT0E/edit" class="btn btn-xlarge btn-inverse">View on Google Drive</a>
</div>
<div class="row-fluid">
<div class="span8">
<h2>Newly Added Songs</h2>
<?
$this->songs = $this->newest_songs;
$this->compact_view = true;
echo $this->renderHere('songs', TRUE);
?>
</div>
<div class="span4">
<h2>Explore By Genre</h2>
<div class="well">
<ul class="nav nav-list">
<? foreach($this->genres as $genre_id => $genre): ?>
<li><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'search', 'genre' => $genre['name'])) ?>" class="ajax"><i class="icon-folder-close"></i> <?=$genre['name'] ?> <span class="label pull-right"><?=$genre['total'] ?></span></li>
<? endforeach; ?>
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,33 @@
<?
$this->headTitle('The MLP Music Archive');
$this->layout()->manual = true;
?>
<!-- A tab to launch the Classic Widget -->
<script>
UserVoice = window.UserVoice || [];
UserVoice.push(['showTab', 'classic_widget', {
mode: 'feedback',
primary_color: '#3f51c4',
link_color: '#59baeb',
forum_id: 203269,
tab_label: 'Feedback & Support',
tab_color: '#006fe6',
tab_position: 'middle-right',
tab_inverted: false
}]);
</script>
<div class="container-fluid" id="intro">
<div class="container">
<div class="row span8 center">
<h1>Your Favorite Pony Songs,<br>All In One Place.</h1>
<p>The MLP Music Archive project is now a proud member of the <a href="http://www.ponyvillelive.com/" target="_blank">Ponyville Live!</a> family. We are working hard to bring you a brand spankin' new and improved version of the archive, with the latest and greatest in pony hits included, plus tons of new features.</p>
<p>You can download the existing MLP Music Archive using the link below.<br>This version of the archive was created on November 27, 2012.</p>
<a href="https://docs.google.com/open?id=0B5LW1ZIpaxUIZkIwdUtsQnFKUVU" class="btn btn-xlarge btn-primary">Download v14 (Torrent)</a>
<a href="https://docs.google.com/folder/d/0B60Mv4AgTPp8WjY4NnpuT05ZT0E/edit" class="btn btn-xlarge btn-inverse">View on Google Drive</a>
</div>
</div>
</div>

View File

@ -1,49 +0,0 @@
<?
$this->headTitle('Welcome to the MLP Music Archive');
$this->layout()->manual = true;
?>
<h1 class="title">Welcome to the <b>MLP Music Archive</b>!</h1>
<p>The MLP Music Archive project is now a proud member of the <a href="http://www.ponyvillelive.com/" target="_blank">Ponyville Live!</a> family. We are working hard to bring you a brand spankin' new and improved version of the archive, with the latest and greatest in pony hits included, plus tons of new features.</p>
<div class="row-fluid">
<div class="span8">
<div class="widget-box transparent">
<div class="widget-header widget-header-flat">
<h4 class="lighter">Newly Added Songs</h4>
<div class="widget-toolbar"><a href="#" data-action="collapse"><i class="icon-chevron-up"></i></a></div>
</div>
<div class="widget-body">
<div class="widget-body-inner">
<div class="widget-main padding-5">
<?
$this->songs = $this->newest_songs;
$this->compact_view = true;
echo $this->renderHere('songs', TRUE);
?>
</div>
</div>
</div>
</div>
</div>
<div class="span4">
<div class="widget-box transparent">
<div class="widget-header widget-header-flat">
<h4 class="lighter">Explore By Genre</h4>
<div class="widget-toolbar"><a href="#" data-action="collapse"><i class="icon-chevron-up"></i></a></div>
</div>
<div class="widget-body">
<div class="widget-body-inner">
<div class="widget-main padding-5">
<ul class="item-list">
<? foreach($this->genres as $genre_id => $genre): ?>
<li class="item"><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'search', 'genre' => $genre['name'])) ?>" class="ajax"><?=$genre['name'] ?> <span class="label"><?=$genre['total'] ?></span></li>
<? endforeach; ?>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,4 +1,4 @@
<table class="table table-striped table-hover">
<table class="table table-bordered table-condensed table-striped table-hover">
<? if ($this->compact_view): ?>
<colgroup>
<col width="10%">
@ -28,7 +28,7 @@
<tr class="input">
<td class="center">
<div class="btn-group">
<a href="<?=$song->file_url ?>" data-title="<?=$song->title ?>" data-artist="<?=$song->artist ?>" title="Play Song" class="btn-play-song btn btn-mini btn-success"><i class="icon-play"></i></a>
<a href="<?=$song->file_url ?>" data-title="<?=$song->title ?>" data-artist="<?=$song->artist ?>" data-cover="<?=$song->art_url ?>" title="Play Song" class="btn-play-song btn btn-mini btn-success"><i class="icon-play"></i></a>
<a href="<?=$song->file_url ?>" title="Download Song" download="<?=basename($song->file_url) ?>" target="_blank" class="btn btn-mini btn-info"><i class="icon-download-alt"></i></a>
<? if ($this->acl->isAllowed('administer mlpma songs')): ?>
<a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'song', 'action' => 'edit', 'id' => $song->id)) ?>" title="Edit Song" class="btn btn-mini btn-warning"><i class="icon-pencil"></i></a>
@ -37,14 +37,14 @@
</div>
</td>
<? if ($this->compact_view): ?>
<td class="center"><a href="#"><img src="<?=$song->art_url ?>" style="width: 100%;"></a></td>
<td class="center"><img src="<?=$song->art_url ?>" style="width: 100%;"></td>
<td>
<a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'artist', 'artist' => $song->artist)) ?>" class="ajax"><?=$song->artist ?></a><br>
<big><b><?=$song->title ?></b></big><br>
<a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'album', 'album' => $song->album, 'artist' => $song->artist)) ?>" class="ajax"><?=$song->album ?></a><? if ($song->genre): ?> &bull; <?=$song->genre ?><? endif; ?>
</td>
<? else: ?>
<td><b><?=$song->title ?></b></td>
<td><big><b><?=$song->title ?></b></big></td>
<td><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'artist', 'artist' => $song->artist)) ?>" class="ajax"><?=$song->artist ?></a></td>
<td><a href="<?=$this->route(array('module' => 'mlpma', 'controller' => 'album', 'album' => $song->album, 'artist' => $song->artist)) ?>" class="ajax"><?=$song->album ?></a></td>
<td><?=$song->genre ?></td>

View File

@ -0,0 +1,50 @@
<?php
use \Entity\Station;
class Mobile_IndexController extends \PVL\Controller\Action\Mobile
{
public function indexAction()
{}
public function viewAction()
{
$this->categories = \Entity\Station::getCategories();
$stations_raw = $this->em->createQuery('SELECT s FROM Entity\Station s WHERE s.is_active=1 ORDER BY s.weight ASC')
->getArrayResult();
$this->stations = array();
foreach($stations_raw as $station)
{
$this->stations[$station['id']] = $station;
if (isset($this->categories[$station['category']]))
$this->categories[$station['category']]['stations'][] = $station;
}
$this->view->stations = $this->stations;
$this->view->categories = $this->categories;
$display_type = strtolower($this->_getParam('type', 'radio'));
switch($display_type)
{
case "show":
$podcasts = Podcast::fetchLatest();
$this->view->podcasts = $podcasts;
$this->render('view_show');
break;
case "video":
$this->view->category = $this->categories['video'];
$this->render('view_video');
break;
case "radio":
default:
$this->view->category = $this->categories['audio'];
$this->render('view_radio');
break;
}
}
}

View File

@ -0,0 +1,16 @@
<?php
use \Entity\Station;
class Mobile_StationController extends \PVL\Controller\Action\Mobile
{
public function indexAction()
{
$id = (int)$this->_getParam('id');
$station = Station::find($id);
if (!($station instanceof Station))
throw new \DF\Exception\DisplayOnly('Not found!');
$this->view->station = $station;
}
}

View File

@ -0,0 +1,28 @@
<?php
$this->headTitle('Ponyville Live!');
?>
<div id="home_header">
<img src="<?=\DF\Url::content('mid2013/logo_light.png') ?>" alt="Ponyville Live!">
</div>
<div id="home_buttons">
<a class="ui-btn ui-corner-all" href="<?=$this->route(array('module' => 'mobile', 'action' => 'view', 'type' => 'radio')) ?>">
<i class="fa fa-music"></i> Radio Stations
</a>
<a class="ui-btn ui-corner-all" href="<?=$this->route(array('module' => 'mobile', 'action' => 'view', 'type' => 'video')) ?>">
<i class="fa fa-video-camera"></i> Video Streams
</a>
<a class="ui-btn ui-corner-all" href="<?=$this->route(array('module' => 'mobile', 'action' => 'view', 'type' => 'show')) ?>">
<i class="fa fa-rss"></i> Show Episodes
</a>
<a class="ui-btn ui-corner-all" href="<?=$this->route(array('module' => 'mobile', 'controller' => 'station', 'action' => 'request')) ?>">
<i class="fa fa-comments"></i> Song Requests
</a>
</div>
<div id="home_footer">
MLP is copyright &copy; Hasbro. All creations are &copy; to their respective artists.<br>
All songs are property of their respective artists.<br>
Copyright &copy; <?=date('Y') ?> Ponyville Live! All rights reserved.
</div>

View File

@ -0,0 +1,30 @@
<?php
$this->headTitle('Radio Stations');
?>
<ul data-role="listview" class="station_list" id="station_list">
<? foreach($this->category['stations'] as $station): ?>
<li class="station" id="station_<?=\Entity\Station::getStationShortName($station['name']) ?>"
data-id="<?=$station['id'] ?>"
data-name="<?=$station['name'] ?>"
data-type="<?=$station['type'] ?>"
data-inactive="<? if ($station['hide_if_inactive']): ?>hide<? else: ?>show<? endif; ?>">
<a href="<?=$this->routeFromHere(array('controller' => 'station', 'action' => 'index', 'id' => $station['id'])) ?>">
<img src="<?=\DF\Url::content($station['image_url']) ?>">
<h4>
<?=$station['name'] ?>
<span class="nowplaying-info">
<span class="nowplaying-listeners"></span>
</span>
<? if ($station['genre']): ?>
<span class="genre-info"><?=$station['genre'] ?></span>
<? endif; ?>
</h4>
<span class="nowplaying-onair" style="display: none;"></span>
<span class="nowplaying-artist">Loading...</span>
<span class="nowplaying-title">Loading...</span>
</a>
</li>
<? endforeach; ?>
</ul>

View File

@ -0,0 +1,27 @@
<?
$station = $this->station;
$this->headTitle($station->name);
?>
<div class="station" id="station_<?=$station->short_name ?>"
data-autoplay="true"
data-id="<?=$station['id'] ?>"
data-name="<?=$station['name'] ?>"
data-type="<?=$station['type'] ?>"
data-stream="<?=$station['stream_url'] ?>"
data-inactive="<? if ($station['hide_if_inactive']): ?>hide<? else: ?>show<? endif; ?>">
<img src="<?=\DF\Url::content($station['image_url']) ?>">
<h4>
<?=$station['name'] ?>
<span class="nowplaying-info">
<span class="nowplaying-listeners"></span>
</span>
<? if ($station['genre']): ?>
<span class="genre-info"><?=$station['genre'] ?></span>
<? endif; ?>
</h4>
<span class="nowplaying-onair" style="display: none;"></span>
<span class="nowplaying-artist">Loading...</span>
<span class="nowplaying-title">Loading...</span>
</div>

View File

@ -0,0 +1,29 @@
<?php
return array(
'elements' => array(
'long_url' => array('text', array(
'label' => 'Original URL (Target)',
'description' => 'The URL you would like the short address to redirect to.',
'required' => true,
'maxlength' => 300,
'class' => 'full-width',
'placeholder' => 'http://full-url.here.com/',
)),
'short_url' => array('text', array(
'label' => 'Short URL',
'maxlength' => 50,
'description' => 'If you want to specify the short URL, enter it in this field. Leave this field blank to automatically generate one.',
'class' => 'half-width',
)),
'submit' => array('submit', array(
'type' => 'submit',
'label' => 'Save Changes',
'helper' => 'formButton',
'class' => 'ui-button',
)),
),
);

View File

@ -0,0 +1,82 @@
<?php
use \Entity\Station;
use \Entity\ShortUrl;
class Stations_UrlsController extends \PVL\Controller\Action\Station
{
public function indexAction()
{
$urls = $this->em->createQuery('SELECT su FROM Entity\ShortUrl su WHERE su.station_id = :station_id ORDER BY su.timestamp ASC')
->setParameter('station_id', $this->station->id)
->execute();
$this->view->urls = $urls;
$station_details = Station::getShortNameLookup();
$station_categories = Station::getCategories();
$station_urls = array();
foreach($station_details as $short_name => $station)
{
$station['url'] = ShortUrl::getFullUrl($short_name);
$station['icon'] = $station_categories[$station['category']]['icon'];
$station_urls[$short_name] = $station;
}
$this->view->station_urls = $station_urls;
}
public function editAction()
{
$form = new \DF\Form($this->current_module_config->forms->url);
if ($this->_hasParam('id'))
{
$record = ShortUrl::getRepository()->findOneBy(array(
'id' => $this->_getParam('id'),
'station_id' => $this->station->id
));
$form->setDefaults($record->toArray());
}
if(!empty($_POST) && $form->isValid($_POST))
{
$data = $form->getValues();
if (!($record instanceof ShortUrl))
$record = new ShortUrl;
$record->station = $this->station;
$record->fromArray($data);
if (!$record->checkUrl())
throw new \DF\Exception\DisplayOnly('This URL is already taken! Please go back and try another.');
$record->save();
$this->alert('Record updated.', 'green');
$this->redirectFromHere(array('action' => 'index', 'id' => NULL));
return;
}
if ($this->_hasParam('id'))
$this->view->headTitle('Edit Short URL');
else
$this->view->headTitle('Add Short URL');
$this->renderForm($form);
}
public function deleteAction()
{
$id = (int)$this->_getParam('id');
$record = ShortUrl::find($id);
if ($record instanceof ShortUrl)
$record->delete();
$this->alert('<b>Record deleted.</b>', 'green');
$this->redirectFromHere(array('action' => 'index', 'id' => NULL));
}
}

View File

@ -0,0 +1 @@
<h4><a href="<?=$this->route(array('module' => 'stations', 'controller' => 'index', 'action' => 'index', 'station' => $this->station->id)) ?>"><i class="icon-arrow-left"></i> Station Center Home</a></h4>

View File

@ -10,9 +10,9 @@ $this->headScript()
$skin = \PVL\Customization::get('theme');
if ($skin == "dark")
$this->headScript()->appendFile(\DF\Url::content('highcharts/dark-blue.js'));
?>
<?=$this->renderHere('header') ?>
echo $this->renderHere('stationname', true);
?>
<script type="text/javascript">
Highcharts.setOptions({
@ -43,6 +43,9 @@ Highcharts.setOptions({
<dt><a href="<?=$this->routeFromHere(array('action' => 'timeline')) ?>">Song Playback Timeline</a></dt>
<dd>View the entire playback history of your station over the last 48 hours, along with the rise and fall of listener counts and special events.</dd>
<dt><a href="<?=$this->routeFromHere(array('controller' => 'urls', 'action' => 'index')) ?>">PVL Short URLs</a></dt>
<dd>Manage the "pvlive.me" URL shortener links for your station.</dd>
<dt><a href="http://radio.ponyvillelive.com:2199/" target="_blank">CentovaCast Station Manager</a></dt>
<dd>If your station is hosted on the PVL CentovaCast server, use this link to manage it.</dd>

View File

@ -0,0 +1,5 @@
<? if (count($this->stations) > 1): ?>
<a class="btn pull-right fancybox fancybox.ajax" href="<?=$this->routeFromHere(array('controller' => 'index', 'action' => 'select', 'station' => NULL)) ?>"><i class="icon-random"></i> Change Active Station</a>
<? endif; ?>
<h2><i class="<?=$this->station->getCategoryIcon() ?>"></i> <?=$this->station->name ?></h2>

View File

@ -0,0 +1,87 @@
<?php
$this->headTitle('URL Shortener Management');
$this->layout()->manual = true;
echo $this->renderHere('stationname', true);
echo $this->renderHere('homelink', true);
?>
<div class="row-fluid">
<div class="span7">
<h2>My Station's Links</h2>
<div class="buttons">
<?=$this->button(array(
'type' => 'link',
'class' => 'btn-large success',
'href' => $this->routeFromHere(array('action' => 'edit')),
'icon' => 'icon-plus-sign',
'text' => 'Add New URL',
)) ?>
</div>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="20%" />
<col width="40%" />
<col width="40%" />
</colgroup>
<thead>
<tr>
<th>Actions</th>
<th>Short URL</th>
<th>Long URL</th>
</tr>
</thead>
<tbody>
<? foreach($this->urls as $record): ?>
<tr class="input">
<td class="center">
<div class="btn-group">
<?=$this->button(array(
'type' => 'link',
'href' => $this->routeFromHere(array('action' => 'edit', 'id' => $record['id'])),
'icon' => 'icon-pencil',
'text' => 'Edit',
)) ?>
<?=$this->button(array(
'type' => 'link',
'class' => 'btn-danger confirm-action',
'href' => $this->routeFromHere(array('action' => 'delete', 'id' => $record['id'])),
'icon' => 'icon-trash',
'text' => 'Delete',
)) ?>
</div>
</td>
<td><a href="<?=$record->getUrl() ?>" target="_blank"><?=$record->getUrl() ?></a></td>
<td><a href="<?=$record->long_url ?>" target="_blank"><?=$record->long_url ?></a></td>
</tr>
<? endforeach; ?>
</tbody>
</table>
</div>
<div class="span5">
<h2>System-Wide Short URLs</h2>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="40%" />
<col width="60%" />
</colgroup>
<thead>
<tr>
<th>Station Name</th>
<th>Station URL</th>
</tr>
</thead>
<tbody>
<? foreach($this->station_urls as $record): ?>
<tr class="input">
<td><i class="<?=$record['icon'] ?>"></i> <?=$record['name'] ?></td>
<td><a href="<?=$record['url'] ?>" target="_blank"><?=$record['url'] ?></a></td>
</tr>
<? endforeach; ?>
</tbody>
</table>
</div>
</div>

View File

@ -1,8 +1,9 @@
<?php
$this->headTitle('New Station Intake Voting');
?>
<h4><a href="<?=$this->routeFromHere(array('controller' => 'index', 'action' => 'index')) ?>"><i class="icon-arrow-left"></i> Station Center Home</a></h4>
echo $this->renderHere('stationname', true);
echo $this->renderHere('homelink', true);
?>
<table class="table table-striped table-bordered table-condensed">
<colgroup>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -18,4 +18,10 @@
# http://www.sxw.org.uk/computing/robots/check.html
User-agent: *
Crawl-delay: 10
Crawl-delay: 2
# Prevent GoogleBot from requesting tracks!
Disallow: /station/request/*
# Allow all others.
Allow: /

View File

@ -156,7 +156,8 @@ function initPage(page) {
/* Disable submit button to prevent double submissions */
$(page).find('form').submit(function(){
$(this).find('input[type=submit],button[type=submit]').attr('disabled', 'disabled').addClass('disabled').val('Working...');
if (!$(this).hasClass('no-disable'))
$(this).find('input[type=submit],button[type=submit]').attr('disabled', 'disabled').addClass('disabled').val('Working...');
});
/* Suppress the backspace key. */

View File

@ -0,0 +1,4 @@
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

View File

@ -0,0 +1,156 @@
/*
* Fullwidth Audio Player - Responsive Layout
*
*/
/* Smartphones (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px) {
#fap-meta-wrapper > p {
margin-left: 45px !important;
}
#fap-current-cover, #fap-cover-replacement, #fap-cover-replacement canvas, #fap-cover-replacement svg {
max-width: 40px !important;
max-height: 40px !important;
}
#fap-ui-wrapper > div {
display: none;
}
#fap-ui-wrapper > div:first-child {
display: block;
margin-right: 0;
}
#fap-current-title {
font-size: 9px;
line-height: 9px;
}
#fap-social-links {
margin-top: 2px;
line-height: 6px;
}
#fap-current-meta, #fap-social-links a {
font-size: 6px;
line-height: 8px;
}
#fap-time-bar, #fap-volume-bar, #fap-volume-sign, #fap-playlist-toggle, #fap-playlist-shuffle {
display: none;
}
}
/* Smartphones (portrait) ----------- */
@media only screen
and (max-width : 320px) {
#fap-main {
width: 320px;
}
#fap-meta-wrapper {
width: 240px;
}
#fap-ui-wrapper {
width: 80px;
}
#fap-time-bar, #fap-volume-bar, #fap-volume-sign, #fap-playlist-toggle, #fap-playlist-shuffle {
display: none;
}
}
/* Smartphones (landscape) ----------- */
@media only screen
and (min-width : 321px) {
#fap-main {
width: 480px;
}
#fap-meta-wrapper {
width: 400px;
}
#fap-ui-wrapper {
width: 80px;
}
#fap-time-bar, #fap-volume-bar, #fap-volume-sign, #fap-playlist-toggle, #fap-playlist-shuffle {
display: none;
}
}
/* iPads (portrait) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px) {
#fap-main {
margin-right: auto !important;
margin-left: auto !important;
width: 768px;
}
#fap-meta-wrapper {
width: 338px;
}
#fap-ui-wrapper {
width: 430px;
}
#fap-current-title {
font-size: 11px;
line-height: 11px;
}
#fap-current-meta, #fap-social-links a {
font-size: 8px;
line-height: 8px;
}
#fap-social-links {
margin-top: 2px;
}
#fap-time-bar, #fap-volume-bar, #fap-volume-sign, #fap-playlist-toggle, #fap-playlist-shuffle {
display: block;
}
}
/* Desktops and laptops ----------- */
@media only screen
and (min-width : 1024px) {
#fap-main {
width: 960px;
}
#fap-meta-wrapper {
width: 530px;
}
#fap-ui-wrapper {
width: 430px;
}
#fap-time-bar, #fap-volume-bar, #fap-volume-sign, #fap-playlist-toggle, #fap-playlist-shuffle {
display: block;
}
}

View File

@ -0,0 +1,360 @@
/*
* Fullwidth Audio Player V1.5
* Author: Rafael Dery
* Copyright 2011
*
* Only for the sale at the envato marketplaces
*
*/
/* Reset */
#fap-wrapper * {
margin: 0;
padding: 0;
list-style: none !important;
line-height: 12px;
outline: none !important;
}
/* Wrapper */
#fap-wrapper {
min-width: 100%;
position: fixed;
left: 0;
z-index: 100000;
font-size: 10px;
font-family: Arial, Helvetica, sans-serif;
}
.fap-fullwidth {
border-top: 1px solid;
border-bottom: 1px solid;
}
.fap-boxed #fap-main {
border: 1px solid;
}
#fap-wrapper-switcher {
position: absolute;
width: 30px;
height: 15px;
line-height: 15px;
left: 0;
border: 1px solid;
cursor: pointer;
font-size: 20px;
text-align: center;
}
.fap-bordered-top {
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
-moz-border-radius-bottomright: 0px;
-moz-border-radius-bottomleft: 0px;
-webkit-border-radius: 5px 5px 0px 0px;
border-radius: 5px 5px 0px 0px;
}
.fap-bordered-bottom {
-moz-border-radius-topleft: 0px;
-moz-border-radius-topright: 0px;
-moz-border-radius-bottomright: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-radius: 0px 0px 5px 5px;
border-radius: 0px 0px 5px 5px;
}
#fap-init-text {
position: absolute;
left: 0;
font-size: 12px;
}
.fap-wrapper-top #fap-init-text {
bottom: 20px;
}
.fap-wrapper-bottom #fap-init-text {
top: 20px;
}
#fap-main {
width: 960px;
height: 100%;
position: relative;
}
/* Meta Stuff */
#fap-meta-wrapper {
width: 530px;
float: left;
margin-top: 10px;
}
#fap-current-cover, #fap-cover-replacement {
text-align: center;
font-size: 18px;
float: left;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);
box-shadow: 0px 2px 3px 0px rgba(0, 0, 0, 0.5);
}
#fap-current-title {
font-weight: bold;
font-size: 12px;
line-height: 18px;
padding-right: 10px;
}
#fap-current-meta {
font-size: 10px;
}
#fap-current-meta a, #fap-current-meta a:visited {
color: #666666;
}
#fap-current-meta a:hover {
text-decoration: none;
}
#fap-social-links {
margin-top: 7px;
}
#fap-social-links a {
font-size: 10px;
margin-right: 10px;
float: left;
display: block;
}
#fap-social-links a.fap-soundcloud-link {
background: url(../images/fwap/sc_logo_dark.png) no-repeat;
width: 78px;
height: 12px;
}
/* Main UI */
#fap-ui-wrapper {
width: 430px;
float: right;
}
#fap-ui-wrapper > div, #fap-ui-wrapper > a {
float: left;
}
#fap-ui-nav {
position: relative;
width: 80px;
height: 40px;
}
#fap-ui-wrapper > div {
margin-right: 11px;
}
#fap-ui-wrapper > div:last-child {
margin-right: 0;
}
#fap-ui-nav > a {
background-repeat: no-repeat;
display: block;
position: absolute;
-webkit-border-radius: 100%;
border-radius: 100%;
}
#fap-ui-nav #fap-previous {
background-image: url(../images/fwap/previous.png);
background-position: 5px 12px;
top: 5px;
left: 0;
width: 30px;
height: 30px;
}
#fap-ui-nav #fap-next {
background-image: url(../images/fwap/next.png);
background-position: 12px 12px;
top: 5px;
left: 50px;
width: 30px;
height: 30px;
}
#fap-ui-nav #fap-play-pause {
top: 0;
left: 20px;
width: 40px;
height: 40px;
z-index: 3;
}
#fap-ui-nav .fap-play {
background-image: url(../images/fwap/play.png);
background-position: 15px 11px;
}
#fap-ui-nav .fap-pause {
background-image: url(../images/fwap/pause.png);
background-position: 16px 12px;
}
#fap-time-bar {
position: relative;
}
#fap-time-bar div {
position: absolute;
top: 0;
left: 0;
}
#fap-time-bar div, #fap-volume-bar, #fap-volume-bar div {
cursor: pointer;
}
#fap-time-bar div {
width: 0;
}
#fap-time-bar span {
margin-top: 10px;
}
#fap-volume-bar div {
width: 100%;
}
#fap-time-bar #fap-current-time {
float: left;
}
#fap-time-bar #fap-total-time {
float: right;
}
#fap-volume-bar {
margin-right: 5px !important;
}
#fap-volume-sign {
background-image: url(../images/fwap/volume.png);
background-repeat: no-repeat;
background-position: 0 3px;
width: 20px;
height: 22px;
}
#fap-playlist-toggle {
margin-right: 0 !important;
}
#fap-time-bar, #fap-time-bar div, #fap-volume-bar, #fap-volume-bar div {
height: 6px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
}
/* Playlist Stuff */
#fap-playlist-toggle, #fap-playlist-shuffle {
background-repeat: no-repeat;
display: block;
width: 25px;
height: 25px;
-webkit-border-radius: 100%;
border-radius: 100%;
}
#fap-playlist-toggle {
background-image: url(../images/fwap/playlist.png);
background-position: 7px 7px;
}
#fap-playlist-shuffle {
background-image: url(../images/fwap/shuffle.png);
background-position: 5px 7px;
}
#fap-playlist {
width: 100%;
height: 100%;
}
#fap-playlist li {
line-height: 20px;
margin-right: 10px;
}
#fap-playlist li img, #fap-playlist li .fap-cover-replace-small {
text-align: center;
float: left;
width: 20px;
height: 20px;
}
#fap-playlist li > span {
float: left;
line-height: 20px;
margin-left: 10px;
cursor: pointer;
}
#fap-playlist li span:hover {
text-decoration: underline;
}
#fap-playlist li .fap-remove-track {
font-size: 18px;
line-height: 22px;
float: right;
cursor: pointer;
}
.fap-xml-playlist span {
display: none;
}
/* Popup Skin */
.fap-popup-skin #fap-wrapper-switcher {
display: none;
font-size: 20px;
text-align: center;
}
/* Soundcloud */
.sc-player-engine-container{
width: 1px;
height: 1px;
position: fixed;
top: -200px;
left: -200px;
}
/* Helper */
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }
.clearfix { zoom: 1; }
.clear {clear: both;}

View File

@ -0,0 +1,94 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Fullwidth Audio Player</title>
<!-- Style sheets -->
<link rel="stylesheet" type="text/css" href="css/jquery.fullwidthAudioPlayer.css" />
<style type="text/css">
/* RESET */
html, body, div, span, applet, object, iframe, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* SET HERE YOUR BACKGROUND COLOR OF THE POPUP WINDOW */
body {
background-color: #fff;
}
</style>
<!-- Include js files -->
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery-ui.js" type="text/javascript"></script>
<script src="js/soundmanager2-nodebug-jsmin.js" type="text/javascript"></script>
<script src="http://connect.soundcloud.com/sdk.js"></script>
<script src="js/amplify.min.js"></script>
<script src="js/jquery.fullwidthAudioPlayer.min.js" type="text/javascript"></script>
<script type="text/javascript">
//DO NOT CHANGE ANYTHING FROM THIS JAVASCRIPT CODE
soundManager.url = 'swf/';
soundManager.flashVersion = 9;
soundManager.useHTML5Audio = true;
soundManager.debugMode = false;
//let target window know that popout window is openend
function notifyOpener() {
//close popout when target window gets closed, comment the next line if you dont want that
if(!self.opener) {
self.opener.fapReady = false;
self.close();
}
if(self.opener || !self.opener.fapPopupWin) self.opener.fapPopupWin = self;
}
setInterval( notifyOpener, 300 );
self.focus();
//functions that will be called from the target window
function initPlayer(opts, html) {
opts.wrapperPosition = 'bottom';
$('#fap-popup').html(html).fullwidthAudioPlayer(opts);
}
function addTrack(trackUrl,title,meta,cover,linkUrl, playIt) {
$.fullwidthAudioPlayer.addTrack(trackUrl, title, meta, cover, linkUrl, playIt);
}
jQuery(document).ready(function(){
$('#fap-popup').bind('onFapReady', function(evt, trackData) {
self.opener.fapReady = true;
});
});
</script>
</head>
<body>
<!-- Fancy Music Player Container -->
<div id="fap-popup"></div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

10
web/static/fap/js/amplify.min.js vendored Normal file

File diff suppressed because one or more lines are too long

6
web/static/fap/js/jquery-ui.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

4
web/static/fap/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,81 @@
/** @license
*
* SoundManager 2: JavaScript Sound for the Web
* ----------------------------------------------
* http://schillmania.com/projects/soundmanager2/
*
* Copyright (c) 2007, Scott Schiller. All rights reserved.
* Code provided under the BSD License:
* http://schillmania.com/projects/soundmanager2/license.txt
*
* V2.97a.20130512
*/
(function(l,h){function V(V,la){function W(b){return c.preferFlash&&D&&!c.ignoreFlash&&c.flash[b]!==h&&c.flash[b]}function r(b){return function(c){var d=this._s;return!d||!d._a?null:b.call(this,c)}}this.setupOptions={url:V||null,flashVersion:8,debugMode:!0,debugFlash:!1,useConsole:!0,consoleOnly:!0,waitForWindowLoad:!1,bgColor:"#ffffff",useHighPerformance:!1,flashPollingInterval:null,html5PollingInterval:null,flashLoadTimeout:1E3,wmode:null,allowScriptAccess:"always",useFlashBlock:!1,useHTML5Audio:!0,
html5Test:/^(probably|maybe)$/i,preferFlash:!0,noSWFCache:!1,idPrefix:"sound"};this.defaultOptions={autoLoad:!1,autoPlay:!1,from:null,loops:1,onid3:null,onload:null,whileloading:null,onplay:null,onpause:null,onresume:null,whileplaying:null,onposition:null,onstop:null,onfailure:null,onfinish:null,multiShot:!0,multiShotEvents:!1,position:null,pan:0,stream:!0,to:null,type:null,usePolicyFile:!1,volume:100};this.flash9Options={isMovieStar:null,usePeakData:!1,useWaveformData:!1,useEQData:!1,onbufferchange:null,
ondataerror:null};this.movieStarOptions={bufferTime:3,serverURL:null,onconnect:null,duration:null};this.audioFormats={mp3:{type:['audio/mpeg; codecs\x3d"mp3"',"audio/mpeg","audio/mp3","audio/MPA","audio/mpa-robust"],required:!0},mp4:{related:["aac","m4a","m4b"],type:['audio/mp4; codecs\x3d"mp4a.40.2"',"audio/aac","audio/x-m4a","audio/MP4A-LATM","audio/mpeg4-generic"],required:!1},ogg:{type:["audio/ogg; codecs\x3dvorbis"],required:!1},opus:{type:["audio/ogg; codecs\x3dopus","audio/opus"],required:!1},
wav:{type:['audio/wav; codecs\x3d"1"',"audio/wav","audio/wave","audio/x-wav"],required:!1}};this.movieID="sm2-container";this.id=la||"sm2movie";this.debugID="soundmanager-debug";this.debugURLParam=/([#?&])debug=1/i;this.versionNumber="V2.97a.20130512";this.altURL=this.movieURL=this.version=null;this.enabled=this.swfLoaded=!1;this.oMC=null;this.sounds={};this.soundIDs=[];this.didFlashBlock=this.muted=!1;this.filePattern=null;this.filePatterns={flash8:/\.mp3(\?.*)?$/i,flash9:/\.mp3(\?.*)?$/i};this.features=
{buffering:!1,peakData:!1,waveformData:!1,eqData:!1,movieStar:!1};this.sandbox={};this.html5={usingFlash:null};this.flash={};this.ignoreFlash=this.html5Only=!1;var Ja,c=this,Ka=null,k=null,X,p=navigator.userAgent,La=l.location.href.toString(),n=document,ma,Ma,na,m,u=[],L=!1,M=!1,q=!1,x=!1,oa=!1,N,w,pa,Y,qa,E,F,G,Na,ra,Z,sa,$,ta,H,ua,O,va,aa,I,Oa,wa,Pa,xa,Qa,P=null,ya=null,Q,za,J,ba,ca,s,R=!1,Aa=!1,Ra,Sa,Ta,da=0,S=null,ea,Ua=[],fa,v=null,Va,ga,T,y,ha,Ba,Wa,t,fb=Array.prototype.slice,z=!1,Ca,D,Da,Xa,
B,ia,Ya=0,U=p.match(/(ipad|iphone|ipod)/i),Za=p.match(/android/i),C=p.match(/msie/i),gb=p.match(/webkit/i),ja=p.match(/safari/i)&&!p.match(/chrome/i),Ea=p.match(/opera/i),hb=p.match(/firefox/i),Fa=p.match(/(mobile|pre\/|xoom)/i)||U||Za,$a=!La.match(/usehtml5audio/i)&&!La.match(/sm2\-ignorebadua/i)&&ja&&!p.match(/silk/i)&&p.match(/OS X 10_6_([3-7])/i),Ga=n.hasFocus!==h?n.hasFocus():null,ka=ja&&(n.hasFocus===h||!n.hasFocus()),ab=!ka,bb=/(mp3|mp4|mpa|m4a|m4b)/i,Ha=n.location?n.location.protocol.match(/http/i):
null,cb=!Ha?"http://":"",db=/^\s*audio\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4||m4v|m4a|m4b|mp4v|3gp|3g2)\s*(?:$|;)/i,eb="mpeg4 aac flv mov mp4 m4v f4v m4a m4b mp4v 3gp 3g2".split(" "),ib=RegExp("\\.("+eb.join("|")+")(\\?.*)?$","i");this.mimePattern=/^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i;this.useAltURL=!Ha;var Ia;try{Ia=Audio!==h&&(Ea&&opera!==h&&10>opera.version()?new Audio(null):new Audio).canPlayType!==h}catch(jb){Ia=!1}this.hasHTML5=Ia;this.setup=function(b){var e=!c.url;b!==h&&q&&v&&c.ok();pa(b);
b&&(e&&(O&&b.url!==h)&&c.beginDelayedInit(),!O&&(b.url!==h&&"complete"===n.readyState)&&setTimeout(H,1));return c};this.supported=this.ok=function(){return v?q&&!x:c.useHTML5Audio&&c.hasHTML5};this.getMovie=function(b){return X(b)||n[b]||l[b]};this.createSound=function(b,e){function d(){a=ba(a);c.sounds[a.id]=new Ja(a);c.soundIDs.push(a.id);return c.sounds[a.id]}var a,f=null;if(!q||!c.ok())return!1;e!==h&&(b={id:b,url:e});a=w(b);a.url=ea(a.url);void 0===a.id&&(a.id=c.setupOptions.idPrefix+Ya++);if(s(a.id,
!0))return c.sounds[a.id];if(ga(a))f=d(),f._setup_html5(a);else{if(c.html5Only||c.html5.usingFlash&&a.url&&a.url.match(/data\:/i))return d();8<m&&null===a.isMovieStar&&(a.isMovieStar=!(!a.serverURL&&!(a.type&&a.type.match(db)||a.url&&a.url.match(ib))));a=ca(a,void 0);f=d();8===m?k._createSound(a.id,a.loops||1,a.usePolicyFile):(k._createSound(a.id,a.url,a.usePeakData,a.useWaveformData,a.useEQData,a.isMovieStar,a.isMovieStar?a.bufferTime:!1,a.loops||1,a.serverURL,a.duration||null,a.autoPlay,!0,a.autoLoad,
a.usePolicyFile),a.serverURL||(f.connected=!0,a.onconnect&&a.onconnect.apply(f)));!a.serverURL&&(a.autoLoad||a.autoPlay)&&f.load(a)}!a.serverURL&&a.autoPlay&&f.play();return f};this.destroySound=function(b,e){if(!s(b))return!1;var d=c.sounds[b],a;d._iO={};d.stop();d.unload();for(a=0;a<c.soundIDs.length;a++)if(c.soundIDs[a]===b){c.soundIDs.splice(a,1);break}e||d.destruct(!0);delete c.sounds[b];return!0};this.load=function(b,e){return!s(b)?!1:c.sounds[b].load(e)};this.unload=function(b){return!s(b)?
!1:c.sounds[b].unload()};this.onposition=this.onPosition=function(b,e,d,a){return!s(b)?!1:c.sounds[b].onposition(e,d,a)};this.clearOnPosition=function(b,e,d){return!s(b)?!1:c.sounds[b].clearOnPosition(e,d)};this.start=this.play=function(b,e){var d=null,a=e&&!(e instanceof Object);if(!q||!c.ok())return!1;if(s(b,a))a&&(e={url:e});else{if(!a)return!1;a&&(e={url:e});e&&e.url&&(e.id=b,d=c.createSound(e).play())}null===d&&(d=c.sounds[b].play(e));return d};this.setPosition=function(b,e){return!s(b)?!1:c.sounds[b].setPosition(e)};
this.stop=function(b){return!s(b)?!1:c.sounds[b].stop()};this.stopAll=function(){for(var b in c.sounds)c.sounds.hasOwnProperty(b)&&c.sounds[b].stop()};this.pause=function(b){return!s(b)?!1:c.sounds[b].pause()};this.pauseAll=function(){var b;for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].pause()};this.resume=function(b){return!s(b)?!1:c.sounds[b].resume()};this.resumeAll=function(){var b;for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].resume()};this.togglePause=function(b){return!s(b)?
!1:c.sounds[b].togglePause()};this.setPan=function(b,e){return!s(b)?!1:c.sounds[b].setPan(e)};this.setVolume=function(b,e){return!s(b)?!1:c.sounds[b].setVolume(e)};this.mute=function(b){var e=0;b instanceof String&&(b=null);if(b)return!s(b)?!1:c.sounds[b].mute();for(e=c.soundIDs.length-1;0<=e;e--)c.sounds[c.soundIDs[e]].mute();return c.muted=!0};this.muteAll=function(){c.mute()};this.unmute=function(b){b instanceof String&&(b=null);if(b)return!s(b)?!1:c.sounds[b].unmute();for(b=c.soundIDs.length-
1;0<=b;b--)c.sounds[c.soundIDs[b]].unmute();c.muted=!1;return!0};this.unmuteAll=function(){c.unmute()};this.toggleMute=function(b){return!s(b)?!1:c.sounds[b].toggleMute()};this.getMemoryUse=function(){var b=0;k&&8!==m&&(b=parseInt(k._getMemoryUse(),10));return b};this.disable=function(b){var e;b===h&&(b=!1);if(x)return!1;x=!0;for(e=c.soundIDs.length-1;0<=e;e--)Pa(c.sounds[c.soundIDs[e]]);N(b);t.remove(l,"load",F);return!0};this.canPlayMIME=function(b){var e;c.hasHTML5&&(e=T({type:b}));!e&&v&&(e=b&&
c.ok()?!!(8<m&&b.match(db)||b.match(c.mimePattern)):null);return e};this.canPlayURL=function(b){var e;c.hasHTML5&&(e=T({url:b}));!e&&v&&(e=b&&c.ok()?!!b.match(c.filePattern):null);return e};this.canPlayLink=function(b){return b.type!==h&&b.type&&c.canPlayMIME(b.type)?!0:c.canPlayURL(b.href)};this.getSoundById=function(b,e){return!b?null:c.sounds[b]};this.onready=function(b,c){if("function"===typeof b)c||(c=l),qa("onready",b,c),E();else throw Q("needFunction","onready");return!0};this.ontimeout=function(b,
c){if("function"===typeof b)c||(c=l),qa("ontimeout",b,c),E({type:"ontimeout"});else throw Q("needFunction","ontimeout");return!0};this._wD=this._writeDebug=function(b,c){return!0};this._debug=function(){};this.reboot=function(b,e){var d,a,f;for(d=c.soundIDs.length-1;0<=d;d--)c.sounds[c.soundIDs[d]].destruct();if(k)try{C&&(ya=k.innerHTML),P=k.parentNode.removeChild(k)}catch(h){}ya=P=v=k=null;c.enabled=O=q=R=Aa=L=M=x=z=c.swfLoaded=!1;c.soundIDs=[];c.sounds={};Ya=0;if(b)u=[];else for(d in u)if(u.hasOwnProperty(d)){a=
0;for(f=u[d].length;a<f;a++)u[d][a].fired=!1}c.html5={usingFlash:null};c.flash={};c.html5Only=!1;c.ignoreFlash=!1;l.setTimeout(function(){ta();e||c.beginDelayedInit()},20);return c};this.reset=function(){return c.reboot(!0,!0)};this.getMoviePercent=function(){return k&&"PercentLoaded"in k?k.PercentLoaded():null};this.beginDelayedInit=function(){oa=!0;H();setTimeout(function(){if(Aa)return!1;aa();$();return Aa=!0},20);G()};this.destruct=function(){c.disable(!0)};Ja=function(b){var e,d,a=this,f,g,K,
A,l,n,r=!1,p=[],q=0,v,x,u=null,y;d=e=null;this.sID=this.id=b.id;this.url=b.url;this._iO=this.instanceOptions=this.options=w(b);this.pan=this.options.pan;this.volume=this.options.volume;this.isHTML5=!1;this._a=null;y=this.url?!1:!0;this.id3={};this._debug=function(){};this.load=function(b){var e=null,d;b!==h?a._iO=w(b,a.options):(b=a.options,a._iO=b,u&&u!==a.url&&(a._iO.url=a.url,a.url=null));a._iO.url||(a._iO.url=a.url);a._iO.url=ea(a._iO.url);d=a.instanceOptions=a._iO;if(!d.url&&!a.url)return a;
if(d.url===a.url&&0!==a.readyState&&2!==a.readyState)return 3===a.readyState&&d.onload&&ia(a,function(){d.onload.apply(a,[!!a.duration])}),a;a.loaded=!1;a.readyState=1;a.playState=0;a.id3={};if(ga(d))e=a._setup_html5(d),e._called_load||(a._html5_canplay=!1,a.url!==d.url&&(a._a.src=d.url,a.setPosition(0)),a._a.autobuffer="auto",a._a.preload="auto",a._a._called_load=!0,d.autoPlay&&a.play());else{if(c.html5Only||a._iO.url&&a._iO.url.match(/data\:/i))return a;try{a.isHTML5=!1,a._iO=ca(ba(d)),d=a._iO,
8===m?k._load(a.id,d.url,d.stream,d.autoPlay,d.usePolicyFile):k._load(a.id,d.url,!!d.stream,!!d.autoPlay,d.loops||1,!!d.autoLoad,d.usePolicyFile)}catch(f){I({type:"SMSOUND_LOAD_JS_EXCEPTION",fatal:!0})}}a.url=d.url;return a};this.unload=function(){0!==a.readyState&&(a.isHTML5?(A(),a._a&&(a._a.pause(),u=ha(a._a))):8===m?k._unload(a.id,"about:blank"):k._unload(a.id),f());return a};this.destruct=function(b){a.isHTML5?(A(),a._a&&(a._a.pause(),ha(a._a),z||K(),a._a._s=null,a._a=null)):(a._iO.onfailure=
null,k._destroySound(a.id));b||c.destroySound(a.id,!0)};this.start=this.play=function(b,e){var d,f,g,K,A;f=!0;f=null;e=e===h?!0:e;b||(b={});a.url&&(a._iO.url=a.url);a._iO=w(a._iO,a.options);a._iO=w(b,a._iO);a._iO.url=ea(a._iO.url);a.instanceOptions=a._iO;if(!a.isHTML5&&a._iO.serverURL&&!a.connected)return a.getAutoPlay()||a.setAutoPlay(!0),a;ga(a._iO)&&(a._setup_html5(a._iO),l());1===a.playState&&!a.paused&&(d=a._iO.multiShot,d||(a.isHTML5&&a.setPosition(a._iO.position),f=a));if(null!==f)return f;
b.url&&b.url!==a.url&&(!a.readyState&&!a.isHTML5&&8===m&&y?y=!1:a.load(a._iO));a.loaded||(0===a.readyState?(!a.isHTML5&&!c.html5Only?(a._iO.autoPlay=!0,a.load(a._iO)):a.isHTML5?a.load(a._iO):f=a,a.instanceOptions=a._iO):2===a.readyState&&(f=a));if(null!==f)return f;!a.isHTML5&&(9===m&&0<a.position&&a.position===a.duration)&&(b.position=0);if(a.paused&&0<=a.position&&(!a._iO.serverURL||0<a.position))a.resume();else{a._iO=w(b,a._iO);if(null!==a._iO.from&&null!==a._iO.to&&0===a.instanceCount&&0===a.playState&&
!a._iO.serverURL){d=function(){a._iO=w(b,a._iO);a.play(a._iO)};if(a.isHTML5&&!a._html5_canplay)a.load({oncanplay:d}),f=!1;else if(!a.isHTML5&&!a.loaded&&(!a.readyState||2!==a.readyState))a.load({onload:d}),f=!1;if(null!==f)return f;a._iO=x()}(!a.instanceCount||a._iO.multiShotEvents||a.isHTML5&&a._iO.multiShot&&!z||!a.isHTML5&&8<m&&!a.getAutoPlay())&&a.instanceCount++;a._iO.onposition&&0===a.playState&&n(a);a.playState=1;a.paused=!1;a.position=a._iO.position!==h&&!isNaN(a._iO.position)?a._iO.position:
0;a.isHTML5||(a._iO=ca(ba(a._iO)));a._iO.onplay&&e&&(a._iO.onplay.apply(a),r=!0);a.setVolume(a._iO.volume,!0);a.setPan(a._iO.pan,!0);a.isHTML5?2>a.instanceCount?(l(),f=a._setup_html5(),a.setPosition(a._iO.position),f.play()):(g=new Audio(a._iO.url),K=function(){t.remove(g,"onended",K);a._onfinish(a);ha(g);g=null},A=function(){t.remove(g,"canplay",A);try{g.currentTime=a._iO.position/1E3}catch(b){}g.play()},t.add(g,"ended",K),a._iO.position?t.add(g,"canplay",A):g.play()):(f=k._start(a.id,a._iO.loops||
1,9===m?a.position:a.position/1E3,a._iO.multiShot||!1),9===m&&!f&&a._iO.onplayerror&&a._iO.onplayerror.apply(a))}return a};this.stop=function(b){var c=a._iO;1===a.playState&&(a._onbufferchange(0),a._resetOnPosition(0),a.paused=!1,a.isHTML5||(a.playState=0),v(),c.to&&a.clearOnPosition(c.to),a.isHTML5?a._a&&(b=a.position,a.setPosition(0),a.position=b,a._a.pause(),a.playState=0,a._onTimer(),A()):(k._stop(a.id,b),c.serverURL&&a.unload()),a.instanceCount=0,a._iO={},c.onstop&&c.onstop.apply(a));return a};
this.setAutoPlay=function(b){a._iO.autoPlay=b;a.isHTML5||(k._setAutoPlay(a.id,b),b&&!a.instanceCount&&1===a.readyState&&a.instanceCount++)};this.getAutoPlay=function(){return a._iO.autoPlay};this.setPosition=function(b){b===h&&(b=0);var c=a.isHTML5?Math.max(b,0):Math.min(a.duration||a._iO.duration,Math.max(b,0));a.position=c;b=a.position/1E3;a._resetOnPosition(a.position);a._iO.position=c;if(a.isHTML5){if(a._a){if(a._html5_canplay){if(a._a.currentTime!==b)try{a._a.currentTime=b,(0===a.playState||
a.paused)&&a._a.pause()}catch(e){}}else if(b)return a;a.paused&&a._onTimer(!0)}}else b=9===m?a.position:b,a.readyState&&2!==a.readyState&&k._setPosition(a.id,b,a.paused||!a.playState,a._iO.multiShot);return a};this.pause=function(b){if(a.paused||0===a.playState&&1!==a.readyState)return a;a.paused=!0;a.isHTML5?(a._setup_html5().pause(),A()):(b||b===h)&&k._pause(a.id,a._iO.multiShot);a._iO.onpause&&a._iO.onpause.apply(a);return a};this.resume=function(){var b=a._iO;if(!a.paused)return a;a.paused=!1;
a.playState=1;a.isHTML5?(a._setup_html5().play(),l()):(b.isMovieStar&&!b.serverURL&&a.setPosition(a.position),k._pause(a.id,b.multiShot));!r&&b.onplay?(b.onplay.apply(a),r=!0):b.onresume&&b.onresume.apply(a);return a};this.togglePause=function(){if(0===a.playState)return a.play({position:9===m&&!a.isHTML5?a.position:a.position/1E3}),a;a.paused?a.resume():a.pause();return a};this.setPan=function(b,c){b===h&&(b=0);c===h&&(c=!1);a.isHTML5||k._setPan(a.id,b);a._iO.pan=b;c||(a.pan=b,a.options.pan=b);return a};
this.setVolume=function(b,e){b===h&&(b=100);e===h&&(e=!1);a.isHTML5?a._a&&(a._a.volume=Math.max(0,Math.min(1,b/100))):k._setVolume(a.id,c.muted&&!a.muted||a.muted?0:b);a._iO.volume=b;e||(a.volume=b,a.options.volume=b);return a};this.mute=function(){a.muted=!0;a.isHTML5?a._a&&(a._a.muted=!0):k._setVolume(a.id,0);return a};this.unmute=function(){a.muted=!1;var b=a._iO.volume!==h;a.isHTML5?a._a&&(a._a.muted=!1):k._setVolume(a.id,b?a._iO.volume:a.options.volume);return a};this.toggleMute=function(){return a.muted?
a.unmute():a.mute()};this.onposition=this.onPosition=function(b,c,e){p.push({position:parseInt(b,10),method:c,scope:e!==h?e:a,fired:!1});return a};this.clearOnPosition=function(a,b){var c;a=parseInt(a,10);if(isNaN(a))return!1;for(c=0;c<p.length;c++)if(a===p[c].position&&(!b||b===p[c].method))p[c].fired&&q--,p.splice(c,1)};this._processOnPosition=function(){var b,c;b=p.length;if(!b||!a.playState||q>=b)return!1;for(b-=1;0<=b;b--)c=p[b],!c.fired&&a.position>=c.position&&(c.fired=!0,q++,c.method.apply(c.scope,
[c.position]));return!0};this._resetOnPosition=function(a){var b,c;b=p.length;if(!b)return!1;for(b-=1;0<=b;b--)c=p[b],c.fired&&a<=c.position&&(c.fired=!1,q--);return!0};x=function(){var b=a._iO,c=b.from,e=b.to,d,f;f=function(){a.clearOnPosition(e,f);a.stop()};d=function(){if(null!==e&&!isNaN(e))a.onPosition(e,f)};null!==c&&!isNaN(c)&&(b.position=c,b.multiShot=!1,d());return b};n=function(){var b,c=a._iO.onposition;if(c)for(b in c)if(c.hasOwnProperty(b))a.onPosition(parseInt(b,10),c[b])};v=function(){var b,
c=a._iO.onposition;if(c)for(b in c)c.hasOwnProperty(b)&&a.clearOnPosition(parseInt(b,10))};l=function(){a.isHTML5&&Ra(a)};A=function(){a.isHTML5&&Sa(a)};f=function(b){b||(p=[],q=0);r=!1;a._hasTimer=null;a._a=null;a._html5_canplay=!1;a.bytesLoaded=null;a.bytesTotal=null;a.duration=a._iO&&a._iO.duration?a._iO.duration:null;a.durationEstimate=null;a.buffered=[];a.eqData=[];a.eqData.left=[];a.eqData.right=[];a.failures=0;a.isBuffering=!1;a.instanceOptions={};a.instanceCount=0;a.loaded=!1;a.metadata={};
a.readyState=0;a.muted=!1;a.paused=!1;a.peakData={left:0,right:0};a.waveformData={left:[],right:[]};a.playState=0;a.position=null;a.id3={}};f();this._onTimer=function(b){var c,f=!1,g={};if(a._hasTimer||b){if(a._a&&(b||(0<a.playState||1===a.readyState)&&!a.paused))c=a._get_html5_duration(),c!==e&&(e=c,a.duration=c,f=!0),a.durationEstimate=a.duration,c=1E3*a._a.currentTime||0,c!==d&&(d=c,f=!0),(f||b)&&a._whileplaying(c,g,g,g,g);return f}};this._get_html5_duration=function(){var b=a._iO;return(b=a._a&&
a._a.duration?1E3*a._a.duration:b&&b.duration?b.duration:null)&&!isNaN(b)&&Infinity!==b?b:null};this._apply_loop=function(a,b){a.loop=1<b?"loop":""};this._setup_html5=function(b){b=w(a._iO,b);var c=z?Ka:a._a,e=decodeURI(b.url),d;z?e===decodeURI(Ca)&&(d=!0):e===decodeURI(u)&&(d=!0);if(c){if(c._s)if(z)c._s&&(c._s.playState&&!d)&&c._s.stop();else if(!z&&e===decodeURI(u))return a._apply_loop(c,b.loops),c;d||(f(!1),c.src=b.url,Ca=u=a.url=b.url,c._called_load=!1)}else a._a=b.autoLoad||b.autoPlay?new Audio(b.url):
Ea&&10>opera.version()?new Audio(null):new Audio,c=a._a,c._called_load=!1,z&&(Ka=c);a.isHTML5=!0;a._a=c;c._s=a;g();a._apply_loop(c,b.loops);b.autoLoad||b.autoPlay?a.load():(c.autobuffer=!1,c.preload="auto");return c};g=function(){if(a._a._added_events)return!1;var b;a._a._added_events=!0;for(b in B)B.hasOwnProperty(b)&&a._a&&a._a.addEventListener(b,B[b],!1);return!0};K=function(){var b;a._a._added_events=!1;for(b in B)B.hasOwnProperty(b)&&a._a&&a._a.removeEventListener(b,B[b],!1)};this._onload=function(b){var c=
!!b||!a.isHTML5&&8===m&&a.duration;a.loaded=c;a.readyState=c?3:2;a._onbufferchange(0);a._iO.onload&&ia(a,function(){a._iO.onload.apply(a,[c])});return!0};this._onbufferchange=function(b){if(0===a.playState||b&&a.isBuffering||!b&&!a.isBuffering)return!1;a.isBuffering=1===b;a._iO.onbufferchange&&a._iO.onbufferchange.apply(a);return!0};this._onsuspend=function(){a._iO.onsuspend&&a._iO.onsuspend.apply(a);return!0};this._onfailure=function(b,c,e){a.failures++;if(a._iO.onfailure&&1===a.failures)a._iO.onfailure(a,
b,c,e)};this._onfinish=function(){var b=a._iO.onfinish;a._onbufferchange(0);a._resetOnPosition(0);a.instanceCount&&(a.instanceCount--,a.instanceCount||(v(),a.playState=0,a.paused=!1,a.instanceCount=0,a.instanceOptions={},a._iO={},A(),a.isHTML5&&(a.position=0)),(!a.instanceCount||a._iO.multiShotEvents)&&b&&ia(a,function(){b.apply(a)}))};this._whileloading=function(b,c,e,d){var f=a._iO;a.bytesLoaded=b;a.bytesTotal=c;a.duration=Math.floor(e);a.bufferLength=d;a.durationEstimate=!a.isHTML5&&!f.isMovieStar?
f.duration?a.duration>f.duration?a.duration:f.duration:parseInt(a.bytesTotal/a.bytesLoaded*a.duration,10):a.duration;a.isHTML5||(a.buffered=[{start:0,end:a.duration}]);(3!==a.readyState||a.isHTML5)&&f.whileloading&&f.whileloading.apply(a)};this._whileplaying=function(b,c,e,d,f){var g=a._iO;if(isNaN(b)||null===b)return!1;a.position=Math.max(0,b);a._processOnPosition();!a.isHTML5&&8<m&&(g.usePeakData&&(c!==h&&c)&&(a.peakData={left:c.leftPeak,right:c.rightPeak}),g.useWaveformData&&(e!==h&&e)&&(a.waveformData=
{left:e.split(","),right:d.split(",")}),g.useEQData&&(f!==h&&f&&f.leftEQ)&&(b=f.leftEQ.split(","),a.eqData=b,a.eqData.left=b,f.rightEQ!==h&&f.rightEQ&&(a.eqData.right=f.rightEQ.split(","))));1===a.playState&&(!a.isHTML5&&(8===m&&!a.position&&a.isBuffering)&&a._onbufferchange(0),g.whileplaying&&g.whileplaying.apply(a));return!0};this._oncaptiondata=function(b){a.captiondata=b;a._iO.oncaptiondata&&a._iO.oncaptiondata.apply(a,[b])};this._onmetadata=function(b,c){var e={},d,f;d=0;for(f=b.length;d<f;d++)e[b[d]]=
c[d];a.metadata=e;a._iO.onmetadata&&a._iO.onmetadata.apply(a)};this._onid3=function(b,c){var e=[],d,f;d=0;for(f=b.length;d<f;d++)e[b[d]]=c[d];a.id3=w(a.id3,e);a._iO.onid3&&a._iO.onid3.apply(a)};this._onconnect=function(b){b=1===b;if(a.connected=b)a.failures=0,s(a.id)&&(a.getAutoPlay()?a.play(h,a.getAutoPlay()):a._iO.autoLoad&&a.load()),a._iO.onconnect&&a._iO.onconnect.apply(a,[b])};this._ondataerror=function(b){0<a.playState&&a._iO.ondataerror&&a._iO.ondataerror.apply(a)}};va=function(){return n.body||
n._docElement||n.getElementsByTagName("div")[0]};X=function(b){return n.getElementById(b)};w=function(b,e){var d=b||{},a,f;a=e===h?c.defaultOptions:e;for(f in a)a.hasOwnProperty(f)&&d[f]===h&&(d[f]="object"!==typeof a[f]||null===a[f]?a[f]:w(d[f],a[f]));return d};ia=function(b,c){!b.isHTML5&&8===m?l.setTimeout(c,0):c()};Y={onready:1,ontimeout:1,defaultOptions:1,flash9Options:1,movieStarOptions:1};pa=function(b,e){var d,a=!0,f=e!==h,g=c.setupOptions;for(d in b)if(b.hasOwnProperty(d))if("object"!==typeof b[d]||
null===b[d]||b[d]instanceof Array||b[d]instanceof RegExp)f&&Y[e]!==h?c[e][d]=b[d]:g[d]!==h?(c.setupOptions[d]=b[d],c[d]=b[d]):Y[d]===h?a=!1:c[d]instanceof Function?c[d].apply(c,b[d]instanceof Array?b[d]:[b[d]]):c[d]=b[d];else if(Y[d]===h)a=!1;else return pa(b[d],d);return a};t=function(){function b(a){a=fb.call(a);var b=a.length;d?(a[1]="on"+a[1],3<b&&a.pop()):3===b&&a.push(!1);return a}function c(b,e){var h=b.shift(),k=[a[e]];if(d)h[k](b[0],b[1]);else h[k].apply(h,b)}var d=l.attachEvent,a={add:d?
"attachEvent":"addEventListener",remove:d?"detachEvent":"removeEventListener"};return{add:function(){c(b(arguments),"add")},remove:function(){c(b(arguments),"remove")}}}();B={abort:r(function(){}),canplay:r(function(){var b=this._s,c;if(b._html5_canplay)return!0;b._html5_canplay=!0;b._onbufferchange(0);c=b._iO.position!==h&&!isNaN(b._iO.position)?b._iO.position/1E3:null;if(b.position&&this.currentTime!==c)try{this.currentTime=c}catch(d){}b._iO._oncanplay&&b._iO._oncanplay()}),canplaythrough:r(function(){var b=
this._s;b.loaded||(b._onbufferchange(0),b._whileloading(b.bytesLoaded,b.bytesTotal,b._get_html5_duration()),b._onload(!0))}),ended:r(function(){this._s._onfinish()}),error:r(function(){this._s._onload(!1)}),loadeddata:r(function(){var b=this._s;!b._loaded&&!ja&&(b.duration=b._get_html5_duration())}),loadedmetadata:r(function(){}),loadstart:r(function(){this._s._onbufferchange(1)}),play:r(function(){this._s._onbufferchange(0)}),playing:r(function(){this._s._onbufferchange(0)}),progress:r(function(b){var c=
this._s,d,a,f=0,f=b.target.buffered;d=b.loaded||0;var g=b.total||1;c.buffered=[];if(f&&f.length){d=0;for(a=f.length;d<a;d++)c.buffered.push({start:1E3*f.start(d),end:1E3*f.end(d)});f=1E3*(f.end(0)-f.start(0));d=Math.min(1,f/(1E3*b.target.duration))}isNaN(d)||(c._onbufferchange(0),c._whileloading(d,g,c._get_html5_duration()),d&&(g&&d===g)&&B.canplaythrough.call(this,b))}),ratechange:r(function(){}),suspend:r(function(b){var c=this._s;B.progress.call(this,b);c._onsuspend()}),stalled:r(function(){}),
timeupdate:r(function(){this._s._onTimer()}),waiting:r(function(){this._s._onbufferchange(1)})};ga=function(b){return!b||!b.type&&!b.url&&!b.serverURL?!1:b.serverURL||b.type&&W(b.type)?!1:b.type?T({type:b.type}):T({url:b.url})||c.html5Only||b.url.match(/data\:/i)};ha=function(b){var c;b&&(c=ja&&!U?null:hb?"about:blank":null,b.src=c,void 0!==b._called_unload&&(b._called_load=!1));z&&(Ca=null);return c};T=function(b){if(!c.useHTML5Audio||!c.hasHTML5)return!1;var e=b.url||null;b=b.type||null;var d=c.audioFormats,
a;if(b&&c.html5[b]!==h)return c.html5[b]&&!W(b);if(!y){y=[];for(a in d)d.hasOwnProperty(a)&&(y.push(a),d[a].related&&(y=y.concat(d[a].related)));y=RegExp("\\.("+y.join("|")+")(\\?.*)?$","i")}a=e?e.toLowerCase().match(y):null;!a||!a.length?b&&(e=b.indexOf(";"),a=(-1!==e?b.substr(0,e):b).substr(6)):a=a[1];a&&c.html5[a]!==h?e=c.html5[a]&&!W(a):(b="audio/"+a,e=c.html5.canPlayType({type:b}),e=(c.html5[a]=e)&&c.html5[b]&&!W(b));return e};Wa=function(){function b(a){var b,d,f=b=!1;if(!e||"function"!==typeof e.canPlayType)return b;
if(a instanceof Array){b=0;for(d=a.length;b<d;b++)if(c.html5[a[b]]||e.canPlayType(a[b]).match(c.html5Test))f=!0,c.html5[a[b]]=!0,c.flash[a[b]]=!!a[b].match(bb);b=f}else a=e&&"function"===typeof e.canPlayType?e.canPlayType(a):!1,b=!(!a||!a.match(c.html5Test));return b}if(!c.useHTML5Audio||!c.hasHTML5)return v=c.html5.usingFlash=!0,!1;var e=Audio!==h?Ea&&10>opera.version()?new Audio(null):new Audio:null,d,a,f={},g;g=c.audioFormats;for(d in g)if(g.hasOwnProperty(d)&&(a="audio/"+d,f[d]=b(g[d].type),f[a]=
f[d],d.match(bb)?(c.flash[d]=!0,c.flash[a]=!0):(c.flash[d]=!1,c.flash[a]=!1),g[d]&&g[d].related))for(a=g[d].related.length-1;0<=a;a--)f["audio/"+g[d].related[a]]=f[d],c.html5[g[d].related[a]]=f[d],c.flash[g[d].related[a]]=f[d];f.canPlayType=e?b:null;c.html5=w(c.html5,f);c.html5.usingFlash=Va();v=c.html5.usingFlash;return!0};sa={};Q=function(){};ba=function(b){8===m&&(1<b.loops&&b.stream)&&(b.stream=!1);return b};ca=function(b,c){if(b&&!b.usePolicyFile&&(b.onid3||b.usePeakData||b.useWaveformData||
b.useEQData))b.usePolicyFile=!0;return b};ma=function(){return!1};Pa=function(b){for(var c in b)b.hasOwnProperty(c)&&"function"===typeof b[c]&&(b[c]=ma)};xa=function(b){b===h&&(b=!1);(x||b)&&c.disable(b)};Qa=function(b){var e=null;if(b)if(b.match(/\.swf(\?.*)?$/i)){if(e=b.substr(b.toLowerCase().lastIndexOf(".swf?")+4))return b}else b.lastIndexOf("/")!==b.length-1&&(b+="/");b=(b&&-1!==b.lastIndexOf("/")?b.substr(0,b.lastIndexOf("/")+1):"./")+c.movieURL;c.noSWFCache&&(b+="?ts\x3d"+(new Date).getTime());
return b};ra=function(){m=parseInt(c.flashVersion,10);8!==m&&9!==m&&(c.flashVersion=m=8);var b=c.debugMode||c.debugFlash?"_debug.swf":".swf";c.useHTML5Audio&&(!c.html5Only&&c.audioFormats.mp4.required&&9>m)&&(c.flashVersion=m=9);c.version=c.versionNumber+(c.html5Only?" (HTML5-only mode)":9===m?" (AS3/Flash 9)":" (AS2/Flash 8)");8<m?(c.defaultOptions=w(c.defaultOptions,c.flash9Options),c.features.buffering=!0,c.defaultOptions=w(c.defaultOptions,c.movieStarOptions),c.filePatterns.flash9=RegExp("\\.(mp3|"+
eb.join("|")+")(\\?.*)?$","i"),c.features.movieStar=!0):c.features.movieStar=!1;c.filePattern=c.filePatterns[8!==m?"flash9":"flash8"];c.movieURL=(8===m?"soundmanager2.swf":"soundmanager2_flash9.swf").replace(".swf",b);c.features.peakData=c.features.waveformData=c.features.eqData=8<m};Oa=function(b,c){if(!k)return!1;k._setPolling(b,c)};wa=function(){};s=this.getSoundById;J=function(){var b=[];c.debugMode&&b.push("sm2_debug");c.debugFlash&&b.push("flash_debug");c.useHighPerformance&&b.push("high_performance");
return b.join(" ")};za=function(){Q("fbHandler");var b=c.getMoviePercent(),e={type:"FLASHBLOCK"};if(c.html5Only)return!1;c.ok()?c.oMC&&(c.oMC.className=[J(),"movieContainer","swf_loaded"+(c.didFlashBlock?" swf_unblocked":"")].join(" ")):(v&&(c.oMC.className=J()+" movieContainer "+(null===b?"swf_timedout":"swf_error")),c.didFlashBlock=!0,E({type:"ontimeout",ignoreInit:!0,error:e}),I(e))};qa=function(b,c,d){u[b]===h&&(u[b]=[]);u[b].push({method:c,scope:d||null,fired:!1})};E=function(b){b||(b={type:c.ok()?
"onready":"ontimeout"});if(!q&&b&&!b.ignoreInit||"ontimeout"===b.type&&(c.ok()||x&&!b.ignoreInit))return!1;var e={success:b&&b.ignoreInit?c.ok():!x},d=b&&b.type?u[b.type]||[]:[],a=[],f,e=[e],g=v&&!c.ok();b.error&&(e[0].error=b.error);b=0;for(f=d.length;b<f;b++)!0!==d[b].fired&&a.push(d[b]);if(a.length){b=0;for(f=a.length;b<f;b++)a[b].scope?a[b].method.apply(a[b].scope,e):a[b].method.apply(this,e),g||(a[b].fired=!0)}return!0};F=function(){l.setTimeout(function(){c.useFlashBlock&&za();E();"function"===
typeof c.onload&&c.onload.apply(l);c.waitForWindowLoad&&t.add(l,"load",F)},1)};Da=function(){if(D!==h)return D;var b=!1,c=navigator,d=c.plugins,a,f=l.ActiveXObject;if(d&&d.length)(c=c.mimeTypes)&&(c["application/x-shockwave-flash"]&&c["application/x-shockwave-flash"].enabledPlugin&&c["application/x-shockwave-flash"].enabledPlugin.description)&&(b=!0);else if(f!==h&&!p.match(/MSAppHost/i)){try{a=new f("ShockwaveFlash.ShockwaveFlash")}catch(g){a=null}b=!!a}return D=b};Va=function(){var b,e,d=c.audioFormats;
if(U&&p.match(/os (1|2|3_0|3_1)/i))c.hasHTML5=!1,c.html5Only=!0,c.oMC&&(c.oMC.style.display="none");else if(c.useHTML5Audio&&(!c.html5||!c.html5.canPlayType))c.hasHTML5=!1;if(c.useHTML5Audio&&c.hasHTML5)for(e in fa=!0,d)if(d.hasOwnProperty(e)&&d[e].required)if(c.html5.canPlayType(d[e].type)){if(c.preferFlash&&(c.flash[e]||c.flash[d[e].type]))b=!0}else fa=!1,b=!0;c.ignoreFlash&&(b=!1,fa=!0);c.html5Only=c.hasHTML5&&c.useHTML5Audio&&!b;return!c.html5Only};ea=function(b){var e,d,a=0;if(b instanceof Array){e=
0;for(d=b.length;e<d;e++)if(b[e]instanceof Object){if(c.canPlayMIME(b[e].type)){a=e;break}}else if(c.canPlayURL(b[e])){a=e;break}b[a].url&&(b[a]=b[a].url);b=b[a]}return b};Ra=function(b){b._hasTimer||(b._hasTimer=!0,!Fa&&c.html5PollingInterval&&(null===S&&0===da&&(S=setInterval(Ta,c.html5PollingInterval)),da++))};Sa=function(b){b._hasTimer&&(b._hasTimer=!1,!Fa&&c.html5PollingInterval&&da--)};Ta=function(){var b;if(null!==S&&!da)return clearInterval(S),S=null,!1;for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].isHTML5&&
c.sounds[c.soundIDs[b]]._hasTimer&&c.sounds[c.soundIDs[b]]._onTimer()};I=function(b){b=b!==h?b:{};"function"===typeof c.onerror&&c.onerror.apply(l,[{type:b.type!==h?b.type:null}]);b.fatal!==h&&b.fatal&&c.disable()};Xa=function(){if(!$a||!Da())return!1;var b=c.audioFormats,e,d;for(d in b)if(b.hasOwnProperty(d)&&("mp3"===d||"mp4"===d))if(c.html5[d]=!1,b[d]&&b[d].related)for(e=b[d].related.length-1;0<=e;e--)c.html5[b[d].related[e]]=!1};this._setSandboxType=function(b){};this._externalInterfaceOK=function(b){if(c.swfLoaded)return!1;
c.swfLoaded=!0;ka=!1;$a&&Xa();setTimeout(na,C?100:1)};aa=function(b,e){function d(a,b){return'\x3cparam name\x3d"'+a+'" value\x3d"'+b+'" /\x3e'}if(L&&M)return!1;if(c.html5Only)return ra(),c.oMC=X(c.movieID),na(),M=L=!0,!1;var a=e||c.url,f=c.altURL||a,g=va(),k=J(),l=null,l=n.getElementsByTagName("html")[0],m,r,q,l=l&&l.dir&&l.dir.match(/rtl/i);b=b===h?c.id:b;ra();c.url=Qa(Ha?a:f);e=c.url;c.wmode=!c.wmode&&c.useHighPerformance?"transparent":c.wmode;if(null!==c.wmode&&(p.match(/msie 8/i)||!C&&!c.useHighPerformance)&&
navigator.platform.match(/win32|win64/i))Ua.push(sa.spcWmode),c.wmode=null;g={name:b,id:b,src:e,quality:"high",allowScriptAccess:c.allowScriptAccess,bgcolor:c.bgColor,pluginspage:cb+"www.macromedia.com/go/getflashplayer",title:"JS/Flash audio component (SoundManager 2)",type:"application/x-shockwave-flash",wmode:c.wmode,hasPriority:"true"};c.debugFlash&&(g.FlashVars="debug\x3d1");c.wmode||delete g.wmode;if(C)a=n.createElement("div"),r=['\x3cobject id\x3d"'+b+'" data\x3d"'+e+'" type\x3d"'+g.type+'" title\x3d"'+
g.title+'" classid\x3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase\x3d"'+cb+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version\x3d6,0,40,0"\x3e',d("movie",e),d("AllowScriptAccess",c.allowScriptAccess),d("quality",g.quality),c.wmode?d("wmode",c.wmode):"",d("bgcolor",c.bgColor),d("hasPriority","true"),c.debugFlash?d("FlashVars",g.FlashVars):"","\x3c/object\x3e"].join("");else for(m in a=n.createElement("embed"),g)g.hasOwnProperty(m)&&a.setAttribute(m,g[m]);wa();k=J();if(g=
va())if(c.oMC=X(c.movieID)||n.createElement("div"),c.oMC.id)q=c.oMC.className,c.oMC.className=(q?q+" ":"movieContainer")+(k?" "+k:""),c.oMC.appendChild(a),C&&(m=c.oMC.appendChild(n.createElement("div")),m.className="sm2-object-box",m.innerHTML=r),M=!0;else{c.oMC.id=c.movieID;c.oMC.className="movieContainer "+k;m=k=null;c.useFlashBlock||(c.useHighPerformance?k={position:"fixed",width:"8px",height:"8px",bottom:"0px",left:"0px",overflow:"hidden"}:(k={position:"absolute",width:"6px",height:"6px",top:"-9999px",
left:"-9999px"},l&&(k.left=Math.abs(parseInt(k.left,10))+"px")));gb&&(c.oMC.style.zIndex=1E4);if(!c.debugFlash)for(q in k)k.hasOwnProperty(q)&&(c.oMC.style[q]=k[q]);try{C||c.oMC.appendChild(a),g.appendChild(c.oMC),C&&(m=c.oMC.appendChild(n.createElement("div")),m.className="sm2-object-box",m.innerHTML=r),M=!0}catch(s){throw Error(Q("domError")+" \n"+s.toString());}}return L=!0};$=function(){if(c.html5Only)return aa(),!1;if(k||!c.url)return!1;k=c.getMovie(c.id);k||(P?(C?c.oMC.innerHTML=ya:c.oMC.appendChild(P),
P=null,L=!0):aa(c.id,c.url),k=c.getMovie(c.id));"function"===typeof c.oninitmovie&&setTimeout(c.oninitmovie,1);return!0};G=function(){setTimeout(Na,1E3)};Na=function(){var b,e=!1;if(!c.url||R)return!1;R=!0;t.remove(l,"load",G);if(ka&&!Ga)return!1;q||(b=c.getMoviePercent(),0<b&&100>b&&(e=!0));setTimeout(function(){b=c.getMoviePercent();if(e)return R=!1,l.setTimeout(G,1),!1;!q&&ab&&(null===b?c.useFlashBlock||0===c.flashLoadTimeout?c.useFlashBlock&&za():!c.useFlashBlock&&fa?l.setTimeout(function(){c.setup({preferFlash:!1}).reboot();
c.didFlashBlock=!0;c.beginDelayedInit()},1):E({type:"ontimeout",ignoreInit:!0}):0!==c.flashLoadTimeout&&xa(!0))},c.flashLoadTimeout)};Z=function(){if(Ga||!ka)return t.remove(l,"focus",Z),!0;Ga=ab=!0;R=!1;G();t.remove(l,"focus",Z);return!0};N=function(b){if(q)return!1;if(c.html5Only)return q=!0,F(),!0;var e=!0,d;if(!c.useFlashBlock||!c.flashLoadTimeout||c.getMoviePercent())q=!0,x&&(d={type:!D&&v?"NO_FLASH":"INIT_TIMEOUT"});if(x||b)c.useFlashBlock&&c.oMC&&(c.oMC.className=J()+" "+(null===c.getMoviePercent()?
"swf_timedout":"swf_error")),E({type:"ontimeout",error:d,ignoreInit:!0}),I(d),e=!1;x||(c.waitForWindowLoad&&!oa?t.add(l,"load",F):F());return e};Ma=function(){var b,e=c.setupOptions;for(b in e)e.hasOwnProperty(b)&&(c[b]===h?c[b]=e[b]:c[b]!==e[b]&&(c.setupOptions[b]=c[b]))};na=function(){if(q)return!1;if(c.html5Only)return q||(t.remove(l,"load",c.beginDelayedInit),c.enabled=!0,N()),!0;$();try{k._externalInterfaceTest(!1),Oa(!0,c.flashPollingInterval||(c.useHighPerformance?10:50)),c.debugMode||k._disableDebug(),
c.enabled=!0,c.html5Only||t.add(l,"unload",ma)}catch(b){return I({type:"JS_TO_FLASH_EXCEPTION",fatal:!0}),xa(!0),N(),!1}N();t.remove(l,"load",c.beginDelayedInit);return!0};H=function(){if(O)return!1;O=!0;Ma();wa();!D&&c.hasHTML5&&c.setup({useHTML5Audio:!0,preferFlash:!1});Wa();!D&&v&&(Ua.push(sa.needFlash),c.setup({flashLoadTimeout:1}));n.removeEventListener&&n.removeEventListener("DOMContentLoaded",H,!1);$();return!0};Ba=function(){"complete"===n.readyState&&(H(),n.detachEvent("onreadystatechange",
Ba));return!0};ua=function(){oa=!0;t.remove(l,"load",ua)};ta=function(){if(Fa&&(c.setupOptions.useHTML5Audio=!0,c.setupOptions.preferFlash=!1,U||Za&&!p.match(/android\s2\.3/i)))U&&(c.ignoreFlash=!0),z=!0};ta();Da();t.add(l,"focus",Z);t.add(l,"load",G);t.add(l,"load",ua);n.addEventListener?n.addEventListener("DOMContentLoaded",H,!1):n.attachEvent?n.attachEvent("onreadystatechange",Ba):I({type:"NO_DOM2_EVENTS",fatal:!0})}var la=null;if(void 0===l.SM2_DEFER||!SM2_DEFER)la=new V;l.SoundManager=V;l.soundManager=
la})(window);

Binary file not shown.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<playlists>
<playlist id="pl1">
<track href="MP3/SOUNDCLOUD URL" title="YOUR TITLE" target="LINK TO SHARE ON FACEBOOK AND TWITTER" rel="IMAGE OF THE COVER">
<meta>
<![CDATA[ <a href="http://google.de" target="_blank">This is an optional text with a link</a> ]]>
</meta>
</track>
<track href="http://soundcloud.com/radykal/favorites" />
</playlist>
</playlists>

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,95 @@
/** Author: Mark J Panaghiston * Version: 2.4.0 * Date: 5th June 2013 */
(function(b,f){"function"===typeof define&&define.amd?define(["jquery"],f):b.jQuery?f(b.jQuery):f(b.Zepto)})(this,function(b,f){b.fn.jPlayer=function(a){var c="string"===typeof a,d=Array.prototype.slice.call(arguments,1),e=this;a=!c&&d.length?b.extend.apply(null,[!0,a].concat(d)):a;if(c&&"_"===a.charAt(0))return e;c?this.each(function(){var c=b(this).data("jPlayer"),h=c&&b.isFunction(c[a])?c[a].apply(c,d):c;if(h!==c&&h!==f)return e=h,!1}):this.each(function(){var c=b(this).data("jPlayer");c?c.option(a||
{}):b(this).data("jPlayer",new b.jPlayer(a,this))});return e};b.jPlayer=function(a,c){if(arguments.length){this.element=b(c);this.options=b.extend(!0,{},this.options,a);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()});this._init()}};"function"!==typeof b.fn.stop&&(b.fn.stop=function(){});b.jPlayer.emulateMethods="load play pause";b.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate";b.jPlayer.emulateOptions="muted volume";b.jPlayer.reservedEvent=
"ready flashreset resize repeat error warning";b.jPlayer.event={};b.each("ready flashreset resize repeat click error warning loadstart progress suspend abort emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange".split(" "),function(){b.jPlayer.event[this]="jPlayer_"+this});b.jPlayer.htmlEvent="loadstart abort emptied stalled loadedmetadata loadeddata canplay canplaythrough ratechange".split(" ");
b.jPlayer.pause=function(){b.each(b.jPlayer.prototype.instances,function(a,c){c.data("jPlayer").status.srcSet&&c.jPlayer("pause")})};b.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0,sepHour:":",sepMin:":",sepSec:""};var l=function(){this.init()};l.prototype={init:function(){this.options={timeFormat:b.jPlayer.timeFormat}},time:function(a){var c=new Date(1E3*(a&&"number"===typeof a?a:0)),b=c.getUTCHours();a=this.options.timeFormat.showHour?c.getUTCMinutes():c.getUTCMinutes()+
60*b;c=this.options.timeFormat.showMin?c.getUTCSeconds():c.getUTCSeconds()+60*a;b=this.options.timeFormat.padHour&&10>b?"0"+b:b;a=this.options.timeFormat.padMin&&10>a?"0"+a:a;c=this.options.timeFormat.padSec&&10>c?"0"+c:c;b=""+(this.options.timeFormat.showHour?b+this.options.timeFormat.sepHour:"");b+=this.options.timeFormat.showMin?a+this.options.timeFormat.sepMin:"";return b+=this.options.timeFormat.showSec?c+this.options.timeFormat.sepSec:""}};var m=new l;b.jPlayer.convertTime=function(a){return m.time(a)};
b.jPlayer.uaBrowser=function(a){a=a.toLowerCase();var b=/(opera)(?:.*version)?[ \/]([\w.]+)/,d=/(msie) ([\w.]+)/,e=/(mozilla)(?:.*? rv:([\w.]+))?/;a=/(webkit)[ \/]([\w.]+)/.exec(a)||b.exec(a)||d.exec(a)||0>a.indexOf("compatible")&&e.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}};b.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),d=/(android)/,e=/(mobile)/;a=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/.exec(b)||[];b=/(ipad|playbook)/.exec(b)||!e.exec(b)&&d.exec(b)||
[];a[1]&&(a[1]=a[1].replace(/\s/g,"_"));return{platform:a[1]||"",tablet:b[1]||""}};b.jPlayer.browser={};b.jPlayer.platform={};var j=b.jPlayer.uaBrowser(navigator.userAgent);j.browser&&(b.jPlayer.browser[j.browser]=!0,b.jPlayer.browser.version=j.version);j=b.jPlayer.uaPlatform(navigator.userAgent);j.platform&&(b.jPlayer.platform[j.platform]=!0,b.jPlayer.platform.mobile=!j.tablet,b.jPlayer.platform.tablet=!!j.tablet);b.jPlayer.getDocMode=function(){var a;b.jPlayer.browser.msie&&(document.documentMode?
a=document.documentMode:(a=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(a=7)));return a};b.jPlayer.browser.documentMode=b.jPlayer.getDocMode();b.jPlayer.nativeFeatures={init:function(){var a=document,b=a.createElement("video"),d={w3c:"fullscreenEnabled fullscreenElement requestFullscreen exitFullscreen fullscreenchange fullscreenerror".split(" "),moz:"mozFullScreenEnabled mozFullScreenElement mozRequestFullScreen mozCancelFullScreen mozfullscreenchange mozfullscreenerror".split(" "),
webkit:" webkitCurrentFullScreenElement webkitRequestFullScreen webkitCancelFullScreen webkitfullscreenchange ".split(" "),webkitVideo:"webkitSupportsFullscreen webkitDisplayingFullscreen webkitEnterFullscreen webkitExitFullscreen ".split(" ")},e=["w3c","moz","webkit","webkitVideo"],g,h;this.fullscreen=b={support:{w3c:!!a[d.w3c[0]],moz:!!a[d.moz[0]],webkit:"function"===typeof a[d.webkit[3]],webkitVideo:"function"===typeof b[d.webkitVideo[2]]},used:{}};g=0;for(h=e.length;g<h;g++){var f=e[g];if(b.support[f]){b.spec=
f;b.used[f]=!0;break}}if(b.spec){var k=d[b.spec];b.api={fullscreenEnabled:!0,fullscreenElement:function(b){b=b?b:a;return b[k[1]]},requestFullscreen:function(a){return a[k[2]]()},exitFullscreen:function(b){b=b?b:a;return b[k[3]]()}};b.event={fullscreenchange:k[4],fullscreenerror:k[5]}}else b.api={fullscreenEnabled:!1,fullscreenElement:function(){return null},requestFullscreen:function(){},exitFullscreen:function(){}},b.event={}}};b.jPlayer.nativeFeatures.init();b.jPlayer.focus=null;b.jPlayer.keyIgnoreElementNames=
"INPUT TEXTAREA";var n=function(a){var c=b.jPlayer.focus,d;c&&(b.each(b.jPlayer.keyIgnoreElementNames.split(/\s+/g),function(b,c){if(a.target.nodeName.toUpperCase()===c.toUpperCase())return d=!0,!1}),d||b.each(c.options.keyBindings,function(d,g){if(g&&a.which===g.key&&b.isFunction(g.fn))return a.preventDefault(),g.fn(c),!1}))};b.jPlayer.keys=function(a){b(document.documentElement).unbind("keydown.jPlayer");a&&b(document.documentElement).bind("keydown.jPlayer",n)};b.jPlayer.keys(!0);b.jPlayer.prototype=
{count:0,version:{script:"2.4.0",needFlash:"2.4.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash",supplied:"mp3",preload:"metadata",volume:0.8,muted:!1,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max",
currentTime:".jp-current-time",duration:".jp-duration",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen",repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},smoothPlayBar:!1,fullScreen:!1,fullWindow:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1E3},loop:!1,repeat:function(a){a.jPlayer.options.loop?b(this).unbind(".jPlayerRepeat").bind(b.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){b(this).jPlayer("play")}):b(this).unbind(".jPlayerRepeat")},
nativeVideoControls:{},noFullWindow:{msie:/msie [0-6]\./,ipad:/ipad.*?os [0-4]\./,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3]\.(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/,playbook:/playbook/},timeFormat:{},
keyEnabled:!1,audioFullScreen:!1,keyBindings:{play:{key:32,fn:function(a){a.status.paused?a.play():a.pause()}},fullScreen:{key:13,fn:function(a){(a.status.video||a.options.audioFullScreen)&&a._setOption("fullScreen",!a.options.fullScreen)}},muted:{key:8,fn:function(a){a._muted(!a.options.muted)}},volumeUp:{key:38,fn:function(a){a.volume(a.options.volume+0.1)}},volumeDown:{key:40,fn:function(a){a.volume(a.options.volume-0.1)}}},verticalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,errorAlerts:!1,
warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}},optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,videoWidth:0,videoHeight:0,readyState:0,
networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,flash:!0},format:{mp3:{codec:'audio/mpeg; codecs="mp3"',flashCanPlay:!0,media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis"',flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"},
rtmpa:{codec:'audio/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1,media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"},rtmpv:{codec:'video/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"video"}},_init:function(){var a=this;this.element.empty();this.status=
b.extend({},this.status);this.internal=b.extend({},this.internal);this.options.timeFormat=b.extend({},b.jPlayer.timeFormat,this.options.timeFormat);this.internal.cmdsIgnored=b.jPlayer.platform.ipad||b.jPlayer.platform.iphone||b.jPlayer.platform.ipod;this.internal.domNode=this.element.get(0);this.options.keyEnabled&&!b.jPlayer.focus&&(b.jPlayer.focus=this);this.formats=[];this.solutions=[];this.require={};this.htmlElement={};this.html={};this.html.audio={};this.html.video={};this.flash={};this.css=
{};this.css.cs={};this.css.jq={};this.ancestorJq=[];this.options.volume=this._limitValue(this.options.volume,0,1);b.each(this.options.supplied.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.format[e]){var f=!1;b.each(a.formats,function(a,b){if(e===b)return f=!0,!1});f||a.formats.push(e)}});b.each(this.options.solution.toLowerCase().split(","),function(c,d){var e=d.replace(/^\s+|\s+$/g,"");if(a.solution[e]){var f=!1;b.each(a.solutions,function(a,b){if(e===b)return f=!0,
!1});f||a.solutions.push(e)}});this.internal.instance="jp_"+this.count;this.instances[this.internal.instance]=this.element;this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count);this.internal.self=b.extend({},{id:this.element.attr("id"),jq:this.element});this.internal.audio=b.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:f});this.internal.video=b.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:f});this.internal.flash=b.extend({},{id:this.options.idPrefix+
"_flash_"+this.count,jq:f,swf:this.options.swfPath+(".swf"!==this.options.swfPath.toLowerCase().slice(-4)?(this.options.swfPath&&"/"!==this.options.swfPath.slice(-1)?"/":"")+"Jplayer.swf":"")});this.internal.poster=b.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:f});b.each(b.jPlayer.event,function(b,c){a.options[b]!==f&&(a.element.bind(c+".jPlayer",a.options[b]),a.options[b]=f)});this.require.audio=!1;this.require.video=!1;b.each(this.formats,function(b,c){a.require[a.format[c].media]=
!0});this.options=this.require.video?b.extend(!0,{},this.optionsVideo,this.options):b.extend(!0,{},this.optionsAudio,this.options);this._setSize();this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow);this.status.noVolume=this._uaBlocklist(this.options.noVolume);b.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled&&this._fullscreenAddEventListeners();this._restrictNativeVideoControls();this.htmlElement.poster=
document.createElement("img");this.htmlElement.poster.id=this.internal.poster.id;this.htmlElement.poster.onload=function(){(!a.status.video||a.status.waitForPlay)&&a.internal.poster.jq.show()};this.element.append(this.htmlElement.poster);this.internal.poster.jq=b("#"+this.internal.poster.id);this.internal.poster.jq.css({width:this.status.width,height:this.status.height});this.internal.poster.jq.hide();this.internal.poster.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)});this.html.audio.available=
!1;this.require.audio&&(this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id,this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio));this.html.video.available=!1;this.require.video&&(this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video));
this.flash.available=this._checkForFlash(10.1);this.html.canPlay={};this.flash.canPlay={};b.each(this.formats,function(b,c){a.html.canPlay[c]=a.html[a.format[c].media].available&&""!==a.htmlElement[a.format[c].media].canPlayType(a.format[c].codec);a.flash.canPlay[c]=a.format[c].flashCanPlay&&a.flash.available});this.html.desired=!1;this.flash.desired=!1;b.each(this.solutions,function(c,d){if(0===c)a[d].desired=!0;else{var e=!1,f=!1;b.each(a.formats,function(b,c){a[a.solutions[0]].canPlay[c]&&("video"===
a.format[c].media?f=!0:e=!0)});a[d].desired=a.require.audio&&!e||a.require.video&&!f}});this.html.support={};this.flash.support={};b.each(this.formats,function(b,c){a.html.support[c]=a.html.canPlay[c]&&a.html.desired;a.flash.support[c]=a.flash.canPlay[c]&&a.flash.desired});this.html.used=!1;this.flash.used=!1;b.each(this.solutions,function(c,d){b.each(a.formats,function(b,c){if(a[d].support[c])return a[d].used=!0,!1})});this._resetActive();this._resetGate();this._cssSelectorAncestor(this.options.cssSelectorAncestor);
!this.html.used&&!this.flash.used?(this._error({type:b.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SOLUTION,hint:b.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()):this.css.jq.noSolution.length&&this.css.jq.noSolution.hide();if(this.flash.used){var c,d="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+
"&muted="+this.options.muted;if(b.jPlayer.browser.msie&&(9>Number(b.jPlayer.browser.version)||9>b.jPlayer.browser.documentMode)){d=['<param name="movie" value="'+this.internal.flash.swf+'" />','<param name="FlashVars" value="'+d+'" />','<param name="allowScriptAccess" value="always" />','<param name="bgcolor" value="'+this.options.backgroundColor+'" />','<param name="wmode" value="'+this.options.wmode+'" />'];c=document.createElement('<object id="'+this.internal.flash.id+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="0" height="0" tabindex="-1"></object>');
for(var e=0;e<d.length;e++)c.appendChild(document.createElement(d[e]))}else e=function(a,b,c){var d=document.createElement("param");d.setAttribute("name",b);d.setAttribute("value",c);a.appendChild(d)},c=document.createElement("object"),c.setAttribute("id",this.internal.flash.id),c.setAttribute("name",this.internal.flash.id),c.setAttribute("data",this.internal.flash.swf),c.setAttribute("type","application/x-shockwave-flash"),c.setAttribute("width","1"),c.setAttribute("height","1"),c.setAttribute("tabindex",
"-1"),e(c,"flashvars",d),e(c,"allowscriptaccess","always"),e(c,"bgcolor",this.options.backgroundColor),e(c,"wmode",this.options.wmode);this.element.append(c);this.internal.flash.jq=b(c)}this.html.used&&(this.html.audio.available&&(this._addHtmlEventListeners(this.htmlElement.audio,this.html.audio),this.element.append(this.htmlElement.audio),this.internal.audio.jq=b("#"+this.internal.audio.id)),this.html.video.available&&(this._addHtmlEventListeners(this.htmlElement.video,this.html.video),this.element.append(this.htmlElement.video),
this.internal.video.jq=b("#"+this.internal.video.id),this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):this.internal.video.jq.css({width:"0px",height:"0px"}),this.internal.video.jq.bind("click.jPlayer",function(){a._trigger(b.jPlayer.event.click)})));this.options.emulateHtml&&this._emulateHtmlBridge();this.html.used&&!this.flash.used&&setTimeout(function(){a.internal.ready=!0;a.version.flash="n/a";a._trigger(b.jPlayer.event.repeat);a._trigger(b.jPlayer.event.ready)},
100);this._updateNativeVideoControls();this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide();b.jPlayer.prototype.count++},destroy:function(){this.clearMedia();this._removeUiClass();this.css.jq.currentTime.length&&this.css.jq.currentTime.text("");this.css.jq.duration.length&&this.css.jq.duration.text("");b.each(this.css.jq,function(a,b){b.length&&b.unbind(".jPlayer")});this.internal.poster.jq.unbind(".jPlayer");this.internal.video.jq&&this.internal.video.jq.unbind(".jPlayer");this._fullscreenRemoveEventListeners();
this===b.jPlayer.focus&&(b.jPlayer.focus=null);this.options.emulateHtml&&this._destroyHtmlBridge();this.element.removeData("jPlayer");this.element.unbind(".jPlayer");this.element.empty();delete this.instances[this.internal.instance]},enable:function(){},disable:function(){},_testCanPlayType:function(a){try{return a.canPlayType(this.format.mp3.codec),!0}catch(b){return!1}},_uaBlocklist:function(a){var c=navigator.userAgent.toLowerCase(),d=!1;b.each(a,function(a,b){if(b&&b.test(c))return d=!0,!1});
return d},_restrictNativeVideoControls:function(){this.require.audio&&this.status.nativeVideoControls&&(this.status.nativeVideoControls=!1,this.status.noFullWindow=!0)},_updateNativeVideoControls:function(){this.html.video.available&&this.html.used&&(this.htmlElement.video.controls=this.status.nativeVideoControls,this._updateAutohide(),this.status.nativeVideoControls&&this.require.video?(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})):
this.status.waitForPlay&&this.status.video&&(this.internal.poster.jq.show(),this.internal.video.jq.css({width:"0px",height:"0px"})))},_addHtmlEventListeners:function(a,c){var d=this;a.preload=this.options.preload;a.muted=this.options.muted;a.volume=this.options.volume;a.addEventListener("progress",function(){c.gate&&(d.internal.cmdsIgnored&&0<this.readyState&&(d.internal.cmdsIgnored=!1),d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.progress))},!1);a.addEventListener("timeupdate",
function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.timeupdate))},!1);a.addEventListener("durationchange",function(){c.gate&&(d._getHtmlStatus(a),d._updateInterface(),d._trigger(b.jPlayer.event.durationchange))},!1);a.addEventListener("play",function(){c.gate&&(d._updateButtons(!0),d._html_checkWaitForPlay(),d._trigger(b.jPlayer.event.play))},!1);a.addEventListener("playing",function(){c.gate&&(d._updateButtons(!0),d._seeked(),d._trigger(b.jPlayer.event.playing))},
!1);a.addEventListener("pause",function(){c.gate&&(d._updateButtons(!1),d._trigger(b.jPlayer.event.pause))},!1);a.addEventListener("waiting",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.waiting))},!1);a.addEventListener("seeking",function(){c.gate&&(d._seeking(),d._trigger(b.jPlayer.event.seeking))},!1);a.addEventListener("seeked",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.seeked))},!1);a.addEventListener("volumechange",function(){c.gate&&(d.options.volume=a.volume,
d.options.muted=a.muted,d._updateMute(),d._updateVolume(),d._trigger(b.jPlayer.event.volumechange))},!1);a.addEventListener("suspend",function(){c.gate&&(d._seeked(),d._trigger(b.jPlayer.event.suspend))},!1);a.addEventListener("ended",function(){c.gate&&(b.jPlayer.browser.webkit||(d.htmlElement.media.currentTime=0),d.htmlElement.media.pause(),d._updateButtons(!1),d._getHtmlStatus(a,!0),d._updateInterface(),d._trigger(b.jPlayer.event.ended))},!1);a.addEventListener("error",function(){c.gate&&(d._updateButtons(!1),
d._seeked(),d.status.srcSet&&(clearTimeout(d.internal.htmlDlyCmdId),d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:b.jPlayer.error.URL,context:d.status.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL})))},!1);b.each(b.jPlayer.htmlEvent,
function(e,g){a.addEventListener(this,function(){c.gate&&d._trigger(b.jPlayer.event[g])},!1)})},_getHtmlStatus:function(a,b){var d=0,e=0,g=0,f=0;isFinite(a.duration)&&(this.status.duration=a.duration);d=a.currentTime;e=0<this.status.duration?100*d/this.status.duration:0;"object"===typeof a.seekable&&0<a.seekable.length?(g=0<this.status.duration?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=0<this.status.duration?100*a.currentTime/a.seekable.end(a.seekable.length-1):0):(g=100,
f=e);b&&(e=f=d=0);this.status.seekPercent=g;this.status.currentPercentRelative=f;this.status.currentPercentAbsolute=e;this.status.currentTime=d;this.status.videoWidth=a.videoWidth;this.status.videoHeight=a.videoHeight;this.status.readyState=a.readyState;this.status.networkState=a.networkState;this.status.playbackRate=a.playbackRate;this.status.ended=a.ended},_resetStatus:function(){this.status=b.extend({},this.status,b.jPlayer.prototype.status)},_trigger:function(a,c,d){a=b.Event(a);a.jPlayer={};
a.jPlayer.version=b.extend({},this.version);a.jPlayer.options=b.extend(!0,{},this.options);a.jPlayer.status=b.extend(!0,{},this.status);a.jPlayer.html=b.extend(!0,{},this.html);a.jPlayer.flash=b.extend(!0,{},this.flash);c&&(a.jPlayer.error=b.extend({},c));d&&(a.jPlayer.warning=b.extend({},d));this.element.trigger(a)},jPlayerFlashEvent:function(a,c){if(a===b.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media);
0<d&&(e?this.pause(d):this.play(d))}this._trigger(b.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:b.jPlayer.error.VERSION,context:this.version.flash,message:b.jPlayer.errorMsg.VERSION+this.version.flash,hint:b.jPlayer.errorHint.VERSION}),this._trigger(b.jPlayer.event.repeat),this._trigger(a);if(this.flash.gate)switch(a){case b.jPlayer.event.progress:this._getFlashStatus(c);
this._updateInterface();this._trigger(a);break;case b.jPlayer.event.timeupdate:this._getFlashStatus(c);this._updateInterface();this._trigger(a);break;case b.jPlayer.event.play:this._seeked();this._updateButtons(!0);this._trigger(a);break;case b.jPlayer.event.pause:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.ended:this._updateButtons(!1);this._trigger(a);break;case b.jPlayer.event.click:this._trigger(a);break;case b.jPlayer.event.error:this.status.waitForLoad=!0;this.status.waitForPlay=
!0;this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"});this._validString(this.status.media.poster)&&this.internal.poster.jq.show();this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show();this.status.video?this._flash_setVideo(this.status.media):this._flash_setAudio(this.status.media);this._updateButtons(!1);this._error({type:b.jPlayer.error.URL,context:c.src,message:b.jPlayer.errorMsg.URL,hint:b.jPlayer.errorHint.URL});break;case b.jPlayer.event.seeking:this._seeking();
this._trigger(a);break;case b.jPlayer.event.seeked:this._seeked();this._trigger(a);break;case b.jPlayer.event.ready:break;default:this._trigger(a)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent;this.status.currentPercentRelative=a.currentPercentRelative;this.status.currentPercentAbsolute=a.currentPercentAbsolute;this.status.currentTime=a.currentTime;this.status.duration=a.duration;this.status.videoWidth=a.videoWidth;this.status.videoHeight=a.videoHeight;this.status.readyState=
4;this.status.networkState=0;this.status.playbackRate=1;this.status.ended=!1},_updateButtons:function(a){a===f?a=!this.status.paused:this.status.paused=!a;this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.css('display', 'inline-block')):(this.css.jq.play.css('display', 'inline-block'),this.css.jq.pause.hide()));this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&&(this.status.noFullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullWindow?(this.css.jq.fullScreen.hide(),
this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide()));this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+"%");this.css.jq.playBar.length&&(this.options.smoothPlayBar?this.css.jq.playBar.stop().animate({width:this.status.currentPercentAbsolute+
"%"},250,"linear"):this.css.jq.playBar.width(this.status.currentPercentRelative+"%"));this.css.jq.currentTime.length&&this.css.jq.currentTime.text(this._convertTime(this.status.currentTime));this.css.jq.duration.length&&this.css.jq.duration.text(this._convertTime(this.status.duration))},_convertTime:l.prototype.time,_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg")},
_resetGate:function(){this.html.audio.gate=!1;this.html.video.gate=!1;this.flash.gate=!1},_resetActive:function(){this.html.active=!1;this.flash.active=!1},setMedia:function(a){var c=this,d=!1,e=this.status.media.poster!==a.poster;this._resetMedia();this._resetGate();this._resetActive();b.each(this.formats,function(e,f){var j="video"===c.format[f].media;b.each(c.solutions,function(b,e){if(c[e].support[f]&&c._validString(a[f])){var g="html"===e;j?(g?(c.html.video.gate=!0,c._html_setVideo(a),c.html.active=
!0):(c.flash.gate=!0,c._flash_setVideo(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(g?(c.html.audio.gate=!0,c._html_setAudio(a),c.html.active=!0):(c.flash.gate=!0,c._flash_setAudio(a),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1);d=!0;return!1}});if(d)return!1});if(d){if((!this.status.nativeVideoControls||!this.html.video.gate)&&this._validString(a.poster))e?this.htmlElement.poster.src=a.poster:this.internal.poster.jq.show();
this.status.srcSet=!0;this.status.media=b.extend({},a);this._updateButtons(!1);this._updateInterface()}else this._error({type:b.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:b.jPlayer.errorMsg.NO_SUPPORT,hint:b.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus();this._updateButtons(!1);this._updateInterface();this._seeked();this.internal.poster.jq.hide();clearTimeout(this.internal.htmlDlyCmdId);this.html.active?this._html_resetMedia():this.flash.active&&
this._flash_resetMedia()},clearMedia:function(){this._resetMedia();this.html.active?this._html_clearMedia():this.flash.active&&this._flash_clearMedia();this._resetGate();this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},focus:function(){this.options.keyEnabled&&(b.jPlayer.focus=this)},play:function(a){a="number"===typeof a?a:NaN;this.status.srcSet?(this.focus(),this.html.active?this._html_play(a):
this.flash.active&&this._flash_play(a)):this._urlNotSetError("play")},videoPlay:function(){this.play()},pause:function(a){a="number"===typeof a?a:NaN;this.status.srcSet?this.html.active?this._html_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},pauseOthers:function(){var a=this;b.each(this.instances,function(b,d){a.element!==d&&d.data("jPlayer").status.srcSet&&d.jPlayer("pause")})},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.flash.active&&
this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100);this.status.srcSet?this.html.active?this._html_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.options.muted=a;this.html.used&&this._html_mute(a);this.flash.used&&this._flash_mute(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateMute(a),this._updateVolume(this.options.volume),this._trigger(b.jPlayer.event.volumechange))},
mute:function(a){a=a===f?!0:!!a;this._muted(a)},unmute:function(a){a=a===f?!0:!!a;this._muted(!a)},_updateMute:function(a){a===f&&(a=this.options.muted);this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){a=this._limitValue(a,0,1);this.options.volume=a;this.html.used&&this._html_volume(a);this.flash.used&&
this._flash_volume(a);!this.html.video.gate&&!this.html.audio.gate&&(this._updateVolume(a),this._trigger(b.jPlayer.event.volumechange))},volumeBar:function(a){if(this.css.jq.volumeBar.length){var c=b(a.currentTarget),d=c.offset(),e=a.pageX-d.left,g=c.width();a=c.height()-a.pageY+d.top;c=c.height();this.options.verticalVolume?this.volume(a/c):this.volume(e/g)}this.options.muted&&this._muted(!1)},volumeBarValue:function(){},_updateVolume:function(a){a===f&&(a=this.options.volume);a=this.options.muted?
0:a;this.status.noVolume?(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(),this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](100*a+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1);
this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(a){var c=this;this.options.cssSelectorAncestor=a;this._removeUiClass();this.ancestorJq=a?b(a):[];a&&1!==this.ancestorJq.length&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT});this._addUiClass();b.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)});
this._updateInterface();this._updateButtons();this._updateAutohide();this._updateVolume();this._updateMute()},_cssSelector:function(a,c){var d=this;"string"===typeof c?b.jPlayer.prototype.options.cssSelector[a]?(this.css.jq[a]&&this.css.jq[a].length&&this.css.jq[a].unbind(".jPlayer"),this.options.cssSelector[a]=c,this.css.cs[a]=this.options.cssSelectorAncestor+" "+c,this.css.jq[a]=c?b(this.css.cs[a]):[],this.css.jq[a].length&&this.css.jq[a].bind("click.jPlayer",function(c){c.preventDefault();d[a](c);
b(this).blur()}),c&&1!==this.css.jq[a].length&&this._warning({type:b.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[a],message:b.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[a].length+" found for "+a+" method.",hint:b.jPlayer.warningHint.CSS_SELECTOR_COUNT})):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_METHOD,context:a,message:b.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:b.jPlayer.warningHint.CSS_SELECTOR_METHOD}):this._warning({type:b.jPlayer.warning.CSS_SELECTOR_STRING,context:c,
message:b.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:b.jPlayer.warningHint.CSS_SELECTOR_STRING})},seekBar:function(a){if(this.css.jq.seekBar.length){var c=b(a.currentTarget),d=c.offset();a=a.pageX-d.left;c=c.width();this.playHead(100*a/c)}},playBar:function(){},repeat:function(){this._loop(!0)},repeatOff:function(){this._loop(!1)},_loop:function(a){this.options.loop!==a&&(this.options.loop=a,this._updateButtons(),this._trigger(b.jPlayer.event.repeat))},currentTime:function(){},duration:function(){},
gui:function(){},noSolution:function(){},option:function(a,c){var d=a;if(0===arguments.length)return b.extend(!0,{},this.options);if("string"===typeof a){var e=a.split(".");if(c===f){for(var d=b.extend(!0,{},this.options),g=0;g<e.length;g++)if(d[e[g]]!==f)d=d[e[g]];else return this._warning({type:b.jPlayer.warning.OPTION_KEY,context:a,message:b.jPlayer.warningMsg.OPTION_KEY,hint:b.jPlayer.warningHint.OPTION_KEY}),f;return d}for(var g=d={},h=0;h<e.length;h++)h<e.length-1?(g[e[h]]={},g=g[e[h]]):g[e[h]]=
c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,c){var d=this;switch(a){case "volume":this.volume(c);break;case "muted":this._muted(c);break;case "cssSelectorAncestor":this._cssSelectorAncestor(c);break;case "cssSelector":b.each(c,function(a,b){d._cssSelector(a,b)});break;case "fullScreen":if(this.options[a]!==c){var e=b.jPlayer.nativeFeatures.fullscreen.used.webkitVideo;if(!e||e&&!this.status.waitForPlay)e||
(this.options[a]=c),c?this._requestFullscreen():this._exitFullscreen(),e||this._setOption("fullWindow",c)}break;case "fullWindow":this.options[a]!==c&&(this._removeUiClass(),this.options[a]=c,this._refreshSize());break;case "size":!this.options.fullWindow&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]=b.extend({},this.options[a],c);this._refreshSize();break;case "sizeFull":this.options.fullWindow&&this.options[a].cssClass!==c.cssClass&&this._removeUiClass();this.options[a]=
b.extend({},this.options[a],c);this._refreshSize();break;case "autohide":this.options[a]=b.extend({},this.options[a],c);this._updateAutohide();break;case "loop":this._loop(c);break;case "nativeVideoControls":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls);this._restrictNativeVideoControls();this._updateNativeVideoControls();break;case "noFullWindow":this.options[a]=b.extend({},this.options[a],c);this.status.nativeVideoControls=
this._uaBlocklist(this.options.nativeVideoControls);this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow);this._restrictNativeVideoControls();this._updateButtons();break;case "noVolume":this.options[a]=b.extend({},this.options[a],c);this.status.noVolume=this._uaBlocklist(this.options.noVolume);this._updateVolume();this._updateMute();break;case "emulateHtml":this.options[a]!==c&&((this.options[a]=c)?this._emulateHtmlBridge():this._destroyHtmlBridge());break;case "timeFormat":this.options[a]=
b.extend({},this.options[a],c);break;case "keyEnabled":this.options[a]=c;!c&&this===b.jPlayer.focus&&(b.jPlayer.focus=null);break;case "keyBindings":this.options[a]=b.extend(!0,{},this.options[a],c);break;case "audioFullScreen":this.options[a]=c}return this},_refreshSize:function(){this._setSize();this._addUiClass();this._updateSize();this._updateButtons();this._updateAutohide();this._trigger(b.jPlayer.event.resize)},_setSize:function(){this.options.fullWindow?(this.status.width=this.options.sizeFull.width,
this.status.height=this.options.sizeFull.height,this.status.cssClass=this.options.sizeFull.cssClass):(this.status.width=this.options.size.width,this.status.height=this.options.size.height,this.status.cssClass=this.options.size.cssClass);this.element.css({width:this.status.width,height:this.status.height})},_addUiClass:function(){this.ancestorJq.length&&this.ancestorJq.addClass(this.status.cssClass)},_removeUiClass:function(){this.ancestorJq.length&&this.ancestorJq.removeClass(this.status.cssClass)},
_updateSize:function(){this.internal.poster.jq.css({width:this.status.width,height:this.status.height});!this.status.waitForPlay&&this.html.active&&this.status.video||this.html.video.available&&this.html.used&&this.status.nativeVideoControls?this.internal.video.jq.css({width:this.status.width,height:this.status.height}):!this.status.waitForPlay&&(this.flash.active&&this.status.video)&&this.internal.flash.jq.css({width:this.status.width,height:this.status.height})},_updateAutohide:function(){var a=
this,b=function(){a.css.jq.gui.fadeIn(a.options.autohide.fadeIn,function(){clearTimeout(a.internal.autohideId);a.internal.autohideId=setTimeout(function(){a.css.jq.gui.fadeOut(a.options.autohide.fadeOut)},a.options.autohide.hold)})};this.css.jq.gui.length&&(this.css.jq.gui.stop(!0,!0),clearTimeout(this.internal.autohideId),this.element.unbind(".jPlayerAutohide"),this.css.jq.gui.unbind(".jPlayerAutohide"),this.status.nativeVideoControls?this.css.jq.gui.hide():this.options.fullWindow&&this.options.autohide.full||
!this.options.fullWindow&&this.options.autohide.restored?(this.element.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.bind("mousemove.jPlayer.jPlayerAutohide",b),this.css.jq.gui.hide()):this.css.jq.gui.show())},fullScreen:function(){this._setOption("fullScreen",!0)},restoreScreen:function(){this._setOption("fullScreen",!1)},_fullscreenAddEventListeners:function(){var a=this,c=b.jPlayer.nativeFeatures.fullscreen;c.api.fullscreenEnabled&&c.event.fullscreenchange&&("function"!==typeof this.internal.fullscreenchangeHandler&&
(this.internal.fullscreenchangeHandler=function(){a._fullscreenchange()}),document.addEventListener(c.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1))},_fullscreenRemoveEventListeners:function(){var a=b.jPlayer.nativeFeatures.fullscreen;this.internal.fullscreenchangeHandler&&document.addEventListener(a.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1)},_fullscreenchange:function(){this.options.fullScreen&&!b.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()&&
this._setOption("fullScreen",!1)},_requestFullscreen:function(){var a=this.ancestorJq.length?this.ancestorJq[0]:this.element[0],c=b.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(a=this.htmlElement.video);c.api.fullscreenEnabled&&c.api.requestFullscreen(a)},_exitFullscreen:function(){var a=b.jPlayer.nativeFeatures.fullscreen,c;a.used.webkitVideo&&(c=this.htmlElement.video);a.api.fullscreenEnabled&&a.api.exitFullscreen(c)},_html_initMedia:function(a){var c=b(this.htmlElement.media).empty();
b.each(a.track||[],function(a,b){var g=document.createElement("track");g.setAttribute("kind",b.kind?b.kind:"");g.setAttribute("src",b.src?b.src:"");g.setAttribute("srclang",b.srclang?b.srclang:"");g.setAttribute("label",b.label?b.label:"");b.def&&g.setAttribute("default",b.def);c.append(g)});this.htmlElement.media.src=this.status.src;"none"!==this.options.preload&&this._html_load();this._trigger(b.jPlayer.event.timeupdate)},_html_setFormat:function(a){var c=this;b.each(this.formats,function(b,e){if(c.html.support[e]&&
a[e])return c.status.src=a[e],c.status.format[e]=!0,c.status.formatType=e,!1})},_html_setAudio:function(a){this._html_setFormat(a);this.htmlElement.media=this.htmlElement.audio;this._html_initMedia(a)},_html_setVideo:function(a){this._html_setFormat(a);this.status.nativeVideoControls&&(this.htmlElement.video.poster=this._validString(a.poster)?a.poster:"");this.htmlElement.media=this.htmlElement.video;this._html_initMedia(a)},_html_resetMedia:function(){this.htmlElement.media&&(this.htmlElement.media.id===
this.internal.video.id&&!this.status.nativeVideoControls&&this.internal.video.jq.css({width:"0px",height:"0px"}),this.htmlElement.media.pause())},_html_clearMedia:function(){this.htmlElement.media&&(this.htmlElement.media.src="about:blank",this.htmlElement.media.load())},_html_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.htmlElement.media.load());clearTimeout(this.internal.htmlDlyCmdId)},_html_play:function(a){var b=this,d=this.htmlElement.media;this._html_load();if(isNaN(a))d.play();
else{this.internal.cmdsIgnored&&d.play();try{if(!d.seekable||"object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a,d.play();else throw 1;}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.play(a)},250);return}}this._html_checkWaitForPlay()},_html_pause:function(a){var b=this,d=this.htmlElement.media;0<a?this._html_load():clearTimeout(this.internal.htmlDlyCmdId);d.pause();if(!isNaN(a))try{if(!d.seekable||"object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a;else throw 1;
}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},250);return}0<a&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this,d=this.htmlElement.media;this._html_load();try{if("object"===typeof d.seekable&&0<d.seekable.length)d.currentTime=a*d.seekable.end(d.seekable.length-1)/100;else if(0<d.duration&&!isNaN(d.duration))d.currentTime=a*d.duration/100;else throw"e";}catch(e){this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},250);return}this.status.waitForLoad||
this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})))},_html_volume:function(a){this.html.audio.available&&(this.htmlElement.audio.volume=a);this.html.video.available&&(this.htmlElement.video.volume=a)},_html_mute:function(a){this.html.audio.available&&
(this.htmlElement.audio.muted=a);this.html.video.available&&(this.htmlElement.video.muted=a)},_flash_setAudio:function(a){var c=this;try{b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4a":case "fla":c._getMovie().fl_setAudio_m4a(a[d]);break;case "mp3":c._getMovie().fl_setAudio_mp3(a[d]);break;case "rtmpa":c._getMovie().fl_setAudio_rtmp(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),"auto"===this.options.preload&&(this._flash_load(),
this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_setVideo:function(a){var c=this;try{b.each(this.formats,function(b,d){if(c.flash.support[d]&&a[d]){switch(d){case "m4v":case "flv":c._getMovie().fl_setVideo_m4v(a[d]);break;case "rtmpv":c._getMovie().fl_setVideo_rtmp(a[d])}c.status.src=a[d];c.status.format[d]=!0;c.status.formatType=d;return!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px",
height:"0px"});this._flash_pause(NaN)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad=!1;this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}0<a&&(this.status.waitForLoad=
!1,this._flash_checkWaitForPlay())},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height})))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}},
_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_getFlashPluginVersion:function(){var a=0,b;if(window.ActiveXObject)try{if(b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var d=b.GetVariable("$version");d&&(d=d.split(" ")[1].split(","),a=parseInt(d[0],10)+"."+parseInt(d[1],10))}}catch(e){}else navigator.plugins&&0<navigator.mimeTypes.length&&(b=navigator.plugins["Shockwave Flash"])&&(a=navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/,
"$1"));return 1*a},_checkForFlash:function(a){var b=!1;this._getFlashPluginVersion()>=a&&(b=!0);return b},_validString:function(a){return a&&"string"===typeof a},_limitValue:function(a,b,d){return a<b?b:a>d?d:a},_urlNotSetError:function(a){this._error({type:b.jPlayer.error.URL_NOT_SET,context:a,message:b.jPlayer.errorMsg.URL_NOT_SET,hint:b.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(a){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH";this._error({type:b.jPlayer.error[c],context:this.internal.flash.swf,
message:b.jPlayer.errorMsg[c]+a.message,hint:b.jPlayer.errorHint[c]});this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(a){this._trigger(b.jPlayer.event.error,a);this.options.errorAlerts&&this._alert("Error!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+a.context)},_warning:function(a){this._trigger(b.jPlayer.event.warning,f,a);this.options.warningAlerts&&this._alert("Warning!"+(a.message?"\n\n"+a.message:"")+(a.hint?"\n\n"+a.hint:"")+"\n\nContext: "+
a.context)},_alert:function(a){alert("jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a)},_emulateHtmlBridge:function(){var a=this;b.each(b.jPlayer.emulateMethods.split(/\s+/g),function(b,d){a.internal.domNode[d]=function(b){a[d](b)}});b.each(b.jPlayer.event,function(c,d){var e=!0;b.each(b.jPlayer.reservedEvent.split(/\s+/g),function(a,b){if(b===c)return e=!1});e&&a.element.bind(d+".jPlayer.jPlayerHtml",function(){a._emulateHtmlUpdate();var b=document.createEvent("Event");b.initEvent(c,
!1,!0);a.internal.domNode.dispatchEvent(b)})})},_emulateHtmlUpdate:function(){var a=this;b.each(b.jPlayer.emulateStatus.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.status[d]});b.each(b.jPlayer.emulateOptions.split(/\s+/g),function(b,d){a.internal.domNode[d]=a.options[d]})},_destroyHtmlBridge:function(){var a=this;this.element.unbind(".jPlayerHtml");b.each((b.jPlayer.emulateMethods+" "+b.jPlayer.emulateStatus+" "+b.jPlayer.emulateOptions).split(/\s+/g),function(b,d){delete a.internal.domNode[d]})}};
b.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"};b.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.",
NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+b.jPlayer.prototype.version.script+" needs Jplayer.swf version "+b.jPlayer.prototype.version.needFlash+" but found "};b.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.",
NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."};b.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"};b.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ",
CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."};b.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}});

View File

@ -0,0 +1,83 @@
.webPlayer { display: inline-block; position: relative; font-family: 'Segoe UI', Verdana, sans-serif; clear: both; margin-bottom: 10px; line-height: 1.4; font-size: 13px; box-shadow: 0 0 1px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.5); text-align: center; /* Chrome FIX for full screen */ }
.webPlayer a.smooth { transition: all 0.1s linear; -webkit-transition: all 0.1s linear; -moz-transition: all 0.1s linear; -o-transition: all 0.1s linear; }
.webPlayer.jp-video-full > .controls { position: absolute; left: 0; right: 0; bottom: 0; opacity: 0.8; z-index: 1000; }
.webPlayer.jp-video-full, .webPlayer.jp-video-full object, .webPlayer.jp-video-full video { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: block; z-index: 999; }
.webPlayer.jp-video-full > .playerScreen, .webPlayer.jp-video-full > .playerScreen > .video-play { z-index: 1000; }
.webPlayer .playerScreen { cursor: pointer; }
.webPlayer .playerScreen .video-play { display: block; position: absolute; z-index: 990; width: 100%; top: 0; left: 0; right: 0; bottom: 50px; background: url("preimg.png") no-repeat center center; opacity: 0.4; background-color: rgba(0, 0, 0, 0.4); }
.webPlayer .controls { display: block; position: relative; height: 40px; background: #0b0b0b; color: #969696; padding: 5px 10px; z-index: 996; border: 1px solid #000000; }
.webPlayer .controls .leftblock { position: absolute; left: 3px; width: 50px; }
.webPlayer .controls .leftblock .play { display: block; width: 40px; height: 40px; background: url("playerUI.png") no-repeat 0 1px; opacity: 0.8; }
.webPlayer .controls .leftblock .play:hover { opacity: 1; }
.webPlayer .controls .leftblock .pause { display: block; width: 40px; height: 40px; background: url("playerUI.png") no-repeat -40px 1px; opacity: 0.8; }
.webPlayer .controls .leftblock .pause:hover { opacity: 1; }
.webPlayer .controls .progress { position: relative; display: block; margin: 0 130px 0 50px; text-align: left; }
.webPlayer .controls .progress span { font-size: 12px; margin-left: 1px; color: #f0f0f0; }
.webPlayer .controls .progress .progressbar { display: block; height: 4px; background-color: #3C3C3C; background: rgba(255, 255, 255, 0.05); margin: 2.5px 0; }
.webPlayer .controls .progress .progressbar .seekBar { position: relative; display: block; cursor: pointer; padding: 1px; background: rgba(255, 255, 255, 0.1); }
.webPlayer .controls .progress .progressbar .seekBar .playBar { display: block; height: 2px; padding: 0; background: #FFFFFF; }
.webPlayer .controls .progress .progressbar .seekBar a { display: block; position: absolute; top: -2px; width: 8px; height: 8px; border-radius: 5px; background: #ffffff; margin-left: -3px; }
.webPlayer .controls .progress .progressbar .seekBar a div { width: 8px; height: 8px; }
.webPlayer .controls .progress .time { display: block; position: absolute; width: 50px; font-size: 11px; }
.webPlayer .controls .progress .time.current { left: 1px; text-align: left; color: #f0f0f0; }
.webPlayer .controls .progress .time.duration { right: 0px; text-align: right; }
.webPlayer .controls .rightblock { position: absolute; right: 10px; width: 110px; top: 5px; }
.webPlayer .controls .rightblock .volumeText { display: block; position: absolute; bottom: -12px; text-align: center; width: 80px; font-size: 11px; }
.webPlayer .controls .rightblock .volumeBar { display: block; position: absolute; height: 4px; background-color: #3C3C3C; background: rgba(255, 255, 255, 0.05); width: 80px; top: 19px; left: 0; cursor: pointer; }
.webPlayer .controls .rightblock .volumeBar .currentVolume { position: relative; height: 2px; padding: 1px; }
.webPlayer .controls .rightblock .volumeBar .currentVolume .curvol { display: block; height: 2px; padding: 0; background: #FFFFFF; }
.webPlayer .controls .rightblock .volumeBar .currentVolume a { display: block; position: absolute; top: -2px; margin-left: -3px; width: 8px; height: 8px; border-radius: 5px; background: #ffffff; }
.webPlayer .controls .rightblock .volumeBar .currentVolume a div { display: block; width: 8px; height: 8px; }
.webPlayer .controls .rightblock .fullScreen { display: block; float: right; width: 16px; height: 16px; background: url("playerUI.png") no-repeat 0 -50px; margin-top: 12px; opacity: 0.4; }
.webPlayer .controls .rightblock .fullScreen:hover { opacity: 0.8; }
.webPlayer .controls .rightblock .fullScreenOFF { display: block; float: right; width: 16px; height: 16px; background: url("playerUI.png") no-repeat 0 -68px; margin-top: 12px; opacity: 0.4; }
.webPlayer .controls .rightblock .fullScreenOFF:hover { opacity: 0.8; }
.webPlayer.audioPlayer .progress { margin-right: 100px; }
.webPlayer.audioPlayer .rightblock { width: 85px; }
.webPlayer.audioPlayer .rightblock .volumeText { bottom: -42px; }
.webPlayer.audioPlayer .fullScreen { display: none; }
.webPlayer.audioPlayer .fullScreenOFF { display: none; }
/**
* Light Theme
*/
.webPlayer.light { display: inline-block; position: relative; font-family: 'Segoe UI', Verdana, sans-serif; clear: both; margin-bottom: 10px; line-height: 1.4; font-size: 13px; box-shadow: 0 0 1px rgba(255, 255, 255, 0.5); -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5); text-align: center; /* Chrome FIX for full screen */ }
.webPlayer.light a.smooth { transition: all 0.1s linear; -webkit-transition: all 0.1s linear; -moz-transition: all 0.1s linear; -o-transition: all 0.1s linear; }
.webPlayer.light.jp-video-full > .controls { position: absolute; left: 0; right: 0; bottom: 0; opacity: 0.8; z-index: 1000; }
.webPlayer.light.jp-video-full, .webPlayer.light.jp-video-full object, .webPlayer.light.jp-video-full video { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: block; z-index: 999; }
.webPlayer.light.jp-video-full > .playerScreen, .webPlayer.light.jp-video-full > .playerScreen > .video-play { z-index: 1000; }
.webPlayer.light .playerScreen { cursor: pointer; }
.webPlayer.light .playerScreen .video-play { display: block; position: absolute; z-index: 990; width: 100%; top: 0; left: 0; right: 0; bottom: 50px; background: url("preimg.light.png") no-repeat center center; opacity: 0.8; background-color: rgba(255, 255, 255, 0.1); }
.webPlayer.light .controls { display: block; position: relative; height: 40px; background: #FAFAFA; color: #646464; padding: 5px 10px; z-index: 996; border: 1px solid #e6e6e6; }
.webPlayer.light .controls .leftblock { position: absolute; left: 3px; width: 50px; }
.webPlayer.light .controls .leftblock .play { display: block; width: 40px; height: 40px; background: url("playerUI.light.png") no-repeat 0 1px; opacity: 0.8; }
.webPlayer.light .controls .leftblock .play:hover { opacity: 1; }
.webPlayer.light .controls .leftblock .pause { display: block; width: 40px; height: 40px; background: url("playerUI.light.png") no-repeat -40px 1px; opacity: 0.8; }
.webPlayer.light .controls .leftblock .pause:hover { opacity: 1; }
.webPlayer.light .controls .progress { position: relative; display: block; margin: 0 130px 0 50px; text-align: left; }
.webPlayer.light .controls .progress span { font-size: 12px; margin-left: 1px; color: #282828; }
.webPlayer.light .controls .progress .progressbar { display: block; height: 4px; background-color: #3C3C3C; background: rgba(0, 0, 0, 0.1); margin: 2.5px 0; }
.webPlayer.light .controls .progress .progressbar .seekBar { position: relative; display: block; cursor: pointer; padding: 1px; background: rgba(0, 0, 0, 0.05); }
.webPlayer.light .controls .progress .progressbar .seekBar .playBar { display: block; height: 2px; padding: 0; background: #191919; }
.webPlayer.light .controls .progress .progressbar .seekBar a { display: block; position: absolute; top: -2px; width: 8px; height: 8px; border-radius: 5px; background: #191919; margin-left: -3px; }
.webPlayer.light .controls .progress .progressbar .seekBar a div { width: 8px; height: 8px; }
.webPlayer.light .controls .progress .time { display: block; position: absolute; width: 50px; font-size: 11px; }
.webPlayer.light .controls .progress .time.current { left: 1px; text-align: left; color: #282828; }
.webPlayer.light .controls .progress .time.duration { right: 0px; text-align: right; }
.webPlayer.light .controls .rightblock { position: absolute; right: 10px; width: 110px; top: 5px; }
.webPlayer.light .controls .rightblock .volumeText { display: block; position: absolute; bottom: -12px; text-align: center; width: 80px; font-size: 11px; }
.webPlayer.light .controls .rightblock .volumeBar { display: block; position: absolute; height: 4px; background-color: #EBEBEB; background: rgba(0, 0, 0, 0.1); width: 80px; top: 19px; left: 0; cursor: pointer; }
.webPlayer.light .controls .rightblock .volumeBar .currentVolume { position: relative; height: 2px; padding: 1px; }
.webPlayer.light .controls .rightblock .volumeBar .currentVolume .curvol { display: block; height: 2px; padding: 0; background: #191919; }
.webPlayer.light .controls .rightblock .volumeBar .currentVolume a { display: block; position: absolute; top: -2px; margin-left: -3px; width: 8px; height: 8px; border-radius: 5px; background: #191919; }
.webPlayer.light .controls .rightblock .volumeBar .currentVolume a div { display: block; width: 8px; height: 8px; }
.webPlayer.light .controls .rightblock .fullScreen { display: block; float: right; width: 16px; height: 16px; background: url("playerUI.light.png") no-repeat 0 -50px; margin-top: 12px; opacity: 0.4; }
.webPlayer.light .controls .rightblock .fullScreen:hover { opacity: 0.8; }
.webPlayer.light .controls .rightblock .fullScreenOFF { display: block; float: right; width: 16px; height: 16px; background: url("playerUI.light.png") no-repeat 0 -68px; margin-top: 12px; opacity: 0.4; }
.webPlayer.light .controls .rightblock .fullScreenOFF:hover { opacity: 0.8; }
.webPlayer.light.audioPlayer .progress { margin-right: 100px; }
.webPlayer.light.audioPlayer .rightblock { width: 85px; }
.webPlayer.light.audioPlayer .rightblock .volumeText { bottom: -42px; }
.webPlayer.light.audioPlayer .fullScreen { display: none; }
.webPlayer.light.audioPlayer .fullScreenOFF { display: none; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Some files were not shown because too many files have changed in this diff Show More