├── images
├── fits-logo.png
├── nailgun.jpg
├── visualvm.png
└── archivematica-big.png
├── test
├── examples
│ ├── assets
│ │ ├── image1.png
│ │ └── image2.png
│ ├── barebones.html
│ ├── embedded-media.html
│ ├── slide-backgrounds.html
│ └── math.html
├── test-markdown.js
├── test-markdown.html
├── test.html
├── test-markdown-element-attributes.js
├── test-markdown-slide-attributes.js
├── test-markdown-slide-attributes.html
├── test-markdown-element-attributes.html
└── qunit-1.12.0.css
├── lib
├── font
│ ├── league_gothic-webfont.eot
│ ├── league_gothic-webfont.ttf
│ ├── league_gothic-webfont.woff
│ └── league_gothic_license
├── js
│ ├── html5shiv.js
│ ├── classList.js
│ └── head.min.js
└── css
│ └── zenburn.css
├── plugin
├── markdown
│ ├── example.md
│ ├── example.html
│ ├── markdown.js
│ └── marked.js
├── multiplex
│ ├── client.js
│ ├── master.js
│ └── index.js
├── print-pdf
│ └── print-pdf.js
├── postmessage
│ ├── postmessage.js
│ └── example.html
├── remotes
│ └── remotes.js
├── math
│ └── math.js
├── notes-server
│ ├── client.js
│ ├── index.js
│ └── notes.html
├── notes
│ ├── notes.js
│ └── notes.html
├── search
│ └── search.js
└── zoom-js
│ └── zoom.js
├── css
├── theme
│ ├── template
│ │ ├── settings.scss
│ │ ├── mixins.scss
│ │ └── theme.scss
│ ├── source
│ │ ├── night.scss
│ │ ├── serif.scss
│ │ ├── simple.scss
│ │ ├── sky.scss
│ │ ├── default.scss
│ │ ├── beige.scss
│ │ ├── moon.scss
│ │ ├── solarized.scss
│ │ └── blood.scss
│ ├── README.md
│ ├── night.css
│ ├── serif.css
│ ├── simple.css
│ ├── moon.css
│ ├── solarized.css
│ ├── sky.css
│ ├── beige.css
│ ├── default.css
│ └── blood.css
└── print
│ ├── pdf.css
│ └── paper.css
├── LICENSE
├── package.json
├── Gruntfile.js
└── index.html
/images/fits-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/images/fits-logo.png
--------------------------------------------------------------------------------
/images/nailgun.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/images/nailgun.jpg
--------------------------------------------------------------------------------
/images/visualvm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/images/visualvm.png
--------------------------------------------------------------------------------
/images/archivematica-big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/images/archivematica-big.png
--------------------------------------------------------------------------------
/test/examples/assets/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/test/examples/assets/image1.png
--------------------------------------------------------------------------------
/test/examples/assets/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/test/examples/assets/image2.png
--------------------------------------------------------------------------------
/lib/font/league_gothic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/lib/font/league_gothic-webfont.eot
--------------------------------------------------------------------------------
/lib/font/league_gothic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/lib/font/league_gothic-webfont.ttf
--------------------------------------------------------------------------------
/lib/font/league_gothic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mistydemeo/c4lbc14-fits/gh-pages/lib/font/league_gothic-webfont.woff
--------------------------------------------------------------------------------
/lib/font/league_gothic_license:
--------------------------------------------------------------------------------
1 | SIL Open Font License (OFL)
2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
3 |
--------------------------------------------------------------------------------
/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');
--------------------------------------------------------------------------------
/test/test-markdown.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | Reveal.addEventListener( 'ready', function() {
4 |
5 | QUnit.module( 'Markdown' );
6 |
7 | test( 'Vertical separator', function() {
8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
9 | });
10 |
11 |
12 | } );
13 |
14 | Reveal.initialize();
15 |
16 |
--------------------------------------------------------------------------------
/plugin/markdown/example.md:
--------------------------------------------------------------------------------
1 | # Markdown Demo
2 |
3 |
4 |
5 | ## External 1.1
6 |
7 | Content 1.1
8 |
9 | Note: This will only appear in the speaker notes window.
10 |
11 |
12 | ## External 1.2
13 |
14 | Content 1.2
15 |
16 |
17 |
18 | ## External 2
19 |
20 | Content 2.1
21 |
22 |
23 |
24 | ## External 3.1
25 |
26 | Content 3.1
27 |
28 |
29 | ## External 3.2
30 |
31 | Content 3.2
32 |
--------------------------------------------------------------------------------
/plugin/multiplex/client.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var multiplex = Reveal.getConfig().multiplex;
3 | var socketId = multiplex.id;
4 | var socket = io.connect(multiplex.url);
5 |
6 | socket.on(multiplex.id, function(data) {
7 | // ignore data from sockets that aren't ours
8 | if (data.socketId !== socketId) { return; }
9 | if( window.location.host === 'localhost:1947' ) return;
10 |
11 | Reveal.slide(data.indexh, data.indexv, data.indexf, 'remote');
12 | });
13 | }());
14 |
--------------------------------------------------------------------------------
/test/examples/barebones.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Barebones
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Barebones Presentation
20 | This example contains the bare minimum includes and markup required to run a reveal.js presentation.
21 |
22 |
23 |
24 | No Theme
25 | There's no theme included, so it will fall back on browser defaults.
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/css/theme/template/settings.scss:
--------------------------------------------------------------------------------
1 | // Base settings for all themes that can optionally be
2 | // overridden by the super-theme
3 |
4 | // Background of the presentation
5 | $backgroundColor: #2b2b2b;
6 |
7 | // Primary/body text
8 | $mainFont: 'Lato', sans-serif;
9 | $mainFontSize: 36px;
10 | $mainColor: #eee;
11 |
12 | // Headings
13 | $headingMargin: 0 0 20px 0;
14 | $headingFont: 'League Gothic', Impact, sans-serif;
15 | $headingColor: #eee;
16 | $headingLineHeight: 0.9em;
17 | $headingLetterSpacing: 0.02em;
18 | $headingTextTransform: uppercase;
19 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2);
20 | $heading1TextShadow: $headingTextShadow;
21 |
22 | // Links and actions
23 | $linkColor: #13DAEC;
24 | $linkColorHover: lighten( $linkColor, 20% );
25 |
26 | // Text selection
27 | $selectionBackgroundColor: #FF5E99;
28 | $selectionColor: #fff;
29 |
30 | // Generates the presentation background, can be overridden
31 | // to return a background image or gradient
32 | @mixin bodyBackground() {
33 | background: $backgroundColor;
34 | }
--------------------------------------------------------------------------------
/plugin/print-pdf/print-pdf.js:
--------------------------------------------------------------------------------
1 | /**
2 | * phantomjs script for printing presentations to PDF.
3 | *
4 | * Example:
5 | * phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf
6 | *
7 | * By Manuel Bieh (https://github.com/manuelbieh)
8 | */
9 |
10 | // html2pdf.js
11 | var page = new WebPage();
12 | var system = require( 'system' );
13 |
14 | page.viewportSize = {
15 | width: 1024,
16 | height: 768
17 | };
18 |
19 | page.paperSize = {
20 | format: 'letter',
21 | orientation: 'landscape',
22 | margin: {
23 | left: '0',
24 | right: '0',
25 | top: '0',
26 | bottom: '0'
27 | }
28 | };
29 |
30 | var revealFile = system.args[1] || 'index.html?print-pdf';
31 | var slideFile = system.args[2] || 'slides.pdf';
32 |
33 | if( slideFile.match( /\.pdf$/gi ) === null ) {
34 | slideFile += '.pdf';
35 | }
36 |
37 | console.log( 'Printing PDF...' );
38 |
39 | page.open( revealFile, function( status ) {
40 | console.log( 'Printed succesfully' );
41 | page.render( slideFile );
42 | phantom.exit();
43 | } );
44 |
45 |
--------------------------------------------------------------------------------
/css/theme/source/night.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Black theme for reveal.js.
3 | *
4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @import "../template/mixins";
10 | @import "../template/settings";
11 | // ---------------------------------------------
12 |
13 |
14 | // Include theme-specific fonts
15 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700);
16 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
17 |
18 |
19 | // Override theme settings (see ../template/settings.scss)
20 | $backgroundColor: #111;
21 |
22 | $mainFont: 'Open Sans', sans-serif;
23 | $linkColor: #e7ad52;
24 | $linkColorHover: lighten( $linkColor, 20% );
25 | $headingFont: 'Montserrat', Impact, sans-serif;
26 | $headingTextShadow: none;
27 | $headingLetterSpacing: -0.03em;
28 | $headingTextTransform: none;
29 | $selectionBackgroundColor: #e7ad52;
30 | $mainFontSize: 30px;
31 |
32 |
33 | // Theme template ------------------------------
34 | @import "../template/theme";
35 | // ---------------------------------------------
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (C) 2014 Hakim El Hattab, http://hakim.se
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/plugin/postmessage/postmessage.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | simple postmessage plugin
4 |
5 | Useful when a reveal slideshow is inside an iframe.
6 | It allows to call reveal methods from outside.
7 |
8 | Example:
9 | var reveal = window.frames[0];
10 |
11 | // Reveal.prev();
12 | reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*');
13 | // Reveal.next();
14 | reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*');
15 | // Reveal.slide(2, 2);
16 | reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*');
17 |
18 | Add to the slideshow:
19 |
20 | dependencies: [
21 | ...
22 | { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } }
23 | ]
24 |
25 | */
26 |
27 | (function (){
28 |
29 | window.addEventListener( "message", function ( event ) {
30 | var data = JSON.parse( event.data ),
31 | method = data.method,
32 | args = data.args;
33 |
34 | if( typeof Reveal[method] === 'function' ) {
35 | Reveal[method].apply( Reveal, data.args );
36 | }
37 | }, false);
38 |
39 | }());
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/test/examples/embedded-media.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Embedded Media
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Embedded Media Test
23 |
24 |
25 |
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/css/theme/source/serif.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is brown.
4 | *
5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.
6 | */
7 |
8 |
9 | // Default mixins and settings -----------------
10 | @import "../template/mixins";
11 | @import "../template/settings";
12 | // ---------------------------------------------
13 |
14 |
15 |
16 | // Override theme settings (see ../template/settings.scss)
17 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
18 | $mainColor: #000;
19 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
20 | $headingColor: #383D3D;
21 | $headingTextShadow: none;
22 | $headingTextTransform: none;
23 | $backgroundColor: #F0F1EB;
24 | $linkColor: #51483D;
25 | $linkColorHover: lighten( $linkColor, 20% );
26 | $selectionBackgroundColor: #26351C;
27 |
28 | .reveal a:not(.image) {
29 | line-height: 1.3em;
30 | }
31 |
32 |
33 | // Theme template ------------------------------
34 | @import "../template/theme";
35 | // ---------------------------------------------
36 |
--------------------------------------------------------------------------------
/plugin/postmessage/example.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reveal.js",
3 | "version": "2.6.2",
4 | "description": "The HTML Presentation Framework",
5 | "homepage": "http://lab.hakim.se/reveal-js",
6 | "subdomain": "revealjs",
7 | "scripts": {
8 | "test": "grunt test",
9 | "start": ""
10 | },
11 | "author": {
12 | "name": "Hakim El Hattab",
13 | "email": "hakim.elhattab@gmail.com",
14 | "web": "http://hakim.se"
15 | },
16 | "repository": {
17 | "type": "git",
18 | "url": "git://github.com/hakimel/reveal.js.git"
19 | },
20 | "engines": {
21 | "node": "~0.8.0"
22 | },
23 | "dependencies": {
24 | "underscore": "~1.5.1",
25 | "express": "~2.5.9",
26 | "mustache": "~0.7.2",
27 | "socket.io": "~0.9.13"
28 | },
29 | "devDependencies": {
30 | "grunt-contrib-qunit": "~0.2.2",
31 | "grunt-contrib-jshint": "~0.6.4",
32 | "grunt-contrib-cssmin": "~0.4.1",
33 | "grunt-contrib-uglify": "~0.2.4",
34 | "grunt-contrib-watch": "~0.5.3",
35 | "grunt-contrib-sass": "~0.5.0",
36 | "grunt-contrib-connect": "~0.4.1",
37 | "grunt-zip": "~0.7.0",
38 | "grunt": "~0.4.0"
39 | },
40 | "licenses": [
41 | {
42 | "type": "MIT",
43 | "url": "https://github.com/hakimel/reveal.js/blob/master/LICENSE"
44 | }
45 | ]
46 | }
47 |
--------------------------------------------------------------------------------
/css/theme/source/simple.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is darkblue.
4 | *
5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 |
9 |
10 | // Default mixins and settings -----------------
11 | @import "../template/mixins";
12 | @import "../template/settings";
13 | // ---------------------------------------------
14 |
15 |
16 |
17 | // Include theme-specific fonts
18 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
20 |
21 |
22 | // Override theme settings (see ../template/settings.scss)
23 | $mainFont: 'Lato', sans-serif;
24 | $mainColor: #000;
25 | $headingFont: 'News Cycle', Impact, sans-serif;
26 | $headingColor: #000;
27 | $headingTextShadow: none;
28 | $headingTextTransform: none;
29 | $backgroundColor: #fff;
30 | $linkColor: #00008B;
31 | $linkColorHover: lighten( $linkColor, 20% );
32 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99);
33 |
34 |
35 |
36 | // Theme template ------------------------------
37 | @import "../template/theme";
38 | // ---------------------------------------------
--------------------------------------------------------------------------------
/css/theme/source/sky.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Sky theme for reveal.js.
3 | *
4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
5 | */
6 |
7 |
8 | // Default mixins and settings -----------------
9 | @import "../template/mixins";
10 | @import "../template/settings";
11 | // ---------------------------------------------
12 |
13 |
14 |
15 | // Include theme-specific fonts
16 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
17 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
18 |
19 |
20 | // Override theme settings (see ../template/settings.scss)
21 | $mainFont: 'Open Sans', sans-serif;
22 | $mainColor: #333;
23 | $headingFont: 'Quicksand', sans-serif;
24 | $headingColor: #333;
25 | $headingLetterSpacing: -0.08em;
26 | $headingTextShadow: none;
27 | $backgroundColor: #f7fbfc;
28 | $linkColor: #3b759e;
29 | $linkColorHover: lighten( $linkColor, 20% );
30 | $selectionBackgroundColor: #134674;
31 |
32 | // Fix links so they are not cut off
33 | .reveal a:not(.image) {
34 | line-height: 1.3em;
35 | }
36 |
37 | // Background generator
38 | @mixin bodyBackground() {
39 | @include radial-gradient( #add9e4, #f7fbfc );
40 | }
41 |
42 |
43 |
44 | // Theme template ------------------------------
45 | @import "../template/theme";
46 | // ---------------------------------------------
47 |
--------------------------------------------------------------------------------
/test/test-markdown.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Markdown
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/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
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Tests
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
25 |
26 |
37 |
38 |
39 |
40 | 3.1
41 |
42 | - 4.1
43 | - 4.2
44 | - 4.3
45 |
46 |
47 |
48 |
55 |
56 |
57 | 3.3
58 |
59 | - 3.3.1
60 | - 3.3.2
61 | - 3.3.3
62 |
63 |
64 |
65 |
66 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/css/theme/source/moon.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Solarized Dark theme for reveal.js.
3 | * Author: Achim Staebler
4 | */
5 |
6 |
7 | // Default mixins and settings -----------------
8 | @import "../template/mixins";
9 | @import "../template/settings";
10 | // ---------------------------------------------
11 |
12 |
13 |
14 | // Include theme-specific fonts
15 | @font-face {
16 | font-family: 'League Gothic';
17 | src: url('../../lib/font/league_gothic-webfont.eot');
18 | src: url('../../lib/font/league_gothic-webfont.eot?#iefix') format('embedded-opentype'),
19 | url('../../lib/font/league_gothic-webfont.woff') format('woff'),
20 | url('../../lib/font/league_gothic-webfont.ttf') format('truetype'),
21 | url('../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular') format('svg');
22 |
23 | font-weight: normal;
24 | font-style: normal;
25 | }
26 |
27 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
28 |
29 | /**
30 | * Solarized colors by Ethan Schoonover
31 | */
32 | html * {
33 | color-profile: sRGB;
34 | rendering-intent: auto;
35 | }
36 |
37 | // Solarized colors
38 | $base03: #002b36;
39 | $base02: #073642;
40 | $base01: #586e75;
41 | $base00: #657b83;
42 | $base0: #839496;
43 | $base1: #93a1a1;
44 | $base2: #eee8d5;
45 | $base3: #fdf6e3;
46 | $yellow: #b58900;
47 | $orange: #cb4b16;
48 | $red: #dc322f;
49 | $magenta: #d33682;
50 | $violet: #6c71c4;
51 | $blue: #268bd2;
52 | $cyan: #2aa198;
53 | $green: #859900;
54 |
55 | // Override theme settings (see ../template/settings.scss)
56 | $mainColor: $base1;
57 | $headingColor: $base2;
58 | $headingTextShadow: none;
59 | $backgroundColor: $base03;
60 | $linkColor: $blue;
61 | $linkColorHover: lighten( $linkColor, 20% );
62 | $selectionBackgroundColor: $magenta;
63 |
64 |
65 |
66 | // Theme template ------------------------------
67 | @import "../template/theme";
68 | // ---------------------------------------------
69 |
--------------------------------------------------------------------------------
/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 | res.writeHead(200, {'Content-Type': 'text/html'});
34 | fs.createReadStream(opts.baseDir + '/index.html').pipe(res);
35 | });
36 |
37 | app.get("/notes/:socketId", function(req, res) {
38 |
39 | fs.readFile(opts.baseDir + 'plugin/notes-server/notes.html', function(err, data) {
40 | res.send(Mustache.to_html(data.toString(), {
41 | socketId : req.params.socketId
42 | }));
43 | });
44 | // fs.createReadStream(opts.baseDir + 'notes-server/notes.html').pipe(res);
45 | });
46 |
47 | // Actually listen
48 | app.listen(opts.port || null);
49 |
50 | var brown = '\033[33m',
51 | green = '\033[32m',
52 | reset = '\033[0m';
53 |
54 | var slidesLocation = "http://localhost" + ( opts.port ? ( ':' + opts.port ) : '' );
55 |
56 | console.log( brown + "reveal.js - Speaker Notes" + reset );
57 | console.log( "1. Open the slides at " + green + slidesLocation + reset );
58 | console.log( "2. Click on the link your JS console to go to the notes page" );
59 | console.log( "3. Advance through your slides and your notes will advance automatically" );
60 |
--------------------------------------------------------------------------------
/css/theme/source/solarized.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Solarized Light theme for reveal.js.
3 | * Author: Achim Staebler
4 | */
5 |
6 |
7 | // Default mixins and settings -----------------
8 | @import "../template/mixins";
9 | @import "../template/settings";
10 | // ---------------------------------------------
11 |
12 |
13 |
14 | // Include theme-specific fonts
15 | @font-face {
16 | font-family: 'League Gothic';
17 | src: url('../../lib/font/league_gothic-webfont.eot');
18 | src: url('../../lib/font/league_gothic-webfont.eot?#iefix') format('embedded-opentype'),
19 | url('../../lib/font/league_gothic-webfont.woff') format('woff'),
20 | url('../../lib/font/league_gothic-webfont.ttf') format('truetype'),
21 | url('../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular') format('svg');
22 |
23 | font-weight: normal;
24 | font-style: normal;
25 | }
26 |
27 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
28 |
29 |
30 | /**
31 | * Solarized colors by Ethan Schoonover
32 | */
33 | html * {
34 | color-profile: sRGB;
35 | rendering-intent: auto;
36 | }
37 |
38 | // Solarized colors
39 | $base03: #002b36;
40 | $base02: #073642;
41 | $base01: #586e75;
42 | $base00: #657b83;
43 | $base0: #839496;
44 | $base1: #93a1a1;
45 | $base2: #eee8d5;
46 | $base3: #fdf6e3;
47 | $yellow: #b58900;
48 | $orange: #cb4b16;
49 | $red: #dc322f;
50 | $magenta: #d33682;
51 | $violet: #6c71c4;
52 | $blue: #268bd2;
53 | $cyan: #2aa198;
54 | $green: #859900;
55 |
56 | // Override theme settings (see ../template/settings.scss)
57 | $mainColor: $base00;
58 | $headingColor: $base01;
59 | $headingTextShadow: none;
60 | $backgroundColor: $base3;
61 | $linkColor: $blue;
62 | $linkColorHover: lighten( $linkColor, 20% );
63 | $selectionBackgroundColor: $magenta;
64 |
65 | // Background generator
66 | // @mixin bodyBackground() {
67 | // @include radial-gradient( rgba($base3,1), rgba(lighten($base3, 20%),1) );
68 | // }
69 |
70 |
71 |
72 | // Theme template ------------------------------
73 | @import "../template/theme";
74 | // ---------------------------------------------
75 |
--------------------------------------------------------------------------------
/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 .css .class,
17 | pre .css .id,
18 | pre .lisp .title,
19 | pre .nginx .title,
20 | pre .request,
21 | pre .status,
22 | pre .clojure .attribute {
23 | color: #E3CEAB;
24 | }
25 |
26 | pre .django .template_tag,
27 | pre .django .variable,
28 | pre .django .filter .argument {
29 | color: #DCDCDC;
30 | }
31 |
32 | pre .number,
33 | pre .date {
34 | color: #8CD0D3;
35 | }
36 |
37 | pre .dos .envvar,
38 | pre .dos .stream,
39 | pre .variable,
40 | pre .apache .sqbracket {
41 | color: #EFDCBC;
42 | }
43 |
44 | pre .dos .flow,
45 | pre .diff .change,
46 | pre .python .exception,
47 | pre .python .built_in,
48 | pre .literal,
49 | pre .tex .special {
50 | color: #EFEFAF;
51 | }
52 |
53 | pre .diff .chunk,
54 | pre .subst {
55 | color: #8F8F8F;
56 | }
57 |
58 | pre .dos .keyword,
59 | pre .python .decorator,
60 | pre .title,
61 | pre .haskell .type,
62 | pre .diff .header,
63 | pre .ruby .class .parent,
64 | pre .apache .tag,
65 | pre .nginx .built_in,
66 | pre .tex .command,
67 | pre .prompt {
68 | color: #efef8f;
69 | }
70 |
71 | pre .dos .winutils,
72 | pre .ruby .symbol,
73 | pre .ruby .symbol .string,
74 | pre .ruby .string {
75 | color: #DCA3A3;
76 | }
77 |
78 | pre .diff .deletion,
79 | pre .string,
80 | pre .tag .value,
81 | pre .preprocessor,
82 | pre .built_in,
83 | pre .sql .aggregate,
84 | pre .javadoc,
85 | pre .smalltalk .class,
86 | pre .smalltalk .localvars,
87 | pre .smalltalk .array,
88 | pre .css .rules .value,
89 | pre .attr_selector,
90 | pre .pseudo,
91 | pre .apache .cbracket,
92 | pre .tex .formula {
93 | color: #CC9393;
94 | }
95 |
96 | pre .shebang,
97 | pre .diff .addition,
98 | pre .comment,
99 | pre .java .annotation,
100 | pre .template_comment,
101 | pre .pi,
102 | pre .doctype {
103 | color: #7F9F7F;
104 | }
105 |
106 | pre .coffeescript .javascript,
107 | pre .javascript .xml,
108 | pre .tex .formula,
109 | pre .xml .javascript,
110 | pre .xml .vbscript,
111 | pre .xml .css,
112 | pre .xml .cdata {
113 | opacity: 0.5;
114 | }
--------------------------------------------------------------------------------
/css/theme/source/blood.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Blood theme for reveal.js
3 | * Author: Walther http://github.com/Walther
4 | *
5 | * Designed to be used with highlight.js theme
6 | * "monokai_sublime.css" available from
7 | * https://github.com/isagalaev/highlight.js/
8 | *
9 | * For other themes, change $codeBackground accordingly.
10 | *
11 | */
12 |
13 | // Default mixins and settings -----------------
14 | @import "../template/mixins";
15 | @import "../template/settings";
16 | // ---------------------------------------------
17 |
18 | // Include theme-specific fonts
19 |
20 | @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
21 |
22 | // Colors used in the theme
23 | $blood: #a23;
24 | $coal: #222;
25 | $codeBackground: #23241f;
26 |
27 | // Main text
28 | $mainFont: Ubuntu, 'sans-serif';
29 | $mainFontSize: 36px;
30 | $mainColor: #eee;
31 |
32 | // Headings
33 | $headingFont: Ubuntu, 'sans-serif';
34 | $headingTextShadow: 2px 2px 2px $coal;
35 |
36 | // h1 shadow, borrowed humbly from
37 | // (c) Default theme by Hakim El Hattab
38 | $heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15);
39 |
40 | // Links
41 | $linkColor: $blood;
42 | $linkColorHover: lighten( $linkColor, 20% );
43 |
44 | // Text selection
45 | $selectionBackgroundColor: $blood;
46 | $selectionColor: #fff;
47 |
48 | // Background generator
49 | @mixin bodyBackground() {
50 | @include radial-gradient( $coal, lighten( $coal, 25% ) );
51 | }
52 |
53 | // Theme template ------------------------------
54 | @import "../template/theme";
55 | // ---------------------------------------------
56 |
57 | // some overrides after theme template import
58 |
59 | .reveal p {
60 | font-weight: 300;
61 | text-shadow: 1px 1px $coal;
62 | }
63 |
64 | .reveal h1,
65 | .reveal h2,
66 | .reveal h3,
67 | .reveal h4,
68 | .reveal h5,
69 | .reveal h6 {
70 | font-weight: 700;
71 | }
72 |
73 | .reveal a:not(.image),
74 | .reveal a:not(.image):hover {
75 | text-shadow: 2px 2px 2px #000;
76 | }
77 |
78 | .reveal small a:not(.image),
79 | .reveal small a:not(.image):hover {
80 | text-shadow: 1px 1px 1px #000;
81 | }
82 |
83 | .reveal p code {
84 | background-color: $codeBackground;
85 | display: inline-block;
86 | border-radius: 7px;
87 | }
88 |
89 | .reveal small code {
90 | vertical-align: baseline;
91 | }
--------------------------------------------------------------------------------
/plugin/notes/notes.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Handles opening of and synchronization with the reveal.js
3 | * notes window.
4 | */
5 | var RevealNotes = (function() {
6 |
7 | function openNotes() {
8 | var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
9 | jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
10 | var notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1120,height=850' );
11 |
12 | // Fires when slide is changed
13 | Reveal.addEventListener( 'slidechanged', post );
14 |
15 | // Fires when a fragment is shown
16 | Reveal.addEventListener( 'fragmentshown', post );
17 |
18 | // Fires when a fragment is hidden
19 | Reveal.addEventListener( 'fragmenthidden', post );
20 |
21 | /**
22 | * Posts the current slide data to the notes window
23 | */
24 | function post() {
25 | var slideElement = Reveal.getCurrentSlide(),
26 | slideIndices = Reveal.getIndices(),
27 | messageData;
28 |
29 | var notes = slideElement.querySelector( 'aside.notes' ),
30 | nextindexh,
31 | nextindexv;
32 |
33 | if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) {
34 | nextindexh = slideIndices.h;
35 | nextindexv = slideIndices.v + 1;
36 | } else {
37 | nextindexh = slideIndices.h + 1;
38 | nextindexv = 0;
39 | }
40 |
41 | messageData = {
42 | notes : notes ? notes.innerHTML : '',
43 | indexh : slideIndices.h,
44 | indexv : slideIndices.v,
45 | indexf : slideIndices.f,
46 | nextindexh : nextindexh,
47 | nextindexv : nextindexv,
48 | markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false
49 | };
50 |
51 | notesPopup.postMessage( JSON.stringify( messageData ), '*' );
52 | }
53 |
54 | // Navigate to the current slide when the notes are loaded
55 | notesPopup.addEventListener( 'load', function( event ) {
56 | post();
57 | }, false );
58 | }
59 |
60 | // If the there's a 'notes' query set, open directly
61 | if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
62 | openNotes();
63 | }
64 |
65 | // Open the notes when the 's' key is hit
66 | document.addEventListener( 'keydown', function( event ) {
67 | // Disregard the event if the target is editable or a
68 | // modifier is present
69 | if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
70 |
71 | if( event.keyCode === 83 ) {
72 | event.preventDefault();
73 | openNotes();
74 | }
75 | }, false );
76 |
77 | return { open: openNotes };
78 | })();
79 |
--------------------------------------------------------------------------------
/test/test-markdown-element-attributes.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | Reveal.addEventListener( 'ready', function() {
4 |
5 | QUnit.module( 'Markdown' );
6 |
7 | test( 'Vertical separator', function() {
8 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
9 | });
10 |
11 |
12 | test( 'Attributes on element header in vertical slides', function() {
13 | strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.fade-out' ).length, 1, 'found one vertical slide with class fragment.fade-out on header' );
14 | strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
15 | });
16 |
17 | test( 'Attributes on element paragraphs in vertical slides', function() {
18 | strictEqual( document.querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
19 | });
20 |
21 | test( 'Attributes on element list items in vertical slides', function() {
22 | strictEqual( document.querySelectorAll( '.reveal .slides section>section li.fragment.roll-in' ).length, 3, 'found a vertical slide with three list items with class fragment.roll-in' );
23 | });
24 |
25 | test( 'Attributes on element paragraphs in horizontal slides', function() {
26 | strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-red' ).length, 4, 'found a horizontal slide with four paragraphs with class fragment.grow' );
27 | });
28 | test( 'Attributes on element list items in horizontal slides', function() {
29 | strictEqual( document.querySelectorAll( '.reveal .slides section li.fragment.highlight-green' ).length, 5, 'found a horizontal slide with five list items with class fragment.roll-in' );
30 | });
31 | test( 'Attributes on element list items in horizontal slides', function() {
32 | strictEqual( document.querySelectorAll( '.reveal .slides section img.reveal.stretch' ).length, 1, 'found a horizontal slide with stretched image, class img.reveal.stretch' );
33 | });
34 |
35 | test( 'Attributes on elements in vertical slides with default element attribute separator', function() {
36 | strictEqual( document.querySelectorAll( '.reveal .slides section h2.fragment.highlight-red' ).length, 2, 'found two h2 titles with fragment highlight-red in vertical slides with default element attribute separator' );
37 | });
38 |
39 | test( 'Attributes on elements in single slides with default element attribute separator', function() {
40 | strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-blue' ).length, 3, 'found three elements with fragment highlight-blue in single slide with default element attribute separator' );
41 | });
42 |
43 | } );
44 |
45 | Reveal.initialize();
46 |
47 |
--------------------------------------------------------------------------------
/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;csection>section' ).length, 6, 'found six vertical slides' );
9 | });
10 |
11 | test( 'Id on slide', function() {
12 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section#slide2' ).length, 1, 'found one slide with id slide2' );
13 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
14 | });
15 |
16 | test( 'data-background attributes', function() {
17 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A0C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
18 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
19 | strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
20 | });
21 |
22 | test( 'data-transition attributes', function() {
23 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="zoom"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
24 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
25 | strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
26 | });
27 |
28 | test( 'data-background attributes with default separator', function() {
29 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A7C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
30 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
31 | strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
32 | });
33 |
34 | test( 'data-transition attributes with default separator', function() {
35 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="concave"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
36 | strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
37 | strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
38 | });
39 |
40 | test( 'data-transition attributes with inline content', function() {
41 | strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
42 | });
43 |
44 | } );
45 |
46 | Reveal.initialize();
47 |
48 |
--------------------------------------------------------------------------------
/test/test-markdown-slide-attributes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Markdown Attributes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
57 |
58 |
89 |
90 |
96 |
97 |
103 |
104 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | /* global module:false */
2 | module.exports = function(grunt) {
3 | var port = grunt.option('port') || 8000;
4 | // Project configuration
5 | grunt.initConfig({
6 | pkg: grunt.file.readJSON('package.json'),
7 | meta: {
8 | banner:
9 | '/*!\n' +
10 | ' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
11 | ' * http://lab.hakim.se/reveal-js\n' +
12 | ' * MIT licensed\n' +
13 | ' *\n' +
14 | ' * Copyright (C) 2014 Hakim El Hattab, http://hakim.se\n' +
15 | ' */'
16 | },
17 |
18 | qunit: {
19 | files: [ 'test/*.html' ]
20 | },
21 |
22 | uglify: {
23 | options: {
24 | banner: '<%= meta.banner %>\n'
25 | },
26 | build: {
27 | src: 'js/reveal.js',
28 | dest: 'js/reveal.min.js'
29 | }
30 | },
31 |
32 | cssmin: {
33 | compress: {
34 | files: {
35 | 'css/reveal.min.css': [ 'css/reveal.css' ]
36 | }
37 | }
38 | },
39 |
40 | sass: {
41 | main: {
42 | files: {
43 | 'css/theme/default.css': 'css/theme/source/default.scss',
44 | 'css/theme/beige.css': 'css/theme/source/beige.scss',
45 | 'css/theme/night.css': 'css/theme/source/night.scss',
46 | 'css/theme/serif.css': 'css/theme/source/serif.scss',
47 | 'css/theme/simple.css': 'css/theme/source/simple.scss',
48 | 'css/theme/sky.css': 'css/theme/source/sky.scss',
49 | 'css/theme/moon.css': 'css/theme/source/moon.scss',
50 | 'css/theme/solarized.css': 'css/theme/source/solarized.scss',
51 | 'css/theme/blood.css': 'css/theme/source/blood.scss'
52 | }
53 | }
54 | },
55 |
56 | jshint: {
57 | options: {
58 | curly: false,
59 | eqeqeq: true,
60 | immed: true,
61 | latedef: true,
62 | newcap: true,
63 | noarg: true,
64 | sub: true,
65 | undef: true,
66 | eqnull: true,
67 | browser: true,
68 | expr: true,
69 | globals: {
70 | head: false,
71 | module: false,
72 | console: false,
73 | unescape: false
74 | }
75 | },
76 | files: [ 'Gruntfile.js', 'js/reveal.js' ]
77 | },
78 |
79 | connect: {
80 | server: {
81 | options: {
82 | port: port,
83 | base: '.'
84 | }
85 | }
86 | },
87 |
88 | zip: {
89 | 'reveal-js-presentation.zip': [
90 | 'index.html',
91 | 'css/**',
92 | 'js/**',
93 | 'lib/**',
94 | 'images/**',
95 | 'plugin/**'
96 | ]
97 | },
98 |
99 | watch: {
100 | main: {
101 | files: [ 'Gruntfile.js', 'js/reveal.js', 'css/reveal.css' ],
102 | tasks: 'default'
103 | },
104 | theme: {
105 | files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ],
106 | tasks: 'themes'
107 | }
108 | }
109 |
110 | });
111 |
112 | // Dependencies
113 | grunt.loadNpmTasks( 'grunt-contrib-qunit' );
114 | grunt.loadNpmTasks( 'grunt-contrib-jshint' );
115 | grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
116 | grunt.loadNpmTasks( 'grunt-contrib-uglify' );
117 | grunt.loadNpmTasks( 'grunt-contrib-watch' );
118 | grunt.loadNpmTasks( 'grunt-contrib-sass' );
119 | grunt.loadNpmTasks( 'grunt-contrib-connect' );
120 | grunt.loadNpmTasks( 'grunt-zip' );
121 |
122 | // Default task
123 | grunt.registerTask( 'default', [ 'jshint', 'cssmin', 'uglify', 'qunit' ] );
124 |
125 | // Theme task
126 | grunt.registerTask( 'themes', [ 'sass' ] );
127 |
128 | // Package presentation to archive
129 | grunt.registerTask( 'package', [ 'default', 'zip' ] );
130 |
131 | // Serve presentation locally
132 | grunt.registerTask( 'serve', [ 'connect', 'watch' ] );
133 |
134 | // Run tests
135 | grunt.registerTask( 'test', [ 'jshint', 'qunit' ] );
136 |
137 | };
138 |
--------------------------------------------------------------------------------
/plugin/notes-server/notes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | reveal.js - Slide Notes
9 |
10 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | UPCOMING:
101 |
102 |
103 |
104 |
105 |
106 |
107 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/test/test-markdown-element-attributes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Test Markdown Element Attributes
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
74 |
75 |
76 |
77 |
91 |
92 |
99 |
100 |
109 |
110 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
--------------------------------------------------------------------------------
/test/examples/slide-backgrounds.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Slide Backgrounds
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | data-background: #00ffff
23 |
24 |
25 |
26 | data-background: #bb00bb
27 |
28 |
29 |
30 |
31 | data-background: #ff0000
32 |
33 |
34 | data-background: rgba(0, 0, 0, 0.2)
35 |
36 |
37 | data-background: salmon
38 |
39 |
40 |
41 |
42 |
43 | Background applied to stack
44 |
45 |
46 | Background applied to stack
47 |
48 |
49 | Background applied to slide inside of stack
50 |
51 |
52 |
53 |
54 | Background image
55 |
56 |
57 |
58 |
59 | Background image
60 |
61 |
62 | Background image
63 |
64 |
65 |
66 |
67 | Background image
68 | data-background-size="100px" data-background-repeat="repeat" data-background-color="#111"
69 |
70 |
71 |
72 | Same background twice (1/2)
73 |
74 |
75 | Same background twice (2/2)
76 |
77 |
78 |
79 |
80 | Same background twice vertical (1/2)
81 |
82 |
83 | Same background twice vertical (2/2)
84 |
85 |
86 |
87 |
88 | Same background from horizontal to vertical (1/3)
89 |
90 |
91 |
92 | Same background from horizontal to vertical (2/3)
93 |
94 |
95 | Same background from horizontal to vertical (3/3)
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
120 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/css/theme/night.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700);
2 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
3 | /**
4 | * Black theme for reveal.js.
5 | *
6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 | /*********************************************
9 | * GLOBAL STYLES
10 | *********************************************/
11 | body {
12 | background: #111111;
13 | background-color: #111111; }
14 |
15 | .reveal {
16 | font-family: "Open Sans", sans-serif;
17 | font-size: 30px;
18 | font-weight: normal;
19 | letter-spacing: -0.02em;
20 | color: #eeeeee; }
21 |
22 | ::selection {
23 | color: white;
24 | background: #e7ad52;
25 | text-shadow: none; }
26 |
27 | /*********************************************
28 | * HEADERS
29 | *********************************************/
30 | .reveal h1,
31 | .reveal h2,
32 | .reveal h3,
33 | .reveal h4,
34 | .reveal h5,
35 | .reveal h6 {
36 | margin: 0 0 20px 0;
37 | color: #eeeeee;
38 | font-family: "Montserrat", Impact, sans-serif;
39 | line-height: 0.9em;
40 | letter-spacing: -0.03em;
41 | text-transform: none;
42 | text-shadow: none; }
43 |
44 | .reveal h1 {
45 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
46 |
47 | /*********************************************
48 | * LINKS
49 | *********************************************/
50 | .reveal a:not(.image) {
51 | color: #e7ad52;
52 | text-decoration: none;
53 | -webkit-transition: color .15s ease;
54 | -moz-transition: color .15s ease;
55 | -ms-transition: color .15s ease;
56 | -o-transition: color .15s ease;
57 | transition: color .15s ease; }
58 |
59 | .reveal a:not(.image):hover {
60 | color: #f3d7ac;
61 | text-shadow: none;
62 | border: none; }
63 |
64 | .reveal .roll span:after {
65 | color: #fff;
66 | background: #d08a1d; }
67 |
68 | /*********************************************
69 | * IMAGES
70 | *********************************************/
71 | .reveal section img {
72 | margin: 15px 0px;
73 | background: rgba(255, 255, 255, 0.25);
74 | /* border: 4px solid #eeeeee;
75 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); */
76 | -webkit-transition: all .2s linear;
77 | -moz-transition: all .2s linear;
78 | -ms-transition: all .2s linear;
79 | -o-transition: all .2s linear;
80 | transition: all .2s linear; }
81 |
82 | .reveal a:hover img {
83 | background: rgba(255, 255, 255, 0.2);
84 | border-color: #e7ad52;
85 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
86 |
87 | /*********************************************
88 | * NAVIGATION CONTROLS
89 | *********************************************/
90 | .reveal .controls div.navigate-left,
91 | .reveal .controls div.navigate-left.enabled {
92 | border-right-color: #e7ad52; }
93 |
94 | .reveal .controls div.navigate-right,
95 | .reveal .controls div.navigate-right.enabled {
96 | border-left-color: #e7ad52; }
97 |
98 | .reveal .controls div.navigate-up,
99 | .reveal .controls div.navigate-up.enabled {
100 | border-bottom-color: #e7ad52; }
101 |
102 | .reveal .controls div.navigate-down,
103 | .reveal .controls div.navigate-down.enabled {
104 | border-top-color: #e7ad52; }
105 |
106 | .reveal .controls div.navigate-left.enabled:hover {
107 | border-right-color: #f3d7ac; }
108 |
109 | .reveal .controls div.navigate-right.enabled:hover {
110 | border-left-color: #f3d7ac; }
111 |
112 | .reveal .controls div.navigate-up.enabled:hover {
113 | border-bottom-color: #f3d7ac; }
114 |
115 | .reveal .controls div.navigate-down.enabled:hover {
116 | border-top-color: #f3d7ac; }
117 |
118 | /*********************************************
119 | * PROGRESS BAR
120 | *********************************************/
121 | .reveal .progress {
122 | background: rgba(0, 0, 0, 0.2); }
123 |
124 | .reveal .progress span {
125 | background: #e7ad52;
126 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
127 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
128 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
129 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
130 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
131 |
132 | /*********************************************
133 | * SLIDE NUMBER
134 | *********************************************/
135 | .reveal .slide-number {
136 | color: #e7ad52; }
137 |
--------------------------------------------------------------------------------
/css/theme/serif.css:
--------------------------------------------------------------------------------
1 | /**
2 | * A simple theme for reveal.js presentations, similar
3 | * to the default theme. The accent color is brown.
4 | *
5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.
6 | */
7 | .reveal a:not(.image) {
8 | line-height: 1.3em; }
9 |
10 | /*********************************************
11 | * GLOBAL STYLES
12 | *********************************************/
13 | body {
14 | background: #f0f1eb;
15 | background-color: #f0f1eb; }
16 |
17 | .reveal {
18 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
19 | font-size: 36px;
20 | font-weight: normal;
21 | letter-spacing: -0.02em;
22 | color: black; }
23 |
24 | ::selection {
25 | color: white;
26 | background: #26351c;
27 | text-shadow: none; }
28 |
29 | /*********************************************
30 | * HEADERS
31 | *********************************************/
32 | .reveal h1,
33 | .reveal h2,
34 | .reveal h3,
35 | .reveal h4,
36 | .reveal h5,
37 | .reveal h6 {
38 | margin: 0 0 20px 0;
39 | color: #383d3d;
40 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
41 | line-height: 0.9em;
42 | letter-spacing: 0.02em;
43 | text-transform: none;
44 | text-shadow: none; }
45 |
46 | .reveal h1 {
47 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
48 |
49 | /*********************************************
50 | * LINKS
51 | *********************************************/
52 | .reveal a:not(.image) {
53 | color: #51483d;
54 | text-decoration: none;
55 | -webkit-transition: color .15s ease;
56 | -moz-transition: color .15s ease;
57 | -ms-transition: color .15s ease;
58 | -o-transition: color .15s ease;
59 | transition: color .15s ease; }
60 |
61 | .reveal a:not(.image):hover {
62 | color: #8b7c69;
63 | text-shadow: none;
64 | border: none; }
65 |
66 | .reveal .roll span:after {
67 | color: #fff;
68 | background: #25211c; }
69 |
70 | /*********************************************
71 | * IMAGES
72 | *********************************************/
73 | .reveal section img {
74 | margin: 15px 0px;
75 | background: rgba(255, 255, 255, 0.12);
76 | border: 4px solid black;
77 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
78 | -webkit-transition: all .2s linear;
79 | -moz-transition: all .2s linear;
80 | -ms-transition: all .2s linear;
81 | -o-transition: all .2s linear;
82 | transition: all .2s linear; }
83 |
84 | .reveal a:hover img {
85 | background: rgba(255, 255, 255, 0.2);
86 | border-color: #51483d;
87 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
88 |
89 | /*********************************************
90 | * NAVIGATION CONTROLS
91 | *********************************************/
92 | .reveal .controls div.navigate-left,
93 | .reveal .controls div.navigate-left.enabled {
94 | border-right-color: #51483d; }
95 |
96 | .reveal .controls div.navigate-right,
97 | .reveal .controls div.navigate-right.enabled {
98 | border-left-color: #51483d; }
99 |
100 | .reveal .controls div.navigate-up,
101 | .reveal .controls div.navigate-up.enabled {
102 | border-bottom-color: #51483d; }
103 |
104 | .reveal .controls div.navigate-down,
105 | .reveal .controls div.navigate-down.enabled {
106 | border-top-color: #51483d; }
107 |
108 | .reveal .controls div.navigate-left.enabled:hover {
109 | border-right-color: #8b7c69; }
110 |
111 | .reveal .controls div.navigate-right.enabled:hover {
112 | border-left-color: #8b7c69; }
113 |
114 | .reveal .controls div.navigate-up.enabled:hover {
115 | border-bottom-color: #8b7c69; }
116 |
117 | .reveal .controls div.navigate-down.enabled:hover {
118 | border-top-color: #8b7c69; }
119 |
120 | /*********************************************
121 | * PROGRESS BAR
122 | *********************************************/
123 | .reveal .progress {
124 | background: rgba(0, 0, 0, 0.2); }
125 |
126 | .reveal .progress span {
127 | background: #51483d;
128 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
129 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
130 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
131 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
132 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
133 |
134 | /*********************************************
135 | * SLIDE NUMBER
136 | *********************************************/
137 | .reveal .slide-number {
138 | color: #51483d; }
139 |
--------------------------------------------------------------------------------
/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: normal;
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: $headingMargin;
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 | * SLIDE NUMBER
165 | *********************************************/
166 | .reveal .slide-number {
167 | color: $linkColor;
168 | }
169 |
170 |
171 |
--------------------------------------------------------------------------------
/css/theme/simple.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
2 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
3 | /**
4 | * A simple theme for reveal.js presentations, similar
5 | * to the default theme. The accent color is darkblue.
6 | *
7 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
8 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
9 | */
10 | /*********************************************
11 | * GLOBAL STYLES
12 | *********************************************/
13 | body {
14 | background: white;
15 | background-color: white; }
16 |
17 | .reveal {
18 | font-family: "Lato", sans-serif;
19 | font-size: 36px;
20 | font-weight: normal;
21 | letter-spacing: -0.02em;
22 | color: black; }
23 |
24 | ::selection {
25 | color: white;
26 | background: rgba(0, 0, 0, 0.99);
27 | text-shadow: none; }
28 |
29 | /*********************************************
30 | * HEADERS
31 | *********************************************/
32 | .reveal h1,
33 | .reveal h2,
34 | .reveal h3,
35 | .reveal h4,
36 | .reveal h5,
37 | .reveal h6 {
38 | margin: 0 0 20px 0;
39 | color: black;
40 | font-family: "News Cycle", Impact, sans-serif;
41 | line-height: 0.9em;
42 | letter-spacing: 0.02em;
43 | text-transform: none;
44 | text-shadow: none; }
45 |
46 | .reveal h1 {
47 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
48 |
49 | /*********************************************
50 | * LINKS
51 | *********************************************/
52 | .reveal a:not(.image) {
53 | color: darkblue;
54 | text-decoration: none;
55 | -webkit-transition: color .15s ease;
56 | -moz-transition: color .15s ease;
57 | -ms-transition: color .15s ease;
58 | -o-transition: color .15s ease;
59 | transition: color .15s ease; }
60 |
61 | .reveal a:not(.image):hover {
62 | color: #0000f1;
63 | text-shadow: none;
64 | border: none; }
65 |
66 | .reveal .roll span:after {
67 | color: #fff;
68 | background: #00003f; }
69 |
70 | /*********************************************
71 | * IMAGES
72 | *********************************************/
73 | .reveal section img {
74 | margin: 15px 0px;
75 | background: rgba(255, 255, 255, 0.12);
76 | border: 4px solid black;
77 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
78 | -webkit-transition: all .2s linear;
79 | -moz-transition: all .2s linear;
80 | -ms-transition: all .2s linear;
81 | -o-transition: all .2s linear;
82 | transition: all .2s linear; }
83 |
84 | .reveal a:hover img {
85 | background: rgba(255, 255, 255, 0.2);
86 | border-color: darkblue;
87 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
88 |
89 | /*********************************************
90 | * NAVIGATION CONTROLS
91 | *********************************************/
92 | .reveal .controls div.navigate-left,
93 | .reveal .controls div.navigate-left.enabled {
94 | border-right-color: darkblue; }
95 |
96 | .reveal .controls div.navigate-right,
97 | .reveal .controls div.navigate-right.enabled {
98 | border-left-color: darkblue; }
99 |
100 | .reveal .controls div.navigate-up,
101 | .reveal .controls div.navigate-up.enabled {
102 | border-bottom-color: darkblue; }
103 |
104 | .reveal .controls div.navigate-down,
105 | .reveal .controls div.navigate-down.enabled {
106 | border-top-color: darkblue; }
107 |
108 | .reveal .controls div.navigate-left.enabled:hover {
109 | border-right-color: #0000f1; }
110 |
111 | .reveal .controls div.navigate-right.enabled:hover {
112 | border-left-color: #0000f1; }
113 |
114 | .reveal .controls div.navigate-up.enabled:hover {
115 | border-bottom-color: #0000f1; }
116 |
117 | .reveal .controls div.navigate-down.enabled:hover {
118 | border-top-color: #0000f1; }
119 |
120 | /*********************************************
121 | * PROGRESS BAR
122 | *********************************************/
123 | .reveal .progress {
124 | background: rgba(0, 0, 0, 0.2); }
125 |
126 | .reveal .progress span {
127 | background: darkblue;
128 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
129 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
130 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
131 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
132 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
133 |
134 | /*********************************************
135 | * SLIDE NUMBER
136 | *********************************************/
137 | .reveal .slide-number {
138 | color: darkblue; }
139 |
--------------------------------------------------------------------------------
/plugin/markdown/example.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Markdown Demo
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
37 |
38 |
39 |
55 |
56 |
57 |
70 |
71 |
72 |
78 |
79 |
80 |
87 |
88 |
89 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
127 |
128 |
129 |
130 |
--------------------------------------------------------------------------------
/css/print/pdf.css:
--------------------------------------------------------------------------------
1 | /* Default Print Stylesheet Template
2 | by Rob Glazebrook of CSSnewbie.com
3 | Last Updated: June 4, 2008
4 |
5 | Feel free (nay, compelled) to edit, append, and
6 | manipulate this file as you see fit. */
7 |
8 |
9 | /* SECTION 1: Set default width, margin, float, and
10 | background. This prevents elements from extending
11 | beyond the edge of the printed page, and prevents
12 | unnecessary background images from printing */
13 |
14 | * {
15 | -webkit-print-color-adjust: exact;
16 | }
17 |
18 | body {
19 | font-size: 18pt;
20 | width: 297mm;
21 | height: 229mm;
22 | margin: 0 auto !important;
23 | border: 0;
24 | padding: 0;
25 | float: none !important;
26 | overflow: visible;
27 | }
28 |
29 | html {
30 | width: 100%;
31 | height: 100%;
32 | overflow: visible;
33 | }
34 |
35 | @page {
36 | size: letter landscape;
37 | margin: 0;
38 | }
39 |
40 | /* SECTION 2: Remove any elements not needed in print.
41 | This would include navigation, ads, sidebars, etc. */
42 | .nestedarrow,
43 | .controls,
44 | .reveal .progress,
45 | .reveal.overview,
46 | .fork-reveal,
47 | .share-reveal,
48 | .state-background {
49 | display: none !important;
50 | }
51 |
52 | /* SECTION 3: Set body font face, size, and color.
53 | Consider using a serif font for readability. */
54 | body, p, td, li, div {
55 | font-size: 18pt;
56 | }
57 |
58 | /* SECTION 4: Set heading font face, sizes, and color.
59 | Differentiate your headings from your body text.
60 | Perhaps use a large sans-serif for distinction. */
61 | h1,h2,h3,h4,h5,h6 {
62 | text-shadow: 0 0 0 #000 !important;
63 | }
64 |
65 | /* SECTION 5: Make hyperlinks more usable.
66 | Ensure links are underlined, and consider appending
67 | the URL to the end of the link for usability. */
68 | a:link,
69 | a:visited {
70 | font-weight: normal;
71 | text-decoration: underline;
72 | }
73 |
74 | .reveal pre code {
75 | overflow: hidden !important;
76 | font-family: monospace !important;
77 | }
78 |
79 |
80 | /* SECTION 6: more reveal.js specific additions by @skypanther */
81 | ul, ol, div, p {
82 | visibility: visible;
83 | position: static;
84 | width: auto;
85 | height: auto;
86 | display: block;
87 | overflow: visible;
88 | margin: auto;
89 | }
90 | .reveal {
91 | width: auto !important;
92 | height: auto !important;
93 | overflow: hidden !important;
94 | }
95 | .reveal .slides {
96 | position: static;
97 | width: 100%;
98 | height: auto;
99 |
100 | left: auto;
101 | top: auto;
102 | margin: 0 !important;
103 | padding: 0 !important;
104 |
105 | overflow: visible;
106 | display: block;
107 |
108 | text-align: center;
109 |
110 | -webkit-perspective: none;
111 | -moz-perspective: none;
112 | -ms-perspective: none;
113 | perspective: none;
114 |
115 | -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */
116 | -moz-perspective-origin: 50% 50%;
117 | -ms-perspective-origin: 50% 50%;
118 | perspective-origin: 50% 50%;
119 | }
120 | .reveal .slides section {
121 |
122 | page-break-after: always !important;
123 |
124 | visibility: visible !important;
125 | position: relative !important;
126 | width: 100% !important;
127 | height: 229mm !important;
128 | min-height: 229mm !important;
129 | display: block !important;
130 | overflow: hidden !important;
131 |
132 | left: 0 !important;
133 | top: 0 !important;
134 | margin: 0 !important;
135 | padding: 2cm 2cm 0 2cm !important;
136 | box-sizing: border-box !important;
137 |
138 | opacity: 1 !important;
139 |
140 | -webkit-transform-style: flat !important;
141 | -moz-transform-style: flat !important;
142 | -ms-transform-style: flat !important;
143 | transform-style: flat !important;
144 |
145 | -webkit-transform: none !important;
146 | -moz-transform: none !important;
147 | -ms-transform: none !important;
148 | transform: none !important;
149 | }
150 | .reveal section.stack {
151 | margin: 0 !important;
152 | padding: 0 !important;
153 | page-break-after: avoid !important;
154 | height: auto !important;
155 | min-height: auto !important;
156 | }
157 | .reveal .absolute-element {
158 | margin-left: 2.2cm;
159 | margin-top: 1.8cm;
160 | }
161 | .reveal section .fragment {
162 | opacity: 1 !important;
163 | visibility: visible !important;
164 |
165 | -webkit-transform: none !important;
166 | -moz-transform: none !important;
167 | -ms-transform: none !important;
168 | transform: none !important;
169 | }
170 | .reveal section .slide-background {
171 | position: absolute;
172 | top: 0;
173 | left: 0;
174 | width: 100%;
175 | z-index: 0;
176 | }
177 | .reveal section>* {
178 | position: relative;
179 | z-index: 1;
180 | }
181 | .reveal img {
182 | box-shadow: none;
183 | }
184 | .reveal .roll {
185 | overflow: visible;
186 | line-height: 1em;
187 | }
188 | .reveal small a {
189 | font-size: 16pt !important;
190 | }
191 |
--------------------------------------------------------------------------------
/css/theme/moon.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Solarized Dark theme for reveal.js.
4 | * Author: Achim Staebler
5 | */
6 | @font-face {
7 | font-family: 'League Gothic';
8 | src: url("../../lib/font/league_gothic-webfont.eot");
9 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
10 | font-weight: normal;
11 | font-style: normal; }
12 |
13 | /**
14 | * Solarized colors by Ethan Schoonover
15 | */
16 | html * {
17 | color-profile: sRGB;
18 | rendering-intent: auto; }
19 |
20 | /*********************************************
21 | * GLOBAL STYLES
22 | *********************************************/
23 | body {
24 | background: #002b36;
25 | background-color: #002b36; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: normal;
31 | letter-spacing: -0.02em;
32 | color: #93a1a1; }
33 |
34 | ::selection {
35 | color: white;
36 | background: #d33682;
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #eee8d5;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: none; }
55 |
56 | .reveal h1 {
57 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #268bd2;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #78b9e6;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #1a6091; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #93a1a1;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #268bd2;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #268bd2; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #268bd2; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #268bd2; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #268bd2; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #78b9e6; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #78b9e6; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #78b9e6; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #78b9e6; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #268bd2;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
144 | /*********************************************
145 | * SLIDE NUMBER
146 | *********************************************/
147 | .reveal .slide-number {
148 | color: #268bd2; }
149 |
--------------------------------------------------------------------------------
/css/theme/solarized.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Solarized Light theme for reveal.js.
4 | * Author: Achim Staebler
5 | */
6 | @font-face {
7 | font-family: 'League Gothic';
8 | src: url("../../lib/font/league_gothic-webfont.eot");
9 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
10 | font-weight: normal;
11 | font-style: normal; }
12 |
13 | /**
14 | * Solarized colors by Ethan Schoonover
15 | */
16 | html * {
17 | color-profile: sRGB;
18 | rendering-intent: auto; }
19 |
20 | /*********************************************
21 | * GLOBAL STYLES
22 | *********************************************/
23 | body {
24 | background: #fdf6e3;
25 | background-color: #fdf6e3; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: normal;
31 | letter-spacing: -0.02em;
32 | color: #657b83; }
33 |
34 | ::selection {
35 | color: white;
36 | background: #d33682;
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #586e75;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: none; }
55 |
56 | .reveal h1 {
57 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #268bd2;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #78b9e6;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #1a6091; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #657b83;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #268bd2;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #268bd2; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #268bd2; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #268bd2; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #268bd2; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #78b9e6; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #78b9e6; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #78b9e6; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #78b9e6; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #268bd2;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
144 | /*********************************************
145 | * SLIDE NUMBER
146 | *********************************************/
147 | .reveal .slide-number {
148 | color: #268bd2; }
149 |
--------------------------------------------------------------------------------
/css/theme/sky.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
2 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
3 | /**
4 | * Sky theme for reveal.js.
5 | *
6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
7 | */
8 | .reveal a:not(.image) {
9 | line-height: 1.3em; }
10 |
11 | /*********************************************
12 | * GLOBAL STYLES
13 | *********************************************/
14 | body {
15 | background: #add9e4;
16 | background: -moz-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
17 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #add9e4));
18 | background: -webkit-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
19 | background: -o-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
20 | background: -ms-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
21 | background: radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
22 | background-color: #f7fbfc; }
23 |
24 | .reveal {
25 | font-family: "Open Sans", sans-serif;
26 | font-size: 36px;
27 | font-weight: normal;
28 | letter-spacing: -0.02em;
29 | color: #333333; }
30 |
31 | ::selection {
32 | color: white;
33 | background: #134674;
34 | text-shadow: none; }
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 | .reveal h1 {
54 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
55 |
56 | /*********************************************
57 | * LINKS
58 | *********************************************/
59 | .reveal a:not(.image) {
60 | color: #3b759e;
61 | text-decoration: none;
62 | -webkit-transition: color .15s ease;
63 | -moz-transition: color .15s ease;
64 | -ms-transition: color .15s ease;
65 | -o-transition: color .15s ease;
66 | transition: color .15s ease; }
67 |
68 | .reveal a:not(.image):hover {
69 | color: #74a7cb;
70 | text-shadow: none;
71 | border: none; }
72 |
73 | .reveal .roll span:after {
74 | color: #fff;
75 | background: #264c66; }
76 |
77 | /*********************************************
78 | * IMAGES
79 | *********************************************/
80 | .reveal section img {
81 | margin: 15px 0px;
82 | background: rgba(255, 255, 255, 0.12);
83 | border: 4px solid #333333;
84 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
85 | -webkit-transition: all .2s linear;
86 | -moz-transition: all .2s linear;
87 | -ms-transition: all .2s linear;
88 | -o-transition: all .2s linear;
89 | transition: all .2s linear; }
90 |
91 | .reveal a:hover img {
92 | background: rgba(255, 255, 255, 0.2);
93 | border-color: #3b759e;
94 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
95 |
96 | /*********************************************
97 | * NAVIGATION CONTROLS
98 | *********************************************/
99 | .reveal .controls div.navigate-left,
100 | .reveal .controls div.navigate-left.enabled {
101 | border-right-color: #3b759e; }
102 |
103 | .reveal .controls div.navigate-right,
104 | .reveal .controls div.navigate-right.enabled {
105 | border-left-color: #3b759e; }
106 |
107 | .reveal .controls div.navigate-up,
108 | .reveal .controls div.navigate-up.enabled {
109 | border-bottom-color: #3b759e; }
110 |
111 | .reveal .controls div.navigate-down,
112 | .reveal .controls div.navigate-down.enabled {
113 | border-top-color: #3b759e; }
114 |
115 | .reveal .controls div.navigate-left.enabled:hover {
116 | border-right-color: #74a7cb; }
117 |
118 | .reveal .controls div.navigate-right.enabled:hover {
119 | border-left-color: #74a7cb; }
120 |
121 | .reveal .controls div.navigate-up.enabled:hover {
122 | border-bottom-color: #74a7cb; }
123 |
124 | .reveal .controls div.navigate-down.enabled:hover {
125 | border-top-color: #74a7cb; }
126 |
127 | /*********************************************
128 | * PROGRESS BAR
129 | *********************************************/
130 | .reveal .progress {
131 | background: rgba(0, 0, 0, 0.2); }
132 |
133 | .reveal .progress span {
134 | background: #3b759e;
135 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
136 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
137 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
138 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
140 |
141 | /*********************************************
142 | * SLIDE NUMBER
143 | *********************************************/
144 | .reveal .slide-number {
145 | color: #3b759e; }
146 |
--------------------------------------------------------------------------------
/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 | Differentiate your headings from your body text.
53 | Perhaps use a large sans-serif for distinction. */
54 | h1,h2,h3,h4,h5,h6 {
55 | color: #000!important;
56 | height: auto;
57 | line-height: normal;
58 | font-family: Georgia, "Times New Roman", Times, serif !important;
59 | text-shadow: 0 0 0 #000 !important;
60 | text-align: left;
61 | letter-spacing: normal;
62 | }
63 | /* Need to reduce the size of the fonts for printing */
64 | h1 { font-size: 26pt !important; }
65 | h2 { font-size: 22pt !important; }
66 | h3 { font-size: 20pt !important; }
67 | h4 { font-size: 20pt !important; font-variant: small-caps; }
68 | h5 { font-size: 19pt !important; }
69 | h6 { font-size: 18pt !important; font-style: italic; }
70 |
71 | /* SECTION 5: Make hyperlinks more usable.
72 | Ensure links are underlined, and consider appending
73 | the URL to the end of the link for usability. */
74 | a:link,
75 | a:visited {
76 | color: #000 !important;
77 | font-weight: bold;
78 | text-decoration: underline;
79 | }
80 | /*
81 | .reveal a:link:after,
82 | .reveal a:visited:after {
83 | content: " (" attr(href) ") ";
84 | color: #222 !important;
85 | font-size: 90%;
86 | }
87 | */
88 |
89 |
90 | /* SECTION 6: more reveal.js specific additions by @skypanther */
91 | ul, ol, div, p {
92 | visibility: visible;
93 | position: static;
94 | width: auto;
95 | height: auto;
96 | display: block;
97 | overflow: visible;
98 | margin: auto;
99 | text-align: left !important;
100 | }
101 | .reveal .slides {
102 | position: static;
103 | width: auto;
104 | height: auto;
105 |
106 | left: auto;
107 | top: auto;
108 | margin-left: auto;
109 | margin-top: auto;
110 | padding: auto;
111 |
112 | overflow: visible;
113 | display: block;
114 |
115 | text-align: center;
116 | -webkit-perspective: none;
117 | -moz-perspective: none;
118 | -ms-perspective: none;
119 | perspective: none;
120 |
121 | -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */
122 | -moz-perspective-origin: 50% 50%;
123 | -ms-perspective-origin: 50% 50%;
124 | perspective-origin: 50% 50%;
125 | }
126 | .reveal .slides>section,
127 | .reveal .slides>section>section {
128 |
129 | visibility: visible !important;
130 | position: static !important;
131 | width: 90% !important;
132 | height: auto !important;
133 | display: block !important;
134 | overflow: visible !important;
135 |
136 | left: 0% !important;
137 | top: 0% !important;
138 | margin-left: 0px !important;
139 | margin-top: 0px !important;
140 | padding: 20px 0px !important;
141 |
142 | opacity: 1 !important;
143 |
144 | -webkit-transform-style: flat !important;
145 | -moz-transform-style: flat !important;
146 | -ms-transform-style: flat !important;
147 | transform-style: flat !important;
148 |
149 | -webkit-transform: none !important;
150 | -moz-transform: none !important;
151 | -ms-transform: none !important;
152 | transform: none !important;
153 | }
154 | .reveal section {
155 | page-break-after: always !important;
156 | display: block !important;
157 | }
158 | .reveal section .fragment {
159 | opacity: 1 !important;
160 | visibility: visible !important;
161 |
162 | -webkit-transform: none !important;
163 | -moz-transform: none !important;
164 | -ms-transform: none !important;
165 | transform: none !important;
166 | }
167 | .reveal section:last-of-type {
168 | page-break-after: avoid !important;
169 | }
170 | .reveal section img {
171 | display: block;
172 | margin: 15px 0px;
173 | background: rgba(255,255,255,1);
174 | border: 1px solid #666;
175 | box-shadow: none;
176 | }
--------------------------------------------------------------------------------
/css/theme/beige.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Beige theme for reveal.js.
4 | *
5 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
6 | */
7 | @font-face {
8 | font-family: 'League Gothic';
9 | src: url("../../lib/font/league_gothic-webfont.eot");
10 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
11 | font-weight: normal;
12 | font-style: normal; }
13 |
14 | /*********************************************
15 | * GLOBAL STYLES
16 | *********************************************/
17 | body {
18 | background: #f7f2d3;
19 | background: -moz-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
20 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, white), color-stop(100%, #f7f2d3));
21 | background: -webkit-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
22 | background: -o-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
23 | background: -ms-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
24 | background: radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
25 | background-color: #f7f3de; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: normal;
31 | letter-spacing: -0.02em;
32 | color: #333333; }
33 |
34 | ::selection {
35 | color: white;
36 | background: rgba(79, 64, 28, 0.99);
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #333333;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: none; }
55 |
56 | .reveal h1 {
57 | text-shadow: 0 1px 0 #cccccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbbbbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaaaaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #8b743d;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #c0a86e;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #564826; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #333333;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #8b743d;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #8b743d; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #8b743d; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #8b743d; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #8b743d; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #c0a86e; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #c0a86e; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #c0a86e; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #c0a86e; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #8b743d;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
144 | /*********************************************
145 | * SLIDE NUMBER
146 | *********************************************/
147 | .reveal .slide-number {
148 | color: #8b743d; }
149 |
--------------------------------------------------------------------------------
/css/theme/default.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
2 | /**
3 | * Default theme for reveal.js.
4 | *
5 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
6 | */
7 | @font-face {
8 | font-family: 'League Gothic';
9 | src: url("../../lib/font/league_gothic-webfont.eot");
10 | src: url("../../lib/font/league_gothic-webfont.eot?#iefix") format("embedded-opentype"), url("../../lib/font/league_gothic-webfont.woff") format("woff"), url("../../lib/font/league_gothic-webfont.ttf") format("truetype"), url("../../lib/font/league_gothic-webfont.svg#LeagueGothicRegular") format("svg");
11 | font-weight: normal;
12 | font-style: normal; }
13 |
14 | /*********************************************
15 | * GLOBAL STYLES
16 | *********************************************/
17 | body {
18 | background: #1c1e20;
19 | background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
20 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20));
21 | background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
22 | background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
23 | background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
24 | background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
25 | background-color: #2b2b2b; }
26 |
27 | .reveal {
28 | font-family: "Lato", sans-serif;
29 | font-size: 36px;
30 | font-weight: normal;
31 | letter-spacing: -0.02em;
32 | color: #eeeeee; }
33 |
34 | ::selection {
35 | color: white;
36 | background: #ff5e99;
37 | text-shadow: none; }
38 |
39 | /*********************************************
40 | * HEADERS
41 | *********************************************/
42 | .reveal h1,
43 | .reveal h2,
44 | .reveal h3,
45 | .reveal h4,
46 | .reveal h5,
47 | .reveal h6 {
48 | margin: 0 0 20px 0;
49 | color: #eeeeee;
50 | font-family: "League Gothic", Impact, sans-serif;
51 | line-height: 0.9em;
52 | letter-spacing: 0.02em;
53 | text-transform: uppercase;
54 | text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
55 |
56 | .reveal h1 {
57 | text-shadow: 0 1px 0 #cccccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbbbbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaaaaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15); }
58 |
59 | /*********************************************
60 | * LINKS
61 | *********************************************/
62 | .reveal a:not(.image) {
63 | color: #13daec;
64 | text-decoration: none;
65 | -webkit-transition: color .15s ease;
66 | -moz-transition: color .15s ease;
67 | -ms-transition: color .15s ease;
68 | -o-transition: color .15s ease;
69 | transition: color .15s ease; }
70 |
71 | .reveal a:not(.image):hover {
72 | color: #71e9f4;
73 | text-shadow: none;
74 | border: none; }
75 |
76 | .reveal .roll span:after {
77 | color: #fff;
78 | background: #0d99a5; }
79 |
80 | /*********************************************
81 | * IMAGES
82 | *********************************************/
83 | .reveal section img {
84 | margin: 15px 0px;
85 | background: rgba(255, 255, 255, 0.12);
86 | border: 4px solid #eeeeee;
87 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
88 | -webkit-transition: all .2s linear;
89 | -moz-transition: all .2s linear;
90 | -ms-transition: all .2s linear;
91 | -o-transition: all .2s linear;
92 | transition: all .2s linear; }
93 |
94 | .reveal a:hover img {
95 | background: rgba(255, 255, 255, 0.2);
96 | border-color: #13daec;
97 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
98 |
99 | /*********************************************
100 | * NAVIGATION CONTROLS
101 | *********************************************/
102 | .reveal .controls div.navigate-left,
103 | .reveal .controls div.navigate-left.enabled {
104 | border-right-color: #13daec; }
105 |
106 | .reveal .controls div.navigate-right,
107 | .reveal .controls div.navigate-right.enabled {
108 | border-left-color: #13daec; }
109 |
110 | .reveal .controls div.navigate-up,
111 | .reveal .controls div.navigate-up.enabled {
112 | border-bottom-color: #13daec; }
113 |
114 | .reveal .controls div.navigate-down,
115 | .reveal .controls div.navigate-down.enabled {
116 | border-top-color: #13daec; }
117 |
118 | .reveal .controls div.navigate-left.enabled:hover {
119 | border-right-color: #71e9f4; }
120 |
121 | .reveal .controls div.navigate-right.enabled:hover {
122 | border-left-color: #71e9f4; }
123 |
124 | .reveal .controls div.navigate-up.enabled:hover {
125 | border-bottom-color: #71e9f4; }
126 |
127 | .reveal .controls div.navigate-down.enabled:hover {
128 | border-top-color: #71e9f4; }
129 |
130 | /*********************************************
131 | * PROGRESS BAR
132 | *********************************************/
133 | .reveal .progress {
134 | background: rgba(0, 0, 0, 0.2); }
135 |
136 | .reveal .progress span {
137 | background: #13daec;
138 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
142 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
143 |
144 | /*********************************************
145 | * SLIDE NUMBER
146 | *********************************************/
147 | .reveal .slide-number {
148 | color: #13daec; }
149 |
--------------------------------------------------------------------------------
/test/qunit-1.12.0.css:
--------------------------------------------------------------------------------
1 | /**
2 | * QUnit v1.12.0 - A JavaScript Unit Testing Framework
3 | *
4 | * http://qunitjs.com
5 | *
6 | * Copyright 2012 jQuery Foundation and other contributors
7 | * Released under the MIT license.
8 | * http://jquery.org/license
9 | */
10 |
11 | /** Font Family and Sizes */
12 |
13 | #qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
14 | font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
15 | }
16 |
17 | #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
18 | #qunit-tests { font-size: smaller; }
19 |
20 |
21 | /** Resets */
22 |
23 | #qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
24 | margin: 0;
25 | padding: 0;
26 | }
27 |
28 |
29 | /** Header */
30 |
31 | #qunit-header {
32 | padding: 0.5em 0 0.5em 1em;
33 |
34 | color: #8699a4;
35 | background-color: #0d3349;
36 |
37 | font-size: 1.5em;
38 | line-height: 1em;
39 | font-weight: normal;
40 |
41 | border-radius: 5px 5px 0 0;
42 | -moz-border-radius: 5px 5px 0 0;
43 | -webkit-border-top-right-radius: 5px;
44 | -webkit-border-top-left-radius: 5px;
45 | }
46 |
47 | #qunit-header a {
48 | text-decoration: none;
49 | color: #c2ccd1;
50 | }
51 |
52 | #qunit-header a:hover,
53 | #qunit-header a:focus {
54 | color: #fff;
55 | }
56 |
57 | #qunit-testrunner-toolbar label {
58 | display: inline-block;
59 | padding: 0 .5em 0 .1em;
60 | }
61 |
62 | #qunit-banner {
63 | height: 5px;
64 | }
65 |
66 | #qunit-testrunner-toolbar {
67 | padding: 0.5em 0 0.5em 2em;
68 | color: #5E740B;
69 | background-color: #eee;
70 | overflow: hidden;
71 | }
72 |
73 | #qunit-userAgent {
74 | padding: 0.5em 0 0.5em 2.5em;
75 | background-color: #2b81af;
76 | color: #fff;
77 | text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
78 | }
79 |
80 | #qunit-modulefilter-container {
81 | float: right;
82 | }
83 |
84 | /** Tests: Pass/Fail */
85 |
86 | #qunit-tests {
87 | list-style-position: inside;
88 | }
89 |
90 | #qunit-tests li {
91 | padding: 0.4em 0.5em 0.4em 2.5em;
92 | border-bottom: 1px solid #fff;
93 | list-style-position: inside;
94 | }
95 |
96 | #qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
97 | display: none;
98 | }
99 |
100 | #qunit-tests li strong {
101 | cursor: pointer;
102 | }
103 |
104 | #qunit-tests li a {
105 | padding: 0.5em;
106 | color: #c2ccd1;
107 | text-decoration: none;
108 | }
109 | #qunit-tests li a:hover,
110 | #qunit-tests li a:focus {
111 | color: #000;
112 | }
113 |
114 | #qunit-tests li .runtime {
115 | float: right;
116 | font-size: smaller;
117 | }
118 |
119 | .qunit-assert-list {
120 | margin-top: 0.5em;
121 | padding: 0.5em;
122 |
123 | background-color: #fff;
124 |
125 | border-radius: 5px;
126 | -moz-border-radius: 5px;
127 | -webkit-border-radius: 5px;
128 | }
129 |
130 | .qunit-collapsed {
131 | display: none;
132 | }
133 |
134 | #qunit-tests table {
135 | border-collapse: collapse;
136 | margin-top: .2em;
137 | }
138 |
139 | #qunit-tests th {
140 | text-align: right;
141 | vertical-align: top;
142 | padding: 0 .5em 0 0;
143 | }
144 |
145 | #qunit-tests td {
146 | vertical-align: top;
147 | }
148 |
149 | #qunit-tests pre {
150 | margin: 0;
151 | white-space: pre-wrap;
152 | word-wrap: break-word;
153 | }
154 |
155 | #qunit-tests del {
156 | background-color: #e0f2be;
157 | color: #374e0c;
158 | text-decoration: none;
159 | }
160 |
161 | #qunit-tests ins {
162 | background-color: #ffcaca;
163 | color: #500;
164 | text-decoration: none;
165 | }
166 |
167 | /*** Test Counts */
168 |
169 | #qunit-tests b.counts { color: black; }
170 | #qunit-tests b.passed { color: #5E740B; }
171 | #qunit-tests b.failed { color: #710909; }
172 |
173 | #qunit-tests li li {
174 | padding: 5px;
175 | background-color: #fff;
176 | border-bottom: none;
177 | list-style-position: inside;
178 | }
179 |
180 | /*** Passing Styles */
181 |
182 | #qunit-tests li li.pass {
183 | color: #3c510c;
184 | background-color: #fff;
185 | border-left: 10px solid #C6E746;
186 | }
187 |
188 | #qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
189 | #qunit-tests .pass .test-name { color: #366097; }
190 |
191 | #qunit-tests .pass .test-actual,
192 | #qunit-tests .pass .test-expected { color: #999999; }
193 |
194 | #qunit-banner.qunit-pass { background-color: #C6E746; }
195 |
196 | /*** Failing Styles */
197 |
198 | #qunit-tests li li.fail {
199 | color: #710909;
200 | background-color: #fff;
201 | border-left: 10px solid #EE5757;
202 | white-space: pre;
203 | }
204 |
205 | #qunit-tests > li:last-child {
206 | border-radius: 0 0 5px 5px;
207 | -moz-border-radius: 0 0 5px 5px;
208 | -webkit-border-bottom-right-radius: 5px;
209 | -webkit-border-bottom-left-radius: 5px;
210 | }
211 |
212 | #qunit-tests .fail { color: #000000; background-color: #EE5757; }
213 | #qunit-tests .fail .test-name,
214 | #qunit-tests .fail .module-name { color: #000000; }
215 |
216 | #qunit-tests .fail .test-actual { color: #EE5757; }
217 | #qunit-tests .fail .test-expected { color: green; }
218 |
219 | #qunit-banner.qunit-fail { background-color: #EE5757; }
220 |
221 |
222 | /** Result */
223 |
224 | #qunit-testresult {
225 | padding: 0.5em 0.5em 0.5em 2.5em;
226 |
227 | color: #2b81af;
228 | background-color: #D2E0E6;
229 |
230 | border-bottom: 1px solid white;
231 | }
232 | #qunit-testresult .module-name {
233 | font-weight: bold;
234 | }
235 |
236 | /** Fixture */
237 |
238 | #qunit-fixture {
239 | position: absolute;
240 | top: -10000px;
241 | left: -10000px;
242 | width: 1000px;
243 | height: 1000px;
244 | }
--------------------------------------------------------------------------------
/css/theme/blood.css:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
2 | /**
3 | * Blood theme for reveal.js
4 | * Author: Walther http://github.com/Walther
5 | *
6 | * Designed to be used with highlight.js theme
7 | * "monokai_sublime.css" available from
8 | * https://github.com/isagalaev/highlight.js/
9 | *
10 | * For other themes, change $codeBackground accordingly.
11 | *
12 | */
13 | /*********************************************
14 | * GLOBAL STYLES
15 | *********************************************/
16 | body {
17 | background: #222222;
18 | background: -moz-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
19 | background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #626262), color-stop(100%, #222222));
20 | background: -webkit-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
21 | background: -o-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
22 | background: -ms-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
23 | background: radial-gradient(center, circle cover, #626262 0%, #222222 100%);
24 | background-color: #2b2b2b; }
25 |
26 | .reveal {
27 | font-family: Ubuntu, "sans-serif";
28 | font-size: 36px;
29 | font-weight: normal;
30 | letter-spacing: -0.02em;
31 | color: #eeeeee; }
32 |
33 | ::selection {
34 | color: white;
35 | background: #aa2233;
36 | text-shadow: none; }
37 |
38 | /*********************************************
39 | * HEADERS
40 | *********************************************/
41 | .reveal h1,
42 | .reveal h2,
43 | .reveal h3,
44 | .reveal h4,
45 | .reveal h5,
46 | .reveal h6 {
47 | margin: 0 0 20px 0;
48 | color: #eeeeee;
49 | font-family: Ubuntu, "sans-serif";
50 | line-height: 0.9em;
51 | letter-spacing: 0.02em;
52 | text-transform: uppercase;
53 | text-shadow: 2px 2px 2px #222222; }
54 |
55 | .reveal h1 {
56 | 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); }
57 |
58 | /*********************************************
59 | * LINKS
60 | *********************************************/
61 | .reveal a:not(.image) {
62 | color: #aa2233;
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 | .reveal a:not(.image):hover {
71 | color: #dd5566;
72 | text-shadow: none;
73 | border: none; }
74 |
75 | .reveal .roll span:after {
76 | color: #fff;
77 | background: #6a1520; }
78 |
79 | /*********************************************
80 | * IMAGES
81 | *********************************************/
82 | .reveal section img {
83 | margin: 15px 0px;
84 | background: rgba(255, 255, 255, 0.12);
85 | border: 4px solid #eeeeee;
86 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
87 | -webkit-transition: all .2s linear;
88 | -moz-transition: all .2s linear;
89 | -ms-transition: all .2s linear;
90 | -o-transition: all .2s linear;
91 | transition: all .2s linear; }
92 |
93 | .reveal a:hover img {
94 | background: rgba(255, 255, 255, 0.2);
95 | border-color: #aa2233;
96 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
97 |
98 | /*********************************************
99 | * NAVIGATION CONTROLS
100 | *********************************************/
101 | .reveal .controls div.navigate-left,
102 | .reveal .controls div.navigate-left.enabled {
103 | border-right-color: #aa2233; }
104 |
105 | .reveal .controls div.navigate-right,
106 | .reveal .controls div.navigate-right.enabled {
107 | border-left-color: #aa2233; }
108 |
109 | .reveal .controls div.navigate-up,
110 | .reveal .controls div.navigate-up.enabled {
111 | border-bottom-color: #aa2233; }
112 |
113 | .reveal .controls div.navigate-down,
114 | .reveal .controls div.navigate-down.enabled {
115 | border-top-color: #aa2233; }
116 |
117 | .reveal .controls div.navigate-left.enabled:hover {
118 | border-right-color: #dd5566; }
119 |
120 | .reveal .controls div.navigate-right.enabled:hover {
121 | border-left-color: #dd5566; }
122 |
123 | .reveal .controls div.navigate-up.enabled:hover {
124 | border-bottom-color: #dd5566; }
125 |
126 | .reveal .controls div.navigate-down.enabled:hover {
127 | border-top-color: #dd5566; }
128 |
129 | /*********************************************
130 | * PROGRESS BAR
131 | *********************************************/
132 | .reveal .progress {
133 | background: rgba(0, 0, 0, 0.2); }
134 |
135 | .reveal .progress span {
136 | background: #aa2233;
137 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
138 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
139 | -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
140 | -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
141 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
142 |
143 | /*********************************************
144 | * SLIDE NUMBER
145 | *********************************************/
146 | .reveal .slide-number {
147 | color: #aa2233; }
148 |
149 | .reveal p {
150 | font-weight: 300;
151 | text-shadow: 1px 1px #222222; }
152 |
153 | .reveal h1,
154 | .reveal h2,
155 | .reveal h3,
156 | .reveal h4,
157 | .reveal h5,
158 | .reveal h6 {
159 | font-weight: 700; }
160 |
161 | .reveal a:not(.image),
162 | .reveal a:not(.image):hover {
163 | text-shadow: 2px 2px 2px #000; }
164 |
165 | .reveal small a:not(.image),
166 | .reveal small a:not(.image):hover {
167 | text-shadow: 1px 1px 1px #000; }
168 |
169 | .reveal p code {
170 | background-color: #23241f;
171 | display: inline-block;
172 | border-radius: 7px; }
173 |
174 | .reveal small code {
175 | vertical-align: baseline; }
176 |
--------------------------------------------------------------------------------
/test/examples/math.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - Math Plugin
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | reveal.js Math Plugin
23 | A thin wrapper for MathJax
24 |
25 |
26 |
27 | The Lorenz Equations
28 |
29 | \[\begin{aligned}
30 | \dot{x} & = \sigma(y-x) \\
31 | \dot{y} & = \rho x - y - xz \\
32 | \dot{z} & = -\beta z + xy
33 | \end{aligned} \]
34 |
35 |
36 |
37 | The Cauchy-Schwarz Inequality
38 |
39 |
42 |
43 |
44 |
45 | A Cross Product Formula
46 |
47 | \[\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix}
48 | \mathbf{i} & \mathbf{j} & \mathbf{k} \\
49 | \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\
50 | \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0
51 | \end{vmatrix} \]
52 |
53 |
54 |
55 | The probability of getting \(k\) heads when flipping \(n\) coins is
56 |
57 | \[P(E) = {n \choose k} p^k (1-p)^{ n-k} \]
58 |
59 |
60 |
61 | An Identity of Ramanujan
62 |
63 | \[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
64 | 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
65 | {1+\frac{e^{-8\pi}} {1+\ldots} } } } \]
66 |
67 |
68 |
69 | A Rogers-Ramanujan Identity
70 |
71 | \[ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots =
72 | \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}\]
73 |
74 |
75 |
76 | Maxwell’s Equations
77 |
78 | \[ \begin{aligned}
79 | \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
80 | \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
81 | \nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned}
82 | \]
83 |
84 |
85 |
86 |
87 | The Lorenz Equations
88 |
89 |
90 | \[\begin{aligned}
91 | \dot{x} & = \sigma(y-x) \\
92 | \dot{y} & = \rho x - y - xz \\
93 | \dot{z} & = -\beta z + xy
94 | \end{aligned} \]
95 |
96 |
97 |
98 |
99 | The Cauchy-Schwarz Inequality
100 |
101 |
102 | \[ \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]
103 |
104 |
105 |
106 |
107 | A Cross Product Formula
108 |
109 |
110 | \[\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix}
111 | \mathbf{i} & \mathbf{j} & \mathbf{k} \\
112 | \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\
113 | \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0
114 | \end{vmatrix} \]
115 |
116 |
117 |
118 |
119 | The probability of getting \(k\) heads when flipping \(n\) coins is
120 |
121 |
122 | \[P(E) = {n \choose k} p^k (1-p)^{ n-k} \]
123 |
124 |
125 |
126 |
127 | An Identity of Ramanujan
128 |
129 |
130 | \[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
131 | 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
132 | {1+\frac{e^{-8\pi}} {1+\ldots} } } } \]
133 |
134 |
135 |
136 |
137 | A Rogers-Ramanujan Identity
138 |
139 |
140 | \[ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots =
141 | \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}\]
142 |
143 |
144 |
145 |
146 | Maxwell’s Equations
147 |
148 |
149 | \[ \begin{aligned}
150 | \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
151 | \nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
152 | \nabla \cdot \vec{\mathbf{B}} & = 0 \end{aligned}
153 | \]
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
183 |
184 |
185 |
186 |
--------------------------------------------------------------------------------
/plugin/notes/notes.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | reveal.js - Slide Notes
7 |
8 |
137 |
138 |
139 |
140 |
141 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 | UPCOMING:
156 |
157 |
158 |
159 |
160 |
Time
161 | 0:00:00 AM
162 |
163 |
164 |
Elapsed
165 | 00:00:00
166 |
167 |
168 |
169 |
170 |
171 |
172 |
266 |
267 |
268 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | reveal.js - The HTML Presentation Framework
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
33 |
34 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
50 |
56 |
63 |
70 |
76 |
86 |
94 |
102 |
107 |
112 |
121 |
129 |
134 |
142 |
149 |
154 |
162 |
169 |
174 |
181 |
189 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
232 |
233 |
234 |
235 |
--------------------------------------------------------------------------------
/plugin/search/search.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Handles finding a text string anywhere in the slides and showing the next occurrence to the user
3 | * by navigatating to that slide and highlighting it.
4 | *
5 | * By Jon Snyder , February 2013
6 | */
7 |
8 | var RevealSearch = (function() {
9 |
10 | var matchedSlides;
11 | var currentMatchedIndex;
12 | var searchboxDirty;
13 | var myHilitor;
14 |
15 | // Original JavaScript code by Chirp Internet: www.chirp.com.au
16 | // Please acknowledge use of this code by including this header.
17 | // 2/2013 jon: modified regex to display any match, not restricted to word boundaries.
18 |
19 | function Hilitor(id, tag)
20 | {
21 |
22 | var targetNode = document.getElementById(id) || document.body;
23 | var hiliteTag = tag || "EM";
24 | var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM|SPAN)$");
25 | var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
26 | var wordColor = [];
27 | var colorIdx = 0;
28 | var matchRegex = "";
29 | var matchingSlides = [];
30 |
31 | this.setRegex = function(input)
32 | {
33 | input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
34 | matchRegex = new RegExp("(" + input + ")","i");
35 | }
36 |
37 | this.getRegex = function()
38 | {
39 | return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
40 | }
41 |
42 | // recursively apply word highlighting
43 | this.hiliteWords = function(node)
44 | {
45 | if(node == undefined || !node) return;
46 | if(!matchRegex) return;
47 | if(skipTags.test(node.nodeName)) return;
48 |
49 | if(node.hasChildNodes()) {
50 | for(var i=0; i < node.childNodes.length; i++)
51 | this.hiliteWords(node.childNodes[i]);
52 | }
53 | if(node.nodeType == 3) { // NODE_TEXT
54 | if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
55 | //find the slide's section element and save it in our list of matching slides
56 | var secnode = node.parentNode;
57 | while (secnode.nodeName != 'SECTION') {
58 | secnode = secnode.parentNode;
59 | }
60 |
61 | var slideIndex = Reveal.getIndices(secnode);
62 | var slidelen = matchingSlides.length;
63 | var alreadyAdded = false;
64 | for (var i=0; i < slidelen; i++) {
65 | if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
66 | alreadyAdded = true;
67 | }
68 | }
69 | if (! alreadyAdded) {
70 | matchingSlides.push(slideIndex);
71 | }
72 |
73 | if(!wordColor[regs[0].toLowerCase()]) {
74 | wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
75 | }
76 |
77 | var match = document.createElement(hiliteTag);
78 | match.appendChild(document.createTextNode(regs[0]));
79 | match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
80 | match.style.fontStyle = "inherit";
81 | match.style.color = "#000";
82 |
83 | var after = node.splitText(regs.index);
84 | after.nodeValue = after.nodeValue.substring(regs[0].length);
85 | node.parentNode.insertBefore(match, after);
86 | }
87 | }
88 | };
89 |
90 | // remove highlighting
91 | this.remove = function()
92 | {
93 | var arr = document.getElementsByTagName(hiliteTag);
94 | while(arr.length && (el = arr[0])) {
95 | el.parentNode.replaceChild(el.firstChild, el);
96 | }
97 | };
98 |
99 | // start highlighting at target node
100 | this.apply = function(input)
101 | {
102 | if(input == undefined || !input) return;
103 | this.remove();
104 | this.setRegex(input);
105 | this.hiliteWords(targetNode);
106 | return matchingSlides;
107 | };
108 |
109 | }
110 |
111 | function openSearch() {
112 | //ensure the search term input dialog is visible and has focus:
113 | var inputbox = document.getElementById("searchinput");
114 | inputbox.style.display = "inline";
115 | inputbox.focus();
116 | inputbox.select();
117 | }
118 |
119 | function toggleSearch() {
120 | var inputbox = document.getElementById("searchinput");
121 | if (inputbox.style.display !== "inline") {
122 | openSearch();
123 | }
124 | else {
125 | inputbox.style.display = "none";
126 | myHilitor.remove();
127 | }
128 | }
129 |
130 | function doSearch() {
131 | //if there's been a change in the search term, perform a new search:
132 | if (searchboxDirty) {
133 | var searchstring = document.getElementById("searchinput").value;
134 |
135 | //find the keyword amongst the slides
136 | myHilitor = new Hilitor("slidecontent");
137 | matchedSlides = myHilitor.apply(searchstring);
138 | currentMatchedIndex = 0;
139 | }
140 |
141 | //navigate to the next slide that has the keyword, wrapping to the first if necessary
142 | if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
143 | currentMatchedIndex = 0;
144 | }
145 | if (matchedSlides.length > currentMatchedIndex) {
146 | Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
147 | currentMatchedIndex++;
148 | }
149 | }
150 |
151 | var dom = {};
152 | dom.wrapper = document.querySelector( '.reveal' );
153 |
154 | if( !dom.wrapper.querySelector( '.searchbox' ) ) {
155 | var searchElement = document.createElement( 'div' );
156 | searchElement.id = "searchinputdiv";
157 | searchElement.classList.add( 'searchdiv' );
158 | searchElement.style.position = 'absolute';
159 | searchElement.style.top = '10px';
160 | searchElement.style.left = '10px';
161 | //embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
162 | searchElement.innerHTML = '
';
163 | dom.wrapper.appendChild( searchElement );
164 | }
165 |
166 | document.getElementById("searchbutton").addEventListener( 'click', function(event) {
167 | doSearch();
168 | }, false );
169 |
170 | document.getElementById("searchinput").addEventListener( 'keyup', function( event ) {
171 | switch (event.keyCode) {
172 | case 13:
173 | event.preventDefault();
174 | doSearch();
175 | searchboxDirty = false;
176 | break;
177 | default:
178 | searchboxDirty = true;
179 | }
180 | }, false );
181 |
182 | // Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)
183 | /*
184 | document.addEventListener( 'keydown', function( event ) {
185 | // Disregard the event if the target is editable or a
186 | // modifier is present
187 | if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
188 |
189 | if( event.keyCode === 83 ) {
190 | event.preventDefault();
191 | openSearch();
192 | }
193 | }, false );
194 | */
195 | return { open: openSearch };
196 | })();
197 |
--------------------------------------------------------------------------------
/plugin/zoom-js/zoom.js:
--------------------------------------------------------------------------------
1 | // Custom reveal.js integration
2 | (function(){
3 | var isEnabled = true;
4 |
5 | document.querySelector( '.reveal' ).addEventListener( 'mousedown', function( event ) {
6 | var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key';
7 |
8 | if( event[ modifier ] && isEnabled ) {
9 | event.preventDefault();
10 | zoom.to({ element: event.target, pan: false });
11 | }
12 | } );
13 |
14 | Reveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );
15 | Reveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );
16 | })();
17 |
18 | /*!
19 | * zoom.js 0.2 (modified version for use with reveal.js)
20 | * http://lab.hakim.se/zoom-js
21 | * MIT licensed
22 | *
23 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
24 | */
25 | var zoom = (function(){
26 |
27 | // The current zoom level (scale)
28 | var level = 1;
29 |
30 | // The current mouse position, used for panning
31 | var mouseX = 0,
32 | mouseY = 0;
33 |
34 | // Timeout before pan is activated
35 | var panEngageTimeout = -1,
36 | panUpdateInterval = -1;
37 |
38 | var currentOptions = null;
39 |
40 | // Check for transform support so that we can fallback otherwise
41 | var supportsTransforms = 'WebkitTransform' in document.body.style ||
42 | 'MozTransform' in document.body.style ||
43 | 'msTransform' in document.body.style ||
44 | 'OTransform' in document.body.style ||
45 | 'transform' in document.body.style;
46 |
47 | if( supportsTransforms ) {
48 | // The easing that will be applied when we zoom in/out
49 | document.body.style.transition = 'transform 0.8s ease';
50 | document.body.style.OTransition = '-o-transform 0.8s ease';
51 | document.body.style.msTransition = '-ms-transform 0.8s ease';
52 | document.body.style.MozTransition = '-moz-transform 0.8s ease';
53 | document.body.style.WebkitTransition = '-webkit-transform 0.8s ease';
54 | }
55 |
56 | // Zoom out if the user hits escape
57 | document.addEventListener( 'keyup', function( event ) {
58 | if( level !== 1 && event.keyCode === 27 ) {
59 | zoom.out();
60 | }
61 | }, false );
62 |
63 | // Monitor mouse movement for panning
64 | document.addEventListener( 'mousemove', function( event ) {
65 | if( level !== 1 ) {
66 | mouseX = event.clientX;
67 | mouseY = event.clientY;
68 | }
69 | }, false );
70 |
71 | /**
72 | * Applies the CSS required to zoom in, prioritizes use of CSS3
73 | * transforms but falls back on zoom for IE.
74 | *
75 | * @param {Number} pageOffsetX
76 | * @param {Number} pageOffsetY
77 | * @param {Number} elementOffsetX
78 | * @param {Number} elementOffsetY
79 | * @param {Number} scale
80 | */
81 | function magnify( pageOffsetX, pageOffsetY, elementOffsetX, elementOffsetY, scale ) {
82 |
83 | if( supportsTransforms ) {
84 | var origin = pageOffsetX +'px '+ pageOffsetY +'px',
85 | transform = 'translate('+ -elementOffsetX +'px,'+ -elementOffsetY +'px) scale('+ scale +')';
86 |
87 | document.body.style.transformOrigin = origin;
88 | document.body.style.OTransformOrigin = origin;
89 | document.body.style.msTransformOrigin = origin;
90 | document.body.style.MozTransformOrigin = origin;
91 | document.body.style.WebkitTransformOrigin = origin;
92 |
93 | document.body.style.transform = transform;
94 | document.body.style.OTransform = transform;
95 | document.body.style.msTransform = transform;
96 | document.body.style.MozTransform = transform;
97 | document.body.style.WebkitTransform = transform;
98 | }
99 | else {
100 | // Reset all values
101 | if( scale === 1 ) {
102 | document.body.style.position = '';
103 | document.body.style.left = '';
104 | document.body.style.top = '';
105 | document.body.style.width = '';
106 | document.body.style.height = '';
107 | document.body.style.zoom = '';
108 | }
109 | // Apply scale
110 | else {
111 | document.body.style.position = 'relative';
112 | document.body.style.left = ( - ( pageOffsetX + elementOffsetX ) / scale ) + 'px';
113 | document.body.style.top = ( - ( pageOffsetY + elementOffsetY ) / scale ) + 'px';
114 | document.body.style.width = ( scale * 100 ) + '%';
115 | document.body.style.height = ( scale * 100 ) + '%';
116 | document.body.style.zoom = scale;
117 | }
118 | }
119 |
120 | level = scale;
121 |
122 | if( level !== 1 && document.documentElement.classList ) {
123 | document.documentElement.classList.add( 'zoomed' );
124 | }
125 | else {
126 | document.documentElement.classList.remove( 'zoomed' );
127 | }
128 | }
129 |
130 | /**
131 | * Pan the document when the mosue cursor approaches the edges
132 | * of the window.
133 | */
134 | function pan() {
135 | var range = 0.12,
136 | rangeX = window.innerWidth * range,
137 | rangeY = window.innerHeight * range,
138 | scrollOffset = getScrollOffset();
139 |
140 | // Up
141 | if( mouseY < rangeY ) {
142 | window.scroll( scrollOffset.x, scrollOffset.y - ( 1 - ( mouseY / rangeY ) ) * ( 14 / level ) );
143 | }
144 | // Down
145 | else if( mouseY > window.innerHeight - rangeY ) {
146 | window.scroll( scrollOffset.x, scrollOffset.y + ( 1 - ( window.innerHeight - mouseY ) / rangeY ) * ( 14 / level ) );
147 | }
148 |
149 | // Left
150 | if( mouseX < rangeX ) {
151 | window.scroll( scrollOffset.x - ( 1 - ( mouseX / rangeX ) ) * ( 14 / level ), scrollOffset.y );
152 | }
153 | // Right
154 | else if( mouseX > window.innerWidth - rangeX ) {
155 | window.scroll( scrollOffset.x + ( 1 - ( window.innerWidth - mouseX ) / rangeX ) * ( 14 / level ), scrollOffset.y );
156 | }
157 | }
158 |
159 | function getScrollOffset() {
160 | return {
161 | x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset,
162 | y: window.scrollY !== undefined ? window.scrollY : window.pageXYffset
163 | }
164 | }
165 |
166 | return {
167 | /**
168 | * Zooms in on either a rectangle or HTML element.
169 | *
170 | * @param {Object} options
171 | * - element: HTML element to zoom in on
172 | * OR
173 | * - x/y: coordinates in non-transformed space to zoom in on
174 | * - width/height: the portion of the screen to zoom in on
175 | * - scale: can be used instead of width/height to explicitly set scale
176 | */
177 | to: function( options ) {
178 | // Due to an implementation limitation we can't zoom in
179 | // to another element without zooming out first
180 | if( level !== 1 ) {
181 | zoom.out();
182 | }
183 | else {
184 | options.x = options.x || 0;
185 | options.y = options.y || 0;
186 |
187 | // If an element is set, that takes precedence
188 | if( !!options.element ) {
189 | // Space around the zoomed in element to leave on screen
190 | var padding = 20;
191 |
192 | options.width = options.element.getBoundingClientRect().width + ( padding * 2 );
193 | options.height = options.element.getBoundingClientRect().height + ( padding * 2 );
194 | options.x = options.element.getBoundingClientRect().left - padding;
195 | options.y = options.element.getBoundingClientRect().top - padding;
196 | }
197 |
198 | // If width/height values are set, calculate scale from those values
199 | if( options.width !== undefined && options.height !== undefined ) {
200 | options.scale = Math.max( Math.min( window.innerWidth / options.width, window.innerHeight / options.height ), 1 );
201 | }
202 |
203 | if( options.scale > 1 ) {
204 | options.x *= options.scale;
205 | options.y *= options.scale;
206 |
207 | var scrollOffset = getScrollOffset();
208 |
209 | if( options.element ) {
210 | scrollOffset.x -= ( window.innerWidth - ( options.width * options.scale ) ) / 2;
211 | }
212 |
213 | magnify( scrollOffset.x, scrollOffset.y, options.x, options.y, options.scale );
214 |
215 | if( options.pan !== false ) {
216 |
217 | // Wait with engaging panning as it may conflict with the
218 | // zoom transition
219 | panEngageTimeout = setTimeout( function() {
220 | panUpdateInterval = setInterval( pan, 1000 / 60 );
221 | }, 800 );
222 |
223 | }
224 | }
225 |
226 | currentOptions = options;
227 | }
228 | },
229 |
230 | /**
231 | * Resets the document zoom state to its default.
232 | */
233 | out: function() {
234 | clearTimeout( panEngageTimeout );
235 | clearInterval( panUpdateInterval );
236 |
237 | var scrollOffset = getScrollOffset();
238 |
239 | if( currentOptions && currentOptions.element ) {
240 | scrollOffset.x -= ( window.innerWidth - ( currentOptions.width * currentOptions.scale ) ) / 2;
241 | }
242 |
243 | magnify( scrollOffset.x, scrollOffset.y, 0, 0, 1 );
244 |
245 | level = 1;
246 | },
247 |
248 | // Alias
249 | magnify: function( options ) { this.to( options ) },
250 | reset: function() { this.out() },
251 |
252 | zoomLevel: function() {
253 | return level;
254 | }
255 | }
256 |
257 | })();
258 |
259 |
--------------------------------------------------------------------------------
/plugin/markdown/markdown.js:
--------------------------------------------------------------------------------
1 | /**
2 | * The reveal.js markdown plugin. Handles parsing of
3 | * markdown inside of presentations as well as loading
4 | * of external markdown documents.
5 | */
6 | (function( root, factory ) {
7 | if( typeof exports === 'object' ) {
8 | module.exports = factory( require( './marked' ) );
9 | }
10 | else {
11 | // Browser globals (root is window)
12 | root.RevealMarkdown = factory( root.marked );
13 | root.RevealMarkdown.initialize();
14 | }
15 | }( this, function( marked ) {
16 |
17 | if( typeof marked === 'undefined' ) {
18 | throw 'The reveal.js Markdown plugin requires marked to be loaded';
19 | }
20 |
21 | if( typeof hljs !== 'undefined' ) {
22 | marked.setOptions({
23 | highlight: function( lang, code ) {
24 | return hljs.highlightAuto( lang, code ).value;
25 | }
26 | });
27 | }
28 |
29 | var DEFAULT_SLIDE_SEPARATOR = '^\n---\n$',
30 | DEFAULT_NOTES_SEPARATOR = 'note:',
31 | DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
32 | DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
33 |
34 |
35 | /**
36 | * Retrieves the markdown contents of a slide section
37 | * element. Normalizes leading tabs/whitespace.
38 | */
39 | function getMarkdownFromSlide( section ) {
40 |
41 | var template = section.querySelector( 'script' );
42 |
43 | // strip leading whitespace so it isn't evaluated as code
44 | var text = ( template || section ).textContent;
45 |
46 | var leadingWs = text.match( /^\n?(\s*)/ )[1].length,
47 | leadingTabs = text.match( /^\n?(\t*)/ )[1].length;
48 |
49 | if( leadingTabs > 0 ) {
50 | text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' );
51 | }
52 | else if( leadingWs > 1 ) {
53 | text = text.replace( new RegExp('\\n? {' + leadingWs + '}','g'), '\n' );
54 | }
55 |
56 | return text;
57 |
58 | }
59 |
60 | /**
61 | * Given a markdown slide section element, this will
62 | * return all arguments that aren't related to markdown
63 | * parsing. Used to forward any other user-defined arguments
64 | * to the output markdown slide.
65 | */
66 | function getForwardedAttributes( section ) {
67 |
68 | var attributes = section.attributes;
69 | var result = [];
70 |
71 | for( var i = 0, len = attributes.length; i < len; i++ ) {
72 | var name = attributes[i].name,
73 | value = attributes[i].value;
74 |
75 | // disregard attributes that are used for markdown loading/parsing
76 | if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue;
77 |
78 | if( value ) {
79 | result.push( name + '=' + value );
80 | }
81 | else {
82 | result.push( name );
83 | }
84 | }
85 |
86 | return result.join( ' ' );
87 |
88 | }
89 |
90 | /**
91 | * Inspects the given options and fills out default
92 | * values for what's not defined.
93 | */
94 | function getSlidifyOptions( options ) {
95 |
96 | options = options || {};
97 | options.separator = options.separator || DEFAULT_SLIDE_SEPARATOR;
98 | options.notesSeparator = options.notesSeparator || DEFAULT_NOTES_SEPARATOR;
99 | options.attributes = options.attributes || '';
100 |
101 | return options;
102 |
103 | }
104 |
105 | /**
106 | * Helper function for constructing a markdown slide.
107 | */
108 | function createMarkdownSlide( content, options ) {
109 |
110 | options = getSlidifyOptions( options );
111 |
112 | var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) );
113 |
114 | if( notesMatch.length === 2 ) {
115 | content = notesMatch[0] + '';
116 | }
117 |
118 | return '';
119 |
120 | }
121 |
122 | /**
123 | * Parses a data string into multiple slides based
124 | * on the passed in separator arguments.
125 | */
126 | function slidify( markdown, options ) {
127 |
128 | options = getSlidifyOptions( options );
129 |
130 | var separatorRegex = new RegExp( options.separator + ( options.verticalSeparator ? '|' + options.verticalSeparator : '' ), 'mg' ),
131 | horizontalSeparatorRegex = new RegExp( options.separator );
132 |
133 | var matches,
134 | lastIndex = 0,
135 | isHorizontal,
136 | wasHorizontal = true,
137 | content,
138 | sectionStack = [];
139 |
140 | // iterate until all blocks between separators are stacked up
141 | while( matches = separatorRegex.exec( markdown ) ) {
142 | notes = null;
143 |
144 | // determine direction (horizontal by default)
145 | isHorizontal = horizontalSeparatorRegex.test( matches[0] );
146 |
147 | if( !isHorizontal && wasHorizontal ) {
148 | // create vertical stack
149 | sectionStack.push( [] );
150 | }
151 |
152 | // pluck slide content from markdown input
153 | content = markdown.substring( lastIndex, matches.index );
154 |
155 | if( isHorizontal && wasHorizontal ) {
156 | // add to horizontal stack
157 | sectionStack.push( content );
158 | }
159 | else {
160 | // add to vertical stack
161 | sectionStack[sectionStack.length-1].push( content );
162 | }
163 |
164 | lastIndex = separatorRegex.lastIndex;
165 | wasHorizontal = isHorizontal;
166 | }
167 |
168 | // add the remaining slide
169 | ( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) );
170 |
171 | var markdownSections = '';
172 |
173 | // flatten the hierarchical stack, and insert tags
174 | for( var i = 0, len = sectionStack.length; i < len; i++ ) {
175 | // vertical
176 | if( sectionStack[i] instanceof Array ) {
177 | markdownSections += '';
178 |
179 | sectionStack[i].forEach( function( child ) {
180 | markdownSections += '' + createMarkdownSlide( child, options ) + '';
181 | } );
182 |
183 | markdownSections += '';
184 | }
185 | else {
186 | markdownSections += '' + createMarkdownSlide( sectionStack[i], options ) + '';
187 | }
188 | }
189 |
190 | return markdownSections;
191 |
192 | }
193 |
194 | /**
195 | * Parses any current data-markdown slides, splits
196 | * multi-slide markdown into separate sections and
197 | * handles loading of external markdown.
198 | */
199 | function processSlides() {
200 |
201 | var sections = document.querySelectorAll( '[data-markdown]'),
202 | section;
203 |
204 | for( var i = 0, len = sections.length; i < len; i++ ) {
205 |
206 | section = sections[i];
207 |
208 | if( section.getAttribute( 'data-markdown' ).length ) {
209 |
210 | var xhr = new XMLHttpRequest(),
211 | url = section.getAttribute( 'data-markdown' );
212 |
213 | datacharset = section.getAttribute( 'data-charset' );
214 |
215 | // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes
216 | if( datacharset != null && datacharset != '' ) {
217 | xhr.overrideMimeType( 'text/html; charset=' + datacharset );
218 | }
219 |
220 | xhr.onreadystatechange = function() {
221 | if( xhr.readyState === 4 ) {
222 | if ( xhr.status >= 200 && xhr.status < 300 ) {
223 |
224 | section.outerHTML = slidify( xhr.responseText, {
225 | separator: section.getAttribute( 'data-separator' ),
226 | verticalSeparator: section.getAttribute( 'data-vertical' ),
227 | notesSeparator: section.getAttribute( 'data-notes' ),
228 | attributes: getForwardedAttributes( section )
229 | });
230 |
231 | }
232 | else {
233 |
234 | section.outerHTML = '' +
235 | 'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' +
236 | 'Check your browser\'s JavaScript console for more details.' +
237 | 'Remember that you need to serve the presentation HTML from a HTTP server.
' +
238 | '';
239 |
240 | }
241 | }
242 | };
243 |
244 | xhr.open( 'GET', url, false );
245 |
246 | try {
247 | xhr.send();
248 | }
249 | catch ( e ) {
250 | alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e );
251 | }
252 |
253 | }
254 | else if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-vertical' ) || section.getAttribute( 'data-notes' ) ) {
255 |
256 | section.outerHTML = slidify( getMarkdownFromSlide( section ), {
257 | separator: section.getAttribute( 'data-separator' ),
258 | verticalSeparator: section.getAttribute( 'data-vertical' ),
259 | notesSeparator: section.getAttribute( 'data-notes' ),
260 | attributes: getForwardedAttributes( section )
261 | });
262 |
263 | }
264 | else {
265 | section.innerHTML = createMarkdownSlide( getMarkdownFromSlide( section ) );
266 | }
267 | }
268 |
269 | }
270 |
271 | /**
272 | * Check if a node value has the attributes pattern.
273 | * If yes, extract it and add that value as one or several attributes
274 | * the the terget element.
275 | *
276 | * You need Cache Killer on Chrome to see the effect on any FOM transformation
277 | * directly on refresh (F5)
278 | * http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277
279 | */
280 | function addAttributeInElement( node, elementTarget, separator ) {
281 |
282 | var mardownClassesInElementsRegex = new RegExp( separator, 'mg' );
283 | var mardownClassRegex = new RegExp( "([^\"= ]+?)=\"([^\"=]+?)\"", 'mg' );
284 | var nodeValue = node.nodeValue;
285 | if( matches = mardownClassesInElementsRegex.exec( nodeValue ) ) {
286 |
287 | var classes = matches[1];
288 | nodeValue = nodeValue.substring( 0, matches.index ) + nodeValue.substring( mardownClassesInElementsRegex.lastIndex );
289 | node.nodeValue = nodeValue;
290 | while( matchesClass = mardownClassRegex.exec( classes ) ) {
291 | elementTarget.setAttribute( matchesClass[1], matchesClass[2] );
292 | }
293 | return true;
294 | }
295 | return false;
296 | }
297 |
298 | /**
299 | * Add attributes to the parent element of a text node,
300 | * or the element of an attribute node.
301 | */
302 | function addAttributes( section, element, previousElement, separatorElementAttributes, separatorSectionAttributes ) {
303 |
304 | if ( element != null && element.childNodes != undefined && element.childNodes.length > 0 ) {
305 | previousParentElement = element;
306 | for( var i = 0; i < element.childNodes.length; i++ ) {
307 | childElement = element.childNodes[i];
308 | if ( i > 0 ) {
309 | j = i - 1;
310 | while ( j >= 0 ) {
311 | aPreviousChildElement = element.childNodes[j];
312 | if ( typeof aPreviousChildElement.setAttribute == 'function' && aPreviousChildElement.tagName != "BR" ) {
313 | previousParentElement = aPreviousChildElement;
314 | break;
315 | }
316 | j = j - 1;
317 | }
318 | }
319 | parentSection = section;
320 | if( childElement.nodeName == "section" ) {
321 | parentSection = childElement ;
322 | previousParentElement = childElement ;
323 | }
324 | if ( typeof childElement.setAttribute == 'function' || childElement.nodeType == Node.COMMENT_NODE ) {
325 | addAttributes( parentSection, childElement, previousParentElement, separatorElementAttributes, separatorSectionAttributes );
326 | }
327 | }
328 | }
329 |
330 | if ( element.nodeType == Node.COMMENT_NODE ) {
331 | if ( addAttributeInElement( element, previousElement, separatorElementAttributes ) == false ) {
332 | addAttributeInElement( element, section, separatorSectionAttributes );
333 | }
334 | }
335 | }
336 |
337 | /**
338 | * Converts any current data-markdown slides in the
339 | * DOM to HTML.
340 | */
341 | function convertSlides() {
342 |
343 | var sections = document.querySelectorAll( '[data-markdown]');
344 |
345 | for( var i = 0, len = sections.length; i < len; i++ ) {
346 |
347 | var section = sections[i];
348 |
349 | // Only parse the same slide once
350 | if( !section.getAttribute( 'data-markdown-parsed' ) ) {
351 |
352 | section.setAttribute( 'data-markdown-parsed', true )
353 |
354 | var notes = section.querySelector( 'aside.notes' );
355 | var markdown = getMarkdownFromSlide( section );
356 |
357 | section.innerHTML = marked( markdown );
358 | addAttributes( section, section, null, section.getAttribute( 'data-element-attributes' ) ||
359 | section.parentNode.getAttribute( 'data-element-attributes' ) ||
360 | DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR,
361 | section.getAttribute( 'data-attributes' ) ||
362 | section.parentNode.getAttribute( 'data-attributes' ) ||
363 | DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR);
364 |
365 | // If there were notes, we need to re-add them after
366 | // having overwritten the section's HTML
367 | if( notes ) {
368 | section.appendChild( notes );
369 | }
370 |
371 | }
372 |
373 | }
374 |
375 | }
376 |
377 | // API
378 | return {
379 |
380 | initialize: function() {
381 | processSlides();
382 | convertSlides();
383 | },
384 |
385 | // TODO: Do these belong in the API?
386 | processSlides: processSlides,
387 | convertSlides: convertSlides,
388 | slidify: slidify
389 |
390 | };
391 |
392 | }));
393 |
--------------------------------------------------------------------------------
/plugin/markdown/marked.js:
--------------------------------------------------------------------------------
1 | /**
2 | * marked - a markdown parser
3 | * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed)
4 | * https://github.com/chjj/marked
5 | */
6 |
7 | (function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){3,} *\n*/,blockquote:/^( *>[^\n]+(\n[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
8 | text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr",/\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b";block.html=replace(block.html)("comment",/\x3c!--[\s\S]*?--\x3e/)("closed",
9 | /<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1",
10 | "\\2")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm)if(this.options.tables)this.rules=block.tables;else this.rules=block.gfm}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};
11 | Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1)this.tokens.push({type:"space"})}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,
12 | "");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,
13 | "").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);
15 | bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+
16 | 1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item[item.length-1]==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:cap[1]==="pre"||cap[1]==="script",text:cap[0]});continue}if(top&&
17 | (cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^\x3c!--[\s\S]*?--\x3e|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
20 | code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
21 | em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;
22 | if(!this.links)throw new Error("Tokens array requires a `links` property.");if(this.options.gfm)if(this.options.breaks)this.rules=inline.breaks;else this.rules=inline.gfm;else if(this.options.pedantic)this.rules=inline.pedantic}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);
23 | out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1][6]===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=''+text+"";continue}if(cap=this.rules.url.exec(src)){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=''+text+"";continue}if(cap=this.rules.tag.exec(src)){src=src.substring(cap[0].length);
24 | out+=this.options.sanitize?escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);out+=this.outputLink(cap,{href:cap[2],title:cap[3]});continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0][0];src=cap[0].substring(1)+src;continue}out+=this.outputLink(cap,link);continue}if(cap=this.rules.strong.exec(src)){src=
25 | src.substring(cap[0].length);out+=""+this.output(cap[2]||cap[1])+"";continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=""+this.output(cap[2]||cap[1])+"";continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=""+escape(cap[2],true)+"";continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+="
";continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=""+
26 | this.output(cap[1])+"";continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=escape(cap[0]);continue}if(src)throw new Error("Infinite loop on byte: "+src.charCodeAt(0));}return out};InlineLexer.prototype.outputLink=function(cap,link){if(cap[0][0]!=="!")return'"+this.output(cap[1])+"";else return'
"};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/--/g,"\u2014").replace(/'([^']*)'/g,"\u2018$1\u2019").replace(/"([^"]*)"/g,"\u201c$1\u201d").replace(/\.{3}/g,"\u2026")};InlineLexer.prototype.mangle=function(text){var out="",l=text.length,i=0,ch;for(;i0.5)ch="x"+ch.toString(16);out+=""+ch+";"}return out};function Parser(options){this.tokens=[];this.token=null;
28 | this.options=options||marked.defaults}Parser.parse=function(src,options){var parser=new Parser(options);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options);this.tokens=src.reverse();var out="";while(this.next())out+=this.tok();return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;
29 | while(this.peek().type==="text")body+="\n"+this.next().text;return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case "space":return"";case "hr":return"
\n";case "heading":return""+this.inline.output(this.token.text)+"\n";case "code":if(this.options.highlight){var code=this.options.highlight(this.token.text,this.token.lang);if(code!=null&&code!==this.token.text){this.token.escaped=true;this.token.text=code}}if(!this.token.escaped)this.token.text=
30 | escape(this.token.text,true);return""+this.token.text+"
\n";case "table":var body="",heading,i,row,cell,j;body+="\n\n";for(i=0;i'+heading+"\n":"| "+heading+" | \n"}body+="
\n\n";body+="\n";for(i=0;i\n";for(j=0;j'+cell+"\n":""+cell+" | \n"}body+="\n"}body+="\n";return"\n";case "blockquote_start":var body="";while(this.next().type!=="blockquote_end")body+=this.tok();return"\n"+body+"
\n";case "list_start":var type=this.token.ordered?"ol":"ul",body="";while(this.next().type!=="list_end")body+=
32 | this.tok();return"<"+type+">\n"+body+""+type+">\n";case "list_item_start":var body="";while(this.next().type!=="list_item_end")body+=this.token.type==="text"?this.parseText():this.tok();return""+body+"\n";case "loose_item_start":var body="";while(this.next().type!=="list_item_end")body+=this.tok();return""+body+"\n";case "html":return!this.token.pre&&!this.options.pedantic?this.inline.output(this.token.text):this.token.text;case "paragraph":return""+this.inline.output(this.token.text)+
33 | "
\n";case "text":return""+this.parseText()+"
\n"}};function escape(html,encode){return html.replace(!encode?/&(?!#?\w+;)/g:/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=
34 | 1,target,key;for(;iAn error occured:"+escape(e.message+"",true)+"
";throw e;}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,smartLists:false,silent:false,highlight:null,langPrefix:""};marked.Parser=Parser;marked.parser=Parser.parse;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;
37 | marked.parse=marked;if(typeof exports==="object")module.exports=marked;else if(typeof define==="function"&&define.amd)define(function(){return marked});else this.marked=marked}).call(function(){return this||(typeof window!=="undefined"?window:global)}());
38 |
--------------------------------------------------------------------------------