From da9fe108b07ff07d6e11fff3820386877fd2fee0 Mon Sep 17 00:00:00 2001
From: Varac
Date: Fri, 29 Dec 2017 11:55:05 +0100
Subject: Add generated slides
---
platform-workshop/slides/LICENSE | 19 +
platform-workshop/slides/README.md | 1227 +++++
platform-workshop/slides/css/custom.css | 18 +
platform-workshop/slides/css/print/paper.css | 203 +
platform-workshop/slides/css/print/pdf.css | 172 +
platform-workshop/slides/css/reveal-ck.css | 10 +
platform-workshop/slides/css/reveal.css | 1387 ++++++
platform-workshop/slides/css/theme/beige.css | 296 ++
platform-workshop/slides/css/theme/black.css | 292 ++
platform-workshop/slides/css/theme/blood.css | 315 ++
platform-workshop/slides/css/theme/league.css | 298 ++
platform-workshop/slides/css/theme/moon.css | 296 ++
platform-workshop/slides/css/theme/night.css | 290 ++
platform-workshop/slides/css/theme/serif.css | 292 ++
platform-workshop/slides/css/theme/simple.css | 295 ++
platform-workshop/slides/css/theme/sky.css | 299 ++
platform-workshop/slides/css/theme/solarized.css | 296 ++
platform-workshop/slides/css/theme/white.css | 292 ++
.../images/Screenshot from 2017-05-05 20-35-12.png | Bin 0 -> 7267 bytes
.../slides/images/bitmask-android.png | Bin 0 -> 65842 bytes
.../slides/images/bitmask-dev-201612.png | Bin 0 -> 26546 bytes
.../images/bitmask-dev-bitmask-mail-compose.png | Bin 0 -> 29431 bytes
.../slides/images/bitmask-dev-bitmask-mail.png | Bin 0 -> 49276 bytes
.../slides/images/bitmask-dev-demo1.png | Bin 0 -> 56881 bytes
.../slides/images/bitmask-dev-demo2.png | Bin 0 -> 26174 bytes
.../slides/images/bitmask-dev-demo3.png | Bin 0 -> 29695 bytes
.../slides/images/bitmask-dev-initial.png | Bin 0 -> 41925 bytes
.../slides/images/bitmask-dev-mail1.png | Bin 0 -> 33257 bytes
.../slides/images/bitmask-dev-mail2.png | Bin 0 -> 30159 bytes
.../slides/images/bitmask-dev_imap_smtp_config.png | Bin 0 -> 73189 bytes
platform-workshop/slides/images/bitmask-hex.svg | 402 ++
platform-workshop/slides/images/bitmask-icon.png | Bin 0 -> 80238 bytes
platform-workshop/slides/images/bitmask-mail.png | Bin 0 -> 48624 bytes
.../slides/images/bitmask-main-window.jpg | Bin 0 -> 71840 bytes
platform-workshop/slides/images/email-usage.jpg | Bin 0 -> 12112 bytes
.../slides/images/flying_cow_1000px.jpg | Bin 0 -> 5465 bytes
platform-workshop/slides/images/kid-jumping.svg | 757 +++
platform-workshop/slides/images/leap-pixelated.svg | 730 +++
.../slides/images/leap-webapp-tickets.png | Bin 0 -> 101416 bytes
.../slides/images/leap-webapp-tickets.xcf | Bin 0 -> 324130 bytes
platform-workshop/slides/images/leap-webapp1.png | Bin 0 -> 142351 bytes
platform-workshop/slides/images/leap-webapp2.png | Bin 0 -> 90886 bytes
.../slides/images/letter-and-postcard.jpg | Bin 0 -> 8822 bytes
.../slides/images/many-encr-mails.jpg | Bin 0 -> 15437 bytes
platform-workshop/slides/images/metadata.jpg | Bin 0 -> 27093 bytes
platform-workshop/slides/images/metadata2.jpg | Bin 0 -> 20593 bytes
platform-workshop/slides/images/metadata3.jpg | Bin 0 -> 24402 bytes
platform-workshop/slides/images/one-encr-mail.jpg | Bin 0 -> 15390 bytes
platform-workshop/slides/images/pgp.png | Bin 0 -> 113862 bytes
.../slides/images/pixelated-user-agent.png | Bin 0 -> 66812 bytes
.../slides/images/pixelated-webmail.png | Bin 0 -> 102631 bytes
platform-workshop/slides/images/pizarra.jpg | Bin 0 -> 1107460 bytes
platform-workshop/slides/images/schema.jpg | Bin 0 -> 29990 bytes
platform-workshop/slides/images/social-graph.jpg | Bin 0 -> 17286 bytes
platform-workshop/slides/images/webmail.png | Bin 0 -> 240151 bytes
platform-workshop/slides/index.html | 980 ++++
platform-workshop/slides/js/reveal.js | 5112 ++++++++++++++++++++
platform-workshop/slides/lib/css/zenburn.css | 80 +
.../slides/lib/font/league-gothic/LICENSE | 2 +
.../lib/font/league-gothic/league-gothic.css | 10 +
.../lib/font/league-gothic/league-gothic.eot | Bin 0 -> 25696 bytes
.../lib/font/league-gothic/league-gothic.ttf | Bin 0 -> 64256 bytes
.../lib/font/league-gothic/league-gothic.woff | Bin 0 -> 30764 bytes
.../slides/lib/font/source-sans-pro/LICENSE | 45 +
.../source-sans-pro/source-sans-pro-italic.eot | Bin 0 -> 75720 bytes
.../source-sans-pro/source-sans-pro-italic.ttf | Bin 0 -> 238084 bytes
.../source-sans-pro/source-sans-pro-italic.woff | Bin 0 -> 98556 bytes
.../source-sans-pro/source-sans-pro-regular.eot | Bin 0 -> 88070 bytes
.../source-sans-pro/source-sans-pro-regular.ttf | Bin 0 -> 288008 bytes
.../source-sans-pro/source-sans-pro-regular.woff | Bin 0 -> 114324 bytes
.../source-sans-pro/source-sans-pro-semibold.eot | Bin 0 -> 89897 bytes
.../source-sans-pro/source-sans-pro-semibold.ttf | Bin 0 -> 284640 bytes
.../source-sans-pro/source-sans-pro-semibold.woff | Bin 0 -> 115648 bytes
.../source-sans-pro-semibolditalic.eot | Bin 0 -> 75706 bytes
.../source-sans-pro-semibolditalic.ttf | Bin 0 -> 240944 bytes
.../source-sans-pro-semibolditalic.woff | Bin 0 -> 98816 bytes
.../lib/font/source-sans-pro/source-sans-pro.css | 39 +
platform-workshop/slides/lib/js/classList.js | 2 +
platform-workshop/slides/lib/js/head.min.js | 9 +
platform-workshop/slides/lib/js/html5shiv.js | 7 +
platform-workshop/slides/package.json | 44 +
.../slides/plugin/highlight/highlight.js | 78 +
platform-workshop/slides/plugin/leap/leap.js | 159 +
.../slides/plugin/markdown/example.html | 129 +
.../slides/plugin/markdown/markdown.js | 412 ++
platform-workshop/slides/plugin/markdown/marked.js | 6 +
platform-workshop/slides/plugin/math/math.js | 67 +
.../slides/plugin/multiplex/client.js | 13 +
platform-workshop/slides/plugin/multiplex/index.js | 64 +
.../slides/plugin/multiplex/master.js | 31 +
.../slides/plugin/notes-server/client.js | 65 +
.../slides/plugin/notes-server/index.js | 69 +
.../slides/plugin/notes-server/notes.html | 585 +++
platform-workshop/slides/plugin/notes/notes.html | 746 +++
platform-workshop/slides/plugin/notes/notes.js | 155 +
.../slides/plugin/print-pdf/print-pdf.js | 69 +
platform-workshop/slides/plugin/remotes/remotes.js | 39 +
platform-workshop/slides/plugin/search/search.js | 196 +
platform-workshop/slides/plugin/zoom-js/zoom.js | 288 ++
platform-workshop/slides/slides.html | 892 ++++
100 files changed, 18579 insertions(+)
create mode 100644 platform-workshop/slides/LICENSE
create mode 100644 platform-workshop/slides/README.md
create mode 100644 platform-workshop/slides/css/custom.css
create mode 100644 platform-workshop/slides/css/print/paper.css
create mode 100644 platform-workshop/slides/css/print/pdf.css
create mode 100644 platform-workshop/slides/css/reveal-ck.css
create mode 100644 platform-workshop/slides/css/reveal.css
create mode 100644 platform-workshop/slides/css/theme/beige.css
create mode 100644 platform-workshop/slides/css/theme/black.css
create mode 100644 platform-workshop/slides/css/theme/blood.css
create mode 100644 platform-workshop/slides/css/theme/league.css
create mode 100644 platform-workshop/slides/css/theme/moon.css
create mode 100644 platform-workshop/slides/css/theme/night.css
create mode 100644 platform-workshop/slides/css/theme/serif.css
create mode 100644 platform-workshop/slides/css/theme/simple.css
create mode 100644 platform-workshop/slides/css/theme/sky.css
create mode 100644 platform-workshop/slides/css/theme/solarized.css
create mode 100644 platform-workshop/slides/css/theme/white.css
create mode 100644 platform-workshop/slides/images/Screenshot from 2017-05-05 20-35-12.png
create mode 100644 platform-workshop/slides/images/bitmask-android.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-201612.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-bitmask-mail-compose.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-bitmask-mail.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-demo1.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-demo2.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-demo3.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-initial.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-mail1.png
create mode 100644 platform-workshop/slides/images/bitmask-dev-mail2.png
create mode 100644 platform-workshop/slides/images/bitmask-dev_imap_smtp_config.png
create mode 100644 platform-workshop/slides/images/bitmask-hex.svg
create mode 100644 platform-workshop/slides/images/bitmask-icon.png
create mode 100644 platform-workshop/slides/images/bitmask-mail.png
create mode 100644 platform-workshop/slides/images/bitmask-main-window.jpg
create mode 100644 platform-workshop/slides/images/email-usage.jpg
create mode 100644 platform-workshop/slides/images/flying_cow_1000px.jpg
create mode 100644 platform-workshop/slides/images/kid-jumping.svg
create mode 100644 platform-workshop/slides/images/leap-pixelated.svg
create mode 100644 platform-workshop/slides/images/leap-webapp-tickets.png
create mode 100644 platform-workshop/slides/images/leap-webapp-tickets.xcf
create mode 100644 platform-workshop/slides/images/leap-webapp1.png
create mode 100644 platform-workshop/slides/images/leap-webapp2.png
create mode 100644 platform-workshop/slides/images/letter-and-postcard.jpg
create mode 100644 platform-workshop/slides/images/many-encr-mails.jpg
create mode 100644 platform-workshop/slides/images/metadata.jpg
create mode 100644 platform-workshop/slides/images/metadata2.jpg
create mode 100644 platform-workshop/slides/images/metadata3.jpg
create mode 100644 platform-workshop/slides/images/one-encr-mail.jpg
create mode 100644 platform-workshop/slides/images/pgp.png
create mode 100644 platform-workshop/slides/images/pixelated-user-agent.png
create mode 100644 platform-workshop/slides/images/pixelated-webmail.png
create mode 100644 platform-workshop/slides/images/pizarra.jpg
create mode 100644 platform-workshop/slides/images/schema.jpg
create mode 100644 platform-workshop/slides/images/social-graph.jpg
create mode 100644 platform-workshop/slides/images/webmail.png
create mode 100644 platform-workshop/slides/index.html
create mode 100644 platform-workshop/slides/js/reveal.js
create mode 100644 platform-workshop/slides/lib/css/zenburn.css
create mode 100644 platform-workshop/slides/lib/font/league-gothic/LICENSE
create mode 100644 platform-workshop/slides/lib/font/league-gothic/league-gothic.css
create mode 100755 platform-workshop/slides/lib/font/league-gothic/league-gothic.eot
create mode 100755 platform-workshop/slides/lib/font/league-gothic/league-gothic.ttf
create mode 100755 platform-workshop/slides/lib/font/league-gothic/league-gothic.woff
create mode 100644 platform-workshop/slides/lib/font/source-sans-pro/LICENSE
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-italic.eot
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-italic.ttf
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-italic.woff
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-regular.eot
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-regular.ttf
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-regular.woff
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-semibold.eot
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-semibold.ttf
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-semibold.woff
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf
create mode 100755 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff
create mode 100644 platform-workshop/slides/lib/font/source-sans-pro/source-sans-pro.css
create mode 100644 platform-workshop/slides/lib/js/classList.js
create mode 100644 platform-workshop/slides/lib/js/head.min.js
create mode 100644 platform-workshop/slides/lib/js/html5shiv.js
create mode 100644 platform-workshop/slides/package.json
create mode 100644 platform-workshop/slides/plugin/highlight/highlight.js
create mode 100644 platform-workshop/slides/plugin/leap/leap.js
create mode 100644 platform-workshop/slides/plugin/markdown/example.html
create mode 100755 platform-workshop/slides/plugin/markdown/markdown.js
create mode 100644 platform-workshop/slides/plugin/markdown/marked.js
create mode 100755 platform-workshop/slides/plugin/math/math.js
create mode 100644 platform-workshop/slides/plugin/multiplex/client.js
create mode 100644 platform-workshop/slides/plugin/multiplex/index.js
create mode 100644 platform-workshop/slides/plugin/multiplex/master.js
create mode 100644 platform-workshop/slides/plugin/notes-server/client.js
create mode 100644 platform-workshop/slides/plugin/notes-server/index.js
create mode 100644 platform-workshop/slides/plugin/notes-server/notes.html
create mode 100644 platform-workshop/slides/plugin/notes/notes.html
create mode 100644 platform-workshop/slides/plugin/notes/notes.js
create mode 100644 platform-workshop/slides/plugin/print-pdf/print-pdf.js
create mode 100644 platform-workshop/slides/plugin/remotes/remotes.js
create mode 100644 platform-workshop/slides/plugin/search/search.js
create mode 100644 platform-workshop/slides/plugin/zoom-js/zoom.js
create mode 100644 platform-workshop/slides/slides.html
diff --git a/platform-workshop/slides/LICENSE b/platform-workshop/slides/LICENSE
new file mode 100644
index 0000000..c3e6e5f
--- /dev/null
+++ b/platform-workshop/slides/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2017 Hakim El Hattab, http://hakim.se, and reveal.js contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/platform-workshop/slides/README.md b/platform-workshop/slides/README.md
new file mode 100644
index 0000000..7ec759a
--- /dev/null
+++ b/platform-workshop/slides/README.md
@@ -0,0 +1,1227 @@
+# reveal.js [![Build Status](https://travis-ci.org/hakimel/reveal.js.svg?branch=master)](https://travis-ci.org/hakimel/reveal.js)
+
+A framework for easily creating beautiful presentations using HTML. [Check out the live demo](http://lab.hakim.se/reveal-js/).
+
+reveal.js comes with a broad range of features including [nested slides](https://github.com/hakimel/reveal.js#markup), [Markdown contents](https://github.com/hakimel/reveal.js#markdown), [PDF export](https://github.com/hakimel/reveal.js#pdf-export), [speaker notes](https://github.com/hakimel/reveal.js#speaker-notes) and a [JavaScript API](https://github.com/hakimel/reveal.js#api). There's also a fully featured visual editor and platform for sharing reveal.js presentations at [slides.com](https://slides.com?ref=github).
+
+## Table of contents
+- [Online Editor](#online-editor)
+- [Instructions](#instructions)
+ - [Markup](#markup)
+ - [Markdown](#markdown)
+ - [Element Attributes](#element-attributes)
+ - [Slide Attributes](#slide-attributes)
+- [Configuration](#configuration)
+- [Presentation Size](#presentation-size)
+- [Dependencies](#dependencies)
+- [Ready Event](#ready-event)
+- [Auto-sliding](#auto-sliding)
+- [Keyboard Bindings](#keyboard-bindings)
+- [Touch Navigation](#touch-navigation)
+- [Lazy Loading](#lazy-loading)
+- [API](#api)
+ - [Slide Changed Event](#slide-changed-event)
+ - [Presentation State](#presentation-state)
+ - [Slide States](#slide-states)
+ - [Slide Backgrounds](#slide-backgrounds)
+ - [Parallax Background](#parallax-background)
+ - [Slide Transitions](#slide-transitions)
+ - [Internal links](#internal-links)
+ - [Fragments](#fragments)
+ - [Fragment events](#fragment-events)
+ - [Code syntax highlighting](#code-syntax-highlighting)
+ - [Slide number](#slide-number)
+ - [Overview mode](#overview-mode)
+ - [Fullscreen mode](#fullscreen-mode)
+ - [Embedded media](#embedded-media)
+ - [Stretching elements](#stretching-elements)
+ - [postMessage API](#postmessage-api)
+- [PDF Export](#pdf-export)
+- [Theming](#theming)
+- [Speaker Notes](#speaker-notes)
+ - [Share and Print Speaker Notes](#share-and-print-speaker-notes)
+ - [Server Side Speaker Notes](#server-side-speaker-notes)
+- [Multiplexing](#multiplexing)
+ - [Master presentation](#master-presentation)
+ - [Client presentation](#client-presentation)
+ - [Socket.io server](#socketio-server)
+- [MathJax](#mathjax)
+- [Installation](#installation)
+ - [Basic setup](#basic-setup)
+ - [Full setup](#full-setup)
+ - [Folder Structure](#folder-structure)
+- [License](#license)
+
+#### More reading
+- [Changelog](https://github.com/hakimel/reveal.js/releases): Up-to-date version history.
+- [Examples](https://github.com/hakimel/reveal.js/wiki/Example-Presentations): Presentations created with reveal.js, add your own!
+- [Browser Support](https://github.com/hakimel/reveal.js/wiki/Browser-Support): Explanation of browser support and fallbacks.
+- [Plugins](https://github.com/hakimel/reveal.js/wiki/Plugins,-Tools-and-Hardware): A list of plugins that can be used to extend reveal.js.
+
+## Online Editor
+
+Presentations are written using HTML or Markdown but there's also an online editor for those of you who prefer a graphical interface. Give it a try at [https://slides.com](https://slides.com?ref=github).
+
+
+## Instructions
+
+### Markup
+
+Here's a barebones example of a fully working reveal.js presentation:
+```html
+
+
+
+
+
+
+
+
+ Slide 1
+ Slide 2
+
+
+
+
+
+
+```
+
+The presentation markup hierarchy needs to be `.reveal > .slides > section` where the `section` represents one slide and can be repeated indefinitely. If you place multiple `section` elements inside of another `section` they will be shown as vertical slides. The first of the vertical slides is the "root" of the others (at the top), and will be included in the horizontal sequence. For example:
+
+```html
+
+```
+
+### Markdown
+
+It's possible to write your slides using Markdown. To enable Markdown, add the `data-markdown` attribute to your `` elements and wrap the contents in a `
"+escape(e.message+"",true)+"
"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}());
\ No newline at end of file
diff --git a/platform-workshop/slides/plugin/math/math.js b/platform-workshop/slides/plugin/math/math.js
new file mode 100755
index 0000000..e3b4089
--- /dev/null
+++ b/platform-workshop/slides/plugin/math/math.js
@@ -0,0 +1,67 @@
+/**
+ * A plugin which enables rendering of math equations inside
+ * of reveal.js slides. Essentially a thin wrapper for MathJax.
+ *
+ * @author Hakim El Hattab
+ */
+var RevealMath = window.RevealMath || (function(){
+
+ var options = Reveal.getConfig().math || {};
+ options.mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js';
+ options.config = options.config || 'TeX-AMS_HTML-full';
+
+ loadScript( options.mathjax + '?config=' + options.config, function() {
+
+ MathJax.Hub.Config({
+ messageStyle: 'none',
+ tex2jax: {
+ inlineMath: [['$','$'],['\\(','\\)']] ,
+ skipTags: ['script','noscript','style','textarea','pre']
+ },
+ skipStartupTypeset: true
+ });
+
+ // Typeset followed by an immediate reveal.js layout since
+ // the typesetting process could affect slide height
+ MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );
+ MathJax.Hub.Queue( Reveal.layout );
+
+ // Reprocess equations in slides when they turn visible
+ Reveal.addEventListener( 'slidechanged', function( event ) {
+
+ MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );
+
+ } );
+
+ } );
+
+ function loadScript( url, callback ) {
+
+ var head = document.querySelector( 'head' );
+ var script = document.createElement( 'script' );
+ script.type = 'text/javascript';
+ script.src = url;
+
+ // Wrapper for callback to make sure it only fires once
+ var finish = function() {
+ if( typeof callback === 'function' ) {
+ callback.call();
+ callback = null;
+ }
+ }
+
+ script.onload = finish;
+
+ // IE
+ script.onreadystatechange = function() {
+ if ( this.readyState === 'loaded' ) {
+ finish();
+ }
+ }
+
+ // Normal browsers
+ head.appendChild( script );
+
+ }
+
+})();
diff --git a/platform-workshop/slides/plugin/multiplex/client.js b/platform-workshop/slides/plugin/multiplex/client.js
new file mode 100644
index 0000000..3ffd1e0
--- /dev/null
+++ b/platform-workshop/slides/plugin/multiplex/client.js
@@ -0,0 +1,13 @@
+(function() {
+ var multiplex = Reveal.getConfig().multiplex;
+ var socketId = multiplex.id;
+ var socket = io.connect(multiplex.url);
+
+ socket.on(multiplex.id, function(data) {
+ // ignore data from sockets that aren't ours
+ if (data.socketId !== socketId) { return; }
+ if( window.location.host === 'localhost:1947' ) return;
+
+ Reveal.setState(data.state);
+ });
+}());
diff --git a/platform-workshop/slides/plugin/multiplex/index.js b/platform-workshop/slides/plugin/multiplex/index.js
new file mode 100644
index 0000000..8195f04
--- /dev/null
+++ b/platform-workshop/slides/plugin/multiplex/index.js
@@ -0,0 +1,64 @@
+var http = require('http');
+var express = require('express');
+var fs = require('fs');
+var io = require('socket.io');
+var crypto = require('crypto');
+
+var app = express();
+var staticDir = express.static;
+var server = http.createServer(app);
+
+io = io(server);
+
+var opts = {
+ port: process.env.PORT || 1948,
+ baseDir : __dirname + '/../../'
+};
+
+io.on( 'connection', function( socket ) {
+ socket.on('multiplex-statechanged', function(data) {
+ if (typeof data.secret == 'undefined' || data.secret == null || data.secret === '') return;
+ if (createHash(data.secret) === data.socketId) {
+ data.secret = null;
+ socket.broadcast.emit(data.socketId, data);
+ };
+ });
+});
+
+[ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) {
+ app.use('/' + dir, staticDir(opts.baseDir + dir));
+});
+
+app.get("/", function(req, res) {
+ res.writeHead(200, {'Content-Type': 'text/html'});
+
+ var stream = fs.createReadStream(opts.baseDir + '/index.html');
+ stream.on('error', function( error ) {
+ res.write('
reveal.js multiplex server.
Generate token');
+ res.end();
+ });
+ stream.on('readable', function() {
+ stream.pipe(res);
+ });
+});
+
+app.get("/token", function(req,res) {
+ var ts = new Date().getTime();
+ var rand = Math.floor(Math.random()*9999999);
+ var secret = ts.toString() + rand.toString();
+ res.send({secret: secret, socketId: createHash(secret)});
+});
+
+var createHash = function(secret) {
+ var cipher = crypto.createCipher('blowfish', secret);
+ return(cipher.final('hex'));
+};
+
+// Actually listen
+server.listen( opts.port || null );
+
+var brown = '\033[33m',
+ green = '\033[32m',
+ reset = '\033[0m';
+
+console.log( brown + "reveal.js:" + reset + " Multiplex running on port " + green + opts.port + reset );
\ No newline at end of file
diff --git a/platform-workshop/slides/plugin/multiplex/master.js b/platform-workshop/slides/plugin/multiplex/master.js
new file mode 100644
index 0000000..4becad0
--- /dev/null
+++ b/platform-workshop/slides/plugin/multiplex/master.js
@@ -0,0 +1,31 @@
+(function() {
+
+ // Don't emit events from inside of notes windows
+ if ( window.location.search.match( /receiver/gi ) ) { return; }
+
+ var multiplex = Reveal.getConfig().multiplex;
+
+ var socket = io.connect( multiplex.url );
+
+ function post() {
+
+ var messageData = {
+ state: Reveal.getState(),
+ secret: multiplex.secret,
+ socketId: multiplex.id
+ };
+
+ socket.emit( 'multiplex-statechanged', messageData );
+
+ };
+
+ // Monitor events that trigger a change in state
+ Reveal.addEventListener( 'slidechanged', post );
+ Reveal.addEventListener( 'fragmentshown', post );
+ Reveal.addEventListener( 'fragmenthidden', post );
+ Reveal.addEventListener( 'overviewhidden', post );
+ Reveal.addEventListener( 'overviewshown', post );
+ Reveal.addEventListener( 'paused', post );
+ Reveal.addEventListener( 'resumed', post );
+
+}());
\ No newline at end of file
diff --git a/platform-workshop/slides/plugin/notes-server/client.js b/platform-workshop/slides/plugin/notes-server/client.js
new file mode 100644
index 0000000..00b277b
--- /dev/null
+++ b/platform-workshop/slides/plugin/notes-server/client.js
@@ -0,0 +1,65 @@
+(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 ),
+ 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 );
+
+ /**
+ * Posts the current slide data to the notes window
+ */
+ function post() {
+
+ var slideElement = Reveal.getCurrentSlide(),
+ notesElement = slideElement.querySelector( 'aside.notes' );
+
+ var messageData = {
+ notes: '',
+ markdown: false,
+ socketId: socketId,
+ state: Reveal.getState()
+ };
+
+ // Look for notes defined in a slide attribute
+ if( slideElement.hasAttribute( 'data-notes' ) ) {
+ messageData.notes = slideElement.getAttribute( 'data-notes' );
+ }
+
+ // Look for notes defined in an aside element
+ if( notesElement ) {
+ messageData.notes = notesElement.innerHTML;
+ messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
+ }
+
+ socket.emit( 'statechanged', messageData );
+
+ }
+
+ // When a new notes window connects, post our current state
+ socket.on( 'new-subscriber', function( data ) {
+ post();
+ } );
+
+ // When the state changes from inside of the speaker view
+ socket.on( 'statechanged-speaker', function( data ) {
+ Reveal.setState( data.state );
+ } );
+
+ // Monitor events that trigger a change in state
+ Reveal.addEventListener( 'slidechanged', post );
+ Reveal.addEventListener( 'fragmentshown', post );
+ Reveal.addEventListener( 'fragmenthidden', post );
+ Reveal.addEventListener( 'overviewhidden', post );
+ Reveal.addEventListener( 'overviewshown', post );
+ Reveal.addEventListener( 'paused', post );
+ Reveal.addEventListener( 'resumed', post );
+
+ // Post the initial state
+ post();
+
+}());
diff --git a/platform-workshop/slides/plugin/notes-server/index.js b/platform-workshop/slides/plugin/notes-server/index.js
new file mode 100644
index 0000000..b95f071
--- /dev/null
+++ b/platform-workshop/slides/plugin/notes-server/index.js
@@ -0,0 +1,69 @@
+var http = require('http');
+var express = require('express');
+var fs = require('fs');
+var io = require('socket.io');
+var Mustache = require('mustache');
+
+var app = express();
+var staticDir = express.static;
+var server = http.createServer(app);
+
+io = io(server);
+
+var opts = {
+ port : 1947,
+ baseDir : __dirname + '/../../'
+};
+
+io.on( 'connection', function( socket ) {
+
+ socket.on( 'new-subscriber', function( data ) {
+ socket.broadcast.emit( 'new-subscriber', data );
+ });
+
+ socket.on( 'statechanged', function( data ) {
+ delete data.state.overview;
+ socket.broadcast.emit( 'statechanged', data );
+ });
+
+ socket.on( 'statechanged-speaker', function( data ) {
+ delete data.state.overview;
+ socket.broadcast.emit( 'statechanged-speaker', data );
+ });
+
+});
+
+[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) {
+ app.use( '/' + dir, staticDir( opts.baseDir + dir ) );
+});
+
+app.get('/', function( req, res ) {
+
+ res.writeHead( 200, { 'Content-Type': 'text/html' } );
+ fs.createReadStream( opts.baseDir + '/index.html' ).pipe( res );
+
+});
+
+app.get( '/notes/:socketId', function( req, res ) {
+
+ fs.readFile( opts.baseDir + 'plugin/notes-server/notes.html', function( err, data ) {
+ res.send( Mustache.to_html( data.toString(), {
+ socketId : req.params.socketId
+ }));
+ });
+
+});
+
+// Actually listen
+server.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 in your JS console to go to the notes page' );
+console.log( '3. Advance through your slides and your notes will advance automatically' );
diff --git a/platform-workshop/slides/plugin/notes-server/notes.html b/platform-workshop/slides/plugin/notes-server/notes.html
new file mode 100644
index 0000000..ab8c5b1
--- /dev/null
+++ b/platform-workshop/slides/plugin/notes-server/notes.html
@@ -0,0 +1,585 @@
+
+
+
+
+
+ reveal.js - Slide Notes
+
+
+
+
+
+
+
+
$ leap new --domain workshop.bitmask.net ./workshop
+ Create directory /home/dev/workshop ? y
+ = created /home/dev/workshop/
+
+ The name of the provider: |Example| Workshop demo
+ File path of the leap_platform directory: |/home/dev/leap_platform|
+ Default email address contacts: |root@workshop.bitmask.net|
+
+ The platform directory "/home/varac/dev/projects/leap/leap_platform" does not exist.
+ Do you want me to create it by cloning from the
+ git repository https://leap.se/git/leap_platform.git? y
+ …
+
These are for workshop.bitmask.net (in this workshop’s case):
+
+
@ IN A 37.218.245.94
+blackbox IN A 37.218.245.94
+api IN A 37.218.245.94
+nicknym IN A 37.218.245.94
+@ IN MX 10 blackbox
+@ IN TXT "v=spf1 MX ip4:37.218.245.94 -all"
+234072283e._domainkey IN TXT "v=DKIM1;h=sha256;k=rsa;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApdCDTAuRJJa0yx8T3Z7d" "f2NLE0oOvKysLqHqtvJk92Zf8RHYO6/RzpvJ5s51fPfOfyLnAjEzGs3gBL5GkWNV" "hLyMB9TzYnuQ9lmnz3ep3Hyh8U9yPVmNu1YZDrMYGaeoHE6FZXkmvrtBUOv3XAZw" "4BNQwdcHCa/Z9iWgMDtBx0h+56DRDTOrJvr7M/7qGxknBo0FnnQ/Qhw9GQjkTg0h" "UmFZjuvx3BmgN/9lCMkrjxC7qfADvGYMIYer3iPt0wI7cqAvgWN0a+7iqm2PU+aB" "wLPWOSmWsl3e6wzHW4jFS7EchilGXjHiGQ5WC9anRC6WWr3SomL/cxKZNCjTCfBy" "dwIDAQAB"
+
+
+
+
+
+
DNS
+
Option A: Fake DNS for new provider
+
+
We are using a domain here without proper DNS, so we need to override our DNS resolution.
+
+
+
Open another terminal and:
+
cd ~/workshop
+leap compile hosts
+
+
+
+
+
You need to edit your hosts file with admin privileges and add the output of above command to it.