streaming-website/assets/js/lustige-subtitles.js
2015-12-21 12:01:57 +01:00

169 lines
3.6 KiB
JavaScript

MediaElementPlayer.prototype.buildsubtitles = function(player, controls, layers, media) {
var $btns = $([
'<span>',
'<div class="mejs-button mejs-subtitles mejs-subtitles-button">',
'<button type="button" title="Subtitles" aria-label="Subtitles"></button>',
'</div>',
'<div class="mejs-button mejs-subtitles mejs-subtitles-popup-button">',
'<button type="button" title="Subtitles in Popup" aria-label="Subtitles in Popup"></button>',
'</div>',
'</span>'
].join(''));
$btns
.appendTo(controls)
.on('click', '.mejs-subtitles-button', function() {
var $lines = $('.mejs-subtitles-lines');
if($lines.is(':visible'))
{
//console.log('hiding lines');
$lines.css({
display: 'none'
});
}
else
{
connectToL2S2()
}
})
.on('click', '.mejs-subtitles-popup-button', function() {
var
frontend_url = $('.js-subtitles-settings').data('frontend-url'),
room = $('.video-wrap').data('subtitles-room-id');
if(window.subtitles_window)
{
window.subtitles_window.close();
window.subtitles_window = null;
}
else
{
window.subtitles_window = window.open(frontend_url+''+room, 'subtitles-'+room, 'width=1000,height=560');
}
});
var $lines = $([
'<div class="mejs-subtitles-lines">',
'<div class="mejs-subtitles-lines-inner"></div>',
'</div>'
].join(''));
$lines.appendTo(layers);
};
function connectToL2S2()
{
var
baseurl = $('.js-subtitles-settings').data('primus-url'),
$lines = $('.mejs-subtitles-lines');
if(window.Primus)
{
if(window.primus_connection)
{
//console.log('showing lines');
$lines.css({
display: 'block'
});
}
else
{
openSocket();
}
}
else
{
//console.log('loading primus.js');
$.getScript(baseurl+'primus/primus.js', openSocket);
}
}
function openSocket()
{
if(window.primus_connection)
{
return;
}
var
baseurl = $('.js-subtitles-settings').data('primus-url'),
room = $('.video-wrap').data('subtitles-room-id'),
$lines = $('.mejs-subtitles-lines');
//console.log('connecting to primus server');
var primus = Primus.connect(baseurl);
window.primus_connection = primus;
window.silence_warning = window.setTimeout(showSilenceWarning, 10*1000);
primus.on('open', function()
{
primus.emit('join', room);
//console.log('showing lines');
$lines.css({
display: 'block'
});
});
// primus.on('lineStart', function(roomId, userId, text)
// {
// console.log('lineStart', roomId, userId, text);
// });
primus.on('line', function(roomId, text, userId, color)
{
if (text && text.trim().length > 0 && roomId == room) {
//console.log('line', roomId, userId, text, color);
appendLine(text);
window.clearTimeout(window.silence_warning);
window.silence_warning = window.setTimeout(showSilenceWarning, 60*1000);
}
});
}
function showSilenceWarning()
{
appendLine('*silence*');
}
function appendLine(line)
{
var
$inner = $('.mejs-subtitles-lines .mejs-subtitles-lines-inner'),
$line = $('<div>').text(line),
cnt = 3;
$inner
.append($line)
.find('> div')
.slice(0, -cnt)
.remove()
$line.autoScale();
}
$.fn.autoScale = function() {
if(!this.data('autoScaleOriginal')) {
this.data('autoScaleOriginal', parseInt(this.css('font-size')));
}
var
maxSize = this.data('autoScaleOriginal');
maxH = this.closest('.mejs-subtitles-lines').innerHeight(),
thisH = this.css('font-size', maxSize).outerHeight();
//console.log(thisH, maxH, maxSize);
while(thisH > maxH && maxSize > 0) {
//console.log(thisH, maxH, maxSize);
thisH = this.css('font-size', --maxSize).outerHeight();
}
return this;
}