mirror of
https://github.com/voc/streaming-website
synced 2024-11-10 06:34:17 +00:00
169 lines
3.6 KiB
JavaScript
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;
|
|
}
|