Merge pull request #12 from hakimel/dev

Syncing to current version
This commit is contained in:
Asvin Goel 2016-07-21 12:09:08 +02:00 committed by GitHub
commit c1d94f1b60
104 changed files with 10095 additions and 4856 deletions

7
.gitignore vendored
View File

@ -1,6 +1,13 @@
.idea/
*.iml
*.iws
*.eml
out/
.DS_Store .DS_Store
.svn .svn
log/*.log log/*.log
tmp/** tmp/**
node_modules/ node_modules/
.sass-cache .sass-cache
css/reveal.min.css
js/reveal.min.js

View File

@ -1,5 +1,5 @@
language: node_js language: node_js
node_js: node_js:
- 0.8 - 4.1.1
before_script: before_script:
- npm install -g grunt-cli - npm install -g grunt-cli

23
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,23 @@
## Contributing
Please keep the [issue tracker](http://github.com/hakimel/reveal.js/issues) limited to **bug reports**, **feature requests** and **pull requests**.
### Personal Support
If you have personal support or setup questions the best place to ask those are [StackOverflow](http://stackoverflow.com/questions/tagged/reveal.js).
### Bug Reports
When reporting a bug make sure to include information about which browser and operating system you are on as well as the necessary steps to reproduce the issue. If possible please include a link to a sample presentation where the bug can be tested.
### Pull Requests
- Should follow the coding style of the file you work in, most importantly:
- Tabs to indent
- Single-quoted strings
- Should be made towards the **dev branch**
- Should be submitted from a feature/topic branch (not your master)
### Plugins
Please do not submit plugins as pull requests. They should be maintained in their own separate repository. More information here: https://github.com/hakimel/reveal.js/wiki/Plugin-Guidelines

View File

@ -1,6 +1,8 @@
/* global module:false */ /* global module:false */
module.exports = function(grunt) { module.exports = function(grunt) {
var port = grunt.option('port') || 8000; var port = grunt.option('port') || 8000;
var base = grunt.option('base') || '.';
// Project configuration // Project configuration
grunt.initConfig({ grunt.initConfig({
pkg: grunt.file.readJSON('package.json'), pkg: grunt.file.readJSON('package.json'),
@ -11,7 +13,7 @@ module.exports = function(grunt) {
' * http://lab.hakim.se/reveal-js\n' + ' * http://lab.hakim.se/reveal-js\n' +
' * MIT licensed\n' + ' * MIT licensed\n' +
' *\n' + ' *\n' +
' * Copyright (C) 2013 Hakim El Hattab, http://hakim.se\n' + ' * Copyright (C) 2016 Hakim El Hattab, http://hakim.se\n' +
' */' ' */'
}, },
@ -29,6 +31,31 @@ module.exports = function(grunt) {
} }
}, },
sass: {
core: {
files: {
'css/reveal.css': 'css/reveal.scss',
}
},
themes: {
files: [
{
expand: true,
cwd: 'css/theme/source',
src: ['*.scss'],
dest: 'css/theme',
ext: '.css'
}
]
}
},
autoprefixer: {
dist: {
src: 'css/reveal.css'
}
},
cssmin: { cssmin: {
compress: { compress: {
files: { files: {
@ -37,22 +64,6 @@ module.exports = function(grunt) {
} }
}, },
sass: {
main: {
files: {
'css/theme/default.css': 'css/theme/source/default.scss',
'css/theme/beige.css': 'css/theme/source/beige.scss',
'css/theme/night.css': 'css/theme/source/night.scss',
'css/theme/serif.css': 'css/theme/source/serif.scss',
'css/theme/simple.css': 'css/theme/source/simple.scss',
'css/theme/sky.css': 'css/theme/source/sky.scss',
'css/theme/moon.css': 'css/theme/source/moon.scss',
'css/theme/solarized.css': 'css/theme/source/solarized.scss',
'css/theme/blood.css': 'css/theme/source/blood.scss'
}
}
},
jshint: { jshint: {
options: { options: {
curly: false, curly: false,
@ -70,7 +81,9 @@ module.exports = function(grunt) {
head: false, head: false,
module: false, module: false,
console: false, console: false,
unescape: false unescape: false,
define: false,
exports: false
} }
}, },
files: [ 'Gruntfile.js', 'js/reveal.js' ] files: [ 'Gruntfile.js', 'js/reveal.js' ]
@ -80,9 +93,9 @@ module.exports = function(grunt) {
server: { server: {
options: { options: {
port: port, port: port,
base: '.', base: base,
livereload: true, livereload: true,
open: true open: true
} }
} }
}, },
@ -94,25 +107,39 @@ module.exports = function(grunt) {
'js/**', 'js/**',
'lib/**', 'lib/**',
'images/**', 'images/**',
'plugin/**' 'plugin/**',
'**.md'
] ]
}, },
watch: { watch: {
options: { js: {
livereload: true files: [ 'Gruntfile.js', 'js/reveal.js' ],
}, tasks: 'js'
main: {
files: [ 'Gruntfile.js', 'js/reveal.js', 'css/reveal.css' ],
tasks: 'default'
}, },
theme: { theme: {
files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ], files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ],
tasks: 'themes' tasks: 'css-themes'
}, },
html: { css: {
files: [ 'index.html'] files: [ 'css/reveal.scss' ],
} tasks: 'css-core'
},
html: {
files: [ '*.html']
},
markdown: {
files: [ '*.md' ]
},
options: {
livereload: true
}
},
retire: {
js: ['js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js'],
node: ['.'],
options: {}
} }
}); });
@ -123,15 +150,26 @@ module.exports = function(grunt) {
grunt.loadNpmTasks( 'grunt-contrib-cssmin' ); grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' ); grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-contrib-watch' ); grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-contrib-sass' ); grunt.loadNpmTasks( 'grunt-sass' );
grunt.loadNpmTasks( 'grunt-contrib-connect' ); grunt.loadNpmTasks( 'grunt-contrib-connect' );
grunt.loadNpmTasks( 'grunt-autoprefixer' );
grunt.loadNpmTasks( 'grunt-zip' ); grunt.loadNpmTasks( 'grunt-zip' );
grunt.loadNpmTasks( 'grunt-retire' );
// Default task // Default task
grunt.registerTask( 'default', [ 'jshint', 'cssmin', 'uglify', 'qunit' ] ); grunt.registerTask( 'default', [ 'css', 'js' ] );
// Theme task // JS task
grunt.registerTask( 'themes', [ 'sass' ] ); grunt.registerTask( 'js', [ 'jshint', 'uglify', 'qunit' ] );
// Theme CSS
grunt.registerTask( 'css-themes', [ 'sass:themes' ] );
// Core framework CSS
grunt.registerTask( 'css-core', [ 'sass:core', 'autoprefixer', 'cssmin' ] );
// All CSS
grunt.registerTask( 'css', [ 'sass', 'autoprefixer', 'cssmin' ] );
// Package presentation to archive // Package presentation to archive
grunt.registerTask( 'package', [ 'default', 'zip' ] ); grunt.registerTask( 'package', [ 'default', 'zip' ] );

View File

@ -1,4 +1,4 @@
Copyright (C) 2013 Hakim El Hattab, http://hakim.se Copyright (C) 2016 Hakim El Hattab, http://hakim.se
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

615
README.md

File diff suppressed because one or more lines are too long

27
bower.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "reveal.js",
"version": "3.3.0",
"main": [
"js/reveal.js",
"css/reveal.css"
],
"homepage": "http://lab.hakim.se/reveal-js/",
"license": "MIT",
"description": "The HTML Presentation Framework",
"authors": [
"Hakim El Hattab <hakim.elhattab@gmail.com>"
],
"dependencies": {
"headjs": "~1.0.3"
},
"repository": {
"type": "git",
"url": "git://github.com/hakimel/reveal.js.git"
},
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test"
]
}

View File

@ -6,171 +6,197 @@
manipulate this file as you see fit. */ manipulate this file as you see fit. */
/* SECTION 1: Set default width, margin, float, and @media print {
background. This prevents elements from extending
beyond the edge of the printed page, and prevents /* SECTION 1: Set default width, margin, float, and
unnecessary background images from printing */ background. This prevents elements from extending
body { beyond the edge of the printed page, and prevents
background: #fff; unnecessary background images from printing */
font-size: 13pt; html {
width: auto; background: #fff;
height: auto; width: auto;
border: 0; height: auto;
margin: 0 5%; overflow: visible;
padding: 0; }
float: none !important; body {
overflow: visible; background: #fff;
} font-size: 20pt;
html { width: auto;
background: #fff; height: auto;
width: auto; border: 0;
height: auto; margin: 0 5%;
overflow: visible; padding: 0;
} overflow: visible;
float: none !important;
/* SECTION 2: Remove any elements not needed in print. }
This would include navigation, ads, sidebars, etc. */
.nestedarrow, /* SECTION 2: Remove any elements not needed in print.
.controls, This would include navigation, ads, sidebars, etc. */
.reveal .progress, .nestedarrow,
.reveal.overview, .controls,
.fork-reveal, .fork-reveal,
.share-reveal, .share-reveal,
.state-background { .state-background,
display: none !important; .reveal .progress,
} .reveal .backgrounds {
display: none !important;
/* SECTION 3: Set body font face, size, and color. }
Consider using a serif font for readability. */
body, p, td, li, div, a { /* SECTION 3: Set body font face, size, and color.
font-size: 16pt!important; Consider using a serif font for readability. */
font-family: Georgia, "Times New Roman", Times, serif !important; body, p, td, li, div {
color: #000; font-size: 20pt!important;
} font-family: Georgia, "Times New Roman", Times, serif !important;
color: #000;
/* SECTION 4: Set heading font face, sizes, and color. }
Differentiate your headings from your body text.
Perhaps use a large sans-serif for distinction. */ /* SECTION 4: Set heading font face, sizes, and color.
h1,h2,h3,h4,h5,h6 { Differentiate your headings from your body text.
color: #000!important; Perhaps use a large sans-serif for distinction. */
height: auto; h1,h2,h3,h4,h5,h6 {
line-height: normal; color: #000!important;
font-family: Georgia, "Times New Roman", Times, serif !important; height: auto;
text-shadow: 0 0 0 #000 !important; line-height: normal;
text-align: left; font-family: Georgia, "Times New Roman", Times, serif !important;
letter-spacing: normal; text-shadow: 0 0 0 #000 !important;
} text-align: left;
/* Need to reduce the size of the fonts for printing */ letter-spacing: normal;
h1 { font-size: 26pt !important; } }
h2 { font-size: 22pt !important; } /* Need to reduce the size of the fonts for printing */
h3 { font-size: 20pt !important; } h1 { font-size: 28pt !important; }
h4 { font-size: 20pt !important; font-variant: small-caps; } h2 { font-size: 24pt !important; }
h5 { font-size: 19pt !important; } h3 { font-size: 22pt !important; }
h6 { font-size: 18pt !important; font-style: italic; } h4 { font-size: 22pt !important; font-variant: small-caps; }
h5 { font-size: 21pt !important; }
/* SECTION 5: Make hyperlinks more usable. h6 { font-size: 20pt !important; font-style: italic; }
Ensure links are underlined, and consider appending
the URL to the end of the link for usability. */ /* SECTION 5: Make hyperlinks more usable.
a:link, Ensure links are underlined, and consider appending
a:visited { the URL to the end of the link for usability. */
color: #000 !important; a:link,
font-weight: bold; a:visited {
text-decoration: underline; color: #000 !important;
} font-weight: bold;
/* text-decoration: underline;
.reveal a:link:after, }
.reveal a:visited:after { /*
content: " (" attr(href) ") "; .reveal a:link:after,
color: #222 !important; .reveal a:visited:after {
font-size: 90%; content: " (" attr(href) ") ";
} color: #222 !important;
*/ font-size: 90%;
}
*/
/* SECTION 6: more reveal.js specific additions by @skypanther */
ul, ol, div, p {
visibility: visible; /* SECTION 6: more reveal.js specific additions by @skypanther */
position: static; ul, ol, div, p {
width: auto; visibility: visible;
height: auto; position: static;
display: block; width: auto;
overflow: visible; height: auto;
margin: auto; display: block;
text-align: left !important; overflow: visible;
} margin: 0;
.reveal .slides { text-align: left !important;
position: static; }
width: auto; .reveal pre,
height: auto; .reveal table {
margin-left: 0;
left: auto; margin-right: 0;
top: auto; }
margin-left: auto; .reveal pre code {
margin-top: auto; padding: 20px;
padding: auto; border: 1px solid #ddd;
}
overflow: visible; .reveal blockquote {
display: block; margin: 20px 0;
}
text-align: center; .reveal .slides {
-webkit-perspective: none; position: static !important;
-moz-perspective: none; width: auto !important;
-ms-perspective: none; height: auto !important;
perspective: none;
left: 0 !important;
-webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */ top: 0 !important;
-moz-perspective-origin: 50% 50%; margin-left: 0 !important;
-ms-perspective-origin: 50% 50%; margin-top: 0 !important;
perspective-origin: 50% 50%; padding: 0 !important;
} zoom: 1 !important;
.reveal .slides>section,
.reveal .slides>section>section { overflow: visible !important;
display: block !important;
visibility: visible !important;
position: static !important; text-align: left !important;
width: 90% !important; -webkit-perspective: none;
height: auto !important; -moz-perspective: none;
display: block !important; -ms-perspective: none;
overflow: visible !important; perspective: none;
left: 0% !important; -webkit-perspective-origin: 50% 50%;
top: 0% !important; -moz-perspective-origin: 50% 50%;
margin-left: 0px !important; -ms-perspective-origin: 50% 50%;
margin-top: 0px !important; perspective-origin: 50% 50%;
padding: 20px 0px !important; }
.reveal .slides section {
opacity: 1 !important; visibility: visible !important;
position: static !important;
-webkit-transform-style: flat !important; width: auto !important;
-moz-transform-style: flat !important; height: auto !important;
-ms-transform-style: flat !important; display: block !important;
transform-style: flat !important; overflow: visible !important;
-webkit-transform: none !important; left: 0 !important;
-moz-transform: none !important; top: 0 !important;
-ms-transform: none !important; margin-left: 0 !important;
transform: none !important; margin-top: 0 !important;
} padding: 60px 20px !important;
.reveal section { z-index: auto !important;
page-break-after: always !important;
display: block !important; opacity: 1 !important;
}
.reveal section .fragment { page-break-after: always !important;
opacity: 1 !important;
visibility: visible !important; -webkit-transform-style: flat !important;
-moz-transform-style: flat !important;
-webkit-transform: none !important; -ms-transform-style: flat !important;
-moz-transform: none !important; transform-style: flat !important;
-ms-transform: none !important;
transform: none !important; -webkit-transform: none !important;
} -moz-transform: none !important;
.reveal section:last-of-type { -ms-transform: none !important;
page-break-after: avoid !important; transform: none !important;
}
.reveal section img { -webkit-transition: none !important;
display: block; -moz-transition: none !important;
margin: 15px 0px; -ms-transition: none !important;
background: rgba(255,255,255,1); transition: none !important;
border: 1px solid #666; }
box-shadow: none; .reveal .slides section.stack {
padding: 0 !important;
}
.reveal section:last-of-type {
page-break-after: avoid !important;
}
.reveal section .fragment {
opacity: 1 !important;
visibility: visible !important;
-webkit-transform: none !important;
-moz-transform: none !important;
-ms-transform: none !important;
transform: none !important;
}
.reveal section img {
display: block;
margin: 15px 0px;
background: rgba(255,255,255,1);
border: 1px solid #666;
box-shadow: none;
}
.reveal section small {
font-size: 0.8em;
}
} }

View File

@ -1,24 +1,15 @@
/* Default Print Stylesheet Template /**
by Rob Glazebrook of CSSnewbie.com * This stylesheet is used to print reveal.js
Last Updated: June 4, 2008 * presentations to PDF.
*
Feel free (nay, compelled) to edit, append, and * https://github.com/hakimel/reveal.js#pdf-export
manipulate this file as you see fit. */ */
/* SECTION 1: Set default width, margin, float, and
background. This prevents elements from extending
beyond the edge of the printed page, and prevents
unnecessary background images from printing */
* { * {
-webkit-print-color-adjust: exact; -webkit-print-color-adjust: exact;
} }
body { body {
font-size: 18pt;
width: 297mm;
height: 229mm;
margin: 0 auto !important; margin: 0 auto !important;
border: 0; border: 0;
padding: 0; padding: 0;
@ -32,16 +23,11 @@ html {
overflow: visible; overflow: visible;
} }
@page { /* Remove any elements not needed in print. */
size: letter landscape;
margin: 0;
}
/* SECTION 2: Remove any elements not needed in print.
This would include navigation, ads, sidebars, etc. */
.nestedarrow, .nestedarrow,
.controls, .reveal .controls,
.reveal .progress, .reveal .progress,
.reveal .playback,
.reveal.overview, .reveal.overview,
.fork-reveal, .fork-reveal,
.share-reveal, .share-reveal,
@ -49,35 +35,15 @@ html {
display: none !important; display: none !important;
} }
/* SECTION 3: Set body font face, size, and color. h1, h2, h3, h4, h5, h6 {
Consider using a serif font for readability. */
body, p, td, li, div {
font-size: 18pt;
}
/* SECTION 4: Set heading font face, sizes, and color.
Differentiate your headings from your body text.
Perhaps use a large sans-serif for distinction. */
h1,h2,h3,h4,h5,h6 {
text-shadow: 0 0 0 #000 !important; text-shadow: 0 0 0 #000 !important;
} }
/* SECTION 5: Make hyperlinks more usable.
Ensure links are underlined, and consider appending
the URL to the end of the link for usability. */
a:link,
a:visited {
font-weight: normal;
text-decoration: underline;
}
.reveal pre code { .reveal pre code {
overflow: hidden !important; overflow: hidden !important;
font-family: monospace !important; font-family: Courier, 'Courier New', monospace !important;
} }
/* SECTION 6: more reveal.js specific additions by @skypanther */
ul, ol, div, p { ul, ol, div, p {
visibility: visible; visibility: visible;
position: static; position: static;
@ -94,8 +60,9 @@ ul, ol, div, p {
} }
.reveal .slides { .reveal .slides {
position: static; position: static;
width: 100%; width: 100% !important;
height: auto; height: auto !important;
zoom: 1 !important;
left: auto; left: auto;
top: auto; top: auto;
@ -105,8 +72,6 @@ ul, ol, div, p {
overflow: visible; overflow: visible;
display: block; display: block;
text-align: center;
-webkit-perspective: none; -webkit-perspective: none;
-moz-perspective: none; -moz-perspective: none;
-ms-perspective: none; -ms-perspective: none;
@ -117,23 +82,24 @@ ul, ol, div, p {
-ms-perspective-origin: 50% 50%; -ms-perspective-origin: 50% 50%;
perspective-origin: 50% 50%; perspective-origin: 50% 50%;
} }
.reveal .slides section {
.reveal .slides .pdf-page {
position: relative;
overflow: hidden;
z-index: 1;
}
.reveal .slides section {
page-break-after: always !important; page-break-after: always !important;
visibility: visible !important; visibility: visible !important;
position: relative !important;
width: 100% !important;
height: 229mm !important;
min-height: 229mm !important;
display: block !important; display: block !important;
overflow: hidden !important; position: relative !important;
left: 0 !important;
top: 0 !important;
margin: 0 !important; margin: 0 !important;
padding: 2cm 2cm 0 2cm !important; padding: 0 !important;
box-sizing: border-box !important; box-sizing: border-box !important;
min-height: 1px;
opacity: 1 !important; opacity: 1 !important;
@ -147,6 +113,7 @@ ul, ol, div, p {
-ms-transform: none !important; -ms-transform: none !important;
transform: none !important; transform: none !important;
} }
.reveal section.stack { .reveal section.stack {
margin: 0 !important; margin: 0 !important;
padding: 0 !important; padding: 0 !important;
@ -154,37 +121,50 @@ ul, ol, div, p {
height: auto !important; height: auto !important;
min-height: auto !important; min-height: auto !important;
} }
.reveal .absolute-element {
margin-left: 2.2cm;
margin-top: 1.8cm;
}
.reveal section .fragment {
opacity: 1 !important;
visibility: visible !important;
-webkit-transform: none !important;
-moz-transform: none !important;
-ms-transform: none !important;
transform: none !important;
}
.reveal section .slide-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: 0;
}
.reveal section>* {
position: relative;
z-index: 1;
}
.reveal img { .reveal img {
box-shadow: none; box-shadow: none;
} }
.reveal .roll { .reveal .roll {
overflow: visible; overflow: visible;
line-height: 1em; line-height: 1em;
} }
.reveal small a {
font-size: 16pt !important; /* Slide backgrounds are placed inside of their slide when exporting to PDF */
.reveal section .slide-background {
display: block !important;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* Display slide speaker notes when 'showNotes' is enabled */
.reveal .speaker-notes-pdf {
display: block;
width: 100%;
max-height: none;
top: auto;
right: auto;
bottom: auto;
left: auto;
z-index: 100;
}
/* Layout option which makes notes appear on a separate page */
.reveal .speaker-notes-pdf[data-layout="separate-page"] {
position: relative;
color: inherit;
background-color: transparent;
padding: 20px;
page-break-after: always;
}
/* Display slide numbers when 'slideNumber' is enabled */
.reveal .slide-number-pdf {
display: block;
position: absolute;
font-size: 14px;
} }

File diff suppressed because one or more lines are too long

7
css/reveal.min.css vendored

File diff suppressed because one or more lines are too long

1402
css/reveal.scss Normal file

File diff suppressed because one or more lines are too long

View File

@ -2,11 +2,9 @@
Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment including the Grunt dependencies installed before proceding: https://github.com/hakimel/reveal.js#full-setup Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment including the Grunt dependencies installed before proceding: https://github.com/hakimel/reveal.js#full-setup
You also need to install Ruby and then Sass (with `gem install sass`).
## Creating a Theme ## Creating a Theme
To create your own theme, start by duplicating any ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source) and adding it to the compilation list in the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js). To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `grunt css-themes`.
Each theme file does four things in the following order: Each theme file does four things in the following order:
@ -17,9 +15,7 @@ Shared utility functions.
Declares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3. Declares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3.
3. **Override** 3. **Override**
This is where you override the default theme. Either by specifying variables (see [settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss) for reference) or by adding full selectors with hardcoded styles. This is where you override the default theme. Either by specifying variables (see [settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss) for reference) or by adding any selectors and styles you please.
4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)** 4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)**
The template theme file which will generate final CSS output based on the currently defined variables. The template theme file which will generate final CSS output based on the currently defined variables.
When you are done, run `grunt themes` to compile the Sass file to CSS and you are ready to use your new theme.

View File

@ -1,16 +1,10 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/** /**
* Beige theme for reveal.js. * Beige theme for reveal.js.
* *
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/ */
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic'; @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
src: url("../../lib/font/league_gothic-webfont.eot");
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");
font-weight: normal;
font-style: normal; }
/********************************************* /*********************************************
* GLOBAL STYLES * GLOBAL STYLES
*********************************************/ *********************************************/
@ -26,16 +20,25 @@ body {
.reveal { .reveal {
font-family: "Lato", sans-serif; font-family: "Lato", sans-serif;
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em; color: #333; }
color: #333333; }
::selection { ::selection {
color: white; color: #fff;
background: rgba(79, 64, 28, 0.99); background: rgba(79, 64, 28, 0.99);
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: rgba(79, 64, 28, 0.99);
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -46,29 +49,178 @@ body {
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #333333; color: #333;
font-family: "League Gothic", Impact, sans-serif; font-family: "League Gothic", Impact, sans-serif;
line-height: 0.9em; font-weight: normal;
letter-spacing: 0.02em; line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase; text-transform: uppercase;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
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); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: 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, 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); }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #8b743d; color: #8b743d;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #c0a86e; color: #c0a86e;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -83,13 +235,17 @@ body {
.reveal section img { .reveal section img {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid #333333; border: 4px solid #333;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
@ -99,32 +255,32 @@ body {
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #8b743d; } border-right-color: #8b743d; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #8b743d; } border-left-color: #8b743d; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #8b743d; } border-bottom-color: #8b743d; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #8b743d; } border-top-color: #8b743d; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #c0a86e; } border-right-color: #c0a86e; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #c0a86e; } border-left-color: #c0a86e; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #c0a86e; } border-bottom-color: #c0a86e; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #c0a86e; } border-top-color: #c0a86e; }
/********************************************* /*********************************************
@ -137,12 +293,4 @@ body {
background: #8b743d; background: #8b743d;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #8b743d; }

292
css/theme/black.css Normal file
View File

@ -0,0 +1,292 @@
/**
* Black theme for reveal.js. This is the opposite of the 'white' theme.
*
* By Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
color: #222; }
/*********************************************
* GLOBAL STYLES
*********************************************/
body {
background: #222;
background-color: #222; }
.reveal {
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-size: 42px;
font-weight: normal;
color: #fff; }
::selection {
color: #fff;
background: #bee4fd;
text-shadow: none; }
::-moz-selection {
color: #fff;
background: #bee4fd;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #fff;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-weight: 600;
line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase;
text-shadow: none;
word-wrap: break-word; }
.reveal h1 {
font-size: 2.5em; }
.reveal h2 {
font-size: 1.6em; }
.reveal h3 {
font-size: 1.3em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/*********************************************
* LINKS
*********************************************/
.reveal a {
color: #42affa;
text-decoration: none;
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #8dcffc;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #068de9; }
/*********************************************
* IMAGES
*********************************************/
.reveal section img {
margin: 15px 0px;
background: rgba(255, 255, 255, 0.12);
border: 4px solid #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
border-color: #42affa;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #42affa; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #42affa; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #42affa; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #42affa; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #8dcffc; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #8dcffc; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #8dcffc; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #8dcffc; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
.reveal .progress span {
background: #42affa;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View File

@ -1,4 +1,3 @@
@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
/** /**
* Blood theme for reveal.js * Blood theme for reveal.js
* Author: Walther http://github.com/Walther * Author: Walther http://github.com/Walther
@ -10,31 +9,35 @@
* For other themes, change $codeBackground accordingly. * For other themes, change $codeBackground accordingly.
* *
*/ */
@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
/********************************************* /*********************************************
* GLOBAL STYLES * GLOBAL STYLES
*********************************************/ *********************************************/
body { body {
background: #222222; background: #222;
background: -moz-radial-gradient(center, circle cover, #626262 0%, #222222 100%); background-color: #222; }
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #626262), color-stop(100%, #222222));
background: -webkit-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
background: -o-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
background: -ms-radial-gradient(center, circle cover, #626262 0%, #222222 100%);
background: radial-gradient(center, circle cover, #626262 0%, #222222 100%);
background-color: #2b2b2b; }
.reveal { .reveal {
font-family: Ubuntu, "sans-serif"; font-family: Ubuntu, "sans-serif";
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em; color: #eee; }
color: #eeeeee; }
::selection { ::selection {
color: white; color: #fff;
background: #aa2233; background: #a23;
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: #a23;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -45,29 +48,178 @@ body {
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #eeeeee; color: #eee;
font-family: Ubuntu, "sans-serif"; font-family: Ubuntu, "sans-serif";
line-height: 0.9em; font-weight: normal;
letter-spacing: 0.02em; line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase; text-transform: uppercase;
text-shadow: 2px 2px 2px #222222; } text-shadow: 2px 2px 2px #222;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
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); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: 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, 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); }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #aa2233; color: #a23;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #dd5566; color: #dd5566;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -82,48 +234,52 @@ body {
.reveal section img { .reveal section img {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid #eeeeee; border: 4px solid #eee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
border-color: #aa2233; border-color: #a23;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #aa2233; } border-right-color: #a23; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #aa2233; } border-left-color: #a23; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #aa2233; } border-bottom-color: #a23; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #aa2233; } border-top-color: #a23; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #dd5566; } border-right-color: #dd5566; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #dd5566; } border-left-color: #dd5566; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #dd5566; } border-bottom-color: #dd5566; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #dd5566; } border-top-color: #dd5566; }
/********************************************* /*********************************************
@ -133,22 +289,14 @@ body {
background: rgba(0, 0, 0, 0.2); } background: rgba(0, 0, 0, 0.2); }
.reveal .progress span { .reveal .progress span {
background: #aa2233; background: #a23;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #aa2233; }
.reveal p { .reveal p {
font-weight: 300; font-weight: 300;
text-shadow: 1px 1px #222222; } text-shadow: 1px 1px #222; }
.reveal h1, .reveal h1,
.reveal h2, .reveal h2,
@ -158,14 +306,6 @@ body {
.reveal h6 { .reveal h6 {
font-weight: 700; } font-weight: 700; }
.reveal a:not(.image),
.reveal a:not(.image):hover {
text-shadow: 2px 2px 2px #000; }
.reveal small a:not(.image),
.reveal small a:not(.image):hover {
text-shadow: 1px 1px 1px #000; }
.reveal p code { .reveal p code {
background-color: #23241f; background-color: #23241f;
display: inline-block; display: inline-block;

View File

@ -1,148 +0,0 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Default theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@font-face {
font-family: 'League Gothic';
src: url("../../lib/font/league_gothic-webfont.eot");
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");
font-weight: normal;
font-style: normal; }
/*********************************************
* GLOBAL STYLES
*********************************************/
body {
background: #1c1e20;
background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20));
background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background-color: #2b2b2b; }
.reveal {
font-family: "Lato", sans-serif;
font-size: 36px;
font-weight: normal;
letter-spacing: -0.02em;
color: #eeeeee; }
::selection {
color: white;
background: #ff5e99;
text-shadow: none; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #eeeeee;
font-family: "League Gothic", Impact, sans-serif;
line-height: 0.9em;
letter-spacing: 0.02em;
text-transform: uppercase;
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); }
.reveal h1 {
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); }
/*********************************************
* LINKS
*********************************************/
.reveal a:not(.image) {
color: #13daec;
text-decoration: none;
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:not(.image):hover {
color: #71e9f4;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #0d99a5; }
/*********************************************
* IMAGES
*********************************************/
.reveal section img {
margin: 15px 0px;
background: rgba(255, 255, 255, 0.12);
border: 4px solid #eeeeee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear;
-ms-transition: all .2s linear;
-o-transition: all .2s linear;
transition: all .2s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
border-color: #13daec;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left,
.reveal .controls div.navigate-left.enabled {
border-right-color: #13daec; }
.reveal .controls div.navigate-right,
.reveal .controls div.navigate-right.enabled {
border-left-color: #13daec; }
.reveal .controls div.navigate-up,
.reveal .controls div.navigate-up.enabled {
border-bottom-color: #13daec; }
.reveal .controls div.navigate-down,
.reveal .controls div.navigate-down.enabled {
border-top-color: #13daec; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #71e9f4; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #71e9f4; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #71e9f4; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #71e9f4; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
.reveal .progress span {
background: #13daec;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #13daec; }

298
css/theme/league.css Normal file
View File

@ -0,0 +1,298 @@
/**
* League theme for reveal.js.
*
* This was the default theme pre-3.0.0.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/*********************************************
* GLOBAL STYLES
*********************************************/
body {
background: #1c1e20;
background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20));
background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%);
background-color: #2b2b2b; }
.reveal {
font-family: "Lato", sans-serif;
font-size: 40px;
font-weight: normal;
color: #eee; }
::selection {
color: #fff;
background: #FF5E99;
text-shadow: none; }
::-moz-selection {
color: #fff;
background: #FF5E99;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #eee;
font-family: "League Gothic", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase;
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);
word-wrap: break-word; }
.reveal h1 {
font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: 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, 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); }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/*********************************************
* LINKS
*********************************************/
.reveal a {
color: #13DAEC;
text-decoration: none;
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #71e9f4;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #0d99a5; }
/*********************************************
* IMAGES
*********************************************/
.reveal section img {
margin: 15px 0px;
background: rgba(255, 255, 255, 0.12);
border: 4px solid #eee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
border-color: #13DAEC;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #13DAEC; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #13DAEC; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #13DAEC; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #13DAEC; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #71e9f4; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #71e9f4; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #71e9f4; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #71e9f4; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
.reveal .progress span {
background: #13DAEC;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

View File

@ -1,15 +1,9 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/** /**
* Solarized Dark theme for reveal.js. * Solarized Dark theme for reveal.js.
* Author: Achim Staebler * Author: Achim Staebler
*/ */
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic'; @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
src: url("../../lib/font/league_gothic-webfont.eot");
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");
font-weight: normal;
font-style: normal; }
/** /**
* Solarized colors by Ethan Schoonover * Solarized colors by Ethan Schoonover
*/ */
@ -26,16 +20,25 @@ body {
.reveal { .reveal {
font-family: "Lato", sans-serif; font-family: "Lato", sans-serif;
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em;
color: #93a1a1; } color: #93a1a1; }
::selection { ::selection {
color: white; color: #fff;
background: #d33682; background: #d33682;
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: #d33682;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -48,27 +51,176 @@ body {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #eee8d5; color: #eee8d5;
font-family: "League Gothic", Impact, sans-serif; font-family: "League Gothic", Impact, sans-serif;
line-height: 0.9em; font-weight: normal;
letter-spacing: 0.02em; line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase; text-transform: uppercase;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #268bd2; color: #268bd2;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #78b9e6; color: #78b9e6;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -84,12 +236,16 @@ body {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid #93a1a1; border: 4px solid #93a1a1;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
@ -99,32 +255,32 @@ body {
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #268bd2; } border-right-color: #268bd2; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #268bd2; } border-left-color: #268bd2; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #268bd2; } border-bottom-color: #268bd2; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #268bd2; } border-top-color: #268bd2; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #78b9e6; } border-right-color: #78b9e6; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #78b9e6; } border-left-color: #78b9e6; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #78b9e6; } border-bottom-color: #78b9e6; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #78b9e6; } border-top-color: #78b9e6; }
/********************************************* /*********************************************
@ -137,12 +293,4 @@ body {
background: #268bd2; background: #268bd2;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #268bd2; }

View File

@ -1,29 +1,38 @@
@import url(https://fonts.googleapis.com/css?family=Montserrat:700);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
/** /**
* Black theme for reveal.js. * Black theme for reveal.js.
* *
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/ */
@import url(https://fonts.googleapis.com/css?family=Montserrat:700);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
/********************************************* /*********************************************
* GLOBAL STYLES * GLOBAL STYLES
*********************************************/ *********************************************/
body { body {
background: #111111; background: #111;
background-color: #111111; } background-color: #111; }
.reveal { .reveal {
font-family: "Open Sans", sans-serif; font-family: "Open Sans", sans-serif;
font-size: 30px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em; color: #eee; }
color: #eeeeee; }
::selection { ::selection {
color: white; color: #fff;
background: #e7ad52; background: #e7ad52;
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: #e7ad52;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -34,29 +43,178 @@ body {
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #eeeeee; color: #eee;
font-family: "Montserrat", Impact, sans-serif; font-family: "Montserrat", Impact, sans-serif;
line-height: 0.9em; font-weight: normal;
line-height: 1.2;
letter-spacing: -0.03em; letter-spacing: -0.03em;
text-transform: none; text-transform: none;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #e7ad52; color: #e7ad52;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #f3d7ac; color: #f3d7ac;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -71,13 +229,17 @@ body {
.reveal section img { .reveal section img {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid #eeeeee; border: 4px solid #eee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
@ -87,32 +249,32 @@ body {
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #e7ad52; } border-right-color: #e7ad52; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #e7ad52; } border-left-color: #e7ad52; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #e7ad52; } border-bottom-color: #e7ad52; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #e7ad52; } border-top-color: #e7ad52; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #f3d7ac; } border-right-color: #f3d7ac; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #f3d7ac; } border-left-color: #f3d7ac; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #f3d7ac; } border-bottom-color: #f3d7ac; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #f3d7ac; } border-top-color: #f3d7ac; }
/********************************************* /*********************************************
@ -125,12 +287,4 @@ body {
background: #e7ad52; background: #e7ad52;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #e7ad52; }

View File

@ -4,28 +4,37 @@
* *
* This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.
*/ */
.reveal a:not(.image) { .reveal a {
line-height: 1.3em; } line-height: 1.3em; }
/********************************************* /*********************************************
* GLOBAL STYLES * GLOBAL STYLES
*********************************************/ *********************************************/
body { body {
background: #f0f1eb; background: #F0F1EB;
background-color: #f0f1eb; } background-color: #F0F1EB; }
.reveal { .reveal {
font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em; color: #000; }
color: black; }
::selection { ::selection {
color: white; color: #fff;
background: #26351c; background: #26351C;
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: #26351C;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -36,29 +45,178 @@ body {
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #383d3d; color: #383D3D;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
line-height: 0.9em; font-weight: normal;
letter-spacing: 0.02em; line-height: 1.2;
letter-spacing: normal;
text-transform: none; text-transform: none;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #51483d; color: #51483D;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #8b7c69; color: #8b7c69;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -73,48 +231,52 @@ body {
.reveal section img { .reveal section img {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid black; border: 4px solid #000;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
border-color: #51483d; border-color: #51483D;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #51483d; } border-right-color: #51483D; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #51483d; } border-left-color: #51483D; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #51483d; } border-bottom-color: #51483D; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #51483d; } border-top-color: #51483D; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #8b7c69; } border-right-color: #8b7c69; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #8b7c69; } border-left-color: #8b7c69; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #8b7c69; } border-bottom-color: #8b7c69; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #8b7c69; } border-top-color: #8b7c69; }
/********************************************* /*********************************************
@ -124,15 +286,7 @@ body {
background: rgba(0, 0, 0, 0.2); } background: rgba(0, 0, 0, 0.2); }
.reveal .progress span { .reveal .progress span {
background: #51483d; background: #51483D;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #51483d; }

View File

@ -1,5 +1,3 @@
@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/** /**
* A simple theme for reveal.js presentations, similar * A simple theme for reveal.js presentations, similar
* to the default theme. The accent color is darkblue. * to the default theme. The accent color is darkblue.
@ -7,25 +5,39 @@
* This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
* reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/ */
@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 {
color: #fff; }
/********************************************* /*********************************************
* GLOBAL STYLES * GLOBAL STYLES
*********************************************/ *********************************************/
body { body {
background: white; background: #fff;
background-color: white; } background-color: #fff; }
.reveal { .reveal {
font-family: "Lato", sans-serif; font-family: "Lato", sans-serif;
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em; color: #000; }
color: black; }
::selection { ::selection {
color: white; color: #fff;
background: rgba(0, 0, 0, 0.99); background: rgba(0, 0, 0, 0.99);
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: rgba(0, 0, 0, 0.99);
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -36,29 +48,178 @@ body {
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: black; color: #000;
font-family: "News Cycle", Impact, sans-serif; font-family: "News Cycle", Impact, sans-serif;
line-height: 0.9em; font-weight: normal;
letter-spacing: 0.02em; line-height: 1.2;
letter-spacing: normal;
text-transform: none; text-transform: none;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: darkblue; color: #00008B;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #0000f1; color: #0000f1;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -73,48 +234,52 @@ body {
.reveal section img { .reveal section img {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid black; border: 4px solid #000;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
border-color: darkblue; border-color: #00008B;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: darkblue; } border-right-color: #00008B; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: darkblue; } border-left-color: #00008B; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: darkblue; } border-bottom-color: #00008B; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: darkblue; } border-top-color: #00008B; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #0000f1; } border-right-color: #0000f1; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #0000f1; } border-left-color: #0000f1; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #0000f1; } border-bottom-color: #0000f1; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #0000f1; } border-top-color: #0000f1; }
/********************************************* /*********************************************
@ -124,15 +289,7 @@ body {
background: rgba(0, 0, 0, 0.2); } background: rgba(0, 0, 0, 0.2); }
.reveal .progress span { .reveal .progress span {
background: darkblue; background: #00008B;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: darkblue; }

View File

@ -1,11 +1,11 @@
@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
/** /**
* Sky theme for reveal.js. * Sky theme for reveal.js.
* *
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/ */
.reveal a:not(.image) { @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
.reveal a {
line-height: 1.3em; } line-height: 1.3em; }
/********************************************* /*********************************************
@ -23,16 +23,25 @@ body {
.reveal { .reveal {
font-family: "Open Sans", sans-serif; font-family: "Open Sans", sans-serif;
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em; color: #333; }
color: #333333; }
::selection { ::selection {
color: white; color: #fff;
background: #134674; background: #134674;
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: #134674;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -43,29 +52,178 @@ body {
.reveal h5, .reveal h5,
.reveal h6 { .reveal h6 {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #333333; color: #333;
font-family: "Quicksand", sans-serif; font-family: "Quicksand", sans-serif;
line-height: 0.9em; font-weight: normal;
line-height: 1.2;
letter-spacing: -0.08em; letter-spacing: -0.08em;
text-transform: uppercase; text-transform: uppercase;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #3b759e; color: #3b759e;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #74a7cb; color: #74a7cb;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -80,13 +238,17 @@ body {
.reveal section img { .reveal section img {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid #333333; border: 4px solid #333;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
@ -96,32 +258,32 @@ body {
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #3b759e; } border-right-color: #3b759e; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #3b759e; } border-left-color: #3b759e; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #3b759e; } border-bottom-color: #3b759e; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #3b759e; } border-top-color: #3b759e; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #74a7cb; } border-right-color: #74a7cb; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #74a7cb; } border-left-color: #74a7cb; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #74a7cb; } border-bottom-color: #74a7cb; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #74a7cb; } border-top-color: #74a7cb; }
/********************************************* /*********************************************
@ -134,12 +296,4 @@ body {
background: #3b759e; background: #3b759e;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #3b759e; }

View File

@ -1,15 +1,9 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/** /**
* Solarized Light theme for reveal.js. * Solarized Light theme for reveal.js.
* Author: Achim Staebler * Author: Achim Staebler
*/ */
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic'; @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
src: url("../../lib/font/league_gothic-webfont.eot");
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");
font-weight: normal;
font-style: normal; }
/** /**
* Solarized colors by Ethan Schoonover * Solarized colors by Ethan Schoonover
*/ */
@ -26,16 +20,25 @@ body {
.reveal { .reveal {
font-family: "Lato", sans-serif; font-family: "Lato", sans-serif;
font-size: 36px; font-size: 40px;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em;
color: #657b83; } color: #657b83; }
::selection { ::selection {
color: white; color: #fff;
background: #d33682; background: #d33682;
text-shadow: none; } text-shadow: none; }
::-moz-selection {
color: #fff;
background: #d33682;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -48,27 +51,176 @@ body {
margin: 0 0 20px 0; margin: 0 0 20px 0;
color: #586e75; color: #586e75;
font-family: "League Gothic", Impact, sans-serif; font-family: "League Gothic", Impact, sans-serif;
line-height: 0.9em; font-weight: normal;
letter-spacing: 0.02em; line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase; text-transform: uppercase;
text-shadow: none; } text-shadow: none;
word-wrap: break-word; }
.reveal h1 { .reveal h1 {
text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); } font-size: 3.77em; }
.reveal h2 {
font-size: 2.11em; }
.reveal h3 {
font-size: 1.55em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: #268bd2; color: #268bd2;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; } transition: color .15s ease; }
.reveal a:not(.image):hover { .reveal a:hover {
color: #78b9e6; color: #78b9e6;
text-shadow: none; text-shadow: none;
border: none; } border: none; }
@ -84,12 +236,16 @@ body {
margin: 15px 0px; margin: 15px 0px;
background: rgba(255, 255, 255, 0.12); background: rgba(255, 255, 255, 0.12);
border: 4px solid #657b83; border: 4px solid #657b83;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear; .reveal section img.plain {
-ms-transition: all .2s linear; border: 0;
-o-transition: all .2s linear; box-shadow: none; }
transition: all .2s linear; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img { .reveal a:hover img {
background: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.2);
@ -99,32 +255,32 @@ body {
/********************************************* /*********************************************
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: #268bd2; } border-right-color: #268bd2; }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: #268bd2; } border-left-color: #268bd2; }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: #268bd2; } border-bottom-color: #268bd2; }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: #268bd2; } border-top-color: #268bd2; }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: #78b9e6; } border-right-color: #78b9e6; }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: #78b9e6; } border-left-color: #78b9e6; }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #78b9e6; } border-bottom-color: #78b9e6; }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: #78b9e6; } border-top-color: #78b9e6; }
/********************************************* /*********************************************
@ -137,12 +293,4 @@ body {
background: #268bd2; background: #268bd2;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: #268bd2; }

View File

@ -13,18 +13,7 @@
// Include theme-specific fonts // Include theme-specific fonts
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic';
src: url('../../lib/font/league_gothic-webfont.eot');
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');
font-weight: normal;
font-style: normal;
}
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);

View File

@ -0,0 +1,49 @@
/**
* Black theme for reveal.js. This is the opposite of the 'white' theme.
*
* By Hakim El Hattab, http://hakim.se
*/
// Default mixins and settings -----------------
@import "../template/mixins";
@import "../template/settings";
// ---------------------------------------------
// Include theme-specific fonts
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
// Override theme settings (see ../template/settings.scss)
$backgroundColor: #222;
$mainColor: #fff;
$headingColor: #fff;
$mainFontSize: 42px;
$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingTextShadow: none;
$headingLetterSpacing: normal;
$headingTextTransform: uppercase;
$headingFontWeight: 600;
$linkColor: #42affa;
$linkColorHover: lighten( $linkColor, 15% );
$selectionBackgroundColor: lighten( $linkColor, 25% );
$heading1Size: 2.5em;
$heading2Size: 1.6em;
$heading3Size: 1.3em;
$heading4Size: 1.0em;
section.has-light-background {
&, h1, h2, h3, h4, h5, h6 {
color: #222;
}
}
// Theme template ------------------------------
@import "../template/theme";
// ---------------------------------------------

View File

@ -24,9 +24,10 @@ $blood: #a23;
$coal: #222; $coal: #222;
$codeBackground: #23241f; $codeBackground: #23241f;
$backgroundColor: $coal;
// Main text // Main text
$mainFont: Ubuntu, 'sans-serif'; $mainFont: Ubuntu, 'sans-serif';
$mainFontSize: 36px;
$mainColor: #eee; $mainColor: #eee;
// Headings // Headings
@ -45,10 +46,6 @@ $linkColorHover: lighten( $linkColor, 20% );
$selectionBackgroundColor: $blood; $selectionBackgroundColor: $blood;
$selectionColor: #fff; $selectionColor: #fff;
// Background generator
@mixin bodyBackground() {
@include radial-gradient( $coal, lighten( $coal, 25% ) );
}
// Theme template ------------------------------ // Theme template ------------------------------
@import "../template/theme"; @import "../template/theme";
@ -70,16 +67,6 @@ $selectionColor: #fff;
font-weight: 700; font-weight: 700;
} }
.reveal a:not(.image),
.reveal a:not(.image):hover {
text-shadow: 2px 2px 2px #000;
}
.reveal small a:not(.image),
.reveal small a:not(.image):hover {
text-shadow: 1px 1px 1px #000;
}
.reveal p code { .reveal p code {
background-color: $codeBackground; background-color: $codeBackground;
display: inline-block; display: inline-block;

View File

@ -1,5 +1,7 @@
/** /**
* Default theme for reveal.js. * League theme for reveal.js.
*
* This was the default theme pre-3.0.0.
* *
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/ */
@ -13,21 +15,11 @@
// Include theme-specific fonts // Include theme-specific fonts
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic';
src: url('../../lib/font/league_gothic-webfont.eot');
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');
font-weight: normal;
font-style: normal;
}
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
// Override theme settings (see ../template/settings.scss) // Override theme settings (see ../template/settings.scss)
$headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2);
$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); $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);
// Background generator // Background generator

View File

@ -12,18 +12,7 @@
// Include theme-specific fonts // Include theme-specific fonts
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic';
src: url('../../lib/font/league_gothic-webfont.eot');
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');
font-weight: normal;
font-style: normal;
}
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/** /**

View File

@ -27,7 +27,6 @@ $headingTextShadow: none;
$headingLetterSpacing: -0.03em; $headingLetterSpacing: -0.03em;
$headingTextTransform: none; $headingTextTransform: none;
$selectionBackgroundColor: #e7ad52; $selectionBackgroundColor: #e7ad52;
$mainFontSize: 30px;
// Theme template ------------------------------ // Theme template ------------------------------

View File

@ -25,7 +25,7 @@ $linkColor: #51483D;
$linkColorHover: lighten( $linkColor, 20% ); $linkColorHover: lighten( $linkColor, 20% );
$selectionBackgroundColor: #26351C; $selectionBackgroundColor: #26351C;
.reveal a:not(.image) { .reveal a {
line-height: 1.3em; line-height: 1.3em;
} }

View File

@ -31,6 +31,11 @@ $linkColor: #00008B;
$linkColorHover: lighten( $linkColor, 20% ); $linkColorHover: lighten( $linkColor, 20% );
$selectionBackgroundColor: rgba(0, 0, 0, 0.99); $selectionBackgroundColor: rgba(0, 0, 0, 0.99);
section.has-dark-background {
&, h1, h2, h3, h4, h5, h6 {
color: #fff;
}
}
// Theme template ------------------------------ // Theme template ------------------------------

View File

@ -30,7 +30,7 @@ $linkColorHover: lighten( $linkColor, 20% );
$selectionBackgroundColor: #134674; $selectionBackgroundColor: #134674;
// Fix links so they are not cut off // Fix links so they are not cut off
.reveal a:not(.image) { .reveal a {
line-height: 1.3em; line-height: 1.3em;
} }

View File

@ -12,18 +12,7 @@
// Include theme-specific fonts // Include theme-specific fonts
@font-face { @import url(../../lib/font/league-gothic/league-gothic.css);
font-family: 'League Gothic';
src: url('../../lib/font/league_gothic-webfont.eot');
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');
font-weight: normal;
font-style: normal;
}
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);

View File

@ -0,0 +1,49 @@
/**
* White theme for reveal.js. This is the opposite of the 'black' theme.
*
* By Hakim El Hattab, http://hakim.se
*/
// Default mixins and settings -----------------
@import "../template/mixins";
@import "../template/settings";
// ---------------------------------------------
// Include theme-specific fonts
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
// Override theme settings (see ../template/settings.scss)
$backgroundColor: #fff;
$mainColor: #222;
$headingColor: #222;
$mainFontSize: 42px;
$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingTextShadow: none;
$headingLetterSpacing: normal;
$headingTextTransform: uppercase;
$headingFontWeight: 600;
$linkColor: #2a76dd;
$linkColorHover: lighten( $linkColor, 15% );
$selectionBackgroundColor: lighten( $linkColor, 25% );
$heading1Size: 2.5em;
$heading2Size: 1.6em;
$heading3Size: 1.3em;
$heading4Size: 1.0em;
section.has-dark-background {
&, h1, h2, h3, h4, h5, h6 {
color: #fff;
}
}
// Theme template ------------------------------
@import "../template/theme";
// ---------------------------------------------

View File

@ -6,19 +6,28 @@ $backgroundColor: #2b2b2b;
// Primary/body text // Primary/body text
$mainFont: 'Lato', sans-serif; $mainFont: 'Lato', sans-serif;
$mainFontSize: 36px; $mainFontSize: 40px;
$mainColor: #eee; $mainColor: #eee;
// Vertical spacing between blocks of text
$blockMargin: 20px;
// Headings // Headings
$headingMargin: 0 0 20px 0; $headingMargin: 0 0 $blockMargin 0;
$headingFont: 'League Gothic', Impact, sans-serif; $headingFont: 'League Gothic', Impact, sans-serif;
$headingColor: #eee; $headingColor: #eee;
$headingLineHeight: 0.9em; $headingLineHeight: 1.2;
$headingLetterSpacing: 0.02em; $headingLetterSpacing: normal;
$headingTextTransform: uppercase; $headingTextTransform: uppercase;
$headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); $headingTextShadow: none;
$headingFontWeight: normal;
$heading1TextShadow: $headingTextShadow; $heading1TextShadow: $headingTextShadow;
$heading1Size: 3.77em;
$heading2Size: 2.11em;
$heading3Size: 1.55em;
$heading4Size: 1.00em;
// Links and actions // Links and actions
$linkColor: #13DAEC; $linkColor: #13DAEC;
$linkColorHover: lighten( $linkColor, 20% ); $linkColorHover: lighten( $linkColor, 20% );

View File

@ -13,7 +13,6 @@ body {
font-family: $mainFont; font-family: $mainFont;
font-size: $mainFontSize; font-size: $mainFontSize;
font-weight: normal; font-weight: normal;
letter-spacing: -0.02em;
color: $mainColor; color: $mainColor;
} }
@ -23,6 +22,18 @@ body {
text-shadow: none; text-shadow: none;
} }
::-moz-selection {
color: $selectionColor;
background: $selectionBackgroundColor;
text-shadow: none;
}
.reveal .slides>section,
.reveal .slides>section>section {
line-height: 1.3;
font-weight: inherit;
}
/********************************************* /*********************************************
* HEADERS * HEADERS
*********************************************/ *********************************************/
@ -37,33 +48,208 @@ body {
color: $headingColor; color: $headingColor;
font-family: $headingFont; font-family: $headingFont;
font-weight: $headingFontWeight;
line-height: $headingLineHeight; line-height: $headingLineHeight;
letter-spacing: $headingLetterSpacing; letter-spacing: $headingLetterSpacing;
text-transform: $headingTextTransform; text-transform: $headingTextTransform;
text-shadow: $headingTextShadow; text-shadow: $headingTextShadow;
word-wrap: break-word;
} }
.reveal h1 {font-size: $heading1Size; }
.reveal h2 {font-size: $heading2Size; }
.reveal h3 {font-size: $heading3Size; }
.reveal h4 {font-size: $heading4Size; }
.reveal h1 { .reveal h1 {
text-shadow: $heading1TextShadow; text-shadow: $heading1TextShadow;
} }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: $blockMargin 0;
line-height: 1.3;
}
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%;
}
.reveal strong,
.reveal b {
font-weight: bold;
}
.reveal em {
font-style: italic;
}
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em;
}
.reveal ol {
list-style-type: decimal;
}
.reveal ul {
list-style-type: disc;
}
.reveal ul ul {
list-style-type: square;
}
.reveal ul ul ul {
list-style-type: circle;
}
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px;
}
.reveal dt {
font-weight: bold;
}
.reveal dd {
margin-left: 40px;
}
.reveal q,
.reveal blockquote {
quotes: none;
}
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: $blockMargin auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0,0,0,0.2);
}
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block;
}
.reveal q {
font-style: italic;
}
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: $blockMargin auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
}
.reveal code {
font-family: monospace;
}
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
}
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0;
}
.reveal table th {
font-weight: bold;
}
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid;
}
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center;
}
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right;
}
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none;
}
.reveal sup {
vertical-align: super;
}
.reveal sub {
vertical-align: sub;
}
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top;
}
.reveal small * {
vertical-align: top;
}
/********************************************* /*********************************************
* LINKS * LINKS
*********************************************/ *********************************************/
.reveal a:not(.image) { .reveal a {
color: $linkColor; color: $linkColor;
text-decoration: none; text-decoration: none;
-webkit-transition: color .15s ease; -webkit-transition: color .15s ease;
-moz-transition: color .15s ease; -moz-transition: color .15s ease;
-ms-transition: color .15s ease;
-o-transition: color .15s ease;
transition: color .15s ease; transition: color .15s ease;
} }
.reveal a:not(.image):hover { .reveal a:hover {
color: $linkColorHover; color: $linkColorHover;
text-shadow: none; text-shadow: none;
@ -86,14 +272,19 @@ body {
border: 4px solid $mainColor; border: 4px solid $mainColor;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
-webkit-transition: all .2s linear;
-moz-transition: all .2s linear;
-ms-transition: all .2s linear;
-o-transition: all .2s linear;
transition: all .2s linear;
} }
.reveal section img.plain {
border: 0;
box-shadow: none;
}
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear;
}
.reveal a:hover img { .reveal a:hover img {
background: rgba(255,255,255,0.2); background: rgba(255,255,255,0.2);
border-color: $linkColor; border-color: $linkColor;
@ -106,39 +297,39 @@ body {
* NAVIGATION CONTROLS * NAVIGATION CONTROLS
*********************************************/ *********************************************/
.reveal .controls div.navigate-left, .reveal .controls .navigate-left,
.reveal .controls div.navigate-left.enabled { .reveal .controls .navigate-left.enabled {
border-right-color: $linkColor; border-right-color: $linkColor;
} }
.reveal .controls div.navigate-right, .reveal .controls .navigate-right,
.reveal .controls div.navigate-right.enabled { .reveal .controls .navigate-right.enabled {
border-left-color: $linkColor; border-left-color: $linkColor;
} }
.reveal .controls div.navigate-up, .reveal .controls .navigate-up,
.reveal .controls div.navigate-up.enabled { .reveal .controls .navigate-up.enabled {
border-bottom-color: $linkColor; border-bottom-color: $linkColor;
} }
.reveal .controls div.navigate-down, .reveal .controls .navigate-down,
.reveal .controls div.navigate-down.enabled { .reveal .controls .navigate-down.enabled {
border-top-color: $linkColor; border-top-color: $linkColor;
} }
.reveal .controls div.navigate-left.enabled:hover { .reveal .controls .navigate-left.enabled:hover {
border-right-color: $linkColorHover; border-right-color: $linkColorHover;
} }
.reveal .controls div.navigate-right.enabled:hover { .reveal .controls .navigate-right.enabled:hover {
border-left-color: $linkColorHover; border-left-color: $linkColorHover;
} }
.reveal .controls div.navigate-up.enabled:hover { .reveal .controls .navigate-up.enabled:hover {
border-bottom-color: $linkColorHover; border-bottom-color: $linkColorHover;
} }
.reveal .controls div.navigate-down.enabled:hover { .reveal .controls .navigate-down.enabled:hover {
border-top-color: $linkColorHover; border-top-color: $linkColorHover;
} }
@ -155,16 +346,7 @@ body {
-webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); -webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
-moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); -moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
-ms-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
-o-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
} }
/*********************************************
* SLIDE NUMBER
*********************************************/
.reveal .slide-number {
color: $linkColor;
}

292
css/theme/white.css Normal file
View File

@ -0,0 +1,292 @@
/**
* White theme for reveal.js. This is the opposite of the 'black' theme.
*
* By Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 {
color: #fff; }
/*********************************************
* GLOBAL STYLES
*********************************************/
body {
background: #fff;
background-color: #fff; }
.reveal {
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-size: 42px;
font-weight: normal;
color: #222; }
::selection {
color: #fff;
background: #98bdef;
text-shadow: none; }
::-moz-selection {
color: #fff;
background: #98bdef;
text-shadow: none; }
.reveal .slides > section,
.reveal .slides > section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #222;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-weight: 600;
line-height: 1.2;
letter-spacing: normal;
text-transform: uppercase;
text-shadow: none;
word-wrap: break-word; }
.reveal h1 {
font-size: 2.5em; }
.reveal h2 {
font-size: 1.6em; }
.reveal h3 {
font-size: 1.3em; }
.reveal h4 {
font-size: 1em; }
.reveal h1 {
text-shadow: none; }
/*********************************************
* OTHER
*********************************************/
.reveal p {
margin: 20px 0;
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
.reveal ol {
list-style-type: decimal; }
.reveal ul {
list-style-type: disc; }
.reveal ul ul {
list-style-type: square; }
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
.reveal dt {
font-weight: bold; }
.reveal dd {
margin-left: 40px; }
.reveal q,
.reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
width: 70%;
margin: 20px auto;
padding: 5px;
font-style: italic;
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
font-style: italic; }
.reveal pre {
display: block;
position: relative;
width: 90%;
margin: 20px auto;
text-align: left;
font-size: 0.55em;
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
.reveal code {
font-family: monospace; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal; }
.reveal table {
margin: auto;
border-collapse: collapse;
border-spacing: 0; }
.reveal table th {
font-weight: bold; }
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
.reveal sub {
vertical-align: sub; }
.reveal small {
display: inline-block;
font-size: 0.6em;
line-height: 1.2em;
vertical-align: top; }
.reveal small * {
vertical-align: top; }
/*********************************************
* LINKS
*********************************************/
.reveal a {
color: #2a76dd;
text-decoration: none;
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #6ca0e8;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #1a53a1; }
/*********************************************
* IMAGES
*********************************************/
.reveal section img {
margin: 15px 0px;
background: rgba(255, 255, 255, 0.12);
border: 4px solid #222;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
border-color: #2a76dd;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls .navigate-left,
.reveal .controls .navigate-left.enabled {
border-right-color: #2a76dd; }
.reveal .controls .navigate-right,
.reveal .controls .navigate-right.enabled {
border-left-color: #2a76dd; }
.reveal .controls .navigate-up,
.reveal .controls .navigate-up.enabled {
border-bottom-color: #2a76dd; }
.reveal .controls .navigate-down,
.reveal .controls .navigate-down.enabled {
border-top-color: #2a76dd; }
.reveal .controls .navigate-left.enabled:hover {
border-right-color: #6ca0e8; }
.reveal .controls .navigate-right.enabled:hover {
border-left-color: #6ca0e8; }
.reveal .controls .navigate-up.enabled:hover {
border-bottom-color: #6ca0e8; }
.reveal .controls .navigate-down.enabled:hover {
border-top-color: #6ca0e8; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
.reveal .progress span {
background: #2a76dd;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }

412
demo.html Normal file
View File

@ -0,0 +1,412 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js The HTML Presentation Framework</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/black.css" id="theme">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Reveal.js</h1>
<h3>The HTML Presentation Framework</h3>
<p>
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> / <a href="http://twitter.com/hakimel">@hakimel</a></small>
</p>
</section>
<section>
<h2>Hello There</h2>
<p>
reveal.js enables you to create beautiful interactive slide decks using HTML. This presentation will show you examples of what it can do.
</p>
</section>
<!-- Example of nested vertical slides -->
<section>
<section>
<h2>Vertical Slides</h2>
<p>Slides can be nested inside of each other.</p>
<p>Use the <em>Space</em> key to navigate through all slides.</p>
<br>
<a href="#" class="navigate-down">
<img width="178" height="238" data-src="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" alt="Down arrow">
</a>
</section>
<section>
<h2>Basement Level 1</h2>
<p>Nested slides are useful for adding additional detail underneath a high level horizontal slide.</p>
</section>
<section>
<h2>Basement Level 2</h2>
<p>That's it, time to go back up.</p>
<br>
<a href="#/2">
<img width="178" height="238" data-src="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" alt="Up arrow" style="transform: rotate(180deg); -webkit-transform: rotate(180deg);">
</a>
</section>
</section>
<section>
<h2>Slides</h2>
<p>
Not a coder? Not a problem. There's a fully-featured visual editor for authoring these, try it out at <a href="http://slides.com" target="_blank">http://slides.com</a>.
</p>
</section>
<section>
<h2>Point of View</h2>
<p>
Press <strong>ESC</strong> to enter the slide overview.
</p>
<p>
Hold down alt and click on any element to zoom in on it using <a href="http://lab.hakim.se/zoom-js">zoom.js</a>. Alt + click anywhere to zoom back out.
</p>
</section>
<section>
<h2>Touch Optimized</h2>
<p>
Presentations look great on touch devices, like mobile phones and tablets. Simply swipe through your slides.
</p>
</section>
<section data-markdown>
<script type="text/template">
## Markdown support
Write content using inline or external Markdown.
Instructions and more info available in the [readme](https://github.com/hakimel/reveal.js#markdown).
```
<section data-markdown>
## Markdown support
Write content using inline or external Markdown.
Instructions and more info available in the [readme](https://github.com/hakimel/reveal.js#markdown).
</section>
```
</script>
</section>
<section>
<section id="fragments">
<h2>Fragments</h2>
<p>Hit the next arrow...</p>
<p class="fragment">... to step through ...</p>
<p><span class="fragment">... a</span> <span class="fragment">fragmented</span> <span class="fragment">slide.</span></p>
<aside class="notes">
This slide has fragments which are also stepped through in the notes window.
</aside>
</section>
<section>
<h2>Fragment Styles</h2>
<p>There's different types of fragments, like:</p>
<p class="fragment grow">grow</p>
<p class="fragment shrink">shrink</p>
<p class="fragment fade-out">fade-out</p>
<p class="fragment fade-up">fade-up (also down, left and right!)</p>
<p class="fragment current-visible">current-visible</p>
<p>Highlight <span class="fragment highlight-red">red</span> <span class="fragment highlight-blue">blue</span> <span class="fragment highlight-green">green</span></p>
</section>
</section>
<section id="transitions">
<h2>Transition Styles</h2>
<p>
You can select from different transitions, like: <br>
<a href="?transition=none#/transitions">None</a> -
<a href="?transition=fade#/transitions">Fade</a> -
<a href="?transition=slide#/transitions">Slide</a> -
<a href="?transition=convex#/transitions">Convex</a> -
<a href="?transition=concave#/transitions">Concave</a> -
<a href="?transition=zoom#/transitions">Zoom</a>
</p>
</section>
<section id="themes">
<h2>Themes</h2>
<p>
reveal.js comes with a few themes built in: <br>
<!-- Hacks to swap themes after the page has loaded. Not flexible and only intended for the reveal.js demo deck. -->
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/black.css'); return false;">Black (default)</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/white.css'); return false;">White</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/league.css'); return false;">League</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/sky.css'); return false;">Sky</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/beige.css'); return false;">Beige</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/simple.css'); return false;">Simple</a> <br>
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/serif.css'); return false;">Serif</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/blood.css'); return false;">Blood</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/night.css'); return false;">Night</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/moon.css'); return false;">Moon</a> -
<a href="#" onclick="document.getElementById('theme').setAttribute('href','css/theme/solarized.css'); return false;">Solarized</a>
</p>
</section>
<section>
<section data-background="#dddddd">
<h2>Slide Backgrounds</h2>
<p>
Set <code>data-background="#dddddd"</code> on a slide to change the background color. All CSS color formats are supported.
</p>
<a href="#" class="navigate-down">
<img width="178" height="238" data-src="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" alt="Down arrow">
</a>
</section>
<section data-background="https://s3.amazonaws.com/hakim-static/reveal-js/image-placeholder.png">
<h2>Image Backgrounds</h2>
<pre><code class="hljs">&lt;section data-background="image.png"&gt;</code></pre>
</section>
<section data-background="https://s3.amazonaws.com/hakim-static/reveal-js/image-placeholder.png" data-background-repeat="repeat" data-background-size="100px">
<h2>Tiled Backgrounds</h2>
<pre><code class="hljs" style="word-wrap: break-word;">&lt;section data-background="image.png" data-background-repeat="repeat" data-background-size="100px"&gt;</code></pre>
</section>
<section data-background-video="https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.mp4,https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.webm" data-background-color="#000000">
<div style="background-color: rgba(0, 0, 0, 0.9); color: #fff; padding: 20px;">
<h2>Video Backgrounds</h2>
<pre><code class="hljs" style="word-wrap: break-word;">&lt;section data-background-video="video.mp4,video.webm"&gt;</code></pre>
</div>
</section>
<section data-background="http://i.giphy.com/90F8aUepslB84.gif">
<h2>... and GIFs!</h2>
</section>
</section>
<section data-transition="slide" data-background="#4d7e65" data-background-transition="zoom">
<h2>Background Transitions</h2>
<p>
Different background transitions are available via the backgroundTransition option. This one's called "zoom".
</p>
<pre><code class="hljs">Reveal.configure({ backgroundTransition: 'zoom' })</code></pre>
</section>
<section data-transition="slide" data-background="#b5533c" data-background-transition="zoom">
<h2>Background Transitions</h2>
<p>
You can override background transitions per-slide.
</p>
<pre><code class="hljs" style="word-wrap: break-word;">&lt;section data-background-transition="zoom"&gt;</code></pre>
</section>
<section>
<h2>Pretty Code</h2>
<pre><code class="hljs" data-trim contenteditable>
function linkify( selector ) {
if( supports3DTransforms ) {
var nodes = document.querySelectorAll( selector );
for( var i = 0, len = nodes.length; i &lt; len; i++ ) {
var node = nodes[i];
if( !node.className ) {
node.className += ' roll';
}
}
}
}
</code></pre>
<p>Code syntax highlighting courtesy of <a href="http://softwaremaniacs.org/soft/highlight/en/description/">highlight.js</a>.</p>
</section>
<section>
<h2>Marvelous List</h2>
<ul>
<li>No order here</li>
<li>Or here</li>
<li>Or here</li>
<li>Or here</li>
</ul>
</section>
<section>
<h2>Fantastic Ordered List</h2>
<ol>
<li>One is smaller than...</li>
<li>Two is smaller than...</li>
<li>Three!</li>
</ol>
</section>
<section>
<h2>Tabular Tables</h2>
<table>
<thead>
<tr>
<th>Item</th>
<th>Value</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr>
<td>Apples</td>
<td>$1</td>
<td>7</td>
</tr>
<tr>
<td>Lemonade</td>
<td>$2</td>
<td>18</td>
</tr>
<tr>
<td>Bread</td>
<td>$3</td>
<td>2</td>
</tr>
</tbody>
</table>
</section>
<section>
<h2>Clever Quotes</h2>
<p>
These guys come in two forms, inline: <q cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
&ldquo;The nice thing about standards is that there are so many to choose from&rdquo;</q> and block:
</p>
<blockquote cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
&ldquo;For years there has been a theory that millions of monkeys typing at random on millions of typewriters would
reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.&rdquo;
</blockquote>
</section>
<section>
<h2>Intergalactic Interconnections</h2>
<p>
You can link between slides internally,
<a href="#/2/3">like this</a>.
</p>
</section>
<section>
<h2>Speaker View</h2>
<p>There's a <a href="https://github.com/hakimel/reveal.js#speaker-notes">speaker view</a>. It includes a timer, preview of the upcoming slide as well as your speaker notes.</p>
<p>Press the <em>S</em> key to try it out.</p>
<aside class="notes">
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).
</aside>
</section>
<section>
<h2>Export to PDF</h2>
<p>Presentations can be <a href="https://github.com/hakimel/reveal.js#pdf-export">exported to PDF</a>, here's an example:</p>
<iframe data-src="https://www.slideshare.net/slideshow/embed_code/42840540" width="445" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:3px solid #666; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe>
</section>
<section>
<h2>Global State</h2>
<p>
Set <code>data-state="something"</code> on a slide and <code>"something"</code>
will be added as a class to the document element when the slide is open. This lets you
apply broader style changes, like switching the page background.
</p>
</section>
<section data-state="customevent">
<h2>State Events</h2>
<p>
Additionally custom events can be triggered on a per slide basis by binding to the <code>data-state</code> name.
</p>
<pre><code class="javascript" data-trim contenteditable style="font-size: 18px;">
Reveal.addEventListener( 'customevent', function() {
console.log( '"customevent" has fired' );
} );
</code></pre>
</section>
<section>
<h2>Take a Moment</h2>
<p>
Press B or . on your keyboard to pause the presentation. This is helpful when you're on stage and want to take distracting slides off the screen.
</p>
</section>
<section>
<h2>Much more</h2>
<ul>
<li>Right-to-left support</li>
<li><a href="https://github.com/hakimel/reveal.js#api">Extensive JavaScript API</a></li>
<li><a href="https://github.com/hakimel/reveal.js#auto-sliding">Auto-progression</a></li>
<li><a href="https://github.com/hakimel/reveal.js#parallax-background">Parallax backgrounds</a></li>
<li><a href="https://github.com/hakimel/reveal.js#keyboard-bindings">Custom keyboard bindings</a></li>
</ul>
</section>
<section style="text-align: left;">
<h1>THE END</h1>
<p>
- <a href="http://slides.com">Try the online editor</a> <br>
- <a href="https://github.com/hakimel/reveal.js">Source code &amp; documentation</a>
</p>
</section>
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
width: 1000,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

View File

@ -1,388 +1,50 @@
<!doctype html> <!doctype html>
<html lang="en"> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>reveal.js - The HTML Presentation Framework</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.min.css"> <title>reveal.js</title>
<link rel="stylesheet" href="css/theme/default.css" id="theme">
<!-- For syntax highlighting --> <link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/black.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css"> <link rel="stylesheet" href="lib/css/zenburn.css">
<!-- If the query includes 'print-pdf', use the PDF print sheet --> <!-- Printing and PDF exports -->
<script> <script>
document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' ); var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script> </script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</head> </head>
<body> <body>
<div class="reveal"> <div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides"> <div class="slides">
<section> <section>Slide 1</section>
<h1>Reveal.js</h1> <section>Slide 2</section>
<h3>HTML Presentations Made Easy</h3>
<p>
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> / <a href="http://twitter.com/hakimel">@hakimel</a></small>
</p>
</section>
<section>
<h2>Heads Up</h2>
<p>
reveal.js is a framework for easily creating beautiful presentations using HTML. You'll need a browser with
support for CSS 3D transforms to see it in its full glory.
</p>
<aside class="notes">
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).
</aside>
</section>
<!-- Example of nested vertical slides -->
<section>
<section>
<h2>Vertical Slides</h2>
<p>
Slides can be nested inside of other slides,
try pressing <a href="#" class="navigate-down">down</a>.
</p>
<a href="#" class="image navigate-down">
<img width="178" height="238" src="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" alt="Down arrow">
</a>
</section>
<section>
<h2>Basement Level 1</h2>
<p>Press down or up to navigate.</p>
</section>
<section>
<h2>Basement Level 2</h2>
<p>Cornify</p>
<a class="test" href="http://cornify.com">
<img width="280" height="326" src="https://s3.amazonaws.com/hakim-static/reveal-js/cornify.gif" alt="Unicorn">
</a>
</section>
<section>
<h2>Basement Level 3</h2>
<p>That's it, time to go back up.</p>
<a href="#/2" class="image">
<img width="178" height="238" src="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" alt="Up arrow" style="-webkit-transform: rotate(180deg);">
</a>
</section>
</section>
<section>
<h2>Slides</h2>
<p>
Not a coder? No problem. There's a fully-featured visual editor for authoring these, try it out at <a href="http://slid.es" target="_blank">http://slid.es</a>.
</p>
</section>
<section>
<h2>Point of View</h2>
<p>
Press <strong>ESC</strong> to enter the slide overview.
</p>
<p>
Hold down alt and click on any element to zoom in on it using <a href="http://lab.hakim.se/zoom-js">zoom.js</a>. Alt + click anywhere to zoom back out.
</p>
</section>
<section>
<h2>Works in Mobile Safari</h2>
<p>
Try it out! You can swipe through the slides and pinch your way to the overview.
</p>
</section>
<section>
<h2>Marvelous Unordered List</h2>
<ul>
<li>No order here</li>
<li>Or here</li>
<li>Or here</li>
<li>Or here</li>
</ul>
</section>
<section>
<h2>Fantastic Ordered List</h2>
<ol>
<li>One is smaller than...</li>
<li>Two is smaller than...</li>
<li>Three!</li>
</ol>
</section>
<section data-markdown>
<script type="text/template">
## Markdown support
For those of you who like that sort of thing. Instructions and a bit more info available [here](https://github.com/hakimel/reveal.js#markdown).
```
<section data-markdown>
## Markdown support
For those of you who like that sort of thing.
Instructions and a bit more info available [here](https://github.com/hakimel/reveal.js#markdown).
</section>
```
</script>
</section>
<section id="transitions">
<h2>Transition Styles</h2>
<p>
You can select from different transitions, like: <br>
<a href="?transition=cube#/transitions">Cube</a> -
<a href="?transition=page#/transitions">Page</a> -
<a href="?transition=concave#/transitions">Concave</a> -
<a href="?transition=zoom#/transitions">Zoom</a> -
<a href="?transition=linear#/transitions">Linear</a> -
<a href="?transition=fade#/transitions">Fade</a> -
<a href="?transition=none#/transitions">None</a> -
<a href="?#/transitions">Default</a>
</p>
</section>
<section id="themes">
<h2>Themes</h2>
<p>
Reveal.js comes with a few themes built in: <br>
<a href="?#/themes">Default</a> -
<a href="?theme=sky#/themes">Sky</a> -
<a href="?theme=beige#/themes">Beige</a> -
<a href="?theme=simple#/themes">Simple</a> -
<a href="?theme=serif#/themes">Serif</a> -
<a href="?theme=night#/themes">Night</a> <br>
<a href="?theme=moon#/themes">Moon</a> -
<a href="?theme=solarized#/themes">Solarized</a>
</p>
<p>
<small>
* Theme demos are loaded after the presentation which leads to flicker. In production you should load your theme in the <code>&lt;head&gt;</code> using a <code>&lt;link&gt;</code>.
</small>
</p>
</section>
<section>
<h2>Global State</h2>
<p>
Set <code>data-state="something"</code> on a slide and <code>"something"</code>
will be added as a class to the document element when the slide is open. This lets you
apply broader style changes, like switching the background.
</p>
</section>
<section data-state="customevent">
<h2>Custom Events</h2>
<p>
Additionally custom events can be triggered on a per slide basis by binding to the <code>data-state</code> name.
</p>
<pre><code data-trim contenteditable style="font-size: 18px; margin-top: 20px;">
Reveal.addEventListener( 'customevent', function() {
console.log( '"customevent" has fired' );
} );
</code></pre>
</section>
<section>
<section data-background="#007777">
<h2>Slide Backgrounds</h2>
<p>
Set <code>data-background="#007777"</code> on a slide to change the full page background to the given color. All CSS color formats are supported.
</p>
<a href="#" class="image navigate-down">
<img width="178" height="238" src="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" alt="Down arrow">
</a>
</section>
<section data-background="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png">
<h2>Image Backgrounds</h2>
<pre><code>&lt;section data-background="image.png"&gt;</code></pre>
</section>
<section data-background="https://s3.amazonaws.com/hakim-static/reveal-js/arrow.png" data-background-repeat="repeat" data-background-size="100px">
<h2>Repeated Image Backgrounds</h2>
<pre><code style="word-wrap: break-word;">&lt;section data-background="image.png" data-background-repeat="repeat" data-background-size="100px"&gt;</code></pre>
</section>
</section>
<section data-transition="linear" data-background="#4d7e65" data-background-transition="slide">
<h2>Background Transitions</h2>
<p>
Pass reveal.js the <code>backgroundTransition: 'slide'</code> config argument to make backgrounds slide rather than fade.
</p>
</section>
<section data-transition="linear" data-background="#8c4738" data-background-transition="slide">
<h2>Background Transition Override</h2>
<p>
You can override background transitions per slide by using <code>data-background-transition="slide"</code>.
</p>
</section>
<section>
<h2>Clever Quotes</h2>
<p>
These guys come in two forms, inline: <q cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
&ldquo;The nice thing about standards is that there are so many to choose from&rdquo;</q> and block:
</p>
<blockquote cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
&ldquo;For years there has been a theory that millions of monkeys typing at random on millions of typewriters would
reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.&rdquo;
</blockquote>
</section>
<section>
<h2>Pretty Code</h2>
<pre><code data-trim contenteditable>
function linkify( selector ) {
if( supports3DTransforms ) {
var nodes = document.querySelectorAll( selector );
for( var i = 0, len = nodes.length; i &lt; len; i++ ) {
var node = nodes[i];
if( !node.className ) {
node.className += ' roll';
}
}
}
}
</code></pre>
<p>Courtesy of <a href="http://softwaremaniacs.org/soft/highlight/en/description/">highlight.js</a>.</p>
</section>
<section>
<h2>Intergalactic Interconnections</h2>
<p>
You can link between slides internally,
<a href="#/2/3">like this</a>.
</p>
</section>
<section>
<section id="fragments">
<h2>Fragmented Views</h2>
<p>Hit the next arrow...</p>
<p class="fragment">... to step through ...</p>
<ol>
<li class="fragment"><code>any type</code></li>
<li class="fragment"><em>of view</em></li>
<li class="fragment"><strong>fragments</strong></li>
</ol>
<aside class="notes">
This slide has fragments which are also stepped through in the notes window.
</aside>
</section>
<section>
<h2>Fragment Styles</h2>
<p>There's a few styles of fragments, like:</p>
<p class="fragment grow">grow</p>
<p class="fragment shrink">shrink</p>
<p class="fragment roll-in">roll-in</p>
<p class="fragment fade-out">fade-out</p>
<p class="fragment highlight-red">highlight-red</p>
<p class="fragment highlight-green">highlight-green</p>
<p class="fragment highlight-blue">highlight-blue</p>
<p class="fragment current-visible">current-visible</p>
<p class="fragment highlight-current-blue">highlight-current-blue</p>
</section>
</section>
<section>
<h2>Spectacular image!</h2>
<a class="image" href="http://lab.hakim.se/meny/" target="_blank">
<img width="320" height="299" src="http://s3.amazonaws.com/hakim-static/portfolio/images/meny.png" alt="Meny">
</a>
</section>
<section>
<h2>Export to PDF</h2>
<p>Presentations can be <a href="https://github.com/hakimel/reveal.js#pdf-export">exported to PDF</a>, below is an example that's been uploaded to SlideShare.</p>
<iframe id="slideshare" src="http://www.slideshare.net/slideshow/embed_code/13872948" width="455" height="356" style="margin:0;overflow:hidden;border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe>
<script>
document.getElementById('slideshare').attributeName = 'allowfullscreen';
</script>
</section>
<section>
<h2>Take a Moment</h2>
<p>
Press b or period on your keyboard to enter the 'paused' mode. This mode is helpful when you want to take distracting slides off the screen
during a presentation.
</p>
</section>
<section>
<h2>Stellar Links</h2>
<ul>
<li><a href="http://slid.es">Try the online editor</a></li>
<li><a href="https://github.com/hakimel/reveal.js">Source code on GitHub</a></li>
<li><a href="http://twitter.com/hakimel">Follow me on Twitter</a></li>
</ul>
</section>
<section>
<h1>THE END</h1>
<h3>BY Hakim El Hattab / hakim.se</h3>
</section>
</div> </div>
</div> </div>
<script src="lib/js/head.min.js"></script> <script src="lib/js/head.min.js"></script>
<script src="js/reveal.min.js"></script> <script src="js/reveal.js"></script>
<script> <script>
// More info https://github.com/hakimel/reveal.js#configuration
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({ Reveal.initialize({
controls: true,
progress: true,
history: true, history: true,
center: true,
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme // More info https://github.com/hakimel/reveal.js#dependencies
transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none
// Parallax scrolling
// parallaxBackgroundImage: 'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg',
// parallaxBackgroundSize: '2100px 900px',
// Optional libraries used to extend on reveal.js
dependencies: [ dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, { src: 'plugin/markdown/marked.js' },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, { src: 'plugin/markdown/markdown.js' },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, { src: 'plugin/notes/notes.js', async: true },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
{ src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
{ src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
] ]
}); });
</script> </script>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

9
js/reveal.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -5,110 +5,76 @@ based on dark.css by Ivan Sagalaev
*/ */
pre code { .hljs {
display: block; padding: 0.5em; display: block;
background: #3F3F3F; overflow-x: auto;
color: #DCDCDC; padding: 0.5em;
background: #3f3f3f;
color: #dcdcdc;
} }
pre .keyword, .hljs-keyword,
pre .tag, .hljs-selector-tag,
pre .css .class, .hljs-tag {
pre .css .id, color: #e3ceab;
pre .lisp .title,
pre .nginx .title,
pre .request,
pre .status,
pre .clojure .attribute {
color: #E3CEAB;
} }
pre .django .template_tag, .hljs-template-tag {
pre .django .variable, color: #dcdcdc;
pre .django .filter .argument {
color: #DCDCDC;
} }
pre .number, .hljs-number {
pre .date { color: #8cd0d3;
color: #8CD0D3;
} }
pre .dos .envvar, .hljs-variable,
pre .dos .stream, .hljs-template-variable,
pre .variable, .hljs-attribute {
pre .apache .sqbracket { color: #efdcbc;
color: #EFDCBC;
} }
pre .dos .flow, .hljs-literal {
pre .diff .change, color: #efefaf;
pre .python .exception,
pre .python .built_in,
pre .literal,
pre .tex .special {
color: #EFEFAF;
} }
pre .diff .chunk, .hljs-subst {
pre .subst { color: #8f8f8f;
color: #8F8F8F;
} }
pre .dos .keyword, .hljs-title,
pre .python .decorator, .hljs-name,
pre .title, .hljs-selector-id,
pre .haskell .type, .hljs-selector-class,
pre .diff .header, .hljs-section,
pre .ruby .class .parent, .hljs-type {
pre .apache .tag, color: #efef8f;
pre .nginx .built_in,
pre .tex .command,
pre .prompt {
color: #efef8f;
} }
pre .dos .winutils, .hljs-symbol,
pre .ruby .symbol, .hljs-bullet,
pre .ruby .symbol .string, .hljs-link {
pre .ruby .string { color: #dca3a3;
color: #DCA3A3;
} }
pre .diff .deletion, .hljs-deletion,
pre .string, .hljs-string,
pre .tag .value, .hljs-built_in,
pre .preprocessor, .hljs-builtin-name {
pre .built_in, color: #cc9393;
pre .sql .aggregate,
pre .javadoc,
pre .smalltalk .class,
pre .smalltalk .localvars,
pre .smalltalk .array,
pre .css .rules .value,
pre .attr_selector,
pre .pseudo,
pre .apache .cbracket,
pre .tex .formula {
color: #CC9393;
} }
pre .shebang, .hljs-addition,
pre .diff .addition, .hljs-comment,
pre .comment, .hljs-quote,
pre .java .annotation, .hljs-meta {
pre .template_comment, color: #7f9f7f;
pre .pi,
pre .doctype {
color: #7F9F7F;
} }
pre .coffeescript .javascript,
pre .javascript .xml, .hljs-emphasis {
pre .tex .formula, font-style: italic;
pre .xml .javascript, }
pre .xml .vbscript,
pre .xml .css, .hljs-strong {
pre .xml .cdata { font-weight: bold;
opacity: 0.5;
} }

View File

@ -0,0 +1,10 @@
@font-face {
font-family: 'League Gothic';
src: url('league-gothic.eot');
src: url('league-gothic.eot?#iefix') format('embedded-opentype'),
url('league-gothic.woff') format('woff'),
url('league-gothic.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,39 @@
@font-face {
font-family: 'Source Sans Pro';
src: url('source-sans-pro-regular.eot');
src: url('source-sans-pro-regular.eot?#iefix') format('embedded-opentype'),
url('source-sans-pro-regular.woff') format('woff'),
url('source-sans-pro-regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Source Sans Pro';
src: url('source-sans-pro-italic.eot');
src: url('source-sans-pro-italic.eot?#iefix') format('embedded-opentype'),
url('source-sans-pro-italic.woff') format('woff'),
url('source-sans-pro-italic.ttf') format('truetype');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Source Sans Pro';
src: url('source-sans-pro-semibold.eot');
src: url('source-sans-pro-semibold.eot?#iefix') format('embedded-opentype'),
url('source-sans-pro-semibold.woff') format('woff'),
url('source-sans-pro-semibold.ttf') format('truetype');
font-weight: 600;
font-style: normal;
}
@font-face {
font-family: 'Source Sans Pro';
src: url('source-sans-pro-semibolditalic.eot');
src: url('source-sans-pro-semibolditalic.eot?#iefix') format('embedded-opentype'),
url('source-sans-pro-semibolditalic.woff') format('woff'),
url('source-sans-pro-semibolditalic.ttf') format('truetype');
font-weight: 600;
font-style: italic;
}

17
lib/js/head.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,12 +1,13 @@
{ {
"name": "reveal.js", "name": "reveal.js",
"version": "2.6.1", "version": "3.3.0",
"description": "The HTML Presentation Framework", "description": "The HTML Presentation Framework",
"homepage": "http://lab.hakim.se/reveal-js", "homepage": "http://lab.hakim.se/reveal-js",
"subdomain": "revealjs", "subdomain": "revealjs",
"main": "js/reveal.js",
"scripts": { "scripts": {
"test": "grunt test", "test": "grunt test",
"start": "" "start": "grunt serve"
}, },
"author": { "author": {
"name": "Hakim El Hattab", "name": "Hakim El Hattab",
@ -18,29 +19,27 @@
"url": "git://github.com/hakimel/reveal.js.git" "url": "git://github.com/hakimel/reveal.js.git"
}, },
"engines": { "engines": {
"node": "~0.8.0" "node": "~4.1.1"
}, },
"dependencies": { "dependencies": {
"underscore": "~1.5.1", "express": "~4.14.0",
"express": "~2.5.9", "grunt-cli": "~1.2.0",
"mustache": "~0.7.2", "mustache": "~2.2.1",
"socket.io": "~0.9.13" "socket.io": "^1.4.8"
}, },
"devDependencies": { "devDependencies": {
"grunt-contrib-qunit": "~0.2.2", "grunt": "~0.4.5",
"grunt-contrib-jshint": "~0.6.4", "grunt-autoprefixer": "~3.0.3",
"grunt-contrib-cssmin": "~0.4.1", "grunt-contrib-connect": "~0.11.2",
"grunt-contrib-uglify": "~0.2.4", "grunt-contrib-cssmin": "~0.14.0",
"grunt-contrib-watch": "~0.5.3", "grunt-contrib-jshint": "~0.11.3",
"grunt-contrib-sass": "~0.5.0", "grunt-contrib-qunit": "~1.2.0",
"grunt-contrib-connect": "~0.5.0", "grunt-contrib-uglify": "~0.9.2",
"grunt-zip": "~0.7.0", "grunt-contrib-watch": "~1.0.0",
"grunt": "~0.4.0" "grunt-sass": "~1.2.0",
"grunt-retire": "~0.3.10",
"grunt-zip": "~0.17.1",
"node-sass": "~3.7.0"
}, },
"licenses": [ "license": "MIT"
{
"type": "MIT",
"url": "https://github.com/hakimel/reveal.js/blob/master/LICENSE"
}
]
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@
<title>reveal.js - Markdown Demo</title> <title>reveal.js - Markdown Demo</title>
<link rel="stylesheet" href="../../css/reveal.css"> <link rel="stylesheet" href="../../css/reveal.css">
<link rel="stylesheet" href="../../css/theme/default.css" id="theme"> <link rel="stylesheet" href="../../css/theme/white.css" id="theme">
<link rel="stylesheet" href="../../lib/css/zenburn.css"> <link rel="stylesheet" href="../../lib/css/zenburn.css">
</head> </head>
@ -19,7 +19,7 @@
<div class="slides"> <div class="slides">
<!-- Use external markdown resource, separate slides by three newlines; vertical slides by two newlines --> <!-- Use external markdown resource, separate slides by three newlines; vertical slides by two newlines -->
<section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n"></section> <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section>
<!-- Slides are separated by three dashes (quick 'n dirty regular expression) --> <!-- Slides are separated by three dashes (quick 'n dirty regular expression) -->
<section data-markdown data-separator="---"> <section data-markdown data-separator="---">
@ -36,7 +36,7 @@
</section> </section>
<!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes --> <!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes -->
<section data-markdown data-separator="^\n---\n$" data-vertical="^\n--\n$"> <section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$">
<script type="text/template"> <script type="text/template">
## Demo 2 ## Demo 2
Slide 1.1 Slide 1.1

View File

@ -4,10 +4,13 @@
* of external markdown documents. * of external markdown documents.
*/ */
(function( root, factory ) { (function( root, factory ) {
if( typeof exports === 'object' ) { if (typeof define === 'function' && define.amd) {
root.marked = require( './marked' );
root.RevealMarkdown = factory( root.marked );
root.RevealMarkdown.initialize();
} else if( typeof exports === 'object' ) {
module.exports = factory( require( './marked' ) ); module.exports = factory( require( './marked' ) );
} } else {
else {
// Browser globals (root is window) // Browser globals (root is window)
root.RevealMarkdown = factory( root.marked ); root.RevealMarkdown = factory( root.marked );
root.RevealMarkdown.initialize(); root.RevealMarkdown.initialize();
@ -20,17 +23,19 @@
if( typeof hljs !== 'undefined' ) { if( typeof hljs !== 'undefined' ) {
marked.setOptions({ marked.setOptions({
highlight: function( lang, code ) { highlight: function( code, lang ) {
return hljs.highlightAuto( lang, code ).value; return hljs.highlightAuto( code, [lang] ).value;
} }
}); });
} }
var DEFAULT_SLIDE_SEPARATOR = '^\n---\n$', var DEFAULT_SLIDE_SEPARATOR = '^\r?\n---\r?\n$',
DEFAULT_NOTES_SEPARATOR = 'note:', DEFAULT_NOTES_SEPARATOR = 'note:',
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$', DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$'; DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
var SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__';
/** /**
* Retrieves the markdown contents of a slide section * Retrieves the markdown contents of a slide section
@ -43,6 +48,9 @@
// strip leading whitespace so it isn't evaluated as code // strip leading whitespace so it isn't evaluated as code
var text = ( template || section ).textContent; var text = ( template || section ).textContent;
// restore script end tags
text = text.replace( new RegExp( SCRIPT_END_PLACEHOLDER, 'g' ), '</script>' );
var leadingWs = text.match( /^\n?(\s*)/ )[1].length, var leadingWs = text.match( /^\n?(\s*)/ )[1].length,
leadingTabs = text.match( /^\n?(\t*)/ )[1].length; leadingTabs = text.match( /^\n?(\t*)/ )[1].length;
@ -50,7 +58,7 @@
text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' );
} }
else if( leadingWs > 1 ) { else if( leadingWs > 1 ) {
text = text.replace( new RegExp('\\n? {' + leadingWs + '}','g'), '\n' ); text = text.replace( new RegExp('\\n? {' + leadingWs + '}', 'g'), '\n' );
} }
return text; return text;
@ -76,7 +84,7 @@
if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue; if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue;
if( value ) { if( value ) {
result.push( name + '=' + value ); result.push( name + '="' + value + '"' );
} }
else { else {
result.push( name ); result.push( name );
@ -112,9 +120,13 @@
var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) ); var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) );
if( notesMatch.length === 2 ) { if( notesMatch.length === 2 ) {
content = notesMatch[0] + '<aside class="notes" data-markdown>' + notesMatch[1].trim() + '</aside>'; content = notesMatch[0] + '<aside class="notes">' + marked(notesMatch[1].trim()) + '</aside>';
} }
// prevent script end tags in the content from interfering
// with parsing
content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER );
return '<script type="text/template">' + content + '</script>'; return '<script type="text/template">' + content + '</script>';
} }
@ -219,12 +231,13 @@
xhr.onreadystatechange = function() { xhr.onreadystatechange = function() {
if( xhr.readyState === 4 ) { if( xhr.readyState === 4 ) {
if ( xhr.status >= 200 && xhr.status < 300 ) { // file protocol yields status code 0 (useful for local debug, mobile applications etc.)
if ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) {
section.outerHTML = slidify( xhr.responseText, { section.outerHTML = slidify( xhr.responseText, {
separator: section.getAttribute( 'data-separator' ), separator: section.getAttribute( 'data-separator' ),
verticalSeparator: section.getAttribute( 'data-vertical' ), verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
notesSeparator: section.getAttribute( 'data-notes' ), notesSeparator: section.getAttribute( 'data-separator-notes' ),
attributes: getForwardedAttributes( section ) attributes: getForwardedAttributes( section )
}); });
@ -251,12 +264,12 @@
} }
} }
else if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-vertical' ) || section.getAttribute( 'data-notes' ) ) { else if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-separator-vertical' ) || section.getAttribute( 'data-separator-notes' ) ) {
section.outerHTML = slidify( getMarkdownFromSlide( section ), { section.outerHTML = slidify( getMarkdownFromSlide( section ), {
separator: section.getAttribute( 'data-separator' ), separator: section.getAttribute( 'data-separator' ),
verticalSeparator: section.getAttribute( 'data-vertical' ), verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
notesSeparator: section.getAttribute( 'data-notes' ), notesSeparator: section.getAttribute( 'data-separator-notes' ),
attributes: getForwardedAttributes( section ) attributes: getForwardedAttributes( section )
}); });

File diff suppressed because one or more lines are too long

View File

@ -7,14 +7,17 @@
var RevealMath = window.RevealMath || (function(){ var RevealMath = window.RevealMath || (function(){
var options = Reveal.getConfig().math || {}; var options = Reveal.getConfig().math || {};
options.mathjax = options.mathjax || 'http://cdn.mathjax.org/mathjax/latest/MathJax.js'; options.mathjax = options.mathjax || 'https://cdn.mathjax.org/mathjax/latest/MathJax.js';
options.config = options.config || 'TeX-AMS_HTML-full'; options.config = options.config || 'TeX-AMS_HTML-full';
loadScript( options.mathjax + '?config=' + options.config, function() { loadScript( options.mathjax + '?config=' + options.config, function() {
MathJax.Hub.Config({ MathJax.Hub.Config({
messageStyle: 'none', messageStyle: 'none',
tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] }, tex2jax: {
inlineMath: [['$','$'],['\\(','\\)']] ,
skipTags: ['script','noscript','style','textarea','pre']
},
skipStartupTypeset: true skipStartupTypeset: true
}); });

View File

@ -8,6 +8,6 @@
if (data.socketId !== socketId) { return; } if (data.socketId !== socketId) { return; }
if( window.location.host === 'localhost:1947' ) return; if( window.location.host === 'localhost:1947' ) return;
Reveal.slide(data.indexh, data.indexv, data.indexf, 'remote'); Reveal.setState(data.state);
}); });
}()); }());

View File

@ -1,37 +1,45 @@
var http = require('http');
var express = require('express'); var express = require('express');
var fs = require('fs'); var fs = require('fs');
var io = require('socket.io'); var io = require('socket.io');
var crypto = require('crypto'); var crypto = require('crypto');
var app = express.createServer(); var app = express();
var staticDir = express.static; var staticDir = express.static;
var server = http.createServer(app);
io = io.listen(app); io = io(server);
var opts = { var opts = {
port: 1948, port: process.env.PORT || 1948,
baseDir : __dirname + '/../../' baseDir : __dirname + '/../../'
}; };
io.sockets.on('connection', function(socket) { io.on( 'connection', function( socket ) {
socket.on('slidechanged', function(slideData) { socket.on('multiplex-statechanged', function(data) {
if (typeof slideData.secret == 'undefined' || slideData.secret == null || slideData.secret === '') return; if (typeof data.secret == 'undefined' || data.secret == null || data.secret === '') return;
if (createHash(slideData.secret) === slideData.socketId) { if (createHash(data.secret) === data.socketId) {
slideData.secret = null; data.secret = null;
socket.broadcast.emit(slideData.socketId, slideData); socket.broadcast.emit(data.socketId, data);
}; };
}); });
}); });
app.configure(function() { [ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) {
[ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) { app.use('/' + dir, staticDir(opts.baseDir + dir));
app.use('/' + dir, staticDir(opts.baseDir + dir));
});
}); });
app.get("/", function(req, res) { app.get("/", function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'}); res.writeHead(200, {'Content-Type': 'text/html'});
fs.createReadStream(opts.baseDir + '/index.html').pipe(res);
var stream = fs.createReadStream(opts.baseDir + '/index.html');
stream.on('error', function( error ) {
res.write('<style>body{font-family: sans-serif;}</style><h2>reveal.js multiplex server.</h2><a href="/token">Generate token</a>');
res.end();
});
stream.on('readable', function() {
stream.pipe(res);
});
}); });
app.get("/token", function(req,res) { app.get("/token", function(req,res) {
@ -47,7 +55,7 @@ var createHash = function(secret) {
}; };
// Actually listen // Actually listen
app.listen(opts.port || null); server.listen( opts.port || null );
var brown = '\033[33m', var brown = '\033[33m',
green = '\033[32m', green = '\033[32m',

View File

@ -1,51 +1,31 @@
(function() { (function() {
// Don't emit events from inside of notes windows // Don't emit events from inside of notes windows
if ( window.location.search.match( /receiver/gi ) ) { return; } if ( window.location.search.match( /receiver/gi ) ) { return; }
var multiplex = Reveal.getConfig().multiplex; var multiplex = Reveal.getConfig().multiplex;
var socket = io.connect(multiplex.url); var socket = io.connect( multiplex.url );
var notify = function( slideElement, indexh, indexv, origin ) { function post() {
if( typeof origin === 'undefined' && origin !== 'remote' ) {
var nextindexh;
var nextindexv;
var fragmentindex = Reveal.getIndices().f; var messageData = {
if (typeof fragmentindex == 'undefined') { state: Reveal.getState(),
fragmentindex = 0; secret: multiplex.secret,
} socketId: multiplex.id
};
if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { socket.emit( 'multiplex-statechanged', messageData );
nextindexh = indexh;
nextindexv = indexv + 1;
} else {
nextindexh = indexh + 1;
nextindexv = 0;
}
var slideData = {
indexh : indexh,
indexv : indexv,
indexf : fragmentindex,
nextindexh : nextindexh,
nextindexv : nextindexv,
secret: multiplex.secret,
socketId : multiplex.id
};
socket.emit('slidechanged', slideData);
}
}
Reveal.addEventListener( 'slidechanged', function( event ) {
notify( event.currentSlide, event.indexh, event.indexv, event.origin );
} );
var fragmentNotify = function( event ) {
notify( Reveal.getCurrentSlide(), Reveal.getIndices().h, Reveal.getIndices().v, event.origin );
}; };
Reveal.addEventListener( 'fragmentshown', fragmentNotify ); // Monitor events that trigger a change in state
Reveal.addEventListener( 'fragmenthidden', fragmentNotify ); Reveal.addEventListener( 'slidechanged', post );
Reveal.addEventListener( 'fragmentshown', post );
Reveal.addEventListener( 'fragmenthidden', post );
Reveal.addEventListener( 'overviewhidden', post );
Reveal.addEventListener( 'overviewshown', post );
Reveal.addEventListener( 'paused', post );
Reveal.addEventListener( 'resumed', post );
}()); }());

View File

@ -0,0 +1,19 @@
{
"name": "reveal-js-multiplex",
"version": "1.0.0",
"description": "reveal.js multiplex server",
"homepage": "http://lab.hakim.se/reveal-js",
"scripts": {
"start": "node index.js"
},
"engines": {
"node": "~4.1.1"
},
"dependencies": {
"express": "~4.13.3",
"grunt-cli": "~0.1.13",
"mustache": "~2.2.1",
"socket.io": "~1.3.7"
},
"license": "MIT"
}

View File

@ -1,57 +1,65 @@
(function() { (function() {
// don't emit events from inside the previews themselves // don't emit events from inside the previews themselves
if ( window.location.search.match( /receiver/gi ) ) { return; } if( window.location.search.match( /receiver/gi ) ) { return; }
var socket = io.connect(window.location.origin); var socket = io.connect( window.location.origin ),
var socketId = Math.random().toString().slice(2); socketId = Math.random().toString().slice( 2 );
console.log('View slide notes at ' + window.location.origin + '/notes/' + socketId); console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId );
window.open(window.location.origin + '/notes/' + socketId, 'notes-' + socketId);
// Fires when a fragment is shown window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId );
Reveal.addEventListener( 'fragmentshown', function( event ) {
var fragmentData = { /**
fragment : 'next', * Posts the current slide data to the notes window
socketId : socketId */
function post() {
var slideElement = Reveal.getCurrentSlide(),
notesElement = slideElement.querySelector( 'aside.notes' );
var messageData = {
notes: '',
markdown: false,
socketId: socketId,
state: Reveal.getState()
}; };
socket.emit('fragmentchanged', fragmentData);
} );
// Fires when a fragment is hidden // Look for notes defined in a slide attribute
Reveal.addEventListener( 'fragmenthidden', function( event ) { if( slideElement.hasAttribute( 'data-notes' ) ) {
var fragmentData = { messageData.notes = slideElement.getAttribute( 'data-notes' );
fragment : 'previous',
socketId : socketId
};
socket.emit('fragmentchanged', fragmentData);
} );
// Fires when slide is changed
Reveal.addEventListener( 'slidechanged', function( event ) {
var nextindexh;
var nextindexv;
var slideElement = event.currentSlide;
if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') {
nextindexh = event.indexh;
nextindexv = event.indexv + 1;
} else {
nextindexh = event.indexh + 1;
nextindexv = 0;
} }
var notes = slideElement.querySelector('aside.notes'); // Look for notes defined in an aside element
var slideData = { if( notesElement ) {
notes : notes ? notes.innerHTML : '', messageData.notes = notesElement.innerHTML;
indexh : event.indexh, messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
indexv : event.indexv, }
nextindexh : nextindexh,
nextindexv : nextindexv,
socketId : socketId,
markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false
}; socket.emit( 'statechanged', messageData );
socket.emit('slidechanged', slideData); }
// When a new notes window connects, post our current state
socket.on( 'new-subscriber', function( data ) {
post();
} ); } );
// When the state changes from inside of the speaker view
socket.on( 'statechanged-speaker', function( data ) {
Reveal.setState( data.state );
} );
// Monitor events that trigger a change in state
Reveal.addEventListener( 'slidechanged', post );
Reveal.addEventListener( 'fragmentshown', post );
Reveal.addEventListener( 'fragmenthidden', post );
Reveal.addEventListener( 'overviewhidden', post );
Reveal.addEventListener( 'overviewshown', post );
Reveal.addEventListener( 'paused', post );
Reveal.addEventListener( 'resumed', post );
// Post the initial state
post();
}()); }());

View File

@ -1,59 +1,69 @@
var http = require('http');
var express = require('express'); var express = require('express');
var fs = require('fs'); var fs = require('fs');
var io = require('socket.io'); var io = require('socket.io');
var _ = require('underscore');
var Mustache = require('mustache'); var Mustache = require('mustache');
var app = express.createServer(); var app = express();
var staticDir = express.static; var staticDir = express.static;
var server = http.createServer(app);
io = io.listen(app); io = io(server);
var opts = { var opts = {
port : 1947, port : 1947,
baseDir : __dirname + '/../../' baseDir : __dirname + '/../../'
}; };
io.sockets.on('connection', function(socket) { io.on( 'connection', function( socket ) {
socket.on('slidechanged', function(slideData) {
socket.broadcast.emit('slidedata', slideData); socket.on( 'new-subscriber', function( data ) {
socket.broadcast.emit( 'new-subscriber', data );
}); });
socket.on('fragmentchanged', function(fragmentData) {
socket.broadcast.emit('fragmentdata', fragmentData); socket.on( 'statechanged', function( data ) {
delete data.state.overview;
socket.broadcast.emit( 'statechanged', data );
}); });
socket.on( 'statechanged-speaker', function( data ) {
delete data.state.overview;
socket.broadcast.emit( 'statechanged-speaker', data );
});
}); });
app.configure(function() { [ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) {
[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach(function(dir) { app.use( '/' + dir, staticDir( opts.baseDir + dir ) );
app.use('/' + dir, staticDir(opts.baseDir + dir));
});
}); });
app.get("/", function(req, res) { app.get('/', function( req, res ) {
res.writeHead(200, {'Content-Type': 'text/html'});
fs.createReadStream(opts.baseDir + '/index.html').pipe(res); res.writeHead( 200, { 'Content-Type': 'text/html' } );
fs.createReadStream( opts.baseDir + '/index.html' ).pipe( res );
}); });
app.get("/notes/:socketId", function(req, res) { app.get( '/notes/:socketId', function( req, res ) {
fs.readFile(opts.baseDir + 'plugin/notes-server/notes.html', function(err, data) { fs.readFile( opts.baseDir + 'plugin/notes-server/notes.html', function( err, data ) {
res.send(Mustache.to_html(data.toString(), { res.send( Mustache.to_html( data.toString(), {
socketId : req.params.socketId socketId : req.params.socketId
})); }));
}); });
// fs.createReadStream(opts.baseDir + 'notes-server/notes.html').pipe(res);
}); });
// Actually listen // Actually listen
app.listen(opts.port || null); server.listen( opts.port || null );
var brown = '\033[33m', var brown = '\033[33m',
green = '\033[32m', green = '\033[32m',
reset = '\033[0m'; reset = '\033[0m';
var slidesLocation = "http://localhost" + ( opts.port ? ( ':' + opts.port ) : '' ); var slidesLocation = 'http://localhost' + ( opts.port ? ( ':' + opts.port ) : '' );
console.log( brown + "reveal.js - Speaker Notes" + reset ); console.log( brown + 'reveal.js - Speaker Notes' + reset );
console.log( "1. Open the slides at " + green + slidesLocation + reset ); console.log( '1. Open the slides at ' + green + slidesLocation + reset );
console.log( "2. Click on the link your JS console to go to the notes page" ); console.log( '2. Click on the link in your JS console to go to the notes page' );
console.log( "3. Advance through your slides and your notes will advance automatically" ); console.log( '3. Advance through your slides and your notes will advance automatically' );

View File

@ -3,8 +3,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=1150">
<title>reveal.js - Slide Notes</title> <title>reveal.js - Slide Notes</title>
<style> <style>
@ -12,130 +10,397 @@
font-family: Helvetica; font-family: Helvetica;
} }
#notes { #current-slide,
font-size: 24px; #upcoming-slide,
width: 640px; #speaker-controls {
margin-top: 5px; padding: 6px;
clear: left; box-sizing: border-box;
-moz-box-sizing: border-box;
} }
#wrap-current-slide { #current-slide iframe,
width: 640px; #upcoming-slide iframe {
height: 512px; width: 100%;
float: left; height: 100%;
overflow: hidden; border: 1px solid #ddd;
}
#current-slide .label,
#upcoming-slide .label {
position: absolute;
top: 10px;
left: 10px;
font-weight: bold;
font-size: 14px;
z-index: 2;
color: rgba( 255, 255, 255, 0.9 );
} }
#current-slide { #current-slide {
width: 1280px;
height: 1024px;
border: none;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
-o-transform: scale(0.5);
transform: scale(0.5);
}
#wrap-next-slide {
width: 448px;
height: 358px;
float: left;
margin: 0 0 0 10px;
overflow: hidden;
}
#next-slide {
width: 1280px;
height: 1024px;
border: none;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(0.35);
-moz-transform: scale(0.35);
-ms-transform: scale(0.35);
-o-transform: scale(0.35);
transform: scale(0.35);
}
.slides {
position: relative;
margin-bottom: 10px;
border: 1px solid black;
border-radius: 2px;
background: rgb(28, 30, 32);
}
.slides span {
position: absolute; position: absolute;
top: 3px; width: 65%;
left: 3px; height: 100%;
font-weight: bold; top: 0;
font-size: 14px; left: 0;
color: rgba( 255, 255, 255, 0.9 ); padding-right: 0;
} }
#upcoming-slide {
position: absolute;
width: 35%;
height: 40%;
right: 0;
top: 0;
}
#speaker-controls {
position: absolute;
top: 40%;
right: 0;
width: 35%;
height: 60%;
font-size: 18px;
}
.speaker-controls-time.hidden,
.speaker-controls-notes.hidden {
display: none;
}
.speaker-controls-time .label,
.speaker-controls-notes .label {
text-transform: uppercase;
font-weight: normal;
font-size: 0.66em;
color: #666;
margin: 0;
}
.speaker-controls-time {
border-bottom: 1px solid rgba( 200, 200, 200, 0.5 );
margin-bottom: 10px;
padding: 10px 16px;
padding-bottom: 20px;
cursor: pointer;
}
.speaker-controls-time .reset-button {
opacity: 0;
float: right;
color: #666;
text-decoration: none;
}
.speaker-controls-time:hover .reset-button {
opacity: 1;
}
.speaker-controls-time .timer,
.speaker-controls-time .clock {
width: 50%;
font-size: 1.9em;
}
.speaker-controls-time .timer {
float: left;
}
.speaker-controls-time .clock {
float: right;
text-align: right;
}
.speaker-controls-time span.mute {
color: #bbb;
}
.speaker-controls-notes {
padding: 10px 16px;
}
.speaker-controls-notes .value {
margin-top: 5px;
line-height: 1.4;
font-size: 1.2em;
}
.clear {
clear: both;
}
@media screen and (max-width: 1080px) {
#speaker-controls {
font-size: 16px;
}
}
@media screen and (max-width: 900px) {
#speaker-controls {
font-size: 14px;
}
}
@media screen and (max-width: 800px) {
#speaker-controls {
font-size: 12px;
}
}
</style> </style>
</head> </head>
<body> <body>
<div id="wrap-current-slide" class="slides"> <div id="current-slide"></div>
<iframe src="/?receiver" width="1280" height="1024" id="current-slide"></iframe> <div id="upcoming-slide"><span class="label">UPCOMING:</span></div>
</div> <div id="speaker-controls">
<div class="speaker-controls-time">
<h4 class="label">Time <span class="reset-button">Click to Reset</span></h4>
<div class="clock">
<span class="clock-value">0:00 AM</span>
</div>
<div class="timer">
<span class="hours-value">00</span><span class="minutes-value">:00</span><span class="seconds-value">:00</span>
</div>
<div class="clear"></div>
</div>
<div id="wrap-next-slide" class="slides"> <div class="speaker-controls-notes hidden">
<iframe src="/?receiver" width="640" height="512" id="next-slide"></iframe> <h4 class="label">Notes</h4>
<span>UPCOMING:</span> <div class="value"></div>
</div>
</div> </div>
<div id="notes"></div>
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js"></script>
<script src="/plugin/markdown/marked.js"></script> <script src="/plugin/markdown/marked.js"></script>
<script> <script>
var socketId = '{{socketId}}'; (function() {
var socket = io.connect(window.location.origin);
var notes = document.getElementById('notes');
var currentSlide = document.getElementById('current-slide');
var nextSlide = document.getElementById('next-slide');
socket.on('slidedata', function(data) { var notes,
// ignore data from sockets that aren't ours notesValue,
if (data.socketId !== socketId) { return; } currentState,
currentSlide,
upcomingSlide,
connected = false;
var socket = io.connect( window.location.origin ),
socketId = '{{socketId}}';
socket.on( 'statechanged', function( data ) {
// ignore data from sockets that aren't ours
if( data.socketId !== socketId ) { return; }
if( connected === false ) {
connected = true;
setupKeyboard();
setupNotes();
setupTimer();
}
handleStateMessage( data );
} );
// Load our presentation iframes
setupIframes();
// Once the iframes have loaded, emit a signal saying there's
// a new subscriber which will trigger a 'statechanged'
// message to be sent back
window.addEventListener( 'message', function( event ) {
var data = JSON.parse( event.data );
if( data && data.namespace === 'reveal' ) {
if( /ready/.test( data.eventName ) ) {
socket.emit( 'new-subscriber', { socketId: socketId } );
}
}
// Messages sent by reveal.js inside of the current slide preview
if( data && data.namespace === 'reveal' ) {
if( /slidechanged|fragmentshown|fragmenthidden|overviewshown|overviewhidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {
socket.emit( 'statechanged-speaker', { state: data.state } );
}
}
} );
/**
* Called when the main window sends an updated state.
*/
function handleStateMessage( data ) {
// Store the most recently set state to avoid circular loops
// applying the same state
currentState = JSON.stringify( data.state );
// No need for updating the notes in case of fragment changes
if ( data.notes ) {
notes.classList.remove( 'hidden' );
if( data.markdown ) {
notesValue.innerHTML = marked( data.notes );
}
else {
notesValue.innerHTML = data.notes;
}
}
else {
notes.classList.add( 'hidden' );
}
// Update the note slides
currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );
upcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );
upcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'next' }), '*' );
if (data.markdown) {
notes.innerHTML = marked(data.notes);
}
else {
notes.innerHTML = data.notes;
} }
currentSlide.contentWindow.Reveal.slide(data.indexh, data.indexv); // Limit to max one state update per X ms
nextSlide.contentWindow.Reveal.slide(data.nextindexh, data.nextindexv); handleStateMessage = debounce( handleStateMessage, 200 );
});
socket.on('fragmentdata', function(data) { /**
// ignore data from sockets that aren't ours * Forward keyboard events to the current slide window.
if (data.socketId !== socketId) { return; } * This enables keyboard events to work even if focus
* isn't set on the current slide iframe.
*/
function setupKeyboard() {
document.addEventListener( 'keydown', function( event ) {
currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );
} );
if (data.fragment === 'next') {
currentSlide.contentWindow.Reveal.nextFragment();
} }
else if (data.fragment === 'previous') {
currentSlide.contentWindow.Reveal.prevFragment(); /**
* Creates the preview iframes.
*/
function setupIframes() {
var params = [
'receiver',
'progress=false',
'history=false',
'transition=none',
'backgroundTransition=none'
].join( '&' );
var currentURL = '/?' + params + '&postMessageEvents=true';
var upcomingURL = '/?' + params + '&controls=false';
currentSlide = document.createElement( 'iframe' );
currentSlide.setAttribute( 'width', 1280 );
currentSlide.setAttribute( 'height', 1024 );
currentSlide.setAttribute( 'src', currentURL );
document.querySelector( '#current-slide' ).appendChild( currentSlide );
upcomingSlide = document.createElement( 'iframe' );
upcomingSlide.setAttribute( 'width', 640 );
upcomingSlide.setAttribute( 'height', 512 );
upcomingSlide.setAttribute( 'src', upcomingURL );
document.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );
} }
});
/**
* Setup the notes UI.
*/
function setupNotes() {
notes = document.querySelector( '.speaker-controls-notes' );
notesValue = document.querySelector( '.speaker-controls-notes .value' );
}
/**
* Create the timer and clock and start updating them
* at an interval.
*/
function setupTimer() {
var start = new Date(),
timeEl = document.querySelector( '.speaker-controls-time' ),
clockEl = timeEl.querySelector( '.clock-value' ),
hoursEl = timeEl.querySelector( '.hours-value' ),
minutesEl = timeEl.querySelector( '.minutes-value' ),
secondsEl = timeEl.querySelector( '.seconds-value' );
function _updateTimer() {
var diff, hours, minutes, seconds,
now = new Date();
diff = now.getTime() - start.getTime();
hours = Math.floor( diff / ( 1000 * 60 * 60 ) );
minutes = Math.floor( ( diff / ( 1000 * 60 ) ) % 60 );
seconds = Math.floor( ( diff / 1000 ) % 60 );
clockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );
hoursEl.innerHTML = zeroPadInteger( hours );
hoursEl.className = hours > 0 ? '' : 'mute';
minutesEl.innerHTML = ':' + zeroPadInteger( minutes );
minutesEl.className = minutes > 0 ? '' : 'mute';
secondsEl.innerHTML = ':' + zeroPadInteger( seconds );
}
// Update once directly
_updateTimer();
// Then update every second
setInterval( _updateTimer, 1000 );
timeEl.addEventListener( 'click', function() {
start = new Date();
_updateTimer();
return false;
} );
}
function zeroPadInteger( num ) {
var str = '00' + parseInt( num );
return str.substring( str.length - 2 );
}
/**
* Limits the frequency at which a function can be called.
*/
function debounce( fn, ms ) {
var lastTime = 0,
timeout;
return function() {
var args = arguments;
var context = this;
clearTimeout( timeout );
var timeSinceLastCall = Date.now() - lastTime;
if( timeSinceLastCall > ms ) {
fn.apply( context, args );
lastTime = Date.now();
}
else {
timeout = setTimeout( function() {
fn.apply( context, args );
lastTime = Date.now();
}, ms - timeSinceLastCall );
}
}
}
})();
</script> </script>
</body> </body>

View File

@ -10,127 +10,140 @@
font-family: Helvetica; font-family: Helvetica;
} }
#notes { #current-slide,
font-size: 24px; #upcoming-slide,
width: 640px; #speaker-controls {
margin-top: 5px; padding: 6px;
clear: left; box-sizing: border-box;
-moz-box-sizing: border-box;
} }
#wrap-current-slide { #current-slide iframe,
width: 640px; #upcoming-slide iframe {
height: 512px; width: 100%;
float: left; height: 100%;
overflow: hidden; border: 1px solid #ddd;
} }
#current-slide { #current-slide .label,
width: 1280px; #upcoming-slide .label {
height: 1024px;
border: none;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
-o-transform: scale(0.5);
transform: scale(0.5);
}
#wrap-next-slide {
width: 448px;
height: 358px;
float: left;
margin: 0 0 0 10px;
overflow: hidden;
}
#next-slide {
width: 1280px;
height: 1024px;
border: none;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(0.35);
-moz-transform: scale(0.35);
-ms-transform: scale(0.35);
-o-transform: scale(0.35);
transform: scale(0.35);
}
.slides {
position: relative;
margin-bottom: 10px;
border: 1px solid black;
border-radius: 2px;
background: rgb(28, 30, 32);
}
.slides span {
position: absolute; position: absolute;
top: 3px; top: 10px;
left: 3px; left: 10px;
font-weight: bold; font-weight: bold;
font-size: 14px; font-size: 14px;
z-index: 2;
color: rgba( 255, 255, 255, 0.9 ); color: rgba( 255, 255, 255, 0.9 );
} }
.error { #current-slide {
font-weight: bold; position: absolute;
color: red; width: 50%;
font-size: 1.5em; height: 50%;
text-align: center; top: 0;
margin-top: 10%; left: 0;
padding-right: 0;
} }
.error code { #upcoming-slide {
font-family: monospace; position: absolute;
width: 50%;
height: 50%;
right: 0;
top: 0;
} }
.time { #speaker-controls {
width: 448px; position: absolute;
margin: 30px 0 0 10px; top: 50%;
float: left; left: 0;
text-align: center; width: 100%;
opacity: 0; height: 50%;
overflow: auto;
-webkit-transition: opacity 0.4s; font-size: 18px;
-moz-transition: opacity 0.4s;
-o-transition: opacity 0.4s;
transition: opacity 0.4s;
} }
.elapsed, .speaker-controls-time.hidden,
.clock { .speaker-controls-notes.hidden {
color: #333; display: none;
font-size: 2em; }
text-align: center;
display: inline-block; .speaker-controls-time .label,
padding: 0.5em; .speaker-controls-notes .label {
background-color: #eee; text-transform: uppercase;
border-radius: 10px; font-weight: normal;
font-size: 0.66em;
color: #666;
margin: 0;
}
.speaker-controls-time {
border-bottom: 1px solid rgba( 200, 200, 200, 0.5 );
margin-bottom: 10px;
padding: 10px 16px;
padding-bottom: 20px;
cursor: pointer;
}
.speaker-controls-time .reset-button {
opacity: 0;
float: right;
color: #666;
text-decoration: none;
}
.speaker-controls-time:hover .reset-button {
opacity: 1;
}
.speaker-controls-time .timer,
.speaker-controls-time .clock {
width: 50%;
font-size: 1.9em;
}
.speaker-controls-time .timer {
float: left;
}
.speaker-controls-time .clock {
float: right;
text-align: right;
}
.speaker-controls-time span.mute {
color: #bbb;
}
.speaker-controls-notes {
padding: 10px 16px;
}
.speaker-controls-notes .value {
margin-top: 5px;
line-height: 1.4;
font-size: 1.2em;
}
.clear {
clear: both;
} }
.elapsed h2, @media screen and (max-width: 1080px) {
.clock h2 { #speaker-controls {
font-size: 0.8em; font-size: 16px;
line-height: 100%; }
margin: 0;
color: #aaa;
} }
.elapsed .mute { @media screen and (max-width: 900px) {
color: #ddd; #speaker-controls {
font-size: 14px;
}
}
@media screen and (max-width: 800px) {
#speaker-controls {
font-size: 12px;
}
} }
</style> </style>
@ -138,81 +151,191 @@
<body> <body>
<script> <div id="current-slide"></div>
function getNotesURL( controls ) { <div id="upcoming-slide"><span class="label">UPCOMING:</span></div>
return window.opener.location.protocol + '//' + window.opener.location.host + window.opener.location.pathname + '?receiver&controls='+ ( controls || 'false' ) +'&progress=false&overview=false' + window.opener.location.hash; <div id="speaker-controls">
} <div class="speaker-controls-time">
var notesCurrentSlideURL = getNotesURL( true ); <h4 class="label">Time <span class="reset-button">Click to Reset</span></h4>
var notesNextSlideURL = getNotesURL( false ); <div class="clock">
</script> <span class="clock-value">0:00 AM</span>
</div>
<div id="wrap-current-slide" class="slides"> <div class="timer">
<script>document.write( '<iframe width="1280" height="1024" id="current-slide" src="'+ notesCurrentSlideURL +'"></iframe>' );</script> <span class="hours-value">00</span><span class="minutes-value">:00</span><span class="seconds-value">:00</span>
</div> </div>
<div class="clear"></div>
<div id="wrap-next-slide" class="slides">
<script>document.write( '<iframe width="640" height="512" id="next-slide" src="'+ notesNextSlideURL +'"></iframe>' );</script>
<span>UPCOMING:</span>
</div>
<div class="time">
<div class="clock">
<h2>Time</h2>
<span id="clock">0:00:00 AM</span>
</div> </div>
<div class="elapsed">
<h2>Elapsed</h2> <div class="speaker-controls-notes hidden">
<span id="hours">00</span><span id="minutes">:00</span><span id="seconds">:00</span> <h4 class="label">Notes</h4>
<div class="value"></div>
</div> </div>
</div> </div>
<div id="notes"></div>
<script src="../../plugin/markdown/marked.js"></script> <script src="../../plugin/markdown/marked.js"></script>
<script> <script>
window.addEventListener( 'load', function() { (function() {
if( window.opener && window.opener.location && window.opener.location.href ) { var notes,
notesValue,
currentState,
currentSlide,
upcomingSlide,
connected = false;
var notes = document.getElementById( 'notes' ), window.addEventListener( 'message', function( event ) {
currentSlide = document.getElementById( 'current-slide' ),
nextSlide = document.getElementById( 'next-slide' ),
silenced = false;
window.addEventListener( 'message', function( event ) { var data = JSON.parse( event.data );
var data = JSON.parse( event.data );
// No need for updating the notes in case of fragment changes // The overview mode is only useful to the reveal.js instance
if ( data.notes !== undefined) { // where navigation occurs so we don't sync it
if( data.markdown ) { if( data.state ) delete data.state.overview;
notes.innerHTML = marked( data.notes );
} // Messages sent by the notes plugin inside of the main window
else { if( data && data.namespace === 'reveal-notes' ) {
notes.innerHTML = data.notes; if( data.type === 'connect' ) {
} handleConnectMessage( data );
} }
else if( data.type === 'state' ) {
handleStateMessage( data );
}
}
// Messages sent by the reveal.js inside of the current slide preview
else if( data && data.namespace === 'reveal' ) {
if( /ready/.test( data.eventName ) ) {
// Send a message back to notify that the handshake is complete
window.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'connected'} ), '*' );
}
else if( /slidechanged|fragmentshown|fragmenthidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {
silenced = true; window.opener.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ]} ), '*' );
// Update the note slides }
currentSlide.contentWindow.Reveal.slide( data.indexh, data.indexv, data.indexf ); }
nextSlide.contentWindow.Reveal.slide( data.nextindexh, data.nextindexv );
silenced = false; } );
}, false ); /**
* Called when the main window is trying to establish a
* connection.
*/
function handleConnectMessage( data ) {
if( connected === false ) {
connected = true;
setupIframes( data );
setupKeyboard();
setupNotes();
setupTimer();
}
}
/**
* Called when the main window sends an updated state.
*/
function handleStateMessage( data ) {
// Store the most recently set state to avoid circular loops
// applying the same state
currentState = JSON.stringify( data.state );
// No need for updating the notes in case of fragment changes
if ( data.notes ) {
notes.classList.remove( 'hidden' );
notesValue.style.whiteSpace = data.whitespace;
if( data.markdown ) {
notesValue.innerHTML = marked( data.notes );
}
else {
notesValue.innerHTML = data.notes;
}
}
else {
notes.classList.add( 'hidden' );
}
// Update the note slides
currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );
upcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ] }), '*' );
upcomingSlide.contentWindow.postMessage( JSON.stringify({ method: 'next' }), '*' );
}
// Limit to max one state update per X ms
handleStateMessage = debounce( handleStateMessage, 200 );
/**
* Forward keyboard events to the current slide window.
* This enables keyboard events to work even if focus
* isn't set on the current slide iframe.
*/
function setupKeyboard() {
document.addEventListener( 'keydown', function( event ) {
currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );
} );
}
/**
* Creates the preview iframes.
*/
function setupIframes( data ) {
var params = [
'receiver',
'progress=false',
'history=false',
'transition=none',
'autoSlide=0',
'backgroundTransition=none'
].join( '&' );
var urlSeparator = /\?/.test(data.url) ? '&' : '?';
var hash = '#/' + data.state.indexh + '/' + data.state.indexv;
var currentURL = data.url + urlSeparator + params + '&postMessageEvents=true' + hash;
var upcomingURL = data.url + urlSeparator + params + '&controls=false' + hash;
currentSlide = document.createElement( 'iframe' );
currentSlide.setAttribute( 'width', 1280 );
currentSlide.setAttribute( 'height', 1024 );
currentSlide.setAttribute( 'src', currentURL );
document.querySelector( '#current-slide' ).appendChild( currentSlide );
upcomingSlide = document.createElement( 'iframe' );
upcomingSlide.setAttribute( 'width', 640 );
upcomingSlide.setAttribute( 'height', 512 );
upcomingSlide.setAttribute( 'src', upcomingURL );
document.querySelector( '#upcoming-slide' ).appendChild( upcomingSlide );
}
/**
* Setup the notes UI.
*/
function setupNotes() {
notes = document.querySelector( '.speaker-controls-notes' );
notesValue = document.querySelector( '.speaker-controls-notes .value' );
}
/**
* Create the timer and clock and start updating them
* at an interval.
*/
function setupTimer() {
var start = new Date(), var start = new Date(),
timeEl = document.querySelector( '.time' ), timeEl = document.querySelector( '.speaker-controls-time' ),
clockEl = document.getElementById( 'clock' ), clockEl = timeEl.querySelector( '.clock-value' ),
hoursEl = document.getElementById( 'hours' ), hoursEl = timeEl.querySelector( '.hours-value' ),
minutesEl = document.getElementById( 'minutes' ), minutesEl = timeEl.querySelector( '.minutes-value' ),
secondsEl = document.getElementById( 'seconds' ); secondsEl = timeEl.querySelector( '.seconds-value' );
setInterval( function() { function _updateTimer() {
timeEl.style.opacity = 1;
var diff, hours, minutes, seconds, var diff, hours, minutes, seconds,
now = new Date(); now = new Date();
@ -222,45 +345,68 @@
minutes = Math.floor( ( diff / ( 1000 * 60 ) ) % 60 ); minutes = Math.floor( ( diff / ( 1000 * 60 ) ) % 60 );
seconds = Math.floor( ( diff / 1000 ) % 60 ); seconds = Math.floor( ( diff / 1000 ) % 60 );
clockEl.innerHTML = now.toLocaleTimeString(); clockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );
hoursEl.innerHTML = zeroPadInteger( hours ); hoursEl.innerHTML = zeroPadInteger( hours );
hoursEl.className = hours > 0 ? "" : "mute"; hoursEl.className = hours > 0 ? '' : 'mute';
minutesEl.innerHTML = ":" + zeroPadInteger( minutes ); minutesEl.innerHTML = ':' + zeroPadInteger( minutes );
minutesEl.className = minutes > 0 ? "" : "mute"; minutesEl.className = minutes > 0 ? '' : 'mute';
secondsEl.innerHTML = ":" + zeroPadInteger( seconds ); secondsEl.innerHTML = ':' + zeroPadInteger( seconds );
}, 1000 ); }
// Broadcasts the state of the notes window to synchronize // Update once directly
// the main window _updateTimer();
function synchronizeMainWindow() {
if( !silenced ) { // Then update every second
var indices = currentSlide.contentWindow.Reveal.getIndices(); setInterval( _updateTimer, 1000 );
window.opener.Reveal.slide( indices.h, indices.v, indices.f );
timeEl.addEventListener( 'click', function() {
start = new Date();
_updateTimer();
return false;
} );
}
function zeroPadInteger( num ) {
var str = '00' + parseInt( num );
return str.substring( str.length - 2 );
}
/**
* Limits the frequency at which a function can be called.
*/
function debounce( fn, ms ) {
var lastTime = 0,
timeout;
return function() {
var args = arguments;
var context = this;
clearTimeout( timeout );
var timeSinceLastCall = Date.now() - lastTime;
if( timeSinceLastCall > ms ) {
fn.apply( context, args );
lastTime = Date.now();
}
else {
timeout = setTimeout( function() {
fn.apply( context, args );
lastTime = Date.now();
}, ms - timeSinceLastCall );
} }
} }
// Navigate the main window when the notes slide changes
currentSlide.contentWindow.Reveal.addEventListener( 'slidechanged', synchronizeMainWindow );
currentSlide.contentWindow.Reveal.addEventListener( 'fragmentshown', synchronizeMainWindow );
currentSlide.contentWindow.Reveal.addEventListener( 'fragmenthidden', synchronizeMainWindow );
}
else {
document.body.innerHTML = '<p class="error">Unable to access <code>window.opener.location</code>.<br>Make sure the presentation is running on a web server.</p>';
} }
})();
}, false );
function zeroPadInteger( num ) {
var str = "00" + parseInt( num );
return str.substring( str.length - 2 );
}
</script> </script>
</body> </body>

View File

@ -1,78 +1,136 @@
/** /**
* Handles opening of and synchronization with the reveal.js * Handles opening of and synchronization with the reveal.js
* notes window. * notes window.
*
* Handshake process:
* 1. This window posts 'connect' to notes window
* - Includes URL of presentation to show
* 2. Notes window responds with 'connected' when it is available
* 3. This window proceeds to send the current presentation state
* to the notes window
*/ */
var RevealNotes = (function() { var RevealNotes = (function() {
function openNotes() { function openNotes( notesFilePath ) {
var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
var notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1120,height=850' );
// Fires when slide is changed if( !notesFilePath ) {
Reveal.addEventListener( 'slidechanged', post ); var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
notesFilePath = jsFileLocation + 'notes.html';
}
// Fires when a fragment is shown var notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' );
Reveal.addEventListener( 'fragmentshown', post );
// Fires when a fragment is hidden /**
Reveal.addEventListener( 'fragmenthidden', post ); * Connect to the notes window through a postmessage handshake.
* Using postmessage enables us to work in situations where the
* origins differ, such as a presentation being opened from the
* file system.
*/
function connect() {
// Keep trying to connect until we get a 'connected' message back
var connectInterval = setInterval( function() {
notesPopup.postMessage( JSON.stringify( {
namespace: 'reveal-notes',
type: 'connect',
url: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search,
state: Reveal.getState()
} ), '*' );
}, 500 );
window.addEventListener( 'message', function( event ) {
var data = JSON.parse( event.data );
if( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) {
clearInterval( connectInterval );
onConnected();
}
} );
}
/** /**
* Posts the current slide data to the notes window * Posts the current slide data to the notes window
*/ */
function post() { function post() {
var slideElement = Reveal.getCurrentSlide(), var slideElement = Reveal.getCurrentSlide(),
slideIndices = Reveal.getIndices(), notesElement = slideElement.querySelector( 'aside.notes' );
messageData;
var notes = slideElement.querySelector( 'aside.notes' ), var messageData = {
nextindexh, namespace: 'reveal-notes',
nextindexv; type: 'state',
notes: '',
if( slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION' ) { markdown: false,
nextindexh = slideIndices.h; whitespace: 'normal',
nextindexv = slideIndices.v + 1; state: Reveal.getState()
} else {
nextindexh = slideIndices.h + 1;
nextindexv = 0;
}
messageData = {
notes : notes ? notes.innerHTML : '',
indexh : slideIndices.h,
indexv : slideIndices.v,
indexf : slideIndices.f,
nextindexh : nextindexh,
nextindexv : nextindexv,
markdown : notes ? typeof notes.getAttribute( 'data-markdown' ) === 'string' : false
}; };
// Look for notes defined in a slide attribute
if( slideElement.hasAttribute( 'data-notes' ) ) {
messageData.notes = slideElement.getAttribute( 'data-notes' );
messageData.whitespace = 'pre-wrap';
}
// Look for notes defined in an aside element
if( notesElement ) {
messageData.notes = notesElement.innerHTML;
messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string';
}
notesPopup.postMessage( JSON.stringify( messageData ), '*' ); notesPopup.postMessage( JSON.stringify( messageData ), '*' );
} }
// Navigate to the current slide when the notes are loaded /**
notesPopup.addEventListener( 'load', function( event ) { * Called once we have established a connection to the notes
* window.
*/
function onConnected() {
// Monitor events that trigger a change in state
Reveal.addEventListener( 'slidechanged', post );
Reveal.addEventListener( 'fragmentshown', post );
Reveal.addEventListener( 'fragmenthidden', post );
Reveal.addEventListener( 'overviewhidden', post );
Reveal.addEventListener( 'overviewshown', post );
Reveal.addEventListener( 'paused', post );
Reveal.addEventListener( 'resumed', post );
// Post the initial state
post(); post();
}, false );
}
connect();
} }
// If the there's a 'notes' query set, open directly if( !/receiver/i.test( window.location.search ) ) {
if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
openNotes();
}
// Open the notes when the 's' key is hit // If the there's a 'notes' query set, open directly
document.addEventListener( 'keydown', function( event ) { if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
// Disregard the event if the target is editable or a
// modifier is present
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
if( event.keyCode === 83 ) {
event.preventDefault();
openNotes(); openNotes();
} }
}, false );
// Open the notes when the 's' key is hit
document.addEventListener( 'keydown', function( event ) {
// Disregard the event if the target is editable or a
// modifier is present
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
// Disregard the event if keyboard is disabled
if ( Reveal.getConfig().keyboard === false ) return;
if( event.keyCode === 83 ) {
event.preventDefault();
openNotes();
}
}, false );
// Show our keyboard shortcut in the reveal.js help overlay
if( window.Reveal ) Reveal.registerKeyboardShortcut( 'S', 'Speaker notes view' );
}
return { open: openNotes }; return { open: openNotes };
})(); })();

View File

@ -1,39 +0,0 @@
<html>
<body>
<iframe id="reveal" src="../../index.html" style="border: 0;" width="500" height="500"></iframe>
<div>
<input id="back" type="button" value="go back"/>
<input id="ahead" type="button" value="go ahead"/>
<input id="slideto" type="button" value="slideto 2-2"/>
</div>
<script>
(function (){
var back = document.getElementById( 'back' ),
ahead = document.getElementById( 'ahead' ),
slideto = document.getElementById( 'slideto' ),
reveal = window.frames[0];
back.addEventListener( 'click', function () {
reveal.postMessage( JSON.stringify({method: 'prev', args: []}), '*' );
}, false );
ahead.addEventListener( 'click', function (){
reveal.postMessage( JSON.stringify({method: 'next', args: []}), '*' );
}, false );
slideto.addEventListener( 'click', function (){
reveal.postMessage( JSON.stringify({method: 'slide', args: [2,2]}), '*' );
}, false );
}());
</script>
</body>
</html>

View File

@ -1,42 +0,0 @@
/*
simple postmessage plugin
Useful when a reveal slideshow is inside an iframe.
It allows to call reveal methods from outside.
Example:
var reveal = window.frames[0];
// Reveal.prev();
reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*');
// Reveal.next();
reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*');
// Reveal.slide(2, 2);
reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*');
Add to the slideshow:
dependencies: [
...
{ src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } }
]
*/
(function (){
window.addEventListener( "message", function ( event ) {
var data = JSON.parse( event.data ),
method = data.method,
args = data.args;
if( typeof Reveal[method] === 'function' ) {
Reveal[method].apply( Reveal, data.args );
}
}, false);
}());

View File

@ -11,34 +11,38 @@
var page = new WebPage(); var page = new WebPage();
var system = require( 'system' ); var system = require( 'system' );
page.viewportSize = { var slideWidth = system.args[3] ? system.args[3].split( 'x' )[0] : 960;
width: 1024, var slideHeight = system.args[3] ? system.args[3].split( 'x' )[1] : 700;
height: 768
page.viewportSize = {
width: slideWidth,
height: slideHeight
}; };
// TODO
// Something is wrong with these config values. An input
// paper width of 1920px actually results in a 756px wide
// PDF.
page.paperSize = { page.paperSize = {
format: 'letter', width: Math.round( slideWidth * 2 ),
orientation: 'landscape', height: Math.round( slideHeight * 2 ),
margin: { border: 0
left: '0',
right: '0',
top: '0',
bottom: '0'
}
}; };
var revealFile = system.args[1] || 'index.html?print-pdf'; var inputFile = system.args[1] || 'index.html?print-pdf';
var slideFile = system.args[2] || 'slides.pdf'; var outputFile = system.args[2] || 'slides.pdf';
if( slideFile.match( /\.pdf$/gi ) === null ) { if( outputFile.match( /\.pdf$/gi ) === null ) {
slideFile += '.pdf'; outputFile += '.pdf';
} }
console.log( 'Printing PDF...' ); console.log( 'Printing PDF (Paper size: '+ page.paperSize.width + 'x' + page.paperSize.height +')' );
page.open( revealFile, function( status ) { page.open( inputFile, function( status ) {
console.log( 'Printed succesfully' ); window.setTimeout( function() {
page.render( slideFile ); console.log( 'Printed successfully' );
phantom.exit(); page.render( outputFile );
phantom.exit();
}, 1000 );
} ); } );

View File

@ -1,39 +0,0 @@
/**
* Touch-based remote controller for your presentation courtesy
* of the folks at http://remotes.io
*/
(function(window){
/**
* Detects if we are dealing with a touch enabled device (with some false positives)
* Borrowed from modernizr: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touch.js
*/
var hasTouch = (function(){
return ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;
})();
/**
* Detects if notes are enable and the current page is opened inside an /iframe
* this prevents loading Remotes.io several times
*/
var isNotesAndIframe = (function(){
return window.RevealNotes && !(self == top);
})();
if(!hasTouch && !isNotesAndIframe){
head.ready( 'remotes.ne.min.js', function() {
new Remotes("preview")
.on("swipe-left", function(e){ Reveal.right(); })
.on("swipe-right", function(e){ Reveal.left(); })
.on("swipe-up", function(e){ Reveal.down(); })
.on("swipe-down", function(e){ Reveal.up(); })
.on("tap", function(e){ Reveal.next(); })
.on("zoom-out", function(e){ Reveal.toggleOverview(true); })
.on("zoom-in", function(e){ Reveal.toggleOverview(false); })
;
} );
head.js('https://hakim-static.s3.amazonaws.com/reveal-js/remotes.ne.min.js');
}
})(window);

View File

@ -2,12 +2,34 @@
(function(){ (function(){
var isEnabled = true; var isEnabled = true;
document.querySelector( '.reveal' ).addEventListener( 'mousedown', function( event ) { document.querySelector( '.reveal .slides' ).addEventListener( 'mousedown', function( event ) {
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key'; var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key';
var zoomPadding = 20;
var revealScale = Reveal.getScale();
if( event[ modifier ] && isEnabled ) { if( event[ modifier ] && isEnabled ) {
event.preventDefault(); event.preventDefault();
zoom.to({ element: event.target, pan: false });
var bounds;
var originalDisplay = event.target.style.display;
// Get the bounding rect of the contents, not the containing box
if( window.getComputedStyle( event.target ).display === 'block' ) {
event.target.style.display = 'inline-block';
bounds = event.target.getBoundingClientRect();
event.target.style.display = originalDisplay;
} else {
bounds = event.target.getBoundingClientRect();
}
zoom.to({
x: ( bounds.left * revealScale ) - zoomPadding,
y: ( bounds.top * revealScale ) - zoomPadding,
width: ( bounds.width * revealScale ) + ( zoomPadding * 2 ),
height: ( bounds.height * revealScale ) + ( zoomPadding * 2 ),
pan: false
});
} }
} ); } );
@ -16,11 +38,11 @@
})(); })();
/*! /*!
* zoom.js 0.2 (modified version for use with reveal.js) * zoom.js 0.3 (modified for use with reveal.js)
* http://lab.hakim.se/zoom-js * http://lab.hakim.se/zoom-js
* MIT licensed * MIT licensed
* *
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se * Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
*/ */
var zoom = (function(){ var zoom = (function(){
@ -35,8 +57,6 @@ var zoom = (function(){
var panEngageTimeout = -1, var panEngageTimeout = -1,
panUpdateInterval = -1; panUpdateInterval = -1;
var currentOptions = null;
// Check for transform support so that we can fallback otherwise // Check for transform support so that we can fallback otherwise
var supportsTransforms = 'WebkitTransform' in document.body.style || var supportsTransforms = 'WebkitTransform' in document.body.style ||
'MozTransform' in document.body.style || 'MozTransform' in document.body.style ||
@ -58,7 +78,7 @@ var zoom = (function(){
if( level !== 1 && event.keyCode === 27 ) { if( level !== 1 && event.keyCode === 27 ) {
zoom.out(); zoom.out();
} }
}, false ); } );
// Monitor mouse movement for panning // Monitor mouse movement for panning
document.addEventListener( 'mousemove', function( event ) { document.addEventListener( 'mousemove', function( event ) {
@ -66,38 +86,56 @@ var zoom = (function(){
mouseX = event.clientX; mouseX = event.clientX;
mouseY = event.clientY; mouseY = event.clientY;
} }
}, false ); } );
/** /**
* Applies the CSS required to zoom in, prioritizes use of CSS3 * Applies the CSS required to zoom in, prefers the use of CSS3
* transforms but falls back on zoom for IE. * transforms but falls back on zoom for IE.
* *
* @param {Number} pageOffsetX * @param {Object} rect
* @param {Number} pageOffsetY
* @param {Number} elementOffsetX
* @param {Number} elementOffsetY
* @param {Number} scale * @param {Number} scale
*/ */
function magnify( pageOffsetX, pageOffsetY, elementOffsetX, elementOffsetY, scale ) { function magnify( rect, scale ) {
var scrollOffset = getScrollOffset();
// Ensure a width/height is set
rect.width = rect.width || 1;
rect.height = rect.height || 1;
// Center the rect within the zoomed viewport
rect.x -= ( window.innerWidth - ( rect.width * scale ) ) / 2;
rect.y -= ( window.innerHeight - ( rect.height * scale ) ) / 2;
if( supportsTransforms ) { if( supportsTransforms ) {
var origin = pageOffsetX +'px '+ pageOffsetY +'px', // Reset
transform = 'translate('+ -elementOffsetX +'px,'+ -elementOffsetY +'px) scale('+ scale +')'; if( scale === 1 ) {
document.body.style.transform = '';
document.body.style.OTransform = '';
document.body.style.msTransform = '';
document.body.style.MozTransform = '';
document.body.style.WebkitTransform = '';
}
// Scale
else {
var origin = scrollOffset.x +'px '+ scrollOffset.y +'px',
transform = 'translate('+ -rect.x +'px,'+ -rect.y +'px) scale('+ scale +')';
document.body.style.transformOrigin = origin; document.body.style.transformOrigin = origin;
document.body.style.OTransformOrigin = origin; document.body.style.OTransformOrigin = origin;
document.body.style.msTransformOrigin = origin; document.body.style.msTransformOrigin = origin;
document.body.style.MozTransformOrigin = origin; document.body.style.MozTransformOrigin = origin;
document.body.style.WebkitTransformOrigin = origin; document.body.style.WebkitTransformOrigin = origin;
document.body.style.transform = transform; document.body.style.transform = transform;
document.body.style.OTransform = transform; document.body.style.OTransform = transform;
document.body.style.msTransform = transform; document.body.style.msTransform = transform;
document.body.style.MozTransform = transform; document.body.style.MozTransform = transform;
document.body.style.WebkitTransform = transform; document.body.style.WebkitTransform = transform;
}
} }
else { else {
// Reset all values // Reset
if( scale === 1 ) { if( scale === 1 ) {
document.body.style.position = ''; document.body.style.position = '';
document.body.style.left = ''; document.body.style.left = '';
@ -106,11 +144,11 @@ var zoom = (function(){
document.body.style.height = ''; document.body.style.height = '';
document.body.style.zoom = ''; document.body.style.zoom = '';
} }
// Apply scale // Scale
else { else {
document.body.style.position = 'relative'; document.body.style.position = 'relative';
document.body.style.left = ( - ( pageOffsetX + elementOffsetX ) / scale ) + 'px'; document.body.style.left = ( - ( scrollOffset.x + rect.x ) / scale ) + 'px';
document.body.style.top = ( - ( pageOffsetY + elementOffsetY ) / scale ) + 'px'; document.body.style.top = ( - ( scrollOffset.y + rect.y ) / scale ) + 'px';
document.body.style.width = ( scale * 100 ) + '%'; document.body.style.width = ( scale * 100 ) + '%';
document.body.style.height = ( scale * 100 ) + '%'; document.body.style.height = ( scale * 100 ) + '%';
document.body.style.zoom = scale; document.body.style.zoom = scale;
@ -119,11 +157,13 @@ var zoom = (function(){
level = scale; level = scale;
if( level !== 1 && document.documentElement.classList ) { if( document.documentElement.classList ) {
document.documentElement.classList.add( 'zoomed' ); if( level !== 1 ) {
} document.documentElement.classList.add( 'zoomed' );
else { }
document.documentElement.classList.remove( 'zoomed' ); else {
document.documentElement.classList.remove( 'zoomed' );
}
} }
} }
@ -159,7 +199,7 @@ var zoom = (function(){
function getScrollOffset() { function getScrollOffset() {
return { return {
x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset, x: window.scrollX !== undefined ? window.scrollX : window.pageXOffset,
y: window.scrollY !== undefined ? window.scrollY : window.pageXYffset y: window.scrollY !== undefined ? window.scrollY : window.pageYOffset
} }
} }
@ -175,6 +215,7 @@ var zoom = (function(){
* - scale: can be used instead of width/height to explicitly set scale * - scale: can be used instead of width/height to explicitly set scale
*/ */
to: function( options ) { to: function( options ) {
// Due to an implementation limitation we can't zoom in // Due to an implementation limitation we can't zoom in
// to another element without zooming out first // to another element without zooming out first
if( level !== 1 ) { if( level !== 1 ) {
@ -188,11 +229,12 @@ var zoom = (function(){
if( !!options.element ) { if( !!options.element ) {
// Space around the zoomed in element to leave on screen // Space around the zoomed in element to leave on screen
var padding = 20; var padding = 20;
var bounds = options.element.getBoundingClientRect();
options.width = options.element.getBoundingClientRect().width + ( padding * 2 ); options.x = bounds.left - padding;
options.height = options.element.getBoundingClientRect().height + ( padding * 2 ); options.y = bounds.top - padding;
options.x = options.element.getBoundingClientRect().left - padding; options.width = bounds.width + ( padding * 2 );
options.y = options.element.getBoundingClientRect().top - padding; options.height = bounds.height + ( padding * 2 );
} }
// If width/height values are set, calculate scale from those values // If width/height values are set, calculate scale from those values
@ -204,13 +246,7 @@ var zoom = (function(){
options.x *= options.scale; options.x *= options.scale;
options.y *= options.scale; options.y *= options.scale;
var scrollOffset = getScrollOffset(); magnify( options, options.scale );
if( options.element ) {
scrollOffset.x -= ( window.innerWidth - ( options.width * options.scale ) ) / 2;
}
magnify( scrollOffset.x, scrollOffset.y, options.x, options.y, options.scale );
if( options.pan !== false ) { if( options.pan !== false ) {
@ -222,8 +258,6 @@ var zoom = (function(){
} }
} }
currentOptions = options;
} }
}, },
@ -234,13 +268,7 @@ var zoom = (function(){
clearTimeout( panEngageTimeout ); clearTimeout( panEngageTimeout );
clearInterval( panUpdateInterval ); clearInterval( panUpdateInterval );
var scrollOffset = getScrollOffset(); magnify( { x: 0, y: 0 }, 1 );
if( currentOptions && currentOptions.element ) {
scrollOffset.x -= ( window.innerWidth - ( currentOptions.width * currentOptions.scale ) ) / 2;
}
magnify( scrollOffset.x, scrollOffset.y, 0, 0, 1 );
level = 1; level = 1;
}, },
@ -256,3 +284,5 @@ var zoom = (function(){
})(); })();

View File

@ -6,7 +6,7 @@
<title>reveal.js - Barebones</title> <title>reveal.js - Barebones</title>
<link rel="stylesheet" href="../../css/reveal.min.css"> <link rel="stylesheet" href="../../css/reveal.css">
</head> </head>
<body> <body>
@ -29,7 +29,7 @@
</div> </div>
<script src="../../js/reveal.min.js"></script> <script src="../../js/reveal.js"></script>
<script> <script>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../../css/reveal.min.css"> <link rel="stylesheet" href="../../css/reveal.css">
<link rel="stylesheet" href="../../css/theme/default.css" id="theme"> <link rel="stylesheet" href="../../css/theme/default.css" id="theme">
</head> </head>
@ -35,7 +35,7 @@
</div> </div>
<script src="../../lib/js/head.min.js"></script> <script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.min.js"></script> <script src="../../js/reveal.js"></script>
<script> <script>

View File

@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../../css/reveal.min.css"> <link rel="stylesheet" href="../../css/reveal.css">
<link rel="stylesheet" href="../../css/theme/night.css" id="theme"> <link rel="stylesheet" href="../../css/theme/night.css" id="theme">
</head> </head>
@ -160,7 +160,7 @@
</div> </div>
<script src="../../lib/js/head.min.js"></script> <script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.min.js"></script> <script src="../../js/reveal.js"></script>
<script> <script>

View File

@ -8,8 +8,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="../../css/reveal.min.css"> <link rel="stylesheet" href="../../css/reveal.css">
<link rel="stylesheet" href="../../css/theme/serif.css" id="theme"> <link rel="stylesheet" href="../../css/theme/serif.css" id="theme">
<style type="text/css" media="screen">
.slides section.has-dark-background,
.slides section.has-dark-background h2 {
color: #fff;
}
.slides section.has-light-background,
.slides section.has-light-background h2 {
color: #222;
}
</style>
</head> </head>
<body> <body>
@ -26,6 +36,10 @@
<h2>data-background: #bb00bb</h2> <h2>data-background: #bb00bb</h2>
</section> </section>
<section data-background-color="lightblue">
<h2>data-background: lightblue</h2>
</section>
<section> <section>
<section data-background="#ff0000"> <section data-background="#ff0000">
<h2>data-background: #ff0000</h2> <h2>data-background: #ff0000</h2>
@ -45,25 +59,25 @@
<section> <section>
<h2>Background applied to stack</h2> <h2>Background applied to stack</h2>
</section> </section>
<section data-background="rgba(100, 0, 0, 0.2)"> <section data-background="rgb(66, 66, 66)">
<h2>Background applied to slide inside of stack</h2> <h2>Background applied to slide inside of stack</h2>
</section> </section>
</section> </section>
<section data-background-transition="slide" data-background="assets/image1.png" style="background: rgba(255,255,255,0.9)"> <section data-background-transition="slide" data-background="assets/image1.png">
<h2>Background image</h2> <h2>Background image</h2>
</section> </section>
<section> <section>
<section data-background-transition="slide" data-background="assets/image1.png" style="background: rgba(255,255,255,0.9)"> <section data-background-transition="slide" data-background="assets/image1.png">
<h2>Background image</h2> <h2>Background image</h2>
</section> </section>
<section data-background-transition="slide" data-background="assets/image1.png" style="background: rgba(255,255,255,0.9)"> <section data-background-transition="slide" data-background="assets/image1.png">
<h2>Background image</h2> <h2>Background image</h2>
</section> </section>
</section> </section>
<section data-background="assets/image2.png" data-background-size="100px" data-background-repeat="repeat" data-background-color="#111" style="background: rgba(255,255,255,0.9)"> <section data-background="assets/image2.png" data-background-size="100px" data-background-repeat="repeat" data-background-color="#111">
<h2>Background image</h2> <h2>Background image</h2>
<pre>data-background-size="100px" data-background-repeat="repeat" data-background-color="#111"</pre> <pre>data-background-size="100px" data-background-repeat="repeat" data-background-color="#111"</pre>
</section> </section>
@ -75,6 +89,14 @@
<h2>Same background twice (2/2)</h2> <h2>Same background twice (2/2)</h2>
</section> </section>
<section data-background-video="https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.mp4,https://s3.amazonaws.com/static.slid.es/site/homepage/v1/homepage-video-editor.webm">
<h2>Video background</h2>
</section>
<section data-background-iframe="https://slides.com/news/make-better-presentations/embed?style=hidden&autoSlide=4000">
<h2>Iframe background</h2>
</section>
<section> <section>
<section data-background="#417203"> <section data-background="#417203">
<h2>Same background twice vertical (1/2)</h2> <h2>Same background twice vertical (1/2)</h2>
@ -101,7 +123,7 @@
</div> </div>
<script src="../../lib/js/head.min.js"></script> <script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.min.js"></script> <script src="../../js/reveal.js"></script>
<script> <script>

View File

@ -0,0 +1,101 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Slide Transitions</title>
<link rel="stylesheet" href="../../css/reveal.css">
<link rel="stylesheet" href="../../css/theme/white.css" id="theme">
<style type="text/css" media="screen">
.slides section.has-dark-background,
.slides section.has-dark-background h3 {
color: #fff;
}
.slides section.has-light-background,
.slides section.has-light-background h3 {
color: #222;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<h3>Default</h3>
</section>
<section>
<h3>Default</h3>
</section>
<section data-transition="zoom">
<h3>data-transition: zoom</h3>
</section>
<section data-transition="zoom-in fade-out">
<h3>data-transition: zoom-in fade-out</h3>
</section>
<section>
<h3>Default</h3>
</section>
<section data-transition="convex">
<h3>data-transition: convex</h3>
</section>
<section data-transition="convex-in concave-out">
<h3>data-transition: convex-in concave-out</h3>
</section>
<section>
<section data-transition="zoom">
<h3>Default</h3>
</section>
<section data-transition="concave">
<h3>data-transition: concave</h3>
</section>
<section data-transition="convex-in fade-out">
<h3>data-transition: convex-in fade-out</h3>
</section>
<section>
<h3>Default</h3>
</section>
</section>
<section data-transition="none">
<h3>data-transition: none</h3>
</section>
<section>
<h3>Default</h3>
</section>
</div>
</div>
<script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.js"></script>
<script>
Reveal.initialize({
center: true,
history: true,
// transition: 'slide',
// transitionSpeed: 'slow',
// backgroundTransition: 'slide'
});
</script>
</body>
</html>

12
test/simple.md Normal file
View File

@ -0,0 +1,12 @@
## Slide 1.1
```js
var a = 1;
```
## Slide 1.2
## Slide 2

View File

@ -6,7 +6,7 @@
<title>reveal.js - Test Markdown Element Attributes</title> <title>reveal.js - Test Markdown Element Attributes</title>
<link rel="stylesheet" href="../css/reveal.min.css"> <link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-1.12.0.css"> <link rel="stylesheet" href="qunit-1.12.0.css">
</head> </head>
@ -19,10 +19,10 @@
<div class="slides"> <div class="slides">
<!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n"></section> --> <!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section> -->
<!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes --> <!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes -->
<section data-markdown data-separator="^\n---\n$" data-vertical="^\n--\n$" data-element-attributes="{_\s*?([^}]+?)}">> <section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$" data-element-attributes="{_\s*?([^}]+?)}">>
<script type="text/template"> <script type="text/template">
## Slide 1.1 ## Slide 1.1
<!-- {_class="fragment fade-out" data-fragment-index="1"} --> <!-- {_class="fragment fade-out" data-fragment-index="1"} -->
@ -38,9 +38,9 @@
Paragraph 2 Paragraph 2
<!-- {_class="fragment grow"} --> <!-- {_class="fragment grow"} -->
- list item 1 <!-- {_class="fragment roll-in"} --> - list item 1 <!-- {_class="fragment grow"} -->
- list item 2 <!-- {_class="fragment roll-in"} --> - list item 2 <!-- {_class="fragment grow"} -->
- list item 3 <!-- {_class="fragment roll-in"} --> - list item 3 <!-- {_class="fragment grow"} -->
--- ---
@ -75,8 +75,8 @@
<section data-markdown data-separator="^\n\n\n" <section data-markdown data-separator="^\n\n\n"
data-vertical="^\n\n" data-separator-vertical="^\n\n"
data-notes="^Note:" data-separator-notes="^Note:"
data-charset="utf-8"> data-charset="utf-8">
<script type="text/template"> <script type="text/template">
# Test attributes in Markdown with default separator # Test attributes in Markdown with default separator
@ -123,7 +123,7 @@
</div> </div>
<script src="../lib/js/head.min.js"></script> <script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.min.js"></script> <script src="../js/reveal.js"></script>
<script src="../plugin/markdown/marked.js"></script> <script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script> <script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script> <script src="qunit-1.12.0.js"></script>

View File

@ -19,7 +19,7 @@ Reveal.addEventListener( 'ready', function() {
}); });
test( 'Attributes on element list items in vertical slides', function() { test( 'Attributes on element list items in vertical slides', function() {
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' ); strictEqual( document.querySelectorAll( '.reveal .slides section>section li.fragment.grow' ).length, 3, 'found a vertical slide with three list items with class fragment.grow' );
}); });
test( 'Attributes on element paragraphs in horizontal slides', function() { test( 'Attributes on element paragraphs in horizontal slides', function() {

View File

@ -0,0 +1,36 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Markdown</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-1.12.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section data-markdown="simple.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section>
</div>
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script src="../plugin/highlight/highlight.js"></script>
<script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script>
<script src="test-markdown-external.js"></script>
</body>
</html>

View File

@ -0,0 +1,24 @@
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Markdown' );
test( 'Vertical separator', function() {
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
});
test( 'Horizontal separator', function() {
strictEqual( document.querySelectorAll( '.reveal .slides>section' ).length, 2, 'found two slides' );
});
test( 'Language highlighter', function() {
strictEqual( document.querySelectorAll( '.hljs-keyword' ).length, 1, 'got rendered highlight tag.' );
strictEqual( document.querySelector( '.hljs-keyword' ).innerHTML, 'var', 'the same keyword: var.' );
});
} );
Reveal.initialize();

View File

@ -6,7 +6,7 @@
<title>reveal.js - Test Markdown Attributes</title> <title>reveal.js - Test Markdown Attributes</title>
<link rel="stylesheet" href="../css/reveal.min.css"> <link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-1.12.0.css"> <link rel="stylesheet" href="qunit-1.12.0.css">
</head> </head>
@ -19,12 +19,12 @@
<div class="slides"> <div class="slides">
<!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n"></section> --> <!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section> -->
<!-- Slides are separated by three lines, vertical slides by two lines, attributes are one any line starting with (spaces and) two dashes --> <!-- Slides are separated by three lines, vertical slides by two lines, attributes are one any line starting with (spaces and) two dashes -->
<section data-markdown data-separator="^\n\n\n" <section data-markdown data-separator="^\n\n\n"
data-vertical="^\n\n" data-separator-vertical="^\n\n"
data-notes="^Note:" data-separator-notes="^Note:"
data-attributes="--\s(.*?)$" data-attributes="--\s(.*?)$"
data-charset="utf-8"> data-charset="utf-8">
<script type="text/template"> <script type="text/template">
@ -56,8 +56,8 @@
</section> </section>
<section data-markdown data-separator="^\n\n\n" <section data-markdown data-separator="^\n\n\n"
data-vertical="^\n\n" data-separator-vertical="^\n\n"
data-notes="^Note:" data-separator-notes="^Note:"
data-charset="utf-8"> data-charset="utf-8">
<script type="text/template"> <script type="text/template">
# Test attributes in Markdown with default separator # Test attributes in Markdown with default separator
@ -117,7 +117,7 @@
</div> </div>
<script src="../lib/js/head.min.js"></script> <script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.min.js"></script> <script src="../js/reveal.js"></script>
<script src="../plugin/markdown/marked.js"></script> <script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script> <script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script> <script src="qunit-1.12.0.js"></script>

View File

@ -6,7 +6,7 @@
<title>reveal.js - Test Markdown</title> <title>reveal.js - Test Markdown</title>
<link rel="stylesheet" href="../css/reveal.min.css"> <link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-1.12.0.css"> <link rel="stylesheet" href="qunit-1.12.0.css">
</head> </head>
@ -19,10 +19,10 @@
<div class="slides"> <div class="slides">
<!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-vertical="^\n\n"></section> --> <!-- <section data-markdown="example.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section> -->
<!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes --> <!-- Slides are separated by newline + three dashes + newline, vertical slides identical but two dashes -->
<section data-markdown data-separator="^\n---\n$" data-vertical="^\n--\n$"> <section data-markdown data-separator="^\n---\n$" data-separator-vertical="^\n--\n$">
<script type="text/template"> <script type="text/template">
## Slide 1.1 ## Slide 1.1
@ -41,7 +41,7 @@
</div> </div>
<script src="../lib/js/head.min.js"></script> <script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.min.js"></script> <script src="../js/reveal.js"></script>
<script src="../plugin/markdown/marked.js"></script> <script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script> <script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script> <script src="qunit-1.12.0.js"></script>

Some files were not shown because too many files have changed in this diff Show More