Rebecca Murphey
13 years ago
8 changed files with 214 additions and 2 deletions
@ -0,0 +1,32 @@ |
|||
(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('http://localhost:1947'); |
|||
|
|||
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 |
|||
}; |
|||
|
|||
socket.emit('slidechanged', slideData); |
|||
} ); |
|||
}()); |
@ -0,0 +1,18 @@ |
|||
{ |
|||
"author": "Hakim El Hattab", |
|||
"name": "Reveal.js", |
|||
"description": "HTML5 Slideware with Presenter Notes", |
|||
"version": "1.5.0", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "git://github.com/hakimel/reveal.js.git" |
|||
}, |
|||
"engines": { |
|||
"node": "~0.6.8" |
|||
}, |
|||
"dependencies": { |
|||
"express" : "2.5.9", |
|||
"socket.io" : "0.9.6" |
|||
}, |
|||
"devDependencies": {} |
|||
} |
@ -0,0 +1,41 @@ |
|||
var express = require('express'); |
|||
var fs = require('fs'); |
|||
var io = require('socket.io'); |
|||
var _ = require('underscore'); |
|||
|
|||
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', 'assets', 'js', '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", function(req, res) { |
|||
fs.createReadStream(opts.baseDir + 'slidenotes/notes.html').pipe(res); |
|||
}); |
|||
|
|||
// Actually listen
|
|||
app.listen(opts.port || null); |
|||
|
|||
console.log("Your slides are at http://localhost" + (opts.port ? (':' + opts.port) : '')); |
|||
console.log("Your notes are at http://localhost" + (opts.port ? (':' + opts.port) : '') + '/_notes'); |
|||
console.log("Advance through your slides and your speaker notes will advance automatically"); |
@ -0,0 +1,87 @@ |
|||
<!doctype html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
|
|||
<title>Slide Notes</title> |
|||
|
|||
<meta name="description" content=""> |
|||
<meta name="author" content="Rebecca Murphey"> |
|||
|
|||
<meta name="apple-mobile-web-app-capable" content="yes" /> |
|||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> |
|||
|
|||
<style> |
|||
#notes { |
|||
font-family: Helvetica; |
|||
font-size: 24px; |
|||
width: 640px; |
|||
} |
|||
|
|||
#wrap-slides { |
|||
width: 640px; |
|||
height: 512px; |
|||
float: left; |
|||
} |
|||
|
|||
#slides { |
|||
width: 1280px; |
|||
height: 1024px; |
|||
border: 1px solid black; |
|||
-moz-transform: scale(0.5); |
|||
-moz-transform-origin: 0 0; |
|||
-o-transform: scale(0.5); |
|||
-o-transform-origin: 0 0; |
|||
-webkit-transform: scale(0.5); |
|||
-webkit-transform-origin: 0 0; |
|||
} |
|||
|
|||
#wrap-next-slide { |
|||
width: 320px; |
|||
height: 256px; |
|||
float: left; |
|||
margin: 0 0 0 50px; |
|||
} |
|||
|
|||
#next-slide { |
|||
width: 1280px; |
|||
height: 1024px; |
|||
border: 1px solid black; |
|||
-moz-transform: scale(0.25); |
|||
-moz-transform-origin: 0 0; |
|||
-o-transform: scale(0.25); |
|||
-o-transform-origin: 0 0; |
|||
-webkit-transform: scale(0.25); |
|||
-webkit-transform-origin: 0 0; |
|||
} |
|||
</style> |
|||
</head> |
|||
|
|||
<body> |
|||
|
|||
<div id="wrap-slides"> |
|||
<iframe src="/?receiver" width="1280" height="1024" id="slides"></iframe> |
|||
</div> |
|||
|
|||
<div id="wrap-next-slide"> |
|||
<iframe src="/?receiver" width="640" height="512" id="next-slide"></iframe> |
|||
</div> |
|||
<div id="notes"></div> |
|||
|
|||
<script src="socket.io/socket.io.js"></script> |
|||
|
|||
<script> |
|||
var socket = io.connect('http://localhost:1947'); |
|||
var notes = document.getElementById('notes'); |
|||
var slides = document.getElementById('slides'); |
|||
var nextSlide = document.getElementById('next-slide'); |
|||
|
|||
socket.on('slidedata', function(data) { |
|||
notes.innerHTML = data.notes; |
|||
slides.contentWindow.Reveal.navigateTo(data.indexh, data.indexv); |
|||
nextSlide.contentWindow.Reveal.navigateTo(data.nextindexh, data.nextindexv); |
|||
}); |
|||
</script> |
|||
|
|||
</body> |
|||
</html> |
Loading…
Reference in new issue