Replacing speakernotes plugin with a simple postMessage system
authorEric J. Duran <eric.duran7@gmail.com>
Wed, 17 Oct 2012 21:46:43 +0000 (17:46 -0400)
committerEric J. Duran <eric.duran7@gmail.com>
Wed, 17 Oct 2012 21:46:43 +0000 (17:46 -0400)
index.html
notes.html [moved from plugin/speakernotes/notes.html with 64% similarity]
plugin/speakernotes/client.js [deleted file]
plugin/speakernotes/index.js [deleted file]

index 3ea2412cd8ee8d022f658b6b6454cedad5d0711d..43d8b38e45d995efe64eebf856d391ae5debc928 100644 (file)
@@ -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), '*');
+        });
+      }
                </script>
 
        </body>
similarity index 64%
rename from plugin/speakernotes/notes.html
rename to notes.html
index 13f043d8a4d8e1cd493fe875380a6ddba791a064..4dbc98650c802bb6e66e4eee42070069c967cc0a 100644 (file)
                                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;
        <body>
 
                <div id="wrap-current-slide" class="slides">
-                       <iframe src="/?receiver" width="1280" height="1024" id="current-slide"></iframe>
+                       <iframe src="index.html" 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>
+                       <iframe src="index.html" 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="/lib/js/showdown.js"></script>
-
+    <script src="lib/js/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);
-               });
+      (function (window, undefined) {
+        var notes = document.getElementById('notes');
+        var currentSlide = document.getElementById('current-slide');
+        var nextSlide = document.getElementById('next-slide');
+        window.addEventListener("message", function(e){
+          var data = JSON.parse(e.data);
+          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);
+        }, false);
+      })(window);
                </script>
-
        </body>
 </html>
diff --git a/plugin/speakernotes/client.js b/plugin/speakernotes/client.js
deleted file mode 100644 (file)
index ad1bd46..0000000
+++ /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 (file)
index e8c8023..0000000
+++ /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" );