├── .gitignore
├── images
└── me.jpg
├── .travis.yml
├── lib
├── font
│ ├── league_gothic-webfont.eot
│ ├── league_gothic-webfont.ttf
│ ├── league_gothic-webfont.woff
│ └── league_gothic_license
├── js
│ ├── html5shiv.js
│ ├── classList.js
│ └── head.min.js
└── css
│ └── zenburn.css
├── README.md
├── plugin
├── markdown
│ ├── example.md
│ ├── example.html
│ ├── markdown.js
│ └── marked.js
├── multiplex
│ ├── client.js
│ ├── master.js
│ └── index.js
├── print-pdf
│ └── print-pdf.js
├── postmessage
│ ├── postmessage.js
│ └── example.html
├── remotes
│ └── remotes.js
├── notes-server
│ ├── client.js
│ ├── index.js
│ └── notes.html
├── notes
│ ├── notes.js
│ └── notes.html
├── search
│ └── search.js
└── zoom-js
│ └── zoom.js
├── css
├── theme
│ ├── template
│ │ ├── settings.scss
│ │ ├── mixins.scss
│ │ └── theme.scss
│ ├── source
│ │ ├── night.scss
│ │ ├── serif.scss
│ │ ├── sky.scss
│ │ ├── simple.scss
│ │ ├── default.scss
│ │ ├── beige.scss
│ │ ├── moon.scss
│ │ └── solarized.scss
│ ├── README.md
│ ├── night.css
│ ├── serif.css
│ ├── simple.css
│ ├── moon.css
│ ├── solarized.css
│ ├── sky.css
│ ├── beige.css
│ └── default.css
├── print
│ ├── pdf.css
│ └── paper.css
└── reveal.min.css
├── LICENSE
├── package.json
├── Gruntfile.js
├── js
└── reveal.min.js
└── index.html
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .svn
3 | log/*.log
4 | tmp/**
5 | node_modules/
6 | .sass-cache
--------------------------------------------------------------------------------
/images/me.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngsankha/jschannel-es6/gh-pages/images/me.jpg
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 0.8
4 | before_script:
5 | - npm install -g grunt-cli
--------------------------------------------------------------------------------
/lib/font/league_gothic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngsankha/jschannel-es6/gh-pages/lib/font/league_gothic-webfont.eot
--------------------------------------------------------------------------------
/lib/font/league_gothic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngsankha/jschannel-es6/gh-pages/lib/font/league_gothic-webfont.ttf
--------------------------------------------------------------------------------
/lib/font/league_gothic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngsankha/jschannel-es6/gh-pages/lib/font/league_gothic-webfont.woff
--------------------------------------------------------------------------------
/lib/font/league_gothic_license:
--------------------------------------------------------------------------------
1 | SIL Open Font License (OFL)
2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ES6 Slides
2 |
3 | ECMAScript 6 slides for talk at JSChannel NCR.
4 |
5 | Link: http://sankhs.com/jschannel-es6/
6 |
7 |
--------------------------------------------------------------------------------
/lib/js/html5shiv.js:
--------------------------------------------------------------------------------
1 | document.createElement('header');
2 | document.createElement('nav');
3 | document.createElement('section');
4 | document.createElement('article');
5 | document.createElement('aside');
6 | document.createElement('footer');
7 | document.createElement('hgroup');
--------------------------------------------------------------------------------
/plugin/markdown/example.md:
--------------------------------------------------------------------------------
1 | # Markdown Demo
2 |
3 |
4 |
5 | ## External 1.1
6 |
7 | Content 1.1
8 |
9 |
10 | ## External 1.2
11 |
12 | Content 1.2
13 |
14 |
15 |
16 | ## External 2
17 |
18 | Content 2.1
19 |
20 |
21 |
22 | ## External 3.1
23 |
24 | Content 3.1
25 |
26 |
27 | ## External 3.2
28 |
29 | Content 3.2
30 |
--------------------------------------------------------------------------------
/plugin/multiplex/client.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var multiplex = Reveal.getConfig().multiplex;
3 | var socketId = multiplex.id;
4 | var socket = io.connect(multiplex.url);
5 |
6 | socket.on(multiplex.id, function(data) {
7 | // ignore data from sockets that aren't ours
8 | if (data.socketId !== socketId) { return; }
9 | if( window.location.host === 'localhost:1947' ) return;
10 |
11 | Reveal.slide(data.indexh, data.indexv, data.indexf, 'remote');
12 | });
13 | }());
14 |
--------------------------------------------------------------------------------
/plugin/print-pdf/print-pdf.js:
--------------------------------------------------------------------------------
1 | /**
2 | * phantomjs script for printing presentations to PDF.
3 | *
4 | * Example:
5 | * phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf
6 | *
7 | * By Manuel Bieh (https://github.com/manuelbieh)
8 | */
9 |
10 | // html2pdf.js
11 | var page = new WebPage();
12 | var system = require( 'system' );
13 |
14 | page.paperSize = {
15 | format: 'A4',
16 | orientation: 'landscape',
17 | margin: {
18 | left: '0',
19 | right: '0',
20 | top: '0',
21 | bottom: '0'
22 | }
23 | };
24 | page.zoomFactor = 1.5;
25 |
26 | var revealFile = system.args[1] || 'index.html?print-pdf';
27 | var slideFile = system.args[2] || 'slides.pdf';
28 |
29 | if( slideFile.match( /\.pdf$/gi ) === null ) {
30 | slideFile += '.pdf';
31 | }
32 |
33 | console.log( 'Printing PDF...' );
34 |
35 | page.open( revealFile, function( status ) {
36 | console.log( 'Printed succesfully' );
37 | page.render( slideFile );
38 | phantom.exit();
39 | } );
--------------------------------------------------------------------------------
/css/theme/template/settings.scss:
--------------------------------------------------------------------------------
1 | // Base settings for all themes that can optionally be
2 | // overridden by the super-theme
3 |
4 | // Background of the presentation
5 | $backgroundColor: #2b2b2b;
6 |
7 | // Primary/body text
8 | $mainFont: 'Lato', sans-serif;
9 | $mainFontSize: 36px;
10 | $mainColor: #eee;
11 |
12 | // Headings
13 | $headingFont: 'League Gothic', Impact, sans-serif;
14 | $headingColor: #eee;
15 | $headingLineHeight: 0.9em;
16 | $headingLetterSpacing: 0.02em;
17 | $headingTextTransform: uppercase;
18 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2);
19 | $heading1TextShadow: $headingTextShadow;
20 |
21 | // Links and actions
22 | $linkColor: #13DAEC;
23 | $linkColorHover: lighten( $linkColor, 20% );
24 |
25 | // Text selection
26 | $selectionBackgroundColor: #FF5E99;
27 | $selectionColor: #fff;
28 |
29 | // Generates the presentation background, can be overridden
30 | // to return a background image or gradient
31 | @mixin bodyBackground() {
32 | background: $backgroundColor;
33 | }
--------------------------------------------------------------------------------
/css/theme/source/night.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Black theme for reveal.js.
3 | *
4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @import "../template/mixins";
10 | @import "../template/settings";
11 | // ---------------------------------------------
12 |
13 |
14 | // Include theme-specific fonts
15 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700);
16 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
17 |
18 |
19 | // Override theme settings (see ../template/settings.scss)
20 | $backgroundColor: #111;
21 |
22 | $mainFont: 'Open Sans', sans-serif;
23 | $linkColor: #e7ad52;
24 | $linkColorHover: lighten( $linkColor, 20% );
25 | $headingFont: 'Montserrat', Impact, sans-serif;
26 | $headingTextShadow: none;
27 | $headingLetterSpacing: -0.03em;
28 | $headingTextTransform: none;
29 | $selectionBackgroundColor: #e7ad52;
30 | $mainFontSize: 30px;
31 |
32 |
33 | // Theme template ------------------------------
34 | @import "../template/theme";
35 | // ---------------------------------------------
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (C) 2013 Hakim El Hattab, http://hakim.se
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/plugin/postmessage/postmessage.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | simple postmessage plugin
4 |
5 | Useful when a reveal slideshow is inside an iframe.
6 | It allows to call reveal methods from outside.
7 |
8 | Example:
9 | var reveal = window.frames[0];
10 |
11 | // Reveal.prev();
12 | reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*');
13 | // Reveal.next();
14 | reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*');
15 | // Reveal.slide(2, 2);
16 | reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*');
17 |
18 | Add to the slideshow:
19 |
20 | dependencies: [
21 | ...
22 | { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } }
23 | ]
24 |
25 | */
26 |
27 | (function (){
28 |
29 | window.addEventListener( "message", function ( event ) {
30 | var data = JSON.parse( event.data ),
31 | method = data.method,
32 | args = data.args;
33 |
34 | if( typeof Reveal[method] === 'function' ) {
35 | Reveal[method].apply( Reveal, data.args );
36 | }
37 | }, false);
38 |
39 | }());
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/plugin/postmessage/example.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/css/theme/source/serif.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is darkblue.
4 | *
5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se; so is the theme - beige.css - that this is based off of.
7 | */
8 |
9 |
10 | // Default mixins and settings -----------------
11 | @import "../template/mixins";
12 | @import "../template/settings";
13 | // ---------------------------------------------
14 |
15 |
16 |
17 | // Override theme settings (see ../template/settings.scss)
18 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
19 | $mainColor: #000;
20 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
21 | $headingColor: #383D3D;
22 | $headingTextShadow: none;
23 | $headingTextTransform: none;
24 | $backgroundColor: #F0F1EB;
25 | $linkColor: #51483D;
26 | $linkColorHover: lighten( $linkColor, 20% );
27 | $selectionBackgroundColor: #26351C;
28 |
29 |
30 |
31 | // Theme template ------------------------------
32 | @import "../template/theme";
33 | // ---------------------------------------------
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reveal.js",
3 | "version": "2.4.0",
4 | "description": "The HTML Presentation Framework",
5 | "homepage": "http://lab.hakim.se/reveal-js",
6 | "subdomain": "revealjs",
7 | "scripts": {
8 | "test": "grunt jshint",
9 | "start": ""
10 | },
11 | "author": {
12 | "name": "Hakim El Hattab",
13 | "email": "hakim.elhattab@gmail.com",
14 | "web": "http://hakim.se"
15 | },
16 | "repository": {
17 | "type": "git",
18 | "url": "git://github.com/hakimel/reveal.js.git"
19 | },
20 | "engines": {
21 | "node": "~0.8.0"
22 | },
23 | "dependencies": {
24 | "underscore": "~1.3.3",
25 | "express": "~2.5.9",
26 | "mustache": "~0.4.0",
27 | "socket.io": "~0.9.13"
28 | },
29 | "devDependencies": {
30 | "grunt-contrib-jshint": "~0.2.0",
31 | "grunt-contrib-cssmin": "~0.4.1",
32 | "grunt-contrib-uglify": "~0.1.1",
33 | "grunt-contrib-watch": "~0.2.0",
34 | "grunt-contrib-sass": "~0.2.2",
35 | "grunt-contrib-connect": "~0.2.0",
36 | "grunt-zip": "~0.7.0",
37 | "grunt": "~0.4.0"
38 | },
39 | "licenses": [
40 | {
41 | "type": "MIT",
42 | "url": "https://github.com/hakimel/reveal.js/blob/master/LICENSE"
43 | }
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/css/theme/source/sky.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Sky theme for reveal.js.
3 | *
4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @import "../template/mixins";
10 | @import "../template/settings";
11 | // ---------------------------------------------
12 |
13 |
14 |
15 | // Include theme-specific fonts
16 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
17 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
18 |
19 |
20 | // Override theme settings (see ../template/settings.scss)
21 | $mainFont: 'Open Sans', sans-serif;
22 | $mainColor: #333;
23 | $headingFont: 'Quicksand', sans-serif;
24 | $headingColor: #333;
25 | $headingLetterSpacing: -0.08em;
26 | $headingTextShadow: none;
27 | $backgroundColor: #f7fbfc;
28 | $linkColor: #3b759e;
29 | $linkColorHover: lighten( $linkColor, 20% );
30 | $selectionBackgroundColor: #134674;
31 |
32 | // Background generator
33 | @mixin bodyBackground() {
34 | @include radial-gradient( #add9e4, #f7fbfc );
35 | }
36 |
37 |
38 |
39 | // Theme template ------------------------------
40 | @import "../template/theme";
41 | // ---------------------------------------------
--------------------------------------------------------------------------------
/css/theme/source/simple.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is darkblue.
4 | *
5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 |
9 |
10 | // Default mixins and settings -----------------
11 | @import "../template/mixins";
12 | @import "../template/settings";
13 | // ---------------------------------------------
14 |
15 |
16 |
17 | // Include theme-specific fonts
18 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
20 |
21 |
22 | // Override theme settings (see ../template/settings.scss)
23 | $mainFont: 'Lato', sans-serif;
24 | $mainColor: #000;
25 | $headingFont: 'News Cycle', Impact, sans-serif;
26 | $headingColor: #000;
27 | $headingTextShadow: none;
28 | $headingTextTransform: none;
29 | $backgroundColor: #fff;
30 | $linkColor: #00008B;
31 | $linkColorHover: lighten( $linkColor, 20% );
32 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99);
33 |
34 |
35 |
36 | // Theme template ------------------------------
37 | @import "../template/theme";
38 | // ---------------------------------------------
--------------------------------------------------------------------------------
/lib/js/classList.js:
--------------------------------------------------------------------------------
1 | /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/
2 | if(typeof document!=="undefined"&&!("classList" in document.createElement("a"))){(function(j){var a="classList",f="prototype",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\s+|\s+$/g,"")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p
4 | based on dark.css by Ivan Sagalaev
5 |
6 | */
7 |
8 | pre code {
9 | display: block; padding: 0.5em;
10 | background: #3F3F3F;
11 | color: #DCDCDC;
12 | }
13 |
14 | pre .keyword,
15 | pre .tag,
16 | pre .django .tag,
17 | pre .django .keyword,
18 | pre .css .class,
19 | pre .css .id,
20 | pre .lisp .title {
21 | color: #E3CEAB;
22 | }
23 |
24 | pre .django .template_tag,
25 | pre .django .variable,
26 | pre .django .filter .argument {
27 | color: #DCDCDC;
28 | }
29 |
30 | pre .number,
31 | pre .date {
32 | color: #8CD0D3;
33 | }
34 |
35 | pre .dos .envvar,
36 | pre .dos .stream,
37 | pre .variable,
38 | pre .apache .sqbracket {
39 | color: #EFDCBC;
40 | }
41 |
42 | pre .dos .flow,
43 | pre .diff .change,
44 | pre .python .exception,
45 | pre .python .built_in,
46 | pre .literal,
47 | pre .tex .special {
48 | color: #EFEFAF;
49 | }
50 |
51 | pre .diff .chunk,
52 | pre .ruby .subst {
53 | color: #8F8F8F;
54 | }
55 |
56 | pre .dos .keyword,
57 | pre .python .decorator,
58 | pre .class .title,
59 | pre .haskell .label,
60 | pre .function .title,
61 | pre .ini .title,
62 | pre .diff .header,
63 | pre .ruby .class .parent,
64 | pre .apache .tag,
65 | pre .nginx .built_in,
66 | pre .tex .command,
67 | pre .input_number {
68 | color: #efef8f;
69 | }
70 |
71 | pre .dos .winutils,
72 | pre .ruby .symbol,
73 | pre .ruby .symbol .string,
74 | pre .ruby .symbol .keyword,
75 | pre .ruby .symbol .keymethods,
76 | pre .ruby .string,
77 | pre .ruby .instancevar {
78 | color: #DCA3A3;
79 | }
80 |
81 | pre .diff .deletion,
82 | pre .string,
83 | pre .tag .value,
84 | pre .preprocessor,
85 | pre .built_in,
86 | pre .sql .aggregate,
87 | pre .javadoc,
88 | pre .smalltalk .class,
89 | pre .smalltalk .localvars,
90 | pre .smalltalk .array,
91 | pre .css .rules .value,
92 | pre .attr_selector,
93 | pre .pseudo,
94 | pre .apache .cbracket,
95 | pre .tex .formula {
96 | color: #CC9393;
97 | }
98 |
99 | pre .shebang,
100 | pre .diff .addition,
101 | pre .comment,
102 | pre .java .annotation,
103 | pre .template_comment,
104 | pre .pi,
105 | pre .doctype {
106 | color: #7F9F7F;
107 | }
108 |
109 | pre .xml .css,
110 | pre .xml .javascript,
111 | pre .xml .vbscript,
112 | pre .tex .formula {
113 | opacity: 0.5;
114 | }
115 |
116 |
--------------------------------------------------------------------------------
/lib/js/head.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | Head JS The only script in your
3 | Copyright Tero Piirainen (tipiirai)
4 | License MIT / http://bit.ly/mit-license
5 | Version 0.96
6 |
7 | http://headjs.com
8 | */(function(a){function z(){d||(d=!0,s(e,function(a){p(a)}))}function y(c,d){var e=a.createElement("script");e.type="text/"+(c.type||"javascript"),e.src=c.src||c,e.async=!1,e.onreadystatechange=e.onload=function(){var a=e.readyState;!d.done&&(!a||/loaded|complete/.test(a))&&(d.done=!0,d())},(a.body||b).appendChild(e)}function x(a,b){if(a.state==o)return b&&b();if(a.state==n)return k.ready(a.name,b);if(a.state==m)return a.onpreload.push(function(){x(a,b)});a.state=n,y(a.url,function(){a.state=o,b&&b(),s(g[a.name],function(a){p(a)}),u()&&d&&s(g.ALL,function(a){p(a)})})}function w(a,b){a.state===undefined&&(a.state=m,a.onpreload=[],y({src:a.url,type:"cache"},function(){v(a)}))}function v(a){a.state=l,s(a.onpreload,function(a){a.call()})}function u(a){a=a||h;var b;for(var c in a){if(a.hasOwnProperty(c)&&a[c].state!=o)return!1;b=!0}return b}function t(a){return Object.prototype.toString.call(a)=="[object Function]"}function s(a,b){if(!!a){typeof a=="object"&&(a=[].slice.call(a));for(var c=0;c
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Markdown Demo
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
35 |
36 |
37 |
53 |
54 |
55 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/plugin/notes/notes.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Handles opening of and synchronization with the reveal.js
3 | * notes window.
4 | */
5 | var RevealNotes = (function() {
6 |
7 | function openNotes() {
8 | var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
9 | jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
10 | var notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1120,height=850' );
11 |
12 | // Fires when slide is changed
13 | Reveal.addEventListener( 'slidechanged', function( event ) {
14 | post('slidechanged');
15 | } );
16 |
17 | // Fires when a fragment is shown
18 | Reveal.addEventListener( 'fragmentshown', function( event ) {
19 | post('fragmentshown');
20 | } );
21 |
22 | // Fires when a fragment is hidden
23 | Reveal.addEventListener( 'fragmenthidden', function( event ) {
24 | post('fragmenthidden');
25 | } );
26 |
27 | /**
28 | * Posts the current slide data to the notes window
29 | *
30 | * @param {String} eventType Expecting 'slidechanged', 'fragmentshown'
31 | * or 'fragmenthidden' set in the events above to define the needed
32 | * slideDate.
33 | */
34 | function post( eventType ) {
35 | var slideElement = Reveal.getCurrentSlide(),
36 | messageData;
37 |
38 | if( eventType === 'slidechanged' ) {
39 | var notes = slideElement.querySelector( 'aside.notes' ),
40 | indexh = Reveal.getIndices().h,
41 | indexv = Reveal.getIndices().v,
42 | nextindexh,
43 | nextindexv;
44 |
45 | if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) {
46 | nextindexh = indexh;
47 | nextindexv = indexv + 1;
48 | } else {
49 | nextindexh = indexh + 1;
50 | nextindexv = 0;
51 | }
52 |
53 | messageData = {
54 | notes : notes ? notes.innerHTML : '',
55 | indexh : indexh,
56 | indexv : indexv,
57 | nextindexh : nextindexh,
58 | nextindexv : nextindexv,
59 | markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false
60 | };
61 | }
62 | else if( eventType === 'fragmentshown' ) {
63 | messageData = {
64 | fragment : 'next'
65 | };
66 | }
67 | else if( eventType === 'fragmenthidden' ) {
68 | messageData = {
69 | fragment : 'prev'
70 | };
71 | }
72 |
73 | notesPopup.postMessage( JSON.stringify( messageData ), '*' );
74 | }
75 |
76 | // Navigate to the current slide when the notes are loaded
77 | notesPopup.addEventListener( 'load', function( event ) {
78 | post('slidechanged');
79 | }, false );
80 | }
81 |
82 | // If the there's a 'notes' query set, open directly
83 | if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
84 | openNotes();
85 | }
86 |
87 | // Open the notes when the 's' key is hit
88 | document.addEventListener( 'keydown', function( event ) {
89 | // Disregard the event if the target is editable or a
90 | // modifier is present
91 | if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
92 |
93 | if( event.keyCode === 83 ) {
94 | event.preventDefault();
95 | openNotes();
96 | }
97 | }, false );
98 |
99 | return { open: openNotes };
100 | })();
101 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | /* global module:false */
2 | module.exports = function(grunt) {
3 |
4 | // Project configuration
5 | grunt.initConfig({
6 | pkg: grunt.file.readJSON('package.json'),
7 | meta: {
8 | banner:
9 | '/*!\n' +
10 | ' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
11 | ' * http://lab.hakim.se/reveal-js\n' +
12 | ' * MIT licensed\n' +
13 | ' *\n' +
14 | ' * Copyright (C) 2013 Hakim El Hattab, http://hakim.se\n' +
15 | ' */'
16 | },
17 |
18 | // Tests will be added soon
19 | qunit: {
20 | files: [ 'test/**/*.html' ]
21 | },
22 |
23 | uglify: {
24 | options: {
25 | banner: '<%= meta.banner %>\n'
26 | },
27 | build: {
28 | src: 'js/reveal.js',
29 | dest: 'js/reveal.min.js'
30 | }
31 | },
32 |
33 | cssmin: {
34 | compress: {
35 | files: {
36 | 'css/reveal.min.css': [ 'css/reveal.css' ]
37 | }
38 | }
39 | },
40 |
41 | sass: {
42 | main: {
43 | files: {
44 | 'css/theme/default.css': 'css/theme/source/default.scss',
45 | 'css/theme/beige.css': 'css/theme/source/beige.scss',
46 | 'css/theme/night.css': 'css/theme/source/night.scss',
47 | 'css/theme/serif.css': 'css/theme/source/serif.scss',
48 | 'css/theme/simple.css': 'css/theme/source/simple.scss',
49 | 'css/theme/sky.css': 'css/theme/source/sky.scss',
50 | 'css/theme/moon.css': 'css/theme/source/moon.scss',
51 | 'css/theme/solarized.css': 'css/theme/source/solarized.scss'
52 | }
53 | }
54 | },
55 |
56 | jshint: {
57 | options: {
58 | curly: false,
59 | eqeqeq: true,
60 | immed: true,
61 | latedef: true,
62 | newcap: true,
63 | noarg: true,
64 | sub: true,
65 | undef: true,
66 | eqnull: true,
67 | browser: true,
68 | expr: true,
69 | globals: {
70 | head: false,
71 | module: false,
72 | console: false
73 | }
74 | },
75 | files: [ 'Gruntfile.js', 'js/reveal.js' ]
76 | },
77 |
78 | connect: {
79 | server: {
80 | options: {
81 | port: 8000,
82 | base: '.'
83 | }
84 | }
85 | },
86 |
87 | zip: {
88 | 'reveal-js-presentation.zip': [
89 | 'index.html',
90 | 'css/**',
91 | 'js/**',
92 | 'lib/**',
93 | 'images/**',
94 | 'plugin/**'
95 | ]
96 | },
97 |
98 | watch: {
99 | main: {
100 | files: [ 'Gruntfile.js', 'js/reveal.js', 'css/reveal.css' ],
101 | tasks: 'default'
102 | },
103 | theme: {
104 | files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ],
105 | tasks: 'themes'
106 | }
107 | }
108 |
109 | });
110 |
111 | // Dependencies
112 | grunt.loadNpmTasks( 'grunt-contrib-jshint' );
113 | grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
114 | grunt.loadNpmTasks( 'grunt-contrib-uglify' );
115 | grunt.loadNpmTasks( 'grunt-contrib-watch' );
116 | grunt.loadNpmTasks( 'grunt-contrib-sass' );
117 | grunt.loadNpmTasks( 'grunt-contrib-connect' );
118 | grunt.loadNpmTasks( 'grunt-zip' );
119 |
120 | // Default task
121 | grunt.registerTask( 'default', [ 'jshint', 'cssmin', 'uglify' ] );
122 |
123 | // Theme task
124 | grunt.registerTask( 'themes', [ 'sass' ] );
125 |
126 | // Package presentation to archive
127 | grunt.registerTask( 'package', [ 'default', 'zip' ] );
128 |
129 | // Serve presentation locally
130 | grunt.registerTask( 'serve', [ 'connect', 'watch' ] );
131 |
132 | };
133 |
--------------------------------------------------------------------------------
/plugin/notes-server/notes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | reveal.js - Slide Notes
7 |
8 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | UPCOMING:
98 |
99 |
100 |
101 |
102 |
103 |
104 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/css/theme/night.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700);
2 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
3 | /**
4 | * Black theme for reveal.js.
5 | *
6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 | /*********************************************
9 | * GLOBAL STYLES
10 | *********************************************/
11 | body {
12 | background: #111111;
13 | background-color: #111111; }
14 |
15 | .reveal {
16 | font-family: "Open Sans", sans-serif;
17 | font-size: 30px;
18 | font-weight: 200;
19 | letter-spacing: -0.02em;
20 | color: #eeeeee; }
21 |
22 | ::selection {
23 | color: white;
24 | background: #e7ad52;
25 | text-shadow: none; }
26 |
27 | /*********************************************
28 | * HEADERS
29 | *********************************************/
30 | .reveal h1,
31 | .reveal h2,
32 | .reveal h3,
33 | .reveal h4,
34 | .reveal h5,
35 | .reveal h6 {
36 | margin: 0 0 20px 0;
37 | color: #eeeeee;
38 | font-family: "Montserrat", Impact, sans-serif;
39 | line-height: 0.9em;
40 | letter-spacing: -0.03em;
41 | text-transform: none;
42 | text-shadow: none; }
43 |
44 | .reveal h1 {
45 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
46 |
47 | /*********************************************
48 | * LINKS
49 | *********************************************/
50 | .reveal a:not(.image) {
51 | color: #e7ad52;
52 | text-decoration: none;
53 | -webkit-transition: color .15s ease;
54 | -moz-transition: color .15s ease;
55 | -ms-transition: color .15s ease;
56 | -o-transition: color .15s ease;
57 | transition: color .15s ease; }
58 |
59 | .reveal a:not(.image):hover {
60 | color: #f3d7ac;
61 | text-shadow: none;
62 | border: none; }
63 |
64 | .reveal .roll span:after {
65 | color: #fff;
66 | background: #d08a1d; }
67 |
68 | /*********************************************
69 | * IMAGES
70 | *********************************************/
71 | .reveal section img {
72 | margin: 15px 0px;
73 | background: rgba(255, 255, 255, 0.12);
74 | border: 4px solid #eeeeee;
75 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
76 | -webkit-transition: all .2s linear;
77 | -moz-transition: all .2s linear;
78 | -ms-transition: all .2s linear;
79 | -o-transition: all .2s linear;
80 | transition: all .2s linear; }
81 |
82 | .reveal a:hover img {
83 | background: rgba(255, 255, 255, 0.2);
84 | border-color: #e7ad52;
85 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
86 |
87 | /*********************************************
88 | * NAVIGATION CONTROLS
89 | *********************************************/
90 | .reveal .controls div.navigate-left,
91 | .reveal .controls div.navigate-left.enabled {
92 | border-right-color: #e7ad52; }
93 |
94 | .reveal .controls div.navigate-right,
95 | .reveal .controls div.navigate-right.enabled {
96 | border-left-color: #e7ad52; }
97 |
98 | .reveal .controls div.navigate-up,
99 | .reveal .controls div.navigate-up.enabled {
100 | border-bottom-color: #e7ad52; }
101 |
102 | .reveal .controls div.navigate-down,
103 | .reveal .controls div.navigate-down.enabled {
104 | border-top-color: #e7ad52; }
105 |
106 | .reveal .controls div.navigate-left.enabled:hover {
107 | border-right-color: #f3d7ac; }
108 |
109 | .reveal .controls div.navigate-right.enabled:hover {
110 | border-left-color: #f3d7ac; }
111 |
112 | .reveal .controls div.navigate-up.enabled:hover {
113 | border-bottom-color: #f3d7ac; }
114 |
115 | .reveal .controls div.navigate-down.enabled:hover {
116 | border-top-color: #f3d7ac; }
117 |
118 | /*********************************************
119 | * PROGRESS BAR
120 | *********************************************/
121 | .reveal .progress {
122 | background: rgba(0, 0, 0, 0.2); }
123 |
124 | .reveal .progress span {
125 | background: #e7ad52;
126 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
127 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
128 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
129 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
130 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
131 |
--------------------------------------------------------------------------------
/css/print/pdf.css:
--------------------------------------------------------------------------------
1 | /* Default Print Stylesheet Template
2 | by Rob Glazebrook of CSSnewbie.com
3 | Last Updated: June 4, 2008
4 |
5 | Feel free (nay, compelled) to edit, append, and
6 | manipulate this file as you see fit. */
7 |
8 |
9 | /* SECTION 1: Set default width, margin, float, and
10 | background. This prevents elements from extending
11 | beyond the edge of the printed page, and prevents
12 | unnecessary background images from printing */
13 |
14 | * {
15 | -webkit-print-color-adjust: exact;
16 | }
17 |
18 | body {
19 | font-size: 18pt;
20 | width: auto;
21 | height: auto;
22 | border: 0;
23 | padding: 0;
24 | float: none !important;
25 | overflow: visible;
26 | }
27 |
28 | html {
29 | width: 100%;
30 | height: 100%;
31 | overflow: visible;
32 | }
33 |
34 | @page {
35 | size: letter landscape;
36 | margin: 0;
37 | }
38 |
39 | /* SECTION 2: Remove any elements not needed in print.
40 | This would include navigation, ads, sidebars, etc. */
41 | .nestedarrow,
42 | .controls,
43 | .reveal .progress,
44 | .reveal.overview,
45 | .fork-reveal,
46 | .share-reveal,
47 | .state-background {
48 | display: none !important;
49 | }
50 |
51 | /* SECTION 3: Set body font face, size, and color.
52 | Consider using a serif font for readability. */
53 | body, p, td, li, div {
54 | font-size: 18pt;
55 | }
56 |
57 | /* SECTION 4: Set heading font face, sizes, and color.
58 | Diffrentiate your headings from your body text.
59 | Perhaps use a large sans-serif for distinction. */
60 | h1,h2,h3,h4,h5,h6 {
61 | text-shadow: 0 0 0 #000 !important;
62 | }
63 |
64 | /* SECTION 5: Make hyperlinks more usable.
65 | Ensure links are underlined, and consider appending
66 | the URL to the end of the link for usability. */
67 | a:link,
68 | a:visited {
69 | font-weight: bold;
70 | text-decoration: underline;
71 | }
72 |
73 |
74 | /* SECTION 6: more reveal.js specific additions by @skypanther */
75 | ul, ol, div, p {
76 | visibility: visible;
77 | position: static;
78 | width: auto;
79 | height: auto;
80 | display: block;
81 | overflow: visible;
82 | margin: auto;
83 | }
84 | .reveal .slides {
85 | position: static;
86 | width: 100%;
87 | height: auto;
88 |
89 | left: auto;
90 | top: auto;
91 | margin-left: auto;
92 | margin-right: auto;
93 | margin-top: auto;
94 | padding: auto;
95 |
96 | overflow: visible;
97 | display: block;
98 |
99 | text-align: center;
100 |
101 | -webkit-perspective: none;
102 | -moz-perspective: none;
103 | -ms-perspective: none;
104 | perspective: none;
105 |
106 | -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */
107 | -moz-perspective-origin: 50% 50%;
108 | -ms-perspective-origin: 50% 50%;
109 | perspective-origin: 50% 50%;
110 | }
111 | .reveal .slides section {
112 |
113 | page-break-after: always !important;
114 |
115 | visibility: visible !important;
116 | position: static !important;
117 | width: 100% !important;
118 | height: auto !important;
119 | min-height: initial !important;
120 | display: block !important;
121 | overflow: visible !important;
122 |
123 | left: 0 !important;
124 | top: 0 !important;
125 | margin-left: 0px !important;
126 | margin-top: 50px !important;
127 | padding: 20px 0px !important;
128 |
129 | opacity: 1 !important;
130 |
131 | -webkit-transform-style: flat !important;
132 | -moz-transform-style: flat !important;
133 | -ms-transform-style: flat !important;
134 | transform-style: flat !important;
135 |
136 | -webkit-transform: none !important;
137 | -moz-transform: none !important;
138 | -ms-transform: none !important;
139 | transform: none !important;
140 | }
141 | .reveal section.stack {
142 | margin: 0px !important;
143 | padding: 0px !important;
144 | page-break-after: avoid !important;
145 | }
146 | .reveal section .fragment {
147 | opacity: 1 !important;
148 | visibility: visible !important;
149 |
150 | -webkit-transform: none !important;
151 | -moz-transform: none !important;
152 | -ms-transform: none !important;
153 | transform: none !important;
154 | }
155 | .reveal img {
156 | box-shadow: none;
157 | }
158 | .reveal .roll {
159 | overflow: visible;
160 | line-height: 1em;
161 | }
162 | .reveal small a {
163 | font-size: 16pt !important;
164 | }
165 |
--------------------------------------------------------------------------------
/css/theme/serif.css:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is darkblue.
4 | *
5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se; so is the theme - beige.css - that this is based off of.
7 | */
8 | /*********************************************
9 | * GLOBAL STYLES
10 | *********************************************/
11 | body {
12 | background: #f0f1eb;
13 | background-color: #f0f1eb; }
14 |
15 | .reveal {
16 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
17 | font-size: 36px;
18 | font-weight: 200;
19 | letter-spacing: -0.02em;
20 | color: black; }
21 |
22 | ::selection {
23 | color: white;
24 | background: #26351c;
25 | text-shadow: none; }
26 |
27 | /*********************************************
28 | * HEADERS
29 | *********************************************/
30 | .reveal h1,
31 | .reveal h2,
32 | .reveal h3,
33 | .reveal h4,
34 | .reveal h5,
35 | .reveal h6 {
36 | margin: 0 0 20px 0;
37 | color: #383d3d;
38 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
39 | line-height: 0.9em;
40 | letter-spacing: 0.02em;
41 | text-transform: none;
42 | text-shadow: none; }
43 |
44 | .reveal h1 {
45 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
46 |
47 | /*********************************************
48 | * LINKS
49 | *********************************************/
50 | .reveal a:not(.image) {
51 | color: #51483d;
52 | text-decoration: none;
53 | -webkit-transition: color .15s ease;
54 | -moz-transition: color .15s ease;
55 | -ms-transition: color .15s ease;
56 | -o-transition: color .15s ease;
57 | transition: color .15s ease; }
58 |
59 | .reveal a:not(.image):hover {
60 | color: #8b7c69;
61 | text-shadow: none;
62 | border: none; }
63 |
64 | .reveal .roll span:after {
65 | color: #fff;
66 | background: #25211c; }
67 |
68 | /*********************************************
69 | * IMAGES
70 | *********************************************/
71 | .reveal section img {
72 | margin: 15px 0px;
73 | background: rgba(255, 255, 255, 0.12);
74 | border: 4px solid black;
75 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
76 | -webkit-transition: all .2s linear;
77 | -moz-transition: all .2s linear;
78 | -ms-transition: all .2s linear;
79 | -o-transition: all .2s linear;
80 | transition: all .2s linear; }
81 |
82 | .reveal a:hover img {
83 | background: rgba(255, 255, 255, 0.2);
84 | border-color: #51483d;
85 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
86 |
87 | /*********************************************
88 | * NAVIGATION CONTROLS
89 | *********************************************/
90 | .reveal .controls div.navigate-left,
91 | .reveal .controls div.navigate-left.enabled {
92 | border-right-color: #51483d; }
93 |
94 | .reveal .controls div.navigate-right,
95 | .reveal .controls div.navigate-right.enabled {
96 | border-left-color: #51483d; }
97 |
98 | .reveal .controls div.navigate-up,
99 | .reveal .controls div.navigate-up.enabled {
100 | border-bottom-color: #51483d; }
101 |
102 | .reveal .controls div.navigate-down,
103 | .reveal .controls div.navigate-down.enabled {
104 | border-top-color: #51483d; }
105 |
106 | .reveal .controls div.navigate-left.enabled:hover {
107 | border-right-color: #8b7c69; }
108 |
109 | .reveal .controls div.navigate-right.enabled:hover {
110 | border-left-color: #8b7c69; }
111 |
112 | .reveal .controls div.navigate-up.enabled:hover {
113 | border-bottom-color: #8b7c69; }
114 |
115 | .reveal .controls div.navigate-down.enabled:hover {
116 | border-top-color: #8b7c69; }
117 |
118 | /*********************************************
119 | * PROGRESS BAR
120 | *********************************************/
121 | .reveal .progress {
122 | background: rgba(0, 0, 0, 0.2); }
123 |
124 | .reveal .progress span {
125 | background: #51483d;
126 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
127 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
128 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
129 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
130 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
131 |
--------------------------------------------------------------------------------
/css/theme/template/theme.scss:
--------------------------------------------------------------------------------
1 | // Base theme template for reveal.js
2 |
3 | /*********************************************
4 | * GLOBAL STYLES
5 | *********************************************/
6 |
7 | body {
8 | @include bodyBackground();
9 | background-color: $backgroundColor;
10 | }
11 |
12 | .reveal {
13 | font-family: $mainFont;
14 | font-size: $mainFontSize;
15 | font-weight: 200;
16 | letter-spacing: -0.02em;
17 | color: $mainColor;
18 | }
19 |
20 | ::selection {
21 | color: $selectionColor;
22 | background: $selectionBackgroundColor;
23 | text-shadow: none;
24 | }
25 |
26 | /*********************************************
27 | * HEADERS
28 | *********************************************/
29 |
30 | .reveal h1,
31 | .reveal h2,
32 | .reveal h3,
33 | .reveal h4,
34 | .reveal h5,
35 | .reveal h6 {
36 | margin: 0 0 20px 0;
37 | color: $headingColor;
38 |
39 | font-family: $headingFont;
40 | line-height: $headingLineHeight;
41 | letter-spacing: $headingLetterSpacing;
42 |
43 | text-transform: $headingTextTransform;
44 | text-shadow: $headingTextShadow;
45 | }
46 |
47 | .reveal h1 {
48 | text-shadow: $heading1TextShadow;
49 | }
50 |
51 |
52 | /*********************************************
53 | * LINKS
54 | *********************************************/
55 |
56 | .reveal a:not(.image) {
57 | color: $linkColor;
58 | text-decoration: none;
59 |
60 | -webkit-transition: color .15s ease;
61 | -moz-transition: color .15s ease;
62 | -ms-transition: color .15s ease;
63 | -o-transition: color .15s ease;
64 | transition: color .15s ease;
65 | }
66 | .reveal a:not(.image):hover {
67 | color: $linkColorHover;
68 |
69 | text-shadow: none;
70 | border: none;
71 | }
72 |
73 | .reveal .roll span:after {
74 | color: #fff;
75 | background: darken( $linkColor, 15% );
76 | }
77 |
78 |
79 | /*********************************************
80 | * IMAGES
81 | *********************************************/
82 |
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255,255,255,0.12);
86 | border: 4px solid $mainColor;
87 |
88 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
89 |
90 | -webkit-transition: all .2s linear;
91 | -moz-transition: all .2s linear;
92 | -ms-transition: all .2s linear;
93 | -o-transition: all .2s linear;
94 | transition: all .2s linear;
95 | }
96 |
97 | .reveal a:hover img {
98 | background: rgba(255,255,255,0.2);
99 | border-color: $linkColor;
100 |
101 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
102 | }
103 |
104 |
105 | /*********************************************
106 | * NAVIGATION CONTROLS
107 | *********************************************/
108 |
109 | .reveal .controls div.navigate-left,
110 | .reveal .controls div.navigate-left.enabled {
111 | border-right-color: $linkColor;
112 | }
113 |
114 | .reveal .controls div.navigate-right,
115 | .reveal .controls div.navigate-right.enabled {
116 | border-left-color: $linkColor;
117 | }
118 |
119 | .reveal .controls div.navigate-up,
120 | .reveal .controls div.navigate-up.enabled {
121 | border-bottom-color: $linkColor;
122 | }
123 |
124 | .reveal .controls div.navigate-down,
125 | .reveal .controls div.navigate-down.enabled {
126 | border-top-color: $linkColor;
127 | }
128 |
129 | .reveal .controls div.navigate-left.enabled:hover {
130 | border-right-color: $linkColorHover;
131 | }
132 |
133 | .reveal .controls div.navigate-right.enabled:hover {
134 | border-left-color: $linkColorHover;
135 | }
136 |
137 | .reveal .controls div.navigate-up.enabled:hover {
138 | border-bottom-color: $linkColorHover;
139 | }
140 |
141 | .reveal .controls div.navigate-down.enabled:hover {
142 | border-top-color: $linkColorHover;
143 | }
144 |
145 |
146 | /*********************************************
147 | * PROGRESS BAR
148 | *********************************************/
149 |
150 | .reveal .progress {
151 | background: rgba(0,0,0,0.2);
152 | }
153 | .reveal .progress span {
154 | background: $linkColor;
155 |
156 | -webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
157 | -moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
158 | -ms-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
159 | -o-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
160 | transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
161 | }
162 |
163 |
164 |
--------------------------------------------------------------------------------
/css/theme/simple.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
2 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
3 | /**
4 | * A simple theme for reveal.js presentations, similar
5 | * to the default theme. The accent color is darkblue.
6 | *
7 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
8 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
9 | */
10 | /*********************************************
11 | * GLOBAL STYLES
12 | *********************************************/
13 | body {
14 | background: white;
15 | background-color: white; }
16 |
17 | .reveal {
18 | font-family: "Lato", sans-serif;
19 | font-size: 36px;
20 | font-weight: 200;
21 | letter-spacing: -0.02em;
22 | color: black; }
23 |
24 | ::selection {
25 | color: white;
26 | background: rgba(0, 0, 0, 0.99);
27 | text-shadow: none; }
28 |
29 | /*********************************************
30 | * HEADERS
31 | *********************************************/
32 | .reveal h1,
33 | .reveal h2,
34 | .reveal h3,
35 | .reveal h4,
36 | .reveal h5,
37 | .reveal h6 {
38 | margin: 0 0 20px 0;
39 | color: black;
40 | font-family: "News Cycle", Impact, sans-serif;
41 | line-height: 0.9em;
42 | letter-spacing: 0.02em;
43 | text-transform: none;
44 | text-shadow: none; }
45 |
46 | .reveal h1 {
47 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
48 |
49 | /*********************************************
50 | * LINKS
51 | *********************************************/
52 | .reveal a:not(.image) {
53 | color: darkblue;
54 | text-decoration: none;
55 | -webkit-transition: color .15s ease;
56 | -moz-transition: color .15s ease;
57 | -ms-transition: color .15s ease;
58 | -o-transition: color .15s ease;
59 | transition: color .15s ease; }
60 |
61 | .reveal a:not(.image):hover {
62 | color: #0000f1;
63 | text-shadow: none;
64 | border: none; }
65 |
66 | .reveal .roll span:after {
67 | color: #fff;
68 | background: #00003f; }
69 |
70 | /*********************************************
71 | * IMAGES
72 | *********************************************/
73 | .reveal section img {
74 | margin: 15px 0px;
75 | background: rgba(255, 255, 255, 0.12);
76 | border: 4px solid black;
77 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
78 | -webkit-transition: all .2s linear;
79 | -moz-transition: all .2s linear;
80 | -ms-transition: all .2s linear;
81 | -o-transition: all .2s linear;
82 | transition: all .2s linear; }
83 |
84 | .reveal a:hover img {
85 | background: rgba(255, 255, 255, 0.2);
86 | border-color: darkblue;
87 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
88 |
89 | /*********************************************
90 | * NAVIGATION CONTROLS
91 | *********************************************/
92 | .reveal .controls div.navigate-left,
93 | .reveal .controls div.navigate-left.enabled {
94 | border-right-color: darkblue; }
95 |
96 | .reveal .controls div.navigate-right,
97 | .reveal .controls div.navigate-right.enabled {
98 | border-left-color: darkblue; }
99 |
100 | .reveal .controls div.navigate-up,
101 | .reveal .controls div.navigate-up.enabled {
102 | border-bottom-color: darkblue; }
103 |
104 | .reveal .controls div.navigate-down,
105 | .reveal .controls div.navigate-down.enabled {
106 | border-top-color: darkblue; }
107 |
108 | .reveal .controls div.navigate-left.enabled:hover {
109 | border-right-color: #0000f1; }
110 |
111 | .reveal .controls div.navigate-right.enabled:hover {
112 | border-left-color: #0000f1; }
113 |
114 | .reveal .controls div.navigate-up.enabled:hover {
115 | border-bottom-color: #0000f1; }
116 |
117 | .reveal .controls div.navigate-down.enabled:hover {
118 | border-top-color: #0000f1; }
119 |
120 | /*********************************************
121 | * PROGRESS BAR
122 | *********************************************/
123 | .reveal .progress {
124 | background: rgba(0, 0, 0, 0.2); }
125 |
126 | .reveal .progress span {
127 | background: darkblue;
128 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
129 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
130 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
131 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
132 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
133 |
--------------------------------------------------------------------------------
/css/theme/moon.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Solarized Dark theme for reveal.js.
4 | * Author: Achim Staebler
5 | */
6 | @font-face {
7 | font-family: 'League Gothic';
8 | src: url("../../lib/font/league_gothic-webfont.eot");
9 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
10 | font-weight: normal;
11 | font-style: normal; }
12 |
13 | /**
14 | * Solarized colors by Ethan Schoonover
15 | */
16 | html * {
17 | color-profile: sRGB;
18 | rendering-intent: auto; }
19 |
20 | /*********************************************
21 | * GLOBAL STYLES
22 | *********************************************/
23 | body {
24 | background: #002b36;
25 | background-color: #002b36; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: 200;
31 | letter-spacing: -0.02em;
32 | color: #93a1a1; }
33 |
34 | ::selection {
35 | color: white;
36 | background: #d33682;
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #eee8d5;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: none; }
55 |
56 | .reveal h1 {
57 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #268bd2;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #78b9e6;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #1a6091; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #93a1a1;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #268bd2;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #268bd2; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #268bd2; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #268bd2; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #268bd2; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #78b9e6; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #78b9e6; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #78b9e6; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #78b9e6; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #268bd2;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
--------------------------------------------------------------------------------
/css/theme/solarized.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Solarized Light theme for reveal.js.
4 | * Author: Achim Staebler
5 | */
6 | @font-face {
7 | font-family: 'League Gothic';
8 | src: url("../../lib/font/league_gothic-webfont.eot");
9 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
10 | font-weight: normal;
11 | font-style: normal; }
12 |
13 | /**
14 | * Solarized colors by Ethan Schoonover
15 | */
16 | html * {
17 | color-profile: sRGB;
18 | rendering-intent: auto; }
19 |
20 | /*********************************************
21 | * GLOBAL STYLES
22 | *********************************************/
23 | body {
24 | background: #fdf6e3;
25 | background-color: #fdf6e3; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: 200;
31 | letter-spacing: -0.02em;
32 | color: #657b83; }
33 |
34 | ::selection {
35 | color: white;
36 | background: #d33682;
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #586e75;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: none; }
55 |
56 | .reveal h1 {
57 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #268bd2;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #78b9e6;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #1a6091; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #657b83;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #268bd2;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #268bd2; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #268bd2; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #268bd2; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #268bd2; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #78b9e6; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #78b9e6; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #78b9e6; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #78b9e6; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #268bd2;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
--------------------------------------------------------------------------------
/css/theme/sky.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
2 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
3 | /**
4 | * Sky theme for reveal.js.
5 | *
6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 | /*********************************************
9 | * GLOBAL STYLES
10 | *********************************************/
11 | body {
12 | background: #add9e4;
13 | background: -moz-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
14 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #add9e4));
15 | background: -webkit-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
16 | background: -o-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
17 | background: -ms-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
18 | background: radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
19 | background-color: #f7fbfc; }
20 |
21 | .reveal {
22 | font-family: "Open Sans", sans-serif;
23 | font-size: 36px;
24 | font-weight: 200;
25 | letter-spacing: -0.02em;
26 | color: #333333; }
27 |
28 | ::selection {
29 | color: white;
30 | background: #134674;
31 | text-shadow: none; }
32 |
33 | /*********************************************
34 | * HEADERS
35 | *********************************************/
36 | .reveal h1,
37 | .reveal h2,
38 | .reveal h3,
39 | .reveal h4,
40 | .reveal h5,
41 | .reveal h6 {
42 | margin: 0 0 20px 0;
43 | color: #333333;
44 | font-family: "Quicksand", sans-serif;
45 | line-height: 0.9em;
46 | letter-spacing: -0.08em;
47 | text-transform: uppercase;
48 | text-shadow: none; }
49 |
50 | .reveal h1 {
51 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
52 |
53 | /*********************************************
54 | * LINKS
55 | *********************************************/
56 | .reveal a:not(.image) {
57 | color: #3b759e;
58 | text-decoration: none;
59 | -webkit-transition: color .15s ease;
60 | -moz-transition: color .15s ease;
61 | -ms-transition: color .15s ease;
62 | -o-transition: color .15s ease;
63 | transition: color .15s ease; }
64 |
65 | .reveal a:not(.image):hover {
66 | color: #74a7cb;
67 | text-shadow: none;
68 | border: none; }
69 |
70 | .reveal .roll span:after {
71 | color: #fff;
72 | background: #264c66; }
73 |
74 | /*********************************************
75 | * IMAGES
76 | *********************************************/
77 | .reveal section img {
78 | margin: 15px 0px;
79 | background: rgba(255, 255, 255, 0.12);
80 | border: 4px solid #333333;
81 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
82 | -webkit-transition: all .2s linear;
83 | -moz-transition: all .2s linear;
84 | -ms-transition: all .2s linear;
85 | -o-transition: all .2s linear;
86 | transition: all .2s linear; }
87 |
88 | .reveal a:hover img {
89 | background: rgba(255, 255, 255, 0.2);
90 | border-color: #3b759e;
91 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
92 |
93 | /*********************************************
94 | * NAVIGATION CONTROLS
95 | *********************************************/
96 | .reveal .controls div.navigate-left,
97 | .reveal .controls div.navigate-left.enabled {
98 | border-right-color: #3b759e; }
99 |
100 | .reveal .controls div.navigate-right,
101 | .reveal .controls div.navigate-right.enabled {
102 | border-left-color: #3b759e; }
103 |
104 | .reveal .controls div.navigate-up,
105 | .reveal .controls div.navigate-up.enabled {
106 | border-bottom-color: #3b759e; }
107 |
108 | .reveal .controls div.navigate-down,
109 | .reveal .controls div.navigate-down.enabled {
110 | border-top-color: #3b759e; }
111 |
112 | .reveal .controls div.navigate-left.enabled:hover {
113 | border-right-color: #74a7cb; }
114 |
115 | .reveal .controls div.navigate-right.enabled:hover {
116 | border-left-color: #74a7cb; }
117 |
118 | .reveal .controls div.navigate-up.enabled:hover {
119 | border-bottom-color: #74a7cb; }
120 |
121 | .reveal .controls div.navigate-down.enabled:hover {
122 | border-top-color: #74a7cb; }
123 |
124 | /*********************************************
125 | * PROGRESS BAR
126 | *********************************************/
127 | .reveal .progress {
128 | background: rgba(0, 0, 0, 0.2); }
129 |
130 | .reveal .progress span {
131 | background: #3b759e;
132 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
133 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
134 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
135 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
136 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
137 |
--------------------------------------------------------------------------------
/css/print/paper.css:
--------------------------------------------------------------------------------
1 | /* Default Print Stylesheet Template
2 | by Rob Glazebrook of CSSnewbie.com
3 | Last Updated: June 4, 2008
4 |
5 | Feel free (nay, compelled) to edit, append, and
6 | manipulate this file as you see fit. */
7 |
8 |
9 | /* SECTION 1: Set default width, margin, float, and
10 | background. This prevents elements from extending
11 | beyond the edge of the printed page, and prevents
12 | unnecessary background images from printing */
13 | body {
14 | background: #fff;
15 | font-size: 13pt;
16 | width: auto;
17 | height: auto;
18 | border: 0;
19 | margin: 0 5%;
20 | padding: 0;
21 | float: none !important;
22 | overflow: visible;
23 | }
24 | html {
25 | background: #fff;
26 | width: auto;
27 | height: auto;
28 | overflow: visible;
29 | }
30 |
31 | /* SECTION 2: Remove any elements not needed in print.
32 | This would include navigation, ads, sidebars, etc. */
33 | .nestedarrow,
34 | .controls,
35 | .reveal .progress,
36 | .reveal.overview,
37 | .fork-reveal,
38 | .share-reveal,
39 | .state-background {
40 | display: none !important;
41 | }
42 |
43 | /* SECTION 3: Set body font face, size, and color.
44 | Consider using a serif font for readability. */
45 | body, p, td, li, div, a {
46 | font-size: 16pt!important;
47 | font-family: Georgia, "Times New Roman", Times, serif !important;
48 | color: #000;
49 | }
50 |
51 | /* SECTION 4: Set heading font face, sizes, and color.
52 | Diffrentiate your headings from your body text.
53 | Perhaps use a large sans-serif for distinction. */
54 | h1,h2,h3,h4,h5,h6 {
55 | color: #000!important;
56 | height: auto;
57 | line-height: normal;
58 | font-family: Georgia, "Times New Roman", Times, serif !important;
59 | text-shadow: 0 0 0 #000 !important;
60 | text-align: left;
61 | letter-spacing: normal;
62 | }
63 | /* Need to reduce the size of the fonts for printing */
64 | h1 { font-size: 26pt !important; }
65 | h2 { font-size: 22pt !important; }
66 | h3 { font-size: 20pt !important; }
67 | h4 { font-size: 20pt !important; font-variant: small-caps; }
68 | h5 { font-size: 19pt !important; }
69 | h6 { font-size: 18pt !important; font-style: italic; }
70 |
71 | /* SECTION 5: Make hyperlinks more usable.
72 | Ensure links are underlined, and consider appending
73 | the URL to the end of the link for usability. */
74 | a:link,
75 | a:visited {
76 | color: #000 !important;
77 | font-weight: bold;
78 | text-decoration: underline;
79 | }
80 | /*
81 | .reveal a:link:after,
82 | .reveal a:visited:after {
83 | content: " (" attr(href) ") ";
84 | color: #222 !important;
85 | font-size: 90%;
86 | }
87 | */
88 |
89 |
90 | /* SECTION 6: more reveal.js specific additions by @skypanther */
91 | ul, ol, div, p {
92 | visibility: visible;
93 | position: static;
94 | width: auto;
95 | height: auto;
96 | display: block;
97 | overflow: visible;
98 | margin: auto;
99 | text-align: left !important;
100 | }
101 | .reveal .slides {
102 | position: static;
103 | width: auto;
104 | height: auto;
105 |
106 | left: auto;
107 | top: auto;
108 | margin-left: auto;
109 | margin-top: auto;
110 | padding: auto;
111 |
112 | overflow: visible;
113 | display: block;
114 |
115 | text-align: center;
116 | -webkit-perspective: none;
117 | -moz-perspective: none;
118 | -ms-perspective: none;
119 | perspective: none;
120 |
121 | -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */
122 | -moz-perspective-origin: 50% 50%;
123 | -ms-perspective-origin: 50% 50%;
124 | perspective-origin: 50% 50%;
125 | }
126 | .reveal .slides>section,
127 | .reveal .slides>section>section {
128 |
129 | visibility: visible !important;
130 | position: static !important;
131 | width: 90% !important;
132 | height: auto !important;
133 | display: block !important;
134 | overflow: visible !important;
135 |
136 | left: 0% !important;
137 | top: 0% !important;
138 | margin-left: 0px !important;
139 | margin-top: 0px !important;
140 | padding: 20px 0px !important;
141 |
142 | opacity: 1 !important;
143 |
144 | -webkit-transform-style: flat !important;
145 | -moz-transform-style: flat !important;
146 | -ms-transform-style: flat !important;
147 | transform-style: flat !important;
148 |
149 | -webkit-transform: none !important;
150 | -moz-transform: none !important;
151 | -ms-transform: none !important;
152 | transform: none !important;
153 | }
154 | .reveal section {
155 | page-break-after: always !important;
156 | display: block !important;
157 | }
158 | .reveal section .fragment {
159 | opacity: 1 !important;
160 | visibility: visible !important;
161 |
162 | -webkit-transform: none !important;
163 | -moz-transform: none !important;
164 | -ms-transform: none !important;
165 | transform: none !important;
166 | }
167 | .reveal section:last-of-type {
168 | page-break-after: avoid !important;
169 | }
170 | .reveal section img {
171 | display: block;
172 | margin: 15px 0px;
173 | background: rgba(255,255,255,1);
174 | border: 1px solid #666;
175 | box-shadow: none;
176 | }
--------------------------------------------------------------------------------
/css/theme/beige.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Beige theme for reveal.js.
4 | *
5 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
6 | */
7 | @font-face {
8 | font-family: 'League Gothic';
9 | src: url("../../lib/font/league_gothic-webfont.eot");
10 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
11 | font-weight: normal;
12 | font-style: normal; }
13 |
14 | /*********************************************
15 | * GLOBAL STYLES
16 | *********************************************/
17 | body {
18 | background: #f7f2d3;
19 | background: -moz-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
20 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, white), color-stop(100%, #f7f2d3));
21 | background: -webkit-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
22 | background: -o-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
23 | background: -ms-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
24 | background: radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
25 | background-color: #f7f3de; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: 200;
31 | letter-spacing: -0.02em;
32 | color: #333333; }
33 |
34 | ::selection {
35 | color: white;
36 | background: rgba(79, 64, 28, 0.99);
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #333333;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: none; }
55 |
56 | .reveal h1 {
57 | text-shadow: 0 1px 0 #cccccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbbbbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaaaaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #8b743d;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #c0a86e;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #564826; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #333333;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #8b743d;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #8b743d; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #8b743d; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #8b743d; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #8b743d; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #c0a86e; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #c0a86e; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #c0a86e; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #c0a86e; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #8b743d;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
--------------------------------------------------------------------------------
/css/theme/default.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Default theme for reveal.js.
4 | *
5 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
6 | */
7 | @font-face {
8 | font-family: 'League Gothic';
9 | src: url("../../lib/font/league_gothic-webfont.eot");
10 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
11 | font-weight: normal;
12 | font-style: normal; }
13 |
14 | /*********************************************
15 | * GLOBAL STYLES
16 | *********************************************/
17 | body {
18 | background: #1c1e20;
19 | background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
20 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20));
21 | background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
22 | background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
23 | background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
24 | background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
25 | background-color: #2b2b2b; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: 200;
31 | letter-spacing: -0.02em;
32 | color: #eeeeee; }
33 |
34 | ::selection {
35 | color: white;
36 | background: #ff5e99;
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #eeeeee;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
55 |
56 | .reveal h1 {
57 | text-shadow: 0 1px 0 #cccccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbbbbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaaaaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #13daec;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #71e9f4;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #0d99a5; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #eeeeee;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #13daec;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #13daec; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #13daec; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #13daec; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #13daec; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #71e9f4; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #71e9f4; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #71e9f4; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #71e9f4; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #13daec;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
--------------------------------------------------------------------------------
/plugin/notes/notes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | reveal.js - Slide Notes
7 |
8 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 | UPCOMING:
147 |
148 |
149 |
150 |
151 |
Time
152 | 0:00:00 AM
153 |
154 |
155 |
Elapsed
156 | 00:00:00
157 |
158 |
159 |
160 |
161 |
162 |
163 |
251 |
252 |
253 |
--------------------------------------------------------------------------------
/plugin/markdown/markdown.js:
--------------------------------------------------------------------------------
1 | // From https://gist.github.com/1343518
2 | // Modified by Hakim to handle Markdown indented with tabs
3 | (function(){
4 |
5 | if( typeof marked === 'undefined' ) {
6 | throw 'The reveal.js Markdown plugin requires marked to be loaded';
7 | }
8 |
9 | var stripLeadingWhitespace = function(section) {
10 |
11 | var template = section.querySelector( 'script' );
12 |
13 | // strip leading whitespace so it isn't evaluated as code
14 | var text = ( template || section ).textContent;
15 |
16 | var leadingWs = text.match(/^\n?(\s*)/)[1].length,
17 | leadingTabs = text.match(/^\n?(\t*)/)[1].length;
18 |
19 | if( leadingTabs > 0 ) {
20 | text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' );
21 | }
22 | else if( leadingWs > 1 ) {
23 | text = text.replace( new RegExp('\\n? {' + leadingWs + '}','g'), '\n' );
24 | }
25 |
26 | return text;
27 |
28 | };
29 |
30 | var twrap = function(el) {
31 | return '';
32 | };
33 |
34 | var getForwardedAttributes = function(section) {
35 | var attributes = section.attributes;
36 | var result = [];
37 |
38 | for( var i = 0, len = attributes.length; i < len; i++ ) {
39 | var name = attributes[i].name,
40 | value = attributes[i].value;
41 |
42 | // disregard attributes that are used for markdown loading/parsing
43 | if( /data\-(markdown|separator|vertical)/gi.test( name ) ) continue;
44 |
45 | if( value ) {
46 | result.push( name + '=' + value );
47 | }
48 | else {
49 | result.push( name );
50 | }
51 | }
52 |
53 | return result.join( ' ' );
54 | }
55 |
56 | var slidifyMarkdown = function(markdown, separator, vertical, attributes) {
57 |
58 | separator = separator || '^\n---\n$';
59 |
60 | var reSeparator = new RegExp(separator + (vertical ? '|' + vertical : ''), 'mg'),
61 | reHorSeparator = new RegExp(separator),
62 | matches,
63 | lastIndex = 0,
64 | isHorizontal,
65 | wasHorizontal = true,
66 | content,
67 | sectionStack = [],
68 | markdownSections = '';
69 |
70 | // iterate until all blocks between separators are stacked up
71 | while( matches = reSeparator.exec(markdown) ) {
72 |
73 | // determine direction (horizontal by default)
74 | isHorizontal = reHorSeparator.test(matches[0]);
75 |
76 | if( !isHorizontal && wasHorizontal ) {
77 | // create vertical stack
78 | sectionStack.push([]);
79 | }
80 |
81 | // pluck slide content from markdown input
82 | content = markdown.substring(lastIndex, matches.index);
83 |
84 | if( isHorizontal && wasHorizontal ) {
85 | // add to horizontal stack
86 | sectionStack.push(content);
87 | } else {
88 | // add to vertical stack
89 | sectionStack[sectionStack.length-1].push(content);
90 | }
91 |
92 | lastIndex = reSeparator.lastIndex;
93 | wasHorizontal = isHorizontal;
94 |
95 | }
96 |
97 | // add the remaining slide
98 | (wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1]).push(markdown.substring(lastIndex));
99 |
100 | // flatten the hierarchical stack, and insert tags
101 | for( var k = 0, klen = sectionStack.length; k < klen; k++ ) {
102 | // horizontal
103 | if( typeof sectionStack[k] === 'string' ) {
104 | markdownSections += '' + twrap( sectionStack[k] ) + '';
105 | }
106 | // vertical
107 | else {
108 | markdownSections += '' +
109 | '' + sectionStack[k].map(twrap).join('' +
110 | '';
111 | }
112 | }
113 |
114 | return markdownSections;
115 | };
116 |
117 | var querySlidingMarkdown = function() {
118 |
119 | var sections = document.querySelectorAll( '[data-markdown]'),
120 | section;
121 |
122 | for( var j = 0, jlen = sections.length; j < jlen; j++ ) {
123 |
124 | section = sections[j];
125 |
126 | if( section.getAttribute('data-markdown').length ) {
127 |
128 | var xhr = new XMLHttpRequest(),
129 | url = section.getAttribute('data-markdown');
130 |
131 | xhr.onreadystatechange = function () {
132 | if( xhr.readyState === 4 ) {
133 | if (xhr.status >= 200 && xhr.status < 300) {
134 | section.outerHTML = slidifyMarkdown( xhr.responseText, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), getForwardedAttributes(section) );
135 | } else {
136 | section.outerHTML = 'ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status +
137 | '. Check your browser\'s JavaScript console for more details.' +
138 | 'Remember that you need to serve the presentation HTML from a HTTP server and the Markdown file must be there too.
';
139 | }
140 | }
141 | };
142 |
143 | xhr.open('GET', url, false);
144 | try {
145 | xhr.send();
146 | } catch (e) {
147 | alert('Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e);
148 | }
149 |
150 | } else if( section.getAttribute('data-separator') ) {
151 |
152 | var markdown = stripLeadingWhitespace(section);
153 | section.outerHTML = slidifyMarkdown( markdown, section.getAttribute('data-separator'), section.getAttribute('data-vertical'), getForwardedAttributes(section) );
154 |
155 | }
156 | }
157 |
158 | };
159 |
160 | var queryMarkdownSlides = function() {
161 |
162 | var sections = document.querySelectorAll( '[data-markdown]');
163 |
164 | for( var j = 0, jlen = sections.length; j < jlen; j++ ) {
165 |
166 | makeHtml(sections[j]);
167 |
168 | }
169 |
170 | };
171 |
172 | var makeHtml = function(section) {
173 |
174 | var notes = section.querySelector( 'aside.notes' );
175 |
176 | var markdown = stripLeadingWhitespace(section);
177 |
178 | section.innerHTML = marked(markdown);
179 |
180 | if( notes ) {
181 | section.appendChild( notes );
182 | }
183 |
184 | };
185 |
186 | querySlidingMarkdown();
187 |
188 | queryMarkdownSlides();
189 |
190 | })();
191 |
--------------------------------------------------------------------------------
/plugin/search/search.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Handles finding a text string anywhere in the slides and showing the next occurrence to the user
3 | * by navigatating to that slide and highlighting it.
4 | *
5 | * By Jon Snyder , February 2013
6 | */
7 |
8 | var RevealSearch = (function() {
9 |
10 | var matchedSlides;
11 | var currentMatchedIndex;
12 | var searchboxDirty;
13 | var myHilitor;
14 |
15 | // Original JavaScript code by Chirp Internet: www.chirp.com.au
16 | // Please acknowledge use of this code by including this header.
17 | // 2/2013 jon: modified regex to display any match, not restricted to word boundaries.
18 |
19 | function Hilitor(id, tag)
20 | {
21 |
22 | var targetNode = document.getElementById(id) || document.body;
23 | var hiliteTag = tag || "EM";
24 | var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM|SPAN)$");
25 | var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
26 | var wordColor = [];
27 | var colorIdx = 0;
28 | var matchRegex = "";
29 | var matchingSlides = [];
30 |
31 | this.setRegex = function(input)
32 | {
33 | input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
34 | matchRegex = new RegExp("(" + input + ")","i");
35 | }
36 |
37 | this.getRegex = function()
38 | {
39 | return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
40 | }
41 |
42 | // recursively apply word highlighting
43 | this.hiliteWords = function(node)
44 | {
45 | if(node == undefined || !node) return;
46 | if(!matchRegex) return;
47 | if(skipTags.test(node.nodeName)) return;
48 |
49 | if(node.hasChildNodes()) {
50 | for(var i=0; i < node.childNodes.length; i++)
51 | this.hiliteWords(node.childNodes[i]);
52 | }
53 | if(node.nodeType == 3) { // NODE_TEXT
54 | if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
55 | //find the slide's section element and save it in our list of matching slides
56 | var secnode = node.parentNode;
57 | while (secnode.nodeName != 'SECTION') {
58 | secnode = secnode.parentNode;
59 | }
60 |
61 | var slideIndex = Reveal.getIndices(secnode);
62 | var slidelen = matchingSlides.length;
63 | var alreadyAdded = false;
64 | for (var i=0; i < slidelen; i++) {
65 | if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
66 | alreadyAdded = true;
67 | }
68 | }
69 | if (! alreadyAdded) {
70 | matchingSlides.push(slideIndex);
71 | }
72 |
73 | if(!wordColor[regs[0].toLowerCase()]) {
74 | wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
75 | }
76 |
77 | var match = document.createElement(hiliteTag);
78 | match.appendChild(document.createTextNode(regs[0]));
79 | match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
80 | match.style.fontStyle = "inherit";
81 | match.style.color = "#000";
82 |
83 | var after = node.splitText(regs.index);
84 | after.nodeValue = after.nodeValue.substring(regs[0].length);
85 | node.parentNode.insertBefore(match, after);
86 | }
87 | }
88 | };
89 |
90 | // remove highlighting
91 | this.remove = function()
92 | {
93 | var arr = document.getElementsByTagName(hiliteTag);
94 | while(arr.length && (el = arr[0])) {
95 | el.parentNode.replaceChild(el.firstChild, el);
96 | }
97 | };
98 |
99 | // start highlighting at target node
100 | this.apply = function(input)
101 | {
102 | if(input == undefined || !input) return;
103 | this.remove();
104 | this.setRegex(input);
105 | this.hiliteWords(targetNode);
106 | return matchingSlides;
107 | };
108 |
109 | }
110 |
111 | function openSearch() {
112 | //ensure the search term input dialog is visible and has focus:
113 | var inputbox = document.getElementById("searchinput");
114 | inputbox.style.display = "inline";
115 | inputbox.focus();
116 | inputbox.select();
117 | }
118 |
119 | function toggleSearch() {
120 | var inputbox = document.getElementById("searchinput");
121 | if (inputbox.style.display !== "inline") {
122 | openSearch();
123 | }
124 | else {
125 | inputbox.style.display = "none";
126 | myHilitor.remove();
127 | }
128 | }
129 |
130 | function doSearch() {
131 | //if there's been a change in the search term, perform a new search:
132 | if (searchboxDirty) {
133 | var searchstring = document.getElementById("searchinput").value;
134 |
135 | //find the keyword amongst the slides
136 | myHilitor = new Hilitor("slidecontent");
137 | matchedSlides = myHilitor.apply(searchstring);
138 | currentMatchedIndex = 0;
139 | }
140 |
141 | //navigate to the next slide that has the keyword, wrapping to the first if necessary
142 | if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
143 | currentMatchedIndex = 0;
144 | }
145 | if (matchedSlides.length > currentMatchedIndex) {
146 | Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
147 | currentMatchedIndex++;
148 | }
149 | }
150 |
151 | var dom = {};
152 | dom.wrapper = document.querySelector( '.reveal' );
153 |
154 | if( !dom.wrapper.querySelector( '.searchbox' ) ) {
155 | var searchElement = document.createElement( 'div' );
156 | searchElement.id = "searchinputdiv";
157 | searchElement.classList.add( 'searchdiv' );
158 | searchElement.style.position = 'absolute';
159 | searchElement.style.top = '10px';
160 | searchElement.style.left = '10px';
161 | //embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
162 | searchElement.innerHTML = '
';
163 | dom.wrapper.appendChild( searchElement );
164 | }
165 |
166 | document.getElementById("searchbutton").addEventListener( 'click', function(event) {
167 | doSearch();
168 | }, false );
169 |
170 | document.getElementById("searchinput").addEventListener( 'keyup', function( event ) {
171 | switch (event.keyCode) {
172 | case 13:
173 | event.preventDefault();
174 | doSearch();
175 | searchboxDirty = false;
176 | break;
177 | default:
178 | searchboxDirty = true;
179 | }
180 | }, false );
181 |
182 | // Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)
183 | /*
184 | document.addEventListener( 'keydown', function( event ) {
185 | // Disregard the event if the target is editable or a
186 | // modifier is present
187 | if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
188 |
189 | if( event.keyCode === 83 ) {
190 | event.preventDefault();
191 | openSearch();
192 | }
193 | }, false );
194 | */
195 | return { open: openSearch };
196 | })();
197 |
--------------------------------------------------------------------------------
/plugin/zoom-js/zoom.js:
--------------------------------------------------------------------------------
1 | // Custom reveal.js integration
2 | (function(){
3 | var isEnabled = true;
4 |
5 | document.querySelector( '.reveal' ).addEventListener( 'mousedown', function( event ) {
6 | if( event.altKey && isEnabled ) {
7 | event.preventDefault();
8 | zoom.to({ element: event.target, pan: false });
9 | }
10 | } );
11 |
12 | Reveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );
13 | Reveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );
14 | })();
15 |
16 | /*!
17 | * zoom.js 0.2 (modified version for use with reveal.js)
18 | * http://lab.hakim.se/zoom-js
19 | * MIT licensed
20 | *
21 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
22 | */
23 | var zoom = (function(){
24 |
25 | // The current zoom level (scale)
26 | var level = 1;
27 |
28 | // The current mouse position, used for panning
29 | var mouseX = 0,
30 | mouseY = 0;
31 |
32 | // Timeout before pan is activated
33 | var panEngageTimeout = -1,
34 | panUpdateInterval = -1;
35 |
36 | var currentOptions = null;
37 |
38 | // Check for transform support so that we can fallback otherwise
39 | var supportsTransforms = 'WebkitTransform' in document.body.style ||
40 | 'MozTransform' in document.body.style ||
41 | 'msTransform' in document.body.style ||
42 | 'OTransform' in document.body.style ||
43 | 'transform' in document.body.style;
44 |
45 | if( supportsTransforms ) {
46 | // The easing that will be applied when we zoom in/out
47 | document.body.style.transition = 'transform 0.8s ease';
48 | document.body.style.OTransition = '-o-transform 0.8s ease';
49 | document.body.style.msTransition = '-ms-transform 0.8s ease';
50 | document.body.style.MozTransition = '-moz-transform 0.8s ease';
51 | document.body.style.WebkitTransition = '-webkit-transform 0.8s ease';
52 | }
53 |
54 | // Zoom out if the user hits escape
55 | document.addEventListener( 'keyup', function( event ) {
56 | if( level !== 1 && event.keyCode === 27 ) {
57 | zoom.out();
58 | }
59 | }, false );
60 |
61 | // Monitor mouse movement for panning
62 | document.addEventListener( 'mousemove', function( event ) {
63 | if( level !== 1 ) {
64 | mouseX = event.clientX;
65 | mouseY = event.clientY;
66 | }
67 | }, false );
68 |
69 | /**
70 | * Applies the CSS required to zoom in, prioritizes use of CSS3
71 | * transforms but falls back on zoom for IE.
72 | *
73 | * @param {Number} pageOffsetX
74 | * @param {Number} pageOffsetY
75 | * @param {Number} elementOffsetX
76 | * @param {Number} elementOffsetY
77 | * @param {Number} scale
78 | */
79 | function magnify( pageOffsetX, pageOffsetY, elementOffsetX, elementOffsetY, scale ) {
80 |
81 | if( supportsTransforms ) {
82 | var origin = pageOffsetX +'px '+ pageOffsetY +'px',
83 | transform = 'translate('+ -elementOffsetX +'px,'+ -elementOffsetY +'px) scale('+ scale +')';
84 |
85 | document.body.style.transformOrigin = origin;
86 | document.body.style.OTransformOrigin = origin;
87 | document.body.style.msTransformOrigin = origin;
88 | document.body.style.MozTransformOrigin = origin;
89 | document.body.style.WebkitTransformOrigin = origin;
90 |
91 | document.body.style.transform = transform;
92 | document.body.style.OTransform = transform;
93 | document.body.style.msTransform = transform;
94 | document.body.style.MozTransform = transform;
95 | document.body.style.WebkitTransform = transform;
96 | }
97 | else {
98 | // Reset all values
99 | if( scale === 1 ) {
100 | document.body.style.position = '';
101 | document.body.style.left = '';
102 | document.body.style.top = '';
103 | document.body.style.width = '';
104 | document.body.style.height = '';
105 | document.body.style.zoom = '';
106 | }
107 | // Apply scale
108 | else {
109 | document.body.style.position = 'relative';
110 | document.body.style.left = ( - ( pageOffsetX + elementOffsetX ) / scale ) + 'px';
111 | document.body.style.top = ( - ( pageOffsetY + elementOffsetY ) / scale ) + 'px';
112 | document.body.style.width = ( scale * 100 ) + '%';
113 | document.body.style.height = ( scale * 100 ) + '%';
114 | document.body.style.zoom = scale;
115 | }
116 | }
117 |
118 | level = scale;
119 |
120 | if( level !== 1 && document.documentElement.classList ) {
121 | document.documentElement.classList.add( 'zoomed' );
122 | }
123 | else {
124 | document.documentElement.classList.remove( 'zoomed' );
125 | }
126 | }
127 |
128 | /**
129 | * Pan the document when the mosue cursor approaches the edges
130 | * of the window.
131 | */
132 | function pan() {
133 | var range = 0.12,
134 | rangeX = window.innerWidth * range,
135 | rangeY = window.innerHeight * range,
136 | scrollOffset = getScrollOffset();
137 |
138 | // Up
139 | if( mouseY < rangeY ) {
140 | window.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) );
141 | }
142 | // Down
143 | else if( mouseY > window.innerHeight - rangeY ) {
144 | window.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) );
145 | }
146 |
147 | // Left
148 | if( mouseX < rangeX ) {
149 | window.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y );
150 | }
151 | // Right
152 | else if( mouseX > window.innerWidth - rangeX ) {
153 | window.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y );
154 | }
155 | }
156 |
157 | function getScrollOffset() {
158 | return {
159 | x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset,
160 | y: window.scrollY !== undefined ? window.scrollY : window.pageXYffset
161 | }
162 | }
163 |
164 | return {
165 | /**
166 | * Zooms in on either a rectangle or HTML element.
167 | *
168 | * @param {Object} options
169 | * - element: HTML element to zoom in on
170 | * OR
171 | * - x/y: coordinates in non-transformed space to zoom in on
172 | * - width/height: the portion of the screen to zoom in on
173 | * - scale: can be used instead of width/height to explicitly set scale
174 | */
175 | to: function( options ) {
176 | // Due to an implementation limitation we can't zoom in
177 | // to another element without zooming out first
178 | if( level !== 1 ) {
179 | zoom.out();
180 | }
181 | else {
182 | options.x = options.x || 0;
183 | options.y = options.y || 0;
184 |
185 | // If an element is set, that takes precedence
186 | if( !!options.element ) {
187 | // Space around the zoomed in element to leave on screen
188 | var padding = 20;
189 |
190 | options.width = options.element.getBoundingClientRect().width + ( padding * 2 );
191 | options.height = options.element.getBoundingClientRect().height + ( padding * 2 );
192 | options.x = options.element.getBoundingClientRect().left - padding;
193 | options.y = options.element.getBoundingClientRect().top - padding;
194 | }
195 |
196 | // If width/height values are set, calculate scale from those values
197 | if( options.width !== undefined && options.height !== undefined ) {
198 | options.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 );
199 | }
200 |
201 | if( options.scale > 1 ) {
202 | options.x *= options.scale;
203 | options.y *= options.scale;
204 |
205 | var scrollOffset = getScrollOffset();
206 |
207 | if( options.element ) {
208 | scrollOffset.x -= ( window.innerWidth - ( options.width * options.scale ) ) / 2;
209 | }
210 |
211 | magnify( scrollOffset.x, scrollOffset.y, options.x, options.y, options.scale );
212 |
213 | if( options.pan !== false ) {
214 |
215 | // Wait with engaging panning as it may conflict with the
216 | // zoom transition
217 | panEngageTimeout = setTimeout( function() {
218 | panUpdateInterval = setInterval( pan, 1000 / 60 );
219 | }, 800 );
220 |
221 | }
222 | }
223 |
224 | currentOptions = options;
225 | }
226 | },
227 |
228 | /**
229 | * Resets the document zoom state to its default.
230 | */
231 | out: function() {
232 | clearTimeout( panEngageTimeout );
233 | clearInterval( panUpdateInterval );
234 |
235 | var scrollOffset = getScrollOffset();
236 |
237 | if( currentOptions && currentOptions.element ) {
238 | scrollOffset.x -= ( window.innerWidth - ( currentOptions.width * currentOptions.scale ) ) / 2;
239 | }
240 |
241 | magnify( scrollOffset.x, scrollOffset.y, 0, 0, 1 );
242 |
243 | level = 1;
244 | },
245 |
246 | // Alias
247 | magnify: function( options ) { this.to( options ) },
248 | reset: function() { this.out() },
249 |
250 | zoomLevel: function() {
251 | return level;
252 | }
253 | }
254 |
255 | })();
256 |
257 |
--------------------------------------------------------------------------------
/plugin/markdown/marked.js:
--------------------------------------------------------------------------------
1 | /**
2 | * marked - a markdown parser
3 | * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed)
4 | * https://github.com/chjj/marked
5 | */
6 |
7 | (function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){3,} *\n*/,blockquote:/^( *>[^\n]+(\n[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
8 | text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr",/\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b";block.html=replace(block.html)("comment",/\x3c!--[\s\S]*?--\x3e/)("closed",
9 | /<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1",
10 | "\\2")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm)if(this.options.tables)this.rules=block.tables;else this.rules=block.gfm}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};
11 | Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1)this.tokens.push({type:"space"})}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,
12 | "");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,
13 | "").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);
15 | bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+
16 | 1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item[item.length-1]==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script",text:cap[0]});continue}if(top&&
17 | (cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^\x3c!--[\s\S]*?--\x3e|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
20 | code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
21 | em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;
22 | if(!this.links)throw new Error("Tokens array requires a `links` property.");if(this.options.gfm)if(this.options.breaks)this.rules=inline.breaks;else this.rules=inline.gfm;else if(this.options.pedantic)this.rules=inline.pedantic}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);
23 | out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1][6]===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=''+text+"";continue}if(cap=this.rules.url.exec(src)){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=''+text+"";continue}if(cap=this.rules.tag.exec(src)){src=src.substring(cap[0].length);
24 | out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);out+=this.outputLink(cap,{href:cap[2],title:cap[3]});continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0][0];src=cap[0].substring(1)+src;continue}out+=this.outputLink(cap,link);continue}if(cap=this.rules.strong.exec(src)){src=
25 | src.substring(cap[0].length);out+=""+this.output(cap[2]||cap[1])+"";continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=""+this.output(cap[2]||cap[1])+"";continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=""+escape(cap[2],true)+"";continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+="
";continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=""+
26 | this.output(cap[1])+"";continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(cap[0]);continue}if(src)throw new Error("Infinite loop on byte: "+src.charCodeAt(0));}return out};InlineLexer.prototype.outputLink=function(cap,link){if(cap[0][0]!=="!")return'"+this.output(cap[1])+"";else return'
"};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"\u2014").replace(/'([^']*)'/g,"\u2018$1\u2019").replace(/"([^"]*)"/g,"\u201c$1\u201d").replace(/\.{3}/g,"\u2026")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i0.5)ch="x"+ch.toString(16);out+=""+ch+";"}return out};function Parser(options){this.tokens=[];this.token=null;
28 | this.options=options||marked.defaults}Parser.parse=function(src,options){var parser=new Parser(options);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options);this.tokens=src.reverse();var out="";while(this.next())out+=this.tok();return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;
29 | while(this.peek().type==="text")body+="\n"+this.next().text;return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case "space":return"";case "hr":return"
\n";case "heading":return""+this.inline.output(this.token.text)+"\n";case "code":if(this.options.highlight){var code=this.options.highlight(this.token.text,this.token.lang);if(code!=null&&code!==this.token.text){this.token.escaped=true;this.token.text=code}}if(!this.token.escaped)this.token.text=
30 | escape(this.token.text,true);return""+this.token.text+"
\n";case "table":var body="",heading,i,row,cell,j;body+="\n\n";for(i=0;i'+heading+"\n":"| "+heading+" | \n"}body+="
\n\n";body+="\n";for(i=0;i\n";for(j=0;j'+cell+"\n":""+cell+" | \n"}body+="\n"}body+="\n";return"\n";case "blockquote_start":var body="";while(this.next().type!=="blockquote_end")body+=this.tok();return"\n"+body+"
\n";case "list_start":var type=this.token.ordered?"ol":"ul",body="";while(this.next().type!=="list_end")body+=
32 | this.tok();return"<"+type+">\n"+body+""+type+">\n";case "list_item_start":var body="";while(this.next().type!=="list_item_end")body+=this.token.type==="text"?this.parseText():this.tok();return""+body+"\n";case "loose_item_start":var body="";while(this.next().type!=="list_item_end")body+=this.tok();return""+body+"\n";case "html":return!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;case "paragraph":return""+this.inline.output(this.token.text)+
33 | "
\n";case "text":return""+this.parseText()+"
\n"}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=
34 | 1,target,key;for(;iAn error occured:"+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,smartLists:false,silent:false,highlight:null,langPrefix:""};marked.Parser=Parser;marked.parser=Parser.parse;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;
37 | marked.parse=marked;if(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)}());
38 |
--------------------------------------------------------------------------------
/js/reveal.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * reveal.js 2.4.0 (2013-04-29, 22:06)
3 | * http://lab.hakim.se/reveal-js
4 | * MIT licensed
5 | *
6 | * Copyright (C) 2013 Hakim El Hattab, http://hakim.se
7 | */
8 | var Reveal=function(){"use strict";function e(e){return Mt||kt?(window.addEventListener("load",h,!1),c(bt,e),n(),r(),void 0):(document.body.setAttribute("class","no-transforms"),void 0)}function t(){if(Tt.theme=document.querySelector("#theme"),Tt.wrapper=document.querySelector(".reveal"),Tt.slides=document.querySelector(".reveal .slides"),!Tt.wrapper.querySelector(".progress")){var e=document.createElement("div");e.classList.add("progress"),e.innerHTML="",Tt.wrapper.appendChild(e)}if(!Tt.wrapper.querySelector(".controls")){var t=document.createElement("aside");t.classList.add("controls"),t.innerHTML='',Tt.wrapper.appendChild(t)}if(!Tt.wrapper.querySelector(".state-background")){var n=document.createElement("div");n.classList.add("state-background"),Tt.wrapper.appendChild(n)}if(!Tt.wrapper.querySelector(".pause-overlay")){var r=document.createElement("div");r.classList.add("pause-overlay"),Tt.wrapper.appendChild(r)}Tt.progress=document.querySelector(".reveal .progress"),Tt.progressbar=document.querySelector(".reveal .progress span"),bt.controls&&(Tt.controls=document.querySelector(".reveal .controls"),Tt.controlsLeft=l(document.querySelectorAll(".navigate-left")),Tt.controlsRight=l(document.querySelectorAll(".navigate-right")),Tt.controlsUp=l(document.querySelectorAll(".navigate-up")),Tt.controlsDown=l(document.querySelectorAll(".navigate-down")),Tt.controlsPrev=l(document.querySelectorAll(".navigate-prev")),Tt.controlsNext=l(document.querySelectorAll(".navigate-next")))}function n(){/iphone|ipod|android/gi.test(navigator.userAgent)&&!/crios/gi.test(navigator.userAgent)&&(window.addEventListener("load",u,!1),window.addEventListener("orientationchange",u,!1))}function r(){function e(){n.length&&head.js.apply(null,n),o()}for(var t=[],n=[],r=0,a=bt.dependencies.length;a>r;r++){var s=bt.dependencies[r];(!s.condition||s.condition())&&(s.async?n.push(s.src):t.push(s.src),"function"==typeof s.callback&&head.ready(s.src.match(/([\w\d_\-]*)\.?js$|[^\\\/]*$/i)[0],s.callback))}t.length?(head.ready(e),head.js.apply(null,t)):e()}function o(){t(),a(),H(),setTimeout(function(){f("ready",{indexh:St,indexv:At,currentSlide:ht})},1)}function a(e){if(Tt.wrapper.classList.remove(bt.transition),"object"==typeof e&&c(bt,e),kt===!1&&(bt.transition="linear"),Tt.wrapper.classList.add(bt.transition),Tt.wrapper.setAttribute("data-transition-speed",bt.transitionSpeed),Tt.controls&&(Tt.controls.style.display=bt.controls&&Tt.controls?"block":"none"),Tt.progress&&(Tt.progress.style.display=bt.progress&&Tt.progress?"block":"none"),bt.rtl?Tt.wrapper.classList.add("rtl"):Tt.wrapper.classList.remove("rtl"),bt.center?Tt.wrapper.classList.add("center"):Tt.wrapper.classList.remove("center"),bt.mouseWheel?(document.addEventListener("DOMMouseScroll",ot,!1),document.addEventListener("mousewheel",ot,!1)):(document.removeEventListener("DOMMouseScroll",ot,!1),document.removeEventListener("mousewheel",ot,!1)),bt.rollingLinks?v():p(),bt.theme&&Tt.theme){var t=Tt.theme.getAttribute("href"),n=/[^\/]*?(?=\.css)/,r=t.match(n)[0];bt.theme!==r&&(t=t.replace(n,bt.theme),Tt.theme.setAttribute("href",t))}P()}function s(){Yt=!0,window.addEventListener("hashchange",ft,!1),window.addEventListener("resize",vt,!1),bt.touch&&(Tt.wrapper.addEventListener("touchstart",G,!1),Tt.wrapper.addEventListener("touchmove",J,!1),Tt.wrapper.addEventListener("touchend",et,!1),window.navigator.msPointerEnabled&&(Tt.wrapper.addEventListener("MSPointerDown",tt,!1),Tt.wrapper.addEventListener("MSPointerMove",nt,!1),Tt.wrapper.addEventListener("MSPointerUp",rt,!1))),bt.keyboard&&document.addEventListener("keydown",B,!1),bt.progress&&Tt.progress&&Tt.progress.addEventListener("click",at,!1),bt.controls&&Tt.controls&&["touchstart","click"].forEach(function(e){Tt.controlsLeft.forEach(function(t){t.addEventListener(e,st,!1)}),Tt.controlsRight.forEach(function(t){t.addEventListener(e,it,!1)}),Tt.controlsUp.forEach(function(t){t.addEventListener(e,ct,!1)}),Tt.controlsDown.forEach(function(t){t.addEventListener(e,lt,!1)}),Tt.controlsPrev.forEach(function(t){t.addEventListener(e,dt,!1)}),Tt.controlsNext.forEach(function(t){t.addEventListener(e,ut,!1)})})}function i(){Yt=!1,document.removeEventListener("keydown",B,!1),window.removeEventListener("hashchange",ft,!1),window.removeEventListener("resize",vt,!1),Tt.wrapper.removeEventListener("touchstart",G,!1),Tt.wrapper.removeEventListener("touchmove",J,!1),Tt.wrapper.removeEventListener("touchend",et,!1),window.navigator.msPointerEnabled&&(Tt.wrapper.removeEventListener("MSPointerDown",tt,!1),Tt.wrapper.removeEventListener("MSPointerMove",nt,!1),Tt.wrapper.removeEventListener("MSPointerUp",rt,!1)),bt.progress&&Tt.progress&&Tt.progress.removeEventListener("click",at,!1),bt.controls&&Tt.controls&&["touchstart","click"].forEach(function(e){Tt.controlsLeft.forEach(function(t){t.removeEventListener(e,st,!1)}),Tt.controlsRight.forEach(function(t){t.removeEventListener(e,it,!1)}),Tt.controlsUp.forEach(function(t){t.removeEventListener(e,ct,!1)}),Tt.controlsDown.forEach(function(t){t.removeEventListener(e,lt,!1)}),Tt.controlsPrev.forEach(function(t){t.removeEventListener(e,dt,!1)}),Tt.controlsNext.forEach(function(t){t.removeEventListener(e,ut,!1)})})}function c(e,t){for(var n in t)e[n]=t[n]}function l(e){return Array.prototype.slice.call(e)}function d(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}function u(){0===window.orientation?(document.documentElement.style.overflow="scroll",document.body.style.height="120%"):(document.documentElement.style.overflow="",document.body.style.height="100%"),setTimeout(function(){window.scrollTo(0,1)},10)}function f(e,t){var n=document.createEvent("HTMLEvents",1,2);n.initEvent(e,!0,!0),c(n,t),Tt.wrapper.dispatchEvent(n)}function v(){if(kt&&!("msPerspective"in document.body.style))for(var e=document.querySelectorAll(gt+" a:not(.image)"),t=0,n=e.length;n>t;t++){var r=e[t];if(!(!r.textContent||r.querySelector("*")||r.className&&r.classList.contains(r,"roll"))){var o=document.createElement("span");o.setAttribute("data-title",r.text),o.innerHTML=r.innerHTML,r.classList.add("roll"),r.innerHTML="",r.appendChild(o)}}}function p(){for(var e=document.querySelectorAll(gt+" a.roll"),t=0,n=e.length;n>t;t++){var r=e[t],o=r.querySelector("span");o&&(r.classList.remove("roll"),r.innerHTML=o.innerHTML)}}function m(e){var t=l(e);return t.forEach(function(e,t){e.hasAttribute("data-fragment-index")||e.setAttribute("data-fragment-index",t)}),t.sort(function(e,t){return e.getAttribute("data-fragment-index")-t.getAttribute("data-fragment-index")}),t}function h(){if(Tt.wrapper){var e=Tt.wrapper.offsetWidth,t=Tt.wrapper.offsetHeight;e-=t*bt.margin,t-=t*bt.margin;var n=bt.width,r=bt.height;if("string"==typeof n&&/%$/.test(n)&&(n=parseInt(n,10)/100*e),"string"==typeof r&&/%$/.test(r)&&(r=parseInt(r,10)/100*t),Tt.slides.style.width=n+"px",Tt.slides.style.height=r+"px",xt=Math.min(e/n,t/r),xt=Math.max(xt,bt.minScale),xt=Math.min(xt,bt.maxScale),void 0===Tt.slides.style.zoom||navigator.userAgent.match(/(iphone|ipod|ipad|android)/gi)){var o="translate(-50%, -50%) scale("+xt+") translate(50%, 50%)";Tt.slides.style.WebkitTransform=o,Tt.slides.style.MozTransform=o,Tt.slides.style.msTransform=o,Tt.slides.style.OTransform=o,Tt.slides.style.transform=o}else Tt.slides.style.zoom=xt;for(var a=l(document.querySelectorAll(gt)),s=0,i=a.length;i>s;s++){var c=a[s];"none"!==c.style.display&&(c.style.top=bt.center?c.classList.contains("stack")?0:Math.max(-(c.offsetHeight/2)-20,-r/2)+"px":"")}N()}}function g(e,t){"object"==typeof e&&"function"==typeof e.setAttribute&&e.setAttribute("data-previous-indexv",t||0)}function y(e){return"object"==typeof e&&"function"==typeof e.setAttribute&&e.classList.contains("stack")?parseInt(e.getAttribute("data-previous-indexv")||0,10):0}function w(){if(bt.overview){_();var e=Tt.wrapper.classList.contains("overview");Tt.wrapper.classList.add("overview"),Tt.wrapper.classList.remove("exit-overview"),clearTimeout(Ct),clearTimeout(Ot),Ct=setTimeout(function(){for(var t=document.querySelectorAll(yt),n=0,r=t.length;r>n;n++){var o=t[n],a=bt.rtl?-105:105,s="translateZ(-2500px) translate("+(n-St)*a+"%, 0%)";if(o.setAttribute("data-index-h",n),o.style.display="block",o.style.WebkitTransform=s,o.style.MozTransform=s,o.style.msTransform=s,o.style.OTransform=s,o.style.transform=s,o.classList.contains("stack"))for(var i=o.querySelectorAll("section"),c=0,l=i.length;l>c;c++){var d=n===St?At:y(o),u=i[c],v="translate(0%, "+105*(c-d)+"%)";u.setAttribute("data-index-h",n),u.setAttribute("data-index-v",c),u.style.display="block",u.style.WebkitTransform=v,u.style.MozTransform=v,u.style.msTransform=v,u.style.OTransform=v,u.style.transform=v,u.addEventListener("click",pt,!0)}else o.addEventListener("click",pt,!0)}h(),e||f("overviewshown",{indexh:St,indexv:At,currentSlide:ht})},10)}}function L(){if(bt.overview){clearTimeout(Ct),clearTimeout(Ot),Tt.wrapper.classList.remove("overview"),Tt.wrapper.classList.add("exit-overview"),Ot=setTimeout(function(){Tt.wrapper.classList.remove("exit-overview")},10);for(var e=l(document.querySelectorAll(gt)),t=0,n=e.length;n>t;t++){var r=e[t];r.style.display="",r.style.WebkitTransform="",r.style.MozTransform="",r.style.msTransform="",r.style.OTransform="",r.style.transform="",r.removeEventListener("click",pt,!0)}M(St,At),F(),f("overviewhidden",{indexh:St,indexv:At,currentSlide:ht})}}function b(e){"boolean"==typeof e?e?w():L():E()?L():w()}function E(){return Tt.wrapper.classList.contains("overview")}function S(e){return e=e?e:ht,e&&!!e.parentNode.nodeName.match(/section/i)}function A(){var e=document.body,t=e.requestFullScreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullScreen;t&&t.apply(e)}function q(){var e=Tt.wrapper.classList.contains("paused");_(),Tt.wrapper.classList.add("paused"),e===!1&&f("paused")}function x(){var e=Tt.wrapper.classList.contains("paused");Tt.wrapper.classList.remove("paused"),F(),e&&f("resumed")}function T(){k()?x():q()}function k(){return Tt.wrapper.classList.contains("paused")}function M(e,t,n,r){mt=ht;var o=document.querySelectorAll(yt);void 0===t&&(t=y(o[e])),mt&&mt.parentNode&&mt.parentNode.classList.contains("stack")&&g(mt.parentNode,At);var a=qt.concat();qt.length=0;var s=St,i=At;St=D(yt,void 0===e?St:e),At=D(wt,void 0===t?At:t),h();e:for(var c=0,d=qt.length;d>c;c++){for(var u=0;a.length>u;u++)if(a[u]===qt[c]){a.splice(u,1);continue e}document.documentElement.classList.add(qt[c]),f(qt[c])}for(;a.length;)document.documentElement.classList.remove(a.pop());E()&&w(),I(1500);var v=o[St],p=v.querySelectorAll("section");if(ht=p[At]||v,n!==void 0){var L=m(ht.querySelectorAll(".fragment"));l(L).forEach(function(e,t){n>t?e.classList.add("visible"):e.classList.remove("visible")})}St!==s||At!==i?f("slidechanged",{indexh:St,indexv:At,previousSlide:mt,currentSlide:ht,origin:r}):mt=null,mt&&(mt.classList.remove("present"),document.querySelector(Lt).classList.contains("present")&&setTimeout(function(){var e,t=l(document.querySelectorAll(yt+".stack"));for(e in t)t[e]&&g(t[e],0)},0)),X(mt),R(ht),C(),N()}function P(){i(),s(),h(),Et=bt.autoSlide,F(),C(),N()}function D(e,t){var n=l(document.querySelectorAll(e)),r=n.length;if(r){bt.loop&&(t%=r,0>t&&(t=r+t)),t=Math.max(Math.min(t,r-1),0);for(var o=0;r>o;o++){var a=n[o];if(E()===!1){var s=Math.abs((t-o)%(r-3))||0;a.style.display=s>3?"none":"block"}var i=bt.rtl&&!S(a);a.classList.remove("past"),a.classList.remove("present"),a.classList.remove("future"),t>o?a.classList.add(i?"future":"past"):o>t&&a.classList.add(i?"past":"future"),a.querySelector("section")&&a.classList.add("stack")}n[t].classList.add("present");var c=n[t].getAttribute("data-state");c&&(qt=qt.concat(c.split(" ")));var d=n[t].getAttribute("data-autoslide");Et=d?parseInt(d,10):bt.autoSlide}else t=0;return t}function N(){if(bt.progress&&Tt.progress){var e=l(document.querySelectorAll(yt)),t=document.querySelectorAll(gt+":not(.stack)").length,n=0;e:for(var r=0;e.length>r;r++){for(var o=e[r],a=l(o.querySelectorAll("section")),s=0;a.length>s;s++){if(a[s].classList.contains("present"))break e;n++}if(o.classList.contains("present"))break;o.classList.contains("stack")===!1&&n++}Tt.progressbar.style.width=n/(t-1)*window.innerWidth+"px"}}function C(){if(bt.controls&&Tt.controls){var e=O(),t=Y();Tt.controlsLeft.concat(Tt.controlsRight).concat(Tt.controlsUp).concat(Tt.controlsDown).concat(Tt.controlsPrev).concat(Tt.controlsNext).forEach(function(e){e.classList.remove("enabled"),e.classList.remove("fragmented")}),e.left&&Tt.controlsLeft.forEach(function(e){e.classList.add("enabled")}),e.right&&Tt.controlsRight.forEach(function(e){e.classList.add("enabled")}),e.up&&Tt.controlsUp.forEach(function(e){e.classList.add("enabled")}),e.down&&Tt.controlsDown.forEach(function(e){e.classList.add("enabled")}),(e.left||e.up)&&Tt.controlsPrev.forEach(function(e){e.classList.add("enabled")}),(e.right||e.down)&&Tt.controlsNext.forEach(function(e){e.classList.add("enabled")}),ht&&(t.prev&&Tt.controlsPrev.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Tt.controlsNext.forEach(function(e){e.classList.add("fragmented","enabled")}),S(ht)?(t.prev&&Tt.controlsUp.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Tt.controlsDown.forEach(function(e){e.classList.add("fragmented","enabled")})):(t.prev&&Tt.controlsLeft.forEach(function(e){e.classList.add("fragmented","enabled")}),t.next&&Tt.controlsRight.forEach(function(e){e.classList.add("fragmented","enabled")})))}}function O(){var e=document.querySelectorAll(yt),t=document.querySelectorAll(wt),n={left:St>0||bt.loop,right:e.length-1>St||bt.loop,up:At>0,down:t.length-1>At};if(bt.rtl){var r=n.left;n.left=n.right,n.right=r}return n}function Y(){if(ht&&bt.fragments){var e=ht.querySelectorAll(".fragment"),t=ht.querySelectorAll(".fragment:not(.visible)");return{prev:e.length-t.length>0,next:!!t.length}}return{prev:!1,next:!1}}function R(e){e&&(l(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-autoplay")&&e.play()}),l(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){e.hasAttribute("data-autoplay")&&e.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}',"*")}))}function X(e){e&&(l(e.querySelectorAll("video, audio")).forEach(function(e){e.hasAttribute("data-ignore")||e.pause()}),l(e.querySelectorAll('iframe[src*="youtube.com/embed/"]')).forEach(function(e){e.hasAttribute("data-ignore")||"function"!=typeof e.contentWindow.postMessage||e.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*")}))}function H(){var e=window.location.hash,t=e.slice(2).split("/"),n=e.replace(/#|\//gi,"");if(isNaN(parseInt(t[0],10))&&n.length){var r=document.querySelector("#"+n);if(r){var o=Reveal.getIndices(r);M(o.h,o.v)}else M(St,At)}else{var a=parseInt(t[0],10)||0,s=parseInt(t[1],10)||0;M(a,s)}}function I(e){if(bt.history)if(clearTimeout(Nt),"number"==typeof e)Nt=setTimeout(I,e);else{var t="/";ht&&"string"==typeof ht.getAttribute("id")?t="/"+ht.getAttribute("id"):((St>0||At>0)&&(t+=St),At>0&&(t+="/"+At)),window.location.hash=t}}function W(e){var t,n=St,r=At;if(e){var o=S(e),a=o?e.parentNode:e,s=l(document.querySelectorAll(yt));n=Math.max(s.indexOf(a),0),o&&(r=Math.max(l(e.parentNode.querySelectorAll("section")).indexOf(e),0))}if(!e&&ht){var i=ht.querySelectorAll(".fragment.visible");i.length&&(t=i.length)}return{h:n,v:r,f:t}}function U(){if(ht&&bt.fragments){var e=m(ht.querySelectorAll(".fragment:not(.visible)"));if(e.length)return e[0].classList.add("visible"),f("fragmentshown",{fragment:e[0]}),C(),!0}return!1}function z(){if(ht&&bt.fragments){var e=m(ht.querySelectorAll(".fragment.visible"));if(e.length)return e[e.length-1].classList.remove("visible"),f("fragmenthidden",{fragment:e[e.length-1]}),C(),!0}return!1}function F(){clearTimeout(Dt),!Et||k()||E()||(Dt=setTimeout(Q,Et))}function _(){clearTimeout(Dt)}function j(){bt.rtl?(E()||U()===!1)&&O().left&&M(St+1):(E()||z()===!1)&&O().left&&M(St-1)}function K(){bt.rtl?(E()||z()===!1)&&O().right&&M(St-1):(E()||U()===!1)&&O().right&&M(St+1)}function $(){(E()||z()===!1)&&O().up&&M(St,At-1)}function V(){(E()||U()===!1)&&O().down&&M(St,At+1)}function Z(){if(z()===!1)if(O().up)$();else{var e=document.querySelector(yt+".past:nth-child("+St+")");e&&(At=e.querySelectorAll("section").length+1||void 0,St--,M(St,At))}}function Q(){U()===!1&&(O().down?V():K()),F()}function B(e){document.activeElement;var t=!(!document.activeElement||!document.activeElement.type&&!document.activeElement.href&&"inherit"===document.activeElement.contentEditable);if(!(t||e.shiftKey&&32!==e.keyCode||e.altKey||e.ctrlKey||e.metaKey)){var n=!0;if(k()&&-1===[66,190,191].indexOf(e.keyCode))return!1;switch(e.keyCode){case 80:case 33:Z();break;case 78:case 34:Q();break;case 72:case 37:j();break;case 76:case 39:K();break;case 75:case 38:$();break;case 74:case 40:V();break;case 36:M(0);break;case 35:M(Number.MAX_VALUE);break;case 32:E()?L():e.shiftKey?Z():Q();break;case 13:E()?L():n=!1;break;case 66:case 190:case 191:T();break;case 70:A();break;default:n=!1}n?e.preventDefault():27===e.keyCode&&kt&&(b(),e.preventDefault()),F()}}function G(e){Rt.startX=e.touches[0].clientX,Rt.startY=e.touches[0].clientY,Rt.startCount=e.touches.length,2===e.touches.length&&bt.overview&&(Rt.startSpan=d({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:Rt.startX,y:Rt.startY}))}function J(e){if(Rt.handled)navigator.userAgent.match(/android/gi)&&e.preventDefault();else{var t=e.touches[0].clientX,n=e.touches[0].clientY;if(2===e.touches.length&&2===Rt.startCount&&bt.overview){var r=d({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:Rt.startX,y:Rt.startY});Math.abs(Rt.startSpan-r)>Rt.threshold&&(Rt.handled=!0,Rt.startSpan>r?w():L()),e.preventDefault()}else if(1===e.touches.length&&2!==Rt.startCount){var o=t-Rt.startX,a=n-Rt.startY;o>Rt.threshold&&Math.abs(o)>Math.abs(a)?(Rt.handled=!0,j()):-Rt.threshold>o&&Math.abs(o)>Math.abs(a)?(Rt.handled=!0,K()):a>Rt.threshold?(Rt.handled=!0,$()):-Rt.threshold>a&&(Rt.handled=!0,V()),e.preventDefault()}}}function et(){Rt.handled=!1}function tt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],G(e))}function nt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],J(e))}function rt(e){e.pointerType===e.MSPOINTER_TYPE_TOUCH&&(e.touches=[{clientX:e.clientX,clientY:e.clientY}],et(e))}function ot(e){clearTimeout(Pt),Pt=setTimeout(function(){var t=e.detail||-e.wheelDelta;t>0?Q():Z()},100)}function at(e){e.preventDefault();var t=l(document.querySelectorAll(yt)).length,n=Math.floor(e.clientX/Tt.wrapper.offsetWidth*t);M(n)}function st(e){e.preventDefault(),j()}function it(e){e.preventDefault(),K()}function ct(e){e.preventDefault(),$()}function lt(e){e.preventDefault(),V()}function dt(e){e.preventDefault(),Z()}function ut(e){e.preventDefault(),Q()}function ft(){H()}function vt(){h()}function pt(e){if(Yt&&E()){e.preventDefault();for(var t=e.target;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains("disabled")&&(L(),t.nodeName.match(/section/gi))){var n=parseInt(t.getAttribute("data-index-h"),10),r=parseInt(t.getAttribute("data-index-v"),10);M(n,r)}}}var mt,ht,gt=".reveal .slides section",yt=".reveal .slides>section",wt=".reveal .slides>section.present>section",Lt=".reveal .slides>section:first-child",bt={width:960,height:700,margin:.1,minScale:.2,maxScale:1,controls:!0,progress:!0,history:!1,keyboard:!0,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,fragments:!0,autoSlide:0,mouseWheel:!1,rollingLinks:!0,theme:null,transition:"default",transitionSpeed:"default",dependencies:[]},Et=0,St=0,At=0,qt=[],xt=1,Tt={},kt="WebkitPerspective"in document.body.style||"MozPerspective"in document.body.style||"msPerspective"in document.body.style||"OPerspective"in document.body.style||"perspective"in document.body.style,Mt="WebkitTransform"in document.body.style||"MozTransform"in document.body.style||"msTransform"in document.body.style||"OTransform"in document.body.style||"transform"in document.body.style,Pt=0,Dt=0,Nt=0,Ct=0,Ot=0,Yt=!1,Rt={startX:0,startY:0,startSpan:0,startCount:0,handled:!1,threshold:80};return{initialize:e,configure:a,sync:P,slide:M,left:j,right:K,up:$,down:V,prev:Z,next:Q,prevFragment:z,nextFragment:U,navigateTo:M,navigateLeft:j,navigateRight:K,navigateUp:$,navigateDown:V,navigatePrev:Z,navigateNext:Q,layout:h,availableRoutes:O,availableFragments:Y,toggleOverview:b,togglePause:T,isOverview:E,isPaused:k,addEventListeners:s,removeEventListeners:i,getIndices:W,getSlide:function(e,t){var n=document.querySelectorAll(yt)[e],r=n&&n.querySelectorAll("section");return t!==void 0?r?r[t]:void 0:n},getPreviousSlide:function(){return mt},getCurrentSlide:function(){return ht},getScale:function(){return xt},getConfig:function(){return bt},getQueryHash:function(){var e={};return location.search.replace(/[A-Z0-9]+?=(\w*)/gi,function(t){e[t.split("=").shift()]=t.split("=").pop()}),e},isFirstSlide:function(){return null==document.querySelector(gt+".past")?!0:!1},isLastSlide:function(){return ht&&ht.classList.contains(".stack")?null==ht.querySelector(gt+".future")?!0:!1:null==document.querySelector(gt+".future")?!0:!1},addEventListener:function(e,t,n){"addEventListener"in window&&(Tt.wrapper||document.querySelector(".reveal")).addEventListener(e,t,n)},removeEventListener:function(e,t,n){"addEventListener"in window&&(Tt.wrapper||document.querySelector(".reveal")).removeEventListener(e,t,n)}}}();
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | JavaScript Next - ES6 Harmony
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
27 |
28 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
47 |
48 |
55 |
56 |
57 | JavaScript?
58 |
59 | Language is evolving. Fast!
60 | Iterations,
61 | Inline Functions,
62 | Blah blah...
63 |
64 |
65 |
66 |
67 | ECMAScript 6
68 |
69 | Get ready for the future. Now.
70 |
71 |
72 |
73 |
74 |
75 | Default Parameters
76 |
77 | Define your parameter defaults in the function signature itself.
78 |
79 |
80 | No more doing this:
81 |
82 | if (!myMissingParameter)
83 | myMissingParameter = 0;
84 |
85 |
86 |
87 |
88 | Default Parameters
89 |
90 | Just write your code like this instead:
91 |
92 | function myFunc(a, b = 1, c = 0) {
93 | // ... function body is here
94 | }
95 |
96 |
97 |
98 |
99 | Default Parameters
100 |
101 | Or some expressions as well.
102 |
103 | function myFunc(a = 0, b = a*a, c = b*a) {
104 | return [a, b, c];
105 | }
106 |
107 | // myFunc(5); evaluates to [5, 25, 125]
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | Rest Parameters
116 |
117 | Handle indefinite number of parameters?
118 |
119 |
120 | function myFunc(a, b, ...r) {
121 | console.log(Array.isArray(r));
122 | return r.concat([a, b]);
123 | }
124 |
125 |
126 |
127 |
128 | Rest Parameters
129 |
130 |
131 | > myFunc(1, 2);
132 | true
133 | [1, 2]
134 |
135 |
136 |
137 |
138 | Rest Parameters
139 |
140 |
141 | > myFunc(1, 2, 3, 4, 5);
142 | true
143 | [3, 4, 5, 1, 2]
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 | Spread
152 |
153 | The dual of the rest parameters.
154 |
155 | > var a = [3, 4, 5];
156 | > [1, 2, ...a];
157 | [1, 2, 3, 4, 5]
158 |
159 |
160 |
161 |
162 | Spread
163 |
164 | You can even use it in expressions as well!
165 |
166 | function f(...r) {
167 | return r;
168 | }
169 |
170 | function g(a) {
171 | return f(...a);
172 | }
173 |
174 | We just broke up an array into a individial parameter list.
175 |
176 |
177 |
178 |
179 |
180 |
181 | Sets
182 |
183 | The name says it. Its a set of arbitrary values.
184 |
185 | > var s = new Set([1, true, "three"]);
186 | > s.has(true);
187 | true
188 | > s.has("true");
189 | false
190 | > s.size();
191 | 3
192 |
193 |
194 |
195 |
196 | Sets
197 |
198 | Additional and deletion of elements is also easy.
199 |
200 | > s.delete("three");
201 | true
202 | > s.has("three");
203 | false
204 | > s.add("two");
205 | > s.size()
206 | 3
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 | Maps
215 |
216 | Key/Value pairs the JS way. Your keys aren't converted to strings implicitly.
217 |
218 | var data = {val: "age"};
219 | var m = new Map([[name, "sankha"], [data, 20]]);
220 |
221 | > m.get(name);
222 | "sankha"
223 | > m.get(data);
224 | 20
225 |
226 |
227 |
228 |
229 |
230 |
231 | WeakMap
232 |
233 | Cycles between keys and values can tie up space in a Map.
234 | Weakmap comes to rescue!
235 |
236 | > var objkey1 = {toString: function(){return "objkey1"}};
237 | > var objkey2 = {toString: function(){return "objkey2"}};
238 | > var wm = new WeakMap();
239 | > wm.set(objkey1, objkey2);
240 | > wm.set(objkey2, objkey1);
241 | > wm.get(objkey1);
242 | ({toString:(function (){return "objkey2"})})
243 |
244 |
245 |
246 |
247 |
248 |
249 | Iterators
250 |
251 | for-of loops.
252 |
253 | > for (var v of [1, 2, 3]) {
254 | console.log(v);
255 | }
256 | 1
257 | 2
258 | 3
259 |
260 |
261 |
262 |
263 | Iterators
264 |
265 | Iterables from Sets and Maps.
266 |
267 | > for (var e of set) {
268 | console.log(e);
269 | }
270 |
271 | > for (var [k, v] of map) {
272 | console.log(k, v);
273 | }
274 |
275 |
276 |
277 |
278 | Iterators
279 |
280 | Iterate over keys, values and items.
281 |
282 | > var s = new Set([1, 2, 3]);
283 | > var it = set.keys();
284 | > it = set.values();
285 | > it = set.entries();
286 | > it.next();
287 | [1, 1]
288 | > it.next();
289 | [2, 2]
290 |
291 | Applicable for any Iterables, Array, Sets, Maps.
292 |
293 |
294 |
295 |
296 |
297 | Generators
298 |
299 | Better way to create iterators. Each call to next() executes the function body till the next yield.
300 |
301 | function myGenerator() {
302 | for (var i = 0; i < 3; i++)
303 | yield i * 2;
304 | }
305 |
306 | var g = myGenerator();
307 | g.next(); // returns 0
308 | g.next(); // returns 2
309 | g.next(); // returns 4
310 | g.next(); // throws StopIteration
311 |
312 |
313 |
314 |
315 |
316 |
317 | Proxy
318 |
319 | To enable ES programmers to represent virtualized objects (proxies).
320 |
321 | > var MethodSink = Proxy({}, {
322 | has: function(target, name) { return true; },
323 | get: function(target, name, receiver) {
324 | if (name in Object.prototype) {
325 | return Object.prototype[name];
326 | }
327 | return function(...args) {
328 | return receiver.__noSuchMethod__(name, args);
329 | }
330 | }
331 | });
332 |
333 |
334 |
335 |
336 | Proxy
337 |
338 | Lets create a default __noSuchMethod__.
339 |
340 | > Object.defineProperty(
341 | Object.prototype,
342 | '__noSuchMethod__',
343 | {
344 | configurable: true,
345 | writable: true,
346 | value: function(name, args) {
347 | throw new TypeError(name + " is not a function");
348 | }
349 | }
350 | );
351 |
352 |
353 |
354 |
355 | Proxy
356 |
357 | Lets add MethodSink to the end of the prototype chain.
358 |
359 | > var obj = {
360 | foo: 1 ,
361 | __proto__: MethodSink,
362 | __noSuchMethod__: function(name, args) {
363 | return name;
364 | }
365 | }
366 | > obj.foo
367 | 1
368 | > obj.bar()
369 | "bar"
370 | > obj.toString
371 | function toString() {
372 | [native code]
373 | }
374 |
375 |
376 |
377 |
378 | Proxy
379 |
380 | We can now proxy __noSuchMethod__.
381 |
382 | > obj.bar
383 | (function (...args) {
384 | return receiver.__noSuchMethod__(name, args);
385 | })
386 | > var foo = obj.bar
387 | js> foo()
388 | "bar"
389 |
390 |
391 |
392 |
393 |
394 |
395 | Arrow Functions
396 |
397 | Shorter function expressions.
398 |
399 | > var square = x => x * x;
400 | > square(5)
401 | 25
402 |
403 |
404 |
405 |
406 | Arrow Functions
407 |
408 | Take a look at this peice of code.
409 |
410 | function Person(){
411 | this.age = 0;
412 |
413 | setInterval(function growUp(){
414 | this.age++;
415 | }, 1000);
416 | }
417 |
418 | var p = new Person();
419 |
420 |
421 |
422 |
423 | Arrow Functions
424 |
425 | Arrow functions lexically bind the this value.
426 |
427 | function Person(){
428 | this.age = 0;
429 |
430 | setInterval(() => {
431 | this.age++;
432 | }, 1000);
433 | }
434 |
435 | var p = new Person();
436 |
437 |
438 |
439 |
440 |
441 | Modules
442 |
443 | They are eh, modules?
444 |
445 | module FastMath {
446 | export function sin() { /*...*/ }
447 | export function cos() { /*...*/ }
448 | }
449 |
450 | import {sin, cos} from FastMath;
451 |
452 |
453 |
454 |
455 | In-built methods
456 |
457 |
458 | - String startsWith, endsWith, contains, repeat
459 | - Number isNaN, isFinite, toInteger, isInteger
460 | - Number of Math functions
461 |
462 |
463 |
464 |
465 | Lots More
466 |
467 | There are many more things being planned.
468 | Classes,
469 | Modules,
470 | etc.
471 |
472 |
473 |
474 | Read the spec
475 |
476 | The spec is publicly available online at ECMAScript Wiki.
477 |
478 |
479 |
480 | Experiment
481 |
482 | Partially implemented in SpiderMonkey and V8.
483 | Try on Firefox Nightly and Google Chrome and report bugs.
484 |
485 |
486 |
487 | Note: Turn on Experimental JavaScript in Google Chrome via chrome://flags
488 |
489 |
490 |
491 | Thank you!
492 | Questions?
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
529 |
530 |
531 |
532 |
--------------------------------------------------------------------------------
/css/reveal.min.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";/*!
2 | * reveal.js
3 | * http://lab.hakim.se/reveal-js
4 | * MIT licensed
5 | *
6 | * Copyright (C) 2013 Hakim El Hattab, http://hakim.se
7 | */ html,body,.reveal div,.reveal span,.reveal applet,.reveal object,.reveal iframe,.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6,.reveal p,.reveal blockquote,.reveal pre,.reveal a,.reveal abbr,.reveal acronym,.reveal address,.reveal big,.reveal cite,.reveal code,.reveal del,.reveal dfn,.reveal em,.reveal img,.reveal ins,.reveal kbd,.reveal q,.reveal s,.reveal samp,.reveal small,.reveal strike,.reveal strong,.reveal sub,.reveal sup,.reveal tt,.reveal var,.reveal b,.reveal u,.reveal i,.reveal center,.reveal dl,.reveal dt,.reveal dd,.reveal ol,.reveal ul,.reveal li,.reveal fieldset,.reveal form,.reveal label,.reveal legend,.reveal table,.reveal caption,.reveal tbody,.reveal tfoot,.reveal thead,.reveal tr,.reveal th,.reveal td,.reveal article,.reveal aside,.reveal canvas,.reveal details,.reveal embed,.reveal figure,.reveal figcaption,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal output,.reveal ruby,.reveal section,.reveal summary,.reveal time,.reveal mark,.reveal audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}.reveal article,.reveal aside,.reveal details,.reveal figcaption,.reveal figure,.reveal footer,.reveal header,.reveal hgroup,.reveal menu,.reveal nav,.reveal section{display:block}html,body{width:100%;height:100%;overflow:hidden}body{position:relative;line-height:1}::selection{background:#FF5E99;color:#fff;text-shadow:none}.reveal h1,.reveal h2,.reveal h3,.reveal h4,.reveal h5,.reveal h6{-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto;word-wrap:break-word}.reveal h1{font-size:3.77em}.reveal h2{font-size:2.11em}.reveal h3{font-size:1.55em}.reveal h4{font-size:1em}.reveal .slides section .fragment{opacity:0;-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.reveal .slides section .fragment.visible{opacity:1}.reveal .slides section .fragment.grow{opacity:1}.reveal .slides section .fragment.grow.visible{-webkit-transform:scale(1.3);-moz-transform:scale(1.3);-ms-transform:scale(1.3);-o-transform:scale(1.3);transform:scale(1.3)}.reveal .slides section .fragment.shrink{opacity:1}.reveal .slides section .fragment.shrink.visible{-webkit-transform:scale(0.7);-moz-transform:scale(0.7);-ms-transform:scale(0.7);-o-transform:scale(0.7);transform:scale(0.7)}.reveal .slides section .fragment.zoom-in{opacity:0;-webkit-transform:scale(0.1);-moz-transform:scale(0.1);-ms-transform:scale(0.1);-o-transform:scale(0.1);transform:scale(0.1)}.reveal .slides section .fragment.zoom-in.visible{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.reveal .slides section .fragment.roll-in{opacity:0;-webkit-transform:rotateX(90deg);-moz-transform:rotateX(90deg);-ms-transform:rotateX(90deg);-o-transform:rotateX(90deg);transform:rotateX(90deg)}.reveal .slides section .fragment.roll-in.visible{opacity:1;-webkit-transform:rotateX(0);-moz-transform:rotateX(0);-ms-transform:rotateX(0);-o-transform:rotateX(0);transform:rotateX(0)}.reveal .slides section .fragment.fade-out{opacity:1}.reveal .slides section .fragment.fade-out.visible{opacity:0}.reveal .slides section .fragment.highlight-red,.reveal .slides section .fragment.highlight-green,.reveal .slides section .fragment.highlight-blue{opacity:1}.reveal .slides section .fragment.highlight-red.visible{color:#ff2c2d}.reveal .slides section .fragment.highlight-green.visible{color:#17ff2e}.reveal .slides section .fragment.highlight-blue.visible{color:#1b91ff}.reveal:after{content:'';font-style:italic}.reveal img,.reveal video,.reveal iframe{max-width:95%;max-height:95%}.reveal a{position:relative}.reveal strong,.reveal b{font-weight:700}.reveal em,.reveal i{font-style:italic}.reveal ol,.reveal ul{display:inline-block;text-align:left;margin:0 0 0 1em}.reveal ol{list-style-type:decimal}.reveal ul{list-style-type:disc}.reveal ul ul{list-style-type:square}.reveal ul ul ul{list-style-type:circle}.reveal ul ul,.reveal ul ol,.reveal ol ol,.reveal ol ul{display:block;margin-left:40px}.reveal p{margin-bottom:10px;line-height:1.2em}.reveal q,.reveal blockquote{quotes:none}.reveal blockquote{display:block;position:relative;width:70%;margin:5px auto;padding:5px;font-style:italic;background:rgba(255,255,255,.05);box-shadow:0 0 2px rgba(0,0,0,.2)}.reveal blockquote p:first-child,.reveal blockquote p:last-child{display:inline-block}.reveal q{font-style:italic}.reveal pre{display:block;position:relative;width:90%;margin:15px auto;text-align:left;font-size:.55em;font-family:monospace;line-height:1.2em;word-wrap:break-word;box-shadow:0 0 6px rgba(0,0,0,.3)}.reveal code{font-family:monospace}.reveal pre code{padding:5px;overflow:auto;max-height:400px;word-wrap:normal}.reveal table th,.reveal table td{text-align:left;padding-right:.3em}.reveal table th{text-shadow:#fff 1px 1px 2px}.reveal sup{vertical-align:super}.reveal sub{vertical-align:sub}.reveal small{display:inline-block;font-size:.6em;line-height:1.2em;vertical-align:top}.reveal small *{vertical-align:top}.reveal .controls{display:none;position:fixed;width:110px;height:110px;z-index:30;right:10px;bottom:10px}.reveal .controls div{position:absolute;opacity:.05;width:0;height:0;border:12px solid transparent;-moz-transform:scale(.9999);-webkit-transition:all .2s ease;-moz-transition:all .2s ease;-ms-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.reveal .controls div.enabled{opacity:.7;cursor:pointer}.reveal .controls div.enabled:active{margin-top:1px}.reveal .controls div.navigate-left{top:42px;border-right-width:22px;border-right-color:#eee}.reveal .controls div.navigate-left.fragmented{opacity:.3}.reveal .controls div.navigate-right{left:74px;top:42px;border-left-width:22px;border-left-color:#eee}.reveal .controls div.navigate-right.fragmented{opacity:.3}.reveal .controls div.navigate-up{left:42px;border-bottom-width:22px;border-bottom-color:#eee}.reveal .controls div.navigate-up.fragmented{opacity:.3}.reveal .controls div.navigate-down{left:42px;top:74px;border-top-width:22px;border-top-color:#eee}.reveal .controls div.navigate-down.fragmented{opacity:.3}.reveal .progress{position:fixed;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10}.reveal .progress:after{content:'';display:'block';position:absolute;height:20px;width:100%;top:-20px}.reveal .progress span{display:block;height:100%;width:0;-webkit-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);-o-transition:width 800ms cubic-bezier(0.26,.86,.44,.985);transition:width 800ms cubic-bezier(0.26,.86,.44,.985)}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;-webkit-perspective:400px;-moz-perspective:400px;-ms-perspective:400px;perspective:400px;-webkit-perspective-origin:50% 50%;-moz-perspective-origin:50% 50%;-ms-perspective-origin:50% 50%;perspective-origin:50% 50%}.reveal .roll:hover{background:0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;-webkit-transition:all 400ms ease;-moz-transition:all 400ms ease;-ms-transition:all 400ms ease;transition:all 400ms ease;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);-webkit-transform:translate3d(0px,0,-45px) rotateX(90deg);-moz-transform:translate3d(0px,0,-45px) rotateX(90deg);-ms-transform:translate3d(0px,0,-45px) rotateX(90deg);transform:translate3d(0px,0,-45px) rotateX(90deg)}.reveal .roll span:after{content:attr(data-title);display:block;position:absolute;left:0;top:0;padding:0 2px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0;-webkit-transform:translate3d(0px,110%,0) rotateX(-90deg);-moz-transform:translate3d(0px,110%,0) rotateX(-90deg);-ms-transform:translate3d(0px,110%,0) rotateX(-90deg);transform:translate3d(0px,110%,0) rotateX(-90deg)}.reveal{position:relative;width:100%;height:100%}.reveal .slides{position:absolute;width:100%;height:100%;left:50%;top:50%;overflow:visible;z-index:1;text-align:center;-webkit-transition:-webkit-perspective .4s ease;-moz-transition:-moz-perspective .4s ease;-ms-transition:-ms-perspective .4s ease;-o-transition:-o-perspective .4s ease;transition:perspective .4s ease;-webkit-perspective:600px;-moz-perspective:600px;-ms-perspective:600px;perspective:600px;-webkit-perspective-origin:0 -100px;-moz-perspective-origin:0 -100px;-ms-perspective-origin:0 -100px;perspective-origin:0 -100px}.reveal .slides>section,.reveal .slides>section>section{display:none;position:absolute;width:100%;padding:20px 0;z-index:10;line-height:1.2em;font-weight:400;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition:-webkit-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-webkit-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-moz-transition:-moz-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-moz-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-ms-transition:-ms-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-ms-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);-o-transition:-o-transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),-o-transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985);transition:transform-origin 800ms cubic-bezier(0.26,.86,.44,.985),transform 800ms cubic-bezier(0.26,.86,.44,.985),visibility 800ms cubic-bezier(0.26,.86,.44,.985),opacity 800ms cubic-bezier(0.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal[data-transition-speed=slow] .slides section{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal .slides section[data-transition-speed=fast]{-webkit-transition-duration:400ms;-moz-transition-duration:400ms;-ms-transition-duration:400ms;transition-duration:400ms}.reveal .slides section[data-transition-speed=slow]{-webkit-transition-duration:1200ms;-moz-transition-duration:1200ms;-ms-transition-duration:1200ms;transition-duration:1200ms}.reveal .slides>section{left:-50%;top:-50%}.reveal .slides>section.stack{padding-top:0;padding-bottom:0}.reveal .slides>section.present,.reveal .slides>section>section.present{display:block;z-index:11;opacity:1}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:auto!important}.reveal .slides>section[data-transition=default].past,.reveal .slides>section.past{display:block;opacity:0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section.future{display:block;opacity:0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section.past{display:block;opacity:0;-webkit-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);-moz-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);-ms-transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0);transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section.future{display:block;opacity:0;-webkit-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);-moz-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);-ms-transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0);transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides>section[data-transition=concave].past,.reveal.concave .slides>section.past{-webkit-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);-moz-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0);transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal.concave .slides>section.future{-webkit-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);-moz-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0);transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal.concave .slides>section>section.past{-webkit-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);-moz-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);-ms-transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0);transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal.concave .slides>section>section.future{-webkit-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);-moz-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);-ms-transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0);transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides>section[data-transition=zoom].past,.reveal.zoom .slides>section.past{opacity:0;visibility:hidden;-webkit-transform:scale(16);-moz-transform:scale(16);-ms-transform:scale(16);-o-transform:scale(16);transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal.zoom .slides>section.future{opacity:0;visibility:hidden;-webkit-transform:scale(0.2);-moz-transform:scale(0.2);-ms-transform:scale(0.2);-o-transform:scale(0.2);transform:scale(0.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal.zoom .slides>section>section.past{-webkit-transform:translate(0,-150%);-moz-transform:translate(0,-150%);-ms-transform:translate(0,-150%);-o-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=zoom].future,.reveal.zoom .slides>section>section.future{-webkit-transform:translate(0,150%);-moz-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.reveal.linear section{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.reveal .slides>section[data-transition=linear].past,.reveal.linear .slides>section.past{-webkit-transform:translate(-150%,0);-moz-transform:translate(-150%,0);-ms-transform:translate(-150%,0);-o-transform:translate(-150%,0);transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal.linear .slides>section.future{-webkit-transform:translate(150%,0);-moz-transform:translate(150%,0);-ms-transform:translate(150%,0);-o-transform:translate(150%,0);transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal.linear .slides>section>section.past{-webkit-transform:translate(0,-150%);-moz-transform:translate(0,-150%);-ms-transform:translate(0,-150%);-o-transform:translate(0,-150%);transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal.linear .slides>section>section.future{-webkit-transform:translate(0,150%);-moz-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.reveal.cube .slides{-webkit-perspective:1300px;-moz-perspective:1300px;-ms-perspective:1300px;perspective:1300px}.reveal.cube .slides section{padding:30px;min-height:700px;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.reveal.center.cube .slides section{min-height:auto}.reveal.cube .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);border-radius:4px;-webkit-transform:translateZ(-20px);-moz-transform:translateZ(-20px);-ms-transform:translateZ(-20px);-o-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.cube .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg);-moz-transform:translateZ(-90px) rotateX(65deg);-ms-transform:translateZ(-90px) rotateX(65deg);-o-transform:translateZ(-90px) rotateX(65deg);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0}.reveal.cube .slides>section.past{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(-100%,0,0) rotateY(-90deg);-moz-transform:translate3d(-100%,0,0) rotateY(-90deg);-ms-transform:translate3d(-100%,0,0) rotateY(-90deg);transform:translate3d(-100%,0,0) rotateY(-90deg)}.reveal.cube .slides>section.future{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(100%,0,0) rotateY(90deg);-moz-transform:translate3d(100%,0,0) rotateY(90deg);-ms-transform:translate3d(100%,0,0) rotateY(90deg);transform:translate3d(100%,0,0) rotateY(90deg)}.reveal.cube .slides>section>section.past{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,-100%,0) rotateX(90deg);-moz-transform:translate3d(0,-100%,0) rotateX(90deg);-ms-transform:translate3d(0,-100%,0) rotateX(90deg);transform:translate3d(0,-100%,0) rotateX(90deg)}.reveal.cube .slides>section>section.future{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,100%,0) rotateX(-90deg);-moz-transform:translate3d(0,100%,0) rotateX(-90deg);-ms-transform:translate3d(0,100%,0) rotateX(-90deg);transform:translate3d(0,100%,0) rotateX(-90deg)}.reveal.page .slides{-webkit-perspective-origin:0 50%;-moz-perspective-origin:0 50%;-ms-perspective-origin:0 50%;perspective-origin:0 50%;-webkit-perspective:3000px;-moz-perspective:3000px;-ms-perspective:3000px;perspective:3000px}.reveal.page .slides section{padding:30px;min-height:700px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.reveal.page .slides section.past{z-index:12}.reveal.page .slides section:not(.stack):before{content:'';position:absolute;display:block;width:100%;height:100%;left:0;top:0;background:rgba(0,0,0,.1);-webkit-transform:translateZ(-20px);-moz-transform:translateZ(-20px);-ms-transform:translateZ(-20px);-o-transform:translateZ(-20px);transform:translateZ(-20px)}.reveal.page .slides section:not(.stack):after{content:'';position:absolute;display:block;width:90%;height:30px;left:5%;bottom:0;background:0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);-webkit-transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0}.reveal.page .slides>section.past{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(-40%,0,0) rotateY(-80deg);-moz-transform:translate3d(-40%,0,0) rotateY(-80deg);-ms-transform:translate3d(-40%,0,0) rotateY(-80deg);transform:translate3d(-40%,0,0) rotateY(-80deg)}.reveal.page .slides>section.future{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal.page .slides>section>section.past{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translate3d(0,-40%,0) rotateX(80deg);-moz-transform:translate3d(0,-40%,0) rotateX(80deg);-ms-transform:translate3d(0,-40%,0) rotateX(80deg);transform:translate3d(0,-40%,0) rotateX(80deg)}.reveal.page .slides>section>section.future{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reveal .slides section[data-transition=fade],.reveal.fade .slides section,.reveal.fade .slides>section>section{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-ms-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section,.reveal.fade.exit-overview .slides section,.reveal.fade.exit-overview .slides>section>section{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section{-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal.overview .slides{-webkit-perspective-origin:0 0;-moz-perspective-origin:0 0;-ms-perspective-origin:0 0;perspective-origin:0 0;-webkit-perspective:700px;-moz-perspective:700px;-ms-perspective:700px;perspective:700px}.reveal.overview .slides section{height:600px;overflow:hidden;opacity:1!important;visibility:visible!important;cursor:pointer;background:rgba(0,0,0,.1)}.reveal.overview .slides section .fragment{opacity:1}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides section>section{opacity:1;cursor:pointer}.reveal.overview .slides section:hover{background:rgba(0,0,0,.3)}.reveal.overview .slides section.present{background:rgba(0,0,0,.3)}.reveal.overview .slides>section.stack{padding:0;background:0;overflow:visible}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;visibility:hidden;opacity:0;z-index:100;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-ms-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.no-transforms{overflow-y:auto}.no-transforms .reveal .slides{position:relative;width:80%;height:auto!important;top:0;left:50%;margin:0;text-align:center}.no-transforms .reveal .controls,.no-transforms .reveal .progress{display:none!important}.no-transforms .reveal .slides section{display:block!important;opacity:1!important;position:relative!important;height:auto;min-height:auto;top:0;left:-50%;margin:70px 0;-webkit-transform:none;-moz-transform:none;-ms-transform:none;-o-transform:none;transform:none}.no-transforms .reveal .slides section section{left:0}.no-transition{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.reveal .state-background{position:absolute;width:100%;height:100%;background:rgba(0,0,0,0);-webkit-transition:background 800ms ease;-moz-transition:background 800ms ease;-ms-transition:background 800ms ease;-o-transition:background 800ms ease;transition:background 800ms ease}.alert .reveal .state-background{background:rgba(200,50,30,.6)}.soothe .reveal .state-background{background:rgba(50,200,90,.4)}.blackout .reveal .state-background{background:rgba(0,0,0,.6)}.whiteout .reveal .state-background{background:rgba(255,255,255,.6)}.cobalt .reveal .state-background{background:rgba(22,152,213,.6)}.mint .reveal .state-background{background:rgba(22,213,75,.6)}.submerge .reveal .state-background{background:rgba(12,25,77,.6)}.lila .reveal .state-background{background:rgba(180,50,140,.6)}.sunset .reveal .state-background{background:rgba(255,122,0,.6)}.reveal.rtl .slides,.reveal.rtl .slides h1,.reveal.rtl .slides h2,.reveal.rtl .slides h3,.reveal.rtl .slides h4,.reveal.rtl .slides h5,.reveal.rtl .slides h6{direction:rtl;font-family:sans-serif}.reveal.rtl pre,.reveal.rtl code{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{float:right}.reveal aside.notes{display:none}.zoomed .reveal *,.zoomed .reveal :before,.zoomed .reveal :after{-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;transform:none!important;-webkit-backface-visibility:visible!important;-moz-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}.zoomed .reveal .progress,.zoomed .reveal .controls{opacity:0}.zoomed .reveal .roll span{background:0}.zoomed .reveal .roll span:after{visibility:hidden}
--------------------------------------------------------------------------------