From 0e8640094301889e5c848dcf92084678778f0a19 Mon Sep 17 00:00:00 2001
From: Hakim El Hattab <hakim.elhattab@gmail.com>
Date: Wed, 4 Jul 2012 14:18:09 -0400
Subject: [PATCH] conditional loading of socket.io and the notes client js
 based on window host

---
 index.html                | 20 +++++++++++++++-----
 js/reveal.slidenotes.js   | 35 +++++++++++++++++++++++++++++++++++
 lib/slidenotes/client.js  |  1 +
 lib/slidenotes/notes.html |  2 +-
 4 files changed, 52 insertions(+), 6 deletions(-)
 create mode 100644 js/reveal.slidenotes.js

diff --git a/index.html b/index.html
index b08c62a5..68c5e4f6 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
 	<head>
 		<meta charset="utf-8">
 		
-		<title>reveal.js</title>
+		<title>reveal.js - HTML5 Presentations</title>
 
 		<meta name="description" content="An easy to use CSS 3D slideshow tool for quickly creating good looking HTML presentations.">
 		<meta name="author" content="Hakim El Hattab">
@@ -313,11 +313,21 @@ linkify( 'a' );
 				transition: query.transition || 'default' // default/cube/page/concave/linear(2d)
 			});
 
+			// Fire off syntax highlighting for potential code samples in the slides
 			hljs.initHighlightingOnLoad();
-		</script>
 
-		<!-- The next two lines enable the speaker notes server -->
-		<script src="socket.io/socket.io.js"></script>
-		<script src="lib/slidenotes/client.js"></script>
+			// If we're runnning the notes node server we need to include some 
+			// additional JS
+			if( window.location.host === 'localhost:1947' ) {
+				var notes_socket = document.createElement( 'script' );
+				notes_socket.setAttribute( 'src', 'socket.io/socket.io.js' );
+				document.body.appendChild( notes_socket );
+
+				var notes_client = document.createElement( 'script' );
+				notes_client.setAttribute( 'src', 'lib/slidenotes/client.js' );
+				document.body.appendChild( notes_client );
+			}
+		</script>
+		
 	</body>
 </html>
\ No newline at end of file
diff --git a/js/reveal.slidenotes.js b/js/reveal.slidenotes.js
new file mode 100644
index 00000000..b686ec97
--- /dev/null
+++ b/js/reveal.slidenotes.js
@@ -0,0 +1,35 @@
+(function() {
+	// don't emit events from inside the previews themselves
+	var qs = window.location.href.split('?');
+	if (qs.length > 1 && qs[1].match('receiver')) { 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);
+
+	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
+		};
+
+		socket.emit('slidechanged', slideData);
+	} );
+}());
diff --git a/lib/slidenotes/client.js b/lib/slidenotes/client.js
index b686ec97..f594fb62 100644
--- a/lib/slidenotes/client.js
+++ b/lib/slidenotes/client.js
@@ -5,6 +5,7 @@
 
 	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);
 
 	Reveal.addEventListener( 'slidechanged', function( event ) {
diff --git a/lib/slidenotes/notes.html b/lib/slidenotes/notes.html
index a0c945c8..4201647e 100644
--- a/lib/slidenotes/notes.html
+++ b/lib/slidenotes/notes.html
@@ -3,7 +3,7 @@
 	<head>
 		<meta charset="utf-8">
 
-		<title>Slide Notes</title>
+		<title>reveal.js - Slide Notes</title>
 
 		<style>
 			#notes {
-- 
GitLab