Directory cleanup
This commit is contained in:
parent
c54915e940
commit
644437ea42
54 changed files with 16 additions and 24502 deletions
1148
www/js/callbacks.js
Normal file
1148
www/js/callbacks.js
Normal file
File diff suppressed because it is too large
Load diff
1426
www/js/chart.js
Normal file
1426
www/js/chart.js
Normal file
File diff suppressed because it is too large
Load diff
168
www/js/data.js
Normal file
168
www/js/data.js
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
/*
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2013 Calvin Montgomery
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
var CL_VERSION = "3.0.0";
|
||||
|
||||
var CLIENT = {
|
||||
rank: -1,
|
||||
leader: false,
|
||||
name: "",
|
||||
logged_in: false,
|
||||
profile: {
|
||||
image: "",
|
||||
text: ""
|
||||
}
|
||||
};
|
||||
var SUPERADMIN = false;
|
||||
|
||||
var CHANNEL = {
|
||||
opts: {},
|
||||
openqueue: false,
|
||||
perms: {},
|
||||
css: "",
|
||||
js: "",
|
||||
motd: "",
|
||||
motd_text: "",
|
||||
name: false,
|
||||
usercount: 0,
|
||||
emotes: []
|
||||
};
|
||||
|
||||
var PLAYER = false;
|
||||
var FLUIDLAYOUT = false;
|
||||
var VWIDTH;
|
||||
var VHEIGHT;
|
||||
if($("#videowidth").length > 0) {
|
||||
VWIDTH = $("#videowidth").css("width").replace("px", "");
|
||||
VHEIGHT = ""+parseInt(parseInt(VWIDTH) * 9 / 16);
|
||||
}
|
||||
var REBUILDING = false;
|
||||
var socket = {
|
||||
emit: function() {
|
||||
console.log("socket not initialized");
|
||||
console.log(arguments);
|
||||
}
|
||||
};
|
||||
var IGNORED = [];
|
||||
var CHATHIST = [];
|
||||
var CHATHISTIDX = 0;
|
||||
var CHATTHROTTLE = false;
|
||||
var SCROLLCHAT = true;
|
||||
var LASTCHAT = {
|
||||
name: ""
|
||||
};
|
||||
var FOCUSED = true;
|
||||
var PAGETITLE = "CyTube";
|
||||
var TITLE_BLINK;
|
||||
var CHATSOUND = new Audio("boop.wav");
|
||||
var KICKED = false;
|
||||
var NAME = readCookie("cytube_uname");
|
||||
var SESSION = readCookie("cytube_session");
|
||||
var LEADTMR = false;
|
||||
var PL_FROM = "";
|
||||
var PL_AFTER = "";
|
||||
var PL_CURRENT = -1;
|
||||
var PL_WAIT_SCROLL = false;
|
||||
var FILTER_FROM = 0;
|
||||
var FILTER_TO = 0;
|
||||
var NO_STORAGE = typeof localStorage == "undefined" || localStorage === null;
|
||||
|
||||
function getOpt(k) {
|
||||
return NO_STORAGE ? readCookie(k) : localStorage.getItem(k);
|
||||
}
|
||||
|
||||
function setOpt(k, v) {
|
||||
NO_STORAGE ? createCookie(k, v, 1000) : localStorage.setItem(k, v);
|
||||
}
|
||||
|
||||
function getOrDefault(k, def) {
|
||||
var v = getOpt(k);
|
||||
if(v === null || v === "null")
|
||||
return def;
|
||||
if(v === "true")
|
||||
return true;
|
||||
if(v === "false")
|
||||
return false;
|
||||
if(v.match(/^[0-9]+$/))
|
||||
return parseInt(v);
|
||||
if(v.match(/^[0-9\.]+$/))
|
||||
return parseFloat(v);
|
||||
return v;
|
||||
}
|
||||
|
||||
var USEROPTS = {
|
||||
theme : getOrDefault("theme", "default"),
|
||||
css : getOrDefault("css", ""),
|
||||
layout : getOrDefault("layout", "default"),
|
||||
synch : getOrDefault("synch", true),
|
||||
hidevid : getOrDefault("hidevid", false),
|
||||
show_timestamps : getOrDefault("show_timestamps", true),
|
||||
modhat : getOrDefault("modhat", false),
|
||||
blink_title : getOrDefault("blink_title", false),
|
||||
sync_accuracy : getOrDefault("sync_accuracy", 2),
|
||||
wmode_transparent : getOrDefault("wmode_transparent", true),
|
||||
chatbtn : getOrDefault("chatbtn", false),
|
||||
altsocket : getOrDefault("altsocket", false),
|
||||
joinmessage : getOrDefault("joinmessage", true),
|
||||
qbtn_hide : getOrDefault("qbtn_hide", false),
|
||||
qbtn_idontlikechange : getOrDefault("qbtn_idontlikechange", false),
|
||||
first_visit : getOrDefault("first_visit", true),
|
||||
ignore_channelcss : getOrDefault("ignore_channelcss", false),
|
||||
ignore_channeljs : getOrDefault("ignore_channeljs", false),
|
||||
sort_rank : getOrDefault("sort_rank", true),
|
||||
sort_afk : getOrDefault("sort_afk", false),
|
||||
default_quality : getOrDefault("default_quality", ""),
|
||||
boop : getOrDefault("boop", false),
|
||||
secure_connection : getOrDefault("secure_connection", false)
|
||||
};
|
||||
|
||||
var VOLUME = parseFloat(getOrDefault("volume", 1));
|
||||
|
||||
var NO_WEBSOCKETS = USEROPTS.altsocket;
|
||||
var NO_VIMEO = Boolean(location.host.match("cytu.be"));
|
||||
|
||||
var Rank = {
|
||||
Guest: 0,
|
||||
Member: 1,
|
||||
Leader: 1.5,
|
||||
Moderator: 2,
|
||||
Admin: 3,
|
||||
Owner: 10,
|
||||
Siteadmin: 255
|
||||
};
|
||||
|
||||
function createCookie(name,value,days) {
|
||||
if (days) {
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime()+(days*24*60*60*1000));
|
||||
var expires = "; expires="+date.toGMTString();
|
||||
}
|
||||
else var expires = "";
|
||||
document.cookie = name+"="+value+expires+"; path=/";
|
||||
}
|
||||
|
||||
function readCookie(name) {
|
||||
var nameEQ = name + "=";
|
||||
var ca = document.cookie.split(";");
|
||||
for(var i=0;i < ca.length;i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0)==" ") c = c.substring(1,c.length);
|
||||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function eraseCookie(name) {
|
||||
createCookie(name,"",-1);
|
||||
}
|
||||
|
||||
/* to be implemented in callbacks.js */
|
||||
function setupCallbacks() { }
|
||||
96
www/js/jwplayer.js
Normal file
96
www/js/jwplayer.js
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
"undefined"==typeof jwplayer&&(jwplayer=function(d){if(jwplayer.api)return jwplayer.api.selectPlayer(d)},jwplayer.version="6.6.3896",jwplayer.vid=document.createElement("video"),jwplayer.audio=document.createElement("audio"),jwplayer.source=document.createElement("source"),function(d){function a(b){return function(){return c(b)}}function k(b){return function(){b("Error loading file")}}function f(m,a,e,g){return function(){try{var c=m.responseXML;if(c&&c.firstChild)return e(m)}catch(j){}(c=b.parseXML(m.responseText))&&
|
||||
c.firstChild?(m=b.extend({},m,{responseXML:c}),e(m)):g&&g(m.responseText?"Invalid XML":a)}}var h=document,e=window,j=navigator,b=d.utils=function(){};b.exists=function(b){switch(typeof b){case "string":return 0<b.length;case "object":return null!==b;case "undefined":return!1}return!0};b.styleDimension=function(b){return b+(0<b.toString().indexOf("%")?"":"px")};b.getAbsolutePath=function(a,e){b.exists(e)||(e=h.location.href);if(b.exists(a)){var c;if(b.exists(a)){c=a.indexOf("://");var g=a.indexOf("?");
|
||||
c=0<c&&(0>g||g>c)}else c=void 0;if(c)return a;c=e.substring(0,e.indexOf("://")+3);var g=e.substring(c.length,e.indexOf("/",c.length+1)),j;0===a.indexOf("/")?j=a.split("/"):(j=e.split("?")[0],j=j.substring(c.length+g.length+1,j.lastIndexOf("/")),j=j.split("/").concat(a.split("/")));for(var f=[],t=0;t<j.length;t++)j[t]&&(b.exists(j[t])&&"."!=j[t])&&(".."==j[t]?f.pop():f.push(j[t]));return c+g+"/"+f.join("/")}};b.extend=function(){var a=b.extend.arguments;if(1<a.length){for(var e=1;e<a.length;e++)b.foreach(a[e],
|
||||
function(e,g){try{b.exists(g)&&(a[0][e]=g)}catch(c){}});return a[0]}return null};b.log=function(b,a){"undefined"!=typeof console&&"undefined"!=typeof console.log&&(a?console.log(b,a):console.log(b))};var c=b.userAgentMatch=function(b){return null!==j.userAgent.toLowerCase().match(b)};b.isIE=a(/msie/i);b.isFF=a(/firefox/i);b.isChrome=a(/chrome/i);b.isIOS=a(/iP(hone|ad|od)/i);b.isIPod=a(/iP(hone|od)/i);b.isIPad=a(/iPad/i);b.isSafari602=a(/Macintosh.*Mac OS X 10_8.*6\.0\.\d* Safari/i);b.isSafari=function(){return c(/safari/i)&&
|
||||
!c(/chrome/i)&&!c(/chromium/i)&&!c(/android/i)};b.isAndroid=function(b){return b?c(RegExp("android.*"+b,"i")):c(/android/i)};b.isMobile=function(){return b.isIOS()||b.isAndroid()};b.saveCookie=function(b,a){h.cookie="jwplayer."+b+"\x3d"+a+"; path\x3d/"};b.getCookies=function(){for(var b={},a=h.cookie.split("; "),e=0;e<a.length;e++){var g=a[e].split("\x3d");0==g[0].indexOf("jwplayer.")&&(b[g[0].substring(9,g[0].length)]=g[1])}return b};b.typeOf=function(b){var a=typeof b;return"object"===a?!b?"null":
|
||||
b instanceof Array?"array":a:a};b.translateEventResponse=function(a,e){var c=b.extend({},e);a==d.events.JWPLAYER_FULLSCREEN&&!c.fullscreen?(c.fullscreen="true"==c.message?!0:!1,delete c.message):"object"==typeof c.data?(c=b.extend(c,c.data),delete c.data):"object"==typeof c.metadata&&b.deepReplaceKeyName(c.metadata,["__dot__","__spc__","__dsh__","__default__"],["."," ","-","default"]);b.foreach(["position","duration","offset"],function(b,a){c[a]&&(c[a]=Math.round(1E3*c[a])/1E3)});return c};b.flashVersion=
|
||||
function(){if(b.isAndroid())return 0;var a=j.plugins,c;try{if("undefined"!==a&&(c=a["Shockwave Flash"]))return parseInt(c.description.replace(/\D+(\d+)\..*/,"$1"))}catch(f){}if("undefined"!=typeof e.ActiveXObject)try{if(c=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))return parseInt(c.GetVariable("$version").split(" ")[1].split(",")[0])}catch(g){}return 0};b.getScriptPath=function(b){for(var a=h.getElementsByTagName("script"),c=0;c<a.length;c++){var g=a[c].src;if(g&&0<=g.indexOf(b))return g.substr(0,
|
||||
g.indexOf(b))}return""};b.deepReplaceKeyName=function(a,c,e){switch(d.utils.typeOf(a)){case "array":for(var g=0;g<a.length;g++)a[g]=d.utils.deepReplaceKeyName(a[g],c,e);break;case "object":b.foreach(a,function(b,g){var j;if(c instanceof Array&&e instanceof Array){if(c.length!=e.length)return;j=c}else j=[c];for(var f=b,h=0;h<j.length;h++)f=f.replace(RegExp(c[h],"g"),e[h]);a[f]=d.utils.deepReplaceKeyName(g,c,e);b!=f&&delete a[b]})}return a};var n=b.pluginPathType={ABSOLUTE:0,RELATIVE:1,CDN:2};b.getPluginPathType=
|
||||
function(a){if("string"==typeof a){a=a.split("?")[0];var c=a.indexOf("://");if(0<c)return n.ABSOLUTE;var e=a.indexOf("/");a=b.extension(a);return 0>c&&0>e&&(!a||!isNaN(a))?n.CDN:n.RELATIVE}};b.getPluginName=function(b){return b.replace(/^(.*\/)?([^-]*)-?.*\.(swf|js)$/,"$2")};b.getPluginVersion=function(b){return b.replace(/[^-]*-?([^\.]*).*$/,"$1")};b.isYouTube=function(b){return/^(http|\/\/).*(youtube\.com|youtu\.be)\/.+/.test(b)};b.youTubeID=function(b){try{return/v[=\/]([^?&]*)|youtu\.be\/([^?]*)|^([\w-]*)$/i.exec(b).slice(1).join("").replace("?",
|
||||
"")}catch(a){return""}};b.isRtmp=function(b,a){return 0==b.indexOf("rtmp")||"rtmp"==a};b.foreach=function(a,c){var e,g;for(e in a)"function"==b.typeOf(a.hasOwnProperty)?a.hasOwnProperty(e)&&(g=a[e],c(e,g)):(g=a[e],c(e,g))};b.isHTTPS=function(){return 0==e.location.href.indexOf("https")};b.repo=function(){var a="http://p.jwpcdn.com/"+d.version.split(/\W/).splice(0,2).join("/")+"/";try{b.isHTTPS()&&(a=a.replace("http://","https://ssl."))}catch(c){}return a};b.ajax=function(a,c,j){var g;0<a.indexOf("#")&&
|
||||
(a=a.replace(/#.*$/,""));var h;h=(h=a)&&0<=h.indexOf("://")&&h.split("/")[2]!=e.location.href.split("/")[2]?!0:!1;if(h&&b.exists(e.XDomainRequest))g=new XDomainRequest,g.onload=f(g,a,c,j),g.onerror=k(j,a,g);else if(b.exists(e.XMLHttpRequest)){var d=g=new XMLHttpRequest,t=a;g.onreadystatechange=function(){if(4===d.readyState)switch(d.status){case 200:f(d,t,c,j)();break;case 404:j("File not found")}};g.onerror=k(j,a)}else j&&j();try{g.open("GET",a,!0),g.send(null)}catch(n){j&&j(a)}return g};b.parseXML=
|
||||
function(b){try{var a;if(e.DOMParser){a=(new DOMParser).parseFromString(b,"text/xml");try{if("parsererror"==a.childNodes[0].firstChild.nodeName)return}catch(c){}}else a=new ActiveXObject("Microsoft.XMLDOM"),a.async="false",a.loadXML(b);return a}catch(g){}};b.filterPlaylist=function(a,c){for(var e=[],g=0;g<a.length;g++){var j=b.extend({},a[g]);j.sources=b.filterSources(j.sources);if(0<j.sources.length){for(var f=0;f<j.sources.length;f++){var h=j.sources[f];h.label||(h.label=f.toString())}e.push(j)}}if(c&&
|
||||
0==e.length)for(g=0;g<a.length;g++)if(j=b.extend({},a[g]),j.sources=b.filterSources(j.sources,!0),0<j.sources.length){for(f=0;f<j.sources.length;f++)h=j.sources[f],h.label||(h.label=f.toString());e.push(j)}return e};b.filterSources=function(a,c){var e,g,j=b.extensionmap;if(a){g=[];for(var f=0;f<a.length;f++){var h=a[f].type,n=a[f].file;n&&n.trim&&(n=n.trim());h||(h=j.extType(b.extension(n)),a[f].type=h);c?d.embed.flashCanPlay(n,h)&&(e||(e=h),h==e&&g.push(b.extend({},a[f]))):b.canPlayHTML5(h)&&(e||
|
||||
(e=h),h==e&&g.push(b.extend({},a[f])))}}return g};b.canPlayHTML5=function(a){if(b.isAndroid()&&("hls"==a||"m3u"==a||"m3u8"==a))return!1;a=b.extensionmap.types[a];return!!a&&!!d.vid.canPlayType&&d.vid.canPlayType(a)};b.seconds=function(a){a=a.replace(",",".");var b=a.split(":"),c=0;"s"==a.substr(-1)?c=Number(a.substr(0,a.length-1)):"m"==a.substr(-1)?c=60*Number(a.substr(0,a.length-1)):"h"==a.substr(-1)?c=3600*Number(a.substr(0,a.length-1)):1<b.length?(c=Number(b[b.length-1]),c+=60*Number(b[b.length-
|
||||
2]),3==b.length&&(c+=3600*Number(b[b.length-3]))):c=Number(a);return c};b.serialize=function(a){return null==a?null:"true"==a.toString().toLowerCase()?!0:"false"==a.toString().toLowerCase()?!1:isNaN(Number(a))||5<a.length||0==a.length?a:Number(a)}}(jwplayer),function(d){var a="video/",k=d.foreach,f={mp4:a+"mp4",vorbis:"audio/ogg",ogg:a+"ogg",webm:a+"webm",aac:"audio/mp4",mp3:"audio/mpeg",hls:"application/vnd.apple.mpegurl"},h={mp4:f.mp4,f4v:f.mp4,m4v:f.mp4,mov:f.mp4,m4a:f.aac,f4a:f.aac,aac:f.aac,
|
||||
mp3:f.mp3,ogv:f.ogg,ogg:f.vorbis,oga:f.vorbis,webm:f.webm,m3u8:f.hls,hls:f.hls},a="video",a={flv:a,f4v:a,mov:a,m4a:a,m4v:a,mp4:a,aac:a,f4a:a,mp3:"sound",smil:"rtmp",m3u8:"hls",hls:"hls"},e=d.extensionmap={};k(h,function(a,b){e[a]={html5:b}});k(a,function(a,b){e[a]||(e[a]={});e[a].flash=b});e.types=f;e.mimeType=function(a){var b;k(f,function(c,e){!b&&e==a&&(b=c)});return b};e.extType=function(a){return e.mimeType(h[a])}}(jwplayer.utils),function(d){var a=d.loaderstatus={NEW:0,LOADING:1,ERROR:2,COMPLETE:3},
|
||||
k=document;d.scriptloader=function(f){function h(){j=a.ERROR;c.sendEvent(b.ERROR)}function e(){j=a.COMPLETE;c.sendEvent(b.COMPLETE)}var j=a.NEW,b=jwplayer.events,c=new b.eventdispatcher;d.extend(this,c);this.load=function(){var c=d.scriptloader.loaders[f];if(c&&(c.getStatus()==a.NEW||c.getStatus()==a.LOADING))c.addEventListener(b.ERROR,h),c.addEventListener(b.COMPLETE,e);else if(d.scriptloader.loaders[f]=this,j==a.NEW){j=a.LOADING;var m=k.createElement("script");m.addEventListener?(m.onload=e,m.onerror=
|
||||
h):m.readyState&&(m.onreadystatechange=function(){("loaded"==m.readyState||"complete"==m.readyState)&&e()});k.getElementsByTagName("head")[0].appendChild(m);m.src=f}};this.getStatus=function(){return j}};d.scriptloader.loaders={}}(jwplayer.utils),function(d){d.trim=function(a){return a.replace(/^\s*/,"").replace(/\s*$/,"")};d.pad=function(a,d,f){for(f||(f="0");a.length<d;)a=f+a;return a};d.xmlAttribute=function(a,d){for(var f=0;f<a.attributes.length;f++)if(a.attributes[f].name&&a.attributes[f].name.toLowerCase()==
|
||||
d.toLowerCase())return a.attributes[f].value.toString();return""};d.extension=function(a){if(!a||"rtmp"==a.substr(0,4))return"";a=a.substring(a.lastIndexOf("/")+1,a.length).split("?")[0].split("#")[0];if(-1<a.lastIndexOf("."))return a.substr(a.lastIndexOf(".")+1,a.length).toLowerCase()};d.stringToColor=function(a){a=a.replace(/(#|0x)?([0-9A-F]{3,6})$/gi,"$2");3==a.length&&(a=a.charAt(0)+a.charAt(0)+a.charAt(1)+a.charAt(1)+a.charAt(2)+a.charAt(2));return parseInt(a,16)}}(jwplayer.utils),function(d){var a=
|
||||
"touchmove",k="touchstart";d.touch=function(f){function h(b){b.type==k?(c=!0,m=j(l.DRAG_START,b)):b.type==a?c&&(p||(e(l.DRAG_START,b,m),p=!0),e(l.DRAG,b)):(c&&(p?e(l.DRAG_END,b):(b.cancelBubble=!0,e(l.TAP,b))),c=p=!1,m=null)}function e(a,b,c){if(n[a]&&(b.preventManipulation&&b.preventManipulation(),b.preventDefault&&b.preventDefault(),b=c?c:j(a,b)))n[a](b)}function j(a,c){var e=null;c.touches&&c.touches.length?e=c.touches[0]:c.changedTouches&&c.changedTouches.length&&(e=c.changedTouches[0]);if(!e)return null;
|
||||
var j=b.getBoundingClientRect(),e={type:a,target:b,x:e.pageX-window.pageXOffset-j.left,y:e.pageY,deltaX:0,deltaY:0};a!=l.TAP&&m&&(e.deltaX=e.x-m.x,e.deltaY=e.y-m.y);return e}var b=f,c=!1,n={},m=null,p=!1,l=d.touchEvents;document.addEventListener(a,h);document.addEventListener("touchend",function(a){c&&p&&e(l.DRAG_END,a);c=p=!1;m=null});document.addEventListener("touchcancel",h);f.addEventListener(k,h);f.addEventListener("touchend",h);this.addEventListener=function(a,b){n[a]=b};this.removeEventListener=
|
||||
function(a){delete n[a]};return this}}(jwplayer.utils),function(d){d.touchEvents={DRAG:"jwplayerDrag",DRAG_START:"jwplayerDragStart",DRAG_END:"jwplayerDragEnd",TAP:"jwplayerTap"}}(jwplayer.utils),function(d){d.key=function(a){var k,f,h;this.edition=function(){return h&&h.getTime()<(new Date).getTime()?"invalid":k};this.token=function(){return f};d.exists(a)||(a="");try{a=d.tea.decrypt(a,"36QXq4W@GSBV^teR");var e=a.split("/");(k=e[0])?/^(free|pro|premium|ads)$/i.test(k)?(f=e[1],e[2]&&0<parseInt(e[2])&&
|
||||
(h=new Date,h.setTime(String(e[2])))):k="invalid":k="free"}catch(j){k="invalid"}}}(jwplayer.utils),function(d){var a=d.tea={};a.encrypt=function(h,e){if(0==h.length)return"";var j=a.strToLongs(f.encode(h));1>=j.length&&(j[1]=0);for(var b=a.strToLongs(f.encode(e).slice(0,16)),c=j.length,d=j[c-1],m=j[0],p,l=Math.floor(6+52/c),g=0;0<l--;){g+=2654435769;p=g>>>2&3;for(var q=0;q<c;q++)m=j[(q+1)%c],d=(d>>>5^m<<2)+(m>>>3^d<<4)^(g^m)+(b[q&3^p]^d),d=j[q]+=d}j=a.longsToStr(j);return k.encode(j)};a.decrypt=function(h,
|
||||
e){if(0==h.length)return"";for(var j=a.strToLongs(k.decode(h)),b=a.strToLongs(f.encode(e).slice(0,16)),c=j.length,d=j[c-1],m=j[0],p,l=2654435769*Math.floor(6+52/c);0!=l;){p=l>>>2&3;for(var g=c-1;0<=g;g--)d=j[0<g?g-1:c-1],d=(d>>>5^m<<2)+(m>>>3^d<<4)^(l^m)+(b[g&3^p]^d),m=j[g]-=d;l-=2654435769}j=a.longsToStr(j);j=j.replace(/\0+$/,"");return f.decode(j)};a.strToLongs=function(a){for(var e=Array(Math.ceil(a.length/4)),j=0;j<e.length;j++)e[j]=a.charCodeAt(4*j)+(a.charCodeAt(4*j+1)<<8)+(a.charCodeAt(4*j+
|
||||
2)<<16)+(a.charCodeAt(4*j+3)<<24);return e};a.longsToStr=function(a){for(var e=Array(a.length),j=0;j<a.length;j++)e[j]=String.fromCharCode(a[j]&255,a[j]>>>8&255,a[j]>>>16&255,a[j]>>>24&255);return e.join("")};var k={code:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\x3d",encode:function(a,e){var j,b,c,d,m=[],p="",l,g,q=k.code;g=("undefined"==typeof e?0:e)?f.encode(a):a;l=g.length%3;if(0<l)for(;3>l++;)p+="\x3d",g+="\x00";for(l=0;l<g.length;l+=3)j=g.charCodeAt(l),b=g.charCodeAt(l+
|
||||
1),c=g.charCodeAt(l+2),d=j<<16|b<<8|c,j=d>>18&63,b=d>>12&63,c=d>>6&63,d&=63,m[l/3]=q.charAt(j)+q.charAt(b)+q.charAt(c)+q.charAt(d);m=m.join("");return m=m.slice(0,m.length-p.length)+p},decode:function(a,e){e="undefined"==typeof e?!1:e;var j,b,c,d,m,p=[],l,g=k.code;l=e?f.decode(a):a;for(var q=0;q<l.length;q+=4)j=g.indexOf(l.charAt(q)),b=g.indexOf(l.charAt(q+1)),d=g.indexOf(l.charAt(q+2)),m=g.indexOf(l.charAt(q+3)),c=j<<18|b<<12|d<<6|m,j=c>>>16&255,b=c>>>8&255,c&=255,p[q/4]=String.fromCharCode(j,b,
|
||||
c),64==m&&(p[q/4]=String.fromCharCode(j,b)),64==d&&(p[q/4]=String.fromCharCode(j));d=p.join("");return e?f.decode(d):d}},f={encode:function(a){a=a.replace(/[\u0080-\u07ff]/g,function(a){a=a.charCodeAt(0);return String.fromCharCode(192|a>>6,128|a&63)});return a=a.replace(/[\u0800-\uffff]/g,function(a){a=a.charCodeAt(0);return String.fromCharCode(224|a>>12,128|a>>6&63,128|a&63)})},decode:function(a){a=a.replace(/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,function(a){a=(a.charCodeAt(0)&15)<<12|
|
||||
(a.charCodeAt(1)&63)<<6|a.charCodeAt(2)&63;return String.fromCharCode(a)});return a=a.replace(/[\u00c0-\u00df][\u0080-\u00bf]/g,function(a){a=(a.charCodeAt(0)&31)<<6|a.charCodeAt(1)&63;return String.fromCharCode(a)})}}}(jwplayer.utils),function(d){d.events={COMPLETE:"COMPLETE",ERROR:"ERROR",API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_SETUP_ERROR:"jwplayerSetupError",JWPLAYER_MEDIA_BEFOREPLAY:"jwplayerMediaBeforePlay",
|
||||
JWPLAYER_MEDIA_BEFORECOMPLETE:"jwplayerMediaBeforeComplete",JWPLAYER_COMPONENT_SHOW:"jwplayerComponentShow",JWPLAYER_COMPONENT_HIDE:"jwplayerComponentHide",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_SEEK:"jwplayerMediaSeek",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",
|
||||
JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_MEDIA_LEVELS:"jwplayerMediaLevels",JWPLAYER_MEDIA_LEVEL_CHANGED:"jwplayerMediaLevelChanged",JWPLAYER_CAPTIONS_CHANGED:"jwplayerCaptionsChanged",JWPLAYER_CAPTIONS_LIST:"jwplayerCaptionsList",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",state:{BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING"},JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem",JWPLAYER_PLAYLIST_COMPLETE:"jwplayerPlaylistComplete",
|
||||
JWPLAYER_DISPLAY_CLICK:"jwplayerViewClick",JWPLAYER_CONTROLS:"jwplayerViewControls",JWPLAYER_USER_ACTION:"jwplayerUserAction",JWPLAYER_INSTREAM_CLICK:"jwplayerInstreamClicked",JWPLAYER_INSTREAM_DESTROYED:"jwplayerInstreamDestroyed",JWPLAYER_AD_TIME:"jwplayerAdTime",JWPLAYER_AD_ERROR:"jwplayerAdError",JWPLAYER_AD_CLICK:"jwplayerAdClicked",JWPLAYER_AD_COMPLETE:"jwplayerAdComplete",JWPLAYER_AD_IMPRESSION:"jwplayerAdImpression",JWPLAYER_AD_COMPANIONS:"jwplayerAdCompanions"}}(jwplayer),function(d){var a=
|
||||
jwplayer.utils;d.eventdispatcher=function(d,f){var h,e;this.resetEventListeners=function(){h={};e=[]};this.resetEventListeners();this.addEventListener=function(e,b,c){try{a.exists(h[e])||(h[e]=[]),"string"==a.typeOf(b)&&(b=(new Function("return "+b))()),h[e].push({listener:b,count:c})}catch(f){a.log("error",f)}return!1};this.removeEventListener=function(e,b){if(h[e]){try{for(var c=0;c<h[e].length;c++)if(h[e][c].listener.toString()==b.toString()){h[e].splice(c,1);break}}catch(f){a.log("error",f)}return!1}};
|
||||
this.addGlobalListener=function(f,b){try{"string"==a.typeOf(f)&&(f=(new Function("return "+f))()),e.push({listener:f,count:b})}catch(c){a.log("error",c)}return!1};this.removeGlobalListener=function(f){if(f){try{for(var b=0;b<e.length;b++)if(e[b].listener.toString()==f.toString()){e.splice(b,1);break}}catch(c){a.log("error",c)}return!1}};this.sendEvent=function(j,b){a.exists(b)||(b={});a.extend(b,{id:d,version:jwplayer.version,type:j});f&&a.log(j,b);if("undefined"!=a.typeOf(h[j]))for(var c=0;c<h[j].length;c++){try{h[j][c].listener(b)}catch(n){a.log("There was an error while handling a listener: "+
|
||||
n.toString(),h[j][c].listener)}h[j][c]&&(1===h[j][c].count?delete h[j][c]:0<h[j][c].count&&(h[j][c].count-=1))}for(c=0;c<e.length;c++){try{e[c].listener(b)}catch(m){a.log("There was an error while handling a listener: "+m.toString(),e[c].listener)}e[c]&&(1===e[c].count?delete e[c]:0<e[c].count&&(e[c].count-=1))}}}}(jwplayer.events),function(d){var a={},k={};d.plugins=function(){};d.plugins.loadPlugins=function(f,h){k[f]=new d.plugins.pluginloader(new d.plugins.model(a),h);return k[f]};d.plugins.registerPlugin=
|
||||
function(f,h,e,j){var b=d.utils.getPluginName(f);a[b]||(a[b]=new d.plugins.plugin(f));a[b].registerPlugin(f,h,e,j)}}(jwplayer),function(d){d.plugins.model=function(a){this.addPlugin=function(k){var f=d.utils.getPluginName(k);a[f]||(a[f]=new d.plugins.plugin(k));return a[f]};this.getPlugins=function(){return a}}}(jwplayer),function(d){var a=jwplayer.utils,k=jwplayer.events;d.pluginmodes={FLASH:0,JAVASCRIPT:1,HYBRID:2};d.plugin=function(f){function h(){switch(a.getPluginPathType(f)){case a.pluginPathType.ABSOLUTE:return f;
|
||||
case a.pluginPathType.RELATIVE:return a.getAbsolutePath(f,window.location.href)}}function e(){p=setTimeout(function(){b=a.loaderstatus.COMPLETE;l.sendEvent(k.COMPLETE)},1E3)}function j(){b=a.loaderstatus.ERROR;l.sendEvent(k.ERROR)}var b=a.loaderstatus.NEW,c,n,m,p,l=new k.eventdispatcher;a.extend(this,l);this.load=function(){if(b==a.loaderstatus.NEW)if(0<f.lastIndexOf(".swf"))c=f,b=a.loaderstatus.COMPLETE,l.sendEvent(k.COMPLETE);else if(a.getPluginPathType(f)==a.pluginPathType.CDN)b=a.loaderstatus.COMPLETE,
|
||||
l.sendEvent(k.COMPLETE);else{b=a.loaderstatus.LOADING;var g=new a.scriptloader(h());g.addEventListener(k.COMPLETE,e);g.addEventListener(k.ERROR,j);g.load()}};this.registerPlugin=function(e,f,j,d){p&&(clearTimeout(p),p=void 0);m=f;j&&d?(c=d,n=j):"string"==typeof j?c=j:"function"==typeof j?n=j:!j&&!d&&(c=e);b=a.loaderstatus.COMPLETE;l.sendEvent(k.COMPLETE)};this.getStatus=function(){return b};this.getPluginName=function(){return a.getPluginName(f)};this.getFlashPath=function(){if(c)switch(a.getPluginPathType(c)){case a.pluginPathType.ABSOLUTE:return c;
|
||||
case a.pluginPathType.RELATIVE:return 0<f.lastIndexOf(".swf")?a.getAbsolutePath(c,window.location.href):a.getAbsolutePath(c,h())}return null};this.getJS=function(){return n};this.getTarget=function(){return m};this.getPluginmode=function(){if("undefined"!=typeof c&&"undefined"!=typeof n)return d.pluginmodes.HYBRID;if("undefined"!=typeof c)return d.pluginmodes.FLASH;if("undefined"!=typeof n)return d.pluginmodes.JAVASCRIPT};this.getNewInstance=function(a,b,c){return new n(a,b,c)};this.getURL=function(){return f}}}(jwplayer.plugins),
|
||||
function(d){var a=d.utils,k=d.events,f=a.foreach;d.plugins.pluginloader=function(h,e){function j(){m?g.sendEvent(k.ERROR,{message:p}):n||(n=!0,c=a.loaderstatus.COMPLETE,g.sendEvent(k.COMPLETE))}function b(){l||j();if(!n&&!m){var b=0,c=h.getPlugins();a.foreach(l,function(e){e=a.getPluginName(e);var f=c[e];e=f.getJS();var g=f.getTarget(),f=f.getStatus();if(f==a.loaderstatus.LOADING||f==a.loaderstatus.NEW)b++;else if(e&&(!g||parseFloat(g)>parseFloat(d.version)))m=!0,p="Incompatible player version",j()});
|
||||
0==b&&j()}}var c=a.loaderstatus.NEW,n=!1,m=!1,p,l=e,g=new k.eventdispatcher;a.extend(this,g);this.setupPlugins=function(b,c,e){var g={length:0,plugins:{}},j=0,d={},n=h.getPlugins();f(c.plugins,function(f,h){var k=a.getPluginName(f),l=n[k],m=l.getFlashPath(),q=l.getJS(),p=l.getURL();m&&(g.plugins[m]=a.extend({},h),g.plugins[m].pluginmode=l.getPluginmode(),g.length++);try{if(q&&c.plugins&&c.plugins[p]){var A=document.createElement("div");A.id=b.id+"_"+k;A.style.position="absolute";A.style.top=0;A.style.zIndex=
|
||||
j+10;d[k]=l.getNewInstance(b,a.extend({},c.plugins[p]),A);j++;b.onReady(e(d[k],A,!0));b.onResize(e(d[k],A))}}catch(D){a.log("ERROR: Failed to load "+k+".")}});b.plugins=d;return g};this.load=function(){if(!(a.exists(e)&&"object"!=a.typeOf(e))){c=a.loaderstatus.LOADING;f(e,function(c){a.exists(c)&&(c=h.addPlugin(c),c.addEventListener(k.COMPLETE,b),c.addEventListener(k.ERROR,q))});var g=h.getPlugins();f(g,function(a,b){b.load()})}b()};var q=this.pluginFailed=function(){m||(m=!0,p="File not found",j())};
|
||||
this.getStatus=function(){return c}}}(jwplayer),function(){jwplayer.parsers={localName:function(d){return d?d.localName?d.localName:d.baseName?d.baseName:"":""},textContent:function(d){return d?d.textContent?d.textContent:d.text?d.text:"":""},getChildNode:function(d,a){return d.childNodes[a]},numChildren:function(d){return d.childNodes?d.childNodes.length:0}}}(jwplayer),function(d){var a=d.parsers;(a.jwparser=function(){}).parseEntry=function(k,f){for(var h=[],e=[],j=d.utils.xmlAttribute,b=0;b<k.childNodes.length;b++){var c=
|
||||
k.childNodes[b];if("jwplayer"==c.prefix){var n=a.localName(c);"source"==n?(delete f.sources,h.push({file:j(c,"file"),"default":j(c,"default"),label:j(c,"label"),type:j(c,"type")})):"track"==n?(delete f.tracks,e.push({file:j(c,"file"),"default":j(c,"default"),kind:j(c,"kind"),label:j(c,"label")})):(f[n]=d.utils.serialize(a.textContent(c)),"file"==n&&f.sources&&delete f.sources)}f.file||(f.file=f.link)}if(h.length){f.sources=[];for(b=0;b<h.length;b++)0<h[b].file.length&&(h[b]["default"]="true"==h[b]["default"]?
|
||||
!0:!1,h[b].label.length||delete h[b].label,f.sources.push(h[b]))}if(e.length){f.tracks=[];for(b=0;b<e.length;b++)0<e[b].file.length&&(e[b]["default"]="true"==e[b]["default"]?!0:!1,e[b].kind=!e[b].kind.length?"captions":e[b].kind,e[b].label.length||delete e[b].label,f.tracks.push(e[b]))}return f}}(jwplayer),function(d){var a=jwplayer.utils,k=a.xmlAttribute,f=d.localName,h=d.textContent,e=d.numChildren,j=d.mediaparser=function(){};j.parseGroup=function(b,c){var d,m,p=[];for(m=0;m<e(b);m++)if(d=b.childNodes[m],
|
||||
"media"==d.prefix&&f(d))switch(f(d).toLowerCase()){case "content":k(d,"duration")&&(c.duration=a.seconds(k(d,"duration")));0<e(d)&&(c=j.parseGroup(d,c));k(d,"url")&&(c.sources||(c.sources=[]),c.sources.push({file:k(d,"url"),type:k(d,"type"),width:k(d,"width"),label:k(d,"label")}));break;case "title":c.title=h(d);break;case "description":c.description=h(d);break;case "guid":c.mediaid=h(d);break;case "thumbnail":c.image||(c.image=k(d,"url"));break;case "group":j.parseGroup(d,c);break;case "subtitle":var l=
|
||||
{};l.file=k(d,"url");l.kind="captions";if(0<k(d,"lang").length){var g=l;d=k(d,"lang");var q={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish"};d=q[d]?q[d]:d;g.label=d}p.push(l)}c.hasOwnProperty("tracks")||(c.tracks=[]);for(m=0;m<p.length;m++)c.tracks.push(p[m]);return c}}(jwplayer.parsers),function(d){function a(a){for(var c={},e=0;e<a.childNodes.length;e++){var h=a.childNodes[e],p=j(h);if(p)switch(p.toLowerCase()){case "enclosure":c.file=
|
||||
k.xmlAttribute(h,"url");break;case "title":c.title=f(h);break;case "guid":c.mediaid=f(h);break;case "pubdate":c.date=f(h);break;case "description":c.description=f(h);break;case "link":c.link=f(h);break;case "category":c.tags=c.tags?c.tags+f(h):f(h)}}c=d.mediaparser.parseGroup(a,c);c=d.jwparser.parseEntry(a,c);return new jwplayer.playlist.item(c)}var k=jwplayer.utils,f=d.textContent,h=d.getChildNode,e=d.numChildren,j=d.localName;d.rssparser={};d.rssparser.parse=function(b){for(var c=[],f=0;f<e(b);f++){var d=
|
||||
h(b,f);if("channel"==j(d).toLowerCase())for(var k=0;k<e(d);k++){var l=h(d,k);"item"==j(l).toLowerCase()&&c.push(a(l))}}return c}}(jwplayer.parsers),function(d){d.playlist=function(a){var k=[];if("array"==d.utils.typeOf(a))for(var f=0;f<a.length;f++)k.push(new d.playlist.item(a[f]));else k.push(new d.playlist.item(a));return k}}(jwplayer),function(d){var a=d.item=function(k){var f=jwplayer.utils,h=f.extend({},a.defaults,k);h.tracks=k&&f.exists(k.tracks)?k.tracks:[];0==h.sources.length&&(h.sources=
|
||||
[new d.source(h)]);for(var e=0;e<h.sources.length;e++){var j=h.sources[e]["default"];h.sources[e]["default"]=j?"true"==j.toString():!1;h.sources[e]=new d.source(h.sources[e])}if(h.captions&&!f.exists(k.tracks)){for(k=0;k<h.captions.length;k++)h.tracks.push(h.captions[k]);delete h.captions}for(e=0;e<h.tracks.length;e++)h.tracks[e]=new d.track(h.tracks[e]);return h};a.defaults={description:"",image:"",mediaid:"",title:"",sources:[],tracks:[]}}(jwplayer.playlist),function(d){var a=jwplayer,k=a.utils,
|
||||
f=a.events,h=a.parsers;d.loader=function(){function a(e){try{var j=e.responseXML.childNodes;e="";for(var k=0;k<j.length&&!(e=j[k],8!=e.nodeType);k++);"xml"==h.localName(e)&&(e=e.nextSibling);if("rss"!=h.localName(e))b("Not a valid RSS feed");else{var l=new d(h.rssparser.parse(e));c.sendEvent(f.JWPLAYER_PLAYLIST_LOADED,{playlist:l})}}catch(g){b()}}function j(a){b(a.match(/invalid/i)?"Not a valid RSS feed":"")}function b(a){c.sendEvent(f.JWPLAYER_ERROR,{message:a?a:"Error loading file"})}var c=new f.eventdispatcher;
|
||||
k.extend(this,c);this.load=function(b){k.ajax(b,a,j)}}}(jwplayer.playlist),function(d){var a=jwplayer.utils,k={file:void 0,label:void 0,type:void 0,"default":void 0};d.source=function(f){var d=a.extend({},k);a.foreach(k,function(e){a.exists(f[e])&&(d[e]=f[e],delete f[e])});d.type&&0<d.type.indexOf("/")&&(d.type=a.extensionmap.mimeType(d.type));"m3u8"==d.type&&(d.type="hls");"smil"==d.type&&(d.type="rtmp");return d}}(jwplayer.playlist),function(d){var a=jwplayer.utils,k={file:void 0,label:void 0,kind:"captions",
|
||||
"default":!1};d.track=function(d){var h=a.extend({},k);d||(d={});a.foreach(k,function(e){a.exists(d[e])&&(h[e]=d[e],delete d[e])});return h}}(jwplayer.playlist),function(d){var a=d.utils,k=d.events,f=!0,h=!1,e=document,j=d.embed=function(b){function c(b,c){a.foreach(c,function(a,c){"function"==typeof b[a]&&b[a].call(b,c)})}function n(){if(r.sitecatalyst)try{null!=s&&s.hasOwnProperty("Media")||l()}catch(e){l();return}if("array"==a.typeOf(r.playlist)&&2>r.playlist.length&&(0==r.playlist.length||!r.playlist[0].sources||
|
||||
0==r.playlist[0].sources.length))p();else if(!z)if("string"==a.typeOf(r.playlist)){var g=new d.playlist.loader;g.addEventListener(k.JWPLAYER_PLAYLIST_LOADED,function(a){r.playlist=a.playlist;z=h;n()});g.addEventListener(k.JWPLAYER_ERROR,function(a){z=h;p(a)});z=f;g.load(r.playlist)}else if(y.getStatus()==a.loaderstatus.COMPLETE){for(g=0;g<r.modes.length;g++)if(r.modes[g].type&&j[r.modes[g].type]){var u=a.extend({},r),w=new j[r.modes[g].type](t,r.modes[g],u,y,b);if(w.supportsConfig())return w.addEventListener(k.ERROR,
|
||||
m),w.embed(),c(b,u.events),b}if(r.fallback){var x="No suitable players found and fallback enabled";C=setTimeout(function(){q(x,f)},10);a.log(x);new j.download(t,r,p)}else x="No suitable players found and fallback disabled",q(x,h),a.log(x),t.parentNode.replaceChild(v,t)}}function m(a){g(t,B+a.message)}function p(a){a&&a.message?g(t,"Error loading playlist: "+a.message):g(t,B+"No playable sources found")}function l(){g(t,"Adobe SiteCatalyst Error: Could not find Media Module")}function g(b,c){if(r.fallback){var e=
|
||||
b.style;e.backgroundColor="#000";e.color="#FFF";e.width=a.styleDimension(r.width);e.height=a.styleDimension(r.height);e.display="table";e.opacity=1;var e=document.createElement("p"),d=e.style;d.verticalAlign="middle";d.textAlign="center";d.display="table-cell";d.font="15px/20px Arial, Helvetica, sans-serif";e.innerHTML=c.replace(":",":\x3cbr\x3e");b.innerHTML="";b.appendChild(e);q(c,f)}else q(c,h)}function q(a,c){C&&(clearTimeout(C),C=null);b.dispatchEvent(k.JWPLAYER_SETUP_ERROR,{message:a,fallback:c})}
|
||||
var r=new j.config(b.config),t,u,v,w=r.width,x=r.height,B="Error loading player: ",y=d.plugins.loadPlugins(b.id,r.plugins),z=h,C=null;r.fallbackDiv&&(v=r.fallbackDiv,delete r.fallbackDiv);r.id=b.id;u=e.getElementById(b.id);r.aspectratio?b.config.aspectratio=r.aspectratio:delete b.config.aspectratio;t=e.createElement("div");t.id=u.id;t.style.width=0<w.toString().indexOf("%")?w:w+"px";t.style.height=0<x.toString().indexOf("%")?x:x+"px";u.parentNode.replaceChild(t,u);d.embed.errorScreen=g;y.addEventListener(k.COMPLETE,
|
||||
n);y.addEventListener(k.ERROR,function(a){g(t,"Could not load plugins: "+a.message)});y.load();return b}}(jwplayer),function(d){function a(a){if(a.playlist)for(var d=0;d<a.playlist.length;d++)a.playlist[d]=new h(a.playlist[d]);else{var b={};f.foreach(h.defaults,function(c){k(a,b,c)});b.sources||(a.levels?(b.sources=a.levels,delete a.levels):(d={},k(a,d,"file"),k(a,d,"type"),b.sources=d.file?[d]:[]));a.playlist=[new h(b)]}}function k(a,d,b){f.exists(a[b])&&(d[b]=a[b],delete a[b])}var f=d.utils,h=d.playlist.item;
|
||||
(d.embed.config=function(e){var j={fallback:!0,height:270,primary:"html5",width:480,base:e.base?e.base:f.getScriptPath("jwplayer.js"),aspectratio:""};e=f.extend(j,d.defaults,e);var j={type:"html5",src:e.base+"jwplayer.html5.js"},b={type:"flash",src:e.base+"jwplayer.flash.swf"};e.modes="flash"==e.primary?[b,j]:[j,b];e.listbar&&(e.playlistsize=e.listbar.size,e.playlistposition=e.listbar.position,e.playlistlayout=e.listbar.layout);e.flashplayer&&(b.src=e.flashplayer);e.html5player&&(j.src=e.html5player);
|
||||
a(e);b=e.aspectratio;if("string"!=typeof b||!f.exists(b))j=0;else{var c=b.indexOf(":");-1==c?j=0:(j=parseFloat(b.substr(0,c)),b=parseFloat(b.substr(c+1)),j=0>=j||0>=b?0:100*(b/j)+"%")}-1==e.width.toString().indexOf("%")?delete e.aspectratio:j?e.aspectratio=j:delete e.aspectratio;return e}).addConfig=function(e,d){a(d);return f.extend(e,d)}}(jwplayer),function(d){var a=d.utils,k=document;d.embed.download=function(d,h,e){function j(b,c){for(var e=k.querySelectorAll(b),d=0;d<e.length;d++)a.foreach(c,
|
||||
function(a,b){e[d].style[a]=b})}function b(a,b,c){a=k.createElement(a);b&&(a.className="jwdownload"+b);c&&c.appendChild(a);return a}var c=a.extend({},h),n=c.width?c.width:480,m=c.height?c.height:320,p;h=h.logo?h.logo:{prefix:a.repo(),file:"logo.png",margin:10};var l,g,q,c=c.playlist,r,t=["mp4","aac","mp3"];if(c&&c.length){r=c[0];p=r.sources;for(c=0;c<p.length;c++){var u=p[c],v=u.type?u.type:a.extensionmap.extType(a.extension(u.file));u.file&&a.foreach(t,function(b){v==t[b]?(l=u.file,g=r.image):a.isYouTube(u.file)&&
|
||||
(q=u.file)})}l?(p=l,e=g,d&&(c=b("a","display",d),b("div","icon",c),b("div","logo",c),p&&c.setAttribute("href",a.getAbsolutePath(p))),c="#"+d.id+" .jwdownload",d.style.width="",d.style.height="",j(c+"display",{width:a.styleDimension(Math.max(320,n)),height:a.styleDimension(Math.max(180,m)),background:"black center no-repeat "+(e?"url("+e+")":""),backgroundSize:"contain",position:"relative",border:"none",display:"block"}),j(c+"display div",{position:"absolute",width:"100%",height:"100%"}),j(c+"logo",
|
||||
{top:h.margin+"px",right:h.margin+"px",background:"top right no-repeat url("+h.prefix+h.file+")"}),j(c+"icon",{background:"center no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgNJREFUeNrs28lqwkAYB/CZqNVDDj2r6FN41QeIy8Fe+gj6BL275Q08u9FbT8ZdwVfotSBYEPUkxFOoks4EKiJdaDuTjMn3wWBO0V/+sySR8SNSqVRKIR8qaXHkzlqS9jCfzzWcTCYp9hF5o+59sVjsiRzcegSckFzcjT+ruN80TeSlAjCAAXzdJSGPFXRpAAMYwACGZQkSdhG4WCzehMNhqV6vG6vVSrirKVEw66YoSqDb7cqlUilE8JjHd/y1MQefVzqdDmiaJpfLZWHgXMHn8F6vJ1cqlVAkEsGuAn83J4gAd2RZymQygX6/L1erVQt+9ZPWb+CDwcCC2zXGJaewl/DhcHhK3DVj+KfKZrMWvFarcYNLomAv4aPRSFZVlTlcSPA5fDweW/BoNIqFnKV53JvncjkLns/n/cLdS+92O7RYLLgsKfv9/t8XlDn4eDyiw+HA9Jyz2eyt0+kY2+3WFC5hluej0Ha7zQQq9PPwdDq1Et1sNsx/nFBgCqWJ8oAK1aUptNVqcYWewE4nahfU0YQnk4ntUEfGMIU2m01HoLaCKbTRaDgKtaVLk9tBYaBcE/6Artdr4RZ5TB6/dC+9iIe/WgAMYADDpAUJAxjAAAYwgGFZgoS/AtNNTF7Z2bL0BYPBV3Jw5xFwwWcYxgtBP5OkE8i9G7aWGOOCruvauwADALMLMEbKf4SdAAAAAElFTkSuQmCC)"})):
|
||||
q?(h=q,d=b("embed","",d),d.src="http://www.youtube.com/v/"+a.youTubeID(h),d.type="application/x-shockwave-flash",d.width=n,d.height=m):e()}}}(jwplayer),function(d){var a=d.utils,k=d.events,f={};(d.embed.flash=function(e,j,b,c,n){function m(a,b,c){var e=document.createElement("param");e.setAttribute("name",b);e.setAttribute("value",c);a.appendChild(e)}function p(a,b,c){return function(){try{c&&document.getElementById(n.id+"_wrapper").appendChild(b);var e=document.getElementById(n.id).getPluginConfig("display");
|
||||
"function"==typeof a.resize&&a.resize(e.width,e.height);b.style.left=e.x;b.style.top=e.h}catch(d){}}}function l(b){if(!b)return{};var c={},e=[];a.foreach(b,function(b,d){var g=a.getPluginName(b);e.push(b);a.foreach(d,function(a,b){c[g+"."+a]=b})});c.plugins=e.join(",");return c}var g=new d.events.eventdispatcher,q=a.flashVersion();a.extend(this,g);this.embed=function(){b.id=n.id;if(10>q)return g.sendEvent(k.ERROR,{message:"Flash version must be 10.0 or greater"}),!1;var d,h,u=n.config.listbar,v=a.extend({},
|
||||
b);if(e.id+"_wrapper"==e.parentNode.id)d=document.getElementById(e.id+"_wrapper");else{d=document.createElement("div");h=document.createElement("div");h.style.display="none";h.id=e.id+"_aspect";d.id=e.id+"_wrapper";d.style.position="relative";d.style.display="block";d.style.width=a.styleDimension(v.width);d.style.height=a.styleDimension(v.height);if(n.config.aspectratio){var w=parseFloat(n.config.aspectratio);h.style.display="block";h.style.marginTop=n.config.aspectratio;d.style.height="auto";d.style.display=
|
||||
"inline-block";u&&("bottom"==u.position?h.style.paddingBottom=u.size+"px":"right"==u.position&&(h.style.marginBottom=-1*u.size*(w/100)+"px"))}e.parentNode.replaceChild(d,e);d.appendChild(e);d.appendChild(h)}d=c.setupPlugins(n,v,p);0<d.length?a.extend(v,l(d.plugins)):delete v.plugins;"undefined"!=typeof v["dock.position"]&&"false"==v["dock.position"].toString().toLowerCase()&&(v.dock=v["dock.position"],delete v["dock.position"]);d=v.wmode?v.wmode:v.height&&40>=v.height?"transparent":"opaque";h="height width modes events primary base fallback volume".split(" ");
|
||||
for(u=0;u<h.length;u++)delete v[h[u]];h=a.getCookies();a.foreach(h,function(a,b){"undefined"==typeof v[a]&&(v[a]=b)});h=window.location.href.split("/");h.splice(h.length-1,1);h=h.join("/");v.base=h+"/";f[e.id]=v;a.isIE()?(h='\x3cobject classid\x3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" " width\x3d"100%" height\x3d"100%"id\x3d"'+e.id+'" name\x3d"'+e.id+'" tabindex\x3d0""\x3e',h+='\x3cparam name\x3d"movie" value\x3d"'+j.src+'"\x3e',h+='\x3cparam name\x3d"allowfullscreen" value\x3d"true"\x3e\x3cparam name\x3d"allowscriptaccess" value\x3d"always"\x3e',
|
||||
h+='\x3cparam name\x3d"seamlesstabbing" value\x3d"true"\x3e',h+='\x3cparam name\x3d"wmode" value\x3d"'+d+'"\x3e',h+='\x3cparam name\x3d"bgcolor" value\x3d"#000000"\x3e',h+="\x3c/object\x3e",e.outerHTML=h,d=document.getElementById(e.id)):(h=document.createElement("object"),h.setAttribute("type","application/x-shockwave-flash"),h.setAttribute("data",j.src),h.setAttribute("width","100%"),h.setAttribute("height","100%"),h.setAttribute("bgcolor","#000000"),h.setAttribute("id",e.id),h.setAttribute("name",
|
||||
e.id),h.setAttribute("tabindex",0),m(h,"allowfullscreen","true"),m(h,"allowscriptaccess","always"),m(h,"seamlesstabbing","true"),m(h,"wmode",d),e.parentNode.replaceChild(h,e),d=h);n.config.aspectratio&&(d.style.position="absolute");n.container=d;n.setPlayer(d,"flash")};this.supportsConfig=function(){if(q)if(b){if("string"==a.typeOf(b.playlist))return!0;try{var c=b.playlist[0].sources;if("undefined"==typeof c)return!0;for(var d=0;d<c.length;d++)if(c[d].file&&h(c[d].file,c[d].type))return!0}catch(e){}}else return!0;
|
||||
return!1}}).getVars=function(a){return f[a]};var h=d.embed.flashCanPlay=function(d,f){if(a.isYouTube(d)||a.isRtmp(d,f)||"hls"==f)return!0;var b=a.extensionmap[f?f:a.extension(d)];return!b?!1:!!b.flash}}(jwplayer),function(d){var a=d.utils,k=a.extensionmap,f=d.events;d.embed.html5=function(h,e,j,b,c){function n(a,b,c){return function(){try{var d=document.querySelector("#"+h.id+" .jwmain");c&&d.appendChild(b);"function"==typeof a.resize&&(a.resize(d.clientWidth,d.clientHeight),setTimeout(function(){a.resize(d.clientWidth,
|
||||
d.clientHeight)},400));b.left=d.style.left;b.top=d.style.top}catch(e){}}}function m(a){p.sendEvent(a.type,{message:"HTML5 player not found"})}var p=this,l=new f.eventdispatcher;a.extend(p,l);p.embed=function(){if(d.html5){b.setupPlugins(c,j,n);h.innerHTML="";var g=d.utils.extend({},j);delete g.volume;g=new d.html5.player(g);c.container=document.getElementById(c.id);c.setPlayer(g,"html5")}else g=new a.scriptloader(e.src),g.addEventListener(f.ERROR,m),g.addEventListener(f.COMPLETE,p.embed),g.load()};
|
||||
p.supportsConfig=function(){if(d.vid.canPlayType)try{if("string"==a.typeOf(j.playlist))return!0;for(var b=j.playlist[0].sources,c=0;c<b.length;c++){var e;var f=b[c].file,h=b[c].type;if(null!==navigator.userAgent.match(/BlackBerry/i)||a.isAndroid()&&("m3u"==a.extension(f)||"m3u8"==a.extension(f))||a.isRtmp(f,h))e=!1;else{var l=k[h?h:a.extension(f)],m;if(!l||l.flash&&!l.html5)m=!1;else{var n=l.html5,p=d.vid;if(n)try{m=p.canPlayType(n)?!0:!1}catch(y){m=!1}else m=!0}e=m}if(e)return!0}}catch(z){}return!1}}}(jwplayer),
|
||||
function(d){var a=d.embed,k=d.utils,f=k.extend(function(f){var e=k.repo(),j=k.extend({},d.defaults),b=k.extend({},j,f.config),c=f.config,n=b.plugins,m=b.analytics,p=e+"jwpsrv.js",l=e+"sharing.js",g=e+"related.js",q=e+"gapro.js",j=d.key?d.key:j.key,r=(new d.utils.key(j)).edition(),n=n?n:{};"ads"==r&&b.advertising&&(b.advertising.client.match(".js$|.swf$")?n[b.advertising.client]=b.advertising:n[e+b.advertising.client+".js"]=b.advertising);delete c.advertising;c.key=j;b.analytics&&(b.analytics.client&&
|
||||
b.analytics.client.match(".js$|.swf$"))&&(p=b.analytics.client);delete c.analytics;if("free"==r||!m||!1!==m.enabled)n[p]=m?m:{};delete n.sharing;delete n.related;switch(r){case "premium":case "ads":b.related&&(b.related.client&&b.related.client.match(".js$|.swf$")&&(g=b.related.client),n[g]=b.related),b.ga&&(b.ga.client&&b.ga.client.match(".js$|.swf$")&&(q=b.ga.client),n[q]=b.ga),c.sitecatalyst&&new d.embed.sitecatalyst(f);case "pro":b.sharing&&(b.sharing.client&&b.sharing.client.match(".js$|.swf$")&&
|
||||
(l=b.sharing.client),n[l]=b.sharing),b.skin&&(c.skin=b.skin.replace(/^(beelden|bekle|five|glow|modieus|roundster|stormtrooper|vapor)$/i,k.repo()+"skins/$1.xml"))}c.plugins=n;return new a(f)},a);d.embed=f}(jwplayer),function(d){var a=jwplayer.utils;d.sitecatalyst=function(d){function f(b){c.debug&&a.log(b)}function h(a){a=a.split("/");a=a[a.length-1];a=a.split("?");return a[0]}function e(){if(!g){g=!0;var a=b.getPosition();f("stop: "+m+" : "+a);s.Media.stop(m,a)}}function j(){q||(e(),q=!0,f("close: "+
|
||||
m),s.Media.close(m),r=!0,l=0)}var b=d,c=a.extend({},b.config.sitecatalyst),n={onPlay:function(){if(!r){var a=b.getPosition();g=!1;f("play: "+m+" : "+a);s.Media.play(m,a)}},onPause:e,onBuffer:e,onIdle:j,onPlaylistItem:function(d){try{r=!0;j();l=0;var e;if(c.mediaName)e=c.mediaName;else{var g=b.getPlaylistItem(d.index);e=g.title?g.title:g.file?h(g.file):g.sources&&g.sources.length?h(g.sources[0].file):""}m=e;p=c.playerName?c.playerName:b.id}catch(f){a.log(f)}},onTime:function(){if(r){var a=b.getDuration();
|
||||
if(-1==a)return;q=g=r=!1;f("open: "+m+" : "+a+" : "+p);s.Media.open(m,a,p);f("play: "+m+" : 0");s.Media.play(m,0)}a=b.getPosition();if(3<=Math.abs(a-l)){var c=l;f("seek: "+c+" to "+a);f("stop: "+m+" : "+c);s.Media.stop(m,c);f("play: "+m+" : "+a);s.Media.play(m,a)}l=a},onComplete:j},m,p,l,g=!0,q=!0,r;a.foreach(n,function(a){b[a](n[a])})}}(jwplayer.embed),function(d){var a=[],k=d.utils,f=d.events,h=f.state,e=document,j=d.api=function(a){function c(a,b){return function(c){return b(a,c)}}function n(a,
|
||||
b){r[a]||(r[a]=[],p(f.JWPLAYER_PLAYER_STATE,function(b){var c=b.newstate;b=b.oldstate;if(c==a){var d=r[c];if(d)for(var e=0;e<d.length;e++)"function"==typeof d[e]&&d[e].call(this,{oldstate:b,newstate:c})}}));r[a].push(b);return g}function m(a,b){try{a.jwAddEventListener(b,'function(dat) { jwplayer("'+g.id+'").dispatchEvent("'+b+'", dat); }')}catch(c){k.log("Could not add internal listener")}}function p(a,b){q[a]||(q[a]=[],t&&u&&m(t,a));q[a].push(b);return g}function l(){if(u){for(var a=arguments[0],
|
||||
b=[],c=1;c<arguments.length;c++)b.push(arguments[c]);if("undefined"!=typeof t&&"function"==typeof t[a])switch(b.length){case 4:return t[a](b[0],b[1],b[2],b[3]);case 3:return t[a](b[0],b[1],b[2]);case 2:return t[a](b[0],b[1]);case 1:return t[a](b[0]);default:return t[a]()}return null}v.push(arguments)}var g=this,q={},r={},t=void 0,u=!1,v=[],w=void 0,x={},B={};g.container=a;g.id=a.id;g.getBuffer=function(){return l("jwGetBuffer")};g.getContainer=function(){return g.container};g.addButton=function(a,
|
||||
b,c,d){try{B[d]=c,l("jwDockAddButton",a,b,"jwplayer('"+g.id+"').callback('"+d+"')",d)}catch(e){k.log("Could not add dock button"+e.message)}};g.removeButton=function(a){l("jwDockRemoveButton",a)};g.callback=function(a){if(B[a])B[a]()};g.forceState=function(a){l("jwForceState",a);return g};g.releaseState=function(){return l("jwReleaseState")};g.getDuration=function(){return l("jwGetDuration")};g.getFullscreen=function(){return l("jwGetFullscreen")};g.getHeight=function(){return l("jwGetHeight")};g.getLockState=
|
||||
function(){return l("jwGetLockState")};g.getMeta=function(){return g.getItemMeta()};g.getMute=function(){return l("jwGetMute")};g.getPlaylist=function(){var a=l("jwGetPlaylist");"flash"==g.renderingMode&&k.deepReplaceKeyName(a,["__dot__","__spc__","__dsh__","__default__"],["."," ","-","default"]);return a};g.getPlaylistItem=function(a){k.exists(a)||(a=g.getPlaylistIndex());return g.getPlaylist()[a]};g.getPlaylistIndex=function(){return l("jwGetPlaylistIndex")};g.getPosition=function(){return l("jwGetPosition")};
|
||||
g.getRenderingMode=function(){return g.renderingMode};g.getState=function(){return l("jwGetState")};g.getVolume=function(){return l("jwGetVolume")};g.getWidth=function(){return l("jwGetWidth")};g.setFullscreen=function(a){k.exists(a)?l("jwSetFullscreen",a):l("jwSetFullscreen",!l("jwGetFullscreen"));return g};g.setMute=function(a){k.exists(a)?l("jwSetMute",a):l("jwSetMute",!l("jwGetMute"));return g};g.lock=function(){return g};g.unlock=function(){return g};g.load=function(a){l("jwLoad",a);return g};
|
||||
g.playlistItem=function(a){l("jwPlaylistItem",parseInt(a));return g};g.playlistPrev=function(){l("jwPlaylistPrev");return g};g.playlistNext=function(){l("jwPlaylistNext");return g};g.resize=function(a,b){if("flash"!=g.renderingMode){var c=document.getElementById(g.id);c.className=c.className.replace(/\s+aspectMode/,"");c.style.display="block";l("jwResize",a,b)}else{var c=e.getElementById(g.id+"_wrapper"),d=e.getElementById(g.id+"_aspect");d&&(d.style.display="none");c&&(c.style.display="block",c.style.width=
|
||||
k.styleDimension(a),c.style.height=k.styleDimension(b))}return g};g.play=function(a){"undefined"==typeof a?(a=g.getState(),a==h.PLAYING||a==h.BUFFERING?l("jwPause"):l("jwPlay")):l("jwPlay",a);return g};g.pause=function(a){"undefined"==typeof a?(a=g.getState(),a==h.PLAYING||a==h.BUFFERING?l("jwPause"):l("jwPlay")):l("jwPause",a);return g};g.stop=function(){l("jwStop");return g};g.seek=function(a){l("jwSeek",a);return g};g.setVolume=function(a){l("jwSetVolume",a);return g};g.loadInstream=function(a,
|
||||
b){return w=new j.instream(this,t,a,b)};g.getQualityLevels=function(){return l("jwGetQualityLevels")};g.getCurrentQuality=function(){return l("jwGetCurrentQuality")};g.setCurrentQuality=function(a){l("jwSetCurrentQuality",a)};g.getCaptionsList=function(){return l("jwGetCaptionsList")};g.getCurrentCaptions=function(){return l("jwGetCurrentCaptions")};g.setCurrentCaptions=function(a){l("jwSetCurrentCaptions",a)};g.getControls=function(){return l("jwGetControls")};g.getSafeRegion=function(){return l("jwGetSafeRegion")};
|
||||
g.setControls=function(a){l("jwSetControls",a)};g.destroyPlayer=function(){l("jwPlayerDestroy")};g.playAd=function(a){l("jwPlayAd",a)};var y={onBufferChange:f.JWPLAYER_MEDIA_BUFFER,onBufferFull:f.JWPLAYER_MEDIA_BUFFER_FULL,onError:f.JWPLAYER_ERROR,onSetupError:f.JWPLAYER_SETUP_ERROR,onFullscreen:f.JWPLAYER_FULLSCREEN,onMeta:f.JWPLAYER_MEDIA_META,onMute:f.JWPLAYER_MEDIA_MUTE,onPlaylist:f.JWPLAYER_PLAYLIST_LOADED,onPlaylistItem:f.JWPLAYER_PLAYLIST_ITEM,onPlaylistComplete:f.JWPLAYER_PLAYLIST_COMPLETE,
|
||||
onReady:f.API_READY,onResize:f.JWPLAYER_RESIZE,onComplete:f.JWPLAYER_MEDIA_COMPLETE,onSeek:f.JWPLAYER_MEDIA_SEEK,onTime:f.JWPLAYER_MEDIA_TIME,onVolume:f.JWPLAYER_MEDIA_VOLUME,onBeforePlay:f.JWPLAYER_MEDIA_BEFOREPLAY,onBeforeComplete:f.JWPLAYER_MEDIA_BEFORECOMPLETE,onDisplayClick:f.JWPLAYER_DISPLAY_CLICK,onControls:f.JWPLAYER_CONTROLS,onQualityLevels:f.JWPLAYER_MEDIA_LEVELS,onQualityChange:f.JWPLAYER_MEDIA_LEVEL_CHANGED,onCaptionsList:f.JWPLAYER_CAPTIONS_LIST,onCaptionsChange:f.JWPLAYER_CAPTIONS_CHANGED,
|
||||
onAdError:f.JWPLAYER_AD_ERROR,onAdClick:f.JWPLAYER_AD_CLICK,onAdImpression:f.JWPLAYER_AD_IMPRESSION,onAdTime:f.JWPLAYER_AD_TIME,onAdComplete:f.JWPLAYER_AD_COMPLETE,onAdCompanions:f.JWPLAYER_AD_COMPANIONS};k.foreach(y,function(a){g[a]=c(y[a],p)});var z={onBuffer:h.BUFFERING,onPause:h.PAUSED,onPlay:h.PLAYING,onIdle:h.IDLE};k.foreach(z,function(a){g[a]=c(z[a],n)});g.remove=function(){if(!u)throw"Cannot call remove() before player is ready";v=[];j.destroyPlayer(this.id)};g.setup=function(a){if(d.embed){var b=
|
||||
e.getElementById(g.id);b&&(a.fallbackDiv=b);b=g;v=[];j.destroyPlayer(b.id);b=d(g.id);b.config=a;return new d.embed(b)}return g};g.registerPlugin=function(a,b,c,e){d.plugins.registerPlugin(a,b,c,e)};g.setPlayer=function(a,b){t=a;g.renderingMode=b};g.detachMedia=function(){if("html5"==g.renderingMode)return l("jwDetachMedia")};g.attachMedia=function(a){if("html5"==g.renderingMode)return l("jwAttachMedia",a)};g.dispatchEvent=function(a,b){if(q[a])for(var c=k.translateEventResponse(a,b),d=0;d<q[a].length;d++)if("function"==
|
||||
typeof q[a][d])try{a==f.JWPLAYER_PLAYLIST_LOADED&&k.deepReplaceKeyName(c.playlist,["__dot__","__spc__","__dsh__","__default__"],["."," ","-","default"]),q[a][d].call(this,c)}catch(e){k.log("There was an error calling back an event handler")}};g.dispatchInstreamEvent=function(a){w&&w.dispatchEvent(a,arguments)};g.callInternal=l;g.playerReady=function(a){u=!0;t||g.setPlayer(e.getElementById(a.id));g.container=e.getElementById(g.id);k.foreach(q,function(a){m(t,a)});p(f.JWPLAYER_PLAYLIST_ITEM,function(){x=
|
||||
{}});p(f.JWPLAYER_MEDIA_META,function(a){k.extend(x,a.metadata)});for(g.dispatchEvent(f.API_READY);0<v.length;)l.apply(this,v.shift())};g.getItemMeta=function(){return x};g.isBeforePlay=function(){return t.jwIsBeforePlay()};g.isBeforeComplete=function(){return t.jwIsBeforeComplete()};return g};j.selectPlayer=function(b){var c;k.exists(b)||(b=0);b.nodeType?c=b:"string"==typeof b&&(c=e.getElementById(b));return c?(b=j.playerById(c.id))?b:j.addPlayer(new j(c)):"number"==typeof b?a[b]:null};j.playerById=
|
||||
function(b){for(var c=0;c<a.length;c++)if(a[c].id==b)return a[c];return null};j.addPlayer=function(b){for(var c=0;c<a.length;c++)if(a[c]==b)return b;a.push(b);return b};j.destroyPlayer=function(b){for(var c=-1,d,f=0;f<a.length;f++)a[f].id==b&&(c=f,d=a[f]);0<=c&&(b=d.id,f=e.getElementById(b+("flash"==d.renderingMode?"_wrapper":"")),k.clearCss&&k.clearCss("#"+b),f&&("html5"==d.renderingMode&&d.destroyPlayer(),d=e.createElement("div"),d.id=b,f.parentNode.replaceChild(d,f)),a.splice(c,1));return null};
|
||||
d.playerReady=function(a){var c=d.api.playerById(a.id);c?c.playerReady(a):d.api.selectPlayer(a.id).playerReady(a)}}(jwplayer),function(d){var a=d.events,k=d.utils,f=a.state;d.api.instream=function(d,e,j,b){function c(a,b){l[a]||(l[a]=[],p.jwInstreamAddEventListener(a,'function(dat) { jwplayer("'+m.id+'").dispatchInstreamEvent("'+a+'", dat); }'));l[a].push(b);return this}function n(b,d){g[b]||(g[b]=[],c(a.JWPLAYER_PLAYER_STATE,function(a){var c=a.newstate,d=a.oldstate;if(c==b){var e=g[c];if(e)for(var f=
|
||||
0;f<e.length;f++)"function"==typeof e[f]&&e[f].call(this,{oldstate:d,newstate:c,type:a.type})}}));g[b].push(d);return this}var m=d,p=e,l={},g={};this.dispatchEvent=function(a,b){if(l[a])for(var c=k.translateEventResponse(a,b[1]),d=0;d<l[a].length;d++)"function"==typeof l[a][d]&&l[a][d].call(this,c)};this.onError=function(b){return c(a.JWPLAYER_ERROR,b)};this.onFullscreen=function(b){return c(a.JWPLAYER_FULLSCREEN,b)};this.onMeta=function(b){return c(a.JWPLAYER_MEDIA_META,b)};this.onMute=function(b){return c(a.JWPLAYER_MEDIA_MUTE,
|
||||
b)};this.onComplete=function(b){return c(a.JWPLAYER_MEDIA_COMPLETE,b)};this.onTime=function(b){return c(a.JWPLAYER_MEDIA_TIME,b)};this.onBuffer=function(a){return n(f.BUFFERING,a)};this.onPause=function(a){return n(f.PAUSED,a)};this.onPlay=function(a){return n(f.PLAYING,a)};this.onIdle=function(a){return n(f.IDLE,a)};this.onClick=function(b){return c(a.JWPLAYER_INSTREAM_CLICK,b)};this.onInstreamDestroyed=function(b){return c(a.JWPLAYER_INSTREAM_DESTROYED,b)};this.play=function(a){p.jwInstreamPlay(a)};
|
||||
this.pause=function(a){p.jwInstreamPause(a)};this.destroy=function(){p.jwInstreamDestroy()};this.setText=function(a){p.jwInstreamSetText(a?a:"")};m.callInternal("jwLoadInstream",j,b?b:{})}}(jwplayer),function(d){var a=d.api,k=a.selectPlayer;a.selectPlayer=function(a){return(a=k(a))?a:{registerPlugin:function(a,e,f){d.plugins.registerPlugin(a,e,f)}}}}(jwplayer));jwplayer.key = '6SWbjFZruJXBFP7fiNzuhGtoET+Kj6BAt+nhuQ==';if (location.protocol === 'https:') {jwplayer.defaults = {flashplayer: 'https://ssl.p.jwpcdn.com/6/6/jwplayer.flash.swf', html5player: 'https://ssl.p.jwpcdn.com/6/6/jwplayer.html5.js', ph: 1}} else {jwplayer.defaults = {flashplayer: 'http://p.jwpcdn.com/6/6/jwplayer.flash.swf', html5player: 'http://p.jwpcdn.com/6/6/jwplayer.html5.js', ph: 1}}
|
||||
105
www/js/paginator.js
Normal file
105
www/js/paginator.js
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
(function () {
|
||||
|
||||
var defaults = {
|
||||
preLoadPage: function () { },
|
||||
postLoadPage: function () { },
|
||||
generator: function () { },
|
||||
itemsPerPage: 20,
|
||||
maxPages: 5
|
||||
};
|
||||
|
||||
function P(items, opts) {
|
||||
this.items = items;
|
||||
this.opts = opts || {};
|
||||
for(var k in defaults)
|
||||
if(!this.opts[k])
|
||||
this.opts[k] = defaults[k];
|
||||
this.paginator = $("<ul/>").addClass("pagination");
|
||||
this.loadPage(0);
|
||||
}
|
||||
|
||||
P.prototype.loadButtons = function (p) {
|
||||
var pages = parseInt(this.items.length / this.opts.itemsPerPage) + 1;
|
||||
var endcaps = pages > this.opts.maxPages;
|
||||
this.paginator.html("");
|
||||
if (this.items.length < this.opts.itemsPerPage) {
|
||||
this.paginator.css("margin-top", "0");
|
||||
return;
|
||||
}
|
||||
var ul = this.paginator;
|
||||
var s = p - parseInt(this.opts.maxPages / 2);
|
||||
s = s + this.opts.maxPages < pages ? s : pages - this.opts.maxPages;
|
||||
s = s < 0 ? 0 : s;
|
||||
if(endcaps) {
|
||||
var li = $("<li/>").appendTo(ul);
|
||||
$("<a/>").attr("href", "javascript:void(0)")
|
||||
.html("«")
|
||||
.click(function () {
|
||||
this.loadPage(0);
|
||||
}.bind(this))
|
||||
.appendTo(li);
|
||||
|
||||
if(p == 0)
|
||||
li.addClass("disabled");
|
||||
|
||||
if(s > 0) {
|
||||
var sep = $("<li/>").addClass("disabled")
|
||||
.appendTo(ul);
|
||||
$("<a/>").attr("href", "javascript:void(0)")
|
||||
.html("…")
|
||||
.appendTo(sep);
|
||||
}
|
||||
}
|
||||
for(var i = s; i < s + this.opts.maxPages && i < s + pages; i++) {
|
||||
(function (i) {
|
||||
var li = $("<li/>").appendTo(ul);
|
||||
if(i == p)
|
||||
li.addClass("active");
|
||||
$("<a/>").attr("href", "javascript:void(0)")
|
||||
.text(i + 1)
|
||||
.click(function () {
|
||||
this.loadPage(i);
|
||||
}.bind(this))
|
||||
.appendTo(li);
|
||||
}.bind(this))(i);
|
||||
}
|
||||
if(endcaps) {
|
||||
if(s + this.opts.maxPages < pages) {
|
||||
var sep = $("<li/>").addClass("disabled")
|
||||
.appendTo(ul);
|
||||
$("<a/>").attr("href", "javascript:void(0)")
|
||||
.html("…")
|
||||
.appendTo(sep);
|
||||
}
|
||||
|
||||
var li = $("<li/>").appendTo(ul);
|
||||
$("<a/>").attr("href", "javascript:void(0)")
|
||||
.html("»")
|
||||
.click(function () {
|
||||
this.loadPage(pages - 1);
|
||||
}.bind(this))
|
||||
.appendTo(li);
|
||||
|
||||
if(p == pages - 1)
|
||||
li.addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
P.prototype.loadPage = function (page) {
|
||||
this.opts.preLoadPage(page);
|
||||
this.loadButtons(page);
|
||||
var s = page * this.opts.itemsPerPage;
|
||||
var e = s + this.opts.itemsPerPage;
|
||||
if(e > this.items.length)
|
||||
e = this.items.length;
|
||||
for(var i = s; i < e; i++) {
|
||||
this.opts.generator(this.items[i], page, i);
|
||||
}
|
||||
this.opts.postLoadPage();
|
||||
}
|
||||
|
||||
window.Paginate = function (items, opts) {
|
||||
var p = new P(items, opts);
|
||||
return p;
|
||||
};
|
||||
})();
|
||||
1180
www/js/player.js
Normal file
1180
www/js/player.js
Normal file
File diff suppressed because it is too large
Load diff
330
www/js/sc.js
Normal file
330
www/js/sc.js
Normal file
|
|
@ -0,0 +1,330 @@
|
|||
(function () {
|
||||
var requirejs, require, define, __inflate;
|
||||
(function (e) {
|
||||
function a(e, t) {
|
||||
var n = t && t.split("/"),
|
||||
i = r.map,
|
||||
s = i && i["*"] || {}, o, u, a, f, l, c, h;
|
||||
if (e && e.charAt(0) === "." && t) {
|
||||
n = n.slice(0, n.length - 1), e = n.concat(e.split("/"));
|
||||
for (l = 0; h = e[l]; l++) if (h === ".") e.splice(l, 1), l -= 1;
|
||||
else if (h === "..") {
|
||||
if (l === 1 && (e[2] === ".." || e[0] === "..")) return !0;
|
||||
l > 0 && (e.splice(l - 1, 2), l -= 2)
|
||||
}
|
||||
e = e.join("/")
|
||||
}
|
||||
if ((n || s) && i) {
|
||||
o = e.split("/");
|
||||
for (l = o.length; l > 0; l -= 1) {
|
||||
u = o.slice(0, l).join("/");
|
||||
if (n) for (c = n.length; c > 0; c -= 1) {
|
||||
a = i[n.slice(0, c).join("/")];
|
||||
if (a) {
|
||||
a = a[u];
|
||||
if (a) {
|
||||
f = a;
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
f = f || s[u];
|
||||
if (f) {
|
||||
o.splice(0, l, f), e = o.join("/");
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return e
|
||||
}
|
||||
function f(t, n) {
|
||||
return function () {
|
||||
return u.apply(e, s.call(arguments, 0).concat([t, n]))
|
||||
}
|
||||
}
|
||||
function l(e) {
|
||||
return function (t) {
|
||||
return a(t, e)
|
||||
}
|
||||
}
|
||||
function c(e) {
|
||||
return function (n) {
|
||||
t[e] = n
|
||||
}
|
||||
}
|
||||
function h(r) {
|
||||
if (n.hasOwnProperty(r)) {
|
||||
var s = n[r];
|
||||
delete n[r], i[r] = !0, o.apply(e, s)
|
||||
}
|
||||
if (!t.hasOwnProperty(r)) throw new Error("No " + r);
|
||||
return t[r]
|
||||
}
|
||||
function p(e, t) {
|
||||
var n, r, i = e.indexOf("!");
|
||||
return i !== -1 ? (n = a(e.slice(0, i), t), e = e.slice(i + 1), r = h(n), r && r.normalize ? e = r.normalize(e, l(t)) : e = a(e, t)) : e = a(e, t), {
|
||||
f: n ? n + "!" + e : e,
|
||||
n: e,
|
||||
p: r
|
||||
}
|
||||
}
|
||||
function d(e) {
|
||||
return function () {
|
||||
return r && r.config && r.config[e] || {}
|
||||
}
|
||||
}
|
||||
var t = {}, n = {}, r = {}, i = {}, s = [].slice,
|
||||
o, u;
|
||||
o = function (r, s, o, u) {
|
||||
var a = [],
|
||||
l, v, m, g, y, b;
|
||||
u = u || r, typeof o == "string" && (o = __inflate(r, o));
|
||||
if (typeof o == "function") {
|
||||
s = !s.length && o.length ? ["require", "exports", "module"] : s;
|
||||
for (b = 0; b < s.length; b++) {
|
||||
y = p(s[b], u), m = y.f;
|
||||
if (m === "require") a[b] = f(r);
|
||||
else if (m === "exports") a[b] = t[r] = {}, l = !0;
|
||||
else if (m === "module") v = a[b] = {
|
||||
id: r,
|
||||
uri: "",
|
||||
exports: t[r],
|
||||
config: d(r)
|
||||
};
|
||||
else if (t.hasOwnProperty(m) || n.hasOwnProperty(m)) a[b] = h(m);
|
||||
else if (y.p) y.p.load(y.n, f(u, !0), c(m), {}), a[b] = t[m];
|
||||
else if (!i[m]) throw new Error(r + " missing " + m)
|
||||
}
|
||||
g = o.apply(t[r], a);
|
||||
if (r) if (v && v.exports !== e && v.exports !== t[r]) t[r] = v.exports;
|
||||
else if (g !== e || !l) t[r] = g
|
||||
} else r && (t[r] = o)
|
||||
}, requirejs = require = u = function (t, n, i, s) {
|
||||
return typeof t == "string" ? h(p(t, n).f) : (t.splice || (r = t, n.splice ? (t = n, n = i, i = null) : t = e), n = n || function () {}, s ? o(e, t, n, i) : setTimeout(function () {
|
||||
o(e, t, n, i)
|
||||
}, 15), u)
|
||||
}, u.config = function (e) {
|
||||
return r = e, u
|
||||
}, define = function (e, t, r) {
|
||||
t.splice || (r = t, t = []), n[e] = [e, t, r]
|
||||
}, define.amd = {
|
||||
jQuery: !0
|
||||
}
|
||||
})(), __inflate = function (name, src) {
|
||||
var r;
|
||||
return eval(["r = function(a,b,c){", "\n};\n//@ sourceURL=" + name + "\n"].join(src)), r
|
||||
}, define("lib/api/events", ["require", "exports", "module"], function (e, t, n) {
|
||||
t.api = {
|
||||
LOAD_PROGRESS: "loadProgres",
|
||||
PLAY_PROGRESS: "playProgress",
|
||||
PLAY: "play",
|
||||
PAUSE: "pause",
|
||||
FINISH: "finish",
|
||||
SEEK: "seek",
|
||||
READY: "ready",
|
||||
OPEN_SHARE_PANEL: "sharePanelOpened",
|
||||
SHARE: "share",
|
||||
CLICK_DOWNLOAD: "downloadClicked",
|
||||
CLICK_BUY: "buyClicked"
|
||||
}, t.bridge = {
|
||||
REMOVE_LISTENER: "removeEventListener",
|
||||
ADD_LISTENER: "addEventListener"
|
||||
}
|
||||
}), define("lib/api/getters", ["require", "exports", "module"], function (e, t, n) {
|
||||
n.exports = {
|
||||
GET_VOLUME: "getVolume",
|
||||
GET_DURATION: "getDuration",
|
||||
GET_POSITION: "getPosition",
|
||||
GET_SOUNDS: "getSounds",
|
||||
GET_CURRENT_SOUND: "getCurrentSound",
|
||||
GET_CURRENT_SOUND_INDEX: "getCurrentSoundIndex",
|
||||
IS_PAUSED: "isPaused"
|
||||
}
|
||||
}), define("lib/api/setters", ["require", "exports", "module"], function (e, t, n) {
|
||||
n.exports = {
|
||||
PLAY: "play",
|
||||
PAUSE: "pause",
|
||||
TOGGLE: "toggle",
|
||||
SEEK_TO: "seekTo",
|
||||
SET_VOLUME: "setVolume",
|
||||
NEXT: "next",
|
||||
PREV: "prev",
|
||||
SKIP: "skip"
|
||||
}
|
||||
}), define("lib/api/api", ["require", "exports", "module", "lib/api/events", "lib/api/getters", "lib/api/setters"], function (e, t, n) {
|
||||
function m(e) {
|
||||
return !!(e === "" || e && e.charCodeAt && e.substr)
|
||||
}
|
||||
function g(e) {
|
||||
return !!(e && e.constructor && e.call && e.apply)
|
||||
}
|
||||
function y(e) {
|
||||
return !!e && e.nodeType === 1 && e.nodeName.toUpperCase() === "IFRAME"
|
||||
}
|
||||
function b(e) {
|
||||
var t = !1,
|
||||
n;
|
||||
for (n in i) if (i.hasOwnProperty(n) && i[n] === e) {
|
||||
t = !0;
|
||||
break
|
||||
}
|
||||
return t
|
||||
}
|
||||
function w(e) {
|
||||
var t, n, r;
|
||||
for (t = 0, n = f.length; t < n; t++) {
|
||||
r = e(f[t]);
|
||||
if (r === !1) break
|
||||
}
|
||||
}
|
||||
function E(e) {
|
||||
var t = "",
|
||||
n, r, i;
|
||||
e.substr(0, 2) === "//" && (e = window.location.protocol + e), i = e.split("/");
|
||||
for (n = 0, r = i.length; n < r; n++) {
|
||||
if (!(n < 3)) break;
|
||||
t += i[n], n < 2 && (t += "/")
|
||||
}
|
||||
return t
|
||||
}
|
||||
function S(e) {
|
||||
return e.contentWindow ? e.contentWindow : e.contentDocument && "parentWindow" in e.contentDocument ? e.contentDocument.parentWindow : null
|
||||
}
|
||||
function x(e) {
|
||||
var t = [],
|
||||
n;
|
||||
for (n in e) e.hasOwnProperty(n) && t.push(e[n]);
|
||||
return t
|
||||
}
|
||||
function T(e, t, n) {
|
||||
n.callbacks[e] = n.callbacks[e] || [], n.callbacks[e].push(t)
|
||||
}
|
||||
function N(e, t) {
|
||||
var n = !0,
|
||||
r;
|
||||
return t.callbacks[e] = [], w(function (t) {
|
||||
r = t.callbacks[e] || [];
|
||||
if (r.length) return n = !1, !1
|
||||
}), n
|
||||
}
|
||||
function C(e, t, n) {
|
||||
var r = S(n),
|
||||
i, s;
|
||||
if (!r.postMessage) return !1;
|
||||
i = n.getAttribute("src").split("?")[0], s = JSON.stringify({
|
||||
method: e,
|
||||
value: t
|
||||
}), i.substr(0, 2) === "//" && (i = window.location.protocol + i), i = i.replace(/http:\/\/(w|wt).soundcloud.com/, "https://$1.soundcloud.com"), r.postMessage(s, i)
|
||||
}
|
||||
function k(e) {
|
||||
var t;
|
||||
return w(function (n) {
|
||||
if (n.instance === e) return t = n, !1
|
||||
}), t
|
||||
}
|
||||
function L(e) {
|
||||
var t;
|
||||
return w(function (n) {
|
||||
if (S(n.element) === e) return t = n, !1
|
||||
}), t
|
||||
}
|
||||
function A(e, t) {
|
||||
return function (n) {
|
||||
var r = g(n),
|
||||
i = k(this),
|
||||
s = !r && t ? n : null,
|
||||
o = r && !t ? n : null;
|
||||
return o && T(e, o, i), C(e, s, i.element), this
|
||||
}
|
||||
}
|
||||
function O(e, t, n) {
|
||||
var r, i, s;
|
||||
for (r = 0, i = t.length; r < i; r++) s = t[r], e[s] = A(s, n)
|
||||
}
|
||||
function M(e, t, n) {
|
||||
return e + "?url=" + t + "&" + _(n)
|
||||
}
|
||||
function _(e) {
|
||||
var t, n, r = [];
|
||||
for (t in e) e.hasOwnProperty(t) && (n = e[t], r.push(t + "=" + (t === "start_track" ? parseInt(n, 10) : n ? "true" : "false")));
|
||||
return r.join("&")
|
||||
}
|
||||
function D(e, t, n) {
|
||||
var r = e.callbacks[t] || [],
|
||||
i, s;
|
||||
for (i = 0, s = r.length; i < s; i++) r[i].apply(e.instance, n);
|
||||
if (b(t) || t === o.READY) e.callbacks[t] = []
|
||||
}
|
||||
function P(e) {
|
||||
var t, n, r, i, s;
|
||||
try {
|
||||
n = JSON.parse(e.data)
|
||||
} catch (u) {}
|
||||
t = L(e.source), r = n.method, i = n.value, r === o.READY && (t ? (t.isReady = !0, D(t, l), N(l, t)) : a.push(e.source)), r === o.PLAY && !t.playEventFired && (t.playEventFired = !0), r === o.PLAY_PROGRESS && !t.playEventFired && (t.playEventFired = !0, D(t, o.PLAY, [i]));
|
||||
if (!t || H(e.origin) !== H(t.domain)) return !1;
|
||||
s = [], i !== undefined && s.push(i), D(t, r, s)
|
||||
}
|
||||
// Hack
|
||||
function H(e) {
|
||||
return e.replace(h, "")
|
||||
}
|
||||
var r = e("lib/api/events"),
|
||||
i = e("lib/api/getters"),
|
||||
s = e("lib/api/setters"),
|
||||
o = r.api,
|
||||
u = r.bridge,
|
||||
a = [],
|
||||
f = [],
|
||||
l = "__LATE_BINDING__",
|
||||
c = "http://wt.soundcloud.dev:9200/",
|
||||
h = /^http(?:s?)/,
|
||||
p, d, v;
|
||||
window.scwtf = P;
|
||||
window.fixSoundcloudShit = function() {
|
||||
window.removeEventListener ? window.removeEventListener("message", window.scwtf, !1) : window.detachEvent("onmessage", window.scwtf);
|
||||
}
|
||||
window.unfixSoundcloudShit = function() {
|
||||
window.addEventListener ? window.addEventListener("message", scwtf, !1) : window.attachEvent("onmessage", scwtf);
|
||||
}
|
||||
n.exports = v = function (e, t, n) {
|
||||
m(e) && (e = document.getElementById(e));
|
||||
if (!y(e)) throw new Error("SC.Widget function should be given either iframe element or a string specifying id attribute of iframe element.");
|
||||
t && (n = n || {}, e.src = M(c, t, n));
|
||||
var r = L(S(e)),
|
||||
i, s;
|
||||
return r && r.instance ? r.instance : (i = a.indexOf(S(e)) > -1, s = new p(e), f.push(new d(s, e, i)), s)
|
||||
}, v.Events = o, window.SC = window.SC || {}, window.SC.Widget = v, d = function (e, t, n) {
|
||||
this.instance = e, this.element = t, this.domain = E(t.getAttribute("src")), this.isReady = !! n, this.callbacks = {}
|
||||
}, p = function () {}, p.prototype = {
|
||||
constructor: p,
|
||||
load: function (e, t) {
|
||||
if (!e) return;
|
||||
t = t || {};
|
||||
var n = this,
|
||||
r = k(this),
|
||||
i = r.element,
|
||||
s = i.src,
|
||||
a = s.substr(0, s.indexOf("?"));
|
||||
r.isReady = !1, r.playEventFired = !1, i.onload = function () {
|
||||
n.bind(o.READY, function () {
|
||||
var e, n = r.callbacks;
|
||||
for (e in n) n.hasOwnProperty(e) && e !== o.READY && C(u.ADD_LISTENER, e, r.element);
|
||||
t.callback && t.callback()
|
||||
})
|
||||
}, i.src = M(a, e, t)
|
||||
},
|
||||
bind: function (e, t) {
|
||||
var n = this,
|
||||
r = k(this);
|
||||
return r && r.element && (e === o.READY && r.isReady ? setTimeout(t, 1) : r.isReady ? (T(e, t, r), C(u.ADD_LISTENER, e, r.element)) : T(l, function () {
|
||||
n.bind(e, t)
|
||||
}, r)), this
|
||||
},
|
||||
unbind: function (e) {
|
||||
var t = k(this),
|
||||
n;
|
||||
t && t.element && (n = N(e, t), e !== o.READY && n && C(u.REMOVE_LISTENER, e, t.element))
|
||||
}
|
||||
}, O(p.prototype, x(i)), O(p.prototype, x(s), !0)
|
||||
}), window.SC = window.SC || {}, window.SC.Widget = require("lib/api/api")
|
||||
})()
|
||||
777
www/js/swf.js
Normal file
777
www/js/swf.js
Normal file
|
|
@ -0,0 +1,777 @@
|
|||
/*! SWFObject v2.2 <http://code.google.com/p/swfobject/>
|
||||
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
||||
*/
|
||||
var swfobject = function() {
|
||||
|
||||
var UNDEF = "undefined",
|
||||
OBJECT = "object",
|
||||
SHOCKWAVE_FLASH = "Shockwave Flash",
|
||||
SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
|
||||
FLASH_MIME_TYPE = "application/x-shockwave-flash",
|
||||
EXPRESS_INSTALL_ID = "SWFObjectExprInst",
|
||||
ON_READY_STATE_CHANGE = "onreadystatechange",
|
||||
|
||||
win = window,
|
||||
doc = document,
|
||||
nav = navigator,
|
||||
|
||||
plugin = false,
|
||||
domLoadFnArr = [main],
|
||||
regObjArr = [],
|
||||
objIdArr = [],
|
||||
listenersArr = [],
|
||||
storedAltContent,
|
||||
storedAltContentId,
|
||||
storedCallbackFn,
|
||||
storedCallbackObj,
|
||||
isDomLoaded = false,
|
||||
isExpressInstallActive = false,
|
||||
dynamicStylesheet,
|
||||
dynamicStylesheetMedia,
|
||||
autoHideShow = true,
|
||||
|
||||
/* Centralized function for browser feature detection
|
||||
- User agent string detection is only used when no good alternative is possible
|
||||
- Is executed directly for optimal performance
|
||||
*/
|
||||
ua = function() {
|
||||
var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
|
||||
u = nav.userAgent.toLowerCase(),
|
||||
p = nav.platform.toLowerCase(),
|
||||
windows = p ? /win/.test(p) : /win/.test(u),
|
||||
mac = p ? /mac/.test(p) : /mac/.test(u),
|
||||
webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
|
||||
ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
|
||||
playerVersion = [0,0,0],
|
||||
d = null;
|
||||
if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
|
||||
d = nav.plugins[SHOCKWAVE_FLASH].description;
|
||||
if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
|
||||
plugin = true;
|
||||
ie = false; // cascaded feature detection for Internet Explorer
|
||||
d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
|
||||
playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
|
||||
playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
|
||||
playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
|
||||
}
|
||||
}
|
||||
else if (typeof win.ActiveXObject != UNDEF) {
|
||||
try {
|
||||
var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
|
||||
if (a) { // a will return null when ActiveX is disabled
|
||||
d = a.GetVariable("$version");
|
||||
if (d) {
|
||||
ie = true; // cascaded feature detection for Internet Explorer
|
||||
d = d.split(" ")[1].split(",");
|
||||
playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(e) {}
|
||||
}
|
||||
return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
|
||||
}(),
|
||||
|
||||
/* Cross-browser onDomLoad
|
||||
- Will fire an event as soon as the DOM of a web page is loaded
|
||||
- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
|
||||
- Regular onload serves as fallback
|
||||
*/
|
||||
onDomLoad = function() {
|
||||
if (!ua.w3) { return; }
|
||||
if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically
|
||||
callDomLoadFunctions();
|
||||
}
|
||||
if (!isDomLoaded) {
|
||||
if (typeof doc.addEventListener != UNDEF) {
|
||||
doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
|
||||
}
|
||||
if (ua.ie && ua.win) {
|
||||
doc.attachEvent(ON_READY_STATE_CHANGE, function() {
|
||||
if (doc.readyState == "complete") {
|
||||
doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
|
||||
callDomLoadFunctions();
|
||||
}
|
||||
});
|
||||
if (win == top) { // if not inside an iframe
|
||||
(function(){
|
||||
if (isDomLoaded) { return; }
|
||||
try {
|
||||
doc.documentElement.doScroll("left");
|
||||
}
|
||||
catch(e) {
|
||||
setTimeout(arguments.callee, 0);
|
||||
return;
|
||||
}
|
||||
callDomLoadFunctions();
|
||||
})();
|
||||
}
|
||||
}
|
||||
if (ua.wk) {
|
||||
(function(){
|
||||
if (isDomLoaded) { return; }
|
||||
if (!/loaded|complete/.test(doc.readyState)) {
|
||||
setTimeout(arguments.callee, 0);
|
||||
return;
|
||||
}
|
||||
callDomLoadFunctions();
|
||||
})();
|
||||
}
|
||||
addLoadEvent(callDomLoadFunctions);
|
||||
}
|
||||
}();
|
||||
|
||||
function callDomLoadFunctions() {
|
||||
if (isDomLoaded) { return; }
|
||||
try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
|
||||
var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
|
||||
t.parentNode.removeChild(t);
|
||||
}
|
||||
catch (e) { return; }
|
||||
isDomLoaded = true;
|
||||
var dl = domLoadFnArr.length;
|
||||
for (var i = 0; i < dl; i++) {
|
||||
domLoadFnArr[i]();
|
||||
}
|
||||
}
|
||||
|
||||
function addDomLoadEvent(fn) {
|
||||
if (isDomLoaded) {
|
||||
fn();
|
||||
}
|
||||
else {
|
||||
domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
|
||||
}
|
||||
}
|
||||
|
||||
/* Cross-browser onload
|
||||
- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
|
||||
- Will fire an event as soon as a web page including all of its assets are loaded
|
||||
*/
|
||||
function addLoadEvent(fn) {
|
||||
if (typeof win.addEventListener != UNDEF) {
|
||||
win.addEventListener("load", fn, false);
|
||||
}
|
||||
else if (typeof doc.addEventListener != UNDEF) {
|
||||
doc.addEventListener("load", fn, false);
|
||||
}
|
||||
else if (typeof win.attachEvent != UNDEF) {
|
||||
addListener(win, "onload", fn);
|
||||
}
|
||||
else if (typeof win.onload == "function") {
|
||||
var fnOld = win.onload;
|
||||
win.onload = function() {
|
||||
fnOld();
|
||||
fn();
|
||||
};
|
||||
}
|
||||
else {
|
||||
win.onload = fn;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main function
|
||||
- Will preferably execute onDomLoad, otherwise onload (as a fallback)
|
||||
*/
|
||||
function main() {
|
||||
if (plugin) {
|
||||
testPlayerVersion();
|
||||
}
|
||||
else {
|
||||
matchVersions();
|
||||
}
|
||||
}
|
||||
|
||||
/* Detect the Flash Player version for non-Internet Explorer browsers
|
||||
- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
|
||||
a. Both release and build numbers can be detected
|
||||
b. Avoid wrong descriptions by corrupt installers provided by Adobe
|
||||
c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
|
||||
- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
|
||||
*/
|
||||
function testPlayerVersion() {
|
||||
var b = doc.getElementsByTagName("body")[0];
|
||||
var o = createElement(OBJECT);
|
||||
o.setAttribute("type", FLASH_MIME_TYPE);
|
||||
var t = b.appendChild(o);
|
||||
if (t) {
|
||||
var counter = 0;
|
||||
(function(){
|
||||
if (typeof t.GetVariable != UNDEF) {
|
||||
var d = t.GetVariable("$version");
|
||||
if (d) {
|
||||
d = d.split(" ")[1].split(",");
|
||||
ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
|
||||
}
|
||||
}
|
||||
else if (counter < 10) {
|
||||
counter++;
|
||||
setTimeout(arguments.callee, 10);
|
||||
return;
|
||||
}
|
||||
b.removeChild(o);
|
||||
t = null;
|
||||
matchVersions();
|
||||
})();
|
||||
}
|
||||
else {
|
||||
matchVersions();
|
||||
}
|
||||
}
|
||||
|
||||
/* Perform Flash Player and SWF version matching; static publishing only
|
||||
*/
|
||||
function matchVersions() {
|
||||
var rl = regObjArr.length;
|
||||
if (rl > 0) {
|
||||
for (var i = 0; i < rl; i++) { // for each registered object element
|
||||
var id = regObjArr[i].id;
|
||||
var cb = regObjArr[i].callbackFn;
|
||||
var cbObj = {success:false, id:id};
|
||||
if (ua.pv[0] > 0) {
|
||||
var obj = getElementById(id);
|
||||
if (obj) {
|
||||
if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
|
||||
setVisibility(id, true);
|
||||
if (cb) {
|
||||
cbObj.success = true;
|
||||
cbObj.ref = getObjectById(id);
|
||||
cb(cbObj);
|
||||
}
|
||||
}
|
||||
else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
|
||||
var att = {};
|
||||
att.data = regObjArr[i].expressInstall;
|
||||
att.width = obj.getAttribute("width") || "0";
|
||||
att.height = obj.getAttribute("height") || "0";
|
||||
if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
|
||||
if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
|
||||
// parse HTML object param element's name-value pairs
|
||||
var par = {};
|
||||
var p = obj.getElementsByTagName("param");
|
||||
var pl = p.length;
|
||||
for (var j = 0; j < pl; j++) {
|
||||
if (p[j].getAttribute("name").toLowerCase() != "movie") {
|
||||
par[p[j].getAttribute("name")] = p[j].getAttribute("value");
|
||||
}
|
||||
}
|
||||
showExpressInstall(att, par, id, cb);
|
||||
}
|
||||
else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
|
||||
displayAltContent(obj);
|
||||
if (cb) { cb(cbObj); }
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
|
||||
setVisibility(id, true);
|
||||
if (cb) {
|
||||
var o = getObjectById(id); // test whether there is an HTML object element or not
|
||||
if (o && typeof o.SetVariable != UNDEF) {
|
||||
cbObj.success = true;
|
||||
cbObj.ref = o;
|
||||
}
|
||||
cb(cbObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getObjectById(objectIdStr) {
|
||||
var r = null;
|
||||
var o = getElementById(objectIdStr);
|
||||
if (o && o.nodeName == "OBJECT") {
|
||||
if (typeof o.SetVariable != UNDEF) {
|
||||
r = o;
|
||||
}
|
||||
else {
|
||||
var n = o.getElementsByTagName(OBJECT)[0];
|
||||
if (n) {
|
||||
r = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Requirements for Adobe Express Install
|
||||
- only one instance can be active at a time
|
||||
- fp 6.0.65 or higher
|
||||
- Win/Mac OS only
|
||||
- no Webkit engines older than version 312
|
||||
*/
|
||||
function canExpressInstall() {
|
||||
return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
|
||||
}
|
||||
|
||||
/* Show the Adobe Express Install dialog
|
||||
- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
|
||||
*/
|
||||
function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
|
||||
isExpressInstallActive = true;
|
||||
storedCallbackFn = callbackFn || null;
|
||||
storedCallbackObj = {success:false, id:replaceElemIdStr};
|
||||
var obj = getElementById(replaceElemIdStr);
|
||||
if (obj) {
|
||||
if (obj.nodeName == "OBJECT") { // static publishing
|
||||
storedAltContent = abstractAltContent(obj);
|
||||
storedAltContentId = null;
|
||||
}
|
||||
else { // dynamic publishing
|
||||
storedAltContent = obj;
|
||||
storedAltContentId = replaceElemIdStr;
|
||||
}
|
||||
att.id = EXPRESS_INSTALL_ID;
|
||||
if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
|
||||
if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
|
||||
doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
|
||||
var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
|
||||
fv = "MMredirectURL=" + win.location.toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
|
||||
if (typeof par.flashvars != UNDEF) {
|
||||
par.flashvars += "&" + fv;
|
||||
}
|
||||
else {
|
||||
par.flashvars = fv;
|
||||
}
|
||||
// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
|
||||
// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
|
||||
if (ua.ie && ua.win && obj.readyState != 4) {
|
||||
var newObj = createElement("div");
|
||||
replaceElemIdStr += "SWFObjectNew";
|
||||
newObj.setAttribute("id", replaceElemIdStr);
|
||||
obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
|
||||
obj.style.display = "none";
|
||||
(function(){
|
||||
if (obj.readyState == 4) {
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
else {
|
||||
setTimeout(arguments.callee, 10);
|
||||
}
|
||||
})();
|
||||
}
|
||||
createSWF(att, par, replaceElemIdStr);
|
||||
}
|
||||
}
|
||||
|
||||
/* Functions to abstract and display alternative content
|
||||
*/
|
||||
function displayAltContent(obj) {
|
||||
if (ua.ie && ua.win && obj.readyState != 4) {
|
||||
// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
|
||||
// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
|
||||
var el = createElement("div");
|
||||
obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
|
||||
el.parentNode.replaceChild(abstractAltContent(obj), el);
|
||||
obj.style.display = "none";
|
||||
(function(){
|
||||
if (obj.readyState == 4) {
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
else {
|
||||
setTimeout(arguments.callee, 10);
|
||||
}
|
||||
})();
|
||||
}
|
||||
else {
|
||||
obj.parentNode.replaceChild(abstractAltContent(obj), obj);
|
||||
}
|
||||
}
|
||||
|
||||
function abstractAltContent(obj) {
|
||||
var ac = createElement("div");
|
||||
if (ua.win && ua.ie) {
|
||||
ac.innerHTML = obj.innerHTML;
|
||||
}
|
||||
else {
|
||||
var nestedObj = obj.getElementsByTagName(OBJECT)[0];
|
||||
if (nestedObj) {
|
||||
var c = nestedObj.childNodes;
|
||||
if (c) {
|
||||
var cl = c.length;
|
||||
for (var i = 0; i < cl; i++) {
|
||||
if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
|
||||
ac.appendChild(c[i].cloneNode(true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ac;
|
||||
}
|
||||
|
||||
/* Cross-browser dynamic SWF creation
|
||||
*/
|
||||
function createSWF(attObj, parObj, id) {
|
||||
var r, el = getElementById(id);
|
||||
if (ua.wk && ua.wk < 312) { return r; }
|
||||
if (el) {
|
||||
if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
|
||||
attObj.id = id;
|
||||
}
|
||||
if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
|
||||
var att = "";
|
||||
for (var i in attObj) {
|
||||
if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
|
||||
if (i.toLowerCase() == "data") {
|
||||
parObj.movie = attObj[i];
|
||||
}
|
||||
else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
|
||||
att += ' class="' + attObj[i] + '"';
|
||||
}
|
||||
else if (i.toLowerCase() != "classid") {
|
||||
att += ' ' + i + '="' + attObj[i] + '"';
|
||||
}
|
||||
}
|
||||
}
|
||||
var par = "";
|
||||
for (var j in parObj) {
|
||||
if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
|
||||
par += '<param name="' + j + '" value="' + parObj[j] + '" />';
|
||||
}
|
||||
}
|
||||
el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
|
||||
objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
|
||||
r = getElementById(attObj.id);
|
||||
}
|
||||
else { // well-behaving browsers
|
||||
var o = createElement(OBJECT);
|
||||
o.setAttribute("type", FLASH_MIME_TYPE);
|
||||
for (var m in attObj) {
|
||||
if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
|
||||
if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
|
||||
o.setAttribute("class", attObj[m]);
|
||||
}
|
||||
else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
|
||||
o.setAttribute(m, attObj[m]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var n in parObj) {
|
||||
if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
|
||||
createObjParam(o, n, parObj[n]);
|
||||
}
|
||||
}
|
||||
el.parentNode.replaceChild(o, el);
|
||||
r = o;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function createObjParam(el, pName, pValue) {
|
||||
var p = createElement("param");
|
||||
p.setAttribute("name", pName);
|
||||
p.setAttribute("value", pValue);
|
||||
el.appendChild(p);
|
||||
}
|
||||
|
||||
/* Cross-browser SWF removal
|
||||
- Especially needed to safely and completely remove a SWF in Internet Explorer
|
||||
*/
|
||||
function removeSWF(id) {
|
||||
var obj = getElementById(id);
|
||||
if (obj && obj.nodeName == "OBJECT") {
|
||||
if (ua.ie && ua.win) {
|
||||
obj.style.display = "none";
|
||||
(function(){
|
||||
if (obj.readyState == 4) {
|
||||
removeObjectInIE(id);
|
||||
}
|
||||
else {
|
||||
setTimeout(arguments.callee, 10);
|
||||
}
|
||||
})();
|
||||
}
|
||||
else {
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function removeObjectInIE(id) {
|
||||
var obj = getElementById(id);
|
||||
if (obj) {
|
||||
for (var i in obj) {
|
||||
if (typeof obj[i] == "function") {
|
||||
obj[i] = null;
|
||||
}
|
||||
}
|
||||
obj.parentNode.removeChild(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/* Functions to optimize JavaScript compression
|
||||
*/
|
||||
function getElementById(id) {
|
||||
var el = null;
|
||||
try {
|
||||
el = doc.getElementById(id);
|
||||
}
|
||||
catch (e) {}
|
||||
return el;
|
||||
}
|
||||
|
||||
function createElement(el) {
|
||||
return doc.createElement(el);
|
||||
}
|
||||
|
||||
/* Updated attachEvent function for Internet Explorer
|
||||
- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
|
||||
*/
|
||||
function addListener(target, eventType, fn) {
|
||||
target.attachEvent(eventType, fn);
|
||||
listenersArr[listenersArr.length] = [target, eventType, fn];
|
||||
}
|
||||
|
||||
/* Flash Player and SWF content version matching
|
||||
*/
|
||||
function hasPlayerVersion(rv) {
|
||||
var pv = ua.pv, v = rv.split(".");
|
||||
v[0] = parseInt(v[0], 10);
|
||||
v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
|
||||
v[2] = parseInt(v[2], 10) || 0;
|
||||
return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
|
||||
}
|
||||
|
||||
/* Cross-browser dynamic CSS creation
|
||||
- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
|
||||
*/
|
||||
function createCSS(sel, decl, media, newStyle) {
|
||||
if (ua.ie && ua.mac) { return; }
|
||||
var h = doc.getElementsByTagName("head")[0];
|
||||
if (!h) { return; } // to also support badly authored HTML pages that lack a head element
|
||||
var m = (media && typeof media == "string") ? media : "screen";
|
||||
if (newStyle) {
|
||||
dynamicStylesheet = null;
|
||||
dynamicStylesheetMedia = null;
|
||||
}
|
||||
if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
|
||||
// create dynamic stylesheet + get a global reference to it
|
||||
var s = createElement("style");
|
||||
s.setAttribute("type", "text/css");
|
||||
s.setAttribute("media", m);
|
||||
dynamicStylesheet = h.appendChild(s);
|
||||
if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
|
||||
dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];
|
||||
}
|
||||
dynamicStylesheetMedia = m;
|
||||
}
|
||||
// add style rule
|
||||
if (ua.ie && ua.win) {
|
||||
if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
|
||||
dynamicStylesheet.addRule(sel, decl);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {
|
||||
dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setVisibility(id, isVisible) {
|
||||
if (!autoHideShow) { return; }
|
||||
var v = isVisible ? "visible" : "hidden";
|
||||
if (isDomLoaded && getElementById(id)) {
|
||||
getElementById(id).style.visibility = v;
|
||||
}
|
||||
else {
|
||||
createCSS("#" + id, "visibility:" + v);
|
||||
}
|
||||
}
|
||||
|
||||
/* Filter to avoid XSS attacks
|
||||
*/
|
||||
function urlEncodeIfNecessary(s) {
|
||||
var regex = /[\\\"<>\.;]/;
|
||||
var hasBadChars = regex.exec(s) != null;
|
||||
return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;
|
||||
}
|
||||
|
||||
/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
|
||||
*/
|
||||
var cleanup = function() {
|
||||
if (ua.ie && ua.win) {
|
||||
window.attachEvent("onunload", function() {
|
||||
// remove listeners to avoid memory leaks
|
||||
var ll = listenersArr.length;
|
||||
for (var i = 0; i < ll; i++) {
|
||||
listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
|
||||
}
|
||||
// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
|
||||
var il = objIdArr.length;
|
||||
for (var j = 0; j < il; j++) {
|
||||
removeSWF(objIdArr[j]);
|
||||
}
|
||||
// cleanup library's main closures to avoid memory leaks
|
||||
for (var k in ua) {
|
||||
ua[k] = null;
|
||||
}
|
||||
ua = null;
|
||||
for (var l in swfobject) {
|
||||
swfobject[l] = null;
|
||||
}
|
||||
swfobject = null;
|
||||
});
|
||||
}
|
||||
}();
|
||||
|
||||
return {
|
||||
/* Public API
|
||||
- Reference: http://code.google.com/p/swfobject/wiki/documentation
|
||||
*/
|
||||
registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {
|
||||
if (ua.w3 && objectIdStr && swfVersionStr) {
|
||||
var regObj = {};
|
||||
regObj.id = objectIdStr;
|
||||
regObj.swfVersion = swfVersionStr;
|
||||
regObj.expressInstall = xiSwfUrlStr;
|
||||
regObj.callbackFn = callbackFn;
|
||||
regObjArr[regObjArr.length] = regObj;
|
||||
setVisibility(objectIdStr, false);
|
||||
}
|
||||
else if (callbackFn) {
|
||||
callbackFn({success:false, id:objectIdStr});
|
||||
}
|
||||
},
|
||||
|
||||
getObjectById: function(objectIdStr) {
|
||||
if (ua.w3) {
|
||||
return getObjectById(objectIdStr);
|
||||
}
|
||||
},
|
||||
|
||||
embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
|
||||
var callbackObj = {success:false, id:replaceElemIdStr};
|
||||
if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
|
||||
setVisibility(replaceElemIdStr, false);
|
||||
addDomLoadEvent(function() {
|
||||
widthStr += ""; // auto-convert to string
|
||||
heightStr += "";
|
||||
var att = {};
|
||||
if (attObj && typeof attObj === OBJECT) {
|
||||
for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
|
||||
att[i] = attObj[i];
|
||||
}
|
||||
}
|
||||
att.data = swfUrlStr;
|
||||
att.width = widthStr;
|
||||
att.height = heightStr;
|
||||
var par = {};
|
||||
if (parObj && typeof parObj === OBJECT) {
|
||||
for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
|
||||
par[j] = parObj[j];
|
||||
}
|
||||
}
|
||||
if (flashvarsObj && typeof flashvarsObj === OBJECT) {
|
||||
for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
|
||||
if (typeof par.flashvars != UNDEF) {
|
||||
par.flashvars += "&" + k + "=" + flashvarsObj[k];
|
||||
}
|
||||
else {
|
||||
par.flashvars = k + "=" + flashvarsObj[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasPlayerVersion(swfVersionStr)) { // create SWF
|
||||
var obj = createSWF(att, par, replaceElemIdStr);
|
||||
if (att.id == replaceElemIdStr) {
|
||||
setVisibility(replaceElemIdStr, true);
|
||||
}
|
||||
callbackObj.success = true;
|
||||
callbackObj.ref = obj;
|
||||
}
|
||||
else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
|
||||
att.data = xiSwfUrlStr;
|
||||
showExpressInstall(att, par, replaceElemIdStr, callbackFn);
|
||||
return;
|
||||
}
|
||||
else { // show alternative content
|
||||
setVisibility(replaceElemIdStr, true);
|
||||
}
|
||||
if (callbackFn) { callbackFn(callbackObj); }
|
||||
});
|
||||
}
|
||||
else if (callbackFn) { callbackFn(callbackObj); }
|
||||
},
|
||||
|
||||
switchOffAutoHideShow: function() {
|
||||
autoHideShow = false;
|
||||
},
|
||||
|
||||
ua: ua,
|
||||
|
||||
getFlashPlayerVersion: function() {
|
||||
return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
|
||||
},
|
||||
|
||||
hasFlashPlayerVersion: hasPlayerVersion,
|
||||
|
||||
createSWF: function(attObj, parObj, replaceElemIdStr) {
|
||||
if (ua.w3) {
|
||||
return createSWF(attObj, parObj, replaceElemIdStr);
|
||||
}
|
||||
else {
|
||||
return undefined;
|
||||
}
|
||||
},
|
||||
|
||||
showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {
|
||||
if (ua.w3 && canExpressInstall()) {
|
||||
showExpressInstall(att, par, replaceElemIdStr, callbackFn);
|
||||
}
|
||||
},
|
||||
|
||||
removeSWF: function(objElemIdStr) {
|
||||
if (ua.w3) {
|
||||
removeSWF(objElemIdStr);
|
||||
}
|
||||
},
|
||||
|
||||
createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {
|
||||
if (ua.w3) {
|
||||
createCSS(selStr, declStr, mediaStr, newStyleBoolean);
|
||||
}
|
||||
},
|
||||
|
||||
addDomLoadEvent: addDomLoadEvent,
|
||||
|
||||
addLoadEvent: addLoadEvent,
|
||||
|
||||
getQueryParamValue: function(param) {
|
||||
var q = doc.location.search || doc.location.hash;
|
||||
if (q) {
|
||||
if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark
|
||||
if (param == null) {
|
||||
return urlEncodeIfNecessary(q);
|
||||
}
|
||||
var pairs = q.split("&");
|
||||
for (var i = 0; i < pairs.length; i++) {
|
||||
if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
|
||||
return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
},
|
||||
|
||||
// For internal usage only
|
||||
expressInstallCallback: function() {
|
||||
if (isExpressInstallActive) {
|
||||
var obj = getElementById(EXPRESS_INSTALL_ID);
|
||||
if (obj && storedAltContent) {
|
||||
obj.parentNode.replaceChild(storedAltContent, obj);
|
||||
if (storedAltContentId) {
|
||||
setVisibility(storedAltContentId, true);
|
||||
if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }
|
||||
}
|
||||
if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }
|
||||
}
|
||||
isExpressInstallActive = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
}();
|
||||
|
||||
|
|
@ -11,18 +11,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
console.log("cookie theme=", theme);
|
||||
|
||||
if (theme !== "default") {
|
||||
var cur = document.getElementById("usertheme");
|
||||
cur.parentNode.removeChild(cur);
|
||||
console.log('removed');
|
||||
var css = document.createElement("link");
|
||||
css.setAttribute("rel", "stylesheet");
|
||||
css.setAttribute("type", "text/css");
|
||||
css.setAttribute("href", theme);
|
||||
css.setAttribute("id", "usertheme");
|
||||
document.head.appendChild(css);
|
||||
console.log(css);
|
||||
}
|
||||
})();
|
||||
|
|
|
|||
694
www/js/ui.js
Normal file
694
www/js/ui.js
Normal file
|
|
@ -0,0 +1,694 @@
|
|||
/*
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2013 Calvin Montgomery
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* window focus/blur */
|
||||
$(window).focus(function() {
|
||||
FOCUSED = true;
|
||||
clearInterval(TITLE_BLINK);
|
||||
TITLE_BLINK = false;
|
||||
document.title = PAGETITLE;
|
||||
}).blur(function() {
|
||||
FOCUSED = false;
|
||||
});
|
||||
|
||||
$("#togglemotd").click(function () {
|
||||
var hidden = $("#motd").css("display") === "none";
|
||||
$("#motd").toggle();
|
||||
if (hidden) {
|
||||
$("#togglemotd").find(".glyphicon-plus")
|
||||
.removeClass("glyphicon-plus")
|
||||
.addClass("glyphicon-minus");
|
||||
} else {
|
||||
$("#togglemotd").find(".glyphicon-minus")
|
||||
.removeClass("glyphicon-minus")
|
||||
.addClass("glyphicon-plus");
|
||||
}
|
||||
});
|
||||
|
||||
/* chatbox */
|
||||
|
||||
$("#modflair").click(function () {
|
||||
var m = $("#modflair");
|
||||
if (m.hasClass("label-success")) {
|
||||
USEROPTS.modhat = false;
|
||||
m.removeClass("label-success")
|
||||
.addClass("label-default");
|
||||
} else {
|
||||
USEROPTS.modhat = true;
|
||||
m.removeClass("label-default")
|
||||
.addClass("label-success");
|
||||
}
|
||||
});
|
||||
|
||||
$("#adminflair").click(function () {
|
||||
var m = $("#adminflair");
|
||||
if (m.hasClass("label-danger")) {
|
||||
USEROPTS.adminhat = false;
|
||||
m.removeClass("label-danger")
|
||||
.addClass("label-default");
|
||||
} else {
|
||||
USEROPTS.adminhat = true;
|
||||
m.removeClass("label-default")
|
||||
.addClass("label-danger");
|
||||
}
|
||||
});
|
||||
|
||||
$("#usercount").mouseenter(function (ev) {
|
||||
var breakdown = calcUserBreakdown();
|
||||
// re-using profile-box class for convenience
|
||||
var popup = $("<div/>")
|
||||
.addClass("profile-box")
|
||||
.css("top", (ev.clientY + 5) + "px")
|
||||
.css("left", (ev.clientX) + "px")
|
||||
.appendTo($("#usercount"));
|
||||
|
||||
var contents = "";
|
||||
for(var key in breakdown) {
|
||||
contents += "<strong>" + key + ": </strong>" + breakdown[key];
|
||||
contents += "<br>"
|
||||
}
|
||||
|
||||
popup.html(contents);
|
||||
});
|
||||
|
||||
$("#usercount").mousemove(function (ev) {
|
||||
var popup = $("#usercount").find(".profile-box");
|
||||
if(popup.length == 0)
|
||||
return;
|
||||
|
||||
popup.css("top", (ev.clientY + 5) + "px");
|
||||
popup.css("left", (ev.clientX) + "px");
|
||||
});
|
||||
|
||||
$("#usercount").mouseleave(function () {
|
||||
$("#usercount").find(".profile-box").remove();
|
||||
});
|
||||
|
||||
$("#messagebuffer").mouseenter(function() { SCROLLCHAT = false; });
|
||||
$("#messagebuffer").mouseleave(function() { SCROLLCHAT = true; });
|
||||
|
||||
$("#guestname").keydown(function (ev) {
|
||||
if (ev.keyCode === 13) {
|
||||
socket.emit("login", {
|
||||
name: $("#guestname").val()
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function chatTabComplete() {
|
||||
var words = $("#chatline").val().split(" ");
|
||||
var current = words[words.length - 1].toLowerCase();
|
||||
if (!current.match(/^[\w-]{1,20}$/)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var __slice = Array.prototype.slice;
|
||||
var users = __slice.call($("#userlist").children()).map(function (elem) {
|
||||
return elem.children[1].innerHTML;
|
||||
}).filter(function (name) {
|
||||
return name.toLowerCase().indexOf(current) === 0;
|
||||
});
|
||||
|
||||
// users now contains a list of names that start with current word
|
||||
|
||||
if (users.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// trim possible names to the shortest possible completion
|
||||
var min = Math.min.apply(Math, users.map(function (name) {
|
||||
return name.length;
|
||||
}));
|
||||
users = users.map(function (name) {
|
||||
return name.substring(0, min);
|
||||
});
|
||||
|
||||
// continually trim off letters until all prefixes are the same
|
||||
var changed = true;
|
||||
var iter = 21;
|
||||
while (changed) {
|
||||
changed = false;
|
||||
var first = users[0];
|
||||
for (var i = 1; i < users.length; i++) {
|
||||
if (users[i] !== first) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
users = users.map(function (name) {
|
||||
return name.substring(0, name.length - 1);
|
||||
});
|
||||
}
|
||||
|
||||
// In the event something above doesn't generate a break condition, limit
|
||||
// the maximum number of repetitions
|
||||
if (--iter < 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
current = users[0].substring(0, min);
|
||||
if (users.length === 1) {
|
||||
if (words.length === 1) {
|
||||
current += ":";
|
||||
}
|
||||
current += " ";
|
||||
}
|
||||
words[words.length - 1] = current;
|
||||
$("#chatline").val(words.join(" "));
|
||||
}
|
||||
|
||||
$("#chatline").keydown(function(ev) {
|
||||
// Enter/return
|
||||
if(ev.keyCode == 13) {
|
||||
if (CHATTHROTTLE) {
|
||||
return;
|
||||
}
|
||||
var msg = $("#chatline").val();
|
||||
if(msg.trim()) {
|
||||
var meta = {};
|
||||
if (USEROPTS.adminhat && CLIENT.rank >= 255) {
|
||||
msg = "/a " + msg;
|
||||
} else if (USEROPTS.modhat && CLIENT.rank >= Rank.Moderator) {
|
||||
meta.modflair = CLIENT.rank;
|
||||
}
|
||||
|
||||
// The /m command no longer exists, so emulate it clientside
|
||||
if (CLIENT.rank >= 2 && msg.indexOf("/m ") === 0) {
|
||||
meta.modflair = CLIENT.rank;
|
||||
msg = msg.substring(3);
|
||||
}
|
||||
|
||||
socket.emit("chatMsg", {
|
||||
msg: msg,
|
||||
meta: meta
|
||||
});
|
||||
CHATHIST.push($("#chatline").val());
|
||||
CHATHISTIDX = CHATHIST.length;
|
||||
$("#chatline").val("");
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if(ev.keyCode == 9) { // Tab completion
|
||||
chatTabComplete();
|
||||
ev.preventDefault();
|
||||
return false;
|
||||
}
|
||||
else if(ev.keyCode == 38) { // Up arrow (input history)
|
||||
if(CHATHISTIDX == CHATHIST.length) {
|
||||
CHATHIST.push($("#chatline").val());
|
||||
}
|
||||
if(CHATHISTIDX > 0) {
|
||||
CHATHISTIDX--;
|
||||
$("#chatline").val(CHATHIST[CHATHISTIDX]);
|
||||
}
|
||||
|
||||
ev.preventDefault();
|
||||
return false;
|
||||
}
|
||||
else if(ev.keyCode == 40) { // Down arrow (input history)
|
||||
if(CHATHISTIDX < CHATHIST.length - 1) {
|
||||
CHATHISTIDX++;
|
||||
$("#chatline").val(CHATHIST[CHATHISTIDX]);
|
||||
}
|
||||
|
||||
ev.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
/* poll controls */
|
||||
$("#newpollbtn").click(showPollMenu);
|
||||
|
||||
/* search controls */
|
||||
$("#library_search").click(function() {
|
||||
socket.emit("searchMedia", {
|
||||
source: "library",
|
||||
query: $("#library_query").val().toLowerCase()
|
||||
});
|
||||
});
|
||||
|
||||
$("#library_query").keydown(function(ev) {
|
||||
if(ev.keyCode == 13) {
|
||||
socket.emit("searchMedia", {
|
||||
source: "library",
|
||||
query: $("#library_query").val().toLowerCase()
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#youtube_search").click(function () {
|
||||
var query = $("#library_query").val().toLowerCase();
|
||||
if(parseMediaLink(query).type !== null) {
|
||||
makeAlert("Media Link", "If you already have the link, paste it " +
|
||||
"in the 'Media URL' box under Playlist Controls. This "+
|
||||
"searchbar works like YouTube's search function.",
|
||||
"alert-danger")
|
||||
.insertBefore($("#library"));
|
||||
}
|
||||
|
||||
socket.emit("searchMedia", {
|
||||
source: "yt",
|
||||
query: query
|
||||
});
|
||||
});
|
||||
|
||||
/* user playlists */
|
||||
|
||||
$("#userpl_save").click(function() {
|
||||
if($("#userpl_name").val().trim() == "") {
|
||||
makeAlert("Invalid Name", "Playlist name cannot be empty", "alert-danger")
|
||||
.insertAfter($("#userpl_save").parent());
|
||||
return;
|
||||
}
|
||||
socket.emit("clonePlaylist", {
|
||||
name: $("#userpl_name").val()
|
||||
});
|
||||
});
|
||||
|
||||
/* video controls */
|
||||
|
||||
$("#mediarefresh").click(function() {
|
||||
PLAYER.type = "";
|
||||
PLAYER.id = "";
|
||||
// playerReady triggers the server to send a changeMedia.
|
||||
// the changeMedia handler then reloads the player
|
||||
socket.emit("playerReady");
|
||||
});
|
||||
|
||||
/* playlist controls */
|
||||
|
||||
$("#queue").sortable({
|
||||
start: function(ev, ui) {
|
||||
PL_FROM = ui.item.data("uid");
|
||||
},
|
||||
update: function(ev, ui) {
|
||||
var prev = ui.item.prevAll();
|
||||
if(prev.length == 0)
|
||||
PL_AFTER = "prepend";
|
||||
else
|
||||
PL_AFTER = $(prev[0]).data("uid");
|
||||
socket.emit("moveMedia", {
|
||||
from: PL_FROM,
|
||||
after: PL_AFTER
|
||||
});
|
||||
$("#queue").sortable("cancel");
|
||||
}
|
||||
});
|
||||
$("#queue").disableSelection();
|
||||
|
||||
function queue(pos, src) {
|
||||
if (!src) {
|
||||
src = "url";
|
||||
}
|
||||
|
||||
if (src === "customembed") {
|
||||
var title = $("#customembed-title").val();
|
||||
if (!title) {
|
||||
title = false;
|
||||
}
|
||||
var content = $("#customembed-content").val();
|
||||
|
||||
socket.emit("queue", {
|
||||
id: content,
|
||||
title: title,
|
||||
pos: pos,
|
||||
type: "cu",
|
||||
temp: $(".add-temp").prop("checked")
|
||||
});
|
||||
} else {
|
||||
var link = $("#mediaurl").val();
|
||||
var data = parseMediaLink(link);
|
||||
var duration = undefined;
|
||||
if (link.indexOf("jw:") === 0) {
|
||||
duration = parseInt($("#addfromurl-duration-val").val());
|
||||
if (duration <= 0 || isNaN(duration)) {
|
||||
duration = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (data.id == null || data.type == null) {
|
||||
makeAlert("Error", "Failed to parse link. Please check that it is correct",
|
||||
"alert-danger")
|
||||
.insertAfter($("#addfromurl"));
|
||||
} else {
|
||||
$("#mediaurl").val("");
|
||||
$("#addfromurl-duration").remove();
|
||||
socket.emit("queue", {
|
||||
id: data.id,
|
||||
type: data.type,
|
||||
pos: pos,
|
||||
duration: duration,
|
||||
temp: $(".add-temp").prop("checked")
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$("#queue_next").click(queue.bind(this, "next", "url"));
|
||||
$("#queue_end").click(queue.bind(this, "end", "url"));
|
||||
$("#ce_queue_next").click(queue.bind(this, "next", "customembed"));
|
||||
$("#ce_queue_end").click(queue.bind(this, "end", "customembed"));
|
||||
|
||||
$("#mediaurl").keyup(function(ev) {
|
||||
if (ev.keyCode === 13) {
|
||||
queue("end", "url");
|
||||
} else if ($("#mediaurl").val().indexOf("jw:") === 0) {
|
||||
var duration = $("#addfromurl-duration");
|
||||
if (duration.length === 0) {
|
||||
duration = $("<div/>")
|
||||
.attr("id", "addfromurl-duration")
|
||||
.appendTo($("#addfromurl"));
|
||||
$("<span/>").text("JWPlayer Duration (seconds) (optional)")
|
||||
.appendTo(duration);
|
||||
$("<input/>").addClass("form-control")
|
||||
.attr("type", "text")
|
||||
.attr("id", "addfromurl-duration-val")
|
||||
.appendTo($("#addfromurl-duration"));
|
||||
}
|
||||
} else {
|
||||
$("#addfromurl-duration").remove();
|
||||
}
|
||||
});
|
||||
|
||||
$("#customembed-content").keydown(function(ev) {
|
||||
if (ev.keyCode === 13) {
|
||||
queue("end", "customembed");
|
||||
}
|
||||
});
|
||||
|
||||
$("#qlockbtn").click(function() {
|
||||
socket.emit("togglePlaylistLock");
|
||||
});
|
||||
|
||||
$("#voteskip").click(function() {
|
||||
socket.emit("voteskip");
|
||||
$("#voteskip").attr("disabled", true);
|
||||
});
|
||||
|
||||
$("#getplaylist").click(function() {
|
||||
var callback = function(data) {
|
||||
hidePlayer();
|
||||
socket.listeners("playlist").splice(
|
||||
socket.listeners("playlist").indexOf(callback)
|
||||
);
|
||||
var list = [];
|
||||
for(var i = 0; i < data.length; i++) {
|
||||
var entry = formatURL(data[i].media);
|
||||
list.push(entry);
|
||||
}
|
||||
var urls = list.join(",");
|
||||
|
||||
var outer = $("<div/>").addClass("modal fade")
|
||||
.appendTo($("body"));
|
||||
modal = $("<div/>").addClass("modal-dialog").appendTo(outer);
|
||||
modal = $("<div/>").addClass("modal-content").appendTo(modal);
|
||||
var head = $("<div/>").addClass("modal-header")
|
||||
.appendTo(modal);
|
||||
$("<button/>").addClass("close")
|
||||
.attr("data-dismiss", "modal")
|
||||
.attr("aria-hidden", "true")
|
||||
.html("×")
|
||||
.appendTo(head);
|
||||
$("<h3/>").text("Playlist URLs").appendTo(head);
|
||||
var body = $("<div/>").addClass("modal-body").appendTo(modal);
|
||||
$("<input/>").addClass("form-control").attr("type", "text")
|
||||
.val(urls)
|
||||
.appendTo(body);
|
||||
$("<div/>").addClass("modal-footer").appendTo(modal);
|
||||
outer.on("hidden", function() {
|
||||
outer.remove();
|
||||
unhidePlayer();
|
||||
});
|
||||
outer.modal();
|
||||
};
|
||||
socket.on("playlist", callback);
|
||||
socket.emit("requestPlaylist");
|
||||
});
|
||||
|
||||
$("#clearplaylist").click(function() {
|
||||
var clear = confirm("Are you sure you want to clear the playlist?");
|
||||
if(clear) {
|
||||
socket.emit("clearPlaylist");
|
||||
}
|
||||
});
|
||||
|
||||
$("#shuffleplaylist").click(function() {
|
||||
var shuffle = confirm("Are you sure you want to shuffle the playlist?");
|
||||
if(shuffle) {
|
||||
socket.emit("shufflePlaylist");
|
||||
}
|
||||
});
|
||||
|
||||
/* load channel */
|
||||
|
||||
var loc = document.location+"";
|
||||
var m = loc.match(/\/r\/([a-zA-Z0-9-_#]+)$/);
|
||||
if(m) {
|
||||
CHANNEL.name = m[1];
|
||||
if (CHANNEL.name.indexOf("#") !== -1) {
|
||||
CHANNEL.name = CHANNEL.name.substring(0, CHANNEL.name.indexOf("#"));
|
||||
}
|
||||
}
|
||||
|
||||
/* oh internet explorer, how I hate thee */
|
||||
$(":input:not(textarea)").keypress(function(ev) {
|
||||
return ev.keyCode != 13;
|
||||
});
|
||||
|
||||
if (location.protocol === "https:") {
|
||||
var title = "Warning";
|
||||
var text = "You connected to this page via HTTPS. Due to browser "+
|
||||
"security policy, certain media players may throw warnings,"+
|
||||
" while others may not work at all due to only being "+
|
||||
"available over plain HTTP.<br>To encrypt your websocket "+
|
||||
"traffic and API calls (logins, account management, etc) "+
|
||||
"while loading this page over plain HTTP, enable the SSL "+
|
||||
"option from the Options menu.";
|
||||
makeAlert(title, text, "alert-warning")
|
||||
.appendTo($("#announcements"));
|
||||
}
|
||||
|
||||
/* channel ranks stuff */
|
||||
function chanrankSubmit(rank) {
|
||||
var name = $("#cs-chanranks-name").val();
|
||||
socket.emit("setChannelRank", {
|
||||
user: name,
|
||||
rank: rank
|
||||
});
|
||||
}
|
||||
$("#cs-chanranks-mod").click(chanrankSubmit.bind(this, 2));
|
||||
$("#cs-chanranks-adm").click(chanrankSubmit.bind(this, 3));
|
||||
$("#cs-chanranks-owner").click(chanrankSubmit.bind(this, 4));
|
||||
|
||||
["#showmediaurl", "#showsearch", "#showcustomembed", "#showplaylistmanager"]
|
||||
.forEach(function (id) {
|
||||
$(id).click(function () {
|
||||
var wasActive = $(id).hasClass("active");
|
||||
$(".plcontrol-collapse").collapse("hide");
|
||||
$("#plcontrol button.active").button("toggle");
|
||||
if (!wasActive) {
|
||||
$(id).button("toggle");
|
||||
}
|
||||
});
|
||||
});
|
||||
$("#plcontrol button").button();
|
||||
$("#plcontrol button").button("hide");
|
||||
$(".plcontrol-collapse").collapse();
|
||||
$(".plcontrol-collapse").collapse("hide");
|
||||
|
||||
$(".cs-checkbox").change(function () {
|
||||
var box = $(this);
|
||||
var key = box.attr("id").replace("cs-", "");
|
||||
var value = box.prop("checked");
|
||||
var data = {};
|
||||
data[key] = value;
|
||||
socket.emit("setOptions", data);
|
||||
});
|
||||
|
||||
$(".cs-textbox").keyup(function () {
|
||||
var box = $(this);
|
||||
var key = box.attr("id").replace("cs-", "");
|
||||
var value = box.val();
|
||||
var lastkey = Date.now();
|
||||
box.data("lastkey", lastkey);
|
||||
|
||||
setTimeout(function () {
|
||||
if (box.data("lastkey") !== lastkey || box.val() !== value) {
|
||||
return;
|
||||
}
|
||||
|
||||
var data = {};
|
||||
if (key.match(/chat_antiflood_(burst|sustained)/)) {
|
||||
data = {
|
||||
chat_antiflood_params: {
|
||||
burst: $("#cs-chat_antiflood_burst").val(),
|
||||
sustained: $("#cs-chat_antiflood_sustained").val()
|
||||
}
|
||||
};
|
||||
} else {
|
||||
data[key] = value;
|
||||
}
|
||||
socket.emit("setOptions", data);
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
$("#cs-chanlog-refresh").click(function () {
|
||||
socket.emit("readChanLog");
|
||||
});
|
||||
|
||||
$("#cs-chanlog-filter").change(filterChannelLog);
|
||||
|
||||
$("#cs-motdsubmit").click(function () {
|
||||
socket.emit("setMotd", {
|
||||
motd: $("#cs-motdtext").val()
|
||||
});
|
||||
});
|
||||
|
||||
$("#cs-csssubmit").click(function () {
|
||||
socket.emit("setChannelCSS", {
|
||||
css: $("#cs-csstext").val()
|
||||
});
|
||||
});
|
||||
|
||||
$("#cs-jssubmit").click(function () {
|
||||
socket.emit("setChannelJS", {
|
||||
js: $("#cs-jstext").val()
|
||||
});
|
||||
});
|
||||
|
||||
$("#cs-chatfilters-newsubmit").click(function () {
|
||||
var name = $("#cs-chatfilters-newname").val();
|
||||
var regex = $("#cs-chatfilters-newregex").val();
|
||||
var flags = $("#cs-chatfilters-newflags").val();
|
||||
var replace = $("#cs-chatfilters-newreplace").val();
|
||||
|
||||
try {
|
||||
new RegExp(regex, flags);
|
||||
} catch (e) {
|
||||
alert("Regex error: " + e);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(name, regex, flags, replace);
|
||||
socket.emit("updateFilter", {
|
||||
name: name,
|
||||
source: regex,
|
||||
flags: flags,
|
||||
replace: replace,
|
||||
active: true
|
||||
});
|
||||
|
||||
$("#cs-chatfilters-newname").val("");
|
||||
$("#cs-chatfilters-newregex").val("");
|
||||
$("#cs-chatfilters-newflags").val("");
|
||||
$("#cs-chatfilters-newreplace").val("");
|
||||
});
|
||||
|
||||
$("#cs-emotes-newsubmit").click(function () {
|
||||
var name = $("#cs-emotes-newname").val();
|
||||
var image = $("#cs-emotes-newimage").val();
|
||||
|
||||
socket.emit("updateEmote", {
|
||||
name: name,
|
||||
image: image,
|
||||
});
|
||||
|
||||
$("#cs-emotes-newname").val("");
|
||||
$("#cs-emotes-newimage").val("");
|
||||
});
|
||||
|
||||
$("#cs-chatfilters-export").click(function () {
|
||||
var callback = function (data) {
|
||||
socket.listeners("chatFilters").splice(
|
||||
socket.listeners("chatFilters").indexOf(callback)
|
||||
);
|
||||
|
||||
$("#cs-chatfilters-exporttext").val(JSON.stringify(data));
|
||||
};
|
||||
|
||||
socket.on("chatFilters", callback);
|
||||
socket.emit("requestChatFilters");
|
||||
});
|
||||
|
||||
$("#cs-chatfilters-import").click(function () {
|
||||
var text = $("#cs-chatfilters-exporttext").val();
|
||||
var choose = confirm("You are about to import filters from the contents of the textbox below the import button. If this is empty, it will clear all of your filters. Are you sure you want to continue?");
|
||||
if (!choose) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (text.trim() === "") {
|
||||
text = "[]";
|
||||
}
|
||||
|
||||
var data;
|
||||
try {
|
||||
data = JSON.parse(text);
|
||||
} catch (e) {
|
||||
alert("Invalid import data: " + e);
|
||||
return;
|
||||
}
|
||||
|
||||
socket.emit("importFilters", data);
|
||||
});
|
||||
|
||||
$("#cs-emotes-export").click(function () {
|
||||
var em = CHANNEL.emotes.map(function (f) {
|
||||
return {
|
||||
name: f.name,
|
||||
image: f.image
|
||||
};
|
||||
});
|
||||
$("#cs-emotes-exporttext").val(JSON.stringify(em));
|
||||
});
|
||||
|
||||
$("#cs-emotes-import").click(function () {
|
||||
var text = $("#cs-emotes-exporttext").val();
|
||||
var choose = confirm("You are about to import emotes from the contents of the textbox below the import button. If this is empty, it will clear all of your emotes. Are you sure you want to continue?");
|
||||
if (!choose) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (text.trim() === "") {
|
||||
text = "[]";
|
||||
}
|
||||
|
||||
var data;
|
||||
try {
|
||||
data = JSON.parse(text);
|
||||
} catch (e) {
|
||||
alert("Invalid import data: " + e);
|
||||
return;
|
||||
}
|
||||
|
||||
socket.emit("importEmotes", data);
|
||||
});
|
||||
|
||||
var toggleUserlist = function () {
|
||||
if ($("#userlist").css("display") === "none") {
|
||||
$("#userlist").show();
|
||||
} else {
|
||||
$("#userlist").hide();
|
||||
}
|
||||
scrollChat();
|
||||
};
|
||||
|
||||
$("#usercount").click(toggleUserlist);
|
||||
$("#userlisttoggle").click(toggleUserlist);
|
||||
|
||||
$(".add-temp").change(function () {
|
||||
$(".add-temp").prop("checked", $(this).prop("checked"));
|
||||
});
|
||||
|
||||
applyOpts();
|
||||
2388
www/js/util.js
Normal file
2388
www/js/util.js
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue