(function() {
var CUSTOM_EMBED_WARNING, CustomEmbedPlayer, DEFAULT_ERROR, DailymotionPlayer, EmbedPlayer, FilePlayer, GoogleDrivePlayer, HLSPlayer, ImgurPlayer, LivestreamPlayer, Player, PlayerJSPlayer, RTMPPlayer, SmashcastPlayer, SoundCloudPlayer, StreamablePlayer, TYPE_MAP, TwitchClipPlayer, TwitchPlayer, UstreamPlayer, VideoJSPlayer, VimeoPlayer, YouTubePlayer, codecToMimeType, genParam, getSourceLabel, hasAnyTextTracks, sortSources,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
window.Player = Player = (function() {
function Player(data) {
if (!(this instanceof Player)) {
return new Player(data);
}
this.setMediaProperties(data);
this.paused = false;
this.latched = true;
this.seeklatch = false;
this.lastSTime = 0;
}
Player.prototype.load = function(data) {
return this.setMediaProperties(data);
};
Player.prototype.setMediaProperties = function(data) {
this.mediaId = data.id;
this.mediaType = data.type;
return this.mediaLength = data.seconds;
};
Player.prototype.play = function() {
return this.paused = false;
};
Player.prototype.pause = function() {
return this.paused = true;
};
Player.prototype.latch = function() {
if (!this.latched) {
return this.latched = true;
}
};
Player.prototype.unlatch = function() {
if (!this.seeklatch) {
var _this = this;
this.getTime(function(ct){//checks to make sure the video isn't starting as this gets called like crazy :P
if(ct > 0){
if (_this.latched) {
$("#latchvid").show();
}
_this.latched = false;
}
});
} else {
return this.seeklatch = false;
}
};
Player.prototype.latchseek = function() {
return this.seeklatch = true;
};
Player.prototype.getLatch = function(cb) {
return cb(this.latched);
};
Player.prototype.seekTo = function(time) {};
Player.prototype.setVolume = function(volume) {};
Player.prototype.getTime = function(cb) {
return cb(0);
};
Player.prototype.isPaused = function(cb) {
return cb(this.paused);
};
Player.prototype.getVolume = function(cb) {
return cb(VOLUME);
};
Player.prototype.getRes = function(cb) {
return cb();
};
Player.prototype.destroy = function() {};
return Player;
})();
window.VimeoPlayer = VimeoPlayer = (function(superClass) {
extend(VimeoPlayer, superClass);
function VimeoPlayer(data) {
if (!(this instanceof VimeoPlayer)) {
return new VimeoPlayer(data);
}
this.load(data);
this.resx = 0;
this.resy = 0;
}
VimeoPlayer.prototype.load = function(data) {
this.setMediaProperties(data);
this.latched = true;
return waitUntilDefined(window, 'Vimeo', (function(_this) {
return function() {
var video;
video = $('');
removeOld(video);
video.attr({
src: "https://player.vimeo.com/video/" + data.id,
webkitallowfullscreen: true,
mozallowfullscreen: true,
allowfullscreen: true
});
if (USEROPTS.wmode_transparent) {
video.attr('wmode', 'transparent');
}
_this.vimeo = new Vimeo.Player(video[0]);
_this.vimeo.on('ended', function() {
if (CLIENT.leader) {
return socket.emit('playNext');
}
});
_this.vimeo.on('pause', function() {
_this.paused = true;
setMini();
if (CLIENT.leader) {
return sendVideoUpdate();
} else {
return _this.unlatch();
}
});
_this.vimeo.on('play', function() {
_this.paused = false;
setMini();
handleWindowResize();
if (CLIENT.leader) {
return sendVideoUpdate();
}
});
_this.vimeo.on('seeked', function() {
if (!CLIENT.leader) {
return _this.unlatch();
}
});
_this.vimeo.on('timeupdate', function() {
return setDur();
});
_this.vimeo.on('volumechange', function() {
return setMini();
});
_this.play();
_this.setVolume(VOLUME);
_this.vimeo.getVideoWidth().then(function(wid) {
return window.PLAYER.resx = wid;
})["catch"](function(error) {
return console.error('vimeo::getVideoWidth():', error);
});
return _this.vimeo.getVideoHeight().then(function(hgt) {
return window.PLAYER.resy = hgt;
})["catch"](function(error) {
return console.error('vimeo::getVideoHeight():', error);
});
};
})(this));
};
VimeoPlayer.prototype.play = function() {
this.paused = false;
if (this.vimeo) {
return this.vimeo.play()["catch"](function(error) {
return console.error('vimeo::play():', error);
});
}
};
VimeoPlayer.prototype.pause = function() {
this.paused = true;
if (this.vimeo) {
return this.vimeo.pause()["catch"](function(error) {
return console.error('vimeo::pause():', error);
});
}
};
VimeoPlayer.prototype.seekTo = function(time) {
if (this.vimeo) {
return this.vimeo.setCurrentTime(time)["catch"](function(error) {
return console.error('vimeo::setCurrentTime():', error);
});
}
};
VimeoPlayer.prototype.setVolume = function(volume) {
if (this.vimeo) {
return this.vimeo.setVolume(volume)["catch"](function(error) {
return console.error('vimeo::setVolume():', error);
});
}
};
VimeoPlayer.prototype.getTime = function(cb) {
if (this.vimeo) {
return this.vimeo.getCurrentTime().then(function(time) {
return cb(parseFloat(time));
})["catch"](function(error) {
return console.error('vimeo::getCurrentTime():', error);
});
} else {
return cb(0);
}
};
VimeoPlayer.prototype.getVolume = function(cb) {
if (this.vimeo) {
return this.vimeo.getVolume().then(function(volume) {
return cb(parseFloat(volume));
})["catch"](function(error) {
return console.error('vimeo::getVolume():', error);
});
} else {
return cb(VOLUME);
}
};
VimeoPlayer.prototype.getRes = function(cb) {
if (this.vimeo) {
return cb([this.resx, this.resy]);
} else {
return cb();
}
};
return VimeoPlayer;
})(Player);
window.YouTubePlayer = YouTubePlayer = (function(superClass) {
extend(YouTubePlayer, superClass);
function YouTubePlayer(data) {
if (!(this instanceof YouTubePlayer)) {
return new YouTubePlayer(data);
}
this.setMediaProperties(data);
this.pauseSeekRaceCondition = false;
if(USEROPTS.yt_source == "OFYT"){
waitUntilDefined(window, 'YT', (function(_this) {//THIS IS WHERE YT VIDEO EMBED IS CREATED, RIP DIS BITCH!
return function() {
return waitUntilDefined(YT, 'Player', function() {
var wmode;
removeOld();
wmode = USEROPTS.wmode_transparent ? 'transparent' : 'opaque';
return _this.yt = new YT.Player('ytapiplayer', {
videoId: data.id,
playerVars: {
autohide: 1,
autoplay: 1,
controls: 1,
iv_load_policy: 3,
rel: 0,
wmode: wmode
},
events: {
onReady: _this.onReady.bind(_this),
onStateChange: _this.onStateChange.bind(_this)
}
});
});
};
})(this));
}else{
var video;
video = $('');
removeOld(video);
video.attr({
src: "https://" + USEROPTS.yt_source + "/embed/" + data.id,
webkitallowfullscreen: true,
mozallowfullscreen: true,
allowfullscreen: true
});
this.inv = video;
}
}
YouTubePlayer.prototype.load = function(data) {
this.setMediaProperties(data);
if (this.yt && this.yt.ready) {
return this.yt.loadVideoById(data.id, data.currentTime);
} else {
return console.error('WTF? YouTubePlayer::load() called but yt is not ready');
}
};
YouTubePlayer.prototype.onReady = function() {
this.yt.ready = true;
this.latched = true;
handleVideoResize();
return this.setVolume(VOLUME);
};
YouTubePlayer.prototype.onStateChange = function(ev) {
setMini();
if (!CLIENT.leader && ev.data >= 2) {
this.unlatch();
}
if (ev.data === YT.PlayerState.PLAYING && this.pauseSeekRaceCondition) {
this.pause();
this.pauseSeekRaceCondition = false;
}
if ((ev.data === YT.PlayerState.PAUSED && !this.paused) || (ev.data === YT.PlayerState.PLAYING && this.paused)) {
this.paused = ev.data === YT.PlayerState.PAUSED;
if (CLIENT.leader) {
sendVideoUpdate();
}
}
if (ev.data === YT.PlayerState.ENDED && CLIENT.leader) {
return socket.emit('playNext');
}
};
YouTubePlayer.prototype.play = function() {
this.paused = false;
if (this.yt && this.yt.ready) {
return this.yt.playVideo();
}
};
YouTubePlayer.prototype.pause = function() {
this.paused = true;
if (this.yt && this.yt.ready) {
return this.yt.pauseVideo();
}
};
YouTubePlayer.prototype.seekTo = function(time) {
if (this.yt && this.yt.ready) {
return this.yt.seekTo(time, true);
}
};
YouTubePlayer.prototype.setVolume = function(volume) {
setMini();
if (this.yt && this.yt.ready) {
if (volume > 0) {
this.yt.unMute();
}
return this.yt.setVolume(volume * 100);
}
};
YouTubePlayer.prototype.setQuality = function(quality) {};
YouTubePlayer.prototype.getRes = function(cb) {
return cb([1920,1080]);
};
YouTubePlayer.prototype.getTime = function(cb) {
if (this.yt && this.yt.ready) {
return cb(this.yt.getCurrentTime());
} else {
return cb(0);
}
};
YouTubePlayer.prototype.getVolume = function(cb) {
if (this.yt && this.yt.ready) {
if (this.yt.isMuted()) {
return cb(0);
} else {
return cb(this.yt.getVolume() / 100);
}
} else {
return cb(VOLUME);
}
};
return YouTubePlayer;
})(Player);
window.DailymotionPlayer = DailymotionPlayer = (function(superClass) {
extend(DailymotionPlayer, superClass);
function DailymotionPlayer(data) {
if (!(this instanceof DailymotionPlayer)) {
return new DailymotionPlayer(data);
}
this.setMediaProperties(data);
this.initialVolumeSet = false;
this.playbackReadyCb = null;
this.latched = true;
waitUntilDefined(window, 'DM', (function(_this) {
return function() {
var params, quality;
removeOld();
params = {
autoplay: 1,
wmode: USEROPTS.wmode_transparent ? 'transparent' : 'opaque',
logo: 0
};
quality = _this.mapQuality(USEROPTS.default_quality);
if (quality !== 'auto') {
params.quality = quality;
}
_this.dm = DM.player('ytapiplayer', {
video: data.id,
width: parseInt(VWIDTH, 10),
height: parseInt(VHEIGHT, 10),
params: params
});
return _this.dm.addEventListener('apiready', function() {
_this.dmReady = true;
_this.dm.addEventListener('ended', function() {
if (CLIENT.leader) {
return socket.emit('playNext');
}
});
_this.dm.addEventListener('pause', function() {
_this.paused = true;
setMini();
if (CLIENT.leader) {
return sendVideoUpdate();
} else {
return _this.unlatch();
}
});
_this.dm.addEventListener('playing', function() {
_this.paused = false;
setMini();
if (CLIENT.leader) {
sendVideoUpdate();
}
if (!_this.initialVolumeSet) {
_this.setVolume(VOLUME);
return _this.initialVolumeSet = true;
}
});
_this.dm.addEventListener('seeked', function() {
if (!CLIENT.leader) {
return _this.unlatch();
}
});
_this.dm.addEventListener('timeupdate', function() {
return setDur();
});
_this.dm.addEventListener('volumechange', function() {
return setMini();
});
_this.dm.addEventListener('video_end', function() {
return _this.dmReady = false;
});
return _this.dm.addEventListener('playback_ready', function() {
_this.dmReady = true;
handleWindowResize();
if (_this.playbackReadyCb) {
_this.playbackReadyCb();
return _this.playbackReadyCb = null;
}
});
});
};
})(this));
}
DailymotionPlayer.prototype.load = function(data) {
this.setMediaProperties(data);
if (this.dm && this.dmReady) {
this.dm.load(data.id);
return this.dm.seek(data.currentTime);
} else if (this.dm) {
console.log('Warning: load() called before DM is ready, queueing callback');
return this.playbackReadyCb = (function(_this) {
return function() {
handleWindowResize();
_this.dm.load(data.id);
return _this.dm.seek(data.currentTime);
};
})(this);
} else {
return console.error('WTF? DailymotionPlayer::load() called but @dm is undefined');
}
};
DailymotionPlayer.prototype.pause = function() {
if (this.dm && this.dmReady) {
this.paused = true;
return this.dm.pause();
}
};
DailymotionPlayer.prototype.play = function() {
if (this.dm && this.dmReady) {
this.paused = false;
return this.dm.play();
}
};
DailymotionPlayer.prototype.seekTo = function(time) {
if (this.dm && this.dmReady) {
return this.dm.seek(time);
}
};
DailymotionPlayer.prototype.setVolume = function(volume) {
if (this.dm && this.dmReady) {
return this.dm.setVolume(volume);
}
};
DailymotionPlayer.prototype.getTime = function(cb) {
if (this.dm && this.dmReady) {
return cb(this.dm.currentTime);
} else {
return cb(0);
}
};
DailymotionPlayer.prototype.getVolume = function(cb) {
var volume;
if (this.dm && this.dmReady) {
if (this.dm.muted) {
return cb(0);
} else {
volume = this.dm.volume;
if (volume > 1) {
volume /= 100;
}
return cb(volume);
}
} else {
return cb(VOLUME);
}
};
DailymotionPlayer.prototype.getRes = function(cb) {
if (this.dm && this.dmReady) {
return cb([this.dm.width, this.dm.height]);
} else {
return cb();
}
};
DailymotionPlayer.prototype.mapQuality = function(quality) {
switch (String(quality)) {
case '240':
case '480':
case '720':
case '1080':
return String(quality);
case '360':
return '380';
case 'best':
return '1080';
default:
return 'auto';
}
};
DailymotionPlayer.prototype.destroy = function() {
if (this.dm) {
return this.dm.destroy('ytapiplayer');
}
};
return DailymotionPlayer;
})(Player);
sortSources = function(sources) {
var flv, flvOrder, idx, j, len, nonflv, pref, qualities, quality, qualityOrder, sourceOrder;
if (!sources) {
console.error('sortSources() called with null source list');
return [];
}
qualities = ['2160', '1440', '1080', '720', '540', '480', '360', '240'];
pref = String(USEROPTS.default_quality);
if (USEROPTS.default_quality === 'best') {
pref = '2160';
}
idx = qualities.indexOf(pref);
if (idx < 0) {
idx = 5;
}
qualityOrder = qualities.slice(idx).concat(qualities.slice(0, idx).reverse());
qualityOrder.unshift('auto');
sourceOrder = [];
flvOrder = [];
for (j = 0, len = qualityOrder.length; j < len; j++) {
quality = qualityOrder[j];
if (quality in sources) {
flv = [];
nonflv = [];
sources[quality].forEach(function(source) {
source.quality = quality;
if (source.contentType === 'video/flv') {
return flv.push(source);
} else {
return nonflv.push(source);
}
});
sourceOrder = sourceOrder.concat(nonflv);
flvOrder = flvOrder.concat(flv);
}
}
return sourceOrder.concat(flvOrder).map(function(source) {
return {
type: source.contentType,
src: source.link,
res: source.quality,
label: getSourceLabel(source)
};
});
};
getSourceLabel = function(source) {
if (source.res === 'auto') {
return 'auto';
} else {
return source.quality + "p " + (source.contentType.split('/')[1]);
}
};
waitUntilDefined(window, 'videojs', (function(_this) {
return function() {
return videojs.options.flash.swf = '/video-js.swf';
};
})(this));
hasAnyTextTracks = function(data) {
var ntracks, ref, ref1, ref2;
ntracks = (ref = data != null ? (ref1 = data.meta) != null ? (ref2 = ref1.textTracks) != null ? ref2.length : void 0 : void 0 : void 0) != null ? ref : 0;
return ntracks > 0;
};
window.VideoJSPlayer = VideoJSPlayer = (function(superClass) {
extend(VideoJSPlayer, superClass);
function VideoJSPlayer(data) {
if (!(this instanceof VideoJSPlayer)) {
return new VideoJSPlayer(data);
}
this.load(data);
}
VideoJSPlayer.prototype.loadPlayer = function(data) {
this.latched = true;
this.ofyt = data.ofyt;
return waitUntilDefined(window, 'videojs', (function(_this) {
return function() {
var attrs, video;
attrs = {
width: '100%',
height: '100%'
};
if (_this.mediaType === 'cm' && hasAnyTextTracks(data)) {
attrs.crossorigin = 'anonymous';
}
video = $('').addClass('video-js vjs-default-skin embed-responsive-item').attr(attrs);
removeOld(video);
_this.sources = sortSources(data.meta.direct);
if (_this.sources.length === 0) {
console.error('VideoJSPlayer::constructor(): data.meta.direct has no sources!');
_this.mediaType = null;
return;
}
_this.sourceIdx = 0;
if (data.meta.gdrive_subtitles) {
data.meta.gdrive_subtitles.available.forEach(function(subt) {
var label;
label = subt.lang_original;
if (subt.name) {
label += " (" + subt.name + ")";
}
return $('').attr({
src: "/gdvtt/" + data.id + "/" + subt.lang + "/" + subt.name + ".vtt?vid=" + data.meta.gdrive_subtitles.vid,
kind: 'subtitles',
srclang: subt.lang,
label: label
}).appendTo(video);
});
}
_this.player = videojs(video[0], {
autoplay: _this.sources[0].type !== 'application/dash+xml',
controls: true,
plugins: {
videoJsResolutionSwitcher: {
"default": _this.sources[0].res
}
}
});
return _this.player.ready(function() {
_this.player.updateSrc(_this.sources);
_this.player.on('error', function() {
var err;
err = _this.player.error();
if (err && err.code === 4) {
console.error('Caught error, trying next source');
_this.sourceIdx++;
if (_this.sourceIdx < _this.sources.length) {
return _this.player.src(_this.sources[_this.sourceIdx]);
} else {
console.error('Out of sources, video will not play');
if (_this.mediaType === 'gd') {
if (!window.hasDriveUserscript) {
return window.promptToInstallDriveUserscript();
} else {
return window.tellUserNotToContactMeAboutThingsThatAreNotSupported();
}
}
}
}
});
_this.setVolume(VOLUME);
_this.player.on('ended', function() {
if (CLIENT.leader) {
return socket.emit('playNext');
}
});
_this.player.on('pause', function() {
_this.paused = true;
setMini();
if (CLIENT.leader) {
return sendVideoUpdate();
} else {
return _this.unlatch();
}
});
_this.player.on('play', function() {
_this.paused = false;
setMini();
if (CLIENT.leader) {
return sendVideoUpdate();
}
});
_this.player.on('volumechange', function() {
return setMini();
});
_this.player.on('seeked', function() {
$('.vjs-waiting').removeClass('vjs-waiting');
if (!CLIENT.leader) {
return _this.unlatch();
}
});
_this.player.on('canplay', function() {
handleWindowResize();
});
_this.player.on('timeupdate', function() {
return setDur();
});
return setTimeout(function() {
return $('#ytapiplayer .vjs-subtitles-button .vjs-menu-item').each(function(i, elem) {
var textNode;
textNode = elem.childNodes[0];
if (textNode.textContent === localStorage.lastSubtitle) {
elem.click();
}
return elem.onclick = function() {
if (elem.attributes['aria-checked'].value === 'true') {
return localStorage.lastSubtitle = textNode.textContent;
}
};
});
}, 1);
});
};
})(this));
};
VideoJSPlayer.prototype.load = function(data) {
this.setMediaProperties(data);
this.latched = true;
this.destroy();
this.loadPlayer(data);
return this.setTracks(data);
};
VideoJSPlayer.prototype.setTracks = function(data) {
if (data.meta.textTracks) {
return data.meta.textTracks.forEach(function(track) {
var label;
label = track.name;
return $('