aapssfc/book/_templates/runestone_slides/static/sync.js
2015-03-03 15:56:44 +01:00

129 lines
No EOL
3 KiB
JavaScript

var SlideSync = (
function() {
var
slides,
slide_listeners = [],
showConsole = function(e) {
slide_console = window.open(
DOCUMENTATION_OPTIONS.URL_ROOT + 'console.html',
'console',
"menubar=no,location=no,resizable=yes,scrollbars=yes,status=yes");
},
nextSlide = function() {
slides.nextSlide();
sendCommand('nextSlide');
sendCurSlide();
},
prevSlide = function() {
slides.prevSlide();
sendCommand('prevSlide');
sendCurSlide();
},
sendCurSlide = function() {
var curSlide = slides.curSlide();
notifyListeners(
{command: 'cur_slide',
content: curSlide,
prev_slide: curSlide > 0 ? slides.getSlideEl(curSlide - 1).outerHTML : '',
slide: slides.getSlideEl(curSlide).outerHTML,
next_slide: curSlide < slides.length() - 1 ? slides.getSlideEl(curSlide + 1).outerHTML : ''
}
);
},
notifyListeners = function (message) {
for (var i = 0; i < slide_listeners.length; i++) {
slide_listeners[i].postMessage(message, '*');
}
},
sendCommand = function(command) {
return sendMessage({'command':command});
},
sendMessage = function(message) {
notifyListeners(message);
},
handleMessage = function(message, source) {
console.log(message);
switch (message.command) {
case 'register':
slide_listeners.push(source);
sendMessage(
{command: 'num_slides',
content: slideEls.length
}
);
break;
case 'nextSlide':
slides.nextSlide();
break;
case 'prevSlide':
slides.prevSlide();
break;
};
sendCurSlide();
},
onKeyDown = function (event) {
switch (event.keyCode) {
case 84: // t
slides.toggleView && slides.toggleView();
break;
case 67: // c
showConsole();
break;
}
},
init = function(slidedeck) {
slides = slidedeck;
// attach event handlers
document.addEventListener('keydown', onKeyDown, false);
window.addEventListener(
'message',
function(e) {
return handleMessage(e.data, e.source);
}, false);
};
return {
init: init,
showConsole: showConsole,
nextSlide: nextSlide,
prevSlide: prevSlide,
handleMessage: handleMessage,
sendMessage: sendMessage,
sendCommand: sendCommand
};
}());