added a simple postmessage plugin
authorMaurizio Lupo <maurizio.lupo@gmail.com>
Wed, 31 Oct 2012 14:36:26 +0000 (15:36 +0100)
committerMaurizio Lupo <maurizio.lupo@gmail.com>
Wed, 31 Oct 2012 14:36:26 +0000 (15:36 +0100)
plugin/postmessage/iframe_example.html [new file with mode: 0644]
plugin/postmessage/postmessage.js [new file with mode: 0644]

diff --git a/plugin/postmessage/iframe_example.html b/plugin/postmessage/iframe_example.html
new file mode 100644 (file)
index 0000000..6e5709d
--- /dev/null
@@ -0,0 +1,34 @@
+<html>
+<body>
+    <iframe id="reveal" src="reveal.js/index.html" width="500" height="500"></iframe>
+<div>
+<input id="back" type="button" value="go back"/>
+<input id="ahead" type="button" value="go ahead"/>
+<input id="slideto" type="button" value="slideto 2-2"/>
+</div>
+<script>
+(function (){
+   var back = document.getElementById('back'),
+       ahead = document.getElementById('ahead'),
+       slideto = document.getElementById('slideto'),
+       reveal =  window.frames[0];
+
+   back.addEventListener('click', function (){
+       
+       reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*');
+   },false); 
+
+   ahead.addEventListener('click', function (){
+       reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*');
+   },false); 
+
+   slideto.addEventListener('click', function (){
+       
+       reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*');
+   },false); 
+
+}());
+
+</script>
+</body>
+</html>
diff --git a/plugin/postmessage/postmessage.js b/plugin/postmessage/postmessage.js
new file mode 100644 (file)
index 0000000..176d230
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+simple postmessage plugin
+
+Useful when a reveal slideshow is inside an iframe.
+It allows to call reveal methods from outside.
+
+Example:
+   var reveal =  window.frames[0];
+
+   // Reveal.prev(); 
+   reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*');
+   // Reveal.next(); 
+   reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*');
+   // Reveal.slide(2, 2); 
+   reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*');
+
+Add to the slideshow:
+
+       dependencies: [
+        ...
+               { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } }
+       ]
+
+
+*/
+
+(function (){
+
+window.addEventListener("message", function (event){
+    var data = JSON.parse(event.data),
+        method = data.method,
+        args = data.args;
+    if (Reveal[method]){
+        Reveal[method].apply(Reveal, data.args);
+    }
+}, false);
+}());
+
+
+