aboutsummaryrefslogtreecommitdiff
path: root/assets/js/lustige-subtitles.js
blob: c7aa1b4833fe832943845b89216b47f280eba12e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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() {
			connectToL2S2()
		})
		.on('click', '.mejs-subtitles-popup-button', function() {
			var
				frontend_url = $('.js-subtitles-settings').data('frontend-url'),
				room = $('.video-wrap').data('subtitles-room-id');

			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');

	if(window.io)
	{
		return openSocket();
	}

	$.getScript(baseurl+'primus/primus.js', openSocket);
}

function openSocket()
{
	var
		baseurl = $('.js-subtitles-settings').data('primus-url'),
		room = $('.video-wrap').data('subtitles-room-id'),
		$lines = $('.mejs-subtitles-lines');

	var primus = Primus.connect(baseurl);

	primus.on('open', function()
	{
		primus.emit('join', room);
		$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);
		}
	});
}

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;
}