├── js ├── main.js └── reveal.min.js ├── mmm.hs ├── favicon.ico ├── rev.hs ├── L06_files ├── pi.png ├── fold.jpg └── inception.png ├── img ├── haskell.jpg ├── haskell.png ├── glyphicons-halflings.png └── glyphicons-halflings-white.png ├── L01_files ├── estud.png ├── lang1.png ├── lang2.png ├── lang3.png ├── lang4.png ├── langs.jpg ├── lazy.jpg ├── neo.jpg ├── church.jpg ├── ranking.png ├── analytics.png ├── mccarthy.jpg ├── overflow.png ├── overflow2.png ├── overflow3.png └── overflow3b.png ├── L04_files ├── noway.gif └── woahcool.gif ├── L05_files ├── tree.png └── awwyea.jpg ├── L07_files ├── irc.png ├── dragon.png ├── modules.png ├── monads.png └── simpleHTTP.png ├── L11_files ├── heist.png ├── snapls.png └── snapls2.png ├── L12_files ├── cat.gif ├── paper.png ├── proof.png ├── terms.png ├── brouwer.gif ├── cat_gro.png ├── cat_top.png ├── coffee.png ├── diffyeq.gif ├── diffyeq.png ├── forest.jpg ├── functor.png ├── categlory.jpg ├── category.png ├── gametheory.png └── categoryexample.png ├── Project_files ├── shi.png ├── goss.png ├── lamana.gif ├── mata.png ├── sinha.jpg ├── tang.png ├── thomas.png ├── campbell.gif ├── emerson.jpg ├── solanki.gif └── bomgardner.png ├── apple-touch-icon.png ├── lib ├── css │ ├── pojoaque.jpg │ ├── pojoaque_backup.jpg │ ├── stressed_linen │ │ ├── .DS_Store │ │ ├── stressed_linen.png │ │ ├── stressed_linen_@2X.png │ │ └── readme.txt │ ├── tomorrow-night-bright.css │ ├── pojoaque.css │ ├── github.css │ ├── zenburn.css │ └── sunburst.css ├── font │ ├── league_gothic-webfont.eot │ ├── league_gothic-webfont.ttf │ ├── league_gothic-webfont.woff │ └── league_gothic_license └── js │ ├── html5shiv.js │ ├── classList.js │ └── head.min.js ├── L03_files ├── grumpycat.png ├── zoidberg1.png └── zoidberg2.png ├── L08_files ├── brilliant.gif └── checkmate.gif ├── L02_files └── listmonster.png ├── .gitignore ├── apple-touch-icon-precomposed.png ├── apple-touch-icon-57x57-precomposed.png ├── apple-touch-icon-72x72-precomposed.png ├── apple-touch-icon-114x114-precomposed.png ├── apple-touch-icon-144x144-precomposed.png ├── css ├── theme │ ├── README.md │ ├── template │ │ ├── settings.scss │ │ ├── mixins.scss │ │ └── theme.scss │ ├── source │ │ ├── night.scss │ │ ├── serif.scss │ │ ├── sky.scss │ │ ├── simple.scss │ │ ├── default.scss │ │ └── beige.scss │ ├── night.css │ ├── serif.css │ ├── simple.css │ ├── sky.css │ ├── beige.css │ └── default.css ├── main.css ├── shaders │ ├── tile-flip.fs │ └── tile-flip.vs ├── print │ ├── pdf.css │ └── paper.css └── bootstrap-responsive.min.css ├── plugin ├── remotes │ └── remotes.js ├── postmessage │ ├── postmessage.js │ └── example.html ├── markdown │ ├── markdown.js │ └── showdown.js ├── notes-server │ ├── client.js │ ├── index.js │ └── notes.html ├── notes │ ├── notes.js │ └── notes.html ├── zoom-js │ └── zoom.js └── highlight │ └── highlight.js ├── package.json ├── LICENCE ├── LICENCE-revealjs ├── grunt.js ├── nav.js ├── countdown.js ├── 404.html ├── README.md └── lec11.html /js/main.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /mmm.hs: -------------------------------------------------------------------------------- 1 | f :: Int -> Maybe Int 2 | f n = Just (n+1) -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/favicon.ico -------------------------------------------------------------------------------- /rev.hs: -------------------------------------------------------------------------------- 1 | main = putStrLn "What's your name?" >> getLine >>= putStrLn.("Hi " ++) 2 | -------------------------------------------------------------------------------- /L06_files/pi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L06_files/pi.png -------------------------------------------------------------------------------- /img/haskell.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/img/haskell.jpg -------------------------------------------------------------------------------- /img/haskell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/img/haskell.png -------------------------------------------------------------------------------- /L01_files/estud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/estud.png -------------------------------------------------------------------------------- /L01_files/lang1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/lang1.png -------------------------------------------------------------------------------- /L01_files/lang2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/lang2.png -------------------------------------------------------------------------------- /L01_files/lang3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/lang3.png -------------------------------------------------------------------------------- /L01_files/lang4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/lang4.png -------------------------------------------------------------------------------- /L01_files/langs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/langs.jpg -------------------------------------------------------------------------------- /L01_files/lazy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/lazy.jpg -------------------------------------------------------------------------------- /L01_files/neo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/neo.jpg -------------------------------------------------------------------------------- /L04_files/noway.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L04_files/noway.gif -------------------------------------------------------------------------------- /L05_files/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L05_files/tree.png -------------------------------------------------------------------------------- /L06_files/fold.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L06_files/fold.jpg -------------------------------------------------------------------------------- /L07_files/irc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L07_files/irc.png -------------------------------------------------------------------------------- /L11_files/heist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L11_files/heist.png -------------------------------------------------------------------------------- /L12_files/cat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/cat.gif -------------------------------------------------------------------------------- /L12_files/paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/paper.png -------------------------------------------------------------------------------- /L12_files/proof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/proof.png -------------------------------------------------------------------------------- /L12_files/terms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/terms.png -------------------------------------------------------------------------------- /L01_files/church.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/church.jpg -------------------------------------------------------------------------------- /L01_files/ranking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/ranking.png -------------------------------------------------------------------------------- /L05_files/awwyea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L05_files/awwyea.jpg -------------------------------------------------------------------------------- /L07_files/dragon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L07_files/dragon.png -------------------------------------------------------------------------------- /L07_files/modules.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L07_files/modules.png -------------------------------------------------------------------------------- /L07_files/monads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L07_files/monads.png -------------------------------------------------------------------------------- /L11_files/snapls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L11_files/snapls.png -------------------------------------------------------------------------------- /L11_files/snapls2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L11_files/snapls2.png -------------------------------------------------------------------------------- /L12_files/brouwer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/brouwer.gif -------------------------------------------------------------------------------- /L12_files/cat_gro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/cat_gro.png -------------------------------------------------------------------------------- /L12_files/cat_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/cat_top.png -------------------------------------------------------------------------------- /L12_files/coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/coffee.png -------------------------------------------------------------------------------- /L12_files/diffyeq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/diffyeq.gif -------------------------------------------------------------------------------- /L12_files/diffyeq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/diffyeq.png -------------------------------------------------------------------------------- /L12_files/forest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/forest.jpg -------------------------------------------------------------------------------- /L12_files/functor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/functor.png -------------------------------------------------------------------------------- /Project_files/shi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/shi.png -------------------------------------------------------------------------------- /apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/apple-touch-icon.png -------------------------------------------------------------------------------- /lib/css/pojoaque.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/css/pojoaque.jpg -------------------------------------------------------------------------------- /L01_files/analytics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/analytics.png -------------------------------------------------------------------------------- /L01_files/mccarthy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/mccarthy.jpg -------------------------------------------------------------------------------- /L01_files/overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/overflow.png -------------------------------------------------------------------------------- /L01_files/overflow2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/overflow2.png -------------------------------------------------------------------------------- /L01_files/overflow3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/overflow3.png -------------------------------------------------------------------------------- /L01_files/overflow3b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L01_files/overflow3b.png -------------------------------------------------------------------------------- /L03_files/grumpycat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L03_files/grumpycat.png -------------------------------------------------------------------------------- /L03_files/zoidberg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L03_files/zoidberg1.png -------------------------------------------------------------------------------- /L03_files/zoidberg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L03_files/zoidberg2.png -------------------------------------------------------------------------------- /L04_files/woahcool.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L04_files/woahcool.gif -------------------------------------------------------------------------------- /L06_files/inception.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L06_files/inception.png -------------------------------------------------------------------------------- /L07_files/simpleHTTP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L07_files/simpleHTTP.png -------------------------------------------------------------------------------- /L08_files/brilliant.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L08_files/brilliant.gif -------------------------------------------------------------------------------- /L08_files/checkmate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L08_files/checkmate.gif -------------------------------------------------------------------------------- /L12_files/categlory.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/categlory.jpg -------------------------------------------------------------------------------- /L12_files/category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/category.png -------------------------------------------------------------------------------- /L12_files/gametheory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/gametheory.png -------------------------------------------------------------------------------- /Project_files/goss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/goss.png -------------------------------------------------------------------------------- /Project_files/lamana.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/lamana.gif -------------------------------------------------------------------------------- /Project_files/mata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/mata.png -------------------------------------------------------------------------------- /Project_files/sinha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/sinha.jpg -------------------------------------------------------------------------------- /Project_files/tang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/tang.png -------------------------------------------------------------------------------- /Project_files/thomas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/thomas.png -------------------------------------------------------------------------------- /L02_files/listmonster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L02_files/listmonster.png -------------------------------------------------------------------------------- /Project_files/campbell.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/campbell.gif -------------------------------------------------------------------------------- /Project_files/emerson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/emerson.jpg -------------------------------------------------------------------------------- /Project_files/solanki.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/solanki.gif -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | \#*\# 3 | /.emacs.desktop 4 | /.emacs.desktop.lock 5 | .elc 6 | auto-save-list 7 | tramp 8 | .\#* -------------------------------------------------------------------------------- /L12_files/categoryexample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/L12_files/categoryexample.png -------------------------------------------------------------------------------- /Project_files/bomgardner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/Project_files/bomgardner.png -------------------------------------------------------------------------------- /img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /lib/css/pojoaque_backup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/css/pojoaque_backup.jpg -------------------------------------------------------------------------------- /apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /lib/css/stressed_linen/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/css/stressed_linen/.DS_Store -------------------------------------------------------------------------------- /lib/font/league_gothic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/font/league_gothic-webfont.eot -------------------------------------------------------------------------------- /lib/font/league_gothic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/font/league_gothic-webfont.ttf -------------------------------------------------------------------------------- /lib/font/league_gothic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/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 | -------------------------------------------------------------------------------- /apple-touch-icon-57x57-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/apple-touch-icon-57x57-precomposed.png -------------------------------------------------------------------------------- /apple-touch-icon-72x72-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/apple-touch-icon-72x72-precomposed.png -------------------------------------------------------------------------------- /apple-touch-icon-114x114-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/apple-touch-icon-114x114-precomposed.png -------------------------------------------------------------------------------- /apple-touch-icon-144x144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/apple-touch-icon-144x144-precomposed.png -------------------------------------------------------------------------------- /lib/css/stressed_linen/stressed_linen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/css/stressed_linen/stressed_linen.png -------------------------------------------------------------------------------- /lib/css/stressed_linen/stressed_linen_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BinRoot/Haskell-Lectures/HEAD/lib/css/stressed_linen/stressed_linen_@2X.png -------------------------------------------------------------------------------- /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'); -------------------------------------------------------------------------------- /lib/css/stressed_linen/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /css/theme/README.md: -------------------------------------------------------------------------------- 1 | Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Find out how to install Sass here http://sass-lang.com/, once Sass is installed run the follwing command to start monitoring the source files for changes. 2 | 3 | ``` 4 | sass --watch css/theme/source/:css/theme --style expanded 5 | ``` -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /* ========================================================================== 4 | Author's custom styles 5 | ========================================================================== */ 6 | 7 | body, 8 | input, 9 | button, 10 | select, 11 | textarea, 12 | .navbar-search .search-query { 13 | font-family: 'Ubuntu', sans-serif; 14 | } 15 | 16 | .hero-unit { 17 | color:#eeeeee 18 | } 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /plugin/remotes/remotes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Touch-based remote controller for your presentation courtesy 3 | * of the folks at http://remotes.io 4 | */ 5 | 6 | head.ready( 'remotes.ne.min.js', function() { 7 | 8 | new Remotes("preview") 9 | .on("swipe-left", function(e){ Reveal.right(); }) 10 | .on("swipe-right", function(e){ Reveal.left(); }) 11 | .on("swipe-up", function(e){ Reveal.down(); }) 12 | .on("swipe-down", function(e){ Reveal.up(); }) 13 | .on("tap", function(e){ 14 | Reveal.toggleOverview(); 15 | }); 16 | 17 | } ); 18 | 19 | head.js( 'https://raw.github.com/Remotes/Remotes/master/dist/remotes.ne.min.js' ); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reveal.js", 3 | "version": "2.2.0", 4 | "description": "The HTML Presentation Framework", 5 | "homepage": "http://lab.hakim.se/reveal-js", 6 | "author": { 7 | "name": "Hakim El Hattab", 8 | "email": "hakim.elhattab@gmail.com", 9 | "web": "http://hakim.se" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/hakimel/reveal.js.git" 14 | }, 15 | "engines": { 16 | "node": "~0.8.0" 17 | }, 18 | "dependencies": { 19 | "underscore" : "~1.3.3", 20 | "express" : "~2.5.9", 21 | "socket.io" : "~0.9.6", 22 | "mustache" : "~0.4.0" 23 | }, 24 | "devDependencies": { 25 | "grunt-contrib-mincss": "~0.3.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /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', Times, 'Times New Roman', 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 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2012-2013 Nishant Shukla, http://shuklan.com 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. -------------------------------------------------------------------------------- /LICENCE-revealjs: -------------------------------------------------------------------------------- 1 | Copyright (C) 2011-2012 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. -------------------------------------------------------------------------------- /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(http://fonts.googleapis.com/css?family=Montserrat:700); 16 | @import url(http://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', Times, 'Times New Roman', 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 | // --------------------------------------------- -------------------------------------------------------------------------------- /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 | // --------------------------------------------- -------------------------------------------------------------------------------- /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(http://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); 17 | @import url(http://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(http://fonts.googleapis.com/css?family=News+Cycle:400,700); 19 | @import url(http://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 20 | 21 | 22 | // Override theme settings (see ../template/settings.scss) 23 | $mainFont: 'Lato', Times, 'Times New Roman', 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 | // --------------------------------------------- -------------------------------------------------------------------------------- /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 Showdown === 'undefined' ) { 6 | throw 'The reveal.js Markdown plugin requires Showdown to be loaded'; 7 | } 8 | 9 | var sections = document.querySelectorAll( '[data-markdown]' ); 10 | 11 | for( var i = 0, len = sections.length; i < len; i++ ) { 12 | var section = sections[i]; 13 | var notes = section.querySelector( 'aside.notes' ); 14 | 15 | var template = section.querySelector( 'script' ); 16 | 17 | // strip leading whitespace so it isn't evaluated as code 18 | var text = ( template || section ).innerHTML; 19 | 20 | var leadingWs = text.match(/^\n?(\s*)/)[1].length, 21 | leadingTabs = text.match(/^\n?(\t*)/)[1].length; 22 | 23 | if( leadingTabs > 0 ) { 24 | text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); 25 | } 26 | else if( leadingWs > 1 ) { 27 | text = text.replace( new RegExp('\\n? {' + leadingWs + '}','g'), '\n' ); 28 | } 29 | 30 | section.innerHTML = (new Showdown.converter()).makeHtml(text); 31 | 32 | if( notes ) { 33 | section.appendChild( notes ); 34 | } 35 | } 36 | 37 | })(); -------------------------------------------------------------------------------- /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', 7 | 8 | inputJS: 'js/reveal.js', 9 | inputCSS: 'css/reveal.css', 10 | 11 | outputJS: 'js/reveal.min.js', 12 | outputCSS: 'css/reveal.min.css', 13 | 14 | meta: { 15 | version: '2.2', 16 | banner: 17 | '/*!\n' + 18 | ' * reveal.js <%= meta.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' + 19 | ' * http://lab.hakim.se/reveal-js\n' + 20 | ' * MIT licensed\n' + 21 | ' *\n' + 22 | ' * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n' + 23 | ' */' 24 | }, 25 | 26 | lint: { 27 | files: [ 'grunt.js', '<%= inputJS %>' ] 28 | }, 29 | 30 | // Tests will be added soon 31 | qunit: { 32 | files: [ 'test/**/*.html' ] 33 | }, 34 | 35 | min: { 36 | dist: { 37 | src: [ '', '<%= inputJS %>' ], 38 | dest: '<%= outputJS %>' 39 | } 40 | }, 41 | 42 | mincss: { 43 | compress: { 44 | files: { 45 | '<%= outputCSS %>': [ '<%= inputCSS %>' ] 46 | } 47 | } 48 | }, 49 | 50 | jshint: { 51 | options: { 52 | curly: false, 53 | eqeqeq: true, 54 | immed: true, 55 | latedef: true, 56 | newcap: true, 57 | noarg: true, 58 | sub: true, 59 | undef: true, 60 | eqnull: true, 61 | browser: true, 62 | expr: true 63 | }, 64 | globals: { 65 | head: false, 66 | module: false, 67 | console: false 68 | } 69 | }, 70 | 71 | watch: { 72 | files: [ 'grunt.js', '<%= inputJS %>', '<%= inputCSS %>' ], 73 | tasks: 'default' 74 | } 75 | 76 | }); 77 | 78 | // Dependencies 79 | grunt.loadNpmTasks( 'grunt-contrib-mincss' ); 80 | 81 | // Default task 82 | grunt.registerTask( 'default', [ 'lint', 'mincss', 'min' ] ); 83 | 84 | }; 85 | -------------------------------------------------------------------------------- /plugin/notes-server/client.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | // don't emit events from inside the previews themselves 3 | if ( window.location.search.match( /receiver/gi ) ) { return; } 4 | 5 | var socket = io.connect(window.location.origin); 6 | var socketId = Math.random().toString().slice(2); 7 | 8 | console.log('View slide notes at ' + window.location.origin + '/notes/' + socketId); 9 | window.open(window.location.origin + '/notes/' + socketId, 'notes-' + socketId); 10 | 11 | // Fires when a fragment is shown 12 | Reveal.addEventListener( 'fragmentshown', function( event ) { 13 | var fragmentData = { 14 | fragment : 'next', 15 | socketId : socketId 16 | }; 17 | socket.emit('fragmentchanged', fragmentData); 18 | } ); 19 | 20 | // Fires when a fragment is hidden 21 | Reveal.addEventListener( 'fragmenthidden', function( event ) { 22 | var fragmentData = { 23 | fragment : 'previous', 24 | socketId : socketId 25 | }; 26 | socket.emit('fragmentchanged', fragmentData); 27 | } ); 28 | 29 | // Fires when slide is changed 30 | Reveal.addEventListener( 'slidechanged', function( event ) { 31 | var nextindexh; 32 | var nextindexv; 33 | var slideElement = event.currentSlide; 34 | 35 | if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { 36 | nextindexh = event.indexh; 37 | nextindexv = event.indexv + 1; 38 | } else { 39 | nextindexh = event.indexh + 1; 40 | nextindexv = 0; 41 | } 42 | 43 | var notes = slideElement.querySelector('aside.notes'); 44 | var slideData = { 45 | notes : notes ? notes.innerHTML : '', 46 | indexh : event.indexh, 47 | indexv : event.indexv, 48 | nextindexh : nextindexh, 49 | nextindexv : nextindexv, 50 | socketId : socketId, 51 | markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false 52 | 53 | }; 54 | 55 | socket.emit('slidechanged', slideData); 56 | } ); 57 | }()); 58 | -------------------------------------------------------------------------------- /css/shaders/tile-flip.fs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2012 Adobe Systems Incorporated. All rights reserved. 3 | * Copyright (c) 2012 Branislav Ulicny 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | precision mediump float; 19 | 20 | // Uniform values from CSS 21 | 22 | uniform float amount; 23 | uniform float tileOutline; 24 | 25 | // Built-in uniforms 26 | 27 | uniform vec2 u_meshSize; 28 | uniform vec2 u_textureSize; 29 | 30 | // Varyings passed in from vertex shader 31 | 32 | varying float v_depth; 33 | varying vec2 v_uv; 34 | 35 | // Main 36 | 37 | void main() 38 | { 39 | // FIXME: Must swap x and y as a workaround for: 40 | // https://bugs.webkit.org/show_bug.cgi?id=96285 41 | vec2 u_meshSize = u_meshSize.yx; 42 | 43 | vec4 c = vec4(1.0); 44 | 45 | // Fade out. 46 | c.a = 1.0 - v_depth; 47 | 48 | // Show grid outline. 49 | if (tileOutline >= 0.5) { 50 | float cell_width = u_textureSize.x / u_meshSize.y; 51 | float cell_height = u_textureSize.y / u_meshSize.x; 52 | float dd = 1.0; 53 | 54 | if (mod(v_uv.x * u_textureSize.x + dd, cell_width) < 2.0 55 | || mod(v_uv.y * u_textureSize.y + dd, cell_height) < 2.0) { 56 | if (amount > 0.0) 57 | c.rgb = vec3(1.0 - sqrt(amount)); 58 | } 59 | } 60 | css_ColorMatrix = mat4(c.r, 0.0, 0.0, 0.0, 61 | 0.0, c.g, 0.0, 0.0, 62 | 0.0, 0.0, c.b, 0.0, 63 | 0.0, 0.0, 0.0, c.a); 64 | } 65 | -------------------------------------------------------------------------------- /plugin/notes-server/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var fs = require('fs'); 3 | var io = require('socket.io'); 4 | var _ = require('underscore'); 5 | var Mustache = require('mustache'); 6 | 7 | var app = express.createServer(); 8 | var staticDir = express.static; 9 | 10 | io = io.listen(app); 11 | 12 | var opts = { 13 | port : 1947, 14 | baseDir : __dirname + '/../../' 15 | }; 16 | 17 | io.sockets.on('connection', function(socket) { 18 | socket.on('slidechanged', function(slideData) { 19 | socket.broadcast.emit('slidedata', slideData); 20 | }); 21 | socket.on('fragmentchanged', function(fragmentData) { 22 | socket.broadcast.emit('fragmentdata', fragmentData); 23 | }); 24 | }); 25 | 26 | app.configure(function() { 27 | [ 'css', 'js', 'images', 'plugin', 'lib' ].forEach(function(dir) { 28 | app.use('/' + dir, staticDir(opts.baseDir + dir)); 29 | }); 30 | }); 31 | 32 | app.get("/", function(req, res) { 33 | fs.createReadStream(opts.baseDir + '/index.html').pipe(res); 34 | }); 35 | 36 | app.get("/notes/:socketId", function(req, res) { 37 | 38 | fs.readFile(opts.baseDir + 'plugin/notes-server/notes.html', function(err, data) { 39 | res.send(Mustache.to_html(data.toString(), { 40 | socketId : req.params.socketId 41 | })); 42 | }); 43 | // fs.createReadStream(opts.baseDir + 'notes-server/notes.html').pipe(res); 44 | }); 45 | 46 | // Actually listen 47 | app.listen(opts.port || null); 48 | 49 | var brown = '\033[33m', 50 | green = '\033[32m', 51 | reset = '\033[0m'; 52 | 53 | var slidesLocation = "http://localhost" + ( opts.port ? ( ':' + opts.port ) : '' ); 54 | 55 | console.log( brown + "reveal.js - Speaker Notes" + reset ); 56 | console.log( "1. Open the slides at " + green + slidesLocation + reset ); 57 | console.log( "2. Click on the link your JS console to go to the notes page" ); 58 | console.log( "3. Advance through your slides and your notes will advance automatically" ); 59 | -------------------------------------------------------------------------------- /lib/css/pojoaque.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Pojoaque Style by Jason Tate 4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html 5 | Based on Solarized Style from http://ethanschoonover.com/solarized 6 | 7 | */ 8 | 9 | pre code { 10 | display: block; padding: 0.5em; 11 | color: #DCCF8F; 12 | background: url(./pojoaque.jpg) repeat scroll left top #181914; 13 | } 14 | 15 | pre .comment, 16 | pre .template_comment, 17 | pre .diff .header, 18 | pre .doctype, 19 | pre .lisp .string, 20 | pre .javadoc { 21 | color: #586e75; 22 | font-style: italic; 23 | } 24 | 25 | pre .keyword, 26 | pre .css .rule .keyword, 27 | pre .winutils, 28 | pre .javascript .title, 29 | pre .method, 30 | pre .addition, 31 | pre .css .tag, 32 | pre .clojure .title, 33 | pre .nginx .title { 34 | color: #B64926; 35 | } 36 | 37 | pre .number, 38 | pre .command, 39 | pre .string, 40 | pre .tag .value, 41 | pre .phpdoc, 42 | pre .tex .formula, 43 | pre .regexp, 44 | pre .hexcolor { 45 | color: #468966; 46 | } 47 | 48 | pre .title, 49 | pre .localvars, 50 | pre .function .title, 51 | pre .chunk, 52 | pre .decorator, 53 | pre .built_in, 54 | pre .lisp .title, 55 | pre .clojure .built_in, 56 | pre .identifier, 57 | pre .id { 58 | color: #FFB03B; 59 | } 60 | 61 | pre .attribute, 62 | pre .variable, 63 | pre .lisp .body, 64 | pre .smalltalk .number, 65 | pre .constant, 66 | pre .class .title, 67 | pre .parent, 68 | pre .haskell .type { 69 | color: #b58900; 70 | } 71 | 72 | pre .css .attribute { 73 | color: #b89859; 74 | } 75 | 76 | pre .css .number,pre .css .hexcolor{ 77 | color: #DCCF8F; 78 | } 79 | 80 | pre .css .class { 81 | color: #d3a60c; 82 | } 83 | 84 | pre .preprocessor, 85 | pre .pi, 86 | pre .shebang, 87 | pre .symbol, 88 | pre .symbol .string, 89 | pre .diff .change, 90 | pre .special, 91 | pre .attr_selector, 92 | pre .important, 93 | pre .subst, 94 | pre .cdata { 95 | color: #cb4b16; 96 | } 97 | 98 | pre .deletion { 99 | color: #dc322f; 100 | } 101 | 102 | pre .tex .formula { 103 | background: #073642; 104 | } 105 | -------------------------------------------------------------------------------- /lib/css/github.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | github.com style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | color: #333; 10 | background: #f8f8ff 11 | } 12 | 13 | pre .comment, 14 | pre .template_comment, 15 | pre .diff .header, 16 | pre .javadoc { 17 | color: #998; 18 | font-style: italic 19 | } 20 | 21 | pre .keyword, 22 | pre .css .rule .keyword, 23 | pre .winutils, 24 | pre .javascript .title, 25 | pre .nginx .title, 26 | pre .subst, 27 | pre .request, 28 | pre .status { 29 | color: #333; 30 | font-weight: bold 31 | } 32 | 33 | pre .number, 34 | pre .hexcolor, 35 | pre .ruby .constant { 36 | color: #099; 37 | } 38 | 39 | pre .string, 40 | pre .tag .value, 41 | pre .phpdoc, 42 | pre .tex .formula { 43 | color: #d14 44 | } 45 | 46 | pre .title, 47 | pre .id { 48 | color: #900; 49 | font-weight: bold 50 | } 51 | 52 | pre .javascript .title, 53 | pre .lisp .title, 54 | pre .clojure .title, 55 | pre .subst { 56 | font-weight: normal 57 | } 58 | 59 | pre .class .title, 60 | pre .haskell .type, 61 | pre .vhdl .literal, 62 | pre .tex .command { 63 | color: #458; 64 | font-weight: bold 65 | } 66 | 67 | pre .tag, 68 | pre .tag .title, 69 | pre .rules .property, 70 | pre .django .tag .keyword { 71 | color: #000080; 72 | font-weight: normal 73 | } 74 | 75 | pre .attribute, 76 | pre .variable, 77 | pre .lisp .body { 78 | color: #008080 79 | } 80 | 81 | pre .regexp { 82 | color: #009926 83 | } 84 | 85 | pre .class { 86 | color: #458; 87 | font-weight: bold 88 | } 89 | 90 | pre .symbol, 91 | pre .ruby .symbol .string, 92 | pre .lisp .keyword, 93 | pre .tex .special, 94 | pre .prompt { 95 | color: #990073 96 | } 97 | 98 | pre .built_in, 99 | pre .lisp .title, 100 | pre .clojure .built_in { 101 | color: #0086b3 102 | } 103 | 104 | pre .preprocessor, 105 | pre .pi, 106 | pre .doctype, 107 | pre .shebang, 108 | pre .cdata { 109 | color: #999; 110 | font-weight: bold 111 | } 112 | 113 | pre .deletion { 114 | background: #fdd 115 | } 116 | 117 | pre .addition { 118 | background: #dfd 119 | } 120 | 121 | pre .diff .change { 122 | background: #0086b3 123 | } 124 | 125 | pre .chunk { 126 | color: #aaa 127 | } 128 | -------------------------------------------------------------------------------- /nav.js: -------------------------------------------------------------------------------- 1 | document.write('\ 2 | \ 42 | '); 43 | -------------------------------------------------------------------------------- /lib/css/zenburn.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov 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/css/sunburst.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Sunburst-like style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #000; color: #f8f8f8; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc { 15 | color: #aeaeae; 16 | font-style: italic; 17 | } 18 | 19 | pre .keyword, 20 | pre .ruby .function .keyword, 21 | pre .request, 22 | pre .status, 23 | pre .nginx .title { 24 | color: #E28964; 25 | } 26 | 27 | pre .function .keyword, 28 | pre .sub .keyword, 29 | pre .method, 30 | pre .list .title { 31 | color: #99CF50; 32 | } 33 | 34 | pre .string, 35 | pre .tag .value, 36 | pre .cdata, 37 | pre .filter .argument, 38 | pre .attr_selector, 39 | pre .apache .cbracket, 40 | pre .date, 41 | pre .tex .command { 42 | color: #65B042; 43 | } 44 | 45 | pre .subst { 46 | color: #DAEFA3; 47 | } 48 | 49 | pre .regexp { 50 | color: #E9C062; 51 | } 52 | 53 | pre .title, 54 | pre .sub .identifier, 55 | pre .pi, 56 | pre .tag, 57 | pre .tag .keyword, 58 | pre .decorator, 59 | pre .shebang, 60 | pre .prompt { 61 | color: #89BDFF; 62 | } 63 | 64 | pre .class .title, 65 | pre .haskell .type, 66 | pre .smalltalk .class, 67 | pre .javadoctag, 68 | pre .yardoctag, 69 | pre .phpdoc { 70 | text-decoration: underline; 71 | } 72 | 73 | pre .symbol, 74 | pre .ruby .symbol .string, 75 | pre .number { 76 | color: #3387CC; 77 | } 78 | 79 | pre .params, 80 | pre .variable, 81 | pre .clojure .attribute { 82 | color: #3E87E3; 83 | } 84 | 85 | pre .css .tag, 86 | pre .rules .property, 87 | pre .pseudo, 88 | pre .tex .special { 89 | color: #CDA869; 90 | } 91 | 92 | pre .css .class { 93 | color: #9B703F; 94 | } 95 | 96 | pre .rules .keyword { 97 | color: #C5AF75; 98 | } 99 | 100 | pre .rules .value { 101 | color: #CF6A4C; 102 | } 103 | 104 | pre .css .id { 105 | color: #8B98AB; 106 | } 107 | 108 | pre .annotation, 109 | pre .apache .sqbracket, 110 | pre .nginx .built_in { 111 | color: #9B859D; 112 | } 113 | 114 | pre .preprocessor { 115 | color: #8996A8; 116 | } 117 | 118 | pre .hexcolor, 119 | pre .css .value .number { 120 | color: #DD7B3B; 121 | } 122 | 123 | pre .css .function { 124 | color: #DAD085; 125 | } 126 | 127 | pre .diff .header, 128 | pre .chunk, 129 | pre .tex .formula { 130 | background-color: #0E2231; 131 | color: #F8F8F8; 132 | font-style: italic; 133 | } 134 | 135 | pre .diff .change { 136 | background-color: #4A410D; 137 | color: #F8F8F8; 138 | } 139 | 140 | pre .addition { 141 | background-color: #253B22; 142 | color: #F8F8F8; 143 | } 144 | 145 | pre .deletion { 146 | background-color: #420E09; 147 | color: #F8F8F8; 148 | } 149 | 150 | pre .coffeescript .javascript, 151 | pre .javascript .xml, 152 | pre .tex .formula, 153 | pre .xml .javascript, 154 | pre .xml .vbscript, 155 | pre .xml .css, 156 | pre .xml .cdata { 157 | opacity: 0.5; 158 | } 159 | -------------------------------------------------------------------------------- /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 notesPopup = window.open( 'plugin/notes/notes.html', 'reveal.js - Notes', 'width=1120,height=850' ); 9 | 10 | // Fires when slide is changed 11 | Reveal.addEventListener( 'slidechanged', function( event ) { 12 | post('slidechanged'); 13 | } ); 14 | 15 | // Fires when a fragment is shown 16 | Reveal.addEventListener( 'fragmentshown', function( event ) { 17 | post('fragmentshown'); 18 | } ); 19 | 20 | // Fires when a fragment is hidden 21 | Reveal.addEventListener( 'fragmenthidden', function( event ) { 22 | post('fragmenthidden'); 23 | } ); 24 | 25 | /** 26 | * Posts the current slide data to the notes window 27 | * 28 | * @param {String} eventType Expecting 'slidechanged', 'fragmentshown' 29 | * or 'fragmenthidden' set in the events above to define the needed 30 | * slideDate. 31 | */ 32 | function post( eventType ) { 33 | var slideElement = Reveal.getCurrentSlide(), 34 | messageData; 35 | 36 | if( eventType === 'slidechanged' ) { 37 | var notes = slideElement.querySelector( 'aside.notes' ), 38 | indexh = Reveal.getIndices().h, 39 | indexv = Reveal.getIndices().v, 40 | nextindexh, 41 | nextindexv; 42 | 43 | if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { 44 | nextindexh = indexh; 45 | nextindexv = indexv + 1; 46 | } else { 47 | nextindexh = indexh + 1; 48 | nextindexv = 0; 49 | } 50 | 51 | messageData = { 52 | notes : notes ? notes.innerHTML : '', 53 | indexh : indexh, 54 | indexv : indexv, 55 | nextindexh : nextindexh, 56 | nextindexv : nextindexv, 57 | markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false 58 | }; 59 | } 60 | else if( eventType === 'fragmentshown' ) { 61 | messageData = { 62 | fragment : 'next' 63 | }; 64 | } 65 | else if( eventType === 'fragmenthidden' ) { 66 | messageData = { 67 | fragment : 'prev' 68 | }; 69 | } 70 | 71 | notesPopup.postMessage( JSON.stringify( messageData ), '*' ); 72 | } 73 | 74 | // Navigate to the current slide when the notes are loaded 75 | notesPopup.addEventListener( 'load', function( event ) { 76 | post('slidechanged'); 77 | }, false ); 78 | } 79 | 80 | // If the there's a 'notes' query set, open directly 81 | if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) { 82 | openNotes(); 83 | } 84 | 85 | // Open the notes when the 's' key is hit 86 | document.addEventListener( 'keydown', function( event ) { 87 | // Disregard the event if the target is editable or a 88 | // modifier is present 89 | if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return; 90 | 91 | if( event.keyCode === 83 ) { 92 | event.preventDefault(); 93 | openNotes(); 94 | } 95 | }, false ); 96 | 97 | return { open: openNotes }; 98 | })(); 99 | -------------------------------------------------------------------------------- /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 11) { 21 | ampm = "PM"; 22 | hours -= 12; 23 | } else if (hours == 0) { 24 | hours = 12; 25 | } 26 | 27 | if (minutes < 10) { 28 | minutes = "0" + minutes; 29 | } 30 | 31 | if (seconds < 10) { 32 | seconds = "0" + seconds; 33 | } 34 | 35 | output = month + "/" + day + "/" + year + " " + hours + ":" + minutes + ":" 36 | + seconds + " " + ampm; 37 | 38 | return output; 39 | } 40 | 41 | function UpdateCurrentTime() { 42 | dateNow = new Date(); 43 | var timeString = GetTimeAsString(dateNow); 44 | delete dateNow; 45 | 46 | document.getElementById("currenttime").innerHTML = "Current Time: " 47 | + timeString; 48 | setTimeout(UpdateCurrentTime, 1000); 49 | } 50 | 51 | function Countdown(eventName, endYear, endMonth, endDay, endHour, endMinute, 52 | endSecond, divID){ 53 | // Subtract one from month to be zero-indexed 54 | endMonth = endMonth - 1; 55 | dateFuture = new Date(endYear,endMonth,endDay,endHour,endMinute,endSecond); 56 | 57 | //grab current date 58 | dateNow = new Date(); 59 | 60 | //calc milliseconds between dates 61 | amount = dateFuture.getTime() - dateNow.getTime(); 62 | 63 | days=0; 64 | hours=0; 65 | mins=0; 66 | secs=0; 67 | 68 | if (amount >= 0) { 69 | amount = Math.floor(amount/1000); 70 | 71 | days=Math.floor(amount/86400); 72 | amount=amount%86400; 73 | 74 | hours=Math.floor(amount/3600); 75 | amount=amount%3600; 76 | 77 | mins=Math.floor(amount/60); 78 | amount=amount%60; 79 | 80 | secs=Math.floor(amount); 81 | 82 | countdownTimeString = pad(days, 2) + ":" + pad(hours, 2) + ":" + 83 | pad(mins, 2) + ":" + pad(secs, 2); 84 | 85 | var daysStr; 86 | if( days == 0 ) daysStr = ""; 87 | else daysStr = days+"d " 88 | 89 | var hoursStr; 90 | if( hours == 0 ) hoursStr = ""; 91 | else hoursStr = hours+"h " 92 | 93 | var minsStr; 94 | if( mins == 0 ) minsStr = ""; 95 | else minsStr = mins+"m " 96 | 97 | var secsStr = secs+"s" 98 | 99 | out = "Coming soon ("+eventName+" "; 100 | out += daysStr +" " + hoursStr + " " + minsStr + " " + secsStr+")"; 101 | 102 | document.getElementById(divID).innerHTML=out; 103 | 104 | endMonth = endMonth + 1; 105 | setTimeout(function() {UpdateCurrentTime(); Countdown( 106 | eventName, endYear, endMonth, endDay, endHour, endMinute, endSecond, 107 | divID)}, 1000); 108 | } 109 | 110 | delete dateNow; 111 | delete dateFuture; 112 | } 113 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /plugin/notes/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 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /css/shaders/tile-flip.vs: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c)2012 Adobe Systems Incorporated. All rights reserved. 3 | * Copyright (c)2012 Branislav Ulicny 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | precision mediump float; 19 | 20 | // Built-in attributes 21 | 22 | attribute vec4 a_position; 23 | attribute vec2 a_texCoord; 24 | attribute vec3 a_triangleCoord; 25 | 26 | // Built-in uniforms 27 | 28 | uniform mat4 u_projectionMatrix; 29 | uniform vec2 u_meshSize; 30 | uniform vec2 u_textureSize; 31 | 32 | // Uniform passed in from CSS 33 | 34 | uniform mat4 transform; 35 | uniform float amount; 36 | uniform float randomness; 37 | uniform vec3 flipAxis; 38 | 39 | // Varyings 40 | 41 | varying float v_depth; 42 | varying vec2 v_uv; 43 | 44 | // Constants 45 | 46 | const float PI2 = 1.5707963267948966; 47 | 48 | // Create perspective matrix 49 | 50 | mat4 perspectiveMatrix(float p) 51 | { 52 | float perspective = - 1.0 / p; 53 | return mat4( 54 | 1.0, 0.0, 0.0, 0.0, 55 | 0.0, 1.0, 0.0, 0.0, 56 | 0.0, 0.0, 1.0, perspective, 57 | 0.0, 0.0, 0.0, 1.0 58 | ); 59 | } 60 | 61 | // Rotate vector 62 | 63 | vec3 rotateVectorByQuaternion(vec3 v, vec4 q) 64 | { 65 | vec3 dest = vec3(0.0); 66 | 67 | float x = v.x, y = v.y, z = v.z; 68 | float qx = q.x, qy = q.y, qz = q.z, qw = q.w; 69 | 70 | // Calculate quaternion * vector. 71 | 72 | float ix = qw * x + qy * z - qz * y, 73 | iy = qw * y + qz * x - qx * z, 74 | iz = qw * z + qx * y - qy * x, 75 | iw = -qx * x - qy * y - qz * z; 76 | 77 | // Calculate result * inverse quaternion. 78 | 79 | dest.x = ix * qw + iw * -qx + iy * -qz - iz * -qy; 80 | dest.y = iy * qw + iw * -qy + iz * -qx - ix * -qz; 81 | dest.z = iz * qw + iw * -qz + ix * -qy - iy * -qx; 82 | 83 | return dest; 84 | } 85 | 86 | // Convert rotation. 87 | 88 | vec4 axisAngleToQuaternion(vec3 axis, float angle) 89 | { 90 | vec4 dest = vec4(0.0); 91 | 92 | float halfAngle = angle / 2.0; 93 | float s = sin(halfAngle); 94 | 95 | dest.x = axis.x * s; 96 | dest.y = axis.y * s; 97 | dest.z = axis.z * s; 98 | dest.w = cos(halfAngle); 99 | 100 | return dest; 101 | } 102 | 103 | // Random function based on the tile coordinate. 104 | // This will return the same value for all the vertices in the same tile (i.e. two triangles). 105 | 106 | float random(vec2 scale) 107 | { 108 | // Use the fragment position as a different seed per-pixel. 109 | return fract(sin(dot(vec2(a_triangleCoord.x, a_triangleCoord.y), scale)) * 4000.0); 110 | } 111 | 112 | // Main 113 | 114 | void main() 115 | { 116 | // FIXME: We must swap x and y as a workaround for: 117 | // https://bugs.webkit.org/show_bug.cgi?id=96285 118 | vec2 u_meshSize = u_meshSize.yx; 119 | 120 | vec4 pos = a_position; 121 | float aspect = u_textureSize.x / u_textureSize.y; 122 | 123 | float cx = a_triangleCoord.x / u_meshSize.y - 0.5 + 0.5 / u_meshSize.y; 124 | float cy = a_triangleCoord.y / u_meshSize.x - 0.5 + 0.5 / u_meshSize.x; 125 | 126 | vec3 centroid = vec3(cx, cy, 0.0); 127 | float r = random(vec2(10.0, 80.0)); 128 | float rr = mix(0.0, PI2, amount * (1.0 + randomness * r)); 129 | 130 | vec4 rotation = vec4(flipAxis, rr); 131 | vec4 qRotation = axisAngleToQuaternion(normalize(rotation.xyz), rotation.w); 132 | 133 | vec3 newPosition = rotateVectorByQuaternion((pos.xyz - centroid)* vec3(aspect, 1., 1.0), qRotation) * vec3(1.0 / aspect, 1.0, 1.0) + centroid; 134 | pos.xyz = newPosition; 135 | 136 | gl_Position = u_projectionMatrix * transform * pos; 137 | 138 | // Pass varyings to the fragment shader. 139 | v_depth = abs(rr)/ PI2; 140 | v_uv = a_texCoord; 141 | } 142 | -------------------------------------------------------------------------------- /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 | -webkit-print-color-adjust: exact; 15 | } 16 | 17 | body { 18 | font-size: 18pt; 19 | width: auto; 20 | height: auto; 21 | border: 0; 22 | margin: 0 5%; 23 | padding: 0; 24 | float: none !important; 25 | overflow: visible; 26 | background-image: none !important; 27 | } 28 | 29 | html { 30 | width: auto; 31 | height: auto; 32 | overflow: visible; 33 | } 34 | 35 | /* SECTION 2: Remove any elements not needed in print. 36 | This would include navigation, ads, sidebars, etc. */ 37 | .nestedarrow, 38 | .controls, 39 | .reveal .progress, 40 | .reveal.overview, 41 | .fork-reveal, 42 | .share-reveal, 43 | .state-background { 44 | display: none !important; 45 | } 46 | 47 | /* SECTION 3: Set body font face, size, and color. 48 | Consider using a serif font for readability. */ 49 | body, p, td, li, div { 50 | font-size: 18pt; 51 | } 52 | 53 | /* SECTION 4: Set heading font face, sizes, and color. 54 | Diffrentiate your headings from your body text. 55 | Perhaps use a large sans-serif for distinction. */ 56 | h1,h2,h3,h4,h5,h6 { 57 | text-shadow: 0 0 0 #000 !important; 58 | } 59 | 60 | /* SECTION 5: Make hyperlinks more usable. 61 | Ensure links are underlined, and consider appending 62 | the URL to the end of the link for usability. */ 63 | a:link, 64 | a:visited { 65 | font-weight: bold; 66 | text-decoration: underline; 67 | } 68 | 69 | 70 | /* SECTION 6: more reveal.js specific additions by @skypanther */ 71 | ul, ol, div, p { 72 | visibility: visible; 73 | position: static; 74 | width: auto; 75 | height: auto; 76 | display: block; 77 | overflow: visible; 78 | margin: auto; 79 | } 80 | .reveal .slides { 81 | position: static; 82 | width: 100%; 83 | height: auto; 84 | 85 | left: auto; 86 | top: auto; 87 | margin-left: auto; 88 | margin-right: auto; 89 | margin-top: auto; 90 | padding: auto; 91 | 92 | overflow: visible; 93 | display: block; 94 | 95 | text-align: center; 96 | 97 | -webkit-perspective: none; 98 | -moz-perspective: none; 99 | -ms-perspective: none; 100 | perspective: none; 101 | 102 | -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */ 103 | -moz-perspective-origin: 50% 50%; 104 | -ms-perspective-origin: 50% 50%; 105 | perspective-origin: 50% 50%; 106 | } 107 | .reveal .slides section { 108 | 109 | page-break-after: always !important; 110 | 111 | visibility: visible !important; 112 | position: static !important; 113 | width: 100% !important; 114 | height: auto !important; 115 | min-height: initial !important; 116 | display: block !important; 117 | overflow: visible !important; 118 | 119 | left: 0 !important; 120 | top: 0 !important; 121 | margin-left: 0px !important; 122 | margin-top: 50px !important; 123 | padding: 20px 0px !important; 124 | 125 | opacity: 1 !important; 126 | 127 | -webkit-transform-style: flat !important; 128 | -moz-transform-style: flat !important; 129 | -ms-transform-style: flat !important; 130 | transform-style: flat !important; 131 | 132 | -webkit-transform: none !important; 133 | -moz-transform: none !important; 134 | -ms-transform: none !important; 135 | transform: none !important; 136 | } 137 | .reveal section.stack { 138 | margin: 0px !important; 139 | padding: 0px !important; 140 | page-break-after: avoid !important; 141 | } 142 | .reveal section .fragment { 143 | opacity: 1 !important; 144 | visibility: visible !important; 145 | 146 | -webkit-transform: none !important; 147 | -moz-transform: none !important; 148 | -ms-transform: none !important; 149 | transform: none !important; 150 | } 151 | .reveal img { 152 | box-shadow: none; 153 | } 154 | .reveal .roll { 155 | overflow: visible; 156 | line-height: 1em; 157 | } 158 | .reveal small a { 159 | font-size: 16pt !important; 160 | } 161 | -------------------------------------------------------------------------------- /css/theme/night.css: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Montserrat:700); 2 | @import url(http://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 | 16 | .reveal { 17 | font-family: "Open Sans", Times, "Times New Roman", serif; 18 | font-size: 30px; 19 | font-weight: 200; 20 | letter-spacing: -0.02em; 21 | color: #eeeeee; 22 | } 23 | 24 | ::selection { 25 | color: white; 26 | background: #e7ad52; 27 | text-shadow: none; 28 | } 29 | 30 | /********************************************* 31 | * HEADERS 32 | *********************************************/ 33 | .reveal h1, 34 | .reveal h2, 35 | .reveal h3, 36 | .reveal h4, 37 | .reveal h5, 38 | .reveal h6 { 39 | margin: 0 0 20px 0; 40 | color: #eeeeee; 41 | font-family: "Montserrat", Impact, sans-serif; 42 | line-height: 0.9em; 43 | letter-spacing: -0.03em; 44 | text-transform: none; 45 | text-shadow: none; 46 | } 47 | 48 | .reveal h1 { 49 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); 50 | } 51 | 52 | /********************************************* 53 | * LINKS 54 | *********************************************/ 55 | .reveal a:not(.image) { 56 | color: #e7ad52; 57 | text-decoration: none; 58 | -webkit-transition: color .15s ease; 59 | -moz-transition: color .15s ease; 60 | -ms-transition: color .15s ease; 61 | -o-transition: color .15s ease; 62 | transition: color .15s ease; 63 | } 64 | 65 | .reveal a:not(.image):hover { 66 | color: #f3d7ac; 67 | text-shadow: none; 68 | border: none; 69 | } 70 | 71 | .reveal .roll span:after { 72 | color: #fff; 73 | background: #d08a1d; 74 | } 75 | 76 | /********************************************* 77 | * IMAGES 78 | *********************************************/ 79 | .reveal section img { 80 | margin: 15px 0px; 81 | background: rgba(255, 255, 255, 0.12); 82 | border: 4px solid #eeeeee; 83 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); 84 | -webkit-transition: all .2s linear; 85 | -moz-transition: all .2s linear; 86 | -ms-transition: all .2s linear; 87 | -o-transition: all .2s linear; 88 | transition: all .2s linear; 89 | } 90 | 91 | .reveal a:hover img { 92 | background: rgba(255, 255, 255, 0.2); 93 | border-color: #e7ad52; 94 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); 95 | } 96 | 97 | /********************************************* 98 | * NAVIGATION CONTROLS 99 | *********************************************/ 100 | .reveal .controls div.navigate-left, 101 | .reveal .controls div.navigate-left.enabled { 102 | border-right-color: #e7ad52; 103 | } 104 | 105 | .reveal .controls div.navigate-right, 106 | .reveal .controls div.navigate-right.enabled { 107 | border-left-color: #e7ad52; 108 | } 109 | 110 | .reveal .controls div.navigate-up, 111 | .reveal .controls div.navigate-up.enabled { 112 | border-bottom-color: #e7ad52; 113 | } 114 | 115 | .reveal .controls div.navigate-down, 116 | .reveal .controls div.navigate-down.enabled { 117 | border-top-color: #e7ad52; 118 | } 119 | 120 | .reveal .controls div.navigate-left.enabled:hover { 121 | border-right-color: #f3d7ac; 122 | } 123 | 124 | .reveal .controls div.navigate-right.enabled:hover { 125 | border-left-color: #f3d7ac; 126 | } 127 | 128 | .reveal .controls div.navigate-up.enabled:hover { 129 | border-bottom-color: #f3d7ac; 130 | } 131 | 132 | .reveal .controls div.navigate-down.enabled:hover { 133 | border-top-color: #f3d7ac; 134 | } 135 | 136 | /********************************************* 137 | * PROGRESS BAR 138 | *********************************************/ 139 | .reveal .progress { 140 | background: rgba(0, 0, 0, 0.2); 141 | } 142 | 143 | .reveal .progress span { 144 | background: #e7ad52; 145 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 146 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 147 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 148 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 149 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 150 | } 151 | -------------------------------------------------------------------------------- /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/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 | 16 | .reveal { 17 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; 18 | font-size: 36px; 19 | font-weight: 200; 20 | letter-spacing: -0.02em; 21 | color: black; 22 | } 23 | 24 | ::selection { 25 | color: white; 26 | background: #26351c; 27 | text-shadow: none; 28 | } 29 | 30 | /********************************************* 31 | * HEADERS 32 | *********************************************/ 33 | .reveal h1, 34 | .reveal h2, 35 | .reveal h3, 36 | .reveal h4, 37 | .reveal h5, 38 | .reveal h6 { 39 | margin: 0 0 20px 0; 40 | color: #383d3d; 41 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; 42 | line-height: 0.9em; 43 | letter-spacing: 0.02em; 44 | text-transform: none; 45 | text-shadow: none; 46 | } 47 | 48 | .reveal h1 { 49 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); 50 | } 51 | 52 | /********************************************* 53 | * LINKS 54 | *********************************************/ 55 | .reveal a:not(.image) { 56 | color: #080CAC; 57 | text-decoration: none; 58 | -webkit-transition: color .15s ease; 59 | -moz-transition: color .15s ease; 60 | -ms-transition: color .15s ease; 61 | -o-transition: color .15s ease; 62 | transition: color .15s ease; 63 | } 64 | 65 | .reveal a:not(.image):hover { 66 | color: #ed7839; 67 | text-shadow: none; 68 | border: none; 69 | } 70 | 71 | .reveal .roll span:after { 72 | color: #fff; 73 | background: #25211c; 74 | } 75 | 76 | /********************************************* 77 | * IMAGES 78 | *********************************************/ 79 | .reveal section img { 80 | margin: 15px 0px; 81 | background: rgba(255, 255, 255, 0.12); 82 | border: 4px solid black; 83 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); 84 | -webkit-transition: all .2s linear; 85 | -moz-transition: all .2s linear; 86 | -ms-transition: all .2s linear; 87 | -o-transition: all .2s linear; 88 | transition: all .2s linear; 89 | } 90 | 91 | .reveal a:hover img { 92 | background: rgba(255, 255, 255, 0.2); 93 | border-color: #51483d; 94 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); 95 | } 96 | 97 | /********************************************* 98 | * NAVIGATION CONTROLS 99 | *********************************************/ 100 | .reveal .controls div.navigate-left, 101 | .reveal .controls div.navigate-left.enabled { 102 | border-right-color: #51483d; 103 | } 104 | 105 | .reveal .controls div.navigate-right, 106 | .reveal .controls div.navigate-right.enabled { 107 | border-left-color: #51483d; 108 | } 109 | 110 | .reveal .controls div.navigate-up, 111 | .reveal .controls div.navigate-up.enabled { 112 | border-bottom-color: #51483d; 113 | } 114 | 115 | .reveal .controls div.navigate-down, 116 | .reveal .controls div.navigate-down.enabled { 117 | border-top-color: #51483d; 118 | } 119 | 120 | .reveal .controls div.navigate-left.enabled:hover { 121 | border-right-color: #8b7c69; 122 | } 123 | 124 | .reveal .controls div.navigate-right.enabled:hover { 125 | border-left-color: #8b7c69; 126 | } 127 | 128 | .reveal .controls div.navigate-up.enabled:hover { 129 | border-bottom-color: #8b7c69; 130 | } 131 | 132 | .reveal .controls div.navigate-down.enabled:hover { 133 | border-top-color: #8b7c69; 134 | } 135 | 136 | /********************************************* 137 | * PROGRESS BAR 138 | *********************************************/ 139 | .reveal .progress { 140 | background: rgba(0, 0, 0, 0.2); 141 | height:6px; 142 | } 143 | 144 | .reveal .progress span { 145 | background: #51483d; 146 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 147 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 148 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 149 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 150 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 151 | } 152 | -------------------------------------------------------------------------------- /css/theme/simple.css: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=News+Cycle:400,700); 2 | @import url(http://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 | 18 | .reveal { 19 | font-family: "Lato", Times, "Times New Roman", serif; 20 | font-size: 36px; 21 | font-weight: 200; 22 | letter-spacing: -0.02em; 23 | color: black; 24 | } 25 | 26 | ::selection { 27 | color: white; 28 | background: rgba(0, 0, 0, 0.99); 29 | text-shadow: none; 30 | } 31 | 32 | /********************************************* 33 | * HEADERS 34 | *********************************************/ 35 | .reveal h1, 36 | .reveal h2, 37 | .reveal h3, 38 | .reveal h4, 39 | .reveal h5, 40 | .reveal h6 { 41 | margin: 0 0 20px 0; 42 | color: black; 43 | font-family: "News Cycle", Impact, sans-serif; 44 | line-height: 0.9em; 45 | letter-spacing: 0.02em; 46 | text-transform: none; 47 | text-shadow: none; 48 | } 49 | 50 | .reveal h1 { 51 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); 52 | } 53 | 54 | /********************************************* 55 | * LINKS 56 | *********************************************/ 57 | .reveal a:not(.image) { 58 | color: darkblue; 59 | text-decoration: none; 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 | 67 | .reveal a:not(.image):hover { 68 | color: #0000f1; 69 | text-shadow: none; 70 | border: none; 71 | } 72 | 73 | .reveal .roll span:after { 74 | color: #fff; 75 | background: #00003f; 76 | } 77 | 78 | /********************************************* 79 | * IMAGES 80 | *********************************************/ 81 | .reveal section img { 82 | margin: 15px 0px; 83 | background: rgba(255, 255, 255, 0.12); 84 | border: 4px solid black; 85 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); 86 | -webkit-transition: all .2s linear; 87 | -moz-transition: all .2s linear; 88 | -ms-transition: all .2s linear; 89 | -o-transition: all .2s linear; 90 | transition: all .2s linear; 91 | } 92 | 93 | .reveal a:hover img { 94 | background: rgba(255, 255, 255, 0.2); 95 | border-color: darkblue; 96 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); 97 | } 98 | 99 | /********************************************* 100 | * NAVIGATION CONTROLS 101 | *********************************************/ 102 | .reveal .controls div.navigate-left, 103 | .reveal .controls div.navigate-left.enabled { 104 | border-right-color: darkblue; 105 | } 106 | 107 | .reveal .controls div.navigate-right, 108 | .reveal .controls div.navigate-right.enabled { 109 | border-left-color: darkblue; 110 | } 111 | 112 | .reveal .controls div.navigate-up, 113 | .reveal .controls div.navigate-up.enabled { 114 | border-bottom-color: darkblue; 115 | } 116 | 117 | .reveal .controls div.navigate-down, 118 | .reveal .controls div.navigate-down.enabled { 119 | border-top-color: darkblue; 120 | } 121 | 122 | .reveal .controls div.navigate-left.enabled:hover { 123 | border-right-color: #0000f1; 124 | } 125 | 126 | .reveal .controls div.navigate-right.enabled:hover { 127 | border-left-color: #0000f1; 128 | } 129 | 130 | .reveal .controls div.navigate-up.enabled:hover { 131 | border-bottom-color: #0000f1; 132 | } 133 | 134 | .reveal .controls div.navigate-down.enabled:hover { 135 | border-top-color: #0000f1; 136 | } 137 | 138 | /********************************************* 139 | * PROGRESS BAR 140 | *********************************************/ 141 | .reveal .progress { 142 | background: rgba(0, 0, 0, 0.2); 143 | } 144 | 145 | .reveal .progress span { 146 | background: darkblue; 147 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 148 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 149 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 150 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 151 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 152 | } 153 | -------------------------------------------------------------------------------- /css/theme/sky.css: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); 2 | @import url(http://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 | 22 | .reveal { 23 | font-family: "Open Sans", sans-serif; 24 | font-size: 36px; 25 | font-weight: 200; 26 | letter-spacing: -0.02em; 27 | color: #333333; 28 | } 29 | 30 | ::selection { 31 | color: white; 32 | background: #134674; 33 | text-shadow: none; 34 | } 35 | 36 | /********************************************* 37 | * HEADERS 38 | *********************************************/ 39 | .reveal h1, 40 | .reveal h2, 41 | .reveal h3, 42 | .reveal h4, 43 | .reveal h5, 44 | .reveal h6 { 45 | margin: 0 0 20px 0; 46 | color: #333333; 47 | font-family: "Quicksand", sans-serif; 48 | line-height: 0.9em; 49 | letter-spacing: -0.08em; 50 | text-transform: uppercase; 51 | text-shadow: none; 52 | } 53 | 54 | .reveal h1 { 55 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); 56 | } 57 | 58 | /********************************************* 59 | * LINKS 60 | *********************************************/ 61 | .reveal a:not(.image) { 62 | color: #3b759e; 63 | text-decoration: none; 64 | -webkit-transition: color .15s ease; 65 | -moz-transition: color .15s ease; 66 | -ms-transition: color .15s ease; 67 | -o-transition: color .15s ease; 68 | transition: color .15s ease; 69 | } 70 | 71 | .reveal a:not(.image):hover { 72 | color: #74a7cb; 73 | text-shadow: none; 74 | border: none; 75 | } 76 | 77 | .reveal .roll span:after { 78 | color: #fff; 79 | background: #264c66; 80 | } 81 | 82 | /********************************************* 83 | * IMAGES 84 | *********************************************/ 85 | .reveal section img { 86 | margin: 15px 0px; 87 | background: rgba(255, 255, 255, 0.12); 88 | border: 4px solid #333333; 89 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); 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: #3b759e; 100 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); 101 | } 102 | 103 | /********************************************* 104 | * NAVIGATION CONTROLS 105 | *********************************************/ 106 | .reveal .controls div.navigate-left, 107 | .reveal .controls div.navigate-left.enabled { 108 | border-right-color: #3b759e; 109 | } 110 | 111 | .reveal .controls div.navigate-right, 112 | .reveal .controls div.navigate-right.enabled { 113 | border-left-color: #3b759e; 114 | } 115 | 116 | .reveal .controls div.navigate-up, 117 | .reveal .controls div.navigate-up.enabled { 118 | border-bottom-color: #3b759e; 119 | } 120 | 121 | .reveal .controls div.navigate-down, 122 | .reveal .controls div.navigate-down.enabled { 123 | border-top-color: #3b759e; 124 | } 125 | 126 | .reveal .controls div.navigate-left.enabled:hover { 127 | border-right-color: #74a7cb; 128 | } 129 | 130 | .reveal .controls div.navigate-right.enabled:hover { 131 | border-left-color: #74a7cb; 132 | } 133 | 134 | .reveal .controls div.navigate-up.enabled:hover { 135 | border-bottom-color: #74a7cb; 136 | } 137 | 138 | .reveal .controls div.navigate-down.enabled:hover { 139 | border-top-color: #74a7cb; 140 | } 141 | 142 | /********************************************* 143 | * PROGRESS BAR 144 | *********************************************/ 145 | .reveal .progress { 146 | background: rgba(0, 0, 0, 0.2); 147 | } 148 | 149 | .reveal .progress span { 150 | background: #3b759e; 151 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 152 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 153 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 154 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 155 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 156 | } 157 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Page Not Found :( 6 | 141 | 142 | 143 |
144 |

Not found :(

145 |

Sorry, but the page you were trying to view does not exist.

146 |

It looks like this was the result of either:

147 |
    148 |
  • a mistyped address
  • 149 |
  • an out-of-date link
  • 150 |
151 | 154 | 155 |
156 | 157 | 158 | -------------------------------------------------------------------------------- /css/theme/beige.css: -------------------------------------------------------------------------------- 1 | @import url(http://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 | /********************************************* 16 | * GLOBAL STYLES 17 | *********************************************/ 18 | body { 19 | background: #f7f2d3; 20 | background: -moz-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); 21 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, white), color-stop(100%, #f7f2d3)); 22 | background: -webkit-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); 23 | background: -o-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); 24 | background: -ms-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); 25 | background: radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); 26 | background-color: #f7f3de; 27 | } 28 | 29 | .reveal { 30 | font-family: "Lato", Times, "Times New Roman", serif; 31 | font-size: 36px; 32 | font-weight: 200; 33 | letter-spacing: -0.02em; 34 | color: #333333; 35 | } 36 | 37 | ::selection { 38 | color: white; 39 | background: rgba(79, 64, 28, 0.99); 40 | text-shadow: none; 41 | } 42 | 43 | /********************************************* 44 | * HEADERS 45 | *********************************************/ 46 | .reveal h1, 47 | .reveal h2, 48 | .reveal h3, 49 | .reveal h4, 50 | .reveal h5, 51 | .reveal h6 { 52 | margin: 0 0 20px 0; 53 | color: #333333; 54 | font-family: "League Gothic", Impact, sans-serif; 55 | line-height: 0.9em; 56 | letter-spacing: 0.02em; 57 | text-transform: uppercase; 58 | text-shadow: none; 59 | } 60 | 61 | .reveal h1 { 62 | 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); 63 | } 64 | 65 | /********************************************* 66 | * LINKS 67 | *********************************************/ 68 | .reveal a:not(.image) { 69 | color: #8b743d; 70 | text-decoration: none; 71 | -webkit-transition: color .15s ease; 72 | -moz-transition: color .15s ease; 73 | -ms-transition: color .15s ease; 74 | -o-transition: color .15s ease; 75 | transition: color .15s ease; 76 | } 77 | 78 | .reveal a:not(.image):hover { 79 | color: #c0a86e; 80 | text-shadow: none; 81 | border: none; 82 | } 83 | 84 | .reveal .roll span:after { 85 | color: #fff; 86 | background: #564826; 87 | } 88 | 89 | /********************************************* 90 | * IMAGES 91 | *********************************************/ 92 | .reveal section img { 93 | margin: 15px 0px; 94 | background: rgba(255, 255, 255, 0.12); 95 | border: 4px solid #333333; 96 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); 97 | -webkit-transition: all .2s linear; 98 | -moz-transition: all .2s linear; 99 | -ms-transition: all .2s linear; 100 | -o-transition: all .2s linear; 101 | transition: all .2s linear; 102 | } 103 | 104 | .reveal a:hover img { 105 | background: rgba(255, 255, 255, 0.2); 106 | border-color: #8b743d; 107 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); 108 | } 109 | 110 | /********************************************* 111 | * NAVIGATION CONTROLS 112 | *********************************************/ 113 | .reveal .controls div.navigate-left, 114 | .reveal .controls div.navigate-left.enabled { 115 | border-right-color: #8b743d; 116 | } 117 | 118 | .reveal .controls div.navigate-right, 119 | .reveal .controls div.navigate-right.enabled { 120 | border-left-color: #8b743d; 121 | } 122 | 123 | .reveal .controls div.navigate-up, 124 | .reveal .controls div.navigate-up.enabled { 125 | border-bottom-color: #8b743d; 126 | } 127 | 128 | .reveal .controls div.navigate-down, 129 | .reveal .controls div.navigate-down.enabled { 130 | border-top-color: #8b743d; 131 | } 132 | 133 | .reveal .controls div.navigate-left.enabled:hover { 134 | border-right-color: #c0a86e; 135 | } 136 | 137 | .reveal .controls div.navigate-right.enabled:hover { 138 | border-left-color: #c0a86e; 139 | } 140 | 141 | .reveal .controls div.navigate-up.enabled:hover { 142 | border-bottom-color: #c0a86e; 143 | } 144 | 145 | .reveal .controls div.navigate-down.enabled:hover { 146 | border-top-color: #c0a86e; 147 | } 148 | 149 | /********************************************* 150 | * PROGRESS BAR 151 | *********************************************/ 152 | .reveal .progress { 153 | background: rgba(0, 0, 0, 0.2); 154 | } 155 | 156 | .reveal .progress span { 157 | background: #8b743d; 158 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 159 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 160 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 161 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 162 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 163 | } 164 | -------------------------------------------------------------------------------- /css/theme/default.css: -------------------------------------------------------------------------------- 1 | @import url(http://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 | /********************************************* 16 | * GLOBAL STYLES 17 | *********************************************/ 18 | body { 19 | background: #1c1e20; 20 | background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); 21 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20)); 22 | background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); 23 | background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); 24 | background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); 25 | background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); 26 | background-color: #2b2b2b; 27 | } 28 | 29 | .reveal { 30 | font-family: "Lato", Times, "Times New Roman", serif; 31 | font-size: 36px; 32 | font-weight: 200; 33 | letter-spacing: -0.02em; 34 | color: #eeeeee; 35 | } 36 | 37 | ::selection { 38 | color: white; 39 | background: #ff5e99; 40 | text-shadow: none; 41 | } 42 | 43 | /********************************************* 44 | * HEADERS 45 | *********************************************/ 46 | .reveal h1, 47 | .reveal h2, 48 | .reveal h3, 49 | .reveal h4, 50 | .reveal h5, 51 | .reveal h6 { 52 | margin: 0 0 20px 0; 53 | color: #eeeeee; 54 | font-family: "League Gothic", Impact, sans-serif; 55 | line-height: 0.9em; 56 | letter-spacing: 0.02em; 57 | text-transform: uppercase; 58 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); 59 | } 60 | 61 | .reveal h1 { 62 | 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); 63 | } 64 | 65 | /********************************************* 66 | * LINKS 67 | *********************************************/ 68 | .reveal a:not(.image) { 69 | color: #13daec; 70 | text-decoration: none; 71 | -webkit-transition: color .15s ease; 72 | -moz-transition: color .15s ease; 73 | -ms-transition: color .15s ease; 74 | -o-transition: color .15s ease; 75 | transition: color .15s ease; 76 | } 77 | 78 | .reveal a:not(.image):hover { 79 | color: #71e9f4; 80 | text-shadow: none; 81 | border: none; 82 | } 83 | 84 | .reveal .roll span:after { 85 | color: #fff; 86 | background: #0d99a5; 87 | } 88 | 89 | /********************************************* 90 | * IMAGES 91 | *********************************************/ 92 | .reveal section img { 93 | margin: 15px 0px; 94 | background: rgba(255, 255, 255, 0.12); 95 | border: 4px solid #eeeeee; 96 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); 97 | -webkit-transition: all .2s linear; 98 | -moz-transition: all .2s linear; 99 | -ms-transition: all .2s linear; 100 | -o-transition: all .2s linear; 101 | transition: all .2s linear; 102 | } 103 | 104 | .reveal a:hover img { 105 | background: rgba(255, 255, 255, 0.2); 106 | border-color: #13daec; 107 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); 108 | } 109 | 110 | /********************************************* 111 | * NAVIGATION CONTROLS 112 | *********************************************/ 113 | .reveal .controls div.navigate-left, 114 | .reveal .controls div.navigate-left.enabled { 115 | border-right-color: #13daec; 116 | } 117 | 118 | .reveal .controls div.navigate-right, 119 | .reveal .controls div.navigate-right.enabled { 120 | border-left-color: #13daec; 121 | } 122 | 123 | .reveal .controls div.navigate-up, 124 | .reveal .controls div.navigate-up.enabled { 125 | border-bottom-color: #13daec; 126 | } 127 | 128 | .reveal .controls div.navigate-down, 129 | .reveal .controls div.navigate-down.enabled { 130 | border-top-color: #13daec; 131 | } 132 | 133 | .reveal .controls div.navigate-left.enabled:hover { 134 | border-right-color: #71e9f4; 135 | } 136 | 137 | .reveal .controls div.navigate-right.enabled:hover { 138 | border-left-color: #71e9f4; 139 | } 140 | 141 | .reveal .controls div.navigate-up.enabled:hover { 142 | border-bottom-color: #71e9f4; 143 | } 144 | 145 | .reveal .controls div.navigate-down.enabled:hover { 146 | border-top-color: #71e9f4; 147 | } 148 | 149 | /********************************************* 150 | * PROGRESS BAR 151 | *********************************************/ 152 | .reveal .progress { 153 | background: rgba(0, 0, 0, 0.2); 154 | } 155 | 156 | .reveal .progress span { 157 | background: #13daec; 158 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 159 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 160 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 161 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 162 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 163 | } 164 | -------------------------------------------------------------------------------- /plugin/zoom-js/zoom.js: -------------------------------------------------------------------------------- 1 | // Custom reveal.js integration 2 | (function(){ 3 | document.querySelector( '.reveal' ).addEventListener( 'click', function( event ) { 4 | if( event.altKey ) { 5 | event.preventDefault(); 6 | zoom.to({ element: event.target, pan: false }); 7 | } 8 | } ); 9 | })(); 10 | 11 | /*! 12 | * zoom.js 0.2 (modified version for use with reveal.js) 13 | * http://lab.hakim.se/zoom-js 14 | * MIT licensed 15 | * 16 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 17 | */ 18 | var zoom = (function(){ 19 | 20 | // The current zoom level (scale) 21 | var level = 1; 22 | 23 | // The current mouse position, used for panning 24 | var mouseX = 0, 25 | mouseY = 0; 26 | 27 | // Timeout before pan is activated 28 | var panEngageTimeout = -1, 29 | panUpdateInterval = -1; 30 | 31 | var currentOptions = null; 32 | 33 | // Check for transform support so that we can fallback otherwise 34 | var supportsTransforms = 'WebkitTransform' in document.body.style || 35 | 'MozTransform' in document.body.style || 36 | 'msTransform' in document.body.style || 37 | 'OTransform' in document.body.style || 38 | 'transform' in document.body.style; 39 | 40 | if( supportsTransforms ) { 41 | // The easing that will be applied when we zoom in/out 42 | document.body.style.transition = 'transform 0.8s ease'; 43 | document.body.style.OTransition = '-o-transform 0.8s ease'; 44 | document.body.style.msTransition = '-ms-transform 0.8s ease'; 45 | document.body.style.MozTransition = '-moz-transform 0.8s ease'; 46 | document.body.style.WebkitTransition = '-webkit-transform 0.8s ease'; 47 | } 48 | 49 | // Zoom out if the user hits escape 50 | document.addEventListener( 'keyup', function( event ) { 51 | if( level !== 1 && event.keyCode === 27 ) { 52 | zoom.out(); 53 | } 54 | }, false ); 55 | 56 | // Monitor mouse movement for panning 57 | document.addEventListener( 'mousemove', function( event ) { 58 | if( level !== 1 ) { 59 | mouseX = event.clientX; 60 | mouseY = event.clientY; 61 | } 62 | }, false ); 63 | 64 | /** 65 | * Applies the CSS required to zoom in, prioritizes use of CSS3 66 | * transforms but falls back on zoom for IE. 67 | * 68 | * @param {Number} pageOffsetX 69 | * @param {Number} pageOffsetY 70 | * @param {Number} elementOffsetX 71 | * @param {Number} elementOffsetY 72 | * @param {Number} scale 73 | */ 74 | function magnify( pageOffsetX, pageOffsetY, elementOffsetX, elementOffsetY, scale ) { 75 | 76 | if( supportsTransforms ) { 77 | var origin = pageOffsetX +'px '+ pageOffsetY +'px', 78 | transform = 'translate('+ -elementOffsetX +'px,'+ -elementOffsetY +'px) scale('+ scale +')'; 79 | 80 | document.body.style.transformOrigin = origin; 81 | document.body.style.OTransformOrigin = origin; 82 | document.body.style.msTransformOrigin = origin; 83 | document.body.style.MozTransformOrigin = origin; 84 | document.body.style.WebkitTransformOrigin = origin; 85 | 86 | document.body.style.transform = transform; 87 | document.body.style.OTransform = transform; 88 | document.body.style.msTransform = transform; 89 | document.body.style.MozTransform = transform; 90 | document.body.style.WebkitTransform = transform; 91 | } 92 | else { 93 | // Reset all values 94 | if( scale === 1 ) { 95 | document.body.style.position = ''; 96 | document.body.style.left = ''; 97 | document.body.style.top = ''; 98 | document.body.style.width = ''; 99 | document.body.style.height = ''; 100 | document.body.style.zoom = ''; 101 | } 102 | // Apply scale 103 | else { 104 | document.body.style.position = 'relative'; 105 | document.body.style.left = ( - ( pageOffsetX + elementOffsetX ) / scale ) + 'px'; 106 | document.body.style.top = ( - ( pageOffsetY + elementOffsetY ) / scale ) + 'px'; 107 | document.body.style.width = ( scale * 100 ) + '%'; 108 | document.body.style.height = ( scale * 100 ) + '%'; 109 | document.body.style.zoom = scale; 110 | } 111 | } 112 | 113 | level = scale; 114 | 115 | if( level !== 1 && document.documentElement.classList ) { 116 | document.documentElement.classList.add( 'zoomed' ); 117 | } 118 | else { 119 | document.documentElement.classList.remove( 'zoomed' ); 120 | } 121 | } 122 | 123 | /** 124 | * Pan the document when the mosue cursor approaches the edges 125 | * of the window. 126 | */ 127 | function pan() { 128 | var range = 0.12, 129 | rangeX = window.innerWidth * range, 130 | rangeY = window.innerHeight * range, 131 | scrollOffset = getScrollOffset(); 132 | 133 | // Up 134 | if( mouseY < rangeY ) { 135 | window.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) ); 136 | } 137 | // Down 138 | else if( mouseY > window.innerHeight - rangeY ) { 139 | window.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) ); 140 | } 141 | 142 | // Left 143 | if( mouseX < rangeX ) { 144 | window.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y ); 145 | } 146 | // Right 147 | else if( mouseX > window.innerWidth - rangeX ) { 148 | window.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y ); 149 | } 150 | } 151 | 152 | function getScrollOffset() { 153 | return { 154 | x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset, 155 | y: window.scrollY !== undefined ? window.scrollY : window.pageXYffset 156 | } 157 | } 158 | 159 | return { 160 | /** 161 | * Zooms in on either a rectangle or HTML element. 162 | * 163 | * @param {Object} options 164 | * - element: HTML element to zoom in on 165 | * OR 166 | * - x/y: coordinates in non-transformed space to zoom in on 167 | * - width/height: the portion of the screen to zoom in on 168 | * - scale: can be used instead of width/height to explicitly set scale 169 | */ 170 | to: function( options ) { 171 | // Due to an implementation limitation we can't zoom in 172 | // to another element without zooming out first 173 | if( level !== 1 ) { 174 | zoom.out(); 175 | } 176 | else { 177 | options.x = options.x || 0; 178 | options.y = options.y || 0; 179 | 180 | // If an element is set, that takes precedence 181 | if( !!options.element ) { 182 | // Space around the zoomed in element to leave on screen 183 | var padding = 20; 184 | 185 | options.width = options.element.getBoundingClientRect().width + ( padding * 2 ); 186 | options.height = options.element.getBoundingClientRect().height + ( padding * 2 ); 187 | options.x = options.element.getBoundingClientRect().left - padding; 188 | options.y = options.element.getBoundingClientRect().top - padding; 189 | } 190 | 191 | // If width/height values are set, calculate scale from those values 192 | if( options.width !== undefined && options.height !== undefined ) { 193 | options.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 ); 194 | } 195 | 196 | if( options.scale > 1 ) { 197 | options.x *= options.scale; 198 | options.y *= options.scale; 199 | 200 | var scrollOffset = getScrollOffset(); 201 | 202 | if( options.element ) { 203 | scrollOffset.x -= ( window.innerWidth - ( options.width * options.scale ) ) / 2; 204 | } 205 | 206 | magnify( scrollOffset.x, scrollOffset.y, options.x, options.y, options.scale ); 207 | 208 | if( options.pan !== false ) { 209 | 210 | // Wait with engaging panning as it may conflict with the 211 | // zoom transition 212 | panEngageTimeout = setTimeout( function() { 213 | panUpdateInterval = setInterval( pan, 1000 / 60 ); 214 | }, 800 ); 215 | 216 | } 217 | } 218 | 219 | currentOptions = options; 220 | } 221 | }, 222 | 223 | /** 224 | * Resets the document zoom state to its default. 225 | */ 226 | out: function() { 227 | clearTimeout( panEngageTimeout ); 228 | clearInterval( panUpdateInterval ); 229 | 230 | var scrollOffset = getScrollOffset(); 231 | 232 | if( currentOptions && currentOptions.element ) { 233 | scrollOffset.x -= ( window.innerWidth - ( currentOptions.width * currentOptions.scale ) ) / 2; 234 | } 235 | 236 | magnify( scrollOffset.x, scrollOffset.y, 0, 0, 1 ); 237 | 238 | level = 1; 239 | }, 240 | 241 | // Alias 242 | magnify: function( options ) { this.to( options ) }, 243 | reset: function() { this.out() }, 244 | 245 | zoomLevel: function() { 246 | return level; 247 | } 248 | } 249 | 250 | })(); 251 | 252 | -------------------------------------------------------------------------------- /plugin/markdown/showdown.js: -------------------------------------------------------------------------------- 1 | // 2 | // showdown.js -- A javascript port of Markdown. 3 | // 4 | // Copyright (c) 2007 John Fraser. 5 | // 6 | // Original Markdown Copyright (c) 2004-2005 John Gruber 7 | // 8 | // 9 | // Redistributable under a BSD-style open source license. 10 | // See license.txt for more information. 11 | // 12 | // The full source distribution is at: 13 | // 14 | // A A L 15 | // T C A 16 | // T K B 17 | // 18 | // 19 | // 20 | // 21 | // Wherever possible, Showdown is a straight, line-by-line port 22 | // of the Perl version of Markdown. 23 | // 24 | // This is not a normal parser design; it's basically just a 25 | // series of string substitutions. It's hard to read and 26 | // maintain this way, but keeping Showdown close to the original 27 | // design makes it easier to port new features. 28 | // 29 | // More importantly, Showdown behaves like markdown.pl in most 30 | // edge cases. So web applications can do client-side preview 31 | // in Javascript, and then build identical HTML on the server. 32 | // 33 | // This port needs the new RegExp functionality of ECMA 262, 34 | // 3rd Edition (i.e. Javascript 1.5). Most modern web browsers 35 | // should do fine. Even with the new regular expression features, 36 | // We do a lot of work to emulate Perl's regex functionality. 37 | // The tricky changes in this file mostly have the "attacklab:" 38 | // label. Major or self-explanatory changes don't. 39 | // 40 | // Smart diff tools like Araxis Merge will be able to match up 41 | // this file with markdown.pl in a useful way. A little tweaking 42 | // helps: in a copy of markdown.pl, replace "#" with "//" and 43 | // replace "$text" with "text". Be sure to ignore whitespace 44 | // and line endings. 45 | // 46 | // 47 | // Showdown usage: 48 | // 49 | // var text = "Markdown *rocks*."; 50 | // 51 | // var converter = new Showdown.converter(); 52 | // var html = converter.makeHtml(text); 53 | // 54 | // alert(html); 55 | // 56 | // Note: move the sample code to the bottom of this 57 | // file before uncommenting it. 58 | // 59 | // 60 | // Showdown namespace 61 | // 62 | var Showdown={};Showdown.converter=function(){var a,b,c,d=0;this.makeHtml=function(d){return a=new Array,b=new Array,c=new Array,d=d.replace(/~/g,"~T"),d=d.replace(/\$/g,"~D"),d=d.replace(/\r\n/g,"\n"),d=d.replace(/\r/g,"\n"),d="\n\n"+d+"\n\n",d=F(d),d=d.replace(/^[ \t]+$/mg,""),d=f(d),d=e(d),d=h(d),d=D(d),d=d.replace(/~D/g,"$$"),d=d.replace(/~T/g,"~"),d};var e=function(c){var c=c.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|\Z)/gm,function(c,d,e,f,g){return d=d.toLowerCase(),a[d]=z(e),f?f+g:(g&&(b[d]=g.replace(/"/g,""")),"")});return c},f=function(a){a=a.replace(/\n/g,"\n\n");var b="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del",c="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math";return a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,g),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,g),a=a.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,g),a=a.replace(/(\n\n[ ]{0,3}[ \t]*(?=\n{2,}))/g,g),a=a.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,g),a=a.replace(/\n\n/g,"\n"),a},g=function(a,b){var d=b;return d=d.replace(/\n\n/g,"\n"),d=d.replace(/^\n/,""),d=d.replace(/\n+$/g,""),d="\n\n~K"+(c.push(d)-1)+"K\n\n",d},h=function(a){a=o(a);var b=t("
");return a=a.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,b),a=q(a),a=s(a),a=r(a),a=x(a),a=f(a),a=y(a),a},i=function(a){return a=u(a),a=j(a),a=A(a),a=m(a),a=k(a),a=B(a),a=z(a),a=w(a),a=a.replace(/ +\n/g,"
\n"),a},j=function(a){var b=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)<\/?code>(?=.)/g,"$1`");return b=G(b,"\\`*_"),b}),a},k=function(a){return a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,l),a=a.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,l),a=a.replace(/(\[([^\[\]]+)\])()()()()()/g,l),a},l=function(c,d,e,f,g,h,i,j){j==undefined&&(j="");var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(a[m]!=undefined)n=a[m],b[m]!=undefined&&(o=b[m]);else{if(!(k.search(/\(\s*\)$/m)>-1))return k;n=""}}n=G(n,"*_");var p='",p},m=function(a){return a=a.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,n),a=a.replace(/(!\[(.*?)\]\s?\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,n),a},n=function(c,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;o||(o="");if(n==""){m==""&&(m=l.toLowerCase().replace(/ ?\n/g," ")),n="#"+m;if(a[m]==undefined)return k;n=a[m],b[m]!=undefined&&(o=b[m])}l=l.replace(/"/g,"""),n=G(n,"*_");var p=''+l+''+i(c)+"")}),a=a.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(a,c){return t('

'+i(c)+"

")}),a=a.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(a,c,d){var e=c.length;return t("'+i(d)+"")}),a},p,q=function(a){a+="~0";var b=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;return d?a=a.replace(b,function(a,b,c){var d=b,e=c.search(/[*+-]/g)>-1?"ul":"ol";d=d.replace(/\n{2,}/g,"\n\n\n");var f=p(d);return f=f.replace(/\s+$/,""),f="<"+e+">"+f+"\n",f}):(b=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(/[*+-]/g)>-1?"ul":"ol",f=f.replace(/\n{2,}/g,"\n\n\n"),h=p(f);return h=e+"<"+g+">\n"+h+"\n",h})),a=a.replace(/~0/,""),a};p=function(a){return d++,a=a.replace(/\n{2,}$/,"\n"),a+="~0",a=a.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(a,b,c,d,e){var f=e,g=b,j=c;return g||f.search(/\n{2,}/)>-1?f=h(E(f)):(f=q(E(f)),f=f.replace(/\n$/,""),f=i(f)),"
  • "+f+"
  • \n"}),a=a.replace(/~0/g,""),d--,a};var r=function(a){return a+="~0",a=a.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=v(E(d)),d=F(d),d=d.replace(/^\n+/g,""),d=d.replace(/\n+$/g,""),d="
    "+d+"\n
    ",t(d)+e}),a=a.replace(/~0/,""),a},s=function(a){return a+="~0",a=a.replace(/\n```(.*)\n([^`]+)\n```/g,function(a,b,c){var d=b,e=c;return e=v(e),e=F(e),e=e.replace(/^\n+/g,""),e=e.replace(/\n+$/g,""),e="
    "+e+"\n
    ",t(e)}),a=a.replace(/~0/,""),a},t=function(a){return a=a.replace(/(^\n+|\n+$)/g,""),"\n\n~K"+(c.push(a)-1)+"K\n\n"},u=function(a){return a=a.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(a,b,c,d,e){var f=d;return f=f.replace(/^([ \t]*)/g,""),f=f.replace(/[ \t]*$/g,""),f=v(f),b+""+f+""}),a},v=function(a){return a=a.replace(/&/g,"&"),a=a.replace(//g,">"),a=G(a,"*_{}[]\\",!1),a},w=function(a){return a=a.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"$2"),a=a.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"$2"),a},x=function(a){return a=a.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ \t]*>[ \t]?/gm,"~0"),c=c.replace(/~0/g,""),c=c.replace(/^[ \t]+$/gm,""),c=h(c),c=c.replace(/(^|\n)/g,"$1 "),c=c.replace(/(\s*
    [^\r]+?<\/pre>)/gm,function(a,b){var c=b;return c=c.replace(/^  /mg,"~0"),c=c.replace(/~0/g,""),c}),t("
    \n"+c+"\n
    ")}),a},y=function(a){a=a.replace(/^\n+/g,""),a=a.replace(/\n+$/g,"");var b=a.split(/\n{2,}/g),d=new Array,e=b.length;for(var f=0;f=0?d.push(g):g.search(/\S/)>=0&&(g=i(g),g=g.replace(/^([ \t]*)/g,"

    "),g+="

    ",d.push(g))}e=d.length;for(var f=0;f=0){var h=c[RegExp.$1];h=h.replace(/\$/g,"$$$$"),d[f]=d[f].replace(/~K\d+K/,h)}return d.join("\n\n")},z=function(a){return a=a.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&"),a=a.replace(/<(?![a-z\/?\$!])/gi,"<"),a},A=function(a){return a=a.replace(/\\(\\)/g,H),a=a.replace(/\\([`*_{}\[\]()>#+-.!])/g,H),a},B=function(a){return a=a.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,'
    $1'),a=a.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(a,b){return C(D(b))}),a},C=function(a){function b(a){var b="0123456789ABCDEF",c=a.charCodeAt(0);return b.charAt(c>>4)+b.charAt(c&15)}var c=[function(a){return"&#"+a.charCodeAt(0)+";"},function(a){return"&#x"+b(a)+";"},function(a){return a}];return a="mailto:"+a,a=a.replace(/./g,function(a){if(a=="@")a=c[Math.floor(Math.random()*2)](a);else if(a!=":"){var b=Math.random();a=b>.9?c[2](a):b>.45?c[1](a):c[0](a)}return a}),a=''+a+"",a=a.replace(/">.+:/g,'">'),a},D=function(a){return a=a.replace(/~E(\d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode(c)}),a},E=function(a){return a=a.replace(/^(\t|[ ]{1,4})/gm,"~0"),a=a.replace(/~0/g,""),a},F=function(a){return a=a.replace(/\t(?=\t)/g," "),a=a.replace(/\t/g,"~A~B"),a=a.replace(/~B(.+?)~A/g,function(a,b,c){var d=b,e=4-d.length%4;for(var f=0;f/gm,">")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+q.parentNode.className).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("")}while(o!=u.node);r.splice(q,1);while(q'+L[0]+""}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return''+r.value+""}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+=""}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"
    ")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.bash=function(a){var g="true false";var e="if then else elif fi for break continue while in do done echo exit return set declare";var c={cN:"variable",b:"\\$[a-zA-Z0-9_#]+"};var b={cN:"variable",b:"\\${([^}]|\\\\})+}"};var h={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE,c,b],r:0};var d={cN:"string",b:"'",e:"'",c:[{b:"''"}],r:0};var f={cN:"test_condition",b:"",e:"",c:[h,d,c,b],k:{literal:g},r:0};return{k:{keyword:e,literal:g},c:[{cN:"shebang",b:"(#!\\/bin\\/bash)|(#!\\/bin\\/sh)",r:10},c,b,a.HCM,h,d,a.inherit(f,{b:"\\[ ",e:" \\]",r:0}),a.inherit(f,{b:"\\[\\[ ",e:" \\]\\]"})]}}(hljs);hljs.LANGUAGES.java=function(a){return{k:"false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws",c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"@[A-Za-z]+"}],r:10},a.CLCM,a.CBLCLM,a.ASM,a.QSM,{cN:"class",bWK:true,e:"{",k:"class interface",i:":",c:[{bWK:true,k:"extends implements",r:10},{cN:"title",b:a.UIR}]},a.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}}(hljs);hljs.LANGUAGES.haskell=function(a){var d={cN:"type",b:"\\b[A-Z][\\w']*",r:0};var c={cN:"container",b:"\\(",e:"\\)",c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},{cN:"title",b:"[_a-z][\\w']*"}]};var b={cN:"container",b:"{",e:"}",c:c.c};return{k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance not as foreign ccall safe unsafe",c:[{cN:"comment",b:"--",e:"$"},{cN:"preprocessor",b:"{-#",e:"#-}"},{cN:"comment",c:["self"],b:"{-",e:"-}"},{cN:"string",b:"\\s+'",e:"'",c:[a.BE],r:0},a.QSM,{cN:"import",b:"\\bimport",e:"$",k:"import qualified as hiding",c:[c],i:"\\W\\.|;"},{cN:"module",b:"\\bmodule",e:"where",k:"module where",c:[c],i:"\\W\\.|;"},{cN:"class",b:"\\b(class|instance)",e:"where",k:"class where instance",c:[d]},{cN:"typedef",b:"\\b(data|(new)?type)",e:"$",k:"data type newtype deriving",c:[d,c,b]},a.CNM,{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},d,{cN:"title",b:"^[_a-z][\\w']*"}]}}(hljs);hljs.LANGUAGES.python=function(a){var f={cN:"prompt",b:"^(>>>|\\.\\.\\.) "};var c=[{cN:"string",b:"(u|b)?r?'''",e:"'''",c:[f],r:10},{cN:"string",b:'(u|b)?r?"""',e:'"""',c:[f],r:10},{cN:"string",b:"(u|r|ur)'",e:"'",c:[a.BE],r:10},{cN:"string",b:'(u|r|ur)"',e:'"',c:[a.BE],r:10},{cN:"string",b:"(b|br)'",e:"'",c:[a.BE]},{cN:"string",b:'(b|br)"',e:'"',c:[a.BE]}].concat([a.ASM,a.QSM]);var e={cN:"title",b:a.UIR};var d={cN:"params",b:"\\(",e:"\\)",c:["self",a.CNM,f].concat(c)};var b={bWK:true,e:":",i:"[${=;\\n]",c:[e,d],r:10};return{k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10",built_in:"None True False Ellipsis NotImplemented"},i:"(|\\?)",c:c.concat([f,a.HCM,a.inherit(b,{cN:"function",k:"def"}),a.inherit(b,{cN:"class",k:"class"}),a.CNM,{cN:"decorator",b:"@",e:"$"},{b:"\\b(print|exec)\\("}])}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);hljs.LANGUAGES.cpp=function(a){var b={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr"};return{k:b,i:"",k:b,r:10,c:["self"]}]}}(hljs); 15 | -------------------------------------------------------------------------------- /js/reveal.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * reveal.js 3 | * http://lab.hakim.se/reveal-js 4 | * MIT licensed 5 | * 6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 7 | */ 8 | var Reveal=function(){"use strict";function y(e){if(!h&&!c){document.body.setAttribute("class","no-transforms");return}window.addEventListener("load",P,!1),C(r,e),w(),E()}function b(){l.theme=document.querySelector("#theme"),l.wrapper=document.querySelector(".reveal"),l.slides=document.querySelector(".reveal .slides");if(!l.wrapper.querySelector(".progress")&&r.progress){var e=document.createElement("div");e.classList.add("progress"),e.innerHTML="",l.wrapper.appendChild(e)}if(!l.wrapper.querySelector(".controls")&&r.controls){var t=document.createElement("aside");t.classList.add("controls"),t.innerHTML='',l.wrapper.appendChild(t)}if(!l.wrapper.querySelector(".state-background")){var n=document.createElement("div");n.classList.add("state-background"),l.wrapper.appendChild(n)}if(!l.wrapper.querySelector(".pause-overlay")){var i=document.createElement("div");i.classList.add("pause-overlay"),l.wrapper.appendChild(i)}l.progress=document.querySelector(".reveal .progress"),l.progressbar=document.querySelector(".reveal .progress span"),r.controls&&(l.controls=document.querySelector(".reveal .controls"),l.controlsLeft=k(document.querySelectorAll(".navigate-left")),l.controlsRight=k(document.querySelectorAll(".navigate-right")),l.controlsUp=k(document.querySelectorAll(".navigate-up")),l.controlsDown=k(document.querySelectorAll(".navigate-down")),l.controlsPrev=k(document.querySelectorAll(".navigate-prev")),l.controlsNext=k(document.querySelectorAll(".navigate-next")))}function w(){navigator.userAgent.match(/(iphone|ipod)/i)&&(document.documentElement.style.overflow="scroll",document.body.style.height="120%",window.addEventListener("load",M,!1),window.addEventListener("orientationchange",M,!1))}function E(){function o(){t.length&&head.js.apply(null,t),S()}var e=[],t=[];for(var n=0,i=r.dependencies.length;n'+i.innerHTML+"")}}}function P(){if(r.center){var t=k(document.querySelectorAll(e)),n=-l.wrapper.offsetHeight/2;for(var i=0,s=t.length;i3?"none":"block"}n[o].classList.remove("past"),n[o].classList.remove("present"),n[o].classList.remove("future"),ot&&n[o].classList.add("future"),u.querySelector("section")&&n[o].classList.add("stack")}n[t].classList.add("present");var l=n[t].getAttribute("data-state");l&&(f=f.concat(l.split(" ")));var c=n[t].getAttribute("data-autoslide");c?i=parseInt(c,10):i=r.autoSlide}else t=0;return t}function J(){if(r.progress&&l.progress){var n=k(document.querySelectorAll(t)),i=document.querySelectorAll(e+":not(.stack)").length,s=0;e:for(var o=0;o0,right:s0,down:o0||o>0)t+=s;o>0&&(t+="/"+o)}window.location.hash=t}}}function Z(e){var n=s,r=o;if(e){var i=!!e.parentNode.nodeName.match(/section/gi),u=i?e.parentNode:e,a=k(document.querySelectorAll(t));n=Math.max(a.indexOf(u),0),i&&(r=Math.max(k(e.parentNode.children).indexOf(e),0))}return{h:n,v:r}}function et(){if(document.querySelector(n+".present")){var e=document.querySelectorAll(n+".present .fragment:not(.visible)");if(e.length)return e[0].classList.add("visible"),_("fragmentshown",{fragment:e[0]}),!0}else{var r=document.querySelectorAll(t+".present .fragment:not(.visible)");if(r.length)return r[0].classList.add("visible"),_("fragmentshown",{fragment:r[0]}),!0}return!1}function tt(){if(document.querySelector(n+".present")){var e=document.querySelectorAll(n+".present .fragment.visible");if(e.length)return e[e.length-1].classList.remove("visible"),_("fragmenthidden",{fragment:e[e.length-1]}),!0}else{var r=document.querySelectorAll(t+".present .fragment.visible");if(r.length)return r[r.length-1].classList.remove("visible"),_("fragmenthidden",{fragment:r[r.length-1]}),!0}return!1}function nt(){clearTimeout(d),i&&(d=setTimeout(at,i))}function rt(){(Q().left&&q()||tt()===!1)&&V(s-1,o)}function it(){(Q().right&&q()||et()===!1)&&V(s+1,o)}function st(){(Q().up&&q()||tt()===!1)&&V(s,o-1)}function ot(){(Q().down&&q()||et()===!1)&&V(s,o+1)}function ut(){if(tt()===!1)if(Q().up)st();else{var e=document.querySelector(t+".past:nth-child("+s+")");e&&(o=e.querySelectorAll("section").length+1||undefined,s--,V())}}function at(){et()===!1&&(Q().down?ot():it()),nt()}function ft(e){var t=document.activeElement,n=!(!document.activeElement||!document.activeElement.type&&!document.activeElement.href&&document.activeElement.contentEditable==="inherit");if(n||e.shiftKey||e.altKey||e.ctrlKey||e.metaKey)return;var r=!0;switch(e.keyCode){case 80:case 33:ut();break;case 78:case 34:at();break;case 72:case 37:rt();break;case 76:case 39:it();break;case 75:case 38:st();break;case 74:case 40:ot();break;case 36:V(0);break;case 35:V(Number.MAX_VALUE);break;case 32:q()?F():at();break;case 13:q()?F():r=!1;break;case 66:case 190:W();break;case 70:R();break;default:r=!1}r?e.preventDefault():e.keyCode===27&&c&&(I(),e.preventDefault()),nt()}function lt(e){g.startX=e.touches[0].clientX,g.startY=e.touches[0].clientY,g.startCount=e.touches.length,e.touches.length===2&&r.overview&&(g.startSpan=A({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:g.startX,y:g.startY}))}function ct(e){if(!g.handled){var t=e.touches[0].clientX,n=e.touches[0].clientY;if(e.touches.length===2&&g.startCount===2&&r.overview){var i=A({x:e.touches[1].clientX,y:e.touches[1].clientY},{x:g.startX,y:g.startY});Math.abs(g.startSpan-i)>g.threshold&&(g.handled=!0,ig.threshold&&Math.abs(s)>Math.abs(o)?(g.handled=!0,rt()):s<-g.threshold&&Math.abs(s)>Math.abs(o)?(g.handled=!0,it()):o>g.threshold?(g.handled=!0,st()):o<-g.threshold&&(g.handled=!0,ot()),e.preventDefault()}}else navigator.userAgent.match(/android/gi)&&e.preventDefault()}function ht(e){g.handled=!1}function pt(e){clearTimeout(p),p=setTimeout(function(){var t=e.detail||-e.wheelDelta;t>0?at():ut()},100)}function dt(e){var n=k(document.querySelectorAll(t)).length,r=Math.floor(e.clientX/l.wrapper.offsetWidth*n);V(r)}function vt(e){G()}function mt(e){P()}function gt(e){if(q()){e.preventDefault(),F();var t=e.target;while(t&&!t.nodeName.match(/section/gi))t=t.parentNode;if(t.nodeName.match(/section/gi)){var n=parseInt(t.getAttribute("data-index-h"),10),r=parseInt(t.getAttribute("data-index-v"),10);V(n,r)}}}var e=".reveal .slides section",t=".reveal .slides>section",n=".reveal .slides>section.present>section",r={controls:!0,progress:!0,history:!1,keyboard:!0,overview:!0,center:!0,loop:!1,rtl:!1,autoSlide:0,mouseWheel:!1,rollingLinks:!0,theme:null,transition:"default",dependencies:[]},i=r.autoSlide,s=0,o=0,u,a,f=[],l={},c="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,h="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,p=0,d=0,v=0,m=0,g={startX:0,startY:0,startSpan:0,startCount:0,handled:!1,threshold:80};return{initialize:y,slide:V,left:rt,right:it,up:st,down:ot,prev:ut,next:at,prevFragment:tt,nextFragment:et,navigateTo:V,navigateLeft:rt,navigateRight:it,navigateUp:st,navigateDown:ot,navigatePrev:ut,navigateNext:at,toggleOverview:I,addEventListeners:T,removeEventListeners:N,getIndices:Z,getPreviousSlide:function(){return u},getCurrentSlide:function(){return a},getQueryHash:function(){var e={};return location.search.replace(/[A-Z0-9]+?=(\w*)/gi,function(t){e[t.split("=").shift()]=t.split("=").pop()}),e},addEventListener:function(e,t,n){"addEventListener"in window&&(l.wrapper||document.querySelector(".reveal")).addEventListener(e,t,n)},removeEventListener:function(e,t,n){"addEventListener"in window&&(l.wrapper||document.querySelector(".reveal")).removeEventListener(e,t,n)}}}(); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Introduction to Haskell 2 | 3 | View the [syllabus](http://people.virginia.edu/~ns4av/syllabus/). 4 | 5 | ### L01 - Intro and theory 6 | 7 | ### L02 - Lists, Tuples 8 | 9 | ### L03 - Data Types and Typeclasses 10 | 11 | ### L04 - Pattern matching, Guards, and Syntax 12 | 13 | ### L05 - Constructing a Type 14 | 15 | ### L06 - Maps, Folds, and Beyond 16 | 17 | ### L07 - The Prolific Haskell Community 18 | 19 | ### L08 - Input/Output 20 | 21 | ### L09 - Monads (http://twit.tv/show/floss-weekly/236 18:00) 22 | 23 | ### L10 - 24 | 25 | ### L11 - Yesod / Haskell Web Frameworks / C++, Java integration? 26 | 27 | ### L12 - Category Theory? 28 | 29 | 30 | ## License 31 | 32 | MIT licensed 33 | 34 | Copyright (C) 2012-2013 Nishant Shukla, http://shuklan.com 35 | 36 | 37 | 38 | # reveal.js 39 | 40 | A framework for easily creating beautiful presentations using HTML. [Check out the live demo](http://lab.hakim.se/reveal-js/). 41 | 42 | reveal.js comes with a broad range of features including [nested slides](https://github.com/hakimel/reveal.js#markup), [markdown contents](https://github.com/hakimel/reveal.js#markdown), [PDF export](https://github.com/hakimel/reveal.js#pdf-export), [speaker notes](https://github.com/hakimel/reveal.js#speaker-notes) and a [JavaScript API](https://github.com/hakimel/reveal.js#api). It's best viewed in a browser with support for CSS 3D transforms but [fallbacks](https://github.com/hakimel/reveal.js/wiki/Browser-Support) are available to make sure your presentation can still be viewed elsewhere. 43 | 44 | 45 | #### More reading in the Wiki: 46 | - [Changelog](https://github.com/hakimel/reveal.js/wiki/Changelog): Up-to-date version history. 47 | - [Examples](https://github.com/hakimel/reveal.js/wiki/Example-Presentations): Presentations created with reveal.js, add your own! 48 | - [Browser Support](https://github.com/hakimel/reveal.js/wiki/Browser-Support): Explanation of browser support and fallbacks. 49 | 50 | ## rvl.io 51 | 52 | Slides are written using HTML or markdown but there's also an online editor for those of you who prefer a more traditional user interface. Give it a try at [www.rvl.io](http://www.rvl.io). 53 | 54 | 55 | ## Instructions 56 | 57 | ### Markup 58 | 59 | Markup heirarchy needs to be ``
    `` where the ``
    `` represents one slide and can be repeated indefinitely. If you place multiple ``
    ``'s inside of another ``
    `` they will be shown as vertical slides. The first of the vertical slides is the "root" of the others (at the top), and it will be included in the horizontal sequence. For example: 60 | 61 | ```html 62 |
    63 |
    64 |
    Single Horizontal Slide
    65 |
    66 |
    Vertical Slide 1
    67 |
    Vertical Slide 2
    68 |
    69 |
    70 |
    71 | ``` 72 | 73 | ### Markdown 74 | 75 | It's possible to write your slides using Markdown. To enable Markdown, add the ```data-markdown``` attribute to your ```
    ``` elements and wrap the contents in a ``` 86 |
    87 | ``` 88 | 89 | 90 | ### Configuration 91 | 92 | At the end of your page you need to initialize reveal by running the following code. Note that all config values are optional and will default as specified below. 93 | 94 | ```javascript 95 | Reveal.initialize({ 96 | // Display controls in the bottom right corner 97 | controls: true, 98 | 99 | // Display a presentation progress bar 100 | progress: true, 101 | 102 | // Push each slide change to the browser history 103 | history: false, 104 | 105 | // Enable keyboard shortcuts for navigation 106 | keyboard: true, 107 | 108 | // Enable the slide overview mode 109 | overview: true, 110 | 111 | // Vertical centering of slides 112 | center: true, 113 | 114 | // Loop the presentation 115 | loop: false, 116 | 117 | // Change the presentation direction to be RTL 118 | rtl: false, 119 | 120 | // Number of milliseconds between automatically proceeding to the 121 | // next slide, disabled when set to 0, this value can be overwritten 122 | // by using a data-autoslide attribute on your slides 123 | autoSlide: 0, 124 | 125 | // Enable slide navigation via mouse wheel 126 | mouseWheel: false, 127 | 128 | // Apply a 3D roll to links on hover 129 | rollingLinks: true, 130 | 131 | // Transition style 132 | transition: 'default' // default/cube/page/concave/zoom/linear/none 133 | }); 134 | ``` 135 | 136 | Note that the new default vertical centering option will break compatibility with slides that were using transitions with backgrounds (`cube` and `page`). To restore the previous behavior, set `center` to `false`. 137 | 138 | ### Dependencies 139 | 140 | Reveal.js doesn't _rely_ on any third party scripts to work but a few optional libraries are included by default. These libraries are loaded as dependencies in the order they appear, for example: 141 | 142 | ```javascript 143 | Reveal.initialize({ 144 | dependencies: [ 145 | // Cross-browser shim that fully implements classList - https://github.com/eligrey/classList.js/ 146 | { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, 147 | 148 | // Interpret Markdown in
    elements 149 | { src: 'plugin/markdown/showdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, 150 | { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, 151 | 152 | // Syntax highlight for elements 153 | { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, 154 | 155 | // Zoom in and out with Alt+click 156 | { src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } }, 157 | 158 | // Speaker notes 159 | { src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }, 160 | 161 | // Remote control your reveal.js presentation using a touch device 162 | { src: 'plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } } 163 | ] 164 | }); 165 | ``` 166 | 167 | You can add your own extensions using the same syntax. The following properties are available for each dependency object: 168 | - **src**: Path to the script to load 169 | - **async**: [optional] Flags if the script should load after reveal.js has started, defaults to false 170 | - **callback**: [optional] Function to execute when the script has loaded 171 | - **condition**: [optional] Function which must return true for the script to be loaded 172 | 173 | 174 | ### API 175 | 176 | The Reveal class provides a minimal JavaScript API for controlling navigation and reading state: 177 | 178 | ```javascript 179 | // Navigation 180 | Reveal.slide( indexh, indexv, indexf ); 181 | Reveal.left(); 182 | Reveal.right(); 183 | Reveal.up(); 184 | Reveal.down(); 185 | Reveal.prev(); 186 | Reveal.next(); 187 | Reveal.prevFragment(); 188 | Reveal.nextFragment(); 189 | Reveal.toggleOverview(); 190 | 191 | // Retrieves the previous and current slide elements 192 | Reveal.getPreviousSlide(); 193 | Reveal.getCurrentSlide(); 194 | 195 | Reveal.getIndices(); // { h: 0, v: 0 } } 196 | ``` 197 | 198 | ### States 199 | 200 | If you set ``data-state="somestate"`` on a slide ``
    ``, "somestate" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide. 201 | 202 | Furthermore you can also listen to these changes in state via JavaScript: 203 | 204 | ```javascript 205 | Reveal.addEventListener( 'somestate', function() { 206 | // TODO: Sprinkle magic 207 | }, false ); 208 | ``` 209 | 210 | ### Ready event 211 | 212 | The 'ready' event is fired when reveal.js has loaded all (synchronous) dependencies and is ready to start navigating. 213 | 214 | ```javascript 215 | Reveal.addEventListener( 'ready', function( event ) { 216 | // event.currentSlide, event.indexh, event.indexv 217 | } ); 218 | ``` 219 | 220 | ### Slide change event 221 | 222 | An 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index values of the current slide as well as a reference to the previous and current slide HTML nodes. 223 | 224 | Some libraries, like MathJax (see [#226](https://github.com/hakimel/reveal.js/issues/226#issuecomment-10261609)), get confused by the transforms and display states of slides. Often times, this can be fixed by calling their update or render function from this callback. 225 | 226 | ```javascript 227 | Reveal.addEventListener( 'slidechanged', function( event ) { 228 | // event.previousSlide, event.currentSlide, event.indexh, event.indexv 229 | } ); 230 | ``` 231 | 232 | ### Internal links 233 | 234 | It's easy to link between slides. The first example below targets the index of another slide whereas the second targets a slide with an ID attribute (```
    ```): 235 | 236 | ```html 237 | Link 238 | Link 239 | ``` 240 | 241 | You can also add relative navigation links, similar to the built in reveal.js controls, by appending one of the following classes on any element. Note that each element is automatically given an ```enabled``` class when it's a valid navigation route based on the current slide. 242 | 243 | ```html 244 | 245 | 246 | 247 | 248 | 249 | 250 | ``` 251 | 252 | 253 | ### Fragments 254 | Fragments are used to highlight individual elements on a slide. Every elmement with the class ```fragment``` will be stepped through before moving on to the next slide. Here's an example: http://lab.hakim.se/reveal-js/#/16 255 | 256 | The default fragment style is to start out invisible and fade in. This style can be changed by appending a different class to the fragment: 257 | 258 | ```html 259 |
    260 |

    grow

    261 |

    shrink

    262 |

    roll-in

    263 |

    fade-out

    264 |

    highlight-red

    265 |

    highlight-green

    266 |

    highlight-blue

    267 |
    268 | ``` 269 | 270 | Multiple fragments can be applied to the same element sequentially by wrapping it, this will fade in the text on the first step and fade it back out on the second. 271 | 272 | ```html 273 |
    274 | 275 | I'll fade in, then out 276 | 277 |
    278 | ``` 279 | 280 | ### Fragment events 281 | 282 | When a slide fragment is either shown or hidden reveal.js will dispatch an event. 283 | 284 | ```javascript 285 | Reveal.addEventListener( 'fragmentshown', function( event ) { 286 | // event.fragment = the fragment DOM element 287 | } ); 288 | Reveal.addEventListener( 'fragmenthidden', function( event ) { 289 | // event.fragment = the fragment DOM element 290 | } ); 291 | ``` 292 | 293 | ### Overview mode 294 | 295 | Press "Esc" key to toggle the overview mode on and off. While you're in this mode, you can still navigate between slides, 296 | as if you were at 1,000 feet above your presentation. 297 | 298 | ### Fullscreen mode 299 | Just press »F« on your keyboard to show your presentation in fullscreen mode. Press the »ESC« key to exit fullscreen mode. 300 | 301 | 302 | ## PDF Export 303 | 304 | Presentations can be exported to PDF via a special print stylesheet. This feature requires that you use [Google Chrome](http://google.com/chrome). 305 | Here's an example of an exported presentation that's been uploaded to SlideShare: http://www.slideshare.net/hakimel/revealjs-13872948. 306 | 307 | 1. Open your presentation with [css/print/pdf.css](https://github.com/hakimel/reveal.js/blob/master/css/print/pdf.css) included on the page. The default index HTML lets you add *print-pdf* anywhere in the query to include the stylesheet, for example: [lab.hakim.se/reveal-js?print-pdf](http://lab.hakim.se/reveal-js?print-pdf). 308 | 2. Open the in-browser print dialog (CMD+P). 309 | 3. Change the **Destination** setting to **Save as PDF**. 310 | 4. Change the **Layout** to **Landscape**. 311 | 5. Change the **Margins** to **None**. 312 | 6. Click **Save**. 313 | 314 | ![Chrome Print Settings](https://s3.amazonaws.com/hakim-static/reveal-js/pdf-print-settings.png) 315 | 316 | 317 | ## Speaker Notes 318 | 319 | reveal.js comes with a speaker notes plugin which can be used to present per-slide notes in a separate browser window. The notes window also gives you a preview of the next upcoming slide so it may be helpful even if you haven't written any notes. Append ```?notes``` to presentation URL or press the 's' key on your keyboard to open the notes window. 320 | 321 | By default notes are written using standard HTML, see below, but you can add a ```data-markdown``` attribute to the ```