Merge branch 'dev' into master
This commit is contained in:
commit
97c1a0ecc1
|
@ -8,6 +8,7 @@ out/
|
||||||
log/*.log
|
log/*.log
|
||||||
tmp/**
|
tmp/**
|
||||||
node_modules/
|
node_modules/
|
||||||
|
package-lock.json
|
||||||
.sass-cache
|
.sass-cache
|
||||||
css/reveal.min.css
|
css/reveal.min.css
|
||||||
js/reveal.min.js
|
js/reveal.min.js
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- 4
|
- 4
|
||||||
before_script:
|
|
||||||
- npm install -g grunt-cli
|
|
||||||
after_script:
|
after_script:
|
||||||
- grunt retire
|
- npm run build -- retire
|
||||||
|
|
|
@ -15,7 +15,7 @@ module.exports = function(grunt) {
|
||||||
' * http://revealjs.com\n' +
|
' * http://revealjs.com\n' +
|
||||||
' * MIT licensed\n' +
|
' * MIT licensed\n' +
|
||||||
' *\n' +
|
' *\n' +
|
||||||
' * Copyright (C) 2017 Hakim El Hattab, http://hakim.se\n' +
|
' * Copyright (C) 2018 Hakim El Hattab, http://hakim.se\n' +
|
||||||
' */'
|
' */'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ module.exports = function(grunt) {
|
||||||
uglify: {
|
uglify: {
|
||||||
options: {
|
options: {
|
||||||
banner: '<%= meta.banner %>\n',
|
banner: '<%= meta.banner %>\n',
|
||||||
screwIE8: false
|
ie8: true
|
||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
src: 'js/reveal.js',
|
src: 'js/reveal.js',
|
||||||
|
@ -164,7 +164,7 @@ module.exports = function(grunt) {
|
||||||
grunt.loadNpmTasks( 'grunt-retire' );
|
grunt.loadNpmTasks( 'grunt-retire' );
|
||||||
grunt.loadNpmTasks( 'grunt-sass' );
|
grunt.loadNpmTasks( 'grunt-sass' );
|
||||||
grunt.loadNpmTasks( 'grunt-zip' );
|
grunt.loadNpmTasks( 'grunt-zip' );
|
||||||
|
|
||||||
// Default task
|
// Default task
|
||||||
grunt.registerTask( 'default', [ 'css', 'js' ] );
|
grunt.registerTask( 'default', [ 'css', 'js' ] );
|
||||||
|
|
||||||
|
|
2
LICENSE
2
LICENSE
|
@ -1,4 +1,4 @@
|
||||||
Copyright (C) 2017 Hakim El Hattab, http://hakim.se, and reveal.js contributors
|
Copyright (C) 2018 Hakim El Hattab, http://hakim.se, and reveal.js contributors
|
||||||
|
|
||||||
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
|
||||||
|
|
45
README.md
45
README.md
|
@ -202,9 +202,6 @@ Reveal.initialize({
|
||||||
// Display a presentation progress bar
|
// Display a presentation progress bar
|
||||||
progress: true,
|
progress: true,
|
||||||
|
|
||||||
// Set default timing of 2 minutes per slide
|
|
||||||
defaultTiming: 120,
|
|
||||||
|
|
||||||
// Display the page number of the current slide
|
// Display the page number of the current slide
|
||||||
slideNumber: false,
|
slideNumber: false,
|
||||||
|
|
||||||
|
@ -235,6 +232,10 @@ Reveal.initialize({
|
||||||
// Turns fragments on and off globally
|
// Turns fragments on and off globally
|
||||||
fragments: true,
|
fragments: true,
|
||||||
|
|
||||||
|
// Flags whether to include the current fragment in the URL,
|
||||||
|
// so that reloading brings you to the same fragment position
|
||||||
|
fragmentInURL: false,
|
||||||
|
|
||||||
// Flags if the presentation is running in an embedded mode,
|
// Flags if the presentation is running in an embedded mode,
|
||||||
// i.e. contained within a limited portion of the screen
|
// i.e. contained within a limited portion of the screen
|
||||||
embedded: false,
|
embedded: false,
|
||||||
|
@ -263,6 +264,11 @@ Reveal.initialize({
|
||||||
// Use this method for navigation when auto-sliding
|
// Use this method for navigation when auto-sliding
|
||||||
autoSlideMethod: Reveal.navigateNext,
|
autoSlideMethod: Reveal.navigateNext,
|
||||||
|
|
||||||
|
// Specify the average time in seconds that you think you will spend
|
||||||
|
// presenting each slide. This is used to show a pacing timer in the
|
||||||
|
// speaker view
|
||||||
|
defaultTiming: 120,
|
||||||
|
|
||||||
// Enable slide navigation via mouse wheel
|
// Enable slide navigation via mouse wheel
|
||||||
mouseWheel: false,
|
mouseWheel: false,
|
||||||
|
|
||||||
|
@ -531,6 +537,37 @@ Reveal.isPaused();
|
||||||
Reveal.isAutoSliding();
|
Reveal.isAutoSliding();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Custom Key Bindings
|
||||||
|
|
||||||
|
Custom key bindings can be added and removed using the following Javascript API. Custom key bindings will override the default keyboard bindings, but will in turn be overridden by the user defined bindings in the ``keyboard`` config option.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
Reveal.addKeyBinding( binding, callback );
|
||||||
|
Reveal.removeKeyBinding( keyCode );
|
||||||
|
```
|
||||||
|
|
||||||
|
For example
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// The binding parameter provides the following properties
|
||||||
|
// keyCode: the keycode for binding to the callback
|
||||||
|
// key: the key label to show in the help overlay
|
||||||
|
// description: the description of the action to show in the help overlay
|
||||||
|
Reveal.addKeyBinding( { keyCode: 84, key: 'T', description: 'Start timer' }, function() {
|
||||||
|
// start timer
|
||||||
|
} )
|
||||||
|
|
||||||
|
// The binding parameter can also be a direct keycode without providing the help description
|
||||||
|
Reveal.addKeyBinding( 82, function() {
|
||||||
|
// reset timer
|
||||||
|
} )
|
||||||
|
```
|
||||||
|
|
||||||
|
This allows plugins to add key bindings directly to Reveal so they can
|
||||||
|
|
||||||
|
* make use of Reveal's pre-processing logic for key handling (for example, ignoring key presses when paused); and
|
||||||
|
* be included in the help overlay (optional)
|
||||||
|
|
||||||
### Slide Changed Event
|
### Slide Changed Event
|
||||||
|
|
||||||
A 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index values of the current slide as well as a reference to the previous and current slide HTML nodes.
|
A 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index values of the current slide as well as a reference to the previous and current slide HTML nodes.
|
||||||
|
@ -1243,4 +1280,4 @@ Some reveal.js features, like external Markdown and speaker notes, require that
|
||||||
|
|
||||||
MIT licensed
|
MIT licensed
|
||||||
|
|
||||||
Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
Copyright (C) 2018 Hakim El Hattab, http://hakim.se
|
||||||
|
|
|
@ -72,15 +72,8 @@ ul, ol, div, p {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
-webkit-perspective: none;
|
perspective: none;
|
||||||
-moz-perspective: none;
|
perspective-origin: 50% 50%;
|
||||||
-ms-perspective: none;
|
|
||||||
perspective: none;
|
|
||||||
|
|
||||||
-webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */
|
|
||||||
-moz-perspective-origin: 50% 50%;
|
|
||||||
-ms-perspective-origin: 50% 50%;
|
|
||||||
perspective-origin: 50% 50%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .slides .pdf-page {
|
.reveal .slides .pdf-page {
|
||||||
|
@ -103,15 +96,8 @@ ul, ol, div, p {
|
||||||
|
|
||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
|
|
||||||
-webkit-transform-style: flat !important;
|
transform-style: flat !important;
|
||||||
-moz-transform-style: flat !important;
|
transform: none !important;
|
||||||
-ms-transform-style: flat !important;
|
|
||||||
transform-style: flat !important;
|
|
||||||
|
|
||||||
-webkit-transform: none !important;
|
|
||||||
-moz-transform: none !important;
|
|
||||||
-ms-transform: none !important;
|
|
||||||
transform: none !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal section.stack {
|
.reveal section.stack {
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* http://revealjs.com
|
* http://revealjs.com
|
||||||
* MIT licensed
|
* MIT licensed
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
* Copyright (C) 2018 Hakim El Hattab, http://hakim.se
|
||||||
*/
|
*/
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* RESET STYLES
|
* RESET STYLES
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* http://revealjs.com
|
* http://revealjs.com
|
||||||
* MIT licensed
|
* MIT licensed
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
* Copyright (C) 2018 Hakim El Hattab, http://hakim.se
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,8 @@ body {
|
||||||
background: rgba(79, 64, 28, 0.99);
|
background: rgba(79, 64, 28, 0.99);
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,8 @@ body {
|
||||||
background: #bee4fd;
|
background: #bee4fd;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,8 @@ body {
|
||||||
background: #a23;
|
background: #a23;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,8 @@ body {
|
||||||
background: #FF5E99;
|
background: #FF5E99;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,8 @@ body {
|
||||||
background: #d33682;
|
background: #d33682;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@ body {
|
||||||
background: #e7ad52;
|
background: #e7ad52;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,8 @@ body {
|
||||||
background: #26351C;
|
background: #26351C;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,8 @@ body {
|
||||||
background: rgba(0, 0, 0, 0.99);
|
background: rgba(0, 0, 0, 0.99);
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,8 @@ body {
|
||||||
background: #134674;
|
background: #134674;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,8 @@ body {
|
||||||
background: #d33682;
|
background: #d33682;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@ body {
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .slides>section,
|
.reveal .slides section,
|
||||||
.reveal .slides>section>section {
|
.reveal .slides section>section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit;
|
font-weight: inherit;
|
||||||
}
|
}
|
||||||
|
@ -310,7 +310,14 @@ body {
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
-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);
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************
|
||||||
|
* PRINT BACKGROUND
|
||||||
|
*********************************************/
|
||||||
|
@media print {
|
||||||
|
.backgrounds {
|
||||||
|
background-color: $backgroundColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -30,8 +30,8 @@ body {
|
||||||
background: #98bdef;
|
background: #98bdef;
|
||||||
text-shadow: none; }
|
text-shadow: none; }
|
||||||
|
|
||||||
.reveal .slides > section,
|
.reveal .slides section,
|
||||||
.reveal .slides > section > section {
|
.reveal .slides section > section {
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
font-weight: inherit; }
|
font-weight: inherit; }
|
||||||
|
|
||||||
|
|
429
js/reveal.js
429
js/reveal.js
|
@ -3,7 +3,7 @@
|
||||||
* http://revealjs.com
|
* http://revealjs.com
|
||||||
* MIT licensed
|
* MIT licensed
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
* Copyright (C) 2018 Hakim El Hattab, http://hakim.se
|
||||||
*/
|
*/
|
||||||
(function( root, factory ) {
|
(function( root, factory ) {
|
||||||
if( typeof define === 'function' && define.amd ) {
|
if( typeof define === 'function' && define.amd ) {
|
||||||
|
@ -88,6 +88,10 @@
|
||||||
// Enable the slide overview mode
|
// Enable the slide overview mode
|
||||||
overview: true,
|
overview: true,
|
||||||
|
|
||||||
|
// Disables the default reveal.js slide layout so that you can use
|
||||||
|
// custom CSS layout
|
||||||
|
disableLayout: false,
|
||||||
|
|
||||||
// Vertical centering of slides
|
// Vertical centering of slides
|
||||||
center: true,
|
center: true,
|
||||||
|
|
||||||
|
@ -106,6 +110,10 @@
|
||||||
// Turns fragments on and off globally
|
// Turns fragments on and off globally
|
||||||
fragments: true,
|
fragments: true,
|
||||||
|
|
||||||
|
// Flags whether to include the current fragment in the URL,
|
||||||
|
// so that reloading brings you to the same fragment position
|
||||||
|
fragmentInURL: false,
|
||||||
|
|
||||||
// Flags if the presentation is running in an embedded mode,
|
// Flags if the presentation is running in an embedded mode,
|
||||||
// i.e. contained within a limited portion of the screen
|
// i.e. contained within a limited portion of the screen
|
||||||
embedded: false,
|
embedded: false,
|
||||||
|
@ -139,6 +147,11 @@
|
||||||
// Use this method for navigation when auto-sliding (defaults to navigateNext)
|
// Use this method for navigation when auto-sliding (defaults to navigateNext)
|
||||||
autoSlideMethod: null,
|
autoSlideMethod: null,
|
||||||
|
|
||||||
|
// Specify the average time in seconds that you think you will spend
|
||||||
|
// presenting each slide. This is used to show a pacing timer in the
|
||||||
|
// speaker view
|
||||||
|
defaultTiming: null,
|
||||||
|
|
||||||
// Enable slide navigation via mouse wheel
|
// Enable slide navigation via mouse wheel
|
||||||
mouseWheel: false,
|
mouseWheel: false,
|
||||||
|
|
||||||
|
@ -177,6 +190,12 @@
|
||||||
// Parallax background size
|
// Parallax background size
|
||||||
parallaxBackgroundSize: '', // CSS syntax, e.g. "3000px 2000px"
|
parallaxBackgroundSize: '', // CSS syntax, e.g. "3000px 2000px"
|
||||||
|
|
||||||
|
// Parallax background repeat
|
||||||
|
parallaxBackgroundRepeat: '', // repeat/repeat-x/repeat-y/no-repeat/initial/inherit
|
||||||
|
|
||||||
|
// Parallax background position
|
||||||
|
parallaxBackgroundPosition: '', // CSS syntax, e.g. "top left"
|
||||||
|
|
||||||
// Amount of pixels to move the parallax background per slide step
|
// Amount of pixels to move the parallax background per slide step
|
||||||
parallaxBackgroundHorizontal: null,
|
parallaxBackgroundHorizontal: null,
|
||||||
parallaxBackgroundVertical: null,
|
parallaxBackgroundVertical: null,
|
||||||
|
@ -295,7 +314,10 @@
|
||||||
'B , .': 'Pause',
|
'B , .': 'Pause',
|
||||||
'F': 'Fullscreen',
|
'F': 'Fullscreen',
|
||||||
'ESC, O': 'Slide overview'
|
'ESC, O': 'Slide overview'
|
||||||
};
|
},
|
||||||
|
|
||||||
|
// Holds custom key code mappings
|
||||||
|
registeredKeyBindings = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts up the presentation if the client is capable.
|
* Starts up the presentation if the client is capable.
|
||||||
|
@ -397,13 +419,13 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the dependencies of reveal.js. Dependencies are
|
* Loads the dependencies of reveal.js. Dependencies are
|
||||||
* defined via the configuration option 'dependencies'
|
* defined via the configuration option 'dependencies'
|
||||||
* and will be loaded prior to starting/binding reveal.js.
|
* and will be loaded prior to starting/binding reveal.js.
|
||||||
* Some dependencies may have an 'async' flag, if so they
|
* Some dependencies may have an 'async' flag, if so they
|
||||||
* will load after reveal.js has been started up.
|
* will load after reveal.js has been started up.
|
||||||
*/
|
*/
|
||||||
function load() {
|
function load() {
|
||||||
|
|
||||||
var scripts = [],
|
var scripts = [],
|
||||||
|
@ -421,7 +443,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadScript( s ) {
|
function loadScript( s ) {
|
||||||
head.ready( s.src.match( /([\w\d_\-]*)\.?js$|[^\\\/]*$/i )[0], function() {
|
head.ready( s.src.match( /([\w\d_\-]*)\.?js(\?[\w\d.=&]*)?$|[^\\\/]*$/i )[0], function() {
|
||||||
// Extension may contain callback functions
|
// Extension may contain callback functions
|
||||||
if( typeof s.callback === 'function' ) {
|
if( typeof s.callback === 'function' ) {
|
||||||
s.callback.apply( this );
|
s.callback.apply( this );
|
||||||
|
@ -871,6 +893,8 @@
|
||||||
|
|
||||||
dom.background.style.backgroundImage = 'url("' + config.parallaxBackgroundImage + '")';
|
dom.background.style.backgroundImage = 'url("' + config.parallaxBackgroundImage + '")';
|
||||||
dom.background.style.backgroundSize = config.parallaxBackgroundSize;
|
dom.background.style.backgroundSize = config.parallaxBackgroundSize;
|
||||||
|
dom.background.style.backgroundRepeat = config.parallaxBackgroundRepeat;
|
||||||
|
dom.background.style.backgroundPosition = config.parallaxBackgroundPosition;
|
||||||
|
|
||||||
// Make sure the below properties are set on the element - these properties are
|
// Make sure the below properties are set on the element - these properties are
|
||||||
// needed for proper transitions to be set on the element via CSS. To remove
|
// needed for proper transitions to be set on the element via CSS. To remove
|
||||||
|
@ -919,7 +943,7 @@
|
||||||
|
|
||||||
if( data.background ) {
|
if( data.background ) {
|
||||||
// Auto-wrap image urls in url(...)
|
// Auto-wrap image urls in url(...)
|
||||||
if( /^(http|file|\/\/)/gi.test( data.background ) || /\.(svg|png|jpg|jpeg|gif|bmp)([?#]|$)/gi.test( data.background ) ) {
|
if( /^(http|file|\/\/)/gi.test( data.background ) || /\.(svg|png|jpg|jpeg|gif|bmp)([?#\s]|$)/gi.test( data.background ) ) {
|
||||||
slide.setAttribute( 'data-background-image', data.background );
|
slide.setAttribute( 'data-background-image', data.background );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1156,13 +1180,8 @@
|
||||||
window.addEventListener( 'resize', onWindowResize, false );
|
window.addEventListener( 'resize', onWindowResize, false );
|
||||||
|
|
||||||
if( config.touch ) {
|
if( config.touch ) {
|
||||||
dom.wrapper.addEventListener( 'touchstart', onTouchStart, false );
|
if( 'onpointerdown' in window ) {
|
||||||
dom.wrapper.addEventListener( 'touchmove', onTouchMove, false );
|
// Use W3C pointer events
|
||||||
dom.wrapper.addEventListener( 'touchend', onTouchEnd, false );
|
|
||||||
|
|
||||||
// Support pointer-style touch interaction as well
|
|
||||||
if( window.navigator.pointerEnabled ) {
|
|
||||||
// IE 11 uses un-prefixed version of pointer events
|
|
||||||
dom.wrapper.addEventListener( 'pointerdown', onPointerDown, false );
|
dom.wrapper.addEventListener( 'pointerdown', onPointerDown, false );
|
||||||
dom.wrapper.addEventListener( 'pointermove', onPointerMove, false );
|
dom.wrapper.addEventListener( 'pointermove', onPointerMove, false );
|
||||||
dom.wrapper.addEventListener( 'pointerup', onPointerUp, false );
|
dom.wrapper.addEventListener( 'pointerup', onPointerUp, false );
|
||||||
|
@ -1173,6 +1192,12 @@
|
||||||
dom.wrapper.addEventListener( 'MSPointerMove', onPointerMove, false );
|
dom.wrapper.addEventListener( 'MSPointerMove', onPointerMove, false );
|
||||||
dom.wrapper.addEventListener( 'MSPointerUp', onPointerUp, false );
|
dom.wrapper.addEventListener( 'MSPointerUp', onPointerUp, false );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// Fall back to touch events
|
||||||
|
dom.wrapper.addEventListener( 'touchstart', onTouchStart, false );
|
||||||
|
dom.wrapper.addEventListener( 'touchmove', onTouchMove, false );
|
||||||
|
dom.wrapper.addEventListener( 'touchend', onTouchEnd, false );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( config.keyboard ) {
|
if( config.keyboard ) {
|
||||||
|
@ -1234,24 +1259,19 @@
|
||||||
document.removeEventListener( 'keypress', onDocumentKeyPress, false );
|
document.removeEventListener( 'keypress', onDocumentKeyPress, false );
|
||||||
window.removeEventListener( 'hashchange', onWindowHashChange, false );
|
window.removeEventListener( 'hashchange', onWindowHashChange, false );
|
||||||
window.removeEventListener( 'resize', onWindowResize, false );
|
window.removeEventListener( 'resize', onWindowResize, false );
|
||||||
|
|
||||||
|
dom.wrapper.removeEventListener( 'pointerdown', onPointerDown, false );
|
||||||
|
dom.wrapper.removeEventListener( 'pointermove', onPointerMove, false );
|
||||||
|
dom.wrapper.removeEventListener( 'pointerup', onPointerUp, false );
|
||||||
|
|
||||||
|
dom.wrapper.removeEventListener( 'MSPointerDown', onPointerDown, false );
|
||||||
|
dom.wrapper.removeEventListener( 'MSPointerMove', onPointerMove, false );
|
||||||
|
dom.wrapper.removeEventListener( 'MSPointerUp', onPointerUp, false );
|
||||||
|
|
||||||
dom.wrapper.removeEventListener( 'touchstart', onTouchStart, false );
|
dom.wrapper.removeEventListener( 'touchstart', onTouchStart, false );
|
||||||
dom.wrapper.removeEventListener( 'touchmove', onTouchMove, false );
|
dom.wrapper.removeEventListener( 'touchmove', onTouchMove, false );
|
||||||
dom.wrapper.removeEventListener( 'touchend', onTouchEnd, false );
|
dom.wrapper.removeEventListener( 'touchend', onTouchEnd, false );
|
||||||
|
|
||||||
// IE11
|
|
||||||
if( window.navigator.pointerEnabled ) {
|
|
||||||
dom.wrapper.removeEventListener( 'pointerdown', onPointerDown, false );
|
|
||||||
dom.wrapper.removeEventListener( 'pointermove', onPointerMove, false );
|
|
||||||
dom.wrapper.removeEventListener( 'pointerup', onPointerUp, false );
|
|
||||||
}
|
|
||||||
// IE10
|
|
||||||
else if( window.navigator.msPointerEnabled ) {
|
|
||||||
dom.wrapper.removeEventListener( 'MSPointerDown', onPointerDown, false );
|
|
||||||
dom.wrapper.removeEventListener( 'MSPointerMove', onPointerMove, false );
|
|
||||||
dom.wrapper.removeEventListener( 'MSPointerUp', onPointerUp, false );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( config.progress && dom.progress ) {
|
if ( config.progress && dom.progress ) {
|
||||||
dom.progress.removeEventListener( 'click', onProgressClicked, false );
|
dom.progress.removeEventListener( 'click', onProgressClicked, false );
|
||||||
}
|
}
|
||||||
|
@ -1267,6 +1287,38 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a custom key binding with optional description to
|
||||||
|
* be added to the help screen.
|
||||||
|
*/
|
||||||
|
function addKeyBinding( binding, callback ) {
|
||||||
|
|
||||||
|
if( typeof binding === 'object' && binding.keyCode ) {
|
||||||
|
registeredKeyBindings[binding.keyCode] = {
|
||||||
|
callback: callback,
|
||||||
|
key: binding.key,
|
||||||
|
description: binding.description
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
registeredKeyBindings[binding] = {
|
||||||
|
callback: callback,
|
||||||
|
key: null,
|
||||||
|
description: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the specified custom key binding.
|
||||||
|
*/
|
||||||
|
function removeKeyBinding( keyCode ) {
|
||||||
|
|
||||||
|
delete registeredKeyBindings[keyCode];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend object a with the properties of object b.
|
* Extend object a with the properties of object b.
|
||||||
* If there's a conflict, object b takes precedence.
|
* If there's a conflict, object b takes precedence.
|
||||||
|
@ -1754,6 +1806,13 @@
|
||||||
html += '<tr><td>' + key + '</td><td>' + keyboardShortcuts[ key ] + '</td></tr>';
|
html += '<tr><td>' + key + '</td><td>' + keyboardShortcuts[ key ] + '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add custom key bindings that have associated descriptions
|
||||||
|
for( var binding in registeredKeyBindings ) {
|
||||||
|
if( registeredKeyBindings[binding].key && registeredKeyBindings[binding].description ) {
|
||||||
|
html += '<tr><td>' + registeredKeyBindings[binding].key + '</td><td>' + registeredKeyBindings[binding].description + '</td></tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
html += '</table>';
|
html += '</table>';
|
||||||
|
|
||||||
dom.overlay.innerHTML = [
|
dom.overlay.innerHTML = [
|
||||||
|
@ -1798,76 +1857,80 @@
|
||||||
|
|
||||||
if( dom.wrapper && !isPrintingPDF() ) {
|
if( dom.wrapper && !isPrintingPDF() ) {
|
||||||
|
|
||||||
var size = getComputedSlideSize();
|
if( !config.disableLayout ) {
|
||||||
|
|
||||||
// Layout the contents of the slides
|
var size = getComputedSlideSize();
|
||||||
layoutSlideContents( config.width, config.height );
|
|
||||||
|
|
||||||
dom.slides.style.width = size.width + 'px';
|
// Layout the contents of the slides
|
||||||
dom.slides.style.height = size.height + 'px';
|
layoutSlideContents( config.width, config.height );
|
||||||
|
|
||||||
// Determine scale of content to fit within available space
|
dom.slides.style.width = size.width + 'px';
|
||||||
scale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );
|
dom.slides.style.height = size.height + 'px';
|
||||||
|
|
||||||
// Respect max/min scale settings
|
// Determine scale of content to fit within available space
|
||||||
scale = Math.max( scale, config.minScale );
|
scale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );
|
||||||
scale = Math.min( scale, config.maxScale );
|
|
||||||
|
|
||||||
// Don't apply any scaling styles if scale is 1
|
// Respect max/min scale settings
|
||||||
if( scale === 1 ) {
|
scale = Math.max( scale, config.minScale );
|
||||||
dom.slides.style.zoom = '';
|
scale = Math.min( scale, config.maxScale );
|
||||||
dom.slides.style.left = '';
|
|
||||||
dom.slides.style.top = '';
|
// Don't apply any scaling styles if scale is 1
|
||||||
dom.slides.style.bottom = '';
|
if( scale === 1 ) {
|
||||||
dom.slides.style.right = '';
|
dom.slides.style.zoom = '';
|
||||||
transformSlides( { layout: '' } );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Prefer zoom for scaling up so that content remains crisp.
|
|
||||||
// Don't use zoom to scale down since that can lead to shifts
|
|
||||||
// in text layout/line breaks.
|
|
||||||
if( scale > 1 && features.zoom ) {
|
|
||||||
dom.slides.style.zoom = scale;
|
|
||||||
dom.slides.style.left = '';
|
dom.slides.style.left = '';
|
||||||
dom.slides.style.top = '';
|
dom.slides.style.top = '';
|
||||||
dom.slides.style.bottom = '';
|
dom.slides.style.bottom = '';
|
||||||
dom.slides.style.right = '';
|
dom.slides.style.right = '';
|
||||||
transformSlides( { layout: '' } );
|
transformSlides( { layout: '' } );
|
||||||
}
|
}
|
||||||
// Apply scale transform as a fallback
|
|
||||||
else {
|
else {
|
||||||
dom.slides.style.zoom = '';
|
// Prefer zoom for scaling up so that content remains crisp.
|
||||||
dom.slides.style.left = '50%';
|
// Don't use zoom to scale down since that can lead to shifts
|
||||||
dom.slides.style.top = '50%';
|
// in text layout/line breaks.
|
||||||
dom.slides.style.bottom = 'auto';
|
if( scale > 1 && features.zoom ) {
|
||||||
dom.slides.style.right = 'auto';
|
dom.slides.style.zoom = scale;
|
||||||
transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );
|
dom.slides.style.left = '';
|
||||||
}
|
dom.slides.style.top = '';
|
||||||
}
|
dom.slides.style.bottom = '';
|
||||||
|
dom.slides.style.right = '';
|
||||||
// Select all slides, vertical and horizontal
|
transformSlides( { layout: '' } );
|
||||||
var slides = toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );
|
}
|
||||||
|
// Apply scale transform as a fallback
|
||||||
for( var i = 0, len = slides.length; i < len; i++ ) {
|
else {
|
||||||
var slide = slides[ i ];
|
dom.slides.style.zoom = '';
|
||||||
|
dom.slides.style.left = '50%';
|
||||||
// Don't bother updating invisible slides
|
dom.slides.style.top = '50%';
|
||||||
if( slide.style.display === 'none' ) {
|
dom.slides.style.bottom = 'auto';
|
||||||
continue;
|
dom.slides.style.right = 'auto';
|
||||||
|
transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( config.center || slide.classList.contains( 'center' ) ) {
|
// Select all slides, vertical and horizontal
|
||||||
// Vertical stacks are not centred since their section
|
var slides = toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );
|
||||||
// children will be
|
|
||||||
if( slide.classList.contains( 'stack' ) ) {
|
for( var i = 0, len = slides.length; i < len; i++ ) {
|
||||||
slide.style.top = 0;
|
var slide = slides[ i ];
|
||||||
|
|
||||||
|
// Don't bother updating invisible slides
|
||||||
|
if( slide.style.display === 'none' ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( config.center || slide.classList.contains( 'center' ) ) {
|
||||||
|
// Vertical stacks are not centred since their section
|
||||||
|
// children will be
|
||||||
|
if( slide.classList.contains( 'stack' ) ) {
|
||||||
|
slide.style.top = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
slide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
slide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';
|
slide.style.top = '';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
|
||||||
slide.style.top = '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2198,25 +2261,33 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function locationHash() {
|
function locationHash() {
|
||||||
var url = '/';
|
|
||||||
|
var url = '/';
|
||||||
// Attempt to create a named link based on the slide's ID
|
|
||||||
var id = currentSlide ? currentSlide.getAttribute( 'id' ) : null;
|
|
||||||
if( id ) {
|
|
||||||
id = id.replace( /[^a-zA-Z0-9\-\_\:\.]/g, '' );
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the current slide has an ID, use that as a named link
|
// Attempt to create a named link based on the slide's ID
|
||||||
if( typeof id === 'string' && id.length ) {
|
var id = currentSlide ? currentSlide.getAttribute( 'id' ) : null;
|
||||||
url = '/' + id;
|
if( id ) {
|
||||||
}
|
id = encodeURIComponent( id );
|
||||||
// Otherwise use the /h/v index (adding 1 to match slide label)
|
}
|
||||||
else {
|
|
||||||
if( indexh > 0 || indexv > 0 ) url += indexh + config.hashOneBasedIndex;
|
var indexf;
|
||||||
if( indexv > 0 ) url += '/' + (indexv + config.hashOneBasedIndex);
|
if( config.fragmentInURL ) {
|
||||||
}
|
indexf = getIndices().f;
|
||||||
|
}
|
||||||
return url;
|
|
||||||
|
// If the current slide has an ID, use that as a named link,
|
||||||
|
// but we don't support named links with a fragment index
|
||||||
|
if( typeof id === 'string' && id.length && indexf === undefined ) {
|
||||||
|
url = '/' + id;
|
||||||
|
}
|
||||||
|
// Otherwise use the /h/v index
|
||||||
|
else {
|
||||||
|
if( indexh > 0 || indexv > 0 || indexf !== undefined ) url += indexh + config.hashOneBasedIndex;
|
||||||
|
if( indexv > 0 || indexf !== undefined ) url += '/' + (indexv + config.hashOneBasedIndex);
|
||||||
|
if( indexf !== undefined ) url += '/' + indexf;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2443,16 +2514,7 @@
|
||||||
|
|
||||||
// Dispatch an event if the slide changed
|
// Dispatch an event if the slide changed
|
||||||
var slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );
|
var slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );
|
||||||
if( slideChanged ) {
|
if (!slideChanged) {
|
||||||
dispatchEvent( 'slidechanged', {
|
|
||||||
'indexh': indexh,
|
|
||||||
'indexv': indexv,
|
|
||||||
'previousSlide': previousSlide,
|
|
||||||
'currentSlide': currentSlide,
|
|
||||||
'origin': o
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Ensure that the previous slide is never the same as the current
|
// Ensure that the previous slide is never the same as the current
|
||||||
previousSlide = null;
|
previousSlide = null;
|
||||||
}
|
}
|
||||||
|
@ -2460,7 +2522,7 @@
|
||||||
// Solves an edge case where the previous slide maintains the
|
// Solves an edge case where the previous slide maintains the
|
||||||
// 'present' class when navigating between adjacent vertical
|
// 'present' class when navigating between adjacent vertical
|
||||||
// stacks
|
// stacks
|
||||||
if( previousSlide ) {
|
if( previousSlide && previousSlide !== currentSlide ) {
|
||||||
previousSlide.classList.remove( 'present' );
|
previousSlide.classList.remove( 'present' );
|
||||||
previousSlide.setAttribute( 'aria-hidden', 'true' );
|
previousSlide.setAttribute( 'aria-hidden', 'true' );
|
||||||
|
|
||||||
|
@ -2480,6 +2542,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( slideChanged ) {
|
||||||
|
dispatchEvent( 'slidechanged', {
|
||||||
|
'indexh': indexh,
|
||||||
|
'indexv': indexv,
|
||||||
|
'previousSlide': previousSlide,
|
||||||
|
'currentSlide': currentSlide,
|
||||||
|
'origin': o
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
// Handle embedded content
|
// Handle embedded content
|
||||||
if( slideChanged || !previousSlide ) {
|
if( slideChanged || !previousSlide ) {
|
||||||
stopEmbeddedContent( previousSlide );
|
stopEmbeddedContent( previousSlide );
|
||||||
|
@ -3237,8 +3309,7 @@
|
||||||
|
|
||||||
|
|
||||||
// Show the corresponding background element
|
// Show the corresponding background element
|
||||||
var indices = getIndices( slide );
|
var background = getSlideBackground( slide );
|
||||||
var background = getSlideBackground( indices.h, indices.v );
|
|
||||||
if( background ) {
|
if( background ) {
|
||||||
background.style.display = 'block';
|
background.style.display = 'block';
|
||||||
|
|
||||||
|
@ -3254,7 +3325,7 @@
|
||||||
|
|
||||||
// Images
|
// Images
|
||||||
if( backgroundImage ) {
|
if( backgroundImage ) {
|
||||||
background.style.backgroundImage = 'url('+ backgroundImage +')';
|
background.style.backgroundImage = 'url('+ encodeURI( backgroundImage ) +')';
|
||||||
}
|
}
|
||||||
// Videos
|
// Videos
|
||||||
else if ( backgroundVideo && !isSpeakerNotes() ) {
|
else if ( backgroundVideo && !isSpeakerNotes() ) {
|
||||||
|
@ -3325,8 +3396,7 @@
|
||||||
slide.style.display = 'none';
|
slide.style.display = 'none';
|
||||||
|
|
||||||
// Hide the corresponding background element
|
// Hide the corresponding background element
|
||||||
var indices = getIndices( slide );
|
var background = getSlideBackground( slide );
|
||||||
var background = getSlideBackground( indices.h, indices.v );
|
|
||||||
if( background ) {
|
if( background ) {
|
||||||
background.style.display = 'none';
|
background.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
@ -3356,13 +3426,27 @@
|
||||||
verticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );
|
verticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );
|
||||||
|
|
||||||
var routes = {
|
var routes = {
|
||||||
left: indexh > 0 || config.loop,
|
left: indexh > 0,
|
||||||
right: indexh < horizontalSlides.length - 1 || config.loop,
|
right: indexh < horizontalSlides.length - 1,
|
||||||
up: indexv > 0,
|
up: indexv > 0,
|
||||||
down: indexv < verticalSlides.length - 1
|
down: indexv < verticalSlides.length - 1
|
||||||
};
|
};
|
||||||
|
|
||||||
// reverse horizontal controls for rtl
|
// Looped presentations can always be navigated as long as
|
||||||
|
// there are slides available
|
||||||
|
if( config.loop ) {
|
||||||
|
if( horizontalSlides.length > 1 ) {
|
||||||
|
routes.left = true;
|
||||||
|
routes.right = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( verticalSlides.length > 1 ) {
|
||||||
|
routes.up = true;
|
||||||
|
routes.down = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reverse horizontal controls for rtl
|
||||||
if( config.rtl ) {
|
if( config.rtl ) {
|
||||||
var left = routes.left;
|
var left = routes.left;
|
||||||
routes.left = routes.right;
|
routes.left = routes.right;
|
||||||
|
@ -3461,9 +3545,16 @@
|
||||||
|
|
||||||
if( autoplay && typeof el.play === 'function' ) {
|
if( autoplay && typeof el.play === 'function' ) {
|
||||||
|
|
||||||
|
// If the media is ready, start playback
|
||||||
if( el.readyState > 1 ) {
|
if( el.readyState > 1 ) {
|
||||||
startEmbeddedMedia( { target: el } );
|
startEmbeddedMedia( { target: el } );
|
||||||
}
|
}
|
||||||
|
// Mobile devices never fire a loaded event so instead
|
||||||
|
// of waiting, we initiate playback
|
||||||
|
else if( isMobileDevice ) {
|
||||||
|
el.play();
|
||||||
|
}
|
||||||
|
// If the media isn't loaded, wait before playing
|
||||||
else {
|
else {
|
||||||
el.removeEventListener( 'loadeddata', startEmbeddedMedia ); // remove first to avoid dupes
|
el.removeEventListener( 'loadeddata', startEmbeddedMedia ); // remove first to avoid dupes
|
||||||
el.addEventListener( 'loadeddata', startEmbeddedMedia );
|
el.addEventListener( 'loadeddata', startEmbeddedMedia );
|
||||||
|
@ -3728,12 +3819,15 @@
|
||||||
var element;
|
var element;
|
||||||
|
|
||||||
// Ensure the named link is a valid HTML ID attribute
|
// Ensure the named link is a valid HTML ID attribute
|
||||||
if( /^[a-zA-Z][\w:.-]*$/.test( name ) ) {
|
try {
|
||||||
// Find the slide with the specified ID
|
element = document.getElementById( decodeURIComponent( name ) );
|
||||||
element = document.getElementById( name );
|
|
||||||
}
|
}
|
||||||
|
catch ( error ) { }
|
||||||
|
|
||||||
if( element ) {
|
// Ensure that we're not already on a slide with the same name
|
||||||
|
var isSameNameAsCurrentSlide = currentSlide ? currentSlide.getAttribute( 'id' ) === name : false;
|
||||||
|
|
||||||
|
if( element && !isSameNameAsCurrentSlide ) {
|
||||||
// Find the position of the named slide and navigate to it
|
// Find the position of the named slide and navigate to it
|
||||||
var indices = Reveal.getIndices( element );
|
var indices = Reveal.getIndices( element );
|
||||||
slide( indices.h, indices.v );
|
slide( indices.h, indices.v );
|
||||||
|
@ -3745,11 +3839,19 @@
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Read the index components of the hash
|
// Read the index components of the hash
|
||||||
var h = (parseInt( bits[0], 10 ) || 0) - config.hashOneBasedIndex,
|
|
||||||
v = (parseInt( bits[1], 10 ) || 0) - config.hashOneBasedIndex;
|
|
||||||
|
|
||||||
if( h !== indexh || v !== indexv ) {
|
var h = parseInt( bits[0], 10 ) || 0 - config.hashOneBasedIndex,
|
||||||
slide( h, v );
|
v = parseInt( bits[1], 10 ) || 0 - config.hashOneBasedIndex,
|
||||||
|
f;
|
||||||
|
if( config.fragmentInURL ) {
|
||||||
|
f = parseInt( bits[2], 10 );
|
||||||
|
if( isNaN( f ) ) {
|
||||||
|
f = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( h !== indexh || v !== indexv || f !== undefined ) {
|
||||||
|
slide( h, v, f );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3877,13 +3979,14 @@
|
||||||
* defined, have a background element so as long as the
|
* defined, have a background element so as long as the
|
||||||
* index is valid an element will be returned.
|
* index is valid an element will be returned.
|
||||||
*
|
*
|
||||||
* @param {number} x Horizontal background index
|
* @param {mixed} x Horizontal background index OR a slide
|
||||||
|
* HTML element
|
||||||
* @param {number} y Vertical background index
|
* @param {number} y Vertical background index
|
||||||
* @return {(HTMLElement[]|*)}
|
* @return {(HTMLElement[]|*)}
|
||||||
*/
|
*/
|
||||||
function getSlideBackground( x, y ) {
|
function getSlideBackground( x, y ) {
|
||||||
|
|
||||||
var slide = getSlide( x, y );
|
var slide = typeof x === 'number' ? getSlide( x, y ) : x;
|
||||||
if( slide ) {
|
if( slide ) {
|
||||||
return slide.slideBackgroundElement;
|
return slide.slideBackgroundElement;
|
||||||
}
|
}
|
||||||
|
@ -4108,6 +4211,9 @@
|
||||||
|
|
||||||
updateControls();
|
updateControls();
|
||||||
updateProgress();
|
updateProgress();
|
||||||
|
if( config.fragmentInURL ) {
|
||||||
|
writeURL();
|
||||||
|
}
|
||||||
|
|
||||||
return !!( fragmentsShown.length || fragmentsHidden.length );
|
return !!( fragmentsShown.length || fragmentsHidden.length );
|
||||||
|
|
||||||
|
@ -4347,7 +4453,17 @@
|
||||||
|
|
||||||
// Prioritize revealing fragments
|
// Prioritize revealing fragments
|
||||||
if( nextFragment() === false ) {
|
if( nextFragment() === false ) {
|
||||||
if( availableRoutes().down ) {
|
|
||||||
|
var routes = availableRoutes();
|
||||||
|
|
||||||
|
// When looping is enabled `routes.down` is always available
|
||||||
|
// so we need a separate check for when we've reached the
|
||||||
|
// end of a stack and should move horizontally
|
||||||
|
if( routes.down && routes.right && config.loop && Reveal.isLastVerticalSlide( currentSlide ) ) {
|
||||||
|
routes.down = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( routes.down ) {
|
||||||
navigateDown();
|
navigateDown();
|
||||||
}
|
}
|
||||||
else if( config.rtl ) {
|
else if( config.rtl ) {
|
||||||
|
@ -4417,7 +4533,7 @@
|
||||||
|
|
||||||
// If there's a condition specified and it returns false,
|
// If there's a condition specified and it returns false,
|
||||||
// ignore this event
|
// ignore this event
|
||||||
if( typeof config.keyboardCondition === 'function' && config.keyboardCondition() === false ) {
|
if( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4482,7 +4598,31 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. System defined key bindings
|
// 2. Registered custom key bindings
|
||||||
|
if( triggered === false ) {
|
||||||
|
|
||||||
|
for( key in registeredKeyBindings ) {
|
||||||
|
|
||||||
|
// Check if this binding matches the pressed key
|
||||||
|
if( parseInt( key, 10 ) === event.keyCode ) {
|
||||||
|
|
||||||
|
var action = registeredKeyBindings[ key ].callback;
|
||||||
|
|
||||||
|
// Callback function
|
||||||
|
if( typeof action === 'function' ) {
|
||||||
|
action.apply( null, [ event ] );
|
||||||
|
}
|
||||||
|
// String shortcuts to reveal.js API
|
||||||
|
else if( typeof action === 'string' && typeof Reveal[ action ] === 'function' ) {
|
||||||
|
Reveal[ action ].call();
|
||||||
|
}
|
||||||
|
|
||||||
|
triggered = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. System defined key bindings
|
||||||
if( triggered === false ) {
|
if( triggered === false ) {
|
||||||
|
|
||||||
// Assume true and try to prove false
|
// Assume true and try to prove false
|
||||||
|
@ -5213,7 +5353,7 @@
|
||||||
// Returns true if we're currently on the last slide
|
// Returns true if we're currently on the last slide
|
||||||
isLastSlide: function() {
|
isLastSlide: function() {
|
||||||
if( currentSlide ) {
|
if( currentSlide ) {
|
||||||
// Does this slide has next a sibling?
|
// Does this slide have a next sibling?
|
||||||
if( currentSlide.nextElementSibling ) return false;
|
if( currentSlide.nextElementSibling ) return false;
|
||||||
|
|
||||||
// If it's vertical, does its parent have a next sibling?
|
// If it's vertical, does its parent have a next sibling?
|
||||||
|
@ -5225,6 +5365,19 @@
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Returns true if we're on the last slide in the current
|
||||||
|
// vertical stack
|
||||||
|
isLastVerticalSlide: function() {
|
||||||
|
if( currentSlide && isVerticalSlide( currentSlide ) ) {
|
||||||
|
// Does this slide have a next sibling?
|
||||||
|
if( currentSlide.nextElementSibling ) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
// Checks if reveal.js has been loaded and is ready for use
|
// Checks if reveal.js has been loaded and is ready for use
|
||||||
isReady: function() {
|
isReady: function() {
|
||||||
return loaded;
|
return loaded;
|
||||||
|
@ -5242,6 +5395,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Adds a custom key binding
|
||||||
|
addKeyBinding: addKeyBinding,
|
||||||
|
|
||||||
|
// Removes a custom key binding
|
||||||
|
removeKeyBinding: removeKeyBinding,
|
||||||
|
|
||||||
// Programatically triggers a keyboard event
|
// Programatically triggers a keyboard event
|
||||||
triggerKey: function( keyCode ) {
|
triggerKey: function( keyCode ) {
|
||||||
onDocumentKeyDown( { keyCode: keyCode } );
|
onDocumentKeyDown( { keyCode: keyCode } );
|
||||||
|
|
|
@ -3,7 +3,4 @@
|
||||||
/*! head.css3 - v1.0.0 */
|
/*! head.css3 - v1.0.0 */
|
||||||
(function(n,t){"use strict";function a(n){for(var r in n)if(i[n[r]]!==t)return!0;return!1}function r(n){var t=n.charAt(0).toUpperCase()+n.substr(1),i=(n+" "+c.join(t+" ")+t).split(" ");return!!a(i)}var h=n.document,o=h.createElement("i"),i=o.style,s=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),c="Webkit Moz O ms Khtml".split(" "),l=n.head_conf&&n.head_conf.head||"head",u=n[l],f={gradient:function(){var n="background-image:";return i.cssText=(n+s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+n)+s.join("linear-gradient(left top,#eee,#fff);"+n)).slice(0,-n.length),!!i.backgroundImage},rgba:function(){return i.cssText="background-color:rgba(0,0,0,0.5)",!!i.backgroundColor},opacity:function(){return o.style.opacity===""},textshadow:function(){return i.textShadow===""},multiplebgs:function(){i.cssText="background:url(https://),url(https://),red url(https://)";var n=(i.background||"").match(/url/g);return Object.prototype.toString.call(n)==="[object Array]"&&n.length===3},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in n},retina:function(){return n.devicePixelRatio>1},fontface:function(){var t=u.browser.name,n=u.browser.version;switch(t){case"ie":return n>=9;case"chrome":return n>=13;case"ff":return n>=6;case"ios":return n>=5;case"android":return!1;case"webkit":return n>=5.1;case"opera":return n>=10;default:return!1}}};for(var e in f)f[e]&&u.feature(e,f[e].call(),!0);u.feature()})(window);
|
(function(n,t){"use strict";function a(n){for(var r in n)if(i[n[r]]!==t)return!0;return!1}function r(n){var t=n.charAt(0).toUpperCase()+n.substr(1),i=(n+" "+c.join(t+" ")+t).split(" ");return!!a(i)}var h=n.document,o=h.createElement("i"),i=o.style,s=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),c="Webkit Moz O ms Khtml".split(" "),l=n.head_conf&&n.head_conf.head||"head",u=n[l],f={gradient:function(){var n="background-image:";return i.cssText=(n+s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+n)+s.join("linear-gradient(left top,#eee,#fff);"+n)).slice(0,-n.length),!!i.backgroundImage},rgba:function(){return i.cssText="background-color:rgba(0,0,0,0.5)",!!i.backgroundColor},opacity:function(){return o.style.opacity===""},textshadow:function(){return i.textShadow===""},multiplebgs:function(){i.cssText="background:url(https://),url(https://),red url(https://)";var n=(i.background||"").match(/url/g);return Object.prototype.toString.call(n)==="[object Array]"&&n.length===3},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in n},retina:function(){return n.devicePixelRatio>1},fontface:function(){var t=u.browser.name,n=u.browser.version;switch(t){case"ie":return n>=9;case"chrome":return n>=13;case"ff":return n>=6;case"ios":return n>=5;case"android":return!1;case"webkit":return n>=5.1;case"opera":return n>=10;default:return!1}}};for(var e in f)f[e]&&u.feature(e,f[e].call(),!0);u.feature()})(window);
|
||||||
/*! head.load - v1.0.3 */
|
/*! head.load - v1.0.3 */
|
||||||
(function(n,t){"use strict";function w(){}function u(n,t){if(n){typeof n=="object"&&(n=[].slice.call(n));for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}}function it(n,i){var r=Object.prototype.toString.call(i).slice(8,-1);return i!==t&&i!==null&&r===n}function s(n){return it("Function",n)}function a(n){return it("Array",n)}function et(n){var i=n.split("/"),t=i[i.length-1],r=t.indexOf("?");return r!==-1?t.substring(0,r):t}function f(n){(n=n||w,n._done)||(n(),n._done=1)}function ot(n,t,r,u){var f=typeof n=="object"?n:{test:n,success:!t?!1:a(t)?t:[t],failure:!r?!1:a(r)?r:[r],callback:u||w},e=!!f.test;return e&&!!f.success?(f.success.push(f.callback),i.load.apply(null,f.success)):e||!f.failure?u():(f.failure.push(f.callback),i.load.apply(null,f.failure)),i}function v(n){var t={},i,r;if(typeof n=="object")for(i in n)!n[i]||(t={name:i,url:n[i]});else t={name:et(n),url:n};return(r=c[t.name],r&&r.url===t.url)?r:(c[t.name]=t,t)}function y(n){n=n||c;for(var t in n)if(n.hasOwnProperty(t)&&n[t].state!==l)return!1;return!0}function st(n){n.state=ft;u(n.onpreload,function(n){n.call()})}function ht(n){n.state===t&&(n.state=nt,n.onpreload=[],rt({url:n.url,type:"cache"},function(){st(n)}))}function ct(){var n=arguments,t=n[n.length-1],r=[].slice.call(n,1),f=r[0];return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(f?(u(r,function(n){s(n)||!n||ht(v(n))}),b(v(n[0]),s(f)?f:function(){i.load.apply(null,r)})):b(v(n[0])),i)}function lt(){var n=arguments,t=n[n.length-1],r={};return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(u(n,function(n){n!==t&&(n=v(n),r[n.name]=n)}),u(n,function(n){n!==t&&(n=v(n),b(n,function(){y(r)&&f(t)}))}),i)}function b(n,t){if(t=t||w,n.state===l){t();return}if(n.state===tt){i.ready(n.name,t);return}if(n.state===nt){n.onpreload.push(function(){b(n,t)});return}n.state=tt;rt(n,function(){n.state=l;t();u(h[n.name],function(n){f(n)});o&&y()&&u(h.ALL,function(n){f(n)})})}function at(n){n=n||"";var t=n.split("?")[0].split(".");return t[t.length-1].toLowerCase()}function rt(t,i){function e(t){t=t||n.event;u.onload=u.onreadystatechange=u.onerror=null;i()}function o(f){f=f||n.event;(f.type==="load"||/loaded|complete/.test(u.readyState)&&(!r.documentMode||r.documentMode<9))&&(n.clearTimeout(t.errorTimeout),n.clearTimeout(t.cssTimeout),u.onload=u.onreadystatechange=u.onerror=null,i())}function s(){if(t.state!==l&&t.cssRetries<=20){for(var i=0,f=r.styleSheets.length;i<f;i++)if(r.styleSheets[i].href===u.href){o({type:"load"});return}t.cssRetries++;t.cssTimeout=n.setTimeout(s,250)}}var u,h,f;i=i||w;h=at(t.url);h==="css"?(u=r.createElement("link"),u.type="text/"+(t.type||"css"),u.rel="stylesheet",u.href=t.url,t.cssRetries=0,t.cssTimeout=n.setTimeout(s,500)):(u=r.createElement("script"),u.type="text/"+(t.type||"javascript"),u.src=t.url);u.onload=u.onreadystatechange=o;u.onerror=e;u.async=!1;u.defer=!1;t.errorTimeout=n.setTimeout(function(){e({type:"timeout"})},7e3);f=r.head||r.getElementsByTagName("head")[0];f.insertBefore(u,f.lastChild)}function vt(){for(var t,u=r.getElementsByTagName("script"),n=0,f=u.length;n<f;n++)if(t=u[n].getAttribute("data-headjs-load"),!!t){i.load(t);return}}function yt(n,t){var v,p,e;return n===r?(o?f(t):d.push(t),i):(s(n)&&(t=n,n="ALL"),a(n))?(v={},u(n,function(n){v[n]=c[n];i.ready(n,function(){y(v)&&f(t)})}),i):typeof n!="string"||!s(t)?i:(p=c[n],p&&p.state===l||n==="ALL"&&y()&&o)?(f(t),i):(e=h[n],e?e.push(t):e=h[n]=[t],i)}function e(){if(!r.body){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(e,50);return}o||(o=!0,vt(),u(d,function(n){f(n)}))}function k(){r.addEventListener?(r.removeEventListener("DOMContentLoaded",k,!1),e()):r.readyState==="complete"&&(r.detachEvent("onreadystatechange",k),e())}var r=n.document,d=[],h={},c={},ut="async"in r.createElement("script")||"MozAppearance"in r.documentElement.style||n.opera,o,g=n.head_conf&&n.head_conf.head||"head",i=n[g]=n[g]||function(){i.ready.apply(null,arguments)},nt=1,ft=2,tt=3,l=4,p;if(r.readyState==="complete")e();else if(r.addEventListener)r.addEventListener("DOMContentLoaded",k,!1),n.addEventListener("load",e,!1);else{r.attachEvent("onreadystatechange",k);n.attachEvent("onload",e);p=!1;try{p=!n.frameElement&&r.documentElement}catch(wt){}p&&p.doScroll&&function pt(){if(!o){try{p.doScroll("left")}catch(t){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(pt,50);return}e()}}()}i.load=i.js=ut?lt:ct;i.test=ot;i.ready=yt;i.ready(r,function(){y()&&u(h.ALL,function(n){f(n)});i.feature&&i.feature("domloaded",!0)})})(window);
|
(function(n,t){"use strict";function w(){}function u(n,t){if(n){typeof n=="object"&&(n=[].slice.call(n));for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}}function it(n,i){var r=Object.prototype.toString.call(i).slice(8,-1);return i!==t&&i!==null&&r===n}function s(n){return it("Function",n)}function a(n){return it("Array",n)}function et(n){var i=n.split("/"),t=i[i.length-1],r=t.indexOf("?");return r!==-1?t.substring(0,r):t}function f(n){(n=n||w,n._done)||(n(),n._done=1)}function ot(n,t,r,u){var f=typeof n=="object"?n:{test:n,success:!t?!1:a(t)?t:[t],failure:!r?!1:a(r)?r:[r],callback:u||w},e=!!f.test;return e&&!!f.success?(f.success.push(f.callback),i.load.apply(null,f.success)):e||!f.failure?u():(f.failure.push(f.callback),i.load.apply(null,f.failure)),i}function v(n){var t={},i,r;if(typeof n=="object")for(i in n)!n[i]||(t={name:i,url:n[i]});else t={name:et(n),url:n};return(r=c[t.name],r&&r.url===t.url)?r:(c[t.name]=t,t)}function y(n){n=n||c;for(var t in n)if(n.hasOwnProperty(t)&&n[t].state!==l)return!1;return!0}function st(n){n.state=ft;u(n.onpreload,function(n){n.call()})}function ht(n){n.state===t&&(n.state=nt,n.onpreload=[],rt({url:n.url,type:"cache"},function(){st(n)}))}function ct(){var n=arguments,t=n[n.length-1],r=[].slice.call(n,1),f=r[0];return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(f?(u(r,function(n){s(n)||!n||ht(v(n))}),b(v(n[0]),s(f)?f:function(){i.load.apply(null,r)})):b(v(n[0])),i)}function lt(){var n=arguments,t=n[n.length-1],r={};return(s(t)||(t=null),a(n[0]))?(n[0].push(t),i.load.apply(null,n[0]),i):(u(n,function(n){n!==t&&(n=v(n),r[n.name]=n)}),u(n,function(n){n!==t&&(n=v(n),b(n,function(){y(r)&&f(t)}))}),i)}function b(n,t){if(t=t||w,n.state===l){t();return}if(n.state===tt){i.ready(n.name,t);return}if(n.state===nt){n.onpreload.push(function(){b(n,t)});return}n.state=tt;rt(n,function(){n.state=l;t();u(h[n.name],function(n){f(n)});o&&y()&&u(h.ALL,function(n){f(n)})})}function at(n){n=n||"";var t=n.split("?")[0].split(".");return t[t.length-1].toLowerCase()}function rt(t,i){function e(t){t=t||n.event;u.onload=u.onreadystatechange=u.onerror=null;i()}function o(f){f=f||n.event;(f.type==="load"||/loaded|complete/.test(u.readyState)&&(!r.documentMode||r.documentMode<9))&&(n.clearTimeout(t.errorTimeout),n.clearTimeout(t.cssTimeout),u.onload=u.onreadystatechange=u.onerror=null,i())}function s(){if(t.state!==l&&t.cssRetries<=20){for(var i=0,f=r.styleSheets.length;i<f;i++)if(r.styleSheets[i].href===u.href){o({type:"load"});return}t.cssRetries++;t.cssTimeout=n.setTimeout(s,250)}}var u,h,f;i=i||w;h=at(t.url);h==="css"?(u=r.createElement("link"),u.type="text/"+(t.type||"css"),u.rel="stylesheet",u.href=t.url,t.cssRetries=0,t.cssTimeout=n.setTimeout(s,500)):(u=r.createElement("script"),u.type="text/"+(t.type||"javascript"),u.src=t.url);u.onload=u.onreadystatechange=o;u.onerror=e;u.async=!1;u.defer=!1;t.errorTimeout=n.setTimeout(function(){e({type:"timeout"})},7e3);f=r.head||r.getElementsByTagName("head")[0];f.insertBefore(u,f.lastChild)}function vt(){for(var t,u=r.getElementsByTagName("script"),n=0,f=u.length;n<f;n++)if(t=u[n].getAttribute("data-headjs-load"),!!t){i.load(t);return}}function yt(n,t){var v,p,e;return n===r?(o?f(t):d.push(t),i):(s(n)&&(t=n,n="ALL"),a(n))?(v={},u(n,function(n){v[n]=c[n];i.ready(n,function(){y(v)&&f(t)})}),i):typeof n!="string"||!s(t)?i:(p=c[n],p&&p.state===l||n==="ALL"&&y()&&o)?(f(t),i):(e=h[n],e?e.push(t):e=h[n]=[t],i)}function e(){if(!r.body){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(e,50);return}o||(o=!0,vt(),u(d,function(n){f(n)}))}function k(){r.addEventListener?(r.removeEventListener("DOMContentLoaded",k,!1),e()):r.readyState==="complete"&&(r.detachEvent("onreadystatechange",k),e())}var r=n.document,d=[],h={},c={},ut="async"in r.createElement("script")||"MozAppearance"in r.documentElement.style||n.opera,o,g=n.head_conf&&n.head_conf.head||"head",i=n[g]=n[g]||function(){i.ready.apply(null,arguments)},nt=1,ft=2,tt=3,l=4,p;if(r.readyState==="complete")e();else if(r.addEventListener)r.addEventListener("DOMContentLoaded",k,!1),n.addEventListener("load",e,!1);else{r.attachEvent("onreadystatechange",k);n.attachEvent("onload",e);p=!1;try{p=!n.frameElement&&r.documentElement}catch(wt){}p&&p.doScroll&&function pt(){if(!o){try{p.doScroll("left")}catch(t){n.clearTimeout(i.readyTimeout);i.readyTimeout=n.setTimeout(pt,50);return}e()}}()}i.load=i.js=ut?lt:ct;i.test=ot;i.ready=yt;i.ready(r,function(){y()&&u(h.ALL,function(n){f(n)});i.feature&&i.feature("domloaded",!0)})})(window);
|
||||||
/*
|
|
||||||
//# sourceMappingURL=head.min.js.map
|
|
||||||
*/
|
|
|
@ -23,15 +23,15 @@
|
||||||
"node": ">=4.0.0"
|
"node": ">=4.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"express": "^4.15.2",
|
"express": "^4.16.2",
|
||||||
"grunt": "^1.0.1",
|
"grunt": "^1.0.1",
|
||||||
"grunt-autoprefixer": "^3.0.4",
|
"grunt-autoprefixer": "^3.0.4",
|
||||||
"grunt-cli": "^1.2.0",
|
"grunt-cli": "^1.2.0",
|
||||||
"grunt-contrib-connect": "^1.0.2",
|
"grunt-contrib-connect": "^1.0.2",
|
||||||
"grunt-contrib-cssmin": "^2.1.0",
|
"grunt-contrib-cssmin": "^2.2.1",
|
||||||
"grunt-contrib-jshint": "^1.1.0",
|
"grunt-contrib-jshint": "^1.1.0",
|
||||||
"grunt-contrib-qunit": "~1.2.0",
|
"grunt-contrib-qunit": "^2.0.0",
|
||||||
"grunt-contrib-uglify": "^2.3.0",
|
"grunt-contrib-uglify": "^3.3.0",
|
||||||
"grunt-contrib-watch": "^1.0.0",
|
"grunt-contrib-watch": "^1.0.0",
|
||||||
"grunt-sass": "^2.0.0",
|
"grunt-sass": "^2.0.0",
|
||||||
"grunt-retire": "^1.0.7",
|
"grunt-retire": "^1.0.7",
|
||||||
|
|
|
@ -9,15 +9,15 @@ var RevealMath = window.RevealMath || (function(){
|
||||||
var options = Reveal.getConfig().math || {};
|
var options = Reveal.getConfig().math || {};
|
||||||
options.mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js';
|
options.mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js';
|
||||||
options.config = options.config || 'TeX-AMS_HTML-full';
|
options.config = options.config || 'TeX-AMS_HTML-full';
|
||||||
|
options.tex2jax = options.tex2jax || {
|
||||||
|
inlineMath: [['$','$'],['\\(','\\)']] ,
|
||||||
|
skipTags: ['script','noscript','style','textarea','pre'] };
|
||||||
|
|
||||||
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: {
|
tex2jax: options.tex2jax,
|
||||||
inlineMath: [['$','$'],['\\(','\\)']] ,
|
|
||||||
skipTags: ['script','noscript','style','textarea','pre']
|
|
||||||
},
|
|
||||||
skipStartupTypeset: true
|
skipStartupTypeset: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -427,10 +427,17 @@
|
||||||
* Forward keyboard events to the current slide window.
|
* Forward keyboard events to the current slide window.
|
||||||
* This enables keyboard events to work even if focus
|
* This enables keyboard events to work even if focus
|
||||||
* isn't set on the current slide iframe.
|
* isn't set on the current slide iframe.
|
||||||
|
*
|
||||||
|
* Block F5 default handling, it reloads and disconnects
|
||||||
|
* the speaker notes window.
|
||||||
*/
|
*/
|
||||||
function setupKeyboard() {
|
function setupKeyboard() {
|
||||||
|
|
||||||
document.addEventListener( 'keydown', function( event ) {
|
document.addEventListener( 'keydown', function( event ) {
|
||||||
|
if( event.keyCode === 116 || ( event.metaKey && event.keyCode === 82 ) ) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );
|
currentSlide.contentWindow.postMessage( JSON.stringify({ method: 'triggerKey', args: [ event.keyCode ] }), '*' );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
|
|
@ -131,22 +131,9 @@ var RevealNotes = (function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open the notes when the 's' key is hit
|
// Open the notes when the 's' key is hit
|
||||||
document.addEventListener( 'keydown', function( event ) {
|
Reveal.addKeyBinding({keyCode: 83, key: 'S', description: 'Speaker notes view'}, function() {
|
||||||
// Disregard the event if the target is editable or a
|
openNotes();
|
||||||
// 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' );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,28 +42,26 @@ probePage.open( inputFile, function( status ) {
|
||||||
|
|
||||||
printPage.open( inputFile, function( status ) {
|
printPage.open( inputFile, function( status ) {
|
||||||
console.log( 'Export PDF: Preparing pdf [3/4]')
|
console.log( 'Export PDF: Preparing pdf [3/4]')
|
||||||
printPage.evaluate(function() {
|
printPage.evaluate( function() {
|
||||||
Reveal.isReady() ? window.callPhantom() : Reveal.addEventListener( 'pdf-ready', window.callPhantom );
|
Reveal.isReady() ? window.callPhantom() : Reveal.addEventListener( 'pdf-ready', window.callPhantom );
|
||||||
});
|
} );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
printPage.onCallback = function(data) {
|
printPage.onCallback = function( data ) {
|
||||||
// For some reason we need to "jump the queue" for syntax highlighting to work.
|
// For some reason we need to "jump the queue" for syntax highlighting to work.
|
||||||
// See: http://stackoverflow.com/a/3580132/129269
|
// See: http://stackoverflow.com/a/3580132/129269
|
||||||
setTimeout(function() {
|
setTimeout( function() {
|
||||||
console.log( 'Export PDF: Writing file [4/4]' );
|
console.log( 'Export PDF: Writing file [4/4]' );
|
||||||
printPage.render( outputFile );
|
printPage.render( outputFile );
|
||||||
console.log( 'Export PDF: Finished successfully!' );
|
console.log( 'Export PDF: Finished successfully!' );
|
||||||
phantom.exit();
|
phantom.exit();
|
||||||
}, 0);
|
}, 0 );
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
console.log( 'Export PDF: Unable to read reveal.js config. Make sure the input address points to a reveal.js page.' );
|
console.log( 'Export PDF: Unable to read reveal.js config. Make sure the input address points to a reveal.js page.' );
|
||||||
phantom.exit(1);
|
phantom.exit( 1 );
|
||||||
|
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,92 +19,92 @@ var RevealSearch = (function() {
|
||||||
function Hilitor(id, tag)
|
function Hilitor(id, tag)
|
||||||
{
|
{
|
||||||
|
|
||||||
var targetNode = document.getElementById(id) || document.body;
|
var targetNode = document.getElementById(id) || document.body;
|
||||||
var hiliteTag = tag || "EM";
|
var hiliteTag = tag || "EM";
|
||||||
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM)$");
|
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM)$");
|
||||||
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
|
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
|
||||||
var wordColor = [];
|
var wordColor = [];
|
||||||
var colorIdx = 0;
|
var colorIdx = 0;
|
||||||
var matchRegex = "";
|
var matchRegex = "";
|
||||||
var matchingSlides = [];
|
var matchingSlides = [];
|
||||||
|
|
||||||
this.setRegex = function(input)
|
this.setRegex = function(input)
|
||||||
{
|
{
|
||||||
input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
|
input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
|
||||||
matchRegex = new RegExp("(" + input + ")","i");
|
matchRegex = new RegExp("(" + input + ")","i");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.getRegex = function()
|
this.getRegex = function()
|
||||||
{
|
{
|
||||||
return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
|
return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
// recursively apply word highlighting
|
// recursively apply word highlighting
|
||||||
this.hiliteWords = function(node)
|
this.hiliteWords = function(node)
|
||||||
{
|
{
|
||||||
if(node == undefined || !node) return;
|
if(node == undefined || !node) return;
|
||||||
if(!matchRegex) return;
|
if(!matchRegex) return;
|
||||||
if(skipTags.test(node.nodeName)) return;
|
if(skipTags.test(node.nodeName)) return;
|
||||||
|
|
||||||
if(node.hasChildNodes()) {
|
if(node.hasChildNodes()) {
|
||||||
for(var i=0; i < node.childNodes.length; i++)
|
for(var i=0; i < node.childNodes.length; i++)
|
||||||
this.hiliteWords(node.childNodes[i]);
|
this.hiliteWords(node.childNodes[i]);
|
||||||
}
|
}
|
||||||
if(node.nodeType == 3) { // NODE_TEXT
|
if(node.nodeType == 3) { // NODE_TEXT
|
||||||
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
|
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
|
||||||
//find the slide's section element and save it in our list of matching slides
|
//find the slide's section element and save it in our list of matching slides
|
||||||
var secnode = node;
|
var secnode = node;
|
||||||
while (secnode != null && secnode.nodeName != 'SECTION') {
|
while (secnode != null && secnode.nodeName != 'SECTION') {
|
||||||
secnode = secnode.parentNode;
|
secnode = secnode.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
var slideIndex = Reveal.getIndices(secnode);
|
var slideIndex = Reveal.getIndices(secnode);
|
||||||
var slidelen = matchingSlides.length;
|
var slidelen = matchingSlides.length;
|
||||||
var alreadyAdded = false;
|
var alreadyAdded = false;
|
||||||
for (var i=0; i < slidelen; i++) {
|
for (var i=0; i < slidelen; i++) {
|
||||||
if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
|
if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
|
||||||
alreadyAdded = true;
|
alreadyAdded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (! alreadyAdded) {
|
if (! alreadyAdded) {
|
||||||
matchingSlides.push(slideIndex);
|
matchingSlides.push(slideIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!wordColor[regs[0].toLowerCase()]) {
|
if(!wordColor[regs[0].toLowerCase()]) {
|
||||||
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
|
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
var match = document.createElement(hiliteTag);
|
var match = document.createElement(hiliteTag);
|
||||||
match.appendChild(document.createTextNode(regs[0]));
|
match.appendChild(document.createTextNode(regs[0]));
|
||||||
match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
|
match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
|
||||||
match.style.fontStyle = "inherit";
|
match.style.fontStyle = "inherit";
|
||||||
match.style.color = "#000";
|
match.style.color = "#000";
|
||||||
|
|
||||||
var after = node.splitText(regs.index);
|
var after = node.splitText(regs.index);
|
||||||
after.nodeValue = after.nodeValue.substring(regs[0].length);
|
after.nodeValue = after.nodeValue.substring(regs[0].length);
|
||||||
node.parentNode.insertBefore(match, after);
|
node.parentNode.insertBefore(match, after);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// remove highlighting
|
// remove highlighting
|
||||||
this.remove = function()
|
this.remove = function()
|
||||||
{
|
{
|
||||||
var arr = document.getElementsByTagName(hiliteTag);
|
var arr = document.getElementsByTagName(hiliteTag);
|
||||||
while(arr.length && (el = arr[0])) {
|
while(arr.length && (el = arr[0])) {
|
||||||
el.parentNode.replaceChild(el.firstChild, el);
|
el.parentNode.replaceChild(el.firstChild, el);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// start highlighting at target node
|
// start highlighting at target node
|
||||||
this.apply = function(input)
|
this.apply = function(input)
|
||||||
{
|
{
|
||||||
if(input == undefined || !input) return;
|
if(input == undefined || !input) return;
|
||||||
this.remove();
|
this.remove();
|
||||||
this.setRegex(input);
|
this.setRegex(input);
|
||||||
this.hiliteWords(targetNode);
|
this.hiliteWords(targetNode);
|
||||||
return matchingSlides;
|
return matchingSlides;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ function Hilitor(id, tag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matchedSlides) {
|
if (matchedSlides) {
|
||||||
//navigate to the next slide that has the keyword, wrapping to the first if necessary
|
//navigate to the next slide that has the keyword, wrapping to the first if necessary
|
||||||
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
|
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
|
||||||
currentMatchedIndex = 0;
|
currentMatchedIndex = 0;
|
||||||
|
@ -169,20 +169,20 @@ function Hilitor(id, tag)
|
||||||
var searchElement = document.createElement( 'div' );
|
var searchElement = document.createElement( 'div' );
|
||||||
searchElement.id = "searchinputdiv";
|
searchElement.id = "searchinputdiv";
|
||||||
searchElement.classList.add( 'searchdiv' );
|
searchElement.classList.add( 'searchdiv' );
|
||||||
searchElement.style.position = 'absolute';
|
searchElement.style.position = 'absolute';
|
||||||
searchElement.style.top = '10px';
|
searchElement.style.top = '10px';
|
||||||
searchElement.style.right = '10px';
|
searchElement.style.right = '10px';
|
||||||
searchElement.style.zIndex = 10;
|
searchElement.style.zIndex = 10;
|
||||||
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
|
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
|
||||||
searchElement.innerHTML = '<span><input type="search" id="searchinput" class="searchinput" style="vertical-align: top;"/><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC" id="searchbutton" class="searchicon" style="vertical-align: top; margin-top: -1px;"/></span>';
|
searchElement.innerHTML = '<span><input type="search" id="searchinput" class="searchinput" style="vertical-align: top;"/><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC" id="searchbutton" class="searchicon" style="vertical-align: top; margin-top: -1px;"/></span>';
|
||||||
dom.wrapper.appendChild( searchElement );
|
dom.wrapper.appendChild( searchElement );
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("searchbutton").addEventListener( 'click', function(event) {
|
document.getElementById( 'searchbutton' ).addEventListener( 'click', function(event) {
|
||||||
doSearch();
|
doSearch();
|
||||||
}, false );
|
}, false );
|
||||||
|
|
||||||
document.getElementById("searchinput").addEventListener( 'keyup', function( event ) {
|
document.getElementById( 'searchinput' ).addEventListener( 'keyup', function( event ) {
|
||||||
switch (event.keyCode) {
|
switch (event.keyCode) {
|
||||||
case 13:
|
case 13:
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -195,7 +195,7 @@ function Hilitor(id, tag)
|
||||||
}, false );
|
}, false );
|
||||||
|
|
||||||
document.addEventListener( 'keydown', function( event ) {
|
document.addEventListener( 'keydown', function( event ) {
|
||||||
if( event.key == "F" && (event.ctrlKey || event.metaKey) ) {//Control+Shift+f
|
if( event.key == "F" && (event.ctrlKey || event.metaKey) ) { //Control+Shift+f
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
toggleSearch();
|
toggleSearch();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,244 +0,0 @@
|
||||||
/**
|
|
||||||
* QUnit v1.12.0 - A JavaScript Unit Testing Framework
|
|
||||||
*
|
|
||||||
* http://qunitjs.com
|
|
||||||
*
|
|
||||||
* Copyright 2012 jQuery Foundation and other contributors
|
|
||||||
* Released under the MIT license.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** Font Family and Sizes */
|
|
||||||
|
|
||||||
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
|
|
||||||
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
|
|
||||||
#qunit-tests { font-size: smaller; }
|
|
||||||
|
|
||||||
|
|
||||||
/** Resets */
|
|
||||||
|
|
||||||
#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Header */
|
|
||||||
|
|
||||||
#qunit-header {
|
|
||||||
padding: 0.5em 0 0.5em 1em;
|
|
||||||
|
|
||||||
color: #8699a4;
|
|
||||||
background-color: #0d3349;
|
|
||||||
|
|
||||||
font-size: 1.5em;
|
|
||||||
line-height: 1em;
|
|
||||||
font-weight: normal;
|
|
||||||
|
|
||||||
border-radius: 5px 5px 0 0;
|
|
||||||
-moz-border-radius: 5px 5px 0 0;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-header a {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #c2ccd1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-header a:hover,
|
|
||||||
#qunit-header a:focus {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-testrunner-toolbar label {
|
|
||||||
display: inline-block;
|
|
||||||
padding: 0 .5em 0 .1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-banner {
|
|
||||||
height: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-testrunner-toolbar {
|
|
||||||
padding: 0.5em 0 0.5em 2em;
|
|
||||||
color: #5E740B;
|
|
||||||
background-color: #eee;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-userAgent {
|
|
||||||
padding: 0.5em 0 0.5em 2.5em;
|
|
||||||
background-color: #2b81af;
|
|
||||||
color: #fff;
|
|
||||||
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-modulefilter-container {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Tests: Pass/Fail */
|
|
||||||
|
|
||||||
#qunit-tests {
|
|
||||||
list-style-position: inside;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests li {
|
|
||||||
padding: 0.4em 0.5em 0.4em 2.5em;
|
|
||||||
border-bottom: 1px solid #fff;
|
|
||||||
list-style-position: inside;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests li strong {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests li a {
|
|
||||||
padding: 0.5em;
|
|
||||||
color: #c2ccd1;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
#qunit-tests li a:hover,
|
|
||||||
#qunit-tests li a:focus {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests li .runtime {
|
|
||||||
float: right;
|
|
||||||
font-size: smaller;
|
|
||||||
}
|
|
||||||
|
|
||||||
.qunit-assert-list {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
padding: 0.5em;
|
|
||||||
|
|
||||||
background-color: #fff;
|
|
||||||
|
|
||||||
border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.qunit-collapsed {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
margin-top: .2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests th {
|
|
||||||
text-align: right;
|
|
||||||
vertical-align: top;
|
|
||||||
padding: 0 .5em 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests td {
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests pre {
|
|
||||||
margin: 0;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests del {
|
|
||||||
background-color: #e0f2be;
|
|
||||||
color: #374e0c;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests ins {
|
|
||||||
background-color: #ffcaca;
|
|
||||||
color: #500;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** Test Counts */
|
|
||||||
|
|
||||||
#qunit-tests b.counts { color: black; }
|
|
||||||
#qunit-tests b.passed { color: #5E740B; }
|
|
||||||
#qunit-tests b.failed { color: #710909; }
|
|
||||||
|
|
||||||
#qunit-tests li li {
|
|
||||||
padding: 5px;
|
|
||||||
background-color: #fff;
|
|
||||||
border-bottom: none;
|
|
||||||
list-style-position: inside;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** Passing Styles */
|
|
||||||
|
|
||||||
#qunit-tests li li.pass {
|
|
||||||
color: #3c510c;
|
|
||||||
background-color: #fff;
|
|
||||||
border-left: 10px solid #C6E746;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
|
|
||||||
#qunit-tests .pass .test-name { color: #366097; }
|
|
||||||
|
|
||||||
#qunit-tests .pass .test-actual,
|
|
||||||
#qunit-tests .pass .test-expected { color: #999999; }
|
|
||||||
|
|
||||||
#qunit-banner.qunit-pass { background-color: #C6E746; }
|
|
||||||
|
|
||||||
/*** Failing Styles */
|
|
||||||
|
|
||||||
#qunit-tests li li.fail {
|
|
||||||
color: #710909;
|
|
||||||
background-color: #fff;
|
|
||||||
border-left: 10px solid #EE5757;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests > li:last-child {
|
|
||||||
border-radius: 0 0 5px 5px;
|
|
||||||
-moz-border-radius: 0 0 5px 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
|
|
||||||
#qunit-tests .fail .test-name,
|
|
||||||
#qunit-tests .fail .module-name { color: #000000; }
|
|
||||||
|
|
||||||
#qunit-tests .fail .test-actual { color: #EE5757; }
|
|
||||||
#qunit-tests .fail .test-expected { color: green; }
|
|
||||||
|
|
||||||
#qunit-banner.qunit-fail { background-color: #EE5757; }
|
|
||||||
|
|
||||||
|
|
||||||
/** Result */
|
|
||||||
|
|
||||||
#qunit-testresult {
|
|
||||||
padding: 0.5em 0.5em 0.5em 2.5em;
|
|
||||||
|
|
||||||
color: #2b81af;
|
|
||||||
background-color: #D2E0E6;
|
|
||||||
|
|
||||||
border-bottom: 1px solid white;
|
|
||||||
}
|
|
||||||
#qunit-testresult .module-name {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Fixture */
|
|
||||||
|
|
||||||
#qunit-fixture {
|
|
||||||
position: absolute;
|
|
||||||
top: -10000px;
|
|
||||||
left: -10000px;
|
|
||||||
width: 1000px;
|
|
||||||
height: 1000px;
|
|
||||||
}
|
|
2212
test/qunit-1.12.0.js
2212
test/qunit-1.12.0.js
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,436 @@
|
||||||
|
/*!
|
||||||
|
* QUnit 2.5.0
|
||||||
|
* https://qunitjs.com/
|
||||||
|
*
|
||||||
|
* Copyright jQuery Foundation and other contributors
|
||||||
|
* Released under the MIT license
|
||||||
|
* https://jquery.org/license
|
||||||
|
*
|
||||||
|
* Date: 2018-01-10T02:56Z
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Font Family and Sizes */
|
||||||
|
|
||||||
|
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {
|
||||||
|
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
|
||||||
|
#qunit-tests { font-size: smaller; }
|
||||||
|
|
||||||
|
|
||||||
|
/** Resets */
|
||||||
|
|
||||||
|
#qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Header (excluding toolbar) */
|
||||||
|
|
||||||
|
#qunit-header {
|
||||||
|
padding: 0.5em 0 0.5em 1em;
|
||||||
|
|
||||||
|
color: #8699A4;
|
||||||
|
background-color: #0D3349;
|
||||||
|
|
||||||
|
font-size: 1.5em;
|
||||||
|
line-height: 1em;
|
||||||
|
font-weight: 400;
|
||||||
|
|
||||||
|
border-radius: 5px 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-header a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #C2CCD1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-header a:hover,
|
||||||
|
#qunit-header a:focus {
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-banner {
|
||||||
|
height: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-filteredTest {
|
||||||
|
padding: 0.5em 1em 0.5em 1em;
|
||||||
|
color: #366097;
|
||||||
|
background-color: #F4FF77;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-userAgent {
|
||||||
|
padding: 0.5em 1em 0.5em 1em;
|
||||||
|
color: #FFF;
|
||||||
|
background-color: #2B81AF;
|
||||||
|
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Toolbar */
|
||||||
|
|
||||||
|
#qunit-testrunner-toolbar {
|
||||||
|
padding: 0.5em 1em 0.5em 1em;
|
||||||
|
color: #5E740B;
|
||||||
|
background-color: #EEE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-testrunner-toolbar .clearfix {
|
||||||
|
height: 0;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-testrunner-toolbar label {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-testrunner-toolbar input[type=checkbox],
|
||||||
|
#qunit-testrunner-toolbar input[type=radio] {
|
||||||
|
margin: 3px;
|
||||||
|
vertical-align: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-testrunner-toolbar input[type=text] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 1.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qunit-url-config,
|
||||||
|
.qunit-filter,
|
||||||
|
#qunit-modulefilter {
|
||||||
|
display: inline-block;
|
||||||
|
line-height: 2.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qunit-filter,
|
||||||
|
#qunit-modulefilter {
|
||||||
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qunit-url-config label {
|
||||||
|
margin-right: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-search {
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-search-container:after {
|
||||||
|
position: absolute;
|
||||||
|
right: 0.3em;
|
||||||
|
content: "\25bc";
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown {
|
||||||
|
/* align with #qunit-modulefilter-search */
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 400px;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: 0.8em;
|
||||||
|
|
||||||
|
border: 1px solid #D3D3D3;
|
||||||
|
border-top: none;
|
||||||
|
border-radius: 0 0 .25em .25em;
|
||||||
|
color: #000;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown .clickable.checked {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
background-color: #D2E0E6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown .clickable:hover {
|
||||||
|
color: #FFF;
|
||||||
|
background-color: #0D3349;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-actions {
|
||||||
|
display: block;
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
/* align with #qunit-modulefilter-dropdown-list */
|
||||||
|
font: smaller/1.5em sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown #qunit-modulefilter-actions > * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
max-height: 2.8em;
|
||||||
|
display: block;
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown #qunit-modulefilter-actions > button {
|
||||||
|
float: right;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown #qunit-modulefilter-actions > :last-child {
|
||||||
|
/* insert padding to align with checkbox margins */
|
||||||
|
padding-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown-list {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto;
|
||||||
|
margin: 0;
|
||||||
|
border-top: 2px groove threedhighlight;
|
||||||
|
padding: 0.4em 0 0;
|
||||||
|
font: smaller/1.5em sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown-list li {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-modulefilter-dropdown-list .clickable {
|
||||||
|
display: block;
|
||||||
|
padding-left: 0.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Tests: Pass/Fail */
|
||||||
|
|
||||||
|
#qunit-tests {
|
||||||
|
list-style-position: inside;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li {
|
||||||
|
padding: 0.4em 1em 0.4em 1em;
|
||||||
|
border-bottom: 1px solid #FFF;
|
||||||
|
list-style-position: inside;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests > li {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li.running,
|
||||||
|
#qunit-tests li.pass,
|
||||||
|
#qunit-tests li.fail,
|
||||||
|
#qunit-tests li.skipped,
|
||||||
|
#qunit-tests li.aborted {
|
||||||
|
display: list-item;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests.hidepass {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests.hidepass li.running,
|
||||||
|
#qunit-tests.hidepass li.pass:not(.todo) {
|
||||||
|
visibility: hidden;
|
||||||
|
position: absolute;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li strong {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li.skipped strong {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li a {
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #C2CCD1;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li p a {
|
||||||
|
padding: 0.25em;
|
||||||
|
color: #6B6464;
|
||||||
|
}
|
||||||
|
#qunit-tests li a:hover,
|
||||||
|
#qunit-tests li a:focus {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests li .runtime {
|
||||||
|
float: right;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qunit-assert-list {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
padding: 0.5em;
|
||||||
|
|
||||||
|
background-color: #FFF;
|
||||||
|
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qunit-source {
|
||||||
|
margin: 0.6em 0 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qunit-collapsed {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-top: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests th {
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 0 0.5em 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests pre {
|
||||||
|
margin: 0;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests del {
|
||||||
|
color: #374E0C;
|
||||||
|
background-color: #E0F2BE;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests ins {
|
||||||
|
color: #500;
|
||||||
|
background-color: #FFCACA;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Test Counts */
|
||||||
|
|
||||||
|
#qunit-tests b.counts { color: #000; }
|
||||||
|
#qunit-tests b.passed { color: #5E740B; }
|
||||||
|
#qunit-tests b.failed { color: #710909; }
|
||||||
|
|
||||||
|
#qunit-tests li li {
|
||||||
|
padding: 5px;
|
||||||
|
background-color: #FFF;
|
||||||
|
border-bottom: none;
|
||||||
|
list-style-position: inside;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Passing Styles */
|
||||||
|
|
||||||
|
#qunit-tests li li.pass {
|
||||||
|
color: #3C510C;
|
||||||
|
background-color: #FFF;
|
||||||
|
border-left: 10px solid #C6E746;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
|
||||||
|
#qunit-tests .pass .test-name { color: #366097; }
|
||||||
|
|
||||||
|
#qunit-tests .pass .test-actual,
|
||||||
|
#qunit-tests .pass .test-expected { color: #999; }
|
||||||
|
|
||||||
|
#qunit-banner.qunit-pass { background-color: #C6E746; }
|
||||||
|
|
||||||
|
/*** Failing Styles */
|
||||||
|
|
||||||
|
#qunit-tests li li.fail {
|
||||||
|
color: #710909;
|
||||||
|
background-color: #FFF;
|
||||||
|
border-left: 10px solid #EE5757;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests > li:last-child {
|
||||||
|
border-radius: 0 0 5px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests .fail { color: #000; background-color: #EE5757; }
|
||||||
|
#qunit-tests .fail .test-name,
|
||||||
|
#qunit-tests .fail .module-name { color: #000; }
|
||||||
|
|
||||||
|
#qunit-tests .fail .test-actual { color: #EE5757; }
|
||||||
|
#qunit-tests .fail .test-expected { color: #008000; }
|
||||||
|
|
||||||
|
#qunit-banner.qunit-fail { background-color: #EE5757; }
|
||||||
|
|
||||||
|
|
||||||
|
/*** Aborted tests */
|
||||||
|
#qunit-tests .aborted { color: #000; background-color: orange; }
|
||||||
|
/*** Skipped tests */
|
||||||
|
|
||||||
|
#qunit-tests .skipped {
|
||||||
|
background-color: #EBECE9;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests .qunit-todo-label,
|
||||||
|
#qunit-tests .qunit-skipped-label {
|
||||||
|
background-color: #F4FF77;
|
||||||
|
display: inline-block;
|
||||||
|
font-style: normal;
|
||||||
|
color: #366097;
|
||||||
|
line-height: 1.8em;
|
||||||
|
padding: 0 0.5em;
|
||||||
|
margin: -0.4em 0.4em -0.4em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#qunit-tests .qunit-todo-label {
|
||||||
|
background-color: #EEE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Result */
|
||||||
|
|
||||||
|
#qunit-testresult {
|
||||||
|
color: #2B81AF;
|
||||||
|
background-color: #D2E0E6;
|
||||||
|
|
||||||
|
border-bottom: 1px solid #FFF;
|
||||||
|
}
|
||||||
|
#qunit-testresult .clearfix {
|
||||||
|
height: 0;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
#qunit-testresult .module-name {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
#qunit-testresult-display {
|
||||||
|
padding: 0.5em 1em 0.5em 1em;
|
||||||
|
width: 85%;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
#qunit-testresult-controls {
|
||||||
|
padding: 0.5em 1em 0.5em 1em;
|
||||||
|
width: 10%;
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Fixture */
|
||||||
|
|
||||||
|
#qunit-fixture {
|
||||||
|
position: absolute;
|
||||||
|
top: -10000px;
|
||||||
|
left: -10000px;
|
||||||
|
width: 1000px;
|
||||||
|
height: 1000px;
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -7,7 +7,7 @@
|
||||||
<title>reveal.js - Test Markdown Element Attributes</title>
|
<title>reveal.js - Test Markdown Element Attributes</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -126,7 +126,7 @@
|
||||||
<script src="../js/reveal.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-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test-markdown-element-attributes.js"></script>
|
<script src="test-markdown-element-attributes.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,46 +1,44 @@
|
||||||
|
|
||||||
|
|
||||||
Reveal.addEventListener( 'ready', function() {
|
Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Markdown' );
|
QUnit.module( 'Markdown' );
|
||||||
|
|
||||||
test( 'Vertical separator', function() {
|
QUnit.test( 'Vertical separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QUnit.test( 'Attributes on element header in vertical slides', function( assert ) {
|
||||||
test( 'Attributes on element header in vertical slides', function() {
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.fade-out' ).length, 1, 'found one vertical slide with class fragment.fade-out on header' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.fade-out' ).length, 1, 'found one vertical slide with class fragment.fade-out on header' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section>section h2.fragment.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Attributes on element paragraphs in vertical slides', function() {
|
QUnit.test( 'Attributes on element paragraphs in vertical slides', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Attributes on element list items in vertical slides', function() {
|
QUnit.test( 'Attributes on element list items in vertical slides', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section>section li.fragment.grow' ).length, 3, 'found a vertical slide with three list items with class fragment.grow' );
|
assert.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() {
|
QUnit.test( 'Attributes on element paragraphs in horizontal slides', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-red' ).length, 4, 'found a horizontal slide with four paragraphs with class fragment.grow' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-red' ).length, 4, 'found a horizontal slide with four paragraphs with class fragment.grow' );
|
||||||
});
|
|
||||||
test( 'Attributes on element list items in horizontal slides', function() {
|
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section li.fragment.highlight-green' ).length, 5, 'found a horizontal slide with five list items with class fragment.roll-in' );
|
|
||||||
});
|
|
||||||
test( 'Attributes on element list items in horizontal slides', function() {
|
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section img.reveal.stretch' ).length, 1, 'found a horizontal slide with stretched image, class img.reveal.stretch' );
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Attributes on elements in vertical slides with default element attribute separator', function() {
|
QUnit.test( 'Attributes on element list items in horizontal slides', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section h2.fragment.highlight-red' ).length, 2, 'found two h2 titles with fragment highlight-red in vertical slides with default element attribute separator' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section li.fragment.highlight-green' ).length, 5, 'found a horizontal slide with five list items with class fragment.roll-in' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Attributes on elements in single slides with default element attribute separator', function() {
|
QUnit.test( 'Attributes on element image in horizontal slides', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-blue' ).length, 3, 'found three elements with fragment highlight-blue in single slide with default element attribute separator' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section img.reveal.stretch' ).length, 1, 'found a horizontal slide with stretched image, class img.reveal.stretch' );
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test( 'Attributes on elements in vertical slides with default element attribute separator', function( assert ) {
|
||||||
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section h2.fragment.highlight-red' ).length, 2, 'found two h2 titles with fragment highlight-red in vertical slides with default element attribute separator' );
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test( 'Attributes on elements in single slides with default element attribute separator', function( assert ) {
|
||||||
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section p.fragment.highlight-blue' ).length, 3, 'found three elements with fragment highlight-blue in single slide with default element attribute separator' );
|
||||||
});
|
});
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
Reveal.initialize();
|
Reveal.initialize();
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<title>reveal.js - Test Markdown</title>
|
<title>reveal.js - Test Markdown</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
<div class="reveal" style="display: none;">
|
<div class="reveal" style="display: none;">
|
||||||
|
|
||||||
<div class="slides">
|
<div class="slides">
|
||||||
<section data-markdown="simple.md" data-separator="^\n\n\n" data-separator-vertical="^\n\n"></section>
|
<section data-markdown="simple.md" data-separator="^\r?\n\r?\n\r?\n" data-separator-vertical="^\r?\n\r?\n"></section>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<script src="../plugin/highlight/highlight.js"></script>
|
<script src="../plugin/highlight/highlight.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-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test-markdown-external.js"></script>
|
<script src="test-markdown-external.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,20 @@
|
||||||
|
|
||||||
|
|
||||||
Reveal.addEventListener( 'ready', function() {
|
Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Markdown' );
|
QUnit.module( 'Markdown' );
|
||||||
|
|
||||||
test( 'Vertical separator', function() {
|
QUnit.test( 'Vertical separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Horizontal separator', function() {
|
QUnit.test( 'Horizontal separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section' ).length, 2, 'found two slides' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section' ).length, 2, 'found two slides' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Language highlighter', function() {
|
QUnit.test( 'Language highlighter', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.hljs-keyword' ).length, 1, 'got rendered highlight tag.' );
|
assert.strictEqual( document.querySelectorAll( '.hljs-keyword' ).length, 1, 'got rendered highlight tag.' );
|
||||||
strictEqual( document.querySelector( '.hljs-keyword' ).innerHTML, 'var', 'the same keyword: var.' );
|
assert.strictEqual( document.querySelector( '.hljs-keyword' ).innerHTML, 'var', 'the same keyword: var.' );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
Reveal.initialize();
|
Reveal.initialize();
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<title>reveal.js - Test Markdown Options</title>
|
<title>reveal.js - Test Markdown Options</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
<script src="../lib/js/head.min.js"></script>
|
<script src="../lib/js/head.min.js"></script>
|
||||||
<script src="../js/reveal.js"></script>
|
<script src="../js/reveal.js"></script>
|
||||||
<script src="qunit-1.12.0.js"></script>
|
<script src="qunit-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test-markdown-options.js"></script>
|
<script src="test-markdown-options.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,15 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Markdown' );
|
QUnit.module( 'Markdown' );
|
||||||
|
|
||||||
test( 'Options are set', function() {
|
QUnit.test( 'Options are set', function( assert ) {
|
||||||
strictEqual( marked.defaults.smartypants, true );
|
assert.strictEqual( marked.defaults.smartypants, true );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Smart quotes are activated', function() {
|
QUnit.test( 'Smart quotes are activated', function( assert ) {
|
||||||
var text = document.querySelector( '.reveal .slides>section>p' ).textContent;
|
var text = document.querySelector( '.reveal .slides>section>p' ).textContent;
|
||||||
|
|
||||||
strictEqual( /['"]/.test( text ), false );
|
assert.strictEqual( /['"]/.test( text ), false );
|
||||||
strictEqual( /[“”‘’]/.test( text ), true );
|
assert.strictEqual( /[“”‘’]/.test( text ), true );
|
||||||
});
|
});
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
@ -18,7 +18,8 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.initialize({
|
Reveal.initialize({
|
||||||
dependencies: [
|
dependencies: [
|
||||||
{ src: '../plugin/markdown/marked.js' },
|
{ src: '../plugin/markdown/marked.js' },
|
||||||
{ src: '../plugin/markdown/markdown.js' },
|
// Test loading JS files with query strings
|
||||||
|
{ src: '../plugin/markdown/markdown.js?query=string' },
|
||||||
],
|
],
|
||||||
markdown: {
|
markdown: {
|
||||||
smartypants: true
|
smartypants: true
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<title>reveal.js - Test Markdown Attributes</title>
|
<title>reveal.js - Test Markdown Attributes</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
<script src="../js/reveal.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-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test-markdown-slide-attributes.js"></script>
|
<script src="test-markdown-slide-attributes.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,47 +1,44 @@
|
||||||
|
|
||||||
|
|
||||||
Reveal.addEventListener( 'ready', function() {
|
Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Markdown' );
|
QUnit.module( 'Markdown' );
|
||||||
|
|
||||||
test( 'Vertical separator', function() {
|
QUnit.test( 'Vertical separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 6, 'found six vertical slides' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 6, 'found six vertical slides' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Id on slide', function() {
|
QUnit.test( 'Id on slide', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section#slide2' ).length, 1, 'found one slide with id slide2' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section#slide2' ).length, 1, 'found one slide with id slide2' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'data-background attributes', function() {
|
QUnit.test( 'data-background attributes', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A0C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A0C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'data-transition attributes', function() {
|
QUnit.test( 'data-transition attributes', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="zoom"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="zoom"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'data-background attributes with default separator', function() {
|
QUnit.test( 'data-background attributes with default separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A7C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#A7C66B"]' ).length, 1, 'found one vertical slide with data-background="#A0C66B"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-background="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'data-transition attributes with default separator', function() {
|
QUnit.test( 'data-transition attributes with default separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="concave"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="concave"]' ).length, 1, 'found one vertical slide with data-transition="zoom"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section[data-transition="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'data-transition attributes with inline content', function() {
|
QUnit.test( 'data-transition attributes with inline content', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
|
||||||
});
|
});
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
Reveal.initialize();
|
Reveal.initialize();
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<title>reveal.js - Test Markdown</title>
|
<title>reveal.js - Test Markdown</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
<script src="../js/reveal.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-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test-markdown.js"></script>
|
<script src="test-markdown.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,11 @@
|
||||||
|
|
||||||
|
|
||||||
Reveal.addEventListener( 'ready', function() {
|
Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Markdown' );
|
QUnit.module( 'Markdown' );
|
||||||
|
|
||||||
test( 'Vertical separator', function() {
|
QUnit.test( 'Vertical separator', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
Reveal.initialize();
|
Reveal.initialize();
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="../css/print/pdf.css">
|
<link rel="stylesheet" href="../css/print/pdf.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
|
|
||||||
<script src="../lib/js/head.min.js"></script>
|
<script src="../lib/js/head.min.js"></script>
|
||||||
<script src="../js/reveal.js"></script>
|
<script src="../js/reveal.js"></script>
|
||||||
<script src="qunit-1.12.0.js"></script>
|
<script src="qunit-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test-pdf.js"></script>
|
<script src="test-pdf.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
|
|
||||||
Reveal.addEventListener( 'ready', function() {
|
Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
// Only one test for now, we're mainly ensuring that there
|
// Only one test for now, we're mainly ensuring that there
|
||||||
// are no execution errors when running PDF mode
|
// are no execution errors when running PDF mode
|
||||||
|
|
||||||
test( 'Reveal.isReady', function() {
|
QUnit.test( 'Reveal.isReady', function( assert ) {
|
||||||
strictEqual( Reveal.isReady(), true, 'returns true' );
|
assert.strictEqual( Reveal.isReady(), true, 'returns true' );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
Reveal.initialize({ pdf: true });
|
Reveal.initialize({ pdf: true });
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<title>reveal.js - Tests</title>
|
<title>reveal.js - Tests</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="../css/reveal.css">
|
<link rel="stylesheet" href="../css/reveal.css">
|
||||||
<link rel="stylesheet" href="qunit-1.12.0.css">
|
<link rel="stylesheet" href="qunit-2.5.0.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="overflow: auto;">
|
<body style="overflow: auto;">
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
|
|
||||||
<script src="../lib/js/head.min.js"></script>
|
<script src="../lib/js/head.min.js"></script>
|
||||||
<script src="../js/reveal.js"></script>
|
<script src="../js/reveal.js"></script>
|
||||||
<script src="qunit-1.12.0.js"></script>
|
<script src="qunit-2.5.0.js"></script>
|
||||||
|
|
||||||
<script src="test.js"></script>
|
<script src="test.js"></script>
|
||||||
|
|
||||||
|
|
372
test/test.js
372
test/test.js
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
// These tests expect the DOM to contain a presentation
|
// These tests expect the DOM to contain a presentation
|
||||||
// with the following slide structure:
|
// with the following slide structure:
|
||||||
//
|
//
|
||||||
|
@ -8,7 +7,6 @@
|
||||||
// 3 - Two fragments with same data-fragment-index
|
// 3 - Two fragments with same data-fragment-index
|
||||||
// 4
|
// 4
|
||||||
|
|
||||||
|
|
||||||
Reveal.addEventListener( 'ready', function() {
|
Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
@ -16,16 +14,16 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'DOM' );
|
QUnit.module( 'DOM' );
|
||||||
|
|
||||||
test( 'Initial slides classes', function() {
|
QUnit.test( 'Initial slides classes', function( assert ) {
|
||||||
var horizontalSlides = document.querySelectorAll( '.reveal .slides>section' )
|
var horizontalSlides = document.querySelectorAll( '.reveal .slides>section' )
|
||||||
|
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section.past' ).length, 0, 'no .past slides' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section.past' ).length, 0, 'no .past slides' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section.present' ).length, 1, 'one .present slide' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section.present' ).length, 1, 'one .present slide' );
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides>section.future' ).length, horizontalSlides.length - 1, 'remaining horizontal slides are .future' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section.future' ).length, horizontalSlides.length - 1, 'remaining horizontal slides are .future' );
|
||||||
|
|
||||||
strictEqual( document.querySelectorAll( '.reveal .slides section.stack' ).length, 2, 'two .stacks' );
|
assert.strictEqual( document.querySelectorAll( '.reveal .slides section.stack' ).length, 2, 'two .stacks' );
|
||||||
|
|
||||||
ok( document.querySelectorAll( '.reveal .slides section.stack' )[0].querySelectorAll( '.future' ).length > 0, 'vertical slides are given .future' );
|
assert.ok( document.querySelectorAll( '.reveal .slides section.stack' )[0].querySelectorAll( '.future' ).length > 0, 'vertical slides are given .future' );
|
||||||
});
|
});
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
@ -33,203 +31,203 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'API' );
|
QUnit.module( 'API' );
|
||||||
|
|
||||||
test( 'Reveal.isReady', function() {
|
QUnit.test( 'Reveal.isReady', function( assert ) {
|
||||||
strictEqual( Reveal.isReady(), true, 'returns true' );
|
assert.strictEqual( Reveal.isReady(), true, 'returns true' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.isOverview', function() {
|
QUnit.test( 'Reveal.isOverview', function( assert ) {
|
||||||
strictEqual( Reveal.isOverview(), false, 'false by default' );
|
assert.strictEqual( Reveal.isOverview(), false, 'false by default' );
|
||||||
|
|
||||||
Reveal.toggleOverview();
|
Reveal.toggleOverview();
|
||||||
strictEqual( Reveal.isOverview(), true, 'true after toggling on' );
|
assert.strictEqual( Reveal.isOverview(), true, 'true after toggling on' );
|
||||||
|
|
||||||
Reveal.toggleOverview();
|
Reveal.toggleOverview();
|
||||||
strictEqual( Reveal.isOverview(), false, 'false after toggling off' );
|
assert.strictEqual( Reveal.isOverview(), false, 'false after toggling off' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.isPaused', function() {
|
QUnit.test( 'Reveal.isPaused', function( assert ) {
|
||||||
strictEqual( Reveal.isPaused(), false, 'false by default' );
|
assert.strictEqual( Reveal.isPaused(), false, 'false by default' );
|
||||||
|
|
||||||
Reveal.togglePause();
|
Reveal.togglePause();
|
||||||
strictEqual( Reveal.isPaused(), true, 'true after pausing' );
|
assert.strictEqual( Reveal.isPaused(), true, 'true after pausing' );
|
||||||
|
|
||||||
Reveal.togglePause();
|
Reveal.togglePause();
|
||||||
strictEqual( Reveal.isPaused(), false, 'false after resuming' );
|
assert.strictEqual( Reveal.isPaused(), false, 'false after resuming' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.isFirstSlide', function() {
|
QUnit.test( 'Reveal.isFirstSlide', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' );
|
assert.strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' );
|
||||||
|
|
||||||
Reveal.slide( 1, 0 );
|
Reveal.slide( 1, 0 );
|
||||||
strictEqual( Reveal.isFirstSlide(), false, 'false after Reveal.slide( 1, 0 )' );
|
assert.strictEqual( Reveal.isFirstSlide(), false, 'false after Reveal.slide( 1, 0 )' );
|
||||||
|
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' );
|
assert.strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 0, 0 )' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.isFirstSlide after vertical slide', function() {
|
QUnit.test( 'Reveal.isFirstSlide after vertical slide', function( assert ) {
|
||||||
Reveal.slide( 1, 1 );
|
Reveal.slide( 1, 1 );
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( 0, 0 )' );
|
assert.strictEqual( Reveal.isFirstSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( 0, 0 )' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.isLastSlide', function() {
|
QUnit.test( 'Reveal.isLastSlide', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' );
|
assert.strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' );
|
||||||
|
|
||||||
var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
|
var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
|
||||||
|
|
||||||
Reveal.slide( lastSlideIndex, 0 );
|
Reveal.slide( lastSlideIndex, 0 );
|
||||||
strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( '+ lastSlideIndex +', 0 )' );
|
assert.strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( '+ lastSlideIndex +', 0 )' );
|
||||||
|
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' );
|
assert.strictEqual( Reveal.isLastSlide(), false, 'false after Reveal.slide( 0, 0 )' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.isLastSlide after vertical slide', function() {
|
QUnit.test( 'Reveal.isLastSlide after vertical slide', function( assert ) {
|
||||||
var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
|
var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
|
||||||
|
|
||||||
Reveal.slide( 1, 1 );
|
Reveal.slide( 1, 1 );
|
||||||
Reveal.slide( lastSlideIndex );
|
Reveal.slide( lastSlideIndex );
|
||||||
strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( '+ lastSlideIndex +', 0 )' );
|
assert.strictEqual( Reveal.isLastSlide(), true, 'true after Reveal.slide( 1, 1 ) and then Reveal.slide( '+ lastSlideIndex +', 0 )' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getTotalSlides', function() {
|
QUnit.test( 'Reveal.getTotalSlides', function( assert ) {
|
||||||
strictEqual( Reveal.getTotalSlides(), 8, 'eight slides in total' );
|
assert.strictEqual( Reveal.getTotalSlides(), 8, 'eight slides in total' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getIndices', function() {
|
QUnit.test( 'Reveal.getIndices', function( assert ) {
|
||||||
var indices = Reveal.getIndices();
|
var indices = Reveal.getIndices();
|
||||||
|
|
||||||
ok( indices.hasOwnProperty( 'h' ), 'h exists' );
|
assert.ok( indices.hasOwnProperty( 'h' ), 'h exists' );
|
||||||
ok( indices.hasOwnProperty( 'v' ), 'v exists' );
|
assert.ok( indices.hasOwnProperty( 'v' ), 'v exists' );
|
||||||
ok( indices.hasOwnProperty( 'f' ), 'f exists' );
|
assert.ok( indices.hasOwnProperty( 'f' ), 'f exists' );
|
||||||
|
|
||||||
Reveal.slide( 1, 0 );
|
Reveal.slide( 1, 0 );
|
||||||
strictEqual( Reveal.getIndices().h, 1, 'h 1' );
|
assert.strictEqual( Reveal.getIndices().h, 1, 'h 1' );
|
||||||
strictEqual( Reveal.getIndices().v, 0, 'v 0' );
|
assert.strictEqual( Reveal.getIndices().v, 0, 'v 0' );
|
||||||
|
|
||||||
Reveal.slide( 1, 2 );
|
Reveal.slide( 1, 2 );
|
||||||
strictEqual( Reveal.getIndices().h, 1, 'h 1' );
|
assert.strictEqual( Reveal.getIndices().h, 1, 'h 1' );
|
||||||
strictEqual( Reveal.getIndices().v, 2, 'v 2' );
|
assert.strictEqual( Reveal.getIndices().v, 2, 'v 2' );
|
||||||
|
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.getIndices().h, 0, 'h 0' );
|
assert.strictEqual( Reveal.getIndices().h, 0, 'h 0' );
|
||||||
strictEqual( Reveal.getIndices().v, 0, 'v 0' );
|
assert.strictEqual( Reveal.getIndices().v, 0, 'v 0' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getSlide', function() {
|
QUnit.test( 'Reveal.getSlide', function( assert ) {
|
||||||
equal( Reveal.getSlide( 0 ), document.querySelector( '.reveal .slides>section:first-child' ), 'gets correct first slide' );
|
assert.equal( Reveal.getSlide( 0 ), document.querySelector( '.reveal .slides>section:first-child' ), 'gets correct first slide' );
|
||||||
equal( Reveal.getSlide( 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)' ), 'no v index returns stack' );
|
assert.equal( Reveal.getSlide( 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)' ), 'no v index returns stack' );
|
||||||
equal( Reveal.getSlide( 1, 0 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(1)' ), 'v index 0 returns first vertical child' );
|
assert.equal( Reveal.getSlide( 1, 0 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(1)' ), 'v index 0 returns first vertical child' );
|
||||||
equal( Reveal.getSlide( 1, 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(2)' ), 'v index 1 returns second vertical child' );
|
assert.equal( Reveal.getSlide( 1, 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)>section:nth-child(2)' ), 'v index 1 returns second vertical child' );
|
||||||
|
|
||||||
strictEqual( Reveal.getSlide( 100 ), undefined, 'undefined when out of horizontal bounds' );
|
assert.strictEqual( Reveal.getSlide( 100 ), undefined, 'undefined when out of horizontal bounds' );
|
||||||
strictEqual( Reveal.getSlide( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
|
assert.strictEqual( Reveal.getSlide( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getSlideBackground', function() {
|
QUnit.test( 'Reveal.getSlideBackground', function( assert ) {
|
||||||
equal( Reveal.getSlideBackground( 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:first-child' ), 'gets correct first background' );
|
assert.equal( Reveal.getSlideBackground( 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:first-child' ), 'gets correct first background' );
|
||||||
equal( Reveal.getSlideBackground( 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2)' ), 'no v index returns stack' );
|
assert.equal( Reveal.getSlideBackground( 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2)' ), 'no v index returns stack' );
|
||||||
equal( Reveal.getSlideBackground( 1, 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(1)' ), 'v index 0 returns first vertical child' );
|
assert.equal( Reveal.getSlideBackground( 1, 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(1)' ), 'v index 0 returns first vertical child' );
|
||||||
equal( Reveal.getSlideBackground( 1, 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(2)' ), 'v index 1 returns second vertical child' );
|
assert.equal( Reveal.getSlideBackground( 1, 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(2)' ), 'v index 1 returns second vertical child' );
|
||||||
|
|
||||||
strictEqual( Reveal.getSlideBackground( 100 ), undefined, 'undefined when out of horizontal bounds' );
|
assert.strictEqual( Reveal.getSlideBackground( 100 ), undefined, 'undefined when out of horizontal bounds' );
|
||||||
strictEqual( Reveal.getSlideBackground( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
|
assert.strictEqual( Reveal.getSlideBackground( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getSlideNotes', function() {
|
QUnit.test( 'Reveal.getSlideNotes', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
ok( Reveal.getSlideNotes() === 'speaker notes 1', 'works with <aside class="notes">' );
|
assert.ok( Reveal.getSlideNotes() === 'speaker notes 1', 'works with <aside class="notes">' );
|
||||||
|
|
||||||
Reveal.slide( 1, 0 );
|
Reveal.slide( 1, 0 );
|
||||||
ok( Reveal.getSlideNotes() === 'speaker notes 2', 'works with <section data-notes="">' );
|
assert.ok( Reveal.getSlideNotes() === 'speaker notes 2', 'works with <section data-notes="">' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getPreviousSlide/getCurrentSlide', function() {
|
QUnit.test( 'Reveal.getPreviousSlide/getCurrentSlide', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
Reveal.slide( 1, 0 );
|
Reveal.slide( 1, 0 );
|
||||||
|
|
||||||
var firstSlide = document.querySelector( '.reveal .slides>section:first-child' );
|
var firstSlide = document.querySelector( '.reveal .slides>section:first-child' );
|
||||||
var secondSlide = document.querySelector( '.reveal .slides>section:nth-child(2)>section' );
|
var secondSlide = document.querySelector( '.reveal .slides>section:nth-child(2)>section' );
|
||||||
|
|
||||||
equal( Reveal.getPreviousSlide(), firstSlide, 'previous is slide #0' );
|
assert.equal( Reveal.getPreviousSlide(), firstSlide, 'previous is slide #0' );
|
||||||
equal( Reveal.getCurrentSlide(), secondSlide, 'current is slide #1' );
|
assert.equal( Reveal.getCurrentSlide(), secondSlide, 'current is slide #1' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getProgress', function() {
|
QUnit.test( 'Reveal.getProgress', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( Reveal.getProgress(), 0, 'progress is 0 on first slide' );
|
assert.strictEqual( Reveal.getProgress(), 0, 'progress is 0 on first slide' );
|
||||||
|
|
||||||
var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
|
var lastSlideIndex = document.querySelectorAll( '.reveal .slides>section' ).length - 1;
|
||||||
|
|
||||||
Reveal.slide( lastSlideIndex, 0 );
|
Reveal.slide( lastSlideIndex, 0 );
|
||||||
strictEqual( Reveal.getProgress(), 1, 'progress is 1 on last slide' );
|
assert.strictEqual( Reveal.getProgress(), 1, 'progress is 1 on last slide' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getScale', function() {
|
QUnit.test( 'Reveal.getScale', function( assert ) {
|
||||||
ok( typeof Reveal.getScale() === 'number', 'has scale' );
|
assert.ok( typeof Reveal.getScale() === 'number', 'has scale' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.getConfig', function() {
|
QUnit.test( 'Reveal.getConfig', function( assert ) {
|
||||||
ok( typeof Reveal.getConfig() === 'object', 'has config' );
|
assert.ok( typeof Reveal.getConfig() === 'object', 'has config' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.configure', function() {
|
QUnit.test( 'Reveal.configure', function( assert ) {
|
||||||
strictEqual( Reveal.getConfig().loop, false, '"loop" is false to start with' );
|
assert.strictEqual( Reveal.getConfig().loop, false, '"loop" is false to start with' );
|
||||||
|
|
||||||
Reveal.configure({ loop: true });
|
Reveal.configure({ loop: true });
|
||||||
strictEqual( Reveal.getConfig().loop, true, '"loop" has changed to true' );
|
assert.strictEqual( Reveal.getConfig().loop, true, '"loop" has changed to true' );
|
||||||
|
|
||||||
Reveal.configure({ loop: false, customTestValue: 1 });
|
Reveal.configure({ loop: false, customTestValue: 1 });
|
||||||
strictEqual( Reveal.getConfig().customTestValue, 1, 'supports custom values' );
|
assert.strictEqual( Reveal.getConfig().customTestValue, 1, 'supports custom values' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.availableRoutes', function() {
|
QUnit.test( 'Reveal.availableRoutes', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
deepEqual( Reveal.availableRoutes(), { left: false, up: false, down: false, right: true }, 'correct for first slide' );
|
assert.deepEqual( Reveal.availableRoutes(), { left: false, up: false, down: false, right: true }, 'correct for first slide' );
|
||||||
|
|
||||||
Reveal.slide( 1, 0 );
|
Reveal.slide( 1, 0 );
|
||||||
deepEqual( Reveal.availableRoutes(), { left: true, up: false, down: true, right: true }, 'correct for vertical slide' );
|
assert.deepEqual( Reveal.availableRoutes(), { left: true, up: false, down: true, right: true }, 'correct for vertical slide' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.next', function() {
|
QUnit.test( 'Reveal.next', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
|
|
||||||
// Step through vertical child slides
|
// Step through vertical child slides
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 1, v: 0, f: undefined } );
|
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 0, f: undefined } );
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 1, v: 1, f: undefined } );
|
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 1, f: undefined } );
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined } );
|
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined } );
|
||||||
|
|
||||||
// Step through fragments
|
// Step through fragments
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 } );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 } );
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 } );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 } );
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 } );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 } );
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 } );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 } );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.next at end', function() {
|
QUnit.test( 'Reveal.next at end', function( assert ) {
|
||||||
Reveal.slide( 3 );
|
Reveal.slide( 3 );
|
||||||
|
|
||||||
// We're at the end, this should have no effect
|
// We're at the end, this should have no effect
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
|
assert.deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
|
assert.deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -238,121 +236,123 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Fragments' );
|
QUnit.module( 'Fragments' );
|
||||||
|
|
||||||
test( 'Sliding to fragments', function() {
|
QUnit.test( 'Sliding to fragments', function( assert ) {
|
||||||
Reveal.slide( 2, 0, -1 );
|
Reveal.slide( 2, 0, -1 );
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 }, 'Reveal.slide( 2, 0, -1 )' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 }, 'Reveal.slide( 2, 0, -1 )' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0, 0 );
|
Reveal.slide( 2, 0, 0 );
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'Reveal.slide( 2, 0, 0 )' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'Reveal.slide( 2, 0, 0 )' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0, 2 );
|
Reveal.slide( 2, 0, 2 );
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'Reveal.slide( 2, 0, 2 )' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'Reveal.slide( 2, 0, 2 )' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0, 1 );
|
Reveal.slide( 2, 0, 1 );
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'Reveal.slide( 2, 0, 1 )' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'Reveal.slide( 2, 0, 1 )' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Hiding all fragments', function() {
|
QUnit.test( 'Hiding all fragments', function( assert ) {
|
||||||
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0, 0 );
|
Reveal.slide( 2, 0, 0 );
|
||||||
strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 1, 'one fragment visible when index is 0' );
|
assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 1, 'one fragment visible when index is 0' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0, -1 );
|
Reveal.slide( 2, 0, -1 );
|
||||||
strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when index is -1' );
|
assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when index is -1' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Current fragment', function() {
|
QUnit.test( 'Current fragment', function( assert ) {
|
||||||
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0 );
|
Reveal.slide( 2, 0 );
|
||||||
strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment at index -1' );
|
assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment at index -1' );
|
||||||
|
|
||||||
Reveal.slide( 2, 0, 0 );
|
Reveal.slide( 2, 0, 0 );
|
||||||
strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 1, 'one current fragment at index 0' );
|
assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 1, 'one current fragment at index 0' );
|
||||||
|
|
||||||
Reveal.slide( 1, 0, 0 );
|
Reveal.slide( 1, 0, 0 );
|
||||||
strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to previous slide' );
|
assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to previous slide' );
|
||||||
|
|
||||||
Reveal.slide( 3, 0, 0 );
|
Reveal.slide( 3, 0, 0 );
|
||||||
strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to next slide' );
|
assert.strictEqual( fragmentSlide.querySelectorAll( '.fragment.current-fragment' ).length, 0, 'no current fragment when navigating to next slide' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Stepping through fragments', function() {
|
QUnit.test( 'Stepping through fragments', function( assert ) {
|
||||||
Reveal.slide( 2, 0, -1 );
|
Reveal.slide( 2, 0, -1 );
|
||||||
|
|
||||||
// forwards:
|
// forwards:
|
||||||
|
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'next() goes to next fragment' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'next() goes to next fragment' );
|
||||||
|
|
||||||
Reveal.right();
|
Reveal.right();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'right() goes to next fragment' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'right() goes to next fragment' );
|
||||||
|
|
||||||
Reveal.down();
|
Reveal.down();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'down() goes to next fragment' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'down() goes to next fragment' );
|
||||||
|
|
||||||
Reveal.down(); // moves to f #3
|
Reveal.down(); // moves to f #3
|
||||||
|
|
||||||
// backwards:
|
// backwards:
|
||||||
|
|
||||||
Reveal.prev();
|
Reveal.prev();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'prev() goes to prev fragment' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 2 }, 'prev() goes to prev fragment' );
|
||||||
|
|
||||||
Reveal.left();
|
Reveal.left();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'left() goes to prev fragment' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'left() goes to prev fragment' );
|
||||||
|
|
||||||
Reveal.up();
|
Reveal.up();
|
||||||
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'up() goes to prev fragment' );
|
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 }, 'up() goes to prev fragment' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Stepping past fragments', function() {
|
QUnit.test( 'Stepping past fragments', function( assert ) {
|
||||||
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
||||||
|
|
||||||
Reveal.slide( 0, 0, 0 );
|
Reveal.slide( 0, 0, 0 );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when on previous slide' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 0, 'no fragments visible when on previous slide' );
|
||||||
|
|
||||||
Reveal.slide( 3, 0, 0 );
|
Reveal.slide( 3, 0, 0 );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 3, 'all fragments visible when on future slide' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 3, 'all fragments visible when on future slide' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Fragment indices', function() {
|
QUnit.test( 'Fragment indices', function( assert ) {
|
||||||
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(2)' );
|
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(2)' );
|
||||||
|
|
||||||
Reveal.slide( 3, 0, 0 );
|
Reveal.slide( 3, 0, 0 );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 2, 'both fragments of same index are shown' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment.visible' ).length, 2, 'both fragments of same index are shown' );
|
||||||
|
|
||||||
// This slide has three fragments, first one is index 0, second and third have index 1
|
// This slide has three fragments, first one is index 0, second and third have index 1
|
||||||
Reveal.slide( 2, 2, 0 );
|
Reveal.slide( 2, 2, 0 );
|
||||||
equal( Reveal.getIndices().f, 0, 'returns correct index for first fragment' );
|
assert.equal( Reveal.getIndices().f, 0, 'returns correct index for first fragment' );
|
||||||
|
|
||||||
Reveal.slide( 2, 2, 1 );
|
Reveal.slide( 2, 2, 1 );
|
||||||
equal( Reveal.getIndices().f, 1, 'returns correct index for two fragments with same index' );
|
assert.equal( Reveal.getIndices().f, 1, 'returns correct index for two fragments with same index' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Index generation', function() {
|
QUnit.test( 'Index generation', function( assert ) {
|
||||||
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
|
||||||
|
|
||||||
// These have no indices defined to start with
|
// These have no indices defined to start with
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '2' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '2' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Index normalization', function() {
|
QUnit.test( 'Index normalization', function( assert ) {
|
||||||
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(3)' );
|
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(3)' );
|
||||||
|
|
||||||
// These start out as 1-4-4 and should normalize to 0-1-1
|
// These start out as 1-4-4 and should normalize to 0-1-1
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
|
||||||
equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '1' );
|
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '1' );
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( 'fragmentshown event', function() {
|
QUnit.test( 'fragmentshown event', function( assert ) {
|
||||||
expect( 2 );
|
assert.expect( 2 );
|
||||||
|
var done = assert.async( 2 );
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'fragmentshown', _onEvent );
|
Reveal.addEventListener( 'fragmentshown', _onEvent );
|
||||||
|
@ -364,16 +364,16 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.next();
|
Reveal.next();
|
||||||
Reveal.prev(); // shouldn't fire fragmentshown
|
Reveal.prev(); // shouldn't fire fragmentshown
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
Reveal.removeEventListener( 'fragmentshown', _onEvent );
|
Reveal.removeEventListener( 'fragmentshown', _onEvent );
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( 'fragmenthidden event', function() {
|
QUnit.test( 'fragmenthidden event', function( assert ) {
|
||||||
expect( 2 );
|
assert.expect( 2 );
|
||||||
|
var done = assert.async( 2 );
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'fragmenthidden', _onEvent );
|
Reveal.addEventListener( 'fragmenthidden', _onEvent );
|
||||||
|
@ -384,8 +384,6 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.prev();
|
Reveal.prev();
|
||||||
Reveal.next(); // shouldn't fire fragmenthidden
|
Reveal.next(); // shouldn't fire fragmenthidden
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
Reveal.removeEventListener( 'fragmenthidden', _onEvent );
|
Reveal.removeEventListener( 'fragmenthidden', _onEvent );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -395,50 +393,52 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Auto Sliding' );
|
QUnit.module( 'Auto Sliding' );
|
||||||
|
|
||||||
test( 'Reveal.isAutoSliding', function() {
|
QUnit.test( 'Reveal.isAutoSliding', function( assert ) {
|
||||||
strictEqual( Reveal.isAutoSliding(), false, 'false by default' );
|
assert.strictEqual( Reveal.isAutoSliding(), false, 'false by default' );
|
||||||
|
|
||||||
Reveal.configure({ autoSlide: 10000 });
|
Reveal.configure({ autoSlide: 10000 });
|
||||||
strictEqual( Reveal.isAutoSliding(), true, 'true after starting' );
|
assert.strictEqual( Reveal.isAutoSliding(), true, 'true after starting' );
|
||||||
|
|
||||||
Reveal.configure({ autoSlide: 0 });
|
Reveal.configure({ autoSlide: 0 });
|
||||||
strictEqual( Reveal.isAutoSliding(), false, 'false after setting to 0' );
|
assert.strictEqual( Reveal.isAutoSliding(), false, 'false after setting to 0' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Reveal.toggleAutoSlide', function() {
|
QUnit.test( 'Reveal.toggleAutoSlide', function( assert ) {
|
||||||
Reveal.configure({ autoSlide: 10000 });
|
Reveal.configure({ autoSlide: 10000 });
|
||||||
|
|
||||||
Reveal.toggleAutoSlide();
|
Reveal.toggleAutoSlide();
|
||||||
strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' );
|
assert.strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' );
|
||||||
Reveal.toggleAutoSlide();
|
Reveal.toggleAutoSlide();
|
||||||
strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' );
|
assert.strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' );
|
||||||
|
|
||||||
Reveal.configure({ autoSlide: 0 });
|
Reveal.configure({ autoSlide: 0 });
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( 'autoslidepaused', function() {
|
QUnit.test( 'autoslidepaused', function( assert ) {
|
||||||
expect( 1 );
|
assert.expect( 1 );
|
||||||
|
var done = assert.async();
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'autoslidepaused', _onEvent );
|
Reveal.addEventListener( 'autoslidepaused', _onEvent );
|
||||||
Reveal.configure({ autoSlide: 10000 });
|
Reveal.configure({ autoSlide: 10000 });
|
||||||
Reveal.toggleAutoSlide();
|
Reveal.toggleAutoSlide();
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
Reveal.configure({ autoSlide: 0 });
|
Reveal.configure({ autoSlide: 0 });
|
||||||
Reveal.removeEventListener( 'autoslidepaused', _onEvent );
|
Reveal.removeEventListener( 'autoslidepaused', _onEvent );
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( 'autoslideresumed', function() {
|
QUnit.test( 'autoslideresumed', function( assert ) {
|
||||||
expect( 1 );
|
assert.expect( 1 );
|
||||||
|
var done = assert.async();
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'autoslideresumed', _onEvent );
|
Reveal.addEventListener( 'autoslideresumed', _onEvent );
|
||||||
|
@ -446,8 +446,6 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.toggleAutoSlide();
|
Reveal.toggleAutoSlide();
|
||||||
Reveal.toggleAutoSlide();
|
Reveal.toggleAutoSlide();
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
Reveal.configure({ autoSlide: 0 });
|
Reveal.configure({ autoSlide: 0 });
|
||||||
Reveal.removeEventListener( 'autoslideresumed', _onEvent );
|
Reveal.removeEventListener( 'autoslideresumed', _onEvent );
|
||||||
|
@ -459,36 +457,36 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Configuration' );
|
QUnit.module( 'Configuration' );
|
||||||
|
|
||||||
test( 'Controls', function() {
|
QUnit.test( 'Controls', function( assert ) {
|
||||||
var controlsElement = document.querySelector( '.reveal>.controls' );
|
var controlsElement = document.querySelector( '.reveal>.controls' );
|
||||||
|
|
||||||
Reveal.configure({ controls: false });
|
Reveal.configure({ controls: false });
|
||||||
equal( controlsElement.style.display, 'none', 'controls are hidden' );
|
assert.equal( controlsElement.style.display, 'none', 'controls are hidden' );
|
||||||
|
|
||||||
Reveal.configure({ controls: true });
|
Reveal.configure({ controls: true });
|
||||||
equal( controlsElement.style.display, 'block', 'controls are visible' );
|
assert.equal( controlsElement.style.display, 'block', 'controls are visible' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Progress', function() {
|
QUnit.test( 'Progress', function( assert ) {
|
||||||
var progressElement = document.querySelector( '.reveal>.progress' );
|
var progressElement = document.querySelector( '.reveal>.progress' );
|
||||||
|
|
||||||
Reveal.configure({ progress: false });
|
Reveal.configure({ progress: false });
|
||||||
equal( progressElement.style.display, 'none', 'progress are hidden' );
|
assert.equal( progressElement.style.display, 'none', 'progress are hidden' );
|
||||||
|
|
||||||
Reveal.configure({ progress: true });
|
Reveal.configure({ progress: true });
|
||||||
equal( progressElement.style.display, 'block', 'progress are visible' );
|
assert.equal( progressElement.style.display, 'block', 'progress are visible' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'Loop', function() {
|
QUnit.test( 'Loop', function( assert ) {
|
||||||
Reveal.configure({ loop: true });
|
Reveal.configure({ loop: true });
|
||||||
|
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
|
|
||||||
Reveal.left();
|
Reveal.left();
|
||||||
notEqual( Reveal.getIndices().h, 0, 'looped from start to end' );
|
assert.notEqual( Reveal.getIndices().h, 0, 'looped from start to end' );
|
||||||
|
|
||||||
Reveal.right();
|
Reveal.right();
|
||||||
equal( Reveal.getIndices().h, 0, 'looped from end to start' );
|
assert.equal( Reveal.getIndices().h, 0, 'looped from end to start' );
|
||||||
|
|
||||||
Reveal.configure({ loop: false });
|
Reveal.configure({ loop: false });
|
||||||
});
|
});
|
||||||
|
@ -499,34 +497,34 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Lazy-Loading' );
|
QUnit.module( 'Lazy-Loading' );
|
||||||
|
|
||||||
test( 'img with data-src', function() {
|
QUnit.test( 'img with data-src', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' );
|
assert.strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'video with data-src', function() {
|
QUnit.test( 'video with data-src', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' );
|
assert.strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'audio with data-src', function() {
|
QUnit.test( 'audio with data-src', function( assert ) {
|
||||||
strictEqual( document.querySelectorAll( '.reveal section audio[src]' ).length, 1, 'Audio source has been set' );
|
assert.strictEqual( document.querySelectorAll( '.reveal section audio[src]' ).length, 1, 'Audio source has been set' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'iframe with data-src', function() {
|
QUnit.test( 'iframe with data-src', function( assert ) {
|
||||||
Reveal.slide( 0, 0 );
|
Reveal.slide( 0, 0 );
|
||||||
strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
|
assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
|
||||||
Reveal.slide( 2, 1 );
|
Reveal.slide( 2, 1 );
|
||||||
strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 1, 'Iframe source is set' );
|
assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 1, 'Iframe source is set' );
|
||||||
Reveal.slide( 2, 2 );
|
Reveal.slide( 2, 2 );
|
||||||
strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
|
assert.strictEqual( document.querySelectorAll( '.reveal section iframe[src]' ).length, 0, 'Iframe source is not set' );
|
||||||
});
|
});
|
||||||
|
|
||||||
test( 'background images', function() {
|
QUnit.test( 'background images', function( assert ) {
|
||||||
var imageSource1 = Reveal.getSlide( 0 ).getAttribute( 'data-background-image' );
|
var imageSource1 = Reveal.getSlide( 0 ).getAttribute( 'data-background-image' );
|
||||||
var imageSource2 = Reveal.getSlide( 1, 0 ).getAttribute( 'data-background' );
|
var imageSource2 = Reveal.getSlide( 1, 0 ).getAttribute( 'data-background' );
|
||||||
|
|
||||||
// check that the images are applied to the background elements
|
// check that the images are applied to the background elements
|
||||||
ok( Reveal.getSlideBackground( 0 ).style.backgroundImage.indexOf( imageSource1 ) !== -1, 'data-background-image worked' );
|
assert.ok( Reveal.getSlideBackground( 0 ).style.backgroundImage.indexOf( imageSource1 ) !== -1, 'data-background-image worked' );
|
||||||
ok( Reveal.getSlideBackground( 1, 0 ).style.backgroundImage.indexOf( imageSource2 ) !== -1, 'data-background worked' );
|
assert.ok( Reveal.getSlideBackground( 1, 0 ).style.backgroundImage.indexOf( imageSource2 ) !== -1, 'data-background worked' );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -535,11 +533,13 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
|
|
||||||
QUnit.module( 'Events' );
|
QUnit.module( 'Events' );
|
||||||
|
|
||||||
asyncTest( 'slidechanged', function() {
|
QUnit.test( 'slidechanged', function( assert ) {
|
||||||
expect( 3 );
|
assert.expect( 3 );
|
||||||
|
var done = assert.async( 3 );
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'slidechanged', _onEvent );
|
Reveal.addEventListener( 'slidechanged', _onEvent );
|
||||||
|
@ -550,17 +550,17 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.slide( 3, 0 ); // should trigger
|
Reveal.slide( 3, 0 ); // should trigger
|
||||||
Reveal.next(); // should do nothing
|
Reveal.next(); // should do nothing
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
Reveal.removeEventListener( 'slidechanged', _onEvent );
|
Reveal.removeEventListener( 'slidechanged', _onEvent );
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( 'paused', function() {
|
QUnit.test( 'paused', function( assert ) {
|
||||||
expect( 1 );
|
assert.expect( 1 );
|
||||||
|
var done = assert.async();
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'paused', _onEvent );
|
Reveal.addEventListener( 'paused', _onEvent );
|
||||||
|
@ -568,16 +568,16 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.togglePause();
|
Reveal.togglePause();
|
||||||
Reveal.togglePause();
|
Reveal.togglePause();
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
Reveal.removeEventListener( 'paused', _onEvent );
|
Reveal.removeEventListener( 'paused', _onEvent );
|
||||||
});
|
});
|
||||||
|
|
||||||
asyncTest( 'resumed', function() {
|
QUnit.test( 'resumed', function( assert ) {
|
||||||
expect( 1 );
|
assert.expect( 1 );
|
||||||
|
var done = assert.async();
|
||||||
|
|
||||||
var _onEvent = function( event ) {
|
var _onEvent = function( event ) {
|
||||||
ok( true, 'event fired' );
|
assert.ok( true, 'event fired' );
|
||||||
|
done();
|
||||||
}
|
}
|
||||||
|
|
||||||
Reveal.addEventListener( 'resumed', _onEvent );
|
Reveal.addEventListener( 'resumed', _onEvent );
|
||||||
|
@ -585,13 +585,9 @@ Reveal.addEventListener( 'ready', function() {
|
||||||
Reveal.togglePause();
|
Reveal.togglePause();
|
||||||
Reveal.togglePause();
|
Reveal.togglePause();
|
||||||
|
|
||||||
start();
|
|
||||||
|
|
||||||
Reveal.removeEventListener( 'resumed', _onEvent );
|
Reveal.removeEventListener( 'resumed', _onEvent );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
} );
|
} );
|
||||||
|
|
||||||
Reveal.initialize();
|
Reveal.initialize();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue