| <!doctype html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| |
| <title>reveal.js - Slide Notes</title> |
| |
| <style> |
| body { |
| font-family: Helvetica; |
| } |
| |
| #notes { |
| font-size: 24px; |
| width: 640px; |
| margin-top: 5px; |
| } |
| |
| #wrap-current-slide { |
| width: 640px; |
| height: 512px; |
| float: left; |
| overflow: hidden; |
| } |
| |
| #current-slide { |
| width: 1280px; |
| height: 1024px; |
| border: none; |
| |
| -webkit-transform-origin: 0 0; |
| -moz-transform-origin: 0 0; |
| -ms-transform-origin: 0 0; |
| -o-transform-origin: 0 0; |
| transform-origin: 0 0; |
| |
| -webkit-transform: scale(0.5); |
| -moz-transform: scale(0.5); |
| -ms-transform: scale(0.5); |
| -o-transform: scale(0.5); |
| transform: scale(0.5); |
| } |
| |
| #wrap-next-slide { |
| width: 448px; |
| height: 358px; |
| float: left; |
| margin: 0 0 0 10px; |
| overflow: hidden; |
| } |
| |
| #next-slide { |
| width: 1280px; |
| height: 1024px; |
| border: none; |
| |
| -webkit-transform-origin: 0 0; |
| -moz-transform-origin: 0 0; |
| -ms-transform-origin: 0 0; |
| -o-transform-origin: 0 0; |
| transform-origin: 0 0; |
| |
| -webkit-transform: scale(0.35); |
| -moz-transform: scale(0.35); |
| -ms-transform: scale(0.35); |
| -o-transform: scale(0.35); |
| transform: scale(0.35); |
| } |
| |
| .slides { |
| position: relative; |
| margin-bottom: 10px; |
| border: 1px solid black; |
| border-radius: 2px; |
| background: rgb(28, 30, 32); |
| } |
| |
| .slides span { |
| position: absolute; |
| top: 3px; |
| left: 3px; |
| font-weight: bold; |
| font-size: 14px; |
| color: rgba( 255, 255, 255, 0.9 ); |
| } |
| </style> |
| </head> |
| |
| <body> |
| |
| <div id="wrap-current-slide" class="slides"> |
| <iframe src="/?receiver" width="1280" height="1024" id="current-slide"></iframe> |
| </div> |
| |
| <div id="wrap-next-slide" class="slides"> |
| <iframe src="/?receiver" width="640" height="512" id="next-slide"></iframe> |
| <span>UPCOMING:</span> |
| </div> |
| <div id="notes"></div> |
| |
| <script src="/socket.io/socket.io.js"></script> |
| <script src="/plugin/markdown/showdown.js"></script> |
| |
| <script> |
| var socketId = '{{socketId}}'; |
| var socket = io.connect(window.location.origin); |
| var notes = document.getElementById('notes'); |
| var currentSlide = document.getElementById('current-slide'); |
| var nextSlide = document.getElementById('next-slide'); |
| |
| socket.on('slidedata', function(data) { |
| // ignore data from sockets that aren't ours |
| if (data.socketId !== socketId) { return; } |
| |
| if (data.markdown) { |
| notes.innerHTML = (new Showdown.converter()).makeHtml(data.notes); |
| } |
| else { |
| notes.innerHTML = data.notes; |
| } |
| |
| currentSlide.contentWindow.Reveal.slide(data.indexh, data.indexv); |
| nextSlide.contentWindow.Reveal.slide(data.nextindexh, data.nextindexv); |
| }); |
| socket.on('fragmentdata', function(data) { |
| // ignore data from sockets that aren't ours |
| if (data.socketId !== socketId) { return; } |
| |
| if (data.fragment === 'next') { |
| currentSlide.contentWindow.Reveal.nextFragment(); |
| } |
| else if (data.fragment === 'previous') { |
| currentSlide.contentWindow.Reveal.prevFragment(); |
| } |
| }); |
| </script> |
| |
| </body> |
| </html> |