From 070a1e3ee5bbe44b6f3cdadedb031f3eee433ac6 Mon Sep 17 00:00:00 2001 From: "Eric J. Duran" Date: Wed, 17 Oct 2012 17:46:43 -0400 Subject: [PATCH] Replacing speakernotes plugin with a simple postMessage system --- index.html | 31 ++++++++++- plugin/speakernotes/notes.html => notes.html | 51 ++++++++---------- plugin/speakernotes/client.js | 38 -------------- plugin/speakernotes/index.js | 55 -------------------- 4 files changed, 52 insertions(+), 123 deletions(-) rename plugin/speakernotes/notes.html => notes.html (64%) delete mode 100644 plugin/speakernotes/client.js delete mode 100644 plugin/speakernotes/index.js diff --git a/index.html b/index.html index 3ea2412..43d8b38 100644 --- a/index.html +++ b/index.html @@ -350,7 +350,36 @@ function linkify( selector ) { { src: 'plugin/speakernotes/client.js', async: true, condition: function() { return window.location.host === 'localhost:1947'; } } ] }); - + + // Set up simple postMessage notes system. + var url = window.location.href; + if(url.indexOf('?' + 'notes' + '=') !== 'true') { + var notesPopup = window.open('notes.html'); + Reveal.addEventListener('slidechanged', function(event) { + var nextindexh; + var nextindexv; + var slideElement = event.currentSlide; + + if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { + nextindexh = event.indexh; + nextindexv = event.indexv + 1; + } else { + nextindexh = event.indexh + 1; + nextindexv = 0; + } + + var notes = slideElement.querySelector('aside.notes'); + var slideData = { + notes : notes ? notes.innerHTML : '', + indexh : event.indexh, + indexv : event.indexv, + nextindexh : nextindexh, + nextindexv : nextindexv, + markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false + }; + notesPopup.postMessage(JSON.stringify(slideData), '*'); + }); + } diff --git a/plugin/speakernotes/notes.html b/notes.html similarity index 64% rename from plugin/speakernotes/notes.html rename to notes.html index 13f043d..4dbc986 100644 --- a/plugin/speakernotes/notes.html +++ b/notes.html @@ -27,13 +27,13 @@ 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); @@ -53,7 +53,7 @@ width: 1280px; height: 1024px; border: none; - + -webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -ms-transform-origin: 0 0; @@ -89,40 +89,33 @@
- +
- + UPCOMING:
- - - + - diff --git a/plugin/speakernotes/client.js b/plugin/speakernotes/client.js deleted file mode 100644 index ad1bd46..0000000 --- a/plugin/speakernotes/client.js +++ /dev/null @@ -1,38 +0,0 @@ -(function() { - // don't emit events from inside the previews themselves - if ( window.location.search.match( /receiver/gi ) ) { return; } - - var socket = io.connect(window.location.origin); - var socketId = Math.random().toString().slice(2); - - console.log('View slide notes at ' + window.location.origin + '/notes/' + socketId); - window.open(window.location.origin + '/notes/' + socketId, 'notes-' + socketId) - - Reveal.addEventListener( 'slidechanged', function( event ) { - var nextindexh; - var nextindexv; - var slideElement = event.currentSlide; - - if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { - nextindexh = event.indexh; - nextindexv = event.indexv + 1; - } else { - nextindexh = event.indexh + 1; - nextindexv = 0; - } - - var notes = slideElement.querySelector('aside.notes'); - var slideData = { - notes : notes ? notes.innerHTML : '', - indexh : event.indexh, - indexv : event.indexv, - nextindexh : nextindexh, - nextindexv : nextindexv, - socketId : socketId, - markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false - - }; - - socket.emit('slidechanged', slideData); - } ); -}()); diff --git a/plugin/speakernotes/index.js b/plugin/speakernotes/index.js deleted file mode 100644 index e8c8023..0000000 --- a/plugin/speakernotes/index.js +++ /dev/null @@ -1,55 +0,0 @@ -var express = require('express'); -var fs = require('fs'); -var io = require('socket.io'); -var _ = require('underscore'); -var Mustache = require('mustache'); - -var app = express.createServer(); -var staticDir = express.static; - -io = io.listen(app); - -var opts = { - port : 1947, - baseDir : __dirname + '/../../' -}; - -io.sockets.on('connection', function(socket) { - socket.on('slidechanged', function(slideData) { - socket.broadcast.emit('slidedata', slideData); - }); -}); - -app.configure(function() { - [ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) { - app.use('/' + dir, staticDir(opts.baseDir + dir)); - }); -}); - -app.get("/", function(req, res) { - fs.createReadStream(opts.baseDir + '/index.html').pipe(res); -}); - -app.get("/notes/:socketId", function(req, res) { - - fs.readFile(opts.baseDir + 'plugin/speakernotes/notes.html', function(err, data) { - res.send(Mustache.to_html(data.toString(), { - socketId : req.params.socketId - })); - }); - // fs.createReadStream(opts.baseDir + 'speakernotes/notes.html').pipe(res); -}); - -// Actually listen -app.listen(opts.port || null); - -var brown = '\033[33m', - green = '\033[32m', - reset = '\033[0m'; - -var slidesLocation = "http://localhost" + ( opts.port ? ( ':' + opts.port ) : '' ); - -console.log( brown + "reveal.js - Speaker Notes" + reset ); -console.log( "1. Open the slides at " + green + slidesLocation + reset ); -console.log( "2. Click on the link your JS console to go to the notes page" ); -console.log( "3. Advance through your slides and your notes will advance automatically" );