-
Notifications
You must be signed in to change notification settings - Fork 2
/
player.js
76 lines (70 loc) · 1.79 KB
/
player.js
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
Player = (function () {
var dep = new Deps.Dependency;
return {
isReady: function () {
dep.depend();
return false;
},
markReady: function () {
dep.changed();
}
};
})();
Template.videoPlayer.rendered = function () {
// make the player "stick" on top when scrolled pass by
$('.video-player').waypoint("sticky");
var player = _V_('talk-player');
player.ready(function () {
var oldPlayer = Player;
Player = getPlayer(player);
oldPlayer.markReady();
});
// sync slides player with the video
var currentSlidePlayerPos = 0;
Deps.autorun(function () {
var transcript = Transcripts.findOne();
if (! Player.isReady() || ! transcript)
return;
var pos = Player.position();
var slidesTimings = transcript.slidesTimings;
var slide = _.sortedIndex(slidesTimings, pos);
if (pos !== slidesTimings[slide])
slide--;
var Reveal = $('#slides-player')[0].contentWindow.Reveal;
while (slide > currentSlidePlayerPos) {
currentSlidePlayerPos++;
Reveal.next();
}
while (slide < currentSlidePlayerPos) {
currentSlidePlayerPos--
Reveal.prev();
}
});
};
var getPlayer = function (player) {
var dep = new Deps.Dependency;
var position = 0;
var updatePosition = function () {
var cur = player.currentTime();
if (cur !== position) {
position = cur;
dep.changed();
}
// update every second, long polling :(
setTimeout(updatePosition, 1000);
};
setTimeout(updatePosition, 1);
return {
isReady: function () { return true; },
position: function () {
dep.depend();
return player.currentTime();
},
setPosition: function (ts) {
if (player.pause())
player.play();
player.currentTime(ts);
dep.changed();
}
};
};