1
0
mirror of https://github.com/hakimel/reveal.js.git synced 2025-09-07 13:10:53 +02:00

Compare commits

...

873 Commits
3.1.0 ... 3.9.2

Author SHA1 Message Date
Hakim El Hattab
94d98ff7d8 3.9.2 security release 2020-01-31 11:11:23 +01:00
Hakim El Hattab
b6cc6b4916 blacklist some method from the postMessage API to prevent XSS 2020-01-31 10:59:41 +01:00
Hakim El Hattab
d213fac34c add note about supporting reveal.js via Slides 2020-01-30 10:15:39 +01:00
Hakim El Hattab
eaf3988311 3.9.1 because a local edit made it into npm 2020-01-29 15:11:49 +01:00
Hakim El Hattab
003a848790 update to highlight.js 9.18.0 #2562 2020-01-29 14:51:28 +01:00
Hakim El Hattab
33ed32c4f0 add step-by-step highlights to readme 2020-01-29 14:01:51 +01:00
Hakim El Hattab
8a54118f43 npm audit fix 😶 2020-01-27 14:50:54 +01:00
Hakim El Hattab
45f468ccc4 3.9.0 2020-01-27 14:47:17 +01:00
Hakim El Hattab
a59b1415f8 Merge branch 'pdf-slide-numbers' of https://github.com/dougalsutherland/reveal.js into dev 2020-01-27 14:10:15 +01:00
Hakim El Hattab
281b518620 Merge pull request #2499 from jocaml/patch-1
Fix which node version is required
2020-01-27 13:51:38 +01:00
Hakim El Hattab
9693816480 Merge branch 'dev' into patch-1 2020-01-27 13:51:24 +01:00
Hakim El Hattab
731f6819ac Merge pull request #2567 from trevorpower/patch-1
fixed link to gruntfile
2020-01-27 13:46:34 +01:00
Hakim El Hattab
d969ec5f25 2020 2020-01-15 11:39:19 +01:00
Hakim El Hattab
ac50753521 add data-fragment=<index> attribute to slide <sections> 2020-01-15 11:37:37 +01:00
Trevor Power
76a8193fc2 fixed link to gruntfile 2020-01-13 11:57:17 +00:00
Hakim El Hattab
76187bc666 Merge pull request #2474 from coliff/patch-1
HTTPS relevant links on README
2020-01-11 20:51:56 +01:00
Hakim El Hattab
dbf575f8db Merge pull request #2483 from Adri-May/bugfix/spelling
Bug fix: spelling errors
2020-01-11 20:51:01 +01:00
Hakim El Hattab
7a169732de upgrade to node-sass 4.13.0, fix security warnings #2473 2020-01-11 20:30:29 +01:00
Hakim El Hattab
6f9b10b269 switch to fixed unit for fragment animations to make them more consistent 2019-12-19 08:16:42 +01:00
Hakim El Hattab
201e8316a2 Merge pull request #2437 from TehDmitry/dev
Allowing autoplay in data-background-iframe for audio and video elements
2019-12-09 21:09:38 +01:00
Hakim El Hattab
bb8b4d8883 Merge pull request #2454 from ismailarilik/patch-1
Add forgotten element to Table of Contents
2019-12-09 21:06:53 +01:00
Hakim El Hattab
94de806f06 add mobileViewDistance to readme #2513 2019-12-09 21:05:41 +01:00
Hakim El Hattab
1515ddcf87 Merge pull request #2513 from TuurDutoit/feature/mobile-view-distance
Add mobileViewDistance config key
2019-12-09 21:00:58 +01:00
Dougal J. Sutherland
c189a21efd honor slide number config in pdf mode 2019-10-29 12:48:21 -05:00
Dougal J. Sutherland
1cf5ffe029 add a slide argument to locationHash(), getSlidePastCount() 2019-10-29 12:48:21 -05:00
Tuur Dutoit
6ab72eae51 Add mobileViewDistance config key 2019-10-18 13:37:16 +02:00
Hakim El Hattab
f9affb550a fix viewport overflow in iPadOS safari 2019-10-11 09:23:44 +02:00
Hrvoje Bandov
6979383e4b Fix which node version is required
In `package.json` engine is set to `>=9.0.0`.
2019-10-08 09:29:59 +02:00
Adri-May
02a42d1c9e Bug fix: spelling errors 2019-09-18 21:57:24 -04:00
Christian Oliff
a458676614 HTTPS relevant links on README 2019-09-03 10:59:33 +09:00
Hakim El Hattab
474731d829 highlight.js 9.11 -> 9.15 2019-08-22 13:21:12 +02:00
İsmail Arılık
52e57d3677 Add forgotten element to Table of Contents 2019-07-12 14:38:53 +03:00
Hakim El Hattab
073d0e3358 Merge pull request #2392 from DanielNoga/patch-1
update minimal nodejs version in readme
2019-07-08 10:07:53 +02:00
Hakim El Hattab
07c20ef9d9 Merge pull request #2442 from pius/patch-1
Tweak to MathJax example
2019-07-08 10:06:04 +02:00
Hakim El Hattab
d5662a203e Merge branch 'dev' into patch-1 2019-07-08 10:05:40 +02:00
Hakim El Hattab
a6f1511d1a Merge pull request #2453 from Incognitas/fix/node_12_support
Update package.json for node 12 support
2019-07-08 10:02:30 +02:00
Hakim El Hattab
cf027f21c6 Merge pull request #2451 from Jason-Cooke/patch-1
docs: fix typo
2019-07-08 10:01:55 +02:00
Aurelien Normand
585aafed95 Adding missing file to use it properly 2019-07-07 15:30:31 +02:00
Aurélien Normand
0935462706 Update package.json for node 12 support
simple node-sass update which fixes this issue
2019-07-07 11:41:30 +02:00
Jason Cooke
1bacb27072 docs: fix typo 2019-07-05 22:00:10 +12:00
Pius Uzamere
abac58cfc5 Tweak to MathJax example
Added a missing comma and used an actual macro so that the MathJax example runs right out of the box upon a copy/paste.
2019-06-22 15:17:01 -04:00
Hakim El Hattab
bd3758a4df readme tweak 2019-06-10 07:41:07 +02:00
Hakim El Hattab
5fb743e65e rephrased #2378 2019-06-10 07:38:57 +02:00
Hakim El Hattab
c92d08acdd Merge pull request #2378 from mbotsch/fix-plugin-documentation
Fix plugin documentation regarding init-Promises
2019-06-10 07:34:21 +02:00
Hakim El Hattab
ff2a927de8 Merge pull request #2433 from autopp/fix-typo-in-readme
add missing comma to MathJax example in README
2019-06-10 07:19:57 +02:00
Hakim El Hattab
bba760e549 remove available route changes #2416 2019-06-10 07:14:04 +02:00
Hakim El Hattab
51e8da5d9a Merge branch '2380-linear-navigation-mobile' of https://github.com/earboxer/reveal.js into dev 2019-06-10 07:04:49 +02:00
Hakim El Hattab
f6f7f28ad9 enable url hash for default index.html #2434 #2175 2019-06-10 06:57:07 +02:00
TehDmitry
bdda443335 Allowing autoplay in data-background-iframe for audio and video elements
It was restricted by «Autoplay Policy Changes»: https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#iframe
2019-06-09 16:31:36 +03:00
autopp
f5759c3d52 add missing comma to MathJax example in README 2019-06-07 09:45:20 +09:00
Zach DeCook
969e7b3ef1 * Mobile Linear Navigation: Fix swipes to navigate linearly 2019-05-29 10:44:43 -04:00
Zach DeCook
c62f4c7cfb * Linear Navigation: Fix showing arrows when last slide has vertical children 2019-05-29 10:22:15 -04:00
Hakim El Hattab
99c3498253 first/last slide shortcut now uses shift modified, cmd conflicted with browser back/fwd 2019-05-27 08:45:00 +02:00
Hakim El Hattab
25e521a16c Merge branch 'alternate-timing' of https://github.com/fghaas/reveal.js into dev 2019-05-27 08:08:00 +02:00
Hakim El Hattab
a1dd1028a1 down arrow padding for edge aligned controls 2019-05-27 08:04:58 +02:00
Hakim El Hattab
9108519dc1 Merge pull request #2410 from NoriSte/feature/fix-touch-arrow-down
Fix arrow down navigation on touch devices
2019-05-27 07:56:15 +02:00
Hakim El Hattab
a2e9e525d5 avoid exception when highlighting empty code blocks 2019-05-27 07:30:08 +02:00
Florian Haas
23c12d7332 Notes: Weakly enforce a minimum allocated pacing time per slide
When using the totalTime-based pacing calculation, a presenter may
inadvertently set totalTime and per-slide data-timing attributes in
such a way that the pacing time for some slides is impossibly low or
even negative.

Add a check to ensure that the pacing on a slide never falls below a
configurable minimum, defaulting to 0. Display an alert if the
pacing for any slide(s) falls below the threshold.
2019-05-22 21:44:44 +02:00
Hakim El Hattab
9ac654d584 fix issue where syncSlide would not run/play newly added background content 2019-05-20 14:58:52 +02:00
Hakim El Hattab
bd1e82d19a new API methods for getting horizontal/vertical slides, force linear navigation for one-dimensional decks 2019-05-20 11:24:05 +02:00
NoriSte
6ac01281d2 fix the touch devices issues with the down arrow 2019-05-18 12:57:35 +02:00
Hakim El Hattab
1766e37a63 iframe background preload behavior now matches inline iframes + adheres to the new 'preloadIframes' config option 2019-05-13 10:55:29 +02:00
Florian Haas
078ba62050 Notes: Introduce alternate pacing timer, based on total presentation time
The current pacing timer operates on the assumption that there is
a default amount of time to be allocated to each slide, and that
individual slides can deviate from that default by specifying their
own data-timing attribute.

This patch introduces an alternate pacing method: by specifying
the totalTime configuration option, the presenter can set the total
time available to present. The pacing timer will then continue to
allocate the exact pacing time for slides that do have data-timing
set, as before. However, rather than applying the defaultTiming
constant to all others, it will

- Add up the time already allocated to slides via data-timing;
- subtract that from totalTime;
- divide the difference by the number of slides without data-timing set;
- apply the thus-calculated average to those slides.

totalTime has no default, and if both defaultTiming and totalTime are
set, totalTime wins. This preserves backward compatibility: if a
presenter has set defaultTiming and updates reveal.js, totalTime will
be null and defaultTiming is still applied to all slides without a
data-timing attribute. The presenter can then switch to the automatic
calculation, if desired, by setting a value for totalTime.
2019-05-12 20:10:06 +02:00
Daniel Noga
39ed39f3e2 update minimal nodejs version in readme 2019-05-05 13:34:43 +02:00
Mario Botsch
1f5fb971d4 Fix plugin documentation
Mention that reveal.js will wait for the Promise of a plugin's init()
function only when the plugin is loaded non-async. The init functions
of plugins that are loaded as async dependencies are called after
reveal.js has dispatched the 'ready' event.
2019-04-23 23:28:05 +02:00
Hakim El Hattab
a16b71a981 the postMessage API now works for getter methods 2019-04-23 10:52:45 +02:00
Hakim El Hattab
32197bd77d fix numeric presence condition 2019-04-10 10:09:41 +02:00
Richard Westenra
33bed47dac Remove calls to missing modules from gruntfile
When running the app, Grunt throws the following warnings:

>> Local Npm module "grunt-contrib-clean" not found. Is it installed?
>> Local Npm module "grunt-contrib-nodeunit" not found. Is it installed?

These modules don't appear to do anything except throw a warning so they can probably just be removed.
2019-04-08 10:36:33 +02:00
Hakim El Hattab
9aa514bc70 Merge pull request #2364 from richardwestenra/fix/missing-modules
Bugfix: Remove calls to missing modules from gruntfile
2019-04-08 10:14:02 +02:00
Richard Westenra
3ff070536e Remove calls to missing modules from gruntfile
When running the app, Grunt throws the following warnings:

>> Local Npm module "grunt-contrib-clean" not found. Is it installed?
>> Local Npm module "grunt-contrib-nodeunit" not found. Is it installed?

These modules don't appear to do anything except throw a warning so they can probably just be removed.
2019-04-06 11:07:05 +03:00
Hakim El Hattab
e9ba289e80 refinements for multi-step code highlights 2019-04-05 19:49:17 +02:00
Hakim El Hattab
7eb2cec6b6 first version of multi-step code highlights 2019-04-05 07:59:35 +02:00
Hakim El Hattab
c636b88b2d Merge branch 'master' of github.com:hakimel/reveal.js into dev 2019-04-03 10:49:22 +02:00
Hakim El Hattab
3643112b35 plugin doc tweaks 2019-04-03 10:49:14 +02:00
Hakim El Hattab
4c557a5959 prefer transform scaling over zoom on hdpi displays 2019-04-02 16:25:27 +02:00
Hakim El Hattab
15dec96e73 better example for line range highlighting 2019-04-01 15:48:46 +02:00
Hakim El Hattab
da4ec074f1 docs for code highlight line numbering 2019-04-01 15:45:07 +02:00
Hakim El Hattab
485870946f plugin docs 2019-04-01 15:25:40 +02:00
Hakim El Hattab
25c504c22f plugin api docs 2019-04-01 15:11:51 +02:00
Hakim El Hattab
3da09f1fef 3.8.0 2019-04-01 14:34:10 +02:00
Hakim El Hattab
eb5d79370b fix typos 2019-04-01 14:29:26 +02:00
Hakim El Hattab
2734aa3da0 fix grunt ci error 2019-04-01 13:46:08 +02:00
Hakim El Hattab
e6fa04d485 fix typos 2019-04-01 13:11:29 +02:00
Hakim El Hattab
94cbfcbdf6 Merge pull request #2326 from earboxer/2313-navigation-mode-shortcuts-table
Allow Navigation Mode setting to change the shortcuts table
2019-04-01 13:01:29 +02:00
Hakim El Hattab
29ea072ddf fix npm security warnings, auto run tests when changed 2019-04-01 11:14:22 +02:00
Hakim El Hattab
df25fbebba add hasPlugin and getPlugin API methods and tests 2019-04-01 11:07:11 +02:00
Hakim El Hattab
d6f0f41f77 tweaks and tests for #2354 2019-03-28 15:42:28 +01:00
Hakim El Hattab
6faab091bb Merge branch 'dev' of https://github.com/maxrothman/reveal.js into dev 2019-03-28 15:12:33 +01:00
Hakim El Hattab
922d791fd9 fix an error where reveal.js returned a 1> progress number when there were fragments on last slide 2019-03-25 12:00:46 +01:00
Max Rothman
93b1abc736 Add data-preload attribute for iframes
Allows lazy-loaded (i.e. data-src) iframes to be preloaded when they
come within the viewDistance, rather than once they're visible.
2019-03-22 10:45:08 -04:00
Hakim El Hattab
b8de5e02d2 make #2350 work using replaceState 2019-03-21 09:13:28 +01:00
Hakim El Hattab
ae556d0844 Merge pull request #2350 from rparree/hash-problem
Fixed not bing able to follow same inner links twice with history:false
2019-03-21 09:03:50 +01:00
Hakim El Hattab
b5fe0f8126 Merge branch 'dev' into hash-problem 2019-03-21 09:03:27 +01:00
Hakim El Hattab
01874c6e70 new demo slide to promote iframes/iframe backgrounds 2019-03-20 09:12:31 +01:00
Raphael Parree
b4c6c92033 Fixed not bing able to follow same inner links twice with history:false
Scenario:

- history set to false in Reveal’s config
- follow anchor to `/#someid`
- navigate to other sections
- follow anchor to same section `/#someid`

This does not work as the hash has not changed.

This fix removes the hash from the URL when navigating
2019-03-15 08:45:43 +01:00
Hakim El Hattab
c7db11d9cf tests for plugins 2019-03-14 16:03:55 +01:00
Hakim El Hattab
b180d94e02 fix error when reveal.js was initialized with no plugins 2019-03-14 15:39:19 +01:00
Hakim El Hattab
6410ed15aa support for plugins where the init method doesn't return a Promise 2019-03-14 14:52:59 +01:00
Hakim El Hattab
5301a9ea03 more forgiving code highlight line number format, add Promise polyfill 2019-03-14 13:05:10 +01:00
Hakim El Hattab
cfc2f9cf9c line number styling tweaks 2019-03-12 13:21:27 +01:00
Hakim El Hattab
553a174cc7 highlight.js plugin improvements 2019-03-12 13:17:50 +01:00
Hakim El Hattab
7b62a0f356 prevent same plugin from being registered twice 2019-03-12 13:17:08 +01:00
Hakim El Hattab
fbbae1dc55 switch to monokai as default syntax highlight theme 2019-03-12 11:26:10 +01:00
Hakim El Hattab
7b66abd49c Merge pull request #2346 from dougalsutherland/patch-3
notes plugin: callRevealApi wants apply, not call
2019-03-12 10:38:50 +01:00
Dougal J. Sutherland
00e30a11e2 notes plugin: callRevealApi wants apply, not call 2019-03-11 22:25:19 -04:00
Hakim El Hattab
da53b3a637 validate code line numbers to highlight 2019-03-11 16:12:33 +01:00
Hakim El Hattab
8690858b6f more succinct syntax for code block line highlights 2019-03-11 15:48:03 +01:00
Hakim El Hattab
5adc2032c0 use internal pointer for current slide 2019-03-11 15:03:13 +01:00
Hakim El Hattab
69ee643846 syncFragments now returns all affected fragments 2019-03-11 14:50:35 +01:00
Hakim El Hattab
cef864a7be highlight plugin updates; support for line numbers and highlighting specific lines 2019-03-08 15:07:59 +01:00
Hakim El Hattab
b6e136776a Merge pull request #2340 from sophware/fix_zoom_demo
demo.html - Added Linux instructions for zoom
2019-03-07 16:13:33 +01:00
Sophware
d0771922c9 demo.html - Added Linux instructions for zoom 2019-03-06 17:05:45 -05:00
Hakim El Hattab
fc30774ef2 Merge pull request #2339 from mikeshatch/patch-1
Fixed a couple of typos
2019-03-06 13:31:16 +01:00
Mike Hatch
dd6f8b402c Fixed a couple of typos 2019-03-04 12:24:04 -06:00
Hakim El Hattab
c40e9819a2 highlight, math, notes and zoom plugins now register via Reveal.registerPlugin 2019-03-04 14:32:38 +01:00
Hakim El Hattab
d780352b7f reveal.js plugin flow now uses promises, refactor markdown plugin to use promises 2019-03-04 14:11:21 +01:00
Hakim El Hattab
46f8f86fa1 few plugin registration tweaks 2019-03-01 21:34:11 +01:00
Hakim El Hattab
4862de26eb async loading of external markdown, add Reveal.registerPlugin() 2019-03-01 21:28:52 +01:00
Hakim El Hattab
213023760a build dependency updates 2019-02-28 13:47:49 +01:00
Hakim El Hattab
3b4fabc8a7 upgrade .travis nodejs version 2019-02-28 13:27:41 +01:00
Hakim El Hattab
4a8899e520 see if increased node version fixes build 2019-02-28 13:25:46 +01:00
Hakim El Hattab
5ae2d3eb1e update grunt dependencies 2019-02-28 11:22:32 +01:00
Hakim El Hattab
205ef8fdcc fix scss compilation task 2019-02-28 10:07:41 +01:00
Hakim El Hattab
d549204ef1 Merge pull request #2333 from dougalsutherland/patch-2
remove unused `isPrintingPDFFragments` function
2019-02-28 09:58:02 +01:00
Dougal J. Sutherland
a36f7cbf99 remove unused isPrintingPDFFragments function 2019-02-28 01:19:43 +00:00
Zach DeCook
bb4eeb6c3c * Keyboard Shortcuts table: Dynamically fill object at configuration 2019-02-19 17:29:07 -05:00
Hakim El Hattab
1efb8260af Merge pull request #2325 from hakimel/revert-2312-improve_random_number_generation
Revert "impove randomness"
2019-02-18 15:18:59 +01:00
Hakim El Hattab
d927cdf579 Revert "impove randomness" 2019-02-18 15:17:30 +01:00
Hakim El Hattab
27b70ed0ba Merge pull request #2312 from albert-ziegler/improve_random_number_generation
impove randomness
2019-02-18 15:14:39 +01:00
Albert
9e3a52f14a correct typo 2019-02-11 09:05:46 +00:00
Hakim El Hattab
2d57981261 zoom transition now uses zooming for vertical transitions, too 2019-02-01 11:09:03 +01:00
Hakim El Hattab
7867b77833 indentation fix 2019-02-01 10:16:32 +01:00
Hakim El Hattab
ce53e63b5b documentation for #2315 2019-02-01 10:15:10 +01:00
Hakim El Hattab
d0337246f2 Merge pull request #2315 from dougalsutherland/slide-formats
allow custom slide numbering functions
2019-02-01 09:49:39 +01:00
Hakim El Hattab
2a9edd23e6 define available values for showSlideNumber 2019-02-01 09:48:36 +01:00
Hakim El Hattab
812b802c1c resize event tweaks for #2300 2019-01-31 20:13:32 +01:00
Hakim El Hattab
9c1615fff1 Merge pull request #2300 from mw75/master
Resize Event
2019-01-31 20:09:45 +01:00
Dougal J. Sutherland
43d1c71107 allow custom slide numbering functions 2019-01-31 18:28:38 +00:00
Hakim El Hattab
aa8be6829c Merge pull request #2305 from reyerstudio/marked
Upgrade marked to 0.6.0
2019-01-31 10:10:28 +01:00
Albert
90473eeb05 impove randomness 2019-01-30 16:33:41 +00:00
Hakim El Hattab
6a2cb42e6b enable pinch-to-zoom for android 2019-01-30 16:31:31 +01:00
Hakim El Hattab
2219107c69 only force media controls to be visible when necessarry 2019-01-29 11:26:46 +01:00
Hakim El Hattab
23c2d2795c navigationMode documentation improvements 2019-01-23 10:43:05 +01:00
Hakim El Hattab
481208f43f hide vertical arrows when navigationMode is 'linear' #2307 2019-01-23 10:30:29 +01:00
Hakim El Hattab
2fa3ab6a6b documentation for navigationMode #2307 2019-01-23 10:14:40 +01:00
Hakim El Hattab
51b1658a60 'gridNavigation' and 'simpleNavigation' merged into 'navigationMode' setting #2307 2019-01-23 09:58:10 +01:00
Hakim El Hattab
4c3f778e6e refactor keyboard listener conditions 2019-01-22 15:43:42 +01:00
Hakim El Hattab
fef15ea9d1 Merge pull request #2307 from reyerstudio/feature/shortcuts@dev
Enable simpleNavigation
2019-01-22 15:21:31 +01:00
Hakim El Hattab
baac3413ed upgrade to socket.io 2.2.0 #2257 2019-01-22 15:05:13 +01:00
Hakim El Hattab
ddd9f818f3 hide body overflow 2019-01-22 12:05:57 +01:00
Hakim El Hattab
41858b91d5 adjust how global height is styled 2019-01-22 10:02:08 +01:00
Hakim El Hattab
5002304fb1 correct height of reveal.js on mobile devices, fixes vertical overflow 2019-01-22 09:45:33 +01:00
Stéphane Este-Gracias
65584ff3a9 Enable simpleNavigation 2019-01-21 21:57:20 +01:00
Stéphane Este-Gracias
cf4af0fbcd Fix test after upgrading marked to 0.6.0 2019-01-20 19:29:46 +01:00
Stéphane Este-Gracias
a86dab0363 Upgrade marked to 0.6.0 2019-01-20 19:28:27 +01:00
Mario Wolff
126365627b fixed documentation on resize event 2019-01-15 13:18:55 +01:00
Mario Wolff
abee356e42 emmit resize event if scale changed 2019-01-15 13:13:19 +01:00
Hakim El Hattab
c36caef5e7 2019 2019-01-10 14:58:38 +01:00
Hakim El Hattab
10e44aabfc remove pinch gesture for triggering overview mode on touch devices, enables regular mobile pinch-to-zoom 2019-01-10 14:43:33 +01:00
Hakim El Hattab
9712cc9ad6 whitespace 2019-01-07 14:43:46 +01:00
Hakim El Hattab
65938f388b Merge pull request #1188 from sanand0/master
Display .stretch images in overview mode. Fix #1187
2019-01-07 14:41:45 +01:00
Hakim El Hattab
b645828707 ensure history api is available, default to hash: true with no history in demo #2286 2018-12-19 11:04:29 +01:00
Hakim El Hattab
6ef565c9fb Merge pull request #2286 from asottile/hash_without_history_2211
Add new 'hash: true' option which uses replaceState for url
2018-12-19 10:52:15 +01:00
Hakim El Hattab
7eb74ac335 correct variable name in inline comment 2018-12-19 10:41:13 +01:00
Hakim El Hattab
dedad930e3 add section about vertical slides and gridNavigation to readme 2018-12-19 10:37:30 +01:00
Hakim El Hattab
665dfb9cd6 add gridNavigation config to configure navigation between adjacent vertical stacks 2018-12-19 09:38:15 +01:00
Hakim El Hattab
db9c346b41 optimization; avoid reading computed styles unless necessary 2018-12-18 14:21:11 +01:00
Hakim El Hattab
9f1856d55b fix notes layout when container isnt as wide as viewport 2018-12-18 10:14:18 +01:00
Hakim El Hattab
6fe0cbc0dd prefer vh for speaker notes layout 2018-12-17 12:58:55 +01:00
Hakim El Hattab
c2270cc0c5 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2018-12-12 10:00:56 +01:00
Hakim El Hattab
0b3e7839eb note about backticks to avoid LaTeX <> Markdown syntax conflicts #1359 2018-12-12 09:59:45 +01:00
Anthony Sottile
fd6245bb28 Add new 'hash: true' option which uses replaceState for url
Resolves #2211
2018-12-02 16:49:06 -08:00
Hakim El Hattab
87d6af2cb4 Merge pull request #2266 from f00ale/custom_code_font
Make code font customizable for themes.
2018-11-21 08:33:56 +01:00
Hakim El Hattab
82076c5a0b demo presentation now refers to correct zoom.js shortcut for linux #2280 2018-11-21 08:29:17 +01:00
Hakim El Hattab
8ac3383bee add getRevealElement API method 2018-11-16 10:39:43 +01:00
Hakim El Hattab
f042a8c394 add cmd/ctrl + arrow key shortcuts to first/last slides 2018-11-13 10:48:23 +01:00
Hakim El Hattab
b6ce0a9724 fix concave/convex transitions on vertical slides #1947 2018-11-08 14:05:53 +01:00
Hakim El Hattab
1c07fccc35 reset css in default index.html 2018-11-05 08:59:19 +01:00
Hakim El Hattab
bc2477bf10 fix no-transform mode 2018-10-31 09:20:12 +01:00
Hakim El Hattab
2b61dde83b add audio autoplay test 2018-10-31 08:59:47 +01:00
Arno Lepisk
8e5bdcc2bb Make code font customizable for themes. 2018-10-30 22:03:13 +01:00
Hakim El Hattab
42e796afb2 dispatch state events after current slide has updated #2264 2018-10-26 11:29:08 +02:00
Hakim El Hattab
6abc6e0058 move reset.css out of reveal.css to make it optional #1952 #2248 2018-10-25 13:34:03 +02:00
Hakim El Hattab
4ac153c46f Merge pull request #2263 from mbotsch/fix-readURL
Fix if-statement in readURL
2018-10-25 13:00:03 +02:00
Mario Botsch
8a35a1e1ed Fix nested if-statement in readURL that caused slide(h,v) to be
called even when the current slide is the target slide.
2018-10-24 23:22:11 +02:00
Hakim El Hattab
7d66999c7f syntax tweak 2018-10-11 11:32:23 +02:00
Hakim El Hattab
387455b755 replace while with forEach loop 2018-10-11 11:32:16 +02:00
Hakim El Hattab
a4dc1c6440 fix #1590 2018-10-11 11:24:54 +02:00
Hakim El Hattab
62cd74a890 add note about lazy loading iframes #1672 #1938 2018-10-09 11:08:09 +02:00
Hakim El Hattab
7b707696b4 automatically hide the mouse pointer after 5s of inactivity (#1837) 2018-10-08 09:58:06 +02:00
Hakim El Hattab
5890f602b3 Merge pull request #2090 from bnjmnt4n/math
Allow users to customise MathJax options.
2018-10-08 08:41:08 +02:00
Hakim El Hattab
e7a365255f Merge pull request #2251 from oyron/2229-speaker-notes-bug
Give focus to previously opened speaker notes (fixes #2229)
2018-10-08 08:32:39 +02:00
oyron
f32cd8586d Handle previously opened notes window, by giving focus. 2018-10-05 15:18:08 +02:00
Hakim El Hattab
fb089e7083 fix build error 2018-10-04 15:43:58 +02:00
Hakim El Hattab
196d2a3971 remove classlist polyfill, cross browser support is good enough now 2018-10-04 14:54:35 +02:00
Hakim El Hattab
01ceba3f73 remove mention of head.js in readme 2018-10-04 14:48:39 +02:00
Hakim El Hattab
29b0e86089 remove head.min.js in favor of simple built-in script loader 2018-10-04 14:48:01 +02:00
Hakim El Hattab
d5cf3fa13c formatting and tweaks for #2104 2018-10-04 13:26:22 +02:00
Hakim El Hattab
8582c9aac8 resolve notes merge conflict 2018-10-04 12:32:37 +02:00
Hakim El Hattab
90fc0bc466 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2018-10-03 12:53:07 +02:00
Hakim El Hattab
c35cce54a5 Merge pull request #2231 from esthor/patch-1
bring install instructions to top, as is tradition
2018-10-03 12:48:41 +02:00
Hakim El Hattab
c9ab489ba2 Merge pull request #2245 from rollandf/master
Fix typo
2018-10-03 12:44:53 +02:00
Hakim El Hattab
f089e1b228 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2018-10-03 12:44:26 +02:00
Hakim El Hattab
436b41a8fc dont refer to outdated speaker notes style in readme #2244 2018-10-03 12:43:00 +02:00
Fred Rolland
7b2769901e Fix typo 2018-10-02 17:52:51 +03:00
Erik
ed581add7f bring install instructions to top, as is tradition
The Install was waaaay at the bottom, which didn't make sense to scroll through all the detailed documentation, just to find how to get started with an install.
2018-09-18 16:33:16 -04:00
Hakim El Hattab
7dbf519104 fix css conflict 2018-08-21 09:27:55 +02:00
Hakim El Hattab
4b1866b040 Merge pull request #2218 from eldios/patch-1
Fixed broken link to markdown options doc
2018-08-17 09:57:54 +02:00
Lele
b0ebb7deed Fixed broken link to markdown options doc
Fixed broken link to markdown options doc
2018-08-16 14:34:46 +02:00
Hakim El Hattab
b003a54f91 Merge pull request #2215 from anderslemke/let-resume-follow-controls
Only show resume on pause if controls enabled
2018-08-16 11:46:46 +02:00
anderslemke
f52460a6fd Only show resume on pause if controls enabled 2018-08-15 19:58:18 +02:00
Hakim El Hattab
249f013959 fix detection of named links (closes #1655) 2018-08-01 10:55:59 +02:00
Hakim El Hattab
2c5396b7d3 3.7.0 2018-08-01 10:37:51 +02:00
Hakim El Hattab
72b05a3245 Merge pull request #2171 from tristansokol/tristans/add-all-transitions
add a full list of transitions to readme
2018-08-01 10:36:07 +02:00
Hakim El Hattab
b6aa0cac23 Merge branch 'dev' of github.com:hakimel/reveal.js 2018-08-01 10:34:55 +02:00
Hakim El Hattab
f6f7f58537 Merge branch 'master' of github.com:hakimel/reveal.js 2018-07-25 10:56:02 +02:00
Hakim El Hattab
b9bb353a11 add 'resume presentation' button to pause overlay 2018-07-02 11:08:45 +02:00
Hakim El Hattab
fd95c8c266 use absolute positioning for slide number 2018-06-21 10:07:38 +02:00
Hakim El Hattab
be87adcdf8 rename new fragment style 2018-06-13 14:12:28 +02:00
Hakim El Hattab
078a7520cd refactor fragment pdf exporting to support multiple fragments with same index #1955 2018-06-12 20:44:49 +02:00
Hakim El Hattab
3680f1ad10 merge #1955 with minor changes 2018-06-11 12:35:11 +02:00
Hakim El Hattab
a86146180f Merge branch 'master' of https://github.com/koehlma/reveal.js into dev 2018-06-11 12:16:41 +02:00
Hakim El Hattab
a9e95e7e6c merge conflicts 2018-06-11 11:02:21 +02:00
Hakim El Hattab
4bea8e17e8 add 'fade-in-then-half-out' fragment style, 'current-visible' was renamed to 'fade-in-then-out' 2018-06-11 10:59:31 +02:00
Hakim El Hattab
a82c4333ed Merge pull request #2141 from marcvangend/marcvangend-clarify-notes-regex
Clarify the meaning of the notes?: regex
2018-06-11 10:04:58 +02:00
Tristan Sokol
27553e2fcb add a full list of transitions to readme 2018-06-05 09:30:02 -07:00
Hakim El Hattab
4672801229 new syncFragments api method 2018-05-31 10:35:09 +02:00
Hakim El Hattab
30b670cf42 flatten slide number when there are only vertical slides 2018-05-24 09:21:42 +02:00
Hakim El Hattab
3c5c50f3fe Merge pull request #2158 from denehyg/issue-2157
Fix timer when speaker notes window opened via RevealNotes.open()
2018-05-07 11:06:16 +02:00
Greg Denehy
ee63b2ac60 Fixed notes timer when speaker notes window opened via RevealNotes.open() 2018-05-05 17:38:37 +09:30
Hakim El Hattab
667c83f1b7 refactor code to match new background dom structure 2018-05-03 15:45:31 +02:00
Hakim El Hattab
0bbcc6b594 add Reveal.syncSlide 2018-05-03 15:25:54 +02:00
Hakim El Hattab
042fbde61b data-background-content-opacity -> data-background-opacity 2018-05-03 11:02:36 +02:00
Hakim El Hattab
4ba0d73345 add , adds wrapper element around background images/videos/iframes 2018-04-27 15:53:02 +02:00
Hakim El Hattab
de41f6cf50 smaller font size for sub/sup 2018-04-24 14:56:03 +02:00
Hakim El Hattab
5771ae39f0 speaker view has visible connection status, times out with error after 5s 2018-04-24 14:23:28 +02:00
Hakim El Hattab
f1133f0e10 support interactive iframe backgrounds in vertical stacks 2018-04-17 09:46:55 +02:00
Hakim El Hattab
2a57223939 revise readURL to handle one-based indices 2018-04-16 09:58:03 +02:00
Hakim El Hattab
531d1e8791 prevent linked slide numbers from changing color 2018-04-16 09:48:37 +02:00
Hakim El Hattab
f713d9d67d Merge pull request #2133 from sean-parent/master
Adding support for hash linked slideNumber
2018-04-16 09:31:05 +02:00
Sean Parent
97c1a0ecc1 Merge branch 'dev' into master 2018-04-13 07:55:02 -07:00
marcvangend
ceb1738a0f Clarify the meaning of the notes?: regex 2018-04-01 20:03:25 +02:00
Hakim El Hattab
397feab8b4 gracefully handle duplicate slide id's 2018-03-27 14:21:41 +02:00
Sean Parent
64b2a27455 Made one based indexing optional 2018-03-23 10:07:42 -07:00
Quentin PROUST
93cacaa40c Print background in pdf (#2131)
* Print background in pdf

Pull request to integrate issue https://github.com/hakimel/reveal.js/issues/1686. Adding the workaround to the theme template to make it work for every theme.

* apply suggestion of @hakimel
2018-03-23 13:50:42 +01:00
Hakim El Hattab
1257ee7e27 code formatting 2018-03-22 11:58:15 +01:00
Hakim El Hattab
4cb0d52c73 Merge branch 'URI-encode-name-hash' of https://github.com/nnormand/reveal.js into dev 2018-03-22 11:56:50 +01:00
Hakim El Hattab
ba0e432542 formatting 2018-03-22 11:55:44 +01:00
Hakim El Hattab
a2e69a4b42 Merge pull request #2097 from bnjmnt4n/docs/readme
Cleanup readme to make it easier to read/edit.
2018-03-22 11:51:05 +01:00
Hakim El Hattab
3bbf969686 Merge pull request #2114 from ChumpChief/standardized-pointer
Prefer W3C pointer events and updates to match the standard definition
2018-03-22 11:47:19 +01:00
Hakim El Hattab
49251078f3 remove legacy vendor prefixes from pdf css 2018-03-22 11:43:07 +01:00
Hakim El Hattab
8bf1cc601a Merge pull request #2128 from craigsdennis/feature/update-copyright-date
Updates copyright to 2018
2018-03-22 11:16:41 +01:00
Hakim El Hattab
6dbc593280 disableLayout comment tweak 2018-03-22 11:10:27 +01:00
Steve Hartzog
9dbccd6978 add support for overriding the default layout (#2121)
* add support for overriding the default layout
New `overrideLayout` option (if true) will prevent h/w calcs.

* fix error if options are empty

* Implement requested changes
Rename overrideLayout to disableLayout and remove code to unset display
2018-03-22 11:06:19 +01:00
Sean Parent
443b4475bc Adding support for hash linked slideNumber 2018-03-21 18:08:16 -07:00
Hakim El Hattab
ea57e697a1 Revert "remove pdf height offset"
This reverts commit f76b4fda93.
2018-03-20 10:09:47 +01:00
craigsdennis
8ff5fe4986 Updates copyright to 2018 2018-03-16 22:41:16 -07:00
Hakim El Hattab
f76b4fda93 remove pdf height offset 2018-03-16 13:52:19 +01:00
Hakim El Hattab
511397c177 prevent missing 'present' class when navigating to same slide twice 2018-03-14 12:03:42 +01:00
Matt Rakow
389c3f52b5 Prefer W3C pointer events, remove pointerEnabled references (it is not part of the standard), unconditional event removal 2018-03-07 09:18:26 -08:00
Hakim El Hattab
0282413b69 fix autoplay of inline videos in ios 2018-03-05 14:59:32 +01:00
Hakim El Hattab
5848a432d9 Merge branch 'patch-1' of https://github.com/Jmuccigr/reveal.js into dev 2018-02-22 10:08:02 +01:00
Martin Jurča
250580fc4c added missing documentation 2018-02-20 16:08:29 +01:00
Martin Jurča
6a2c5b4de8 documentation 2018-02-20 10:30:56 +01:00
Martin Jurča
8468d82433 fixed showing speaker's view with timings/pacing while serving the presentation from the file system 2018-02-20 10:29:16 +01:00
Benjamin Tan
1427f7a1ae Cleanup readme to make it easier to read/edit.
- Use `single backticks` consistently for inline code snippets.
- Add double linefeeds before level 2 headings.
- Add a single linefeed after each heading.
- Minor docs edits.
2018-02-14 18:36:18 +08:00
Hakim El Hattab
325162692e navigateNext no longer gets stuck on first stack when looping is enabled 2018-02-12 13:49:33 +01:00
John Muccigrosso
5d273cfb29 Background repeat & position to parallax background 2018-02-10 12:32:16 -05:00
Benjamin Tan
d5f4edeeef Merge pull request #1836 from RobertBaron/background-whitespace-uri
Allow whitespace on background-images, w3 compliance
2018-02-09 20:05:26 +08:00
Benjamin Tan
b2d532ea28 Allow users to customise MathJax options.
Ref. #1856, #2006, #2045.

This is a more open approach to allow customisation of all MathJax options instead of select options only.
2018-02-08 20:54:21 +08:00
Benjamin Tan
7cd2c9138d head.js: Remove source map URL since it doesn't exist.
This prevents additional requests from devtools when debugging code.
2018-02-08 11:22:11 +08:00
Benjamin Tan
18e7dd2173 Cleanup code style. 2018-02-08 11:22:01 +08:00
Benjamin Tan
fb97d99bff Simplify Travis test script. 2018-02-08 11:20:41 +08:00
Hakim El Hattab
27aba10756 fix looping of presentations that only have vertical slides 2018-02-07 13:45:57 +01:00
Hakim El Hattab
5eba331935 Merge branch 'fragment-in-url' of https://github.com/dougalsutherland/reveal.js into dev 2018-02-07 10:33:19 +01:00
Benjamin Tan
496db06441 head.js: Remove source map URL since it doesn't exist.
This prevents additional requests from devtools when debugging code.
2018-02-07 13:04:15 +08:00
Benjamin Tan
7991693bde Docs: add note on how to enable/disable preview links individually.
Closes #2005.
2018-02-07 12:51:14 +08:00
Benjamin Tan
410f7767b9 Docs: mention that syntax highlighting requires CSS theme file.
Closes #2075.
2018-02-06 22:34:25 +08:00
Benjamin Tan
57a4c45cf6 Docs: avoid recommending global Grunt installation.
Closes #1951.
2018-02-06 22:12:35 +08:00
Benjamin Tan
80bc1971e0 Docs: Add note about Windows carriage returns.
Closes #1808.
2018-02-06 19:39:03 +08:00
Benjamin Tan
4dabd439d2 Fix testing on Windows machines.
Windows carriage return line endings were not being tested for.

Fixes #2087.
2018-02-01 20:28:20 +08:00
Hakim El Hattab
e704b3ffc8 fix bug where left/right arrows appeared when there were no horizontal slides 2018-01-25 09:59:04 +01:00
Hakim El Hattab
de746bb642 reorganize config options 2018-01-25 09:26:10 +01:00
Hakim El Hattab
4232f41abd Merge pull request #2080 from bnjmnt4n/update-deps
Update dependencies.
2018-01-24 15:52:40 +01:00
Benjamin Tan
f9d0766637 Update QUnit to 2.5.0 and grunt-contrib-qunit to 2.0.0. 2018-01-22 22:38:32 +08:00
Benjamin Tan
f0fa6fb226 Update grunt-contrib-uglify. 2018-01-22 22:38:30 +08:00
Benjamin Tan
e382d5cfab Update dependencies. 2018-01-22 22:38:29 +08:00
Hakim El Hattab
e3205a55be Merge pull request #2078 from bnjmnt4n/data-background
Allow `data-background` images to load even if there is whitespace at…
2018-01-22 10:53:44 +01:00
Benjamin Tan
6816a0205e Allow data-background images to load even if there is whitespace at the end.
Fixes #2032.
2018-01-22 17:17:08 +08:00
Hakim El Hattab
40e5544776 Merge pull request #2077 from bnjmnt4n/js-load
Allow JS files with query strings to be loaded.
2018-01-22 10:09:46 +01:00
Benjamin Tan
fd7894fa13 Allow JS files with query strings to be loaded.
Fixes #1944.
2018-01-22 16:33:10 +08:00
Dougal J. Sutherland
d68423f310 fix fragment handling when desired fragment is 0 2018-01-21 18:03:48 +00:00
Dougal J. Sutherland
260f287926 optionally put the fragment in the URL 2018-01-04 20:09:01 +00:00
Hakim El Hattab
0c946ae18b fix missing theme line-height when printing #1967 2017-12-04 14:03:16 +01:00
Hakim El Hattab
7a0b4a56f9 prevent cmd+r in notes window since reloading breaks the view #1958 2017-12-04 13:57:19 +01:00
Hakim El Hattab
edc9c0a8fd Merge pull request #1958 from ThomasWeinert/feature/block_f5_in_notes
Block F5 in speaker notes window, avoid disconnects
2017-12-04 13:46:04 +01:00
Hakim El Hattab
09471a0508 Merge branch 'patch-1' of https://github.com/keradus/reveal.js into dev 2017-12-04 13:44:06 +01:00
Dariusz Rumiński
aee62ff0af .gitignore - ignore package-lock.json file
Ignore lock file of newer node versions
2017-12-02 20:36:36 +01:00
Hakim El Hattab
137e383950 Merge pull request #2045 from jgm/issue2026
Allow tex2jax options to be passed into math plugin.
2017-12-01 14:37:47 +01:00
John MacFarlane
773569b4a2 Allow tex2jax options to be passed into math plugin.
Closes #2026.

This does not change the default behavior of the math plugin,
but it allows $ delimiters to be disabled (which is usually
what you want, since otherwise normal uses of $ for currency get
treated as math delimiters).

To use:

    Reveal.initialize({
      math: {
        tex2jax: { inlineMath: [['\\(','\\)']],
                   skipTags: ['script','noscript','style',
                              'textarea','pre'] }
            },
      etc.
      });
2017-11-29 21:57:29 -08:00
Hakim El Hattab
1f1f86ec73 Merge branch 'issue_2041' of https://github.com/denehyg/reveal.js into dev 2017-11-29 09:54:48 +01:00
Hakim El Hattab
c966c118fa minor formatting tweaks 2017-11-29 09:46:45 +01:00
Hakim El Hattab
6028844452 Merge branch 'plugin-key-bindings' of https://github.com/denehyg/reveal.js into dev 2017-11-29 09:38:05 +01:00
Greg Denehy
8579fc773d Fixed issue with getProgress() when called from slidechanged event on edge case 2017-11-25 11:07:09 +10:30
Hakim El Hattab
a0a9aa7821 optimize use of getSlideBackground by avoiding index lookup 2017-11-23 15:45:15 +01:00
Hakim El Hattab
a0c013606e add inline and external markdown images to example #2039 2017-11-23 11:12:54 +01:00
Hakim El Hattab
65bdccd580 lab.hakim.se/reveal-js -> revealjs.com 2017-11-22 14:46:55 +01:00
Hakim El Hattab
8a63686017 3.6.0 2017-11-22 14:10:33 +01:00
Hakim El Hattab
a03e803628 make it possible to load/unload slides via the api 2017-11-21 15:38:44 +01:00
Hakim El Hattab
4022cbfe84 simplify logic for finding slide backgrounds 2017-11-21 15:29:40 +01:00
Nicolas Normand
fa8a7334ce URI encode name hash 2017-11-17 11:59:21 +01:00
Hakim El Hattab
28d6a7775b Merge branch 'update-css' of https://github.com/sfairchild/reveal.js into dev 2017-11-09 11:52:11 +01:00
Hakim El Hattab
afce29d79a Merge branch 'master' of github.com:hakimel/reveal.js into dev 2017-11-09 11:51:59 +01:00
Hakim El Hattab
9d0a3d7d5e Merge pull request #1983 from ssfrr/patch-1
adds note about necessary markdown scripts to README
2017-11-09 11:48:51 +01:00
Hakim El Hattab
41e86a2a22 Merge pull request #2017 from hoeggi/patch-1
Update README.md
2017-11-09 11:47:38 +01:00
Hakim El Hattab
1c8edfc8e4 Merge pull request #1957 from crowchirp/patch-1
corrected minor typo in readme file
2017-11-09 11:46:57 +01:00
Hakim El Hattab
463770cc53 Merge pull request #2029 from lechten/export-isSpeakerNotes
Export isSpeakerNotes
2017-11-09 11:41:08 +01:00
Hakim El Hattab
3d1d7683b2 reconfiguring no longer unloads iframes on current slide 2017-11-09 11:40:25 +01:00
Hakim El Hattab
376d140b2a Merge pull request #2030 from lechten/registersearchkey
Register search key shortcut for help overlay
2017-11-09 11:30:38 +01:00
Hakim El Hattab
3beda63a7d allow to be called directly before or after (closes #2021) 2017-11-09 10:26:35 +01:00
Jens Lechtenbörger
1002d39e7c Register search key shortcut for help overlay 2017-11-05 17:45:18 +01:00
Jens Lechtenbörger
44a5673e6f Export isSpeakerNotes 2017-11-05 10:31:43 +01:00
hoeggi
8041759b8b Update README.md 2017-10-28 19:57:35 +02:00
Hakim El Hattab
4a4719b587 always show media controls on mobile devices 2017-10-04 11:13:09 +02:00
Spencer Russell
665d3a151d adds note about necessary markdown scripts to README 2017-09-11 15:13:37 -04:00
Hakim El Hattab
56504b50a9 support negative values in query config overrides 2017-09-07 10:33:44 +02:00
Sean Fairchild
f9a4a27087 Prevent text-transform inside code tags 2017-09-06 10:50:39 -04:00
Thomas Weinert
c0109d948f Block F5 in speaker notes window, avoid disconnects 2017-08-12 13:42:55 +02:00
Chandan Rai
04dcc48fa9 corrected minor typo in readme file 2017-08-10 00:17:08 +05:30
Maximilian Köhl
08e0f5e47b fix indent: replace spaces with tabs 2017-08-08 22:53:32 +02:00
Maximilian Köhl
a2cf23b30c PDF export: add option to export one page per fragment 2017-08-08 22:47:10 +02:00
Hakim El Hattab
bfd431a0c4 add option for disabling all forms of auto-sliding 2017-07-27 08:42:40 +02:00
Hakim El Hattab
8725593805 localstorage feature test in notes plugin, fixes speaker view error in safari 2017-07-13 20:19:16 +02:00
Hakim El Hattab
b04489b129 zoom.js works on main wrapper element 2017-06-19 11:06:58 +02:00
Hakim El Hattab
76eea30083 zoom.js uses ctrl+click for linux, alt+click for others #1909 2017-06-19 09:52:56 +02:00
Hakim El Hattab
af6754bfb7 simplify point zoom, switch back to alt + click shortcut for os x support #1909 2017-06-19 09:45:52 +02:00
Hakim El Hattab
a781b6a22b clear existing matches when searching for empty string #1909 2017-06-19 09:43:29 +02:00
Hakim El Hattab
7d0d3c24ca Merge branch 'master' of https://github.com/linux-man/reveal.js into dev 2017-06-19 09:36:25 +02:00
Hakim El Hattab
af7c33b902 unload lazy loaded videos that are moved out of view 2017-06-14 19:11:08 +02:00
Hakim El Hattab
dc17129082 themes use default quotation marks for <q> #1720 2017-06-14 10:42:51 +02:00
Hakim El Hattab
1233092223 prevent mobile safari header from covering presentation content 2017-06-13 09:43:05 +02:00
Hakim El Hattab
9342d19b5a fix centering of edge-aligned controls 2017-06-12 10:22:47 +02:00
Hakim El Hattab
6ae4ad69d2 change event listener syntax #1917 2017-06-12 09:17:46 +02:00
Hakim El Hattab
5e279efdf3 Merge branch 'issue1896' of https://github.com/OleMussmann/reveal.js into dev 2017-06-12 09:11:24 +02:00
Hakim El Hattab
2961f00946 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2017-06-12 09:05:37 +02:00
Hakim El Hattab
43eada7990 Merge pull request #1898 from bentsai/patch-1
Fix typo
2017-06-12 08:53:09 +02:00
Hakim El Hattab
9139bc32de alias 'notes:' alias for md speaker note separator #1913 2017-06-07 15:43:25 +02:00
Ole Mussmann
b279a47a76 patch to allow multiplexing on URL load 2017-06-06 10:36:40 +02:00
Hakim El Hattab
9ab14374e5 change condition for detecting when there are horizontal slides 2017-06-02 12:13:41 +02:00
Hakim El Hattab
0388c96e60 'showNotes' does nothing when there are no notes 2017-05-24 10:05:16 +02:00
Hakim El Hattab
53c56510ed larger speaker notes font on big screens 2017-05-23 13:14:25 +02:00
Hakim El Hattab
b64c35ed0b tweak control spacing 2017-05-22 11:50:18 +02:00
Hakim El Hattab
fab28362ce highlight.js 9.0.0 -> 9.11.0 2017-05-22 11:34:24 +02:00
linux-man
ce467b53bc Remove comment 2017-05-21 19:49:07 +01:00
linux-man
9c3a65744c Modified Zoom
Block dimension calculation is not accurate, so zoom is made on mouse coordinates
Change default modifier to ctrl - alt don't work on Linux
New parameter zoomLevel: default 2
2017-05-21 19:13:41 +01:00
linux-man
e3a3d3aa0a Better Search
Open/close with Control+Shift+f
Find words inside SPAN
Don't duplicate findings
2017-05-21 19:00:12 +01:00
Hakim El Hattab
64bcfc4f69 change default color of controls to match legacy 2017-05-19 16:14:37 +02:00
Hakim El Hattab
522db9513c remove border from notes contain when printing on separate page 2017-05-19 11:21:40 +02:00
Hakim El Hattab
955075bfc4 adjust autplay position when notes are bottom-aligned 2017-05-19 10:46:13 +02:00
Hakim El Hattab
b1a7b0799f low width speaker notes mode no longer uses vh 2017-05-19 10:20:06 +02:00
Hakim El Hattab
9a7d491ede adjust speaker notes layout on mobile devices 2017-05-19 09:51:01 +02:00
Hakim El Hattab
7ae18c6b1e 'no notes on this slide' placeholder 2017-05-18 16:03:20 +02:00
Hakim El Hattab
052a3f0c71 speaker notes tweak 2017-05-18 16:00:48 +02:00
Hakim El Hattab
b7b3fe3ed4 comment typo 2017-05-18 15:40:17 +02:00
Hakim El Hattab
453a888797 fix error with multiple decimal em in safari 2017-05-18 15:35:25 +02:00
Hakim El Hattab
6dde00fb2e improve controls on touch devices 2017-05-18 14:11:48 +02:00
Hakim El Hattab
fb1b8a2790 revise progress to make them easier to override 2017-05-18 09:58:25 +02:00
Hakim El Hattab
a5e175d59f fix up arrow position 2017-05-18 09:42:01 +02:00
Hakim El Hattab
d770f32bb9 control layout tweaks 2017-05-17 17:10:17 +02:00
Hakim El Hattab
c966672aa4 adjust control layouts when there are no vertical/horiozontal slides 2017-05-17 15:20:45 +02:00
Hakim El Hattab
b784bd56d1 more flexible control size using em 2017-05-17 14:45:01 +02:00
Hakim El Hattab
13733edaa8 control opacity tweak 2017-05-16 15:51:20 +02:00
Hakim El Hattab
67507ccb9d controlsHints -> controlsTutorial 2017-05-16 15:40:50 +02:00
Hakim El Hattab
9e013ccbb2 in/out transitions for controls 2017-05-16 15:31:05 +02:00
Hakim El Hattab
617c17be3c add controlsHint option, animates vertical arrow first time we encounter a vertical slide 2017-05-16 15:04:32 +02:00
Hakim El Hattab
58dc6b7c36 adjust controls layout when there are no vertical or horizontal slides in the deck 2017-05-16 09:45:37 +02:00
Hakim El Hattab
f8b5813e59 prevent flicker on hover 2017-05-16 09:45:37 +02:00
Hakim El Hattab
16c03a5b03 spacing adjustment 2017-05-16 09:45:37 +02:00
Hakim El Hattab
92049d8244 fix unclickable slides in overview when controls were edge-aligned 2017-05-16 09:45:37 +02:00
Hakim El Hattab
2a0a6cbabc reduce control spacing 2017-05-16 09:45:37 +02:00
Hakim El Hattab
54a2137c0d fix responsive issue with speaker notes 2017-05-16 09:45:37 +02:00
Hakim El Hattab
2cc5ae946b new, fixed, speaker notes layout 2017-05-16 09:45:37 +02:00
Hakim El Hattab
44a355b6e9 'controls-placement' -> 'controls-layout', cut back on controls spacing 2017-05-16 09:45:37 +02:00
Hakim El Hattab
10545d41cc simplify control styling using currentColor 2017-05-16 09:45:37 +02:00
Hakim El Hattab
2155415767 more flexible back arrow controls option 2017-05-16 09:45:37 +02:00
Hakim El Hattab
e45a425575 default to bottom right controls, rename soften arrows option 2017-05-16 09:45:37 +02:00
Hakim El Hattab
4fb8e78eb4 collapse control element size when corner aligned 2017-05-16 09:45:37 +02:00
Hakim El Hattab
a9fcaa6f9e new controls are used by default, add config options 2017-05-16 09:45:37 +02:00
Hakim El Hattab
8a09557699 control size tweaks 2017-05-16 09:45:37 +02:00
Hakim El Hattab
69c72b9e08 invert colors of controls based on current background 2017-05-16 09:45:37 +02:00
Hakim El Hattab
ce4537f883 new controls responsively move to bottom right for small displays 2017-05-16 09:45:37 +02:00
Hakim El Hattab
1319016957 new optional controls aligned to screen edges 2017-05-16 09:45:37 +02:00
Hakim El Hattab
963e5c8678 correct target for cssmin 2017-05-16 09:44:36 +02:00
Ben Tsai
0d1be9920f Fix typo
"proceding" → "proceeding"
2017-05-10 20:36:45 -04:00
Hakim El Hattab
ada8003183 Merge pull request #1887 from tristansokol/tristans/add-useavailableport
adds `useAvailablePort` option when serving page with connect.
2017-05-05 14:11:07 +02:00
Hakim El Hattab
00570ea5ce Merge pull request #1884 from demoneaux/upgrade-deps
Upgrade Grunt dependencies and standardise on a consistent file format.
2017-05-05 14:10:24 +02:00
Tristan Sokol
d948c2cd6b adds useAvailablePort option when serving page with connect. 2017-05-02 17:54:29 -07:00
Benjamin Tan
b294323854 Upgrade Grunt dependencies and standardise on a consistent file format.
Closes #1226, #1538.
2017-05-01 12:16:30 +08:00
Greg Denehy
b86b667d25 Changes to fix failed jshint test related to Key Binding API 2017-04-30 19:42:45 +09:30
Greg Denehy
e16508477a Fixed notes.js to account for upstream updates 2017-04-30 17:51:38 +09:30
Greg Denehy
f8bc679182 Merge branch 'dev' into plugin-key-bindings 2017-04-30 17:42:16 +09:30
Greg Denehy
40a46e1c0c Added description of custom key binding API to readme 2017-04-30 17:19:01 +09:30
Greg Denehy
e48e1e19b9 Changed custom key binding config properties to use 'keyCode' instead of 'code' 2017-04-30 16:35:35 +09:30
Greg Denehy
8bf9986fa2 Pass through key event when calling keyboardCondition() to allow conditional function to filter on key codes 2017-04-30 15:24:42 +09:30
Greg Denehy
7297474b2e Added programatic support for custom key bindings with optional descriptions to be added to the help screen 2017-04-30 15:23:04 +09:30
Hakim El Hattab
360bc94006 new fix for prematurely autoplaying background videos 2017-04-27 18:49:20 +02:00
Hakim El Hattab
9f4ed56bb3 larger headings for background sections 2017-04-27 16:42:24 +02:00
Hakim El Hattab
caccf67d3a add for iframe backgrounds 2017-04-27 16:39:49 +02:00
Hakim El Hattab
b19dc7fc80 don't autoplay background videos in overview mode 2017-04-27 16:36:25 +02:00
Hakim El Hattab
8e93a1ddf9 3.5.0 2017-04-26 14:21:54 +02:00
Hakim El Hattab
0c3d89bfce minor tweak for #1564 2017-04-21 09:35:51 +02:00
Adam Spiers
715cf0ba11 optionally display pacing advice based on slide timings
Add an option to display advice on whether the current pace of the
presentation is on track for the right timing (shown as green), and if
not, whether the presenter should speed up (shown as red) or has the
luxury of slowing down (blue).

The pacing timer can be enabled by configuring by the `defaultTiming`
parameter in the `Reveal` configuration block, which specifies the
number of seconds per slide.  120 can be a reasonable rule of thumb.
Timings can also be given per slide `<section>` by setting the
`data-timing` attribute.  Both values are in numbers of seconds.

When the option is enabled, clicking on the timers will reset the timer
to the beginning of the current slide, i.e. as if pacing was perfectly
on track, not to zero as if the presentation had just begun.
2017-04-20 16:11:10 +01:00
Adam Spiers
921a605567 document clock and timer in speaker notes window 2017-04-20 15:18:15 +01:00
Adam Spiers
9c7fda43e9 don't show negative signs inside minutes/seconds elements 2017-04-20 15:18:15 +01:00
Adam Spiers
933eba8789 round decreasing timers to mirror increasing timers 2017-04-20 15:18:15 +01:00
Adam Spiers
1eada3b360 avoid deleting existing classes when muting time elements
and make muting work for negative values
2017-04-20 15:18:15 +01:00
Adam Spiers
b1b4ee270b don't mute minutes when hours is unmuted 2017-04-20 15:18:15 +01:00
Adam Spiers
89b0c5a8d0 use opacity for muted clock elements
This allows us to use different colours for different timers,
which will be useful when we add a pacing timer.
2017-04-20 15:18:15 +01:00
Adam Spiers
a161acaba9 extract time display code into new _displayTime() function
This will allow us to reuse the display code for displaying
an additional pacing timer.
2017-04-20 15:18:15 +01:00
Adam Spiers
eb23e58114 Allow popup window access to Reveal API 2017-04-20 15:18:15 +01:00
Adam Spiers
ef9cbbbbb9 add new getSlides() API
This can be used by plugins which are concerned with helping the
presenter with their pace.
2017-04-20 15:18:15 +01:00
Adam Spiers
40912ace1f clarify getTotalSlides() returns the number of slides 2017-04-20 15:18:15 +01:00
Adam Spiers
d75afd6108 expose getPastSlideCount() via public API
This can be used by plugins which are concerned with helping the
presenter with their pace.
2017-04-20 15:18:15 +01:00
Adam Spiers
eac37990e1 clarify meaning of getProgress() value 2017-04-20 15:18:15 +01:00
Hakim El Hattab
9bbd5f2735 formatting 2017-04-07 10:10:11 +02:00
Hakim El Hattab
2289b92961 Merge pull request #1851 from astone123/master
Fix data-background-video autoplay on iOS Safari
2017-04-07 10:02:58 +02:00
Hakim El Hattab
d1d44cf6b7 formatting 2017-04-07 09:55:55 +02:00
Hakim El Hattab
30f2af0ac5 Merge pull request #1844 from riezebosch/pdf-print-stretch
print-pdf layout slide contents to fit stretch elements
2017-04-07 09:54:39 +02:00
Hakim El Hattab
8ec5e00062 Merge pull request #1843 from riezebosch/pdf-print-callback
print-pdf using callback iso timer
2017-04-07 09:42:24 +02:00
Hakim El Hattab
1babc8d31c Merge pull request #1866 from christianp/mathjax-cdn
replace cdn.mathjax.org with cdnjs
2017-04-07 09:33:05 +02:00
Christian Lawson-Perfect
9495b64d2c replace cdn.mathjax.org with cdnjs
cdn.mathjax.org is shutting down: https://www.mathjax.org/cdn-shutting-down/

This changes the default MathJax URL in the math plugin, as well as
references in README.md and test/examples/math.html
2017-04-05 12:48:56 +01:00
Hakim El Hattab
c3e96f1f0e make pdf page height offset configurable 2017-04-04 14:02:54 +02:00
Hakim El Hattab
2584a6d970 new cli and in-browser pdf printing compatible fix for #1804 2017-04-04 13:37:01 +02:00
Hakim El Hattab
3ea7e2ff59 allow fullscreen for background iframes 2017-03-30 16:26:49 +02:00
Hakim El Hattab
a0a3b4f80d add autoPlayMedia config option, overrides individual autoplay settings 2017-03-23 11:44:02 +01:00
ADAM STONE
d9dd9a92fb Fix video background autoplay on iOS 2017-03-17 22:47:25 -04:00
Manuel Riezebosch
34f3773bf0 print-pdf layout slide contents to fit stretch elements
layout() and thereby layoutSlideContents() is never invoked
when isPrintingPdf() is true so stretch elements are not
sized correctly.
This is ensured now by invoking the layoutSlideContents
from SetupPDF(). There seems no need to scale down
like in other PR's is suggested.
2017-03-14 19:16:08 +01:00
Manuel Riezebosch
9a7c7ce93a print-pdf using callback iso timer
Use window.callPhantom icw page. onCallback to wait for pdf-ready event.
From: http://stackoverflow.com/a/28925479/129269
2017-03-14 18:54:04 +01:00
Hakim El Hattab
7e6fb9ec87 avoid npe on iframe postMessage 2017-03-14 09:06:39 +01:00
RobertBaron
f070ba47ec Allow whitespace on background-images, w3 compliance 2017-02-23 19:03:15 -06:00
Hakim El Hattab
b143e5976b tweaks to showSlideNumber config #1833 2017-02-20 11:49:36 +01:00
Hakim El Hattab
8f7e4bfd41 Merge branch 'slidenum' of https://github.com/malcomio/reveal.js into dev 2017-02-20 11:41:31 +01:00
Hakim El Hattab
5565d08612 note about deploying multiplex server with now #1830 2017-02-20 11:37:18 +01:00
Malcolm Young
95bca847d6 correct config name in README 2017-02-17 15:19:15 +00:00
Malcolm Young
da23d682c6 allow configuration of which view slide number appears on - fixes #1791 2017-02-17 15:08:57 +00:00
Hakim El Hattab
1cee8998a0 fix overview rendering issues in latest chrome #1649 2017-02-17 10:50:52 +01:00
Hakim El Hattab
fa70a7a517 phantom export throws error if reveal.js isn't present 2017-02-15 11:43:57 +01:00
Hakim El Hattab
bef8109506 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2017-02-15 11:19:25 +01:00
Hakim El Hattab
a349ff43c5 new phantom pdf export script that works with 3.4.0 #1815 2017-02-15 11:19:02 +01:00
Hakim El Hattab
313a23ba2b merge autoplay conflict #1771 2017-02-14 14:51:43 +01:00
Hakim El Hattab
909efab7df fix readme conflict 2017-02-14 14:42:22 +01:00
Hakim El Hattab
bc1ca1a58a updated pdf docs 2017-02-14 14:40:12 +01:00
Hakim El Hattab
2f54af4614 update readme re: pdf exports #1823 2017-02-14 14:38:57 +01:00
Hakim El Hattab
8b97ff3126 Merge pull request #1823 from gilxa1226/master
Update to README.md for PDF printing
2017-02-14 14:25:55 +01:00
Hakim El Hattab
5ad66f3779 docs for #1816 and remove showHelp 2017-02-09 11:37:47 +01:00
Hakim El Hattab
1749f0d019 Merge pull request #1816 from Frazer/patch-1
added toggleHelp function
2017-02-09 11:31:00 +01:00
Hakim El Hattab
adc326139a update deserialize regex to work with decimals 2017-02-08 12:56:51 +01:00
Frazer Kirkman
2a1303f3c1 added override parameter to toggleHelp function 2017-02-07 19:53:58 +01:00
gilxa1226
d7b34b6e0f Update README.md to include block for pdf printing 2017-02-07 07:44:52 -05:00
gilxa1226
bcfb65658f Update README.md 2017-02-07 07:43:41 -05:00
Frazer Kirkman
bede9a22e8 added toggleHelp function
this way a key can be given ability to toggleHelp on and off.  Previously Reveal.showHelp could open the help screen, but no way to close it.
2017-02-05 18:42:59 +01:00
Hakim El Hattab
9f99ac8b84 adjust comment for display config value #1325 2017-02-02 10:47:39 +01:00
Hakim El Hattab
8a0dca2ba0 Merge branch 'issue-1324' of https://github.com/mojavelinux/reveal.js into dev 2017-02-02 10:42:21 +01:00
Hakim El Hattab
cc43ff21ef Merge branch 'master' of https://github.com/Bramas/reveal.js into dev 2017-02-01 11:13:40 +01:00
Hakim El Hattab
2c9e226fab warning about cube/page being deprecated #1774 2017-02-01 10:33:50 +01:00
Hakim El Hattab
f496613dd3 improved fragment notes support #1636 2017-01-31 17:08:08 +01:00
Hakim El Hattab
c49f76d271 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2017-01-31 16:48:55 +01:00
Hakim El Hattab
1413cbc1a9 Merge pull request #1636 from traff/master
For a fragment: allow to show a separate note defined in it
2017-01-31 16:47:29 +01:00
Hakim El Hattab
dc159f2825 Merge pull request #1644 from rajgoel/dev
Turn off preview links locally
2017-01-31 16:45:07 +01:00
Hakim El Hattab
7daa0e04de make background videos work on ipad #1778 2017-01-31 16:24:06 +01:00
Hakim El Hattab
981a8b98e4 Merge pull request #1728 from opdavies/sass-extension
support .sass themes
2017-01-31 15:49:51 +01:00
Hakim El Hattab
581da02def Merge pull request #1764 from demoneaux/package-json
Shift `dependencies` to `devDependencies`.
2017-01-31 15:11:38 +01:00
Hakim El Hattab
eada86c8fd recommend using textarea wrapper for inline markdown #1780 2017-01-31 15:07:03 +01:00
Hakim El Hattab
02a6b0515e fix markdown typo, update comment #1780 2017-01-31 15:02:59 +01:00
Hakim El Hattab
37f3da6095 Merge branch 'patch-2' of https://github.com/ccqgithub/reveal.js into dev 2017-01-31 15:02:26 +01:00
Hakim El Hattab
3617eaccb6 note about showNotes in PDF exports #1800 2017-01-30 14:50:17 +01:00
Hakim El Hattab
fa01fa366a typo 2017-01-30 14:38:14 +01:00
Hakim El Hattab
c018d04197 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2017-01-30 14:33:52 +01:00
Hakim El Hattab
3bcd167ce9 Merge pull request #1803 from bitjson/patch-1
correct grunt option usage
2017-01-30 14:20:41 +01:00
Hakim El Hattab
cd36c9274f Merge branch 'master' of github.com:hakimel/reveal.js into dev 2017-01-25 11:01:40 +01:00
Hakim El Hattab
9f8e4d5742 3.4.1 2017-01-25 10:51:25 +01:00
Hakim El Hattab
953d302f8b adjust pdf margins instead of heights to fix #1804 2017-01-25 10:46:03 +01:00
Hakim El Hattab
84202fa072 adjust pdf margins instead of heights to fix #1804 2017-01-25 10:43:26 +01:00
Hakim El Hattab
d9dcff1503 additional fix for empty pages in pdf exports #1804 2017-01-24 15:29:34 +01:00
Hakim El Hattab
286b69b61f fix empty pages in pdf exports (closes #1804) 2017-01-24 15:29:27 +01:00
Hakim El Hattab
934c2e9730 additional fix for empty pages in pdf exports #1804 2017-01-24 15:27:37 +01:00
Hakim El Hattab
d4133f0160 fix empty pages in pdf exports (closes #1804) 2017-01-24 14:48:36 +01:00
Jason Dreyzehner
e3ca5e84a3 correct grunt option usage 2017-01-23 21:26:33 -05:00
Hakim El Hattab
a6ecbfa732 merge info links in index 2017-01-23 11:23:45 +01:00
Hakim El Hattab
08e6cc5a3c Merge pull request #1794 from pkubowicz/index-history
Remove 'history: true' from index.html
2017-01-23 11:16:48 +01:00
Hakim El Hattab
cb16f27dd3 Merge pull request #1768 from demoneaux/background-images
Allow background images without protocols to have query hashes/parameters.
2017-01-23 11:11:28 +01:00
Hakim El Hattab
e8164c1392 2017 2017-01-20 10:35:01 +01:00
Hakim El Hattab
20238ee1d6 make backgrounds (iframes) interactive when the foreground is empty 2017-01-19 12:16:30 +01:00
Hakim El Hattab
98de9327a7 remove unused argument 2017-01-19 12:08:28 +01:00
Hakim El Hattab
941b86b6c3 works with video, defaults to (same as for images) 2017-01-18 10:43:29 +01:00
Hakim El Hattab
84090b882f fix race condition by updating backgrounds after slide visibility 2017-01-17 18:37:43 +01:00
Hakim El Hattab
f9e5467000 prevent autoplaying backgrounds from playing if slide is hidden 2017-01-17 13:19:10 +01:00
Hakim El Hattab
a38207f1d7 wait for in-slide video/audio to load before playing, reuse same autoplay logic for slide backgrounds 2017-01-16 16:11:20 +01:00
Piotr Kubowicz
4afd854037 Remove 'history: true' from index.html
Readme says the default is 'history: false', so it may be surprising
for users - it's easy to miss the contradicting setting in index.html
2017-01-15 16:35:31 +01:00
Hakim El Hattab
568c7516f7 fix unclosed code block 2017-01-10 14:43:47 +01:00
Hakim El Hattab
fb8414f4cb 3.4.0 2017-01-10 13:47:33 +01:00
Hakim El Hattab
a144134b42 Merge branch 'dev' of github.com:hakimel/reveal.js 2017-01-10 13:45:52 +01:00
Season Chen
5f76234566 support complex markdown
support <textarea data-template> `some code` </textarea>
2016-12-23 13:08:23 +08:00
Hakim El Hattab
97bb6e9b58 fragments inherit visibility to avoid conflicts with parent slide visibility 2016-12-15 14:06:17 +01:00
Hakim El Hattab
f2bd9d2970 don't show error message while iframe fades in #1577 2016-12-13 16:16:51 +01:00
Hakim El Hattab
001d4d94d3 Merge branch 'add-refused-to-display-tips-to-link-preview' of https://github.com/Huxpro/reveal.js into dev 2016-12-13 15:57:43 +01:00
Hakim El Hattab
40c4db1e04 always use lowercase reveal.js 2016-12-13 15:52:34 +01:00
Hakim El Hattab
63d3b59ab2 Merge pull request #1767 from demoneaux/readme
Add note about head.js to readme.
2016-12-13 15:50:30 +01:00
Markku Roponen
962c6c133b #1770, set 'data-paused-by-reveal' attribute only for the media elements, which are not already in paused state. 2016-12-13 16:02:26 +02:00
Markku Roponen
da40eafccd #1770, added second argument for setAttribute 2016-12-12 16:44:24 +02:00
Markku Roponen
54bfad62d7 #1770, fixed function name. 2016-12-12 16:41:52 +02:00
Markku Roponen
6831f6c174 #1770, resume playback for paused media. 2016-12-12 16:30:07 +02:00
Benjamin Tan
441a26cf90 Allow background images without protocols to have query hashes/parameters.
Closes #1603.
2016-12-11 18:14:02 +08:00
Benjamin Tan
4d0f1adc40 Add note about head.js to readme.
Closes #1569.
2016-12-11 16:29:07 +08:00
Benjamin Tan
90b301d0a0 Enable passing options for parsing Markdown.
Closes #1163, #1495.
2016-12-08 17:41:55 +08:00
Benjamin Tan
22de402888 Shift dependencies to devDependencies.
The `reveal.js` npm module is typically installed to access the CSS/JS
assets for Reveal.js. For those that want to run the plugins, they would
clone the whole repository. Hence, it doesn’t make sense to include
those as `dependencies`, which will increase download times.

Closes #1734.
2016-12-08 15:26:16 +08:00
Benjamin Tan
713702a0ab Reduce required Node.js version to 4.0.0.
The development workflow can be used with Node 4+, not just Node 6. We
should avoid showing warnings and errors when users are installing this
package via npm/yarn.

Ref. #1729, #1743.
Closes #1725.
2016-12-06 11:38:17 +01:00
Hakim El Hattab
2bd6b563be Merge pull request #1760 from demoneaux/package-json
Reduce required Node.js version to 4.0.0.
2016-12-06 11:37:31 +01:00
Benjamin Tan
03ac4a2e8e Reduce required Node.js version to 4.0.0.
The development workflow can be used with Node 4+, not just Node 6. We
should avoid showing warnings and errors when users are installing this
package via npm/yarn.

Ref. #1729, #1743.
Closes #1725.
2016-12-06 18:12:41 +08:00
Hakim El Hattab
e4e5cc1083 Merge pull request #1740 from christinakayastha/feature/printing-remove-slide-number
Hide slide number when in paper or pdf print view
2016-12-01 10:36:03 +01:00
Hakim El Hattab
f0dfb5b5e3 merge package version conflicts 2016-12-01 10:34:02 +01:00
Hakim El Hattab
b4d46d2b7c update dependencies to work with latest node #1743 2016-12-01 10:32:44 +01:00
Hakim El Hattab
3de1521a39 Merge pull request #1743 from haf/patch-1
Bump node engine in packages.json
2016-12-01 10:31:44 +01:00
Hakim El Hattab
e460b2bd4b Merge pull request #1747 from spencermathews/feature/readme-defaults-fix
Defaults in README are not current
2016-12-01 10:23:44 +01:00
Hakim El Hattab
67ac871397 Merge pull request #1757 from daanmichiels/correct-copyright
include contributors in (c)
2016-12-01 10:22:44 +01:00
Hakim El Hattab
775d510c2f Merge pull request #1756 from jmpp/better-data-trim
Implementing a better data-trim
2016-12-01 10:18:50 +01:00
Daan Michiels
785dbddd28 correct copyright message to include contributors 2016-11-25 12:36:57 -06:00
J.M. Cléry
35162c1f5e Better version of data-trim on code snippets 2016-11-22 23:42:21 +01:00
Spencer Mathews
21c1fafa52 Update README.md to reflect current defaults in js/reveal.js 2016-11-15 13:14:56 -08:00
Hakim El Hattab
19188205de add pdf-ready event; dispatched when the presentation is laid out and ready to print 2016-11-09 11:56:55 +01:00
Henrik Feldt
a8586b3ab3 Bump node engine in packages.json 2016-11-09 11:11:34 +01:00
Christi Kaes
80e28774dd Don't remove slide-number in pdf view 2016-10-30 14:11:10 -04:00
christikaes
659822a8b5 Hide slide number when in paper or pdf print view 2016-10-30 11:31:20 -04:00
Oliver Davies
b78cca5831 Support sass extension for custom themes 2016-10-16 09:53:19 +01:00
Hakim El Hattab
ca37d4e5b9 remove debug code 2016-10-12 13:21:22 +02:00
Hakim El Hattab
7547b893d4 fixes ff overview rendering bug #1649 2016-10-10 12:11:35 +02:00
Hakim El Hattab
e76855e257 remove unused dom lookup 2016-10-06 11:01:44 +02:00
Hakim El Hattab
0b9233cf4a attempt at fixing ff transition bug #1627 2016-10-05 14:00:40 +02:00
Hakim El Hattab
ce55d1a179 fix merge conflict for #1634 2016-10-05 12:21:21 +02:00
Hakim El Hattab
02f95f4de6 code format tweaks 2016-10-05 12:00:21 +02:00
Maarten Schroeven
7e99626b14 only use nodeType 1 and 3 (only relevant types) 2016-10-05 11:54:46 +02:00
Maarten Schroeven
ab33b31f0a limit text written to the status div 2016-10-05 11:54:46 +02:00
CH
2cf00254a1 renamed grunt 'base' option to 'root' (#1660)
* Allow slides to be served away from revealjs server location

The previous 'base' option conflicts with Grunt's 'base' option.
Changing it to 'root' avoids this. Further, updating to a newer Grunt
allows multiple parameters to be used. therefore `grunt serve --root="."
--root="pathtomyslides"` allows you to keep your slide content separate
from JS/CSS and such

* Live reload for relocated base

* Updated packages to match origin/dev

* Updated packages to match origin/dev

* Ensure root is an array
2016-10-05 11:45:37 +02:00
Hakim El Hattab
693a370f06 remove issue comment 2016-10-05 11:36:56 +02:00
Gerald
969885a7dc ignore delta=0 mousewheel event
fix #1607
2016-10-05 11:29:47 +02:00
Hakim El Hattab
0b6585bd44 prevent exception when initializing with no slides #1678 #1679 2016-10-05 11:23:41 +02:00
Jaiden Mispy
3c36ee6cff Add note to README about how to disable scaling 2016-10-05 11:16:41 +02:00
chadmorrow
ea8964ddbf autoSlide duration with playbackRate
The autoSlide duration of media elements with data-autoplay now takes the playbackRate of said media element into account when setting the duration so that autoSlide and the media element stay in sync.
2016-10-05 11:12:27 +02:00
Hakim El Hattab
255bde174c Merge branch 'r400-linux' of https://github.com/jroper/reveal.js into dev 2016-10-05 11:07:10 +02:00
James Roper
1301de9e39 Logitech R400 on Ubuntu blackout button support
On Ubuntu 16.04, the Logitech R400's blackout button gets mapped to 'v'
(keyCode 86). I don't know why this is, but since nothing else is
currently using 'v', this allows it to be supported out of the box.
2016-10-01 22:00:00 +10:00
Hakim El Hattab
ec76f4790c speaker layouts in server side notes plugin 2016-09-21 14:10:45 +02:00
Hakim El Hattab
da5709919b layout selector for speaker view; includes four options 2016-09-21 13:54:42 +02:00
Hakim El Hattab
79728e25cd autoplay support for content inside of fragments 2016-09-20 13:41:38 +02:00
Hakim El Hattab
bc4fc65da4 none/fade/slide transitions use flat transform style, prevents blurred content #1002 2016-08-01 09:15:34 +02:00
Asvin Goel
a652e0a8ea Allow switching off preview links
The data-preview-link=false tag can be used to switch off preview links
2016-07-21 12:15:07 +02:00
Asvin Goel
c1d94f1b60 Merge pull request #12 from hakimel/dev
Syncing to current version
2016-07-21 12:09:08 +02:00
Dmitry Trofimov
86a3f0276b For a fragment: allow to show a separate note defined in it
When a slide has several fragments it could be convenient to define a note for each of them. In this case we need to show only this specific note defined in a fragment and not others. General note of a slide shouldn't be also shown, as a more specific one should have greater relevance in this case.
2016-07-04 16:57:01 +02:00
Hakim El Hattab
304b0292be null computed style to avoid npe 2016-07-04 14:46:46 +02:00
Hakim El Hattab
ab2bb869a3 null check to avoid occasional npe 2016-07-04 13:32:03 +02:00
Hakim El Hattab
6447b59ac5 ready flag on .reveal container 2016-07-01 08:44:27 +02:00
Charles Grigg
59f3395c7f Update JSDocs and fix typos 2016-06-29 23:10:55 -04:00
Hakim El Hattab
541bcf2123 update dependencies based on retire.js info #1473 2016-06-28 15:48:09 +02:00
Hakim El Hattab
e7de1bd8b0 merge retire.js #1473 2016-06-28 15:43:11 +02:00
Hakim El Hattab
9639b53ff4 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-06-28 15:36:08 +02:00
Hakim El Hattab
8f47b17230 Merge pull request #1628 from davidjb/markdown-doc-fix
Detail markdown plugin attributes & defaults
2016-06-28 14:46:05 +02:00
Quentin Bramas
338a7b0ff9 add 'npm build' script that launch grunt 2016-06-28 14:31:37 +02:00
Hakim El Hattab
1da1ff0d6d use first fragment's data-autoslide value when there is no current fragment 2016-06-27 11:13:09 +02:00
Hakim El Hattab
65a90cc75d remove unused dom reference 2016-06-22 09:31:05 +02:00
Hakim El Hattab
e4634f20e8 revise simple.md so that slide 1.1 and 1.2 correctly break into separate slides 2016-06-22 09:24:09 +02:00
Hakim El Hattab
8d7ff10ce3 Merge branch 'bug/markdownSetOptions' of https://github.com/snowyu/reveal.js into dev 2016-06-22 09:20:24 +02:00
David Beitey
1fe20cb42a Detail markdown plugin attributes & defaults
Expands the details already given by highlighting the defaults for all attributes and clarifying what's required.
2016-06-22 15:10:31 +10:00
Hakim El Hattab
8d4cb810d6 move speaker notes into page container when printing pdf 2016-06-21 14:21:42 +02:00
Hakim El Hattab
bac187f3a0 request fullscreen on documentElement instead of body (#1621 #1624) 2016-06-21 11:33:07 +02:00
Hakim El Hattab
a12a17b2d7 request fullscreen on documentElement instead of body (#1621 #1624) 2016-06-21 11:30:12 +02:00
Hakim El Hattab
ce777e4c4b Revert "fix theme backgrounds in firefox fullscreen mode #1386"
This reverts commit b7e0d9b1c7.
2016-06-21 11:27:24 +02:00
Hakim El Hattab
b7e0d9b1c7 fix theme backgrounds in firefox fullscreen mode #1386 2016-06-20 10:27:04 +02:00
Hakim El Hattab
8162855d23 increase default font sizes, adjust config defaults for less margings and larger max scale #1605 2016-06-10 10:58:40 +02:00
Hakim El Hattab
6bfa48a667 prevent repeated initialization #1616 2016-06-10 10:41:16 +02:00
Hakim El Hattab
d78a8046dc Merge branch 'Timothep-master' into dev 2016-06-10 10:13:06 +02:00
Timothep
ad86772f20 Horizontal 2-1 View for the speaker notes instead of a vertical 1-2 2016-06-10 10:12:54 +02:00
Timothep
02123205a0 Added a description of the undocumented timer-reset feature 2016-06-10 10:12:54 +02:00
Hakim El Hattab
64aa3b2647 Merge branch 'master' of https://github.com/dhyegofernando/reveal.js into dev 2016-06-10 10:09:21 +02:00
Hakim El Hattab
ca92d22adc add showHelp to api #1611 2016-06-10 10:04:54 +02:00
Hakim El Hattab
7d6cc9f3ec Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-06-03 13:57:09 +02:00
Hakim El Hattab
c2997c605d text alignment 2016-06-03 13:56:52 +02:00
Hakim El Hattab
6b4bdd2c90 hdpi slides banner 2016-06-03 13:54:42 +02:00
Hakim El Hattab
f9ae4122f7 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-06-03 10:15:34 +02:00
Hakim El Hattab
904f9878d3 slides banner 2016-06-03 10:15:26 +02:00
Hakim El Hattab
4321266276 include layout for notes outside of pdf exports 2016-05-26 10:09:09 +02:00
Hakim El Hattab
3111d3b1ae support for 'separate-page' layout for notes in PDF exports #1518 2016-05-26 09:57:27 +02:00
Hakim El Hattab
e93afb7289 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-05-23 12:03:39 +02:00
Hakim El Hattab
a8c4109244 Update README.md
more in-depth documentation of slide backgrounds #1542
2016-05-23 11:59:29 +02:00
Hakim El Hattab
fd97d56894 Merge pull request #1537 from vincentbernat/fix/dark-background-simple-theme
make theme "simple" use white titles on dark backgrounds
2016-05-23 10:57:47 +02:00
Hakim El Hattab
9cd7f3f37b code format 2016-05-23 10:54:40 +02:00
Hakim El Hattab
884d3cd177 Merge pull request #1585 from jasonkiss/feature/disabled-buttons
set/remove @disabled on navigation buttons
2016-05-23 10:52:14 +02:00
Hakim El Hattab
e2fa1d966c ocd 2016-05-23 10:50:39 +02:00
Hakim El Hattab
2418a12cb9 Merge pull request #1586 from jasonkiss/feature/accessible-speaker-notes
make speaker notes keyboard accessible
2016-05-23 10:48:39 +02:00
Hakim El Hattab
6593ac3d5f moz selection color in theme template #1575 2016-05-23 10:38:46 +02:00
Hakim El Hattab
3483aacfa7 Merge pull request #1575 from aniqah/firefox-selection-colour
Add selection colour for Mozilla Firefox
2016-05-23 10:36:54 +02:00
Hakim El Hattab
2503b1a2e8 merge readme conflict #1595 2016-05-23 10:34:58 +02:00
Hakim El Hattab
c5c0290cca Merge branch 'patch-1' of https://github.com/tiagorg/reveal.js into dev 2016-05-23 10:28:32 +02:00
Tiago Garcia
187114f472 Removing duplicated "position" property at pdf.css
Found that by running css-lint on the code
2016-05-21 11:36:49 -07:00
Tristan Sokol
b79f1fac13 Add minor imporovements to the PDF export instructions 2016-05-19 16:47:25 -07:00
Jason Kiss
dec6d1745b make speaker notes keyboard accessible
Places div.speaker-notes in default kbd Tab order, and when focused,
prevent slide navigation with up/down arrows, allowing up/down arrow
keys to scroll div.speaker-notes.
2016-05-10 11:02:45 +12:00
Jason Kiss
fb8bbaac00 set/remove @disabled on navigation buttons
Keeps disabled buttons out of kbd tab order and indicates to assistive
tech like screen readers that button is disabled. Otherwise buttons
that aren’t enabled remain in kbd Tab order and screen readers announce
them as buttons, but they don’t work.
2016-05-10 10:03:05 +12:00
黄玄
e2a8634057 add refused-to-display tips in link-preview-overlay 2016-05-02 01:42:11 +08:00
Hakim El Hattab
2a79d054d4 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-04-29 09:26:41 +02:00
Hakim El Hattab
3d49b1dea3 Merge pull request #1571 from adius/patch-1
Simplify full setup
2016-04-29 09:26:28 +02:00
Hakim El Hattab
ce7d494ae9 tweak formatting to match rest of slide 2016-04-29 09:25:05 +02:00
Hakim El Hattab
2d54bc6823 Merge pull request #1572 from jesstelford/zoom-content-size
More natural zooming on block level elements
2016-04-29 09:24:25 +02:00
Hakim El Hattab
9b11915c3a fix pdf bg layering, simplify code 2016-04-28 17:07:26 +02:00
Hakim El Hattab
5558103522 make max pages per slide limit configurable 2016-04-28 11:31:11 +02:00
Hakim El Hattab
fcb6ea8385 prevent pages from overflowing when printing to pdf 2016-04-28 11:16:36 +02:00
Aniqah Mair
d1a3656108 Add selection colour for Mozilla Firefox
Defines the highlight colour when selecting slide content using Mozilla
Firefox to match other browsers, instead of being the default colour.
2016-04-27 14:50:03 -04:00
Hakim El Hattab
66c4e6a77f use scrollHeight instead of custom measurement 2016-04-27 11:12:16 +02:00
Jess Telford
a0e6da6a9c More natural zooming on block level elements
Switching a `display: block` element to `display: inline-block` allows calculating the bounds based on the contents of the div rather than the entire container (which is often `width: 100%`).

This provides a much more natural zoom, especially for paragraphs and code examples.
2016-04-26 07:27:59 +10:00
Adrian Sieber
87b082340f Simplify full setup 2016-04-24 09:39:23 +00:00
Hakim El Hattab
539e774d31 3.3.0 2016-04-18 15:29:51 +02:00
Hakim El Hattab
fc3e4d7f23 change introduction 2016-04-18 14:50:36 +02:00
Hakim El Hattab
1efa52486c readme tweak for #1535 2016-04-13 15:37:04 +02:00
Hakim El Hattab
f0ee41a22d Merge branch '1549' of https://github.com/RopoMen/reveal.js into dev 2016-04-13 15:26:06 +02:00
Hakim El Hattab
5dd9067150 overview now works with percentage based width/height #1247 2016-04-13 15:21:30 +02:00
Hakim El Hattab
cb092e60bf Merge branch 'dev' of github.com:hakimel/reveal.js into dev 2016-04-10 12:09:02 +02:00
Hakim El Hattab
a6507afcb4 widen watch for html files, required for updates to demo.html 2016-04-10 12:07:49 +02:00
Hakim El Hattab
87b24dd457 merge conflict 2016-04-10 12:07:10 +02:00
Hakim El Hattab
5a7ac78d4b lazy load iframe in demo 2016-04-10 11:57:38 +02:00
Hakim El Hattab
0fedfbe4c8 Merge branch 'update-headjs' of https://github.com/booi/reveal.js into dev 2016-04-10 11:56:32 +02:00
Ruben Oostinga
2dc546f5ba Fix watching for markdown files
`./*.md` didn't work `*.md` does work
2016-04-09 12:33:46 +02:00
Markku Roponen
a63c8cab92 Fixes #1549, now UA match is limiting out MS Edge and Chrome detection is improved. Also improved UserAgent access by storing it in to a local variable, it was accessed so many times in different places. 2016-04-08 15:47:27 +03:00
Hakim El Hattab
e83e275a4c Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-04-07 10:31:56 +02:00
Hakim El Hattab
d6406e433e new multiplex server courtesy of now.sh (closes #1377) 2016-04-07 10:31:41 +02:00
Hakim El Hattab
492e2e2e62 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-04-07 10:25:31 +02:00
Hakim El Hattab
f85a1e9f1a remove test content 2016-04-07 10:25:10 +02:00
Hakim El Hattab
07c2355604 support for standalone multiplexing 2016-04-07 10:24:44 +02:00
Hakim El Hattab
eca7113f59 Update README.md 2016-04-07 09:55:44 +02:00
Hakim El Hattab
f98b5ccdca Update README.md
readme tweaks
2016-04-07 09:55:04 +02:00
Hakim El Hattab
8789baae29 Merge pull request #1545 from ducin/master
Table of contents added in README.md
2016-04-07 09:51:51 +02:00
Hakim El Hattab
520fa4986e generalize scroll offset prevention 2016-04-07 09:07:19 +02:00
Tomasz Ducin
37ac67dba5 Table of contents added in README.md 2016-04-02 19:43:15 +02:00
Vincent Bernat
a9566dfbd4 make theme "simple" use white titles on dark backgrounds
This is similar to what is done in the "white" theme.
2016-03-24 16:25:01 +01:00
Hakim El Hattab
00b9c2b929 minor tweaks 2016-03-20 18:57:30 +01:00
Hakim El Hattab
4e416fdc58 remove unintentionally added file 2016-03-20 18:52:12 +01:00
Hakim El Hattab
3d0969166f new empty template at index.html, move old index to demo.html #1526 2016-03-20 18:50:23 +01:00
Hakim El Hattab
2625a9292e add 'shuffle' config value and API method #1506 #1089 2016-03-20 17:57:52 +01:00
Brandon Ooi
1a5f299599 update headjs to v1.0.3 2016-03-16 13:57:15 -07:00
Dhyego Fernando
587d16ceef fix(PDF Export): Mark as important width, height and add zoom properties to fix CSS rules which were overrided by inline styles 2016-03-10 13:50:35 -04:00
Hakim El Hattab
0dbdd8a366 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-03-10 16:03:09 +01:00
Hakim El Hattab
de2ab07334 slides link 2016-03-10 16:02:36 +01:00
Hakim El Hattab
0c5ce1e731 Merge pull request #1523 from demoneaux/readme-fix
Make PDF export section less OS X specific.
2016-03-09 10:05:11 +01:00
Hakim El Hattab
ef137fd01f server notes plugin no longer syncs overview mode #1446 2016-03-09 10:02:25 +01:00
Hakim El Hattab
8e3a7f03d1 notes plugin no longer syncs overview mode #1446 2016-03-09 09:57:58 +01:00
Hakim El Hattab
922677ac66 fix notes regex #1522 #1392 2016-03-09 09:37:19 +01:00
Benjamin Tan
ac2a3fff75 Make PDF export section less OS X specific.
Closes #1073.
2016-03-07 19:15:59 +08:00
Hakim El Hattab
7cee887815 Merge branch 'patch-1' of https://github.com/LaurentTreguier/reveal.js into dev 2016-03-07 08:58:58 +01:00
Hakim El Hattab
db46896613 Merge pull request #1522 from demoneaux/notes-fix
Fix query parameter issue in notes plugin.
2016-03-07 08:53:27 +01:00
Hakim El Hattab
e3d681e7c6 Merge pull request #1521 from demoneaux/unused-dependencies
Remove unused dependencies.
2016-03-07 08:52:25 +01:00
Benjamin Tan
6d0b52026a Fix query parameter issue in notes plugin.
Closes #1392.
2016-03-06 18:28:08 +08:00
Benjamin Tan
9eb56f8146 Remove unused dependencies. 2016-03-06 16:52:02 +08:00
Hakim El Hattab
0eb2d81f35 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-03-04 14:47:01 +01:00
Hakim El Hattab
c6b6ae4397 Merge pull request #1484 from omer727/patch-1
Fixing spelling typo and GitHub proper camelcase for brand name
2016-03-04 14:46:33 +01:00
Hakim El Hattab
acc40095d5 use css to scale slides up in safari 2016-02-29 11:31:00 +01:00
LaurentTreguier
219a60053a Change ".video" to ".reveal .video"
I don't know if this is supposed to be this way ?
2016-02-17 20:07:53 +01:00
Hakim El Hattab
191dbe68d5 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-22 11:09:39 +01:00
Hakim El Hattab
c93fbf1ddc readme tweak 2016-01-22 11:02:05 +01:00
Hakim El Hattab
fc1c239743 add barebones example to readme 2016-01-22 10:59:02 +01:00
omer727
6af739f81c Fixing spelling typo and GitHub proper camelcase for brand name 2016-01-17 14:42:56 +02:00
Hakim El Hattab
d0bb69d427 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-11 10:34:01 +01:00
Hakim El Hattab
8a40bb481e note about showNotes in PDF exports 2016-01-11 10:33:40 +01:00
Hakim El Hattab
fdb75176e7 merge #1220 2016-01-11 10:17:02 +01:00
Hakim El Hattab
12acf08ca5 Merge branch 'jetzhliu-patch-1' of https://github.com/jetzhliu/reveal.js into dev 2016-01-11 10:05:42 +01:00
Hakim El Hattab
fba12abd6a Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-11 10:05:25 +01:00
Hakim El Hattab
3c46733a54 Merge pull request #1476 from prtksxna/patch-1
Remove rebase conflict in README.md
2016-01-11 10:02:40 +01:00
Prateek Saxena
7eca84254e Remove rebase conflict in README.md 2016-01-11 05:19:28 +05:30
Hakim El Hattab
19a69b2c89 code format 2016-01-08 14:33:34 +01:00
Hakim El Hattab
3df2129bd6 Merge branch 'patch-1' of https://github.com/danieltdt/reveal.js into dev 2016-01-08 14:32:03 +01:00
Hakim El Hattab
993526ff67 fix broken iframe in backgrounds example 2016-01-08 14:18:53 +01:00
Hakim El Hattab
3d33d27b86 tweak implementation of #1376 2016-01-08 14:16:42 +01:00
Hakim El Hattab
c0ea2cd980 same code format 2016-01-08 14:02:16 +01:00
Hakim El Hattab
daa5f031bf Merge branch 'patch-2' of https://github.com/teawithfruit/reveal.js into dev 2016-01-08 14:00:50 +01:00
Hakim El Hattab
8ec529d767 rebuild css 2016-01-08 13:59:12 +01:00
Hakim El Hattab
a5750f03c0 merge conflict 2016-01-08 13:58:35 +01:00
Hakim El Hattab
06cdd9b7cd include speaker view keyboard shortcut when applicable #1466 2016-01-08 13:49:06 +01:00
Hakim El Hattab
4ee6769e0f tweaked fragment examples 2016-01-08 11:05:59 +01:00
Hakim El Hattab
52aec94800 center help overlay with flexbox 2016-01-08 10:58:13 +01:00
Bjoern Kimminich
7621e1085d added retire.js to build process
-allows security vulnerability check in used npm-dependencies and own scripts
-execute with ```grunt retire```
2016-01-08 10:51:35 +01:00
Hakim El Hattab
ddd0e85f41 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-08 10:49:40 +01:00
Hakim El Hattab
c3919756f1 resolve conflict 2016-01-08 10:48:10 +01:00
Hakim El Hattab
ee877845d8 add new fragment styles to readme #1445 2016-01-08 10:41:20 +01:00
Hakim El Hattab
76faeccd3e Merge branch 'fragments' of https://github.com/kewitz/reveal.js into dev 2016-01-08 10:39:02 +01:00
Hakim El Hattab
3bb7cf528c Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-08 10:37:51 +01:00
Hakim El Hattab
2a86465434 tweak to pdf print isntructions 2016-01-08 10:35:25 +01:00
Hakim El Hattab
1450d21595 Merge pull request #1450 from Quintasan/fix-printing-readme
Chromium users need to check Background graphics option when printing.
2016-01-08 10:29:45 +01:00
Hakim El Hattab
b7644a3bf7 expose version number through #1451 2016-01-08 10:26:53 +01:00
Hakim El Hattab
fb00a5d613 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-08 10:25:44 +01:00
Hakim El Hattab
1d6848a782 merge conflict 2016-01-08 10:21:35 +01:00
Hakim El Hattab
19a801799a Merge pull request #1472 from vicapow/master
Add the grunt-cli as a dependency instead of assuming global grunt.
2016-01-08 10:14:34 +01:00
Victor Powell
4881281ea1 Add the grunt-cli as a dependency instead of assuming global grunt. 2016-01-06 13:01:58 -08:00
Hakim El Hattab
fcb4b05de7 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2016-01-04 09:31:46 +01:00
Hakim El Hattab
e448cf8cd1 Merge pull request #1459 from appleboy/patch-1
remove redundant spaces.
2016-01-04 09:31:12 +01:00
Hakim El Hattab
c2298865cb Merge pull request #1467 from ismith/spelling_fix
Fix spelling error in print-pdf plugin
2016-01-04 09:30:36 +01:00
Hakim El Hattab
18b644cf8f ©️ ©️ ©️ ©️ ©️ closes #1469 2016-01-04 09:29:55 +01:00
Ian Smith
5da75aef01 Fix spelling error in print-pdf plugin 2015-12-27 12:35:13 -06:00
Bjoern Kimminich
de4efa5d19 updated to mustache 2.2.1
prevents XSS vulnerability (see https://github.com/janl/mustache.js/pull/388)
2015-12-21 23:17:53 +01:00
Bjoern Kimminich
5abf5001a8 ignoring IntelliJ IDEA files 2015-12-21 23:02:57 +01:00
Hakim El Hattab
91c6db71ca update to highlight.js 9.0.0 2015-12-14 09:49:05 +01:00
Bo-Yi Wu
07affa2750 remove redundant spaces. 2015-12-08 14:14:42 +08:00
Razvan Caliman
d06981c60c Merge branch 'muted-video' of github.com:oslego/reveal.js into muted-video 2015-12-03 09:47:23 +00:00
Razvan Caliman
b49664621f add option to mute background videos (updated) 2015-12-03 09:43:32 +00:00
Michał Zając
de4406f26c Chromium users need to check Background graphics option when printing. 2015-11-30 10:46:21 +01:00
Leonardo Kewitz
2909440fde Clean version of the new transitions. 2015-11-22 18:52:42 -02:00
Leonardo Kewitz
d457b9270a Added 4 fragment transitions effect. 2015-11-22 18:34:25 -02:00
Hakim El Hattab
6949ebc762 tweak 2015-11-19 15:44:50 +01:00
Hakim El Hattab
0e763c7171 2x playback controls for retina displays 2015-11-19 15:39:29 +01:00
Hakim El Hattab
c8319b9b1a add autoSlideMethod to default config 2015-11-19 15:35:12 +01:00
Hakim El Hattab
0cd4e2c84f Merge branch 'dev' of github.com:hakimel/reveal.js into dev 2015-11-19 15:30:43 +01:00
Hakim El Hattab
bbe38ad263 Merge pull request #1437 from der-michik/autoslide-direction
Add an option to auto-slide right only
2015-11-19 15:30:35 +01:00
MichiK
a398a02edb Fix build error 2015-11-19 13:51:22 +01:00
MichiK
4a45557b57 Add a more flexible autoSlideMethod option
Auto-sliding will now use the method specified in the config if it is
a function or default to navigateNext.
2015-11-19 13:00:01 +01:00
Hakim El Hattab
bef2722eed simplify condition #1434 2015-11-19 10:38:52 +01:00
Hakim El Hattab
31550d09e4 Merge pull request #1434 from mikemellor11/master
stops parallax failing if only the single horizontal slide and multiple vertical
2015-11-19 09:51:37 +01:00
MichiK
c0afa01e6a Add autoSlideRight option
When the autoSlideRight config option is active, the auto-sliding
will always navigate to the right and never down even if slides are
present there. This allows hidden "bonus slides" in presentations
which can be displayed as needed but won't show up automatically.
2015-11-18 22:00:35 +01:00
Hakim El Hattab
833622edcd update parallax background docs #1436 2015-11-18 10:36:48 +01:00
Mike Mellor
3e42929f90 check for 0 division, stops parallax failing if only the single horizontal slide and multiple vertical 2015-11-13 15:13:30 +00:00
Riceball LEE
16ebf2a783 * [bug] the markdown plugin can not render highlight codes for marked.setOptions(highlight) 2015-11-11 07:37:08 +00:00
Riceball LEE
6952931451 * update marked.js version to 0.3.5 2015-11-10 21:40:46 +00:00
Hakim El Hattab
822a9c937c 3.2.0 2015-11-09 17:07:06 +01:00
Hakim El Hattab
d022113eea Merge pull request #1362 from GuGuss/patch-1
Update the theme README.md
2015-11-09 16:54:32 +01:00
Hakim El Hattab
bb7ab5f94e Merge pull request #1381 from lordsutch/master
Fix text being cut off in Chrome when printing.
2015-11-09 16:51:05 +01:00
Hakim El Hattab
a5181e4372 Merge pull request #1391 from rohithpr/notes-key-binding
Fixed #1379 - config keyboard now disables 's' key
2015-11-09 16:47:21 +01:00
Hakim El Hattab
50f9896362 update highlight.js 8.6 -> 8.9.1 #1385 2015-11-09 16:46:08 +01:00
Hakim El Hattab
215617740d server notes sync slide changes both ways, fixes #1425 2015-11-09 16:24:09 +01:00
Hakim El Hattab
4be55f860e update highlight.js url 2015-11-07 14:39:26 +01:00
Hakim El Hattab
21d02eed32 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2015-11-07 14:20:38 +01:00
Hakim El Hattab
e74c3c6b76 Merge pull request #1422 from gre/patch-1
Fixes #1225
2015-11-07 14:19:35 +01:00
Gaëtan Renaudeau
d44bcdb3ff Fixes #1225
always enable highlight.js to fix markdown-only usage
2015-11-07 09:21:07 +01:00
teawithfruit
43f0d08155 fixed loading 2015-11-02 10:37:16 +01:00
Hakim El Hattab
fcfcf9e784 more slide number tweaking 2015-10-30 09:27:32 +01:00
Hakim El Hattab
edfa131c9c tweak how speaker notes look in pdf exports 2015-10-29 16:44:47 +01:00
Hakim El Hattab
f87f3e60f3 style tweak 2015-10-29 14:40:49 +01:00
Hakim El Hattab
9b5e16055a hide slide number element when disabled 2015-10-29 14:29:51 +01:00
Hakim El Hattab
d66cba6efa remove out of sync comments from pdf css 2015-10-29 13:24:47 +01:00
Hakim El Hattab
42babeb4ef one more slide number format 2015-10-29 12:39:51 +01:00
Hakim El Hattab
0e779edb20 slide numbers work in pdf exports, update slide number style 2015-10-29 11:59:26 +01:00
Hakim El Hattab
0198d74391 change slide number formats 2015-10-29 10:58:06 +01:00
Hakim El Hattab
35462a424c remove mention of deprecated transitions #1390 2015-10-26 16:34:43 +01:00
Hakim El Hattab
596f3d3c5a fix mixed indentation 2015-10-26 14:42:12 +01:00
Hakim El Hattab
2a757794fb Merge pull request #1399 from sloan-848/markdown-packaging
Add more support for external markdown.
2015-10-26 14:40:56 +01:00
Hakim El Hattab
5949e43524 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2015-10-26 14:40:41 +01:00
Hakim El Hattab
15414ce5bb Merge pull request #1400 from adunning/patch-1
Use en dash in title; <meta> is a void element.
2015-10-26 14:34:25 +01:00
Hakim El Hattab
103f01287b Merge pull request #1401 from adunning/patch-2
move up presentation size section
2015-10-26 14:32:49 +01:00
Hakim El Hattab
fc792e704c remove remotes.io plugin, service no longer exists #1411 2015-10-26 09:22:46 +01:00
Hakim El Hattab
1cb52120ff syntax error in postmessage example 2015-10-26 08:47:37 +01:00
Liu Zhanhong
625831b993 format note content when creating slide
In html content, marked allow `Inline-Level Grammar` but not `Block-Level Grammar`, so when I write following:
```
note:
* a
* b
* c
```
it become:
```html
<p><em> a
</em> b</p>
<ul>
<li>c</li>
</ul>
```
unbelievable!
2015-10-19 19:50:43 +08:00
Andrew Dunning
2b9d1871c9 Move up Presentation Size section.
This brings together all configuration options.
2015-10-14 18:14:33 -04:00
Andrew Dunning
015870ca8a Use en dash in title; <meta> is a void element. 2015-10-14 17:06:16 -04:00
Will Sloan
3d53766e51 Add more support for external markdown.
The 'grunt watch' command now also watches for changes to external
markdown.
The 'grunt package' command now packages all external markdown files for
rapid deployment in static enviroments.
2015-10-14 00:59:42 -04:00
rohithpr
dd8f95d9a9 Fixed #1379 - config keyboard now disables 's' key 2015-10-09 00:14:02 +05:30
Hakim El Hattab
34b82baa67 run autoprefixer 2015-10-06 20:17:22 +02:00
Hakim El Hattab
5e763bc67d fix black background in fullscreen mode #668 #1386 2015-10-06 20:16:46 +02:00
Hakim El Hattab
6d93ce5748 rebuild css 2015-10-06 19:40:06 +02:00
Chris Lawrence
e0d723be28 Fix slides being cut off in Chrome. 2015-10-02 20:48:13 -04:00
Chris Lawrence
69104e8e04 Merge remote-tracking branch 'upstream/master' 2015-10-02 20:47:19 -04:00
Hakim El Hattab
01c55d4cf6 fix bower dependency #1375 2015-10-02 12:27:51 +02:00
Alex Batista
ec119e79a7 UPDATED - Improvement on spaces and indentation 2015-09-29 21:09:41 -03:00
Alex Batista
c1cb328e19 UPDATED - Improvement on spaces and indentation 2015-09-29 21:07:02 -03:00
Alex Batista
e258db0994 UPDATED - Improvement of code. Now none flag is used, but the readyState property from video element 2015-09-29 21:01:50 -03:00
Alex Batista
28e01908c4 Merge branch 'master' of https://github.com/alexbatista/reveal.js
Conflicts:
	js/reveal.js
2015-09-29 20:56:04 -03:00
Alex Batista
92a6996754 Improvement of code. Now none flag is used, but the readyState property from video element 2015-09-29 20:49:25 -03:00
Alex Batista
b0d6e5578f improvement on spaces and indentation 2015-09-29 15:18:17 -03:00
Hakim El Hattab
329bfbe032 Merge branch 'master' of github.com:hakimel/reveal.js into dev 2015-09-29 11:12:10 +02:00
Hakim El Hattab
ddc9e2b5e7 Merge pull request #1357 from davidbanham/master
Update location of multiplex demo server
2015-09-29 10:11:54 +01:00
Hakim El Hattab
9b70e65d32 update travis node.js version 2015-09-29 11:10:40 +02:00
Hakim El Hattab
771843ccde Merge branch 'master' of https://github.com/davidbanham/reveal.js into dev 2015-09-29 11:10:02 +02:00
Hakim El Hattab
8373d5ec68 Merge pull request #1281 from fghaas/dev
Update README to include socket.io 1.3.5 examples
2015-09-29 09:43:34 +01:00
Hakim El Hattab
c1a7e83d75 multiplexing work with socket.io 1.0+ #1281 #1276 2015-09-29 10:38:34 +02:00
Hakim El Hattab
b16bc6fc2e speaker notes work with socket.io 1.0 #1375 2015-09-29 10:07:21 +02:00
Hakim El Hattab
5117048a5b Merge branch 'deps-update' of https://github.com/verdurin/reveal.js into dev 2015-09-29 09:16:47 +02:00
Alex Batista
bcfd0aae3c bug fix - when the first section has a background-video, the vido do not execute. Now, it's work 2015-09-28 23:04:47 -03:00
Adam Huffman
ef1402e645 Update dependencies to fix installation 2015-09-28 16:39:09 +01:00
Hakim El Hattab
8a1603f4d9 Merge branch 'dev' of github.com:hakimel/reveal.js into dev 2015-09-25 09:41:14 +02:00
Hakim El Hattab
9bcd1484bc notes defined in data-notes attributes retain preformatted whitespace 2015-09-25 09:41:05 +02:00
Augustin Delaporte
55a69fc68d Update the theme README.md
The `grunt css-themes` command now loops through all Sass files. There is no need to add the newly created file to the task list.
2015-09-20 09:05:28 +02:00
Razvan Caliman
8bbc2971ac add option to mute background videos 2015-09-19 15:55:48 +01:00
David Banham
076aee5ae6 Update location of multiplex demo server 2015-09-17 15:39:21 +10:00
Wendy Smoak
d6d4c68013 Add the data-noescape attribute and example 2015-09-13 09:14:12 -04:00
Hakim El Hattab
a151df54be document data-prevent-swipe #951 2015-09-10 14:37:25 +02:00
Hakim El Hattab
1116d99e87 prevent swipes on speaker notes 2015-09-10 11:26:05 +02:00
Hakim El Hattab
0d37757f3f modifications to #951 2015-09-10 11:25:19 +02:00
Hakim El Hattab
be7545da1a Merge branch 'feature_prevent_swipe' of https://github.com/Calyhre/reveal.js into dev 2015-09-10 11:10:08 +02:00
Hakim El Hattab
bd6a592b8b notes style changes 2015-09-10 11:09:03 +02:00
Hakim El Hattab
ca4098145e bump up z-index of notes in pdf 2015-09-10 10:35:25 +02:00
Hakim El Hattab
1c6990d20f fix pdf print when showNotes is disabled 2015-09-10 09:30:57 +02:00
Hakim El Hattab
5d39e8b8ce reorder css 2015-09-10 09:16:58 +02:00
Hakim El Hattab
b0b2ce1fe3 print notes to pdf when is enabled #304 2015-09-10 08:51:04 +02:00
Hakim El Hattab
0338f280d3 add getSlideNotes API method and tests 2015-09-10 08:28:52 +02:00
Hakim El Hattab
5a40b4486f dont show notes container when printing pdf 2015-09-09 14:31:27 +02:00
Hakim El Hattab
a14a298d30 document showNotes config value #304 2015-09-09 14:28:42 +02:00
Hakim El Hattab
2ad4065500 ability to share presentation with speaker notes #304 2015-09-09 14:09:37 +02:00
Hakim El Hattab
0c971b06e4 Merge pull request #1309 from cben/patch-1
README example: load MathJax over https
2015-09-02 12:00:17 +01:00
Hakim El Hattab
5e3bbdeecf formatting 2015-09-02 12:58:08 +02:00
Hakim El Hattab
75d38379b7 Merge pull request #1310 from teawithfruit/patch-1
solves early access error with video element
2015-09-02 11:57:37 +01:00
Hakim El Hattab
de6def8cdc Merge branch 'master' of https://github.com/gruber76/reveal.js into dev 2015-09-02 12:53:53 +02:00
Hakim El Hattab
983bd51838 fix initial visibility of strike fragments #737 2015-09-02 12:46:32 +02:00
Hakim El Hattab
044e87017d fix issue where 'none' transition did not apply to vertical stacks 2015-08-31 10:55:02 +02:00
Hakim El Hattab
b3b8738238 avoid duplicate var 2015-08-14 23:34:19 +02:00
Hakim El Hattab
b9d9632531 simplify 2015-08-14 23:25:30 +02:00
Hakim El Hattab
1bf236a079 fix object.keys call on non-object 2015-08-14 23:16:59 +02:00
Dan Allen
ccbc7ed6bc resolves #1324 allow display property to be configured
- allow display property apply to current slide to be configured
2015-08-07 23:04:23 -06:00
gruber76
0c2898d29f Update reveal.js
Removed toLowerCase call
2015-08-03 15:03:10 -06:00
Hakim El Hattab
de3e1daab4 only use zoom to scale presentations up, fixes shifts in text layout 2015-08-03 12:24:38 +02:00
teawithfruit
b7470fa323 solves early access error with video element
This will maybe solve the "InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable" error in firefox.
2015-07-21 15:59:19 +02:00
Beni Cherniavsky-Paskin
b098b56c50 README example: load MathJax over https
tiny followup to #1103
2015-07-21 12:33:17 +03:00
Hakim El Hattab
25da01ce41 Merge pull request #1132 from kendaleiv/plain-images
Add plain class for plain images
2015-07-07 12:18:33 +02:00
Hakim El Hattab
d44125d789 tweaks for #1200 2015-07-07 12:15:43 +02:00
Hakim El Hattab
399d4f652d Merge branch 'master' of https://github.com/bfritscher/reveal.js into dev 2015-07-07 12:06:22 +02:00
Hakim El Hattab
852fea4133 Merge pull request #1205 from gothma/mathjax-md
Allow tex parsing in <code> tags
2015-07-07 11:50:08 +02:00
Hakim El Hattab
c96a5d6ae3 fix theme control arrow selectors #1257 2015-07-07 11:37:36 +02:00
Hakim El Hattab
d3b2ed9462 Merge branch 'controls-buttons-a11y' of https://github.com/marcysutton/reveal.js into dev 2015-07-07 11:33:56 +02:00
Hakim El Hattab
d88f59cbaf Merge branch 'master' of github.com:hakimel/reveal.js into dev 2015-07-02 16:00:56 +02:00
Hakim El Hattab
b390e66c27 add bower json #1067 2015-07-02 15:51:01 +02:00
Hakim El Hattab
96bef35535 Merge pull request #1287 from obilodeau/patch-1
README: suggest decktape as an alternative for PDF rendering
2015-07-02 15:21:02 +02:00
Hakim El Hattab
523f78eda7 remove harcoded syntax highlight colors #1290 2015-07-02 14:58:47 +02:00
jzgdev
cee64858dd Gruntfile.js: watch tasks restructured 2015-07-01 22:51:01 -07:00
Hakim El Hattab
2de01e3219 update highlight.js theme 2015-06-30 09:27:11 +02:00
Olivier Bilodeau
98bdeae7cb README: suggest decktape as an alternative for PDF rendering
It works around the current PDF rendering bugs like #1261
2015-06-28 20:40:24 -04:00
Hakim El Hattab
adf1a24f0a Merge branch 'master' of github.com:hakimel/reveal.js into dev 2015-06-25 10:02:21 +02:00
Hakim El Hattab
6ec6ac2cb4 Merge pull request #1250 from kfuglsang/highlightjs-86
Updated to Highlightjs 8.6 with all languages supported.
2015-06-25 09:57:03 +02:00
Hakim El Hattab
7225d84248 Merge pull request #1260 from pierreozoux/master
Allows to specify PORT from env on multiplex plugin
2015-06-25 09:53:51 +02:00
Hakim El Hattab
5020014bc2 Merge pull request #1270 from jasonkarns/patch-1
enabling launching presentation with npm-start
2015-06-25 09:51:13 +02:00
Hakim El Hattab
95296b9ea4 Merge pull request #1274 from jasonkarns/patch-3
broken <table> html in demo deck
2015-06-25 09:50:36 +02:00
Hakim El Hattab
e1a3cf4476 Merge pull request #1271 from jasonkarns/patch-2
`licenses` field is deprecated
2015-06-25 09:49:45 +02:00
Florian Haas
3aec26cdc9 Update README to include socket.io 1.3.5 examples
The socket.io server at reveal.jit.su has been updated with socket.io
1.x, which means the examples referring to 0.9.x client libraries
no longer work. Update them with URLs for 1.3.5.

Fixes #1276.
2015-06-24 14:09:36 +02:00
Jason Karns
be91cc6118 broken <table> html in demo deck 2015-06-20 10:04:39 -04:00
Jason Karns
071a523f42 licenses field is deprecated
the `licenses` field in package.json is deprecated. https://docs.npmjs.com/files/package.json#license

The `license` field is the recommended field and expects an SPDX expression.
2015-06-16 10:43:20 -04:00
Jason Karns
018ca77406 enabling launching presentation with npm-start 2015-06-16 10:39:58 -04:00
Hakim El Hattab
9ef5915974 Merge pull request #1268 from gneatgeek/migrate-leap-plugin
Removed leap motion plugin from main project
2015-06-16 08:29:21 +02:00
RC028552
50e1463a57 Removed leap motion plugin from main project 2015-06-15 19:42:24 -05:00
pierreozoux
5dd2dd9f0b Allows to specify PORT from env on multiplex plugin 2015-06-10 18:23:20 +01:00
marcysutton
242f2d6c96 accessibility: controls as buttons, not divs 2015-06-05 14:02:46 -04:00
Hakim El Hattab
562d3b0238 Merge branch 'davidbanham-master' into dev 2015-06-03 12:00:35 +02:00
Hakim El Hattab
db359519ae merge #959 with minor tweaks 2015-06-03 11:59:00 +02:00
Hakim El Hattab
f0cf1f54d0 add base option for grunt serve task #1102 2015-06-03 11:42:38 +02:00
Hakim El Hattab
434cd3b8ae Merge pull request #1202 from alexandreleroux/patch-1
PDF exporting also works with Chromium
2015-06-03 11:30:29 +02:00
Hakim El Hattab
c99f138fbb Merge pull request #1234 from lememora/master
Added missing comma on the configuration example
2015-06-03 11:29:59 +02:00
Hakim El Hattab
1ca92a4f29 Merge pull request #1201 from MA3STR0/master
Correct Readme.md -> Theming -> sky
2015-06-03 11:29:42 +02:00
Hakim El Hattab
0055b7b763 Merge pull request #1207 from danielePala/patch-1
Update index.html
2015-06-03 11:29:11 +02:00
Kenneth Fuglsang
0563835fc0 Updated to Highlightjs 8.6 with all languages supported. 2015-06-02 22:18:36 +02:00
Rafael Moraes
7c7776a942 added missing comma on the configuration example 2015-05-19 14:56:24 -04:00
Philipp A.
a96cabaf70 Fixed last header having a border-bottom
`<tbody/>` is automatically inserted, so we can guarantee that this affects all ths and tds in the last row of the table *body* and the head is left untouched
2015-05-03 17:40:11 +02:00
Daniele Pala
76230e7485 Update index.html
Added https prefix to slideshare iframe link, without this I got a 'not found' error when opening the demo locally.
2015-04-20 22:21:38 +02:00
Martin Goth
0cb4d10504 Allow tex parsing in <code> tags
Just using $ as delimiter in markdown document fails since the markdown
parser unknown to the dollar syntax will try to interpret underscores.
Putting the $ delimented formula in backticks will cause the markdown
parser to put the tex-code with the $ delimiters into a code block.
The texcode will then be unchanged. This patch allows for mathJax to
interpret and automagically display the tex-formulas.
2015-04-16 13:24:23 +02:00
Alexandre Leroux
d659575ff3 PDF exporting also works with Chromium
For those who can't install Google Chrome (e.g. work network policies) but can use Chromium, Chromium does work for creating the pdf. I updated the readme accordingly. Thanks!
2015-04-14 17:54:45 +00:00
Anton
33923b3004 Correct Readme.md#theming
Theming/sky.css has dark gray text on light blue background; not white text
2015-04-13 17:54:38 +02:00
Boris Fritscher
9645a763c3 handle the </script> end bug inside code markdown
by changing the tag before html is parsed and restoring it before markdown parsing
2015-04-12 15:15:57 +02:00
S Anand
ee98f13dd9 display .stretch images in overview mode 2015-04-02 21:04:00 +05:30
Daniel Teixeira
f79210c6c1 Add support for custom notes.html file
It would be nice if we could define a custom notes.html file.

Actually, I'm used to compile my js files before releasing my app and, using selectors like `script[src$="notes.js"]`, doesn't work :(

So, what do you think about it?
2015-03-05 18:54:34 -03:00
Ken Dale
67140f2369 Add plain class for plain images 2015-02-13 19:43:47 -05:00
Chris Lawrence
54082a8d76 Merge remote-tracking branch 'upstream/master' 2014-11-30 21:26:17 -05:00
David Banham
a078c87f10 Listen to custom mapped togglePause keys
This resolves issue #941
2014-06-25 23:22:13 +10:00
Chris Lawrence
09de278be0 Merge remote-tracking branch 'upstream/master' 2014-06-22 22:35:53 -04:00
Calyhre
ed8d90bc58 Fix tests 2014-06-18 14:23:42 +02:00
Calyhre
4e70cf8126 Add ability to prevent swipe for specific elements 2014-06-18 14:18:41 +02:00
Chris Lawrence
ac76644456 Merge remote-tracking branch 'upstream/master' 2014-04-13 14:05:51 -04:00
Chris Lawrence
d1d6cca272 Merge branch 'master' of github.com:lordsutch/reveal.js 2014-01-07 22:30:43 -05:00
Chris Lawrence
97d4eb1056 Merge remote-tracking branch 'upstream/master' 2013-10-30 22:32:43 -04:00
Chris Lawrence
55f220109c Merge remote-tracking branch 'upstream/master' 2013-09-15 20:19:47 -04:00
Chris Lawrence
d8fb09fb64 Merge remote-tracking branch 'upstream/master' 2013-08-26 02:25:38 -04:00
Chris Lawrence
f84e025d38 Merge remote-tracking branch 'upstream/master' 2013-08-19 01:04:34 -04:00
Chris Lawrence
4874b13f91 Merge remote-tracking branch 'upstream/master' 2013-07-22 05:39:20 -04:00
Chris Lawrence
ad086b897e Merge remote-tracking branch 'upstream/master' 2013-06-26 21:21:19 -04:00
Chris Lawrence
173b4e7f25 Merge remote-tracking branch 'upstream/master' 2013-06-22 01:47:40 -04:00
Chris Lawrence
7b119763f8 Merge remote-tracking branch 'upstream/master' 2013-06-21 17:57:09 -04:00
Chris Lawrence
636a666197 Merge remote-tracking branch 'upstream/master' 2013-06-17 22:55:52 -04:00
96 changed files with 20136 additions and 6285 deletions

5
.gitignore vendored
View File

@@ -1,3 +1,8 @@
.idea/
*.iml
*.iws
*.eml
out/
.DS_Store
.svn
log/*.log

View File

@@ -1,5 +1,5 @@
language: node_js
node_js:
- 0.10
before_script:
- npm install -g grunt-cli
- 11
after_script:
- npm run build -- retire

View File

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

1043
README.md

File diff suppressed because it is too large Load Diff

24
bower.json Normal file
View File

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

View File

@@ -38,7 +38,8 @@
.share-reveal,
.state-background,
.reveal .progress,
.reveal .backgrounds {
.reveal .backgrounds,
.reveal .slide-number {
display: none !important;
}
@@ -141,7 +142,7 @@
.reveal .slides section {
visibility: visible !important;
position: static !important;
width: 100% !important;
width: auto !important;
height: auto !important;
display: block !important;
overflow: visible !important;
@@ -199,4 +200,4 @@
font-size: 0.8em;
}
}
}

View File

@@ -1,15 +1,9 @@
/* Default Print Stylesheet Template
by Rob Glazebrook of CSSnewbie.com
Last Updated: June 4, 2008
Feel free (nay, compelled) to edit, append, and
manipulate this file as you see fit. */
/* SECTION 1: Set default width, margin, float, and
background. This prevents elements from extending
beyond the edge of the printed page, and prevents
unnecessary background images from printing */
/**
* This stylesheet is used to print reveal.js
* presentations to PDF.
*
* https://github.com/hakimel/reveal.js#pdf-export
*/
* {
-webkit-print-color-adjust: exact;
@@ -29,12 +23,10 @@ html {
overflow: visible;
}
/* SECTION 2: Remove any elements not needed in print.
This would include navigation, ads, sidebars, etc. */
/* Remove any elements not needed in print. */
.nestedarrow,
.reveal .controls,
.reveal .progress,
.reveal .slide-number,
.reveal .playback,
.reveal.overview,
.fork-reveal,
@@ -43,16 +35,7 @@ html {
display: none !important;
}
/* SECTION 3: Set body font face, size, and color.
Consider using a serif font for readability. */
body, p, td, li, div {
}
/* SECTION 4: Set heading font face, sizes, and color.
Differentiate your headings from your body text.
Perhaps use a large sans-serif for distinction. */
h1,h2,h3,h4,h5,h6 {
h1, h2, h3, h4, h5, h6 {
text-shadow: 0 0 0 #000 !important;
}
@@ -61,8 +44,6 @@ h1,h2,h3,h4,h5,h6 {
font-family: Courier, 'Courier New', monospace !important;
}
/* SECTION 5: more reveal.js specific additions by @skypanther */
ul, ol, div, p {
visibility: visible;
position: static;
@@ -79,8 +60,9 @@ ul, ol, div, p {
}
.reveal .slides {
position: static;
width: 100%;
height: auto;
width: 100% !important;
height: auto !important;
zoom: 1 !important;
left: auto;
top: auto;
@@ -90,23 +72,22 @@ ul, ol, div, p {
overflow: visible;
display: block;
-webkit-perspective: none;
-moz-perspective: none;
-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%;
perspective: none;
perspective-origin: 50% 50%;
}
.reveal .slides section {
page-break-after: always !important;
.reveal .slides .pdf-page {
position: relative;
overflow: hidden;
z-index: 1;
page-break-after: always;
}
.reveal .slides section {
visibility: visible !important;
position: relative !important;
display: block !important;
position: relative !important;
position: absolute !important;
margin: 0 !important;
padding: 0 !important;
@@ -115,43 +96,69 @@ ul, ol, div, p {
opacity: 1 !important;
-webkit-transform-style: flat !important;
-moz-transform-style: flat !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;
transform-style: flat !important;
transform: none !important;
}
.reveal section.stack {
position: relative !important;
margin: 0 !important;
padding: 0 !important;
page-break-after: avoid !important;
height: auto !important;
min-height: auto !important;
}
.reveal img {
box-shadow: none;
}
.reveal .roll {
overflow: visible;
line-height: 1em;
}
/* Slide backgrounds are placed inside of their slide when exporting to PDF */
.reveal section .slide-background {
.reveal .slide-background {
display: block !important;
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: -1;
}
/* All elements should be above the slide-background */
.reveal section>* {
position: relative;
z-index: 1;
height: 100%;
z-index: auto !important;
}
/* Display slide speaker notes when 'showNotes' is enabled */
.reveal.show-notes {
max-width: none;
max-height: none;
}
.reveal .speaker-notes-pdf {
display: block;
width: 100%;
height: auto;
max-height: none;
top: auto;
right: auto;
bottom: auto;
left: auto;
z-index: 100;
}
/* Layout option which makes notes appear on a separate page */
.reveal .speaker-notes-pdf[data-layout="separate-page"] {
position: relative;
color: inherit;
background-color: transparent;
padding: 20px;
page-break-after: always;
border: 0;
}
/* Display slide numbers when 'slideNumber' is enabled */
.reveal .slide-number-pdf {
display: block;
position: absolute;
font-size: 14px;
}

30
css/reset.css Normal file
View File

@@ -0,0 +1,30 @@
/* http://meyerweb.com/eric/tools/css/reset/
v4.0 | 20180602
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
main, menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, main, menu, nav, section {
display: block;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,10 @@
## Dependencies
Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment including the Grunt dependencies installed before proceding: https://github.com/hakimel/reveal.js#full-setup
Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment including the Grunt dependencies installed before proceeding: https://github.com/hakimel/reveal.js#full-setup
## Creating a Theme
To create your own theme, start by duplicating any ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source) and adding it to the compilation list in the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js).
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/gruntfile.js)) when you run `npm run build -- css-themes`.
Each theme file does four things in the following order:
@@ -19,5 +19,3 @@ This is where you override the default theme. Either by specifying variables (se
4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)**
The template theme file which will generate final CSS output based on the currently defined variables.
When you are done, run `grunt css-themes` to compile the Sass file to CSS and you are ready to use your new theme.

View File

@@ -1,26 +1,26 @@
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Beige theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/*********************************************
* GLOBAL STYLES
*********************************************/
body {
background: #f7f2d3;
background: -moz-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #ffffff), color-stop(100%, #f7f2d3));
background: -webkit-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);
background: -o-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);
background: -ms-radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);
background: radial-gradient(center, circle cover, #ffffff 0%, #f7f2d3 100%);
background: -moz-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, white), color-stop(100%, #f7f2d3));
background: -webkit-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
background: -o-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
background: -ms-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
background: radial-gradient(center, circle cover, white 0%, #f7f2d3 100%);
background-color: #f7f3de; }
.reveal {
font-family: 'Lato', sans-serif;
font-size: 36px;
font-family: "Lato", sans-serif;
font-size: 40px;
font-weight: normal;
color: #333; }
@@ -29,17 +29,28 @@ body {
background: rgba(79, 64, 28, 0.99);
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: rgba(79, 64, 28, 0.99);
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #333;
font-family: 'League Gothic', Impact, sans-serif;
font-family: "League Gothic", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -70,17 +81,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -97,7 +113,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -107,9 +126,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -120,7 +136,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -136,19 +153,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -158,25 +174,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -193,18 +215,18 @@ body {
.reveal a {
color: #8b743d;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #c0a76e;
color: #c0a86e;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #564726; }
background: #564826; }
/*********************************************
* IMAGES
@@ -215,10 +237,14 @@ body {
border: 4px solid #333;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -228,44 +254,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #8b743d; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #8b743d; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #8b743d; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #8b743d; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #c0a76e; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #c0a76e; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #c0a76e; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #c0a76e; }
.reveal .controls {
color: #8b743d; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #8b743d; }
.reveal .progress span {
background: #8b743d;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #8b743d; }
@media print {
.backgrounds {
background-color: #f7f3de; } }

View File

@@ -1,9 +1,9 @@
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
/**
* Black theme for reveal.js. This is the opposite of the 'white' theme.
*
* Copyright (C) 2015 Hakim El Hattab, http://hakim.se
* By Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
color: #222; }
@@ -11,12 +11,12 @@ section.has-light-background, section.has-light-background h1, section.has-light
* GLOBAL STYLES
*********************************************/
body {
background: #222;
background-color: #222; }
background: #191919;
background-color: #191919; }
.reveal {
font-family: 'Source Sans Pro', Helvetica, sans-serif;
font-size: 38px;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-size: 42px;
font-weight: normal;
color: #fff; }
@@ -25,17 +25,28 @@ body {
background: #bee4fd;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #bee4fd;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #fff;
font-family: 'Source Sans Pro', Helvetica, sans-serif;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-weight: 600;
line-height: 1.2;
letter-spacing: normal;
@@ -66,17 +77,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -93,7 +109,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -103,9 +122,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -116,7 +132,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -132,19 +149,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -154,25 +170,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -189,9 +211,9 @@ body {
.reveal a {
color: #42affa;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #8dcffc;
@@ -200,7 +222,7 @@ body {
.reveal .roll span:after {
color: #fff;
background: #068ee9; }
background: #068de9; }
/*********************************************
* IMAGES
@@ -211,10 +233,14 @@ body {
border: 4px solid #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -224,44 +250,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #42affa; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #42affa; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #42affa; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #42affa; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #8dcffc; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #8dcffc; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #8dcffc; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #8dcffc; }
.reveal .controls {
color: #42affa; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #42affa; }
.reveal .progress span {
background: #42affa;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #42affa; }
@media print {
.backgrounds {
background-color: #191919; } }

View File

@@ -1,4 +1,3 @@
@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
/**
* Blood theme for reveal.js
* Author: Walther http://github.com/Walther
@@ -10,6 +9,7 @@
* For other themes, change $codeBackground accordingly.
*
*/
@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic);
/*********************************************
* GLOBAL STYLES
*********************************************/
@@ -18,8 +18,8 @@ body {
background-color: #222; }
.reveal {
font-family: Ubuntu, 'sans-serif';
font-size: 36px;
font-family: Ubuntu, "sans-serif";
font-size: 40px;
font-weight: normal;
color: #eee; }
@@ -28,17 +28,28 @@ body {
background: #a23;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #a23;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #eee;
font-family: Ubuntu, 'sans-serif';
font-family: Ubuntu, "sans-serif";
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -69,17 +80,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -96,7 +112,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -106,9 +125,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -119,7 +135,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -135,19 +152,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -157,25 +173,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -192,18 +214,18 @@ body {
.reveal a {
color: #a23;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #dd5567;
color: #dd5566;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #6a1521; }
background: #6a1520; }
/*********************************************
* IMAGES
@@ -214,10 +236,14 @@ body {
border: 4px solid #eee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -227,53 +253,38 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #a23; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #a23; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #a23; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #a23; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #dd5567; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #dd5567; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #dd5567; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #dd5567; }
.reveal .controls {
color: #a23; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #a23; }
.reveal .progress span {
background: #a23;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #a23; }
@media print {
.backgrounds {
background-color: #222; } }
.reveal p {
font-weight: 300;
text-shadow: 1px 1px #222; }
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
font-weight: 700; }
.reveal p code {

View File

@@ -1,5 +1,3 @@
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* League theme for reveal.js.
*
@@ -7,6 +5,8 @@
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/*********************************************
* GLOBAL STYLES
*********************************************/
@@ -21,8 +21,8 @@ body {
background-color: #2b2b2b; }
.reveal {
font-family: 'Lato', sans-serif;
font-size: 36px;
font-family: "Lato", sans-serif;
font-size: 40px;
font-weight: normal;
color: #eee; }
@@ -31,17 +31,28 @@ body {
background: #FF5E99;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #FF5E99;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #eee;
font-family: 'League Gothic', Impact, sans-serif;
font-family: "League Gothic", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -72,17 +83,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -99,7 +115,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -109,9 +128,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -122,7 +138,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -138,19 +155,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -160,25 +176,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -195,18 +217,18 @@ body {
.reveal a {
color: #13DAEC;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #71ebf4;
color: #71e9f4;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #0d9ba5; }
background: #0d99a5; }
/*********************************************
* IMAGES
@@ -217,10 +239,14 @@ body {
border: 4px solid #eee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -230,44 +256,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #13DAEC; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #13DAEC; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #13DAEC; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #13DAEC; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #71ebf4; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #71ebf4; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #71ebf4; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #71ebf4; }
.reveal .controls {
color: #13DAEC; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #13DAEC; }
.reveal .progress span {
background: #13DAEC;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #13DAEC; }
@media print {
.backgrounds {
background-color: #2b2b2b; } }

View File

@@ -1,9 +1,9 @@
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Solarized Dark theme for reveal.js.
* Author: Achim Staebler
*/
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Solarized colors by Ethan Schoonover
*/
@@ -19,8 +19,8 @@ body {
background-color: #002b36; }
.reveal {
font-family: 'Lato', sans-serif;
font-size: 36px;
font-family: "Lato", sans-serif;
font-size: 40px;
font-weight: normal;
color: #93a1a1; }
@@ -29,17 +29,28 @@ body {
background: #d33682;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #d33682;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #eee8d5;
font-family: 'League Gothic', Impact, sans-serif;
font-family: "League Gothic", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -70,17 +81,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -97,7 +113,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -107,9 +126,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -120,7 +136,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -136,19 +153,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -158,25 +174,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -193,18 +215,18 @@ body {
.reveal a {
color: #268bd2;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #78bae6;
color: #78b9e6;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #1a6291; }
background: #1a6091; }
/*********************************************
* IMAGES
@@ -215,10 +237,14 @@ body {
border: 4px solid #93a1a1;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -228,44 +254,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #268bd2; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #268bd2; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #268bd2; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #268bd2; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #78bae6; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #78bae6; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #78bae6; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #78bae6; }
.reveal .controls {
color: #268bd2; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #268bd2; }
.reveal .progress span {
background: #268bd2;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #268bd2; }
@media print {
.backgrounds {
background-color: #002b36; } }

View File

@@ -1,10 +1,10 @@
@import url(https://fonts.googleapis.com/css?family=Montserrat:700);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
/**
* Black theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(https://fonts.googleapis.com/css?family=Montserrat:700);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic);
/*********************************************
* GLOBAL STYLES
*********************************************/
@@ -13,8 +13,8 @@ body {
background-color: #111; }
.reveal {
font-family: 'Open Sans', sans-serif;
font-size: 30px;
font-family: "Open Sans", sans-serif;
font-size: 40px;
font-weight: normal;
color: #eee; }
@@ -23,17 +23,28 @@ body {
background: #e7ad52;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #e7ad52;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #eee;
font-family: 'Montserrat', Impact, sans-serif;
font-family: "Montserrat", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: -0.03em;
@@ -64,17 +75,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -91,7 +107,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -101,9 +120,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -114,7 +130,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -130,19 +147,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -152,25 +168,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -187,9 +209,9 @@ body {
.reveal a {
color: #e7ad52;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #f3d7ac;
@@ -198,7 +220,7 @@ body {
.reveal .roll span:after {
color: #fff;
background: #d0881d; }
background: #d08a1d; }
/*********************************************
* IMAGES
@@ -209,10 +231,14 @@ body {
border: 4px solid #eee;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -222,44 +248,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #e7ad52; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #e7ad52; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #e7ad52; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #e7ad52; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #f3d7ac; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #f3d7ac; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #f3d7ac; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #f3d7ac; }
.reveal .controls {
color: #e7ad52; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #e7ad52; }
.reveal .progress span {
background: #e7ad52;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #e7ad52; }
@media print {
.backgrounds {
background-color: #111; } }

View File

@@ -15,8 +15,8 @@ body {
background-color: #F0F1EB; }
.reveal {
font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
font-size: 36px;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
font-size: 40px;
font-weight: normal;
color: #000; }
@@ -25,17 +25,28 @@ body {
background: #26351C;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #26351C;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #383D3D;
font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -66,17 +77,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -93,7 +109,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -103,9 +122,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -116,7 +132,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -132,19 +149,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -154,25 +170,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -189,12 +211,12 @@ body {
.reveal a {
color: #51483D;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #8b7b69;
color: #8b7c69;
text-shadow: none;
border: none; }
@@ -211,10 +233,14 @@ body {
border: 4px solid #000;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -224,44 +250,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #51483D; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #51483D; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #51483D; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #51483D; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #8b7b69; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #8b7b69; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #8b7b69; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #8b7b69; }
.reveal .controls {
color: #51483D; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #51483D; }
.reveal .progress span {
background: #51483D;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #51483D; }
@media print {
.backgrounds {
background-color: #F0F1EB; } }

View File

@@ -1,5 +1,3 @@
@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* A simple theme for reveal.js presentations, similar
* to the default theme. The accent color is darkblue.
@@ -7,6 +5,11 @@
* This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
* reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 {
color: #fff; }
/*********************************************
* GLOBAL STYLES
*********************************************/
@@ -15,8 +18,8 @@ body {
background-color: #fff; }
.reveal {
font-family: 'Lato', sans-serif;
font-size: 36px;
font-family: "Lato", sans-serif;
font-size: 40px;
font-weight: normal;
color: #000; }
@@ -25,17 +28,28 @@ body {
background: rgba(0, 0, 0, 0.99);
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: rgba(0, 0, 0, 0.99);
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #000;
font-family: 'News Cycle', Impact, sans-serif;
font-family: "News Cycle", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -66,17 +80,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -93,7 +112,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -103,9 +125,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -116,7 +135,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -132,19 +152,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -154,25 +173,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -189,9 +214,9 @@ body {
.reveal a {
color: #00008B;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #0000f1;
@@ -211,10 +236,14 @@ body {
border: 4px solid #000;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -224,44 +253,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #00008B; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #00008B; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #00008B; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #00008B; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #0000f1; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #0000f1; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #0000f1; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #0000f1; }
.reveal .controls {
color: #00008B; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #00008B; }
.reveal .progress span {
background: #00008B;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #00008B; }
@media print {
.backgrounds {
background-color: #fff; } }

View File

@@ -1,10 +1,10 @@
@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
/**
* Sky theme for reveal.js.
*
* Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
*/
@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic);
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700);
.reveal a {
line-height: 1.3em; }
@@ -22,8 +22,8 @@ body {
background-color: #f7fbfc; }
.reveal {
font-family: 'Open Sans', sans-serif;
font-size: 36px;
font-family: "Open Sans", sans-serif;
font-size: 40px;
font-weight: normal;
color: #333; }
@@ -32,17 +32,28 @@ body {
background: #134674;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #134674;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #333;
font-family: 'Quicksand', sans-serif;
font-family: "Quicksand", sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: -0.08em;
@@ -73,17 +84,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -100,7 +116,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -110,9 +129,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -123,7 +139,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -139,19 +156,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -161,25 +177,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -196,18 +218,18 @@ body {
.reveal a {
color: #3b759e;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #74a8cb;
color: #74a7cb;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #264d66; }
background: #264c66; }
/*********************************************
* IMAGES
@@ -218,10 +240,14 @@ body {
border: 4px solid #333;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -231,44 +257,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #3b759e; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #3b759e; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #3b759e; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #3b759e; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #74a8cb; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #74a8cb; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #74a8cb; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #74a8cb; }
.reveal .controls {
color: #3b759e; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #3b759e; }
.reveal .progress span {
background: #3b759e;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #3b759e; }
@media print {
.backgrounds {
background-color: #f7fbfc; } }

View File

@@ -1,9 +1,9 @@
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Solarized Light theme for reveal.js.
* Author: Achim Staebler
*/
@import url(../../lib/font/league-gothic/league-gothic.css);
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic);
/**
* Solarized colors by Ethan Schoonover
*/
@@ -19,8 +19,8 @@ body {
background-color: #fdf6e3; }
.reveal {
font-family: 'Lato', sans-serif;
font-size: 36px;
font-family: "Lato", sans-serif;
font-size: 40px;
font-weight: normal;
color: #657b83; }
@@ -29,17 +29,28 @@ body {
background: #d33682;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #d33682;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #586e75;
font-family: 'League Gothic', Impact, sans-serif;
font-family: "League Gothic", Impact, sans-serif;
font-weight: normal;
line-height: 1.2;
letter-spacing: normal;
@@ -70,17 +81,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -97,7 +113,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -107,9 +126,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -120,7 +136,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -136,19 +153,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -158,25 +174,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -193,18 +215,18 @@ body {
.reveal a {
color: #268bd2;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #78bae6;
color: #78b9e6;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #1a6291; }
background: #1a6091; }
/*********************************************
* IMAGES
@@ -215,10 +237,14 @@ body {
border: 4px solid #657b83;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -228,44 +254,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #268bd2; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #268bd2; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #268bd2; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #268bd2; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #78bae6; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #78bae6; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #78bae6; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #78bae6; }
.reveal .controls {
color: #268bd2; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #268bd2; }
.reveal .progress span {
background: #268bd2;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #268bd2; }
@media print {
.backgrounds {
background-color: #fdf6e3; } }

View File

@@ -1,7 +1,7 @@
/**
* Black theme for reveal.js. This is the opposite of the 'white' theme.
*
* Copyright (C) 2015 Hakim El Hattab, http://hakim.se
* By Hakim El Hattab, http://hakim.se
*/
@@ -16,12 +16,12 @@
// Override theme settings (see ../template/settings.scss)
$backgroundColor: #222;
$backgroundColor: #191919;
$mainColor: #fff;
$headingColor: #fff;
$mainFontSize: 38px;
$mainFontSize: 42px;
$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingTextShadow: none;

View File

@@ -28,7 +28,6 @@ $backgroundColor: $coal;
// Main text
$mainFont: Ubuntu, 'sans-serif';
$mainFontSize: 36px;
$mainColor: #eee;
// Headings

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
/**
* White theme for reveal.js. This is the opposite of the 'black' theme.
*
* Copyright (C) 2015 Hakim El Hattab, http://hakim.se
* By Hakim El Hattab, http://hakim.se
*/
@@ -21,7 +21,7 @@ $backgroundColor: #fff;
$mainColor: #222;
$headingColor: #222;
$mainFontSize: 38px;
$mainFontSize: 42px;
$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
$headingTextShadow: none;

View File

@@ -6,7 +6,7 @@ $backgroundColor: #2b2b2b;
// Primary/body text
$mainFont: 'Lato', sans-serif;
$mainFontSize: 36px;
$mainFontSize: 40px;
$mainColor: #eee;
// Vertical spacing between blocks of text
@@ -28,6 +28,8 @@ $heading2Size: 2.11em;
$heading3Size: 1.55em;
$heading4Size: 1.00em;
$codeFont: monospace;
// Links and actions
$linkColor: #13DAEC;
$linkColorHover: lighten( $linkColor, 20% );
@@ -40,4 +42,4 @@ $selectionColor: #fff;
// to return a background image or gradient
@mixin bodyBackground() {
background: $backgroundColor;
}
}

View File

@@ -22,8 +22,14 @@ body {
text-shadow: none;
}
.reveal .slides>section,
.reveal .slides>section>section {
::-moz-selection {
color: $selectionColor;
background: $selectionBackgroundColor;
text-shadow: none;
}
.reveal .slides section,
.reveal .slides section>section {
line-height: 1.3;
font-weight: inherit;
}
@@ -128,11 +134,6 @@ body {
margin-left: 40px;
}
.reveal q,
.reveal blockquote {
quotes: none;
}
.reveal blockquote {
display: block;
position: relative;
@@ -161,15 +162,17 @@ body {
text-align: left;
font-size: 0.55em;
font-family: monospace;
font-family: $codeFont;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15);
}
.reveal code {
font-family: monospace;
font-family: $codeFont;
text-transform: none;
}
.reveal pre code {
@@ -178,8 +181,6 @@ body {
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC;
}
.reveal table {
@@ -209,15 +210,18 @@ body {
text-align: right;
}
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none;
}
.reveal sup {
vertical-align: super;
font-size: smaller;
}
.reveal sub {
vertical-align: sub;
font-size: smaller;
}
.reveal small {
@@ -269,6 +273,11 @@ body {
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}
.reveal section img.plain {
border: 0;
box-shadow: none;
}
.reveal a img {
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
@@ -287,40 +296,8 @@ body {
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left,
.reveal .controls div.navigate-left.enabled {
border-right-color: $linkColor;
}
.reveal .controls div.navigate-right,
.reveal .controls div.navigate-right.enabled {
border-left-color: $linkColor;
}
.reveal .controls div.navigate-up,
.reveal .controls div.navigate-up.enabled {
border-bottom-color: $linkColor;
}
.reveal .controls div.navigate-down,
.reveal .controls div.navigate-down.enabled {
border-top-color: $linkColor;
}
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: $linkColorHover;
}
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: $linkColorHover;
}
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: $linkColorHover;
}
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: $linkColorHover;
.reveal .controls {
color: $linkColor;
}
@@ -330,20 +307,19 @@ body {
.reveal .progress {
background: rgba(0,0,0,0.2);
color: $linkColor;
}
.reveal .progress span {
background: $linkColor;
-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);
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
}
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: $linkColor;
@media print {
.backgrounds {
background-color: $backgroundColor;
}
}

View File

@@ -1,9 +1,9 @@
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
/**
* White theme for reveal.js. This is the opposite of the 'black' theme.
*
* Copyright (C) 2015 Hakim El Hattab, http://hakim.se
* By Hakim El Hattab, http://hakim.se
*/
@import url(../../lib/font/source-sans-pro/source-sans-pro.css);
section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 {
color: #fff; }
@@ -15,8 +15,8 @@ body {
background-color: #fff; }
.reveal {
font-family: 'Source Sans Pro', Helvetica, sans-serif;
font-size: 38px;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-size: 42px;
font-weight: normal;
color: #222; }
@@ -25,17 +25,28 @@ body {
background: #98bdef;
text-shadow: none; }
.reveal .slides > section, .reveal .slides > section > section {
::-moz-selection {
color: #fff;
background: #98bdef;
text-shadow: none; }
.reveal .slides section,
.reveal .slides section > section {
line-height: 1.3;
font-weight: inherit; }
/*********************************************
* HEADERS
*********************************************/
.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
margin: 0 0 20px 0;
color: #222;
font-family: 'Source Sans Pro', Helvetica, sans-serif;
font-family: "Source Sans Pro", Helvetica, sans-serif;
font-weight: 600;
line-height: 1.2;
letter-spacing: normal;
@@ -66,17 +77,22 @@ body {
line-height: 1.3; }
/* Ensure certain elements are never larger than the slide itself */
.reveal img, .reveal video, .reveal iframe {
.reveal img,
.reveal video,
.reveal iframe {
max-width: 95%;
max-height: 95%; }
.reveal strong, .reveal b {
.reveal strong,
.reveal b {
font-weight: bold; }
.reveal em {
font-style: italic; }
.reveal ol, .reveal dl, .reveal ul {
.reveal ol,
.reveal dl,
.reveal ul {
display: inline-block;
text-align: left;
margin: 0 0 0 1em; }
@@ -93,7 +109,10 @@ body {
.reveal ul ul ul {
list-style-type: circle; }
.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
display: block;
margin-left: 40px; }
@@ -103,9 +122,6 @@ body {
.reveal dd {
margin-left: 40px; }
.reveal q, .reveal blockquote {
quotes: none; }
.reveal blockquote {
display: block;
position: relative;
@@ -116,7 +132,8 @@ body {
background: rgba(255, 255, 255, 0.05);
box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); }
.reveal blockquote p:first-child, .reveal blockquote p:last-child {
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
display: inline-block; }
.reveal q {
@@ -132,19 +149,18 @@ body {
font-family: monospace;
line-height: 1.2em;
word-wrap: break-word;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15); }
.reveal code {
font-family: monospace; }
font-family: monospace;
text-transform: none; }
.reveal pre code {
display: block;
padding: 5px;
overflow: auto;
max-height: 400px;
word-wrap: normal;
background: #3F3F3F;
color: #DCDCDC; }
word-wrap: normal; }
.reveal table {
margin: auto;
@@ -154,25 +170,31 @@ body {
.reveal table th {
font-weight: bold; }
.reveal table th, .reveal table td {
.reveal table th,
.reveal table td {
text-align: left;
padding: 0.2em 0.5em 0.2em 0.5em;
border-bottom: 1px solid; }
.reveal table th[align="center"], .reveal table td[align="center"] {
.reveal table th[align="center"],
.reveal table td[align="center"] {
text-align: center; }
.reveal table th[align="right"], .reveal table td[align="right"] {
.reveal table th[align="right"],
.reveal table td[align="right"] {
text-align: right; }
.reveal table tr:last-child td {
.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
border-bottom: none; }
.reveal sup {
vertical-align: super; }
vertical-align: super;
font-size: smaller; }
.reveal sub {
vertical-align: sub; }
vertical-align: sub;
font-size: smaller; }
.reveal small {
display: inline-block;
@@ -189,18 +211,18 @@ body {
.reveal a {
color: #2a76dd;
text-decoration: none;
-webkit-transition: color 0.15s ease;
-moz-transition: color 0.15s ease;
transition: color 0.15s ease; }
-webkit-transition: color .15s ease;
-moz-transition: color .15s ease;
transition: color .15s ease; }
.reveal a:hover {
color: #6ca2e8;
color: #6ca0e8;
text-shadow: none;
border: none; }
.reveal .roll span:after {
color: #fff;
background: #1a54a1; }
background: #1a53a1; }
/*********************************************
* IMAGES
@@ -211,10 +233,14 @@ body {
border: 4px solid #222;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); }
.reveal section img.plain {
border: 0;
box-shadow: none; }
.reveal a img {
-webkit-transition: all 0.15s linear;
-moz-transition: all 0.15s linear;
transition: all 0.15s linear; }
-webkit-transition: all .15s linear;
-moz-transition: all .15s linear;
transition: all .15s linear; }
.reveal a:hover img {
background: rgba(255, 255, 255, 0.2);
@@ -224,44 +250,24 @@ body {
/*********************************************
* NAVIGATION CONTROLS
*********************************************/
.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
border-right-color: #2a76dd; }
.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
border-left-color: #2a76dd; }
.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
border-bottom-color: #2a76dd; }
.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
border-top-color: #2a76dd; }
.reveal .controls div.navigate-left.enabled:hover {
border-right-color: #6ca2e8; }
.reveal .controls div.navigate-right.enabled:hover {
border-left-color: #6ca2e8; }
.reveal .controls div.navigate-up.enabled:hover {
border-bottom-color: #6ca2e8; }
.reveal .controls div.navigate-down.enabled:hover {
border-top-color: #6ca2e8; }
.reveal .controls {
color: #2a76dd; }
/*********************************************
* PROGRESS BAR
*********************************************/
.reveal .progress {
background: rgba(0, 0, 0, 0.2); }
background: rgba(0, 0, 0, 0.2);
color: #2a76dd; }
.reveal .progress span {
background: #2a76dd;
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
/*********************************************
* SLIDE NUMBER
* PRINT BACKGROUND
*********************************************/
.reveal .slide-number {
color: #2a76dd; }
@media print {
.backgrounds {
background-color: #fff; } }

425
demo.html Normal file
View File

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

View File

@@ -1,6 +1,14 @@
/* global module:false */
module.exports = function(grunt) {
var port = grunt.option('port') || 8000;
const sass = require('node-sass');
module.exports = grunt => {
require('load-grunt-tasks')(grunt);
let port = grunt.option('port') || 8000;
let root = grunt.option('root') || '.';
if (!Array.isArray(root)) root = [root];
// Project configuration
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
@@ -8,10 +16,10 @@ module.exports = function(grunt) {
banner:
'/*!\n' +
' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
' * http://lab.hakim.se/reveal-js\n' +
' * http://revealjs.com\n' +
' * MIT licensed\n' +
' *\n' +
' * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n' +
' * Copyright (C) 2020 Hakim El Hattab, http://hakim.se\n' +
' */'
},
@@ -21,7 +29,8 @@ module.exports = function(grunt) {
uglify: {
options: {
banner: '<%= meta.banner %>\n'
banner: '<%= meta.banner %>\n',
ie8: true
},
build: {
src: 'js/reveal.js',
@@ -30,35 +39,36 @@ module.exports = function(grunt) {
},
sass: {
options: {
implementation: sass,
sourceMap: false
},
core: {
files: {
'css/reveal.css': 'css/reveal.scss',
}
src: 'css/reveal.scss',
dest: 'css/reveal.css'
},
themes: {
files: [
{
expand: true,
cwd: 'css/theme/source',
src: ['*.scss'],
dest: 'css/theme',
ext: '.css'
}
]
expand: true,
cwd: 'css/theme/source',
src: ['*.sass', '*.scss'],
dest: 'css/theme',
ext: '.css'
}
},
autoprefixer: {
dist: {
core: {
src: 'css/reveal.css'
}
},
cssmin: {
options: {
compatibility: 'ie9'
},
compress: {
files: {
'css/reveal.min.css': [ 'css/reveal.css' ]
}
src: 'css/reveal.css',
dest: 'css/reveal.min.css'
}
},
@@ -67,7 +77,8 @@ module.exports = function(grunt) {
curly: false,
eqeqeq: true,
immed: true,
latedef: true,
esnext: true,
latedef: 'nofunc',
newcap: true,
noarg: true,
sub: true,
@@ -75,74 +86,82 @@ module.exports = function(grunt) {
eqnull: true,
browser: true,
expr: true,
loopfunc: true,
globals: {
head: false,
module: false,
console: false,
unescape: false,
define: false,
exports: false
exports: false,
require: false
}
},
files: [ 'Gruntfile.js', 'js/reveal.js' ]
files: [ 'gruntfile.js', 'js/reveal.js' ]
},
connect: {
server: {
options: {
port: port,
base: '.',
base: root,
livereload: true,
open: true
open: true,
useAvailablePort: true
}
}
},
zip: {
'reveal-js-presentation.zip': [
'index.html',
'css/**',
'js/**',
'lib/**',
'images/**',
'plugin/**'
]
bundle: {
src: [
'index.html',
'css/**',
'js/**',
'lib/**',
'images/**',
'plugin/**',
'**.md'
],
dest: 'reveal-js-presentation.zip'
}
},
watch: {
options: {
livereload: true
},
js: {
files: [ 'Gruntfile.js', 'js/reveal.js' ],
files: [ 'gruntfile.js', 'js/reveal.js' ],
tasks: 'js'
},
theme: {
files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ],
files: [
'css/theme/source/*.sass',
'css/theme/source/*.scss',
'css/theme/template/*.sass',
'css/theme/template/*.scss'
],
tasks: 'css-themes'
},
css: {
files: [ 'css/reveal.scss' ],
tasks: 'css-core'
},
test: {
files: [ 'test/*.html' ],
tasks: 'test'
},
html: {
files: [ 'index.html']
files: root.map(path => path + '/*.html')
},
markdown: {
files: root.map(path => path + '/*.md')
},
options: {
livereload: true
}
}
});
// Dependencies
grunt.loadNpmTasks( 'grunt-contrib-qunit' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-sass' );
grunt.loadNpmTasks( 'grunt-contrib-connect' );
grunt.loadNpmTasks( 'grunt-autoprefixer' );
grunt.loadNpmTasks( 'grunt-zip' );
// Default task
grunt.registerTask( 'default', [ 'css', 'js' ] );

View File

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

File diff suppressed because it is too large Load Diff

71
lib/css/monokai.css Normal file
View File

@@ -0,0 +1,71 @@
/*
Monokai style - ported by Luigi Maselli - http://grigio.org
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: #272822;
color: #ddd;
}
.hljs-tag,
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-strong,
.hljs-name {
color: #f92672;
}
.hljs-code {
color: #66d9ef;
}
.hljs-class .hljs-title {
color: white;
}
.hljs-attribute,
.hljs-symbol,
.hljs-regexp,
.hljs-link {
color: #bf79db;
}
.hljs-string,
.hljs-bullet,
.hljs-subst,
.hljs-title,
.hljs-section,
.hljs-emphasis,
.hljs-type,
.hljs-built_in,
.hljs-builtin-name,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-addition,
.hljs-variable,
.hljs-template-tag,
.hljs-template-variable {
color: #a6e22e;
}
.hljs-comment,
.hljs-quote,
.hljs-deletion,
.hljs-meta {
color: #75715e;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-doctag,
.hljs-title,
.hljs-section,
.hljs-type,
.hljs-selector-id {
font-weight: bold;
}

View File

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

View File

@@ -1,2 +0,0 @@
/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/
if(typeof document!=="undefined"&&!("classList" in document.createElement("a"))){(function(j){var a="classList",f="prototype",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\s+|\s+$/g,"")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p<o;p++){if(p in this&&this[p]===q){return p}}return -1},n=function(o,p){this.name=o;this.code=DOMException[o];this.message=p},g=function(p,o){if(o===""){throw new n("SYNTAX_ERR","An invalid or illegal string was specified")}if(/\s/.test(o)){throw new n("INVALID_CHARACTER_ERR","String contains an invalid character")}return c.call(p,o)},d=function(s){var r=k.call(s.className),q=r?r.split(/\s+/):[],p=0,o=q.length;for(;p<o;p++){this.push(q[p])}this._updateClassName=function(){s.className=this.toString()}},e=d[f]=[],i=function(){return new d(this)};n[f]=Error[f];e.item=function(o){return this[o]||null};e.contains=function(o){o+="";return g(this,o)!==-1};e.add=function(o){o+="";if(g(this,o)===-1){this.push(o);this._updateClassName()}};e.remove=function(p){p+="";var o=g(this,p);if(o!==-1){this.splice(o,1);this._updateClassName()}};e.toggle=function(o){o+="";if(g(this,o)===-1){this.add(o)}else{this.remove(o)}};e.toString=function(){return this.join(" ")};if(b.defineProperty){var l={get:i,enumerable:true,configurable:true};try{b.defineProperty(m,a,l)}catch(h){if(h.number===-2146823252){l.enumerable=false;b.defineProperty(m,a,l)}}}else{if(b[f].__defineGetter__){m.__defineGetter__(a,i)}}}(self))};

8
lib/js/head.min.js vendored
View File

@@ -1,8 +0,0 @@
/**
Head JS The only script in your <HEAD>
Copyright Tero Piirainen (tipiirai)
License MIT / http://bit.ly/mit-license
Version 0.96
http://headjs.com
*/(function(a){function z(){d||(d=!0,s(e,function(a){p(a)}))}function y(c,d){var e=a.createElement("script");e.type="text/"+(c.type||"javascript"),e.src=c.src||c,e.async=!1,e.onreadystatechange=e.onload=function(){var a=e.readyState;!d.done&&(!a||/loaded|complete/.test(a))&&(d.done=!0,d())},(a.body||b).appendChild(e)}function x(a,b){if(a.state==o)return b&&b();if(a.state==n)return k.ready(a.name,b);if(a.state==m)return a.onpreload.push(function(){x(a,b)});a.state=n,y(a.url,function(){a.state=o,b&&b(),s(g[a.name],function(a){p(a)}),u()&&d&&s(g.ALL,function(a){p(a)})})}function w(a,b){a.state===undefined&&(a.state=m,a.onpreload=[],y({src:a.url,type:"cache"},function(){v(a)}))}function v(a){a.state=l,s(a.onpreload,function(a){a.call()})}function u(a){a=a||h;var b;for(var c in a){if(a.hasOwnProperty(c)&&a[c].state!=o)return!1;b=!0}return b}function t(a){return Object.prototype.toString.call(a)=="[object Function]"}function s(a,b){if(!!a){typeof a=="object"&&(a=[].slice.call(a));for(var c=0;c<a.length;c++)b.call(a,a[c],c)}}function r(a){var b;if(typeof a=="object")for(var c in a)a[c]&&(b={name:c,url:a[c]});else b={name:q(a),url:a};var d=h[b.name];if(d&&d.url===b.url)return d;h[b.name]=b;return b}function q(a){var b=a.split("/"),c=b[b.length-1],d=c.indexOf("?");return d!=-1?c.substring(0,d):c}function p(a){a._done||(a(),a._done=1)}var b=a.documentElement,c,d,e=[],f=[],g={},h={},i=a.createElement("script").async===!0||"MozAppearance"in a.documentElement.style||window.opera,j=window.head_conf&&head_conf.head||"head",k=window[j]=window[j]||function(){k.ready.apply(null,arguments)},l=1,m=2,n=3,o=4;i?k.js=function(){var a=arguments,b=a[a.length-1],c={};t(b)||(b=null),s(a,function(d,e){d!=b&&(d=r(d),c[d.name]=d,x(d,b&&e==a.length-2?function(){u(c)&&p(b)}:null))});return k}:k.js=function(){var a=arguments,b=[].slice.call(a,1),d=b[0];if(!c){f.push(function(){k.js.apply(null,a)});return k}d?(s(b,function(a){t(a)||w(r(a))}),x(r(a[0]),t(d)?d:function(){k.js.apply(null,b)})):x(r(a[0]));return k},k.ready=function(b,c){if(b==a){d?p(c):e.push(c);return k}t(b)&&(c=b,b="ALL");if(typeof b!="string"||!t(c))return k;var f=h[b];if(f&&f.state==o||b=="ALL"&&u()&&d){p(c);return k}var i=g[b];i?i.push(c):i=g[b]=[c];return k},k.ready(a,function(){u()&&s(g.ALL,function(a){p(a)}),k.feature&&k.feature("domloaded",!0)});if(window.addEventListener)a.addEventListener("DOMContentLoaded",z,!1),window.addEventListener("load",z,!1);else if(window.attachEvent){a.attachEvent("onreadystatechange",function(){a.readyState==="complete"&&z()});var A=1;try{A=window.frameElement}catch(B){}!A&&b.doScroll&&function(){try{b.doScroll("left"),z()}catch(a){setTimeout(arguments.callee,1);return}}(),window.attachEvent("onload",z)}!a.readyState&&a.addEventListener&&(a.readyState="loading",a.addEventListener("DOMContentLoaded",handler=function(){a.removeEventListener("DOMContentLoaded",handler,!1),a.readyState="complete"},!1)),setTimeout(function(){c=!0,s(f,function(a){a()})},300)})(document)

2
lib/js/promise.js Normal file
View File

@@ -0,0 +1,2 @@
/* MIT | https://github.com/taylorhakes/promise-polyfill */
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n():"function"==typeof define&&define.amd?define(n):n()}(0,function(){"use strict";function e(e){var n=this.constructor;return this.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){return n.reject(t)})})}function n(){}function t(e){if(!(this instanceof t))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],u(e,this)}function o(e,n){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,t._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null!==t){var o;try{o=t(e._value)}catch(f){return void i(n.promise,f)}r(n.promise,o)}else(1===e._state?r:i)(n.promise,e._value)})):e._deferreds.push(n)}function r(e,n){try{if(n===e)throw new TypeError("A promise cannot be resolved with itself.");if(n&&("object"==typeof n||"function"==typeof n)){var o=n.then;if(n instanceof t)return e._state=3,e._value=n,void f(e);if("function"==typeof o)return void u(function(e,n){return function(){e.apply(n,arguments)}}(o,n),e)}e._state=1,e._value=n,f(e)}catch(r){i(e,r)}}function i(e,n){e._state=2,e._value=n,f(e)}function f(e){2===e._state&&0===e._deferreds.length&&t._immediateFn(function(){e._handled||t._unhandledRejectionFn(e._value)});for(var n=0,r=e._deferreds.length;r>n;n++)o(e,e._deferreds[n]);e._deferreds=null}function u(e,n){var t=!1;try{e(function(e){t||(t=!0,r(n,e))},function(e){t||(t=!0,i(n,e))})}catch(o){if(t)return;t=!0,i(n,o)}}var c=setTimeout;t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,t){var r=new this.constructor(n);return o(this,new function(e,n,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof n?n:null,this.promise=t}(e,t,r)),r},t.prototype["finally"]=e,t.all=function(e){return new t(function(n,t){function o(e,f){try{if(f&&("object"==typeof f||"function"==typeof f)){var u=f.then;if("function"==typeof u)return void u.call(f,function(n){o(e,n)},t)}r[e]=f,0==--i&&n(r)}catch(c){t(c)}}if(!e||"undefined"==typeof e.length)throw new TypeError("Promise.all accepts an array");var r=Array.prototype.slice.call(e);if(0===r.length)return n([]);for(var i=r.length,f=0;r.length>f;f++)o(f,r[f])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(n){n(e)})},t.reject=function(e){return new t(function(n,t){t(e)})},t.race=function(e){return new t(function(n,t){for(var o=0,r=e.length;r>o;o++)e[o].then(n,t)})},t._immediateFn="function"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){c(e,0)},t._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var l=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw Error("unable to locate global object")}();"Promise"in l?l.Promise.prototype["finally"]||(l.Promise.prototype["finally"]=e):l.Promise=t});

5703
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,14 @@
{
"name": "reveal.js",
"version": "3.1.0",
"version": "3.9.2",
"description": "The HTML Presentation Framework",
"homepage": "http://lab.hakim.se/reveal-js",
"homepage": "http://revealjs.com",
"subdomain": "revealjs",
"main": "js/reveal.js",
"scripts": {
"test": "grunt test",
"start": ""
"start": "grunt serve",
"build": "grunt"
},
"author": {
"name": "Hakim El Hattab",
@@ -19,31 +20,25 @@
"url": "git://github.com/hakimel/reveal.js.git"
},
"engines": {
"node": "~0.10.0"
},
"dependencies": {
"underscore": "~1.5.1",
"express": "~2.5.9",
"mustache": "~0.7.2",
"socket.io": "~0.9.16"
"node": ">=9.0.0"
},
"devDependencies": {
"grunt-contrib-qunit": "~0.5.2",
"grunt-contrib-jshint": "~0.6.4",
"grunt-contrib-cssmin": "~0.12.2",
"grunt-contrib-uglify": "~0.2.4",
"grunt-contrib-watch": "~0.5.3",
"grunt-sass": "~0.14.0",
"grunt-contrib-connect": "~0.8.0",
"grunt-autoprefixer": "~1.0.1",
"grunt-zip": "~0.7.0",
"grunt": "~0.4.0",
"node-sass": "~0.9.3"
"express": "^4.16.2",
"grunt": "^1.0.4",
"grunt-autoprefixer": "^3.0.4",
"grunt-cli": "^1.3.2",
"grunt-contrib-connect": "^2.0.0",
"grunt-contrib-cssmin": "^3.0.0",
"grunt-contrib-jshint": "^2.0.0",
"grunt-contrib-qunit": "^3.1.0",
"grunt-contrib-uglify": "^3.3.0",
"grunt-contrib-watch": "^1.1.0",
"grunt-sass": "^3.0.2",
"grunt-zip": "~0.17.1",
"load-grunt-tasks": "^4.0.0",
"mustache": "^2.3.0",
"node-sass": "^4.13.1",
"socket.io": "^2.2.0"
},
"licenses": [
{
"type": "MIT",
"url": "https://github.com/hakimel/reveal.js/blob/master/LICENSE"
}
]
"license": "MIT"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -9,7 +9,7 @@
<link rel="stylesheet" href="../../css/reveal.css">
<link rel="stylesheet" href="../../css/theme/white.css" id="theme">
<link rel="stylesheet" href="../../lib/css/zenburn.css">
<link rel="stylesheet" href="../../lib/css/monokai.css">
</head>
<body>
@@ -99,10 +99,16 @@
</script>
</section>
<!-- Images -->
<section data-markdown>
<script type="text/template">
![Sample image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png)
</script>
</section>
</div>
</div>
<script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.js"></script>
<script>
@@ -115,7 +121,6 @@
// Optional libraries used to extend on reveal.js
dependencies: [
{ src: '../../lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },

View File

@@ -29,3 +29,8 @@ Content 3.1
## External 3.2
Content 3.2
## External 3.3
![External Image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png)

View File

@@ -4,33 +4,24 @@
* of external markdown documents.
*/
(function( root, factory ) {
if( typeof exports === 'object' ) {
if (typeof define === 'function' && define.amd) {
root.marked = require( './marked' );
root.RevealMarkdown = factory( root.marked );
} else if( typeof exports === 'object' ) {
module.exports = factory( require( './marked' ) );
}
else {
} else {
// Browser globals (root is window)
root.RevealMarkdown = factory( root.marked );
root.RevealMarkdown.initialize();
}
}( this, function( marked ) {
if( typeof marked === 'undefined' ) {
throw 'The reveal.js Markdown plugin requires marked to be loaded';
}
if( typeof hljs !== 'undefined' ) {
marked.setOptions({
highlight: function( lang, code ) {
return hljs.highlightAuto( lang, code ).value;
}
});
}
var DEFAULT_SLIDE_SEPARATOR = '^\r?\n---\r?\n$',
DEFAULT_NOTES_SEPARATOR = 'note:',
DEFAULT_NOTES_SEPARATOR = 'notes?:',
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
var SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__';
/**
* Retrieves the markdown contents of a slide section
@@ -38,11 +29,15 @@
*/
function getMarkdownFromSlide( section ) {
var template = section.querySelector( 'script' );
// look for a <script> or <textarea data-template> wrapper
var template = section.querySelector( '[data-template]' ) || section.querySelector( 'script' );
// strip leading whitespace so it isn't evaluated as code
var text = ( template || section ).textContent;
// restore script end tags
text = text.replace( new RegExp( SCRIPT_END_PLACEHOLDER, 'g' ), '</script>' );
var leadingWs = text.match( /^\n?(\s*)/ )[1].length,
leadingTabs = text.match( /^\n?(\t*)/ )[1].length;
@@ -112,9 +107,13 @@
var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) );
if( notesMatch.length === 2 ) {
content = notesMatch[0] + '<aside class="notes" data-markdown>' + notesMatch[1].trim() + '</aside>';
content = notesMatch[0] + '<aside class="notes">' + marked(notesMatch[1].trim()) + '</aside>';
}
// prevent script end tags in the content from interfering
// with parsing
content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER );
return '<script type="text/template">' + content + '</script>';
}
@@ -177,7 +176,7 @@
markdownSections += '<section '+ options.attributes +'>';
sectionStack[i].forEach( function( child ) {
markdownSections += '<section data-markdown>' + createMarkdownSlide( child, options ) + '</section>';
markdownSections += '<section data-markdown>' + createMarkdownSlide( child, options ) + '</section>';
} );
markdownSections += '</section>';
@@ -198,81 +197,108 @@
*/
function processSlides() {
var sections = document.querySelectorAll( '[data-markdown]'),
section;
return new Promise( function( resolve ) {
for( var i = 0, len = sections.length; i < len; i++ ) {
var externalPromises = [];
section = sections[i];
[].slice.call( document.querySelectorAll( '[data-markdown]') ).forEach( function( section, i ) {
if( section.getAttribute( 'data-markdown' ).length ) {
if( section.getAttribute( 'data-markdown' ).length ) {
var xhr = new XMLHttpRequest(),
url = section.getAttribute( 'data-markdown' );
datacharset = section.getAttribute( 'data-charset' );
// see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes
if( datacharset != null && datacharset != '' ) {
xhr.overrideMimeType( 'text/html; charset=' + datacharset );
}
xhr.onreadystatechange = function() {
if( xhr.readyState === 4 ) {
// file protocol yields status code 0 (useful for local debug, mobile applications etc.)
if ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) {
externalPromises.push( loadExternalMarkdown( section ).then(
// Finished loading external file
function( xhr, url ) {
section.outerHTML = slidify( xhr.responseText, {
separator: section.getAttribute( 'data-separator' ),
verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
notesSeparator: section.getAttribute( 'data-separator-notes' ),
attributes: getForwardedAttributes( section )
});
},
}
else {
// Failed to load markdown
function( xhr, url ) {
section.outerHTML = '<section data-state="alert">' +
'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' +
'Check your browser\'s JavaScript console for more details.' +
'<p>Remember that you need to serve the presentation HTML from a HTTP server.</p>' +
'</section>';
}
) );
}
else if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-separator-vertical' ) || section.getAttribute( 'data-separator-notes' ) ) {
section.outerHTML = slidify( getMarkdownFromSlide( section ), {
separator: section.getAttribute( 'data-separator' ),
verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
notesSeparator: section.getAttribute( 'data-separator-notes' ),
attributes: getForwardedAttributes( section )
});
}
else {
section.innerHTML = createMarkdownSlide( getMarkdownFromSlide( section ) );
}
});
Promise.all( externalPromises ).then( resolve );
} );
}
function loadExternalMarkdown( section ) {
return new Promise( function( resolve, reject ) {
var xhr = new XMLHttpRequest(),
url = section.getAttribute( 'data-markdown' );
datacharset = section.getAttribute( 'data-charset' );
// see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes
if( datacharset != null && datacharset != '' ) {
xhr.overrideMimeType( 'text/html; charset=' + datacharset );
}
xhr.onreadystatechange = function( section, xhr ) {
if( xhr.readyState === 4 ) {
// file protocol yields status code 0 (useful for local debug, mobile applications etc.)
if ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) {
resolve( xhr, url );
}
};
else {
xhr.open( 'GET', url, false );
reject( xhr, url );
try {
xhr.send();
}
catch ( e ) {
alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e );
}
}
}.bind( this, section, xhr );
}
else if( section.getAttribute( 'data-separator' ) || section.getAttribute( 'data-separator-vertical' ) || section.getAttribute( 'data-separator-notes' ) ) {
xhr.open( 'GET', url, true );
section.outerHTML = slidify( getMarkdownFromSlide( section ), {
separator: section.getAttribute( 'data-separator' ),
verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
notesSeparator: section.getAttribute( 'data-separator-notes' ),
attributes: getForwardedAttributes( section )
});
try {
xhr.send();
}
catch ( e ) {
alert( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e );
resolve( xhr, url );
}
}
else {
section.innerHTML = createMarkdownSlide( getMarkdownFromSlide( section ) );
}
}
} );
}
/**
* Check if a node value has the attributes pattern.
* If yes, extract it and add that value as one or several attributes
* the the terget element.
* to the target element.
*
* You need Cache Killer on Chrome to see the effect on any FOM transformation
* directly on refresh (F5)
@@ -341,46 +367,67 @@
*/
function convertSlides() {
var sections = document.querySelectorAll( '[data-markdown]');
var sections = document.querySelectorAll( '[data-markdown]:not([data-markdown-parsed])');
for( var i = 0, len = sections.length; i < len; i++ ) {
[].slice.call( sections ).forEach( function( section ) {
var section = sections[i];
section.setAttribute( 'data-markdown-parsed', true )
// Only parse the same slide once
if( !section.getAttribute( 'data-markdown-parsed' ) ) {
var notes = section.querySelector( 'aside.notes' );
var markdown = getMarkdownFromSlide( section );
section.setAttribute( 'data-markdown-parsed', true )
var notes = section.querySelector( 'aside.notes' );
var markdown = getMarkdownFromSlide( section );
section.innerHTML = marked( markdown );
addAttributes( section, section, null, section.getAttribute( 'data-element-attributes' ) ||
section.parentNode.getAttribute( 'data-element-attributes' ) ||
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR,
section.getAttribute( 'data-attributes' ) ||
section.parentNode.getAttribute( 'data-attributes' ) ||
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR);
// If there were notes, we need to re-add them after
// having overwritten the section's HTML
if( notes ) {
section.appendChild( notes );
}
section.innerHTML = marked( markdown );
addAttributes( section, section, null, section.getAttribute( 'data-element-attributes' ) ||
section.parentNode.getAttribute( 'data-element-attributes' ) ||
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR,
section.getAttribute( 'data-attributes' ) ||
section.parentNode.getAttribute( 'data-attributes' ) ||
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR);
// If there were notes, we need to re-add them after
// having overwritten the section's HTML
if( notes ) {
section.appendChild( notes );
}
}
} );
return Promise.resolve();
}
// API
return {
var RevealMarkdown = {
/**
* Starts processing and converting Markdown within the
* current reveal.js deck.
*
* @param {function} callback function to invoke once
* we've finished loading and parsing Markdown
*/
init: function( callback ) {
if( typeof marked === 'undefined' ) {
throw 'The reveal.js Markdown plugin requires marked to be loaded';
}
if( typeof hljs !== 'undefined' ) {
marked.setOptions({
highlight: function( code, lang ) {
return hljs.highlightAuto( code, [lang] ).value;
}
});
}
// marked can be configured via reveal.js config options
var options = Reveal.getConfig().markdown;
if( options ) {
marked.setOptions( options );
}
return processSlides().then( convertSlides );
initialize: function() {
processSlides();
convertSlides();
},
// TODO: Do these belong in the API?
@@ -390,4 +437,10 @@
};
// Register our plugin so that reveal.js will call our
// plugin 'init' method as part of the initialization
Reveal.registerPlugin( 'markdown', RevealMarkdown );
return RevealMarkdown;
}));

File diff suppressed because one or more lines are too long

View File

@@ -7,30 +7,28 @@
var RevealMath = window.RevealMath || (function(){
var options = Reveal.getConfig().math || {};
options.mathjax = options.mathjax || 'https://cdn.mathjax.org/mathjax/latest/MathJax.js';
options.config = options.config || 'TeX-AMS_HTML-full';
var mathjax = options.mathjax || 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js';
var config = options.config || 'TeX-AMS_HTML-full';
var url = mathjax + '?config=' + config;
loadScript( options.mathjax + '?config=' + options.config, function() {
var defaultOptions = {
messageStyle: 'none',
tex2jax: {
inlineMath: [ [ '$', '$' ], [ '\\(', '\\)' ] ],
skipTags: [ 'script', 'noscript', 'style', 'textarea', 'pre' ]
},
skipStartupTypeset: true
};
MathJax.Hub.Config({
messageStyle: 'none',
tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] },
skipStartupTypeset: true
});
function defaults( options, defaultOptions ) {
// Typeset followed by an immediate reveal.js layout since
// the typesetting process could affect slide height
MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );
MathJax.Hub.Queue( Reveal.layout );
for ( var i in defaultOptions ) {
if ( !options.hasOwnProperty( i ) ) {
options[i] = defaultOptions[i];
}
}
// Reprocess equations in slides when they turn visible
Reveal.addEventListener( 'slidechanged', function( event ) {
MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );
} );
} );
}
function loadScript( url, callback ) {
@@ -61,4 +59,34 @@ var RevealMath = window.RevealMath || (function(){
}
return {
init: function() {
defaults( options, defaultOptions );
defaults( options.tex2jax, defaultOptions.tex2jax );
options.mathjax = options.config = null;
loadScript( url, function() {
MathJax.Hub.Config( options );
// Typeset followed by an immediate reveal.js layout since
// the typesetting process could affect slide height
MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );
MathJax.Hub.Queue( Reveal.layout );
// Reprocess equations in slides when they turn visible
Reveal.addEventListener( 'slidechanged', function( event ) {
MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] );
} );
} );
}
}
})();
Reveal.registerPlugin( 'math', RevealMath );

View File

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

View File

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

View File

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

View File

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

View File

@@ -41,10 +41,15 @@
}
// When a new notes window connects, post our current state
socket.on( 'connect', function( data ) {
socket.on( 'new-subscriber', function( data ) {
post();
} );
// When the state changes from inside of the speaker view
socket.on( 'statechanged-speaker', function( data ) {
Reveal.setState( data.state );
} );
// Monitor events that trigger a change in state
Reveal.addEventListener( 'slidechanged', post );
Reveal.addEventListener( 'fragmentshown', post );

View File

@@ -1,37 +1,40 @@
var http = require('http');
var express = require('express');
var fs = require('fs');
var io = require('socket.io');
var _ = require('underscore');
var Mustache = require('mustache');
var app = express.createServer();
var app = express();
var staticDir = express.static;
var server = http.createServer(app);
io = io.listen(app);
io = io(server);
var opts = {
port : 1947,
baseDir : __dirname + '/../../'
};
io.sockets.on( 'connection', function( socket ) {
io.on( 'connection', function( socket ) {
socket.on( 'connect', function( data ) {
socket.broadcast.emit( 'connect', data );
socket.on( 'new-subscriber', function( data ) {
socket.broadcast.emit( 'new-subscriber', data );
});
socket.on( 'statechanged', function( data ) {
delete data.state.overview;
socket.broadcast.emit( 'statechanged', data );
});
socket.on( 'statechanged-speaker', function( data ) {
delete data.state.overview;
socket.broadcast.emit( 'statechanged-speaker', data );
});
});
app.configure( function() {
[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) {
app.use( '/' + dir, staticDir( opts.baseDir + dir ) );
});
[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) {
app.use( '/' + dir, staticDir( opts.baseDir + dir ) );
});
app.get('/', function( req, res ) {
@@ -52,7 +55,7 @@ app.get( '/notes/:socketId', function( req, res ) {
});
// Actually listen
app.listen( opts.port || null );
server.listen( opts.port || null );
var brown = '\033[33m',
green = '\033[32m',
@@ -62,5 +65,5 @@ var slidesLocation = 'http://localhost' + ( opts.port ? ( ':' + opts.port ) : ''
console.log( brown + 'reveal.js - Speaker Notes' + reset );
console.log( '1. Open the slides at ' + green + slidesLocation + reset );
console.log( '2. Click on the link your JS console to go to the notes page' );
console.log( '2. Click on the link in your JS console to go to the notes page' );
console.log( '3. Advance through your slides and your notes will advance automatically' );

View File

@@ -8,6 +8,7 @@
<style>
body {
font-family: Helvetica;
font-size: 18px;
}
#current-slide,
@@ -30,15 +31,26 @@
position: absolute;
top: 10px;
left: 10px;
font-weight: bold;
font-size: 14px;
z-index: 2;
color: rgba( 255, 255, 255, 0.9 );
}
.overlay-element {
height: 34px;
line-height: 34px;
padding: 0 10px;
text-shadow: none;
background: rgba( 220, 220, 220, 0.8 );
color: #222;
font-size: 14px;
}
.overlay-element.interactive:hover {
background: rgba( 220, 220, 220, 1 );
}
#current-slide {
position: absolute;
width: 65%;
width: 60%;
height: 100%;
top: 0;
left: 0;
@@ -47,19 +59,20 @@
#upcoming-slide {
position: absolute;
width: 35%;
width: 40%;
height: 40%;
right: 0;
top: 0;
}
/* Speaker controls */
#speaker-controls {
position: absolute;
top: 40%;
right: 0;
width: 35%;
width: 40%;
height: 60%;
overflow: auto;
font-size: 18px;
}
@@ -124,26 +137,108 @@
font-size: 1.2em;
}
/* Layout selector */
#speaker-layout {
position: absolute;
top: 10px;
right: 10px;
color: #222;
z-index: 10;
}
#speaker-layout select {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border: 0;
box-shadow: 0;
cursor: pointer;
opacity: 0;
font-size: 1em;
background-color: transparent;
-moz-appearance: none;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
#speaker-layout select:focus {
outline: none;
box-shadow: none;
}
.clear {
clear: both;
}
@media screen and (max-width: 1080px) {
#speaker-controls {
font-size: 16px;
}
/* Speaker layout: Wide */
body[data-speaker-layout="wide"] #current-slide,
body[data-speaker-layout="wide"] #upcoming-slide {
width: 50%;
height: 45%;
padding: 6px;
}
@media screen and (max-width: 900px) {
#speaker-controls {
font-size: 14px;
}
body[data-speaker-layout="wide"] #current-slide {
top: 0;
left: 0;
}
@media screen and (max-width: 800px) {
#speaker-controls {
font-size: 12px;
}
body[data-speaker-layout="wide"] #upcoming-slide {
top: 0;
left: 50%;
}
body[data-speaker-layout="wide"] #speaker-controls {
top: 45%;
left: 0;
width: 100%;
height: 50%;
font-size: 1.25em;
}
/* Speaker layout: Tall */
body[data-speaker-layout="tall"] #current-slide,
body[data-speaker-layout="tall"] #upcoming-slide {
width: 45%;
height: 50%;
padding: 6px;
}
body[data-speaker-layout="tall"] #current-slide {
top: 0;
left: 0;
}
body[data-speaker-layout="tall"] #upcoming-slide {
top: 50%;
left: 0;
}
body[data-speaker-layout="tall"] #speaker-controls {
padding-top: 40px;
top: 0;
left: 45%;
width: 55%;
height: 100%;
font-size: 1.25em;
}
/* Speaker layout: Notes only */
body[data-speaker-layout="notes-only"] #current-slide,
body[data-speaker-layout="notes-only"] #upcoming-slide {
display: none;
}
body[data-speaker-layout="notes-only"] #speaker-controls {
padding-top: 40px;
top: 0;
left: 0;
width: 100%;
height: 100%;
font-size: 1.25em;
}
</style>
@@ -152,7 +247,7 @@
<body>
<div id="current-slide"></div>
<div id="upcoming-slide"><span class="label">UPCOMING:</span></div>
<div id="upcoming-slide"><span class="overlay-element label">Upcoming</span></div>
<div id="speaker-controls">
<div class="speaker-controls-time">
<h4 class="label">Time <span class="reset-button">Click to Reset</span></h4>
@@ -170,6 +265,10 @@
<div class="value"></div>
</div>
</div>
<div id="speaker-layout" class="overlay-element interactive">
<span class="speaker-layout-label"></span>
<select class="speaker-layout-dropdown"></select>
</div>
<script src="/socket.io/socket.io.js"></script>
<script src="/plugin/markdown/marked.js"></script>
@@ -182,11 +281,20 @@
currentState,
currentSlide,
upcomingSlide,
layoutLabel,
layoutDropdown,
connected = false;
var socket = io.connect( window.location.origin ),
socketId = '{{socketId}}';
var SPEAKER_LAYOUTS = {
'default': 'Default',
'wide': 'Wide',
'tall': 'Tall',
'notes-only': 'Notes only'
};
socket.on( 'statechanged', function( data ) {
// ignore data from sockets that aren't ours
@@ -195,7 +303,6 @@
if( connected === false ) {
connected = true;
setupIframes( data );
setupKeyboard();
setupNotes();
setupTimer();
@@ -206,13 +313,28 @@
} );
setupLayout();
// Load our presentation iframes
setupIframes();
// Once the iframes have loaded, emit a signal saying there's
// a new subscriber which will trigger a 'statechanged'
// message to be sent back
window.addEventListener( 'message', function( event ) {
var data = JSON.parse( event.data );
if( data && data.namespace === 'reveal' ) {
if( /ready/.test( data.eventName ) ) {
socket.emit( 'connect', { socketId: socketId } );
socket.emit( 'new-subscriber', { socketId: socketId } );
}
}
// Messages sent by reveal.js inside of the current slide preview
if( data && data.namespace === 'reveal' ) {
if( /slidechanged|fragmentshown|fragmenthidden|overviewshown|overviewhidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {
socket.emit( 'statechanged-speaker', { state: data.state } );
}
}
@@ -267,7 +389,7 @@
/**
* Creates the preview iframes.
*/
function setupIframes( data ) {
function setupIframes() {
var params = [
'receiver',
@@ -277,9 +399,8 @@
'backgroundTransition=none'
].join( '&' );
var hash = '#/' + data.state.indexh + '/' + data.state.indexv;
var currentURL = '/?' + params + '&postMessageEvents=true' + hash;
var upcomingURL = '/?' + params + '&controls=false' + hash;
var currentURL = '/?' + params + '&postMessageEvents=true';
var upcomingURL = '/?' + params + '&controls=false';
currentSlide = document.createElement( 'iframe' );
currentSlide.setAttribute( 'width', 1280 );
@@ -351,6 +472,74 @@
}
/**
* Sets up the speaker view layout and layout selector.
*/
function setupLayout() {
layoutDropdown = document.querySelector( '.speaker-layout-dropdown' );
layoutLabel = document.querySelector( '.speaker-layout-label' );
// Render the list of available layouts
for( var id in SPEAKER_LAYOUTS ) {
var option = document.createElement( 'option' );
option.setAttribute( 'value', id );
option.textContent = SPEAKER_LAYOUTS[ id ];
layoutDropdown.appendChild( option );
}
// Monitor the dropdown for changes
layoutDropdown.addEventListener( 'change', function( event ) {
setLayout( layoutDropdown.value );
}, false );
// Restore any currently persisted layout
setLayout( getLayout() );
}
/**
* Sets a new speaker view layout. The layout is persisted
* in local storage.
*/
function setLayout( value ) {
var title = SPEAKER_LAYOUTS[ value ];
layoutLabel.innerHTML = 'Layout' + ( title ? ( ': ' + title ) : '' );
layoutDropdown.value = value;
document.body.setAttribute( 'data-speaker-layout', value );
// Persist locally
if( window.localStorage ) {
window.localStorage.setItem( 'reveal-speaker-layout', value );
}
}
/**
* Returns the ID of the most recently set speaker layout
* or our default layout if none has been set.
*/
function getLayout() {
if( window.localStorage ) {
var layout = window.localStorage.getItem( 'reveal-speaker-layout' );
if( layout ) {
return layout;
}
}
// Default to the first record in the layouts hash
for( var id in SPEAKER_LAYOUTS ) {
return id;
}
}
function zeroPadInteger( num ) {
var str = '00' + parseInt( num );

View File

@@ -8,6 +8,7 @@
<style>
body {
font-family: Helvetica;
font-size: 18px;
}
#current-slide,
@@ -30,15 +31,42 @@
position: absolute;
top: 10px;
left: 10px;
font-weight: bold;
font-size: 14px;
z-index: 2;
color: rgba( 255, 255, 255, 0.9 );
}
#connection-status {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 20;
padding: 30% 20% 20% 20%;
font-size: 18px;
color: #222;
background: #fff;
text-align: center;
box-sizing: border-box;
line-height: 1.4;
}
.overlay-element {
height: 34px;
line-height: 34px;
padding: 0 10px;
text-shadow: none;
background: rgba( 220, 220, 220, 0.8 );
color: #222;
font-size: 14px;
}
.overlay-element.interactive:hover {
background: rgba( 220, 220, 220, 1 );
}
#current-slide {
position: absolute;
width: 65%;
width: 60%;
height: 100%;
top: 0;
left: 0;
@@ -47,20 +75,20 @@
#upcoming-slide {
position: absolute;
width: 35%;
width: 40%;
height: 40%;
right: 0;
top: 0;
}
/* Speaker controls */
#speaker-controls {
position: absolute;
top: 40%;
right: 0;
width: 35%;
width: 40%;
height: 60%;
overflow: auto;
font-size: 18px;
}
@@ -70,6 +98,7 @@
}
.speaker-controls-time .label,
.speaker-controls-pace .label,
.speaker-controls-notes .label {
text-transform: uppercase;
font-weight: normal;
@@ -78,7 +107,7 @@
margin: 0;
}
.speaker-controls-time {
.speaker-controls-time, .speaker-controls-pace {
border-bottom: 1px solid rgba( 200, 200, 200, 0.5 );
margin-bottom: 10px;
padding: 10px 16px;
@@ -99,6 +128,13 @@
.speaker-controls-time .timer,
.speaker-controls-time .clock {
width: 50%;
}
.speaker-controls-time .timer,
.speaker-controls-time .clock,
.speaker-controls-time .pacing .hours-value,
.speaker-controls-time .pacing .minutes-value,
.speaker-controls-time .pacing .seconds-value {
font-size: 1.9em;
}
@@ -112,7 +148,23 @@
}
.speaker-controls-time span.mute {
color: #bbb;
opacity: 0.3;
}
.speaker-controls-time .pacing-title {
margin-top: 5px;
}
.speaker-controls-time .pacing.ahead {
color: blue;
}
.speaker-controls-time .pacing.on-track {
color: green;
}
.speaker-controls-time .pacing.behind {
color: red;
}
.speaker-controls-notes {
@@ -125,24 +177,124 @@
font-size: 1.2em;
}
/* Layout selector */
#speaker-layout {
position: absolute;
top: 10px;
right: 10px;
color: #222;
z-index: 10;
}
#speaker-layout select {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border: 0;
box-shadow: 0;
cursor: pointer;
opacity: 0;
font-size: 1em;
background-color: transparent;
-moz-appearance: none;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
#speaker-layout select:focus {
outline: none;
box-shadow: none;
}
.clear {
clear: both;
}
/* Speaker layout: Wide */
body[data-speaker-layout="wide"] #current-slide,
body[data-speaker-layout="wide"] #upcoming-slide {
width: 50%;
height: 45%;
padding: 6px;
}
body[data-speaker-layout="wide"] #current-slide {
top: 0;
left: 0;
}
body[data-speaker-layout="wide"] #upcoming-slide {
top: 0;
left: 50%;
}
body[data-speaker-layout="wide"] #speaker-controls {
top: 45%;
left: 0;
width: 100%;
height: 50%;
font-size: 1.25em;
}
/* Speaker layout: Tall */
body[data-speaker-layout="tall"] #current-slide,
body[data-speaker-layout="tall"] #upcoming-slide {
width: 45%;
height: 50%;
padding: 6px;
}
body[data-speaker-layout="tall"] #current-slide {
top: 0;
left: 0;
}
body[data-speaker-layout="tall"] #upcoming-slide {
top: 50%;
left: 0;
}
body[data-speaker-layout="tall"] #speaker-controls {
padding-top: 40px;
top: 0;
left: 45%;
width: 55%;
height: 100%;
font-size: 1.25em;
}
/* Speaker layout: Notes only */
body[data-speaker-layout="notes-only"] #current-slide,
body[data-speaker-layout="notes-only"] #upcoming-slide {
display: none;
}
body[data-speaker-layout="notes-only"] #speaker-controls {
padding-top: 40px;
top: 0;
left: 0;
width: 100%;
height: 100%;
font-size: 1.25em;
}
@media screen and (max-width: 1080px) {
#speaker-controls {
body[data-speaker-layout="default"] #speaker-controls {
font-size: 16px;
}
}
@media screen and (max-width: 900px) {
#speaker-controls {
body[data-speaker-layout="default"] #speaker-controls {
font-size: 14px;
}
}
@media screen and (max-width: 800px) {
#speaker-controls {
body[data-speaker-layout="default"] #speaker-controls {
font-size: 12px;
}
}
@@ -152,8 +304,10 @@
<body>
<div id="connection-status">Loading speaker view...</div>
<div id="current-slide"></div>
<div id="upcoming-slide"><span class="label">UPCOMING:</span></div>
<div id="upcoming-slide"><span class="overlay-element label">Upcoming</span></div>
<div id="speaker-controls">
<div class="speaker-controls-time">
<h4 class="label">Time <span class="reset-button">Click to Reset</span></h4>
@@ -164,6 +318,11 @@
<span class="hours-value">00</span><span class="minutes-value">:00</span><span class="seconds-value">:00</span>
</div>
<div class="clear"></div>
<h4 class="label pacing-title" style="display: none">Pacing Time to finish current slide</h4>
<div class="pacing" style="display: none">
<span class="hours-value">00</span><span class="minutes-value">:00</span><span class="seconds-value">:00</span>
</div>
</div>
<div class="speaker-controls-notes hidden">
@@ -171,6 +330,10 @@
<div class="value"></div>
</div>
</div>
<div id="speaker-layout" class="overlay-element interactive">
<span class="speaker-layout-label"></span>
<select class="speaker-layout-dropdown"></select>
</div>
<script src="../../plugin/markdown/marked.js"></script>
<script>
@@ -182,12 +345,37 @@
currentState,
currentSlide,
upcomingSlide,
layoutLabel,
layoutDropdown,
pendingCalls = {},
lastRevealApiCallId = 0,
connected = false;
var SPEAKER_LAYOUTS = {
'default': 'Default',
'wide': 'Wide',
'tall': 'Tall',
'notes-only': 'Notes only'
};
setupLayout();
var connectionStatus = document.querySelector( '#connection-status' );
var connectionTimeout = setTimeout( function() {
connectionStatus.innerHTML = 'Error connecting to main window.<br>Please try closing and reopening the speaker view.';
}, 5000 );
window.addEventListener( 'message', function( event ) {
clearTimeout( connectionTimeout );
connectionStatus.style.display = 'none';
var data = JSON.parse( event.data );
// The overview mode is only useful to the reveal.js instance
// where navigation occurs so we don't sync it
if( data.state ) delete data.state.overview;
// Messages sent by the notes plugin inside of the main window
if( data && data.namespace === 'reveal-notes' ) {
if( data.type === 'connect' ) {
@@ -196,6 +384,10 @@
else if( data.type === 'state' ) {
handleStateMessage( data );
}
else if( data.type === 'return' ) {
pendingCalls[data.callId](data.result);
delete pendingCalls[data.callId];
}
}
// Messages sent by the reveal.js inside of the current slide preview
else if( data && data.namespace === 'reveal' ) {
@@ -203,13 +395,32 @@
// Send a message back to notify that the handshake is complete
window.opener.postMessage( JSON.stringify({ namespace: 'reveal-notes', type: 'connected'} ), '*' );
}
else if( /slidechanged|fragmentshown|fragmenthidden|overviewshown|overviewhidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {
else if( /slidechanged|fragmentshown|fragmenthidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) {
window.opener.postMessage( JSON.stringify({ method: 'setState', args: [ data.state ]} ), '*' );
}
}
} );
/**
* Asynchronously calls the Reveal.js API of the main frame.
*/
function callRevealApi( methodName, methodArguments, callback ) {
var callId = ++lastRevealApiCallId;
pendingCalls[callId] = callback;
window.opener.postMessage( JSON.stringify( {
namespace: 'reveal-notes',
type: 'call',
callId: callId,
methodName: methodName,
arguments: methodArguments
} ), '*' );
}
/**
* Called when the main window is trying to establish a
* connection.
@@ -239,6 +450,7 @@
// No need for updating the notes in case of fragment changes
if ( data.notes ) {
notes.classList.remove( 'hidden' );
notesValue.style.whiteSpace = data.whitespace;
if( data.markdown ) {
notesValue.innerHTML = marked( data.notes );
}
@@ -264,10 +476,17 @@
* Forward keyboard events to the current slide window.
* This enables keyboard events to work even if focus
* isn't set on the current slide iframe.
*
* Block F5 default handling, it reloads and disconnects
* the speaker notes window.
*/
function setupKeyboard() {
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 ] }), '*' );
} );
@@ -287,9 +506,10 @@
'backgroundTransition=none'
].join( '&' );
var urlSeparator = /\?/.test(data.url) ? '&' : '?';
var hash = '#/' + data.state.indexh + '/' + data.state.indexv;
var currentURL = data.url + '?' + params + '&postMessageEvents=true' + hash;
var upcomingURL = data.url + '?' + params + '&controls=false' + hash;
var currentURL = data.url + urlSeparator + params + '&postMessageEvents=true' + hash;
var upcomingURL = data.url + urlSeparator + params + '&controls=false' + hash;
currentSlide = document.createElement( 'iframe' );
currentSlide.setAttribute( 'width', 1280 );
@@ -315,6 +535,73 @@
}
function getTimings( callback ) {
callRevealApi( 'getSlidesAttributes', [], function ( slideAttributes ) {
callRevealApi( 'getConfig', [], function ( config ) {
var totalTime = config.totalTime;
var minTimePerSlide = config.minimumTimePerSlide || 0;
var defaultTiming = config.defaultTiming;
if ((defaultTiming == null) && (totalTime == null)) {
callback(null);
return;
}
// Setting totalTime overrides defaultTiming
if (totalTime) {
defaultTiming = 0;
}
var timings = [];
for ( var i in slideAttributes ) {
var slide = slideAttributes[ i ];
var timing = defaultTiming;
if( slide.hasOwnProperty( 'data-timing' )) {
var t = slide[ 'data-timing' ];
timing = parseInt(t);
if( isNaN(timing) ) {
console.warn("Could not parse timing '" + t + "' of slide " + i + "; using default of " + defaultTiming);
timing = defaultTiming;
}
}
timings.push(timing);
}
if ( totalTime ) {
// After we've allocated time to individual slides, we summarize it and
// subtract it from the total time
var remainingTime = totalTime - timings.reduce( function(a, b) { return a + b; }, 0 );
// The remaining time is divided by the number of slides that have 0 seconds
// allocated at the moment, giving the average time-per-slide on the remaining slides
var remainingSlides = (timings.filter( function(x) { return x == 0 }) ).length
var timePerSlide = Math.round( remainingTime / remainingSlides, 0 )
// And now we replace every zero-value timing with that average
timings = timings.map( function(x) { return (x==0 ? timePerSlide : x) } );
}
var slidesUnderMinimum = timings.filter( function(x) { return (x < minTimePerSlide) } ).length
if ( slidesUnderMinimum ) {
message = "The pacing time for " + slidesUnderMinimum + " slide(s) is under the configured minimum of " + minTimePerSlide + " seconds. Check the data-timing attribute on individual slides, or consider increasing the totalTime or minimumTimePerSlide configuration options (or removing some slides).";
alert(message);
}
callback( timings );
} );
} );
}
/**
* Return the number of seconds allocated for presenting
* all slides up to and including this one.
*/
function getTimeAllocated( timings, callback ) {
callRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {
var allocated = 0;
for (var i in timings.slice(0, currentSlide + 1)) {
allocated += timings[i];
}
callback( allocated );
} );
}
/**
* Create the timer and clock and start updating them
* at an interval.
@@ -322,42 +609,203 @@
function setupTimer() {
var start = new Date(),
timeEl = document.querySelector( '.speaker-controls-time' ),
clockEl = timeEl.querySelector( '.clock-value' ),
hoursEl = timeEl.querySelector( '.hours-value' ),
minutesEl = timeEl.querySelector( '.minutes-value' ),
secondsEl = timeEl.querySelector( '.seconds-value' );
timeEl = document.querySelector( '.speaker-controls-time' ),
clockEl = timeEl.querySelector( '.clock-value' ),
hoursEl = timeEl.querySelector( '.hours-value' ),
minutesEl = timeEl.querySelector( '.minutes-value' ),
secondsEl = timeEl.querySelector( '.seconds-value' ),
pacingTitleEl = timeEl.querySelector( '.pacing-title' ),
pacingEl = timeEl.querySelector( '.pacing' ),
pacingHoursEl = pacingEl.querySelector( '.hours-value' ),
pacingMinutesEl = pacingEl.querySelector( '.minutes-value' ),
pacingSecondsEl = pacingEl.querySelector( '.seconds-value' );
var timings = null;
getTimings( function ( _timings ) {
timings = _timings;
if (_timings !== null) {
pacingTitleEl.style.removeProperty('display');
pacingEl.style.removeProperty('display');
}
// Update once directly
_updateTimer();
// Then update every second
setInterval( _updateTimer, 1000 );
} );
function _resetTimer() {
if (timings == null) {
start = new Date();
_updateTimer();
}
else {
// Reset timer to beginning of current slide
getTimeAllocated( timings, function ( slideEndTimingSeconds ) {
var slideEndTiming = slideEndTimingSeconds * 1000;
callRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {
var currentSlideTiming = timings[currentSlide] * 1000;
var previousSlidesTiming = slideEndTiming - currentSlideTiming;
var now = new Date();
start = new Date(now.getTime() - previousSlidesTiming);
_updateTimer();
} );
} );
}
}
timeEl.addEventListener( 'click', function() {
_resetTimer();
return false;
} );
function _displayTime( hrEl, minEl, secEl, time) {
var sign = Math.sign(time) == -1 ? "-" : "";
time = Math.abs(Math.round(time / 1000));
var seconds = time % 60;
var minutes = Math.floor( time / 60 ) % 60 ;
var hours = Math.floor( time / ( 60 * 60 )) ;
hrEl.innerHTML = sign + zeroPadInteger( hours );
if (hours == 0) {
hrEl.classList.add( 'mute' );
}
else {
hrEl.classList.remove( 'mute' );
}
minEl.innerHTML = ':' + zeroPadInteger( minutes );
if (hours == 0 && minutes == 0) {
minEl.classList.add( 'mute' );
}
else {
minEl.classList.remove( 'mute' );
}
secEl.innerHTML = ':' + zeroPadInteger( seconds );
}
function _updateTimer() {
var diff, hours, minutes, seconds,
now = new Date();
now = new Date();
diff = now.getTime() - start.getTime();
hours = Math.floor( diff / ( 1000 * 60 * 60 ) );
minutes = Math.floor( ( diff / ( 1000 * 60 ) ) % 60 );
seconds = Math.floor( ( diff / 1000 ) % 60 );
clockEl.innerHTML = now.toLocaleTimeString( 'en-US', { hour12: true, hour: '2-digit', minute:'2-digit' } );
hoursEl.innerHTML = zeroPadInteger( hours );
hoursEl.className = hours > 0 ? '' : 'mute';
minutesEl.innerHTML = ':' + zeroPadInteger( minutes );
minutesEl.className = minutes > 0 ? '' : 'mute';
secondsEl.innerHTML = ':' + zeroPadInteger( seconds );
_displayTime( hoursEl, minutesEl, secondsEl, diff );
if (timings !== null) {
_updatePacing(diff);
}
}
// Update once directly
_updateTimer();
function _updatePacing(diff) {
// Then update every second
setInterval( _updateTimer, 1000 );
getTimeAllocated( timings, function ( slideEndTimingSeconds ) {
var slideEndTiming = slideEndTimingSeconds * 1000;
timeEl.addEventListener( 'click', function() {
start = new Date();
_updateTimer();
callRevealApi( 'getSlidePastCount', [], function ( currentSlide ) {
var currentSlideTiming = timings[currentSlide] * 1000;
var timeLeftCurrentSlide = slideEndTiming - diff;
if (timeLeftCurrentSlide < 0) {
pacingEl.className = 'pacing behind';
}
else if (timeLeftCurrentSlide < currentSlideTiming) {
pacingEl.className = 'pacing on-track';
}
else {
pacingEl.className = 'pacing ahead';
}
_displayTime( pacingHoursEl, pacingMinutesEl, pacingSecondsEl, timeLeftCurrentSlide );
} );
} );
}
}
/**
* Sets up the speaker view layout and layout selector.
*/
function setupLayout() {
layoutDropdown = document.querySelector( '.speaker-layout-dropdown' );
layoutLabel = document.querySelector( '.speaker-layout-label' );
// Render the list of available layouts
for( var id in SPEAKER_LAYOUTS ) {
var option = document.createElement( 'option' );
option.setAttribute( 'value', id );
option.textContent = SPEAKER_LAYOUTS[ id ];
layoutDropdown.appendChild( option );
}
// Monitor the dropdown for changes
layoutDropdown.addEventListener( 'change', function( event ) {
setLayout( layoutDropdown.value );
}, false );
// Restore any currently persisted layout
setLayout( getLayout() );
}
/**
* Sets a new speaker view layout. The layout is persisted
* in local storage.
*/
function setLayout( value ) {
var title = SPEAKER_LAYOUTS[ value ];
layoutLabel.innerHTML = 'Layout' + ( title ? ( ': ' + title ) : '' );
layoutDropdown.value = value;
document.body.setAttribute( 'data-speaker-layout', value );
// Persist locally
if( supportsLocalStorage() ) {
window.localStorage.setItem( 'reveal-speaker-layout', value );
}
}
/**
* Returns the ID of the most recently set speaker layout
* or our default layout if none has been set.
*/
function getLayout() {
if( supportsLocalStorage() ) {
var layout = window.localStorage.getItem( 'reveal-speaker-layout' );
if( layout ) {
return layout;
}
}
// Default to the first record in the layouts hash
for( var id in SPEAKER_LAYOUTS ) {
return id;
}
}
function supportsLocalStorage() {
try {
localStorage.setItem('test', 'test');
localStorage.removeItem('test');
return true;
}
catch( e ) {
return false;
} );
}
}

View File

@@ -11,10 +11,27 @@
*/
var RevealNotes = (function() {
function openNotes() {
var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
var notesPopup = window.open( jsFileLocation + 'notes.html', 'reveal.js - Notes', 'width=1100,height=700' );
var notesPopup = null;
function openNotes( notesFilePath ) {
if (notesPopup && !notesPopup.closed) {
notesPopup.focus();
return;
}
if( !notesFilePath ) {
var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path
jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path
notesFilePath = jsFileLocation + 'notes.html';
}
notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' );
if( !notesPopup ) {
alert( 'Speaker view popup failed to open. Please make sure popups are allowed and reopen the speaker view.' );
return;
}
/**
* Connect to the notes window through a postmessage handshake.
@@ -39,28 +56,65 @@ var RevealNotes = (function() {
clearInterval( connectInterval );
onConnected();
}
if( data && data.namespace === 'reveal-notes' && data.type === 'call' ) {
callRevealApi( data.methodName, data.arguments, data.callId );
}
} );
}
/**
* Calls the specified Reveal.js method with the provided argument
* and then pushes the result to the notes frame.
*/
function callRevealApi( methodName, methodArguments, callId ) {
var result = Reveal[methodName].apply( Reveal, methodArguments );
notesPopup.postMessage( JSON.stringify( {
namespace: 'reveal-notes',
type: 'return',
result: result,
callId: callId
} ), '*' );
}
/**
* Posts the current slide data to the notes window
*/
function post() {
function post( event ) {
var slideElement = Reveal.getCurrentSlide(),
notesElement = slideElement.querySelector( 'aside.notes' );
notesElement = slideElement.querySelector( 'aside.notes' ),
fragmentElement = slideElement.querySelector( '.current-fragment' );
var messageData = {
namespace: 'reveal-notes',
type: 'state',
notes: '',
markdown: false,
whitespace: 'normal',
state: Reveal.getState()
};
// Look for notes defined in a slide attribute
if( slideElement.hasAttribute( 'data-notes' ) ) {
messageData.notes = slideElement.getAttribute( 'data-notes' );
messageData.whitespace = 'pre-wrap';
}
// Look for notes defined in a fragment
if( fragmentElement ) {
var fragmentNotes = fragmentElement.querySelector( 'aside.notes' );
if( fragmentNotes ) {
notesElement = fragmentNotes;
}
else if( fragmentElement.hasAttribute( 'data-notes' ) ) {
messageData.notes = fragmentElement.getAttribute( 'data-notes' );
messageData.whitespace = 'pre-wrap';
// In case there are slide notes
notesElement = null;
}
}
// Look for notes defined in an aside element
@@ -94,29 +148,31 @@ var RevealNotes = (function() {
}
connect();
}
if( !/receiver/i.test( window.location.search ) ) {
return {
init: function() {
// If the there's a 'notes' query set, open directly
if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
openNotes();
}
if( !/receiver/i.test( window.location.search ) ) {
// Open the notes when the 's' key is hit
document.addEventListener( 'keydown', function( event ) {
// Disregard the event if the target is editable or a
// modifier is present
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
// If the there's a 'notes' query set, open directly
if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) {
openNotes();
}
// Open the notes when the 's' key is hit
Reveal.addKeyBinding({keyCode: 83, key: 'S', description: 'Speaker notes view'}, function() {
openNotes();
} );
if( event.keyCode === 83 ) {
event.preventDefault();
openNotes();
}
}, false );
}
},
return { open: openNotes };
open: openNotes
};
})();
Reveal.registerPlugin( 'notes', RevealNotes );

View File

@@ -2,32 +2,18 @@
* phantomjs script for printing presentations to PDF.
*
* Example:
* phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf
* phantomjs print-pdf.js "http://revealjs.com?print-pdf" reveal-demo.pdf
*
* By Manuel Bieh (https://github.com/manuelbieh)
* @author Manuel Bieh (https://github.com/manuelbieh)
* @author Hakim El Hattab (https://github.com/hakimel)
* @author Manuel Riezebosch (https://github.com/riezebosch)
*/
// html2pdf.js
var page = new WebPage();
var system = require( 'system' );
var slideWidth = system.args[3] ? system.args[3].split( 'x' )[0] : 960;
var slideHeight = system.args[3] ? system.args[3].split( 'x' )[1] : 700;
page.viewportSize = {
width: slideWidth,
height: slideHeight
};
// TODO
// Something is wrong with these config values. An input
// paper width of 1920px actually results in a 756px wide
// PDF.
page.paperSize = {
width: Math.round( slideWidth * 2 ),
height: Math.round( slideHeight * 2 ),
border: 0
};
var probePage = new WebPage();
var printPage = new WebPage();
var inputFile = system.args[1] || 'index.html?print-pdf';
var outputFile = system.args[2] || 'slides.pdf';
@@ -36,13 +22,46 @@ if( outputFile.match( /\.pdf$/gi ) === null ) {
outputFile += '.pdf';
}
console.log( 'Printing PDF (Paper size: '+ page.paperSize.width + 'x' + page.paperSize.height +')' );
console.log( 'Export PDF: Reading reveal.js config [1/4]' );
page.open( inputFile, function( status ) {
window.setTimeout( function() {
console.log( 'Printed succesfully' );
page.render( outputFile );
phantom.exit();
}, 1000 );
probePage.open( inputFile, function( status ) {
console.log( 'Export PDF: Preparing print layout [2/4]' );
var config = probePage.evaluate( function() {
return Reveal.getConfig();
} );
if( config ) {
printPage.paperSize = {
width: Math.floor( config.width * ( 1 + config.margin ) ),
height: Math.floor( config.height * ( 1 + config.margin ) ),
border: 0
};
printPage.open( inputFile, function( status ) {
console.log( 'Export PDF: Preparing pdf [3/4]')
printPage.evaluate( function() {
Reveal.isReady() ? window.callPhantom() : Reveal.addEventListener( 'pdf-ready', window.callPhantom );
} );
} );
printPage.onCallback = function( data ) {
// For some reason we need to "jump the queue" for syntax highlighting to work.
// See: http://stackoverflow.com/a/3580132/129269
setTimeout( function() {
console.log( 'Export PDF: Writing file [4/4]' );
printPage.render( outputFile );
console.log( 'Export PDF: Finished successfully!' );
phantom.exit();
}, 0 );
};
}
else {
console.log( 'Export PDF: Unable to read reveal.js config. Make sure the input address points to a reveal.js page.' );
phantom.exit( 1 );
}
} );

View File

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

View File

@@ -19,111 +19,117 @@ var RevealSearch = (function() {
function Hilitor(id, tag)
{
var targetNode = document.getElementById(id) || document.body;
var hiliteTag = tag || "EM";
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM|SPAN)$");
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
var wordColor = [];
var colorIdx = 0;
var matchRegex = "";
var matchingSlides = [];
var targetNode = document.getElementById(id) || document.body;
var hiliteTag = tag || "EM";
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM)$");
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
var wordColor = [];
var colorIdx = 0;
var matchRegex = "";
var matchingSlides = [];
this.setRegex = function(input)
{
input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
matchRegex = new RegExp("(" + input + ")","i");
}
this.setRegex = function(input)
{
input = input.replace(/^[^\w]+|[^\w]+$/g, "").replace(/[^\w'-]+/g, "|");
matchRegex = new RegExp("(" + input + ")","i");
}
this.getRegex = function()
{
return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
}
this.getRegex = function()
{
return matchRegex.toString().replace(/^\/\\b\(|\)\\b\/i$/g, "").replace(/\|/g, " ");
}
// recursively apply word highlighting
this.hiliteWords = function(node)
{
if(node == undefined || !node) return;
if(!matchRegex) return;
if(skipTags.test(node.nodeName)) return;
// recursively apply word highlighting
this.hiliteWords = function(node)
{
if(node == undefined || !node) return;
if(!matchRegex) return;
if(skipTags.test(node.nodeName)) return;
if(node.hasChildNodes()) {
for(var i=0; i < node.childNodes.length; i++)
this.hiliteWords(node.childNodes[i]);
}
if(node.nodeType == 3) { // NODE_TEXT
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
//find the slide's section element and save it in our list of matching slides
var secnode = node.parentNode;
while (secnode.nodeName != 'SECTION') {
secnode = secnode.parentNode;
}
var slideIndex = Reveal.getIndices(secnode);
var slidelen = matchingSlides.length;
var alreadyAdded = false;
for (var i=0; i < slidelen; i++) {
if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
alreadyAdded = true;
}
}
if (! alreadyAdded) {
matchingSlides.push(slideIndex);
}
if(!wordColor[regs[0].toLowerCase()]) {
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
}
if(node.hasChildNodes()) {
for(var i=0; i < node.childNodes.length; i++)
this.hiliteWords(node.childNodes[i]);
}
if(node.nodeType == 3) { // NODE_TEXT
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
//find the slide's section element and save it in our list of matching slides
var secnode = node;
while (secnode != null && secnode.nodeName != 'SECTION') {
secnode = secnode.parentNode;
}
var match = document.createElement(hiliteTag);
match.appendChild(document.createTextNode(regs[0]));
match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
match.style.fontStyle = "inherit";
match.style.color = "#000";
var slideIndex = Reveal.getIndices(secnode);
var slidelen = matchingSlides.length;
var alreadyAdded = false;
for (var i=0; i < slidelen; i++) {
if ( (matchingSlides[i].h === slideIndex.h) && (matchingSlides[i].v === slideIndex.v) ) {
alreadyAdded = true;
}
}
if (! alreadyAdded) {
matchingSlides.push(slideIndex);
}
var after = node.splitText(regs.index);
after.nodeValue = after.nodeValue.substring(regs[0].length);
node.parentNode.insertBefore(match, after);
}
}
};
if(!wordColor[regs[0].toLowerCase()]) {
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
}
// remove highlighting
this.remove = function()
{
var arr = document.getElementsByTagName(hiliteTag);
while(arr.length && (el = arr[0])) {
el.parentNode.replaceChild(el.firstChild, el);
}
};
var match = document.createElement(hiliteTag);
match.appendChild(document.createTextNode(regs[0]));
match.style.backgroundColor = wordColor[regs[0].toLowerCase()];
match.style.fontStyle = "inherit";
match.style.color = "#000";
// start highlighting at target node
this.apply = function(input)
{
if(input == undefined || !input) return;
this.remove();
this.setRegex(input);
this.hiliteWords(targetNode);
return matchingSlides;
};
var after = node.splitText(regs.index);
after.nodeValue = after.nodeValue.substring(regs[0].length);
node.parentNode.insertBefore(match, after);
}
}
};
// remove highlighting
this.remove = function()
{
var arr = document.getElementsByTagName(hiliteTag);
while(arr.length && (el = arr[0])) {
el.parentNode.replaceChild(el.firstChild, el);
}
};
// start highlighting at target node
this.apply = function(input)
{
if(input == undefined || !input) return;
this.remove();
this.setRegex(input);
this.hiliteWords(targetNode);
return matchingSlides;
};
}
function openSearch() {
//ensure the search term input dialog is visible and has focus:
var inputboxdiv = document.getElementById("searchinputdiv");
var inputbox = document.getElementById("searchinput");
inputbox.style.display = "inline";
inputboxdiv.style.display = "inline";
inputbox.focus();
inputbox.select();
}
function closeSearch() {
var inputboxdiv = document.getElementById("searchinputdiv");
inputboxdiv.style.display = "none";
if(myHilitor) myHilitor.remove();
}
function toggleSearch() {
var inputbox = document.getElementById("searchinput");
if (inputbox.style.display !== "inline") {
var inputboxdiv = document.getElementById("searchinputdiv");
if (inputboxdiv.style.display !== "inline") {
openSearch();
}
else {
inputbox.style.display = "none";
myHilitor.remove();
closeSearch();
}
}
@@ -132,19 +138,27 @@ function Hilitor(id, tag)
if (searchboxDirty) {
var searchstring = document.getElementById("searchinput").value;
//find the keyword amongst the slides
myHilitor = new Hilitor("slidecontent");
matchedSlides = myHilitor.apply(searchstring);
currentMatchedIndex = 0;
if (searchstring === '') {
if(myHilitor) myHilitor.remove();
matchedSlides = null;
}
else {
//find the keyword amongst the slides
myHilitor = new Hilitor("slidecontent");
matchedSlides = myHilitor.apply(searchstring);
currentMatchedIndex = 0;
}
}
//navigate to the next slide that has the keyword, wrapping to the first if necessary
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
currentMatchedIndex = 0;
}
if (matchedSlides.length > currentMatchedIndex) {
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
currentMatchedIndex++;
if (matchedSlides) {
//navigate to the next slide that has the keyword, wrapping to the first if necessary
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
currentMatchedIndex = 0;
}
if (matchedSlides.length > currentMatchedIndex) {
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
currentMatchedIndex++;
}
}
}
@@ -155,19 +169,20 @@ function Hilitor(id, tag)
var searchElement = document.createElement( 'div' );
searchElement.id = "searchinputdiv";
searchElement.classList.add( 'searchdiv' );
searchElement.style.position = 'absolute';
searchElement.style.top = '10px';
searchElement.style.left = '10px';
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
searchElement.style.position = 'absolute';
searchElement.style.top = '10px';
searchElement.style.right = '10px';
searchElement.style.zIndex = 10;
//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>';
dom.wrapper.appendChild( searchElement );
}
document.getElementById("searchbutton").addEventListener( 'click', function(event) {
document.getElementById( 'searchbutton' ).addEventListener( 'click', function(event) {
doSearch();
}, false );
document.getElementById("searchinput").addEventListener( 'keyup', function( event ) {
document.getElementById( 'searchinput' ).addEventListener( 'keyup', function( event ) {
switch (event.keyCode) {
case 13:
event.preventDefault();
@@ -179,18 +194,13 @@ function Hilitor(id, tag)
}
}, false );
// Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)
/*
document.addEventListener( 'keydown', function( event ) {
// Disregard the event if the target is editable or a
// modifier is present
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
if( event.keyCode === 83 ) {
if( event.key == "F" && (event.ctrlKey || event.metaKey) ) { //Control+Shift+f
event.preventDefault();
openSearch();
toggleSearch();
}
}, false );
*/
if( window.Reveal ) Reveal.registerKeyboardShortcut( 'CTRL + Shift + F', 'Search' );
closeSearch();
return { open: openSearch };
})();

View File

@@ -1,32 +1,34 @@
// Custom reveal.js integration
(function(){
var isEnabled = true;
var RevealZoom = (function(){
document.querySelector( '.reveal .slides' ).addEventListener( 'mousedown', function( event ) {
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key';
return {
init: function() {
var zoomPadding = 20;
var revealScale = Reveal.getScale();
Reveal.getRevealElement().addEventListener( 'mousedown', function( event ) {
var defaultModifier = /Linux/.test( window.navigator.platform ) ? 'ctrl' : 'alt';
if( event[ modifier ] && isEnabled ) {
event.preventDefault();
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : defaultModifier ) + 'Key';
var zoomLevel = ( Reveal.getConfig().zoomLevel ? Reveal.getConfig().zoomLevel : 2 );
var bounds = event.target.getBoundingClientRect();
if( event[ modifier ] && !Reveal.isOverview() ) {
event.preventDefault();
zoom.to({
x: event.clientX,
y: event.clientY,
scale: zoomLevel,
pan: false
});
}
} );
zoom.to({
x: ( bounds.left * revealScale ) - zoomPadding,
y: ( bounds.top * revealScale ) - zoomPadding,
width: ( bounds.width * revealScale ) + ( zoomPadding * 2 ),
height: ( bounds.height * revealScale ) + ( zoomPadding * 2 ),
pan: false
});
}
} );
}
Reveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );
Reveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );
})();
Reveal.registerPlugin( 'zoom', RevealZoom );
/*!
* zoom.js 0.3 (modified for use with reveal.js)
* http://lab.hakim.se/zoom-js
@@ -273,6 +275,3 @@ var zoom = (function(){
}
})();

View File

@@ -0,0 +1 @@
window.externalScriptSequence += 'A';

View File

@@ -0,0 +1 @@
window.externalScriptSequence += 'B';

View File

@@ -0,0 +1 @@
window.externalScriptSequence += 'C';

View File

@@ -0,0 +1 @@
window.externalScriptSequence += 'D';

View File

@@ -0,0 +1,2 @@
Source: https://freesound.org/people/fennelliott/sounds/379419/
License: CC0 (public domain)

Binary file not shown.

View File

@@ -30,11 +30,15 @@
<h2>Empty Slide</h2>
</section>
<section>
<h2>Auto-playing audio</h2>
<audio src="assets/beeping.wav" data-autoplay></audio>
</section>
</div>
</div>
<script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.js"></script>
<script>

View File

@@ -82,6 +82,14 @@
\]
</section>
<section>
<h3>TeX Macros</h3>
Here is a common vector space:
\[L^2(\R) = \set{u : \R \to \R}{\int_\R |u|^2 &lt; +\infty}\]
used in functional analysis.
</section>
<section>
<section>
<h3>The Lorenz Equations</h3>
@@ -153,13 +161,20 @@
\]
</div>
</section>
<section>
<h3>TeX Macros</h3>
Here is a common vector space:
\[L^2(\R) = \set{u : \R \to \R}{\int_\R |u|^2 &lt; +\infty}\]
used in functional analysis.
</section>
</section>
</div>
</div>
<script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.js"></script>
<script>
@@ -169,12 +184,17 @@
transition: 'linear',
math: {
// mathjax: 'http://cdn.mathjax.org/mathjax/latest/MathJax.js',
config: 'TeX-AMS_HTML-full'
// mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js',
config: 'TeX-AMS_HTML-full',
TeX: {
Macros: {
R: '\\mathbb{R}',
set: [ '\\left\\{#1 \\; ; \\; #2\\right\\}', 2 ]
}
}
},
dependencies: [
{ src: '../../lib/js/classList.js' },
{ src: '../../plugin/math/math.js', async: true }
]
});

View File

@@ -93,7 +93,7 @@
<h2>Video background</h2>
</section>
<section data-background-iframe="https://slides.com">
<section data-background-iframe="https://slides.com/news/make-better-presentations/embed?style=hidden&autoSlide=4000">
<h2>Iframe background</h2>
</section>
@@ -122,7 +122,6 @@
</div>
<script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.js"></script>
<script>

View File

@@ -81,7 +81,6 @@
</div>
<script src="../../lib/js/head.min.js"></script>
<script src="../../js/reveal.js"></script>
<script>

View File

@@ -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;
}

File diff suppressed because it is too large Load Diff

436
test/qunit-2.5.0.css Normal file
View File

@@ -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;
}

5188
test/qunit-2.5.0.js Normal file

File diff suppressed because it is too large Load Diff

12
test/simple.md Normal file
View File

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

View File

@@ -0,0 +1,78 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Async Dependencies</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section>Slide content</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
var externalScriptSequence = '';
var scriptCount = 0;
QUnit.config.autostart = false;
QUnit.module( 'Async Dependencies' );
QUnit.test( 'Async scripts are loaded', function( assert ) {
assert.expect( 5 );
var done = assert.async( 5 );
function callback( event ) {
if( externalScriptSequence.length === 1 ) {
assert.ok( externalScriptSequence === 'A', 'first callback was sync script' );
done();
}
else {
assert.ok( true, 'async script loaded' );
done();
}
if( externalScriptSequence.length === 4 ) {
assert.ok( externalScriptSequence.indexOf( 'A' ) !== -1 &&
externalScriptSequence.indexOf( 'B' ) !== -1 &&
externalScriptSequence.indexOf( 'C' ) !== -1 &&
externalScriptSequence.indexOf( 'D' ) !== -1, 'four unique scripts were loaded' );
done();
}
scriptCount ++;
}
Reveal.initialize({
dependencies: [
{ src: 'assets/external-script-a.js', async: false, callback: callback },
{ src: 'assets/external-script-b.js', async: true, callback: callback },
{ src: 'assets/external-script-c.js', async: true, callback: callback },
{ src: 'assets/external-script-d.js', async: true, callback: callback }
]
});
});
QUnit.start();
</script>
</body>
</html>

View File

@@ -0,0 +1,54 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Dependencies</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section>Slide content</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
window.externalScriptSequence = '';
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Dependencies' );
QUnit.test( 'Load synchronous scripts', function( assert ) {
assert.strictEqual( window.externalScriptSequence, 'ABC', 'Loaded and executed in order' );
});
} );
Reveal.initialize({
dependencies: [
{ src: 'assets/external-script-a.js' },
{ src: 'assets/external-script-b.js' },
{ src: 'assets/external-script-c.js' }
]
});
</script>
</body>
</html>

View File

@@ -0,0 +1,74 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Grid</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section>0</section>
<section>
<section>1.1</section>
<section>1.2</section>
<section>1.3</section>
<section>1.4</section>
</section>
<section>
<section>2.1</section>
<section>2.2</section>
<section>2.3</section>
<section>2.4</section>
</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Grid Navigation' );
QUnit.test( 'Disabled', function( assert ) {
Reveal.right();
Reveal.down();
Reveal.down();
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined }, 'Correct starting point' );
Reveal.right();
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: undefined }, 'Moves to top when going to adjacent stack' );
});
QUnit.test( 'Enabled', function( assert ) {
Reveal.configure({ navigationMode: 'grid' });
Reveal.slide( 0, 0 );
Reveal.right();
Reveal.down();
Reveal.down();
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined }, 'Correct starting point' );
Reveal.right();
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 2, f: undefined }, 'Remains at same vertical index when going to adjacent stack' );
});
} );
Reveal.initialize();
</script>
</body>
</html>

View File

@@ -0,0 +1,104 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Iframe Backgrounds</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section data-background-iframe="#1">1</section>
<section data-background-iframe="#2">2</section>
<section data-background-iframe="#3" data-preload>3</section>
<section data-background-iframe="#4">4</section>
<section data-background-iframe="#5">5</section>
<section data-background-iframe="#6">6</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
Reveal.addEventListener( 'ready', function() {
function getIframe( index ) {
return document.querySelectorAll( '.slide-background' )[index].querySelector( 'iframe' );
}
QUnit.module( 'Iframe' );
QUnit.test( 'Using default settings', function( assert ) {
Reveal.slide(0);
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), false, 'not preloaded when within viewDistance' );
Reveal.slide(1);
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
Reveal.slide(0);
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), false, 'unloaded when slide becomes invisible' );
});
QUnit.test( 'Using data-preload', function( assert ) {
Reveal.slide(1);
assert.strictEqual( getIframe(2).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
Reveal.slide(0);
assert.strictEqual( getIframe(3).hasAttribute( 'src' ), false, 'unloads outside of viewDistance' );
});
QUnit.test( 'Using preloadIframes: true', function( assert ) {
Reveal.configure({ preloadIframes: true });
Reveal.slide(1);
assert.strictEqual( getIframe(0).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
assert.strictEqual( getIframe(2).hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
});
QUnit.test( 'Using preloadIframes: false', function( assert ) {
Reveal.configure({ preloadIframes: false });
Reveal.slide(0);
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );
assert.strictEqual( getIframe(2).hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );
Reveal.slide(1);
assert.strictEqual( getIframe(1).hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
});
} );
Reveal.initialize({
viewDistance: 3
});
</script>
</body>
</html>

108
test/test-iframes.html Normal file
View File

@@ -0,0 +1,108 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Iframes</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section>1</section>
<section>2</section>
<section>
<iframe class="default-iframe" data-src="#"></iframe>
<iframe class="preload-iframe" data-src="#" data-preload></iframe>
</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
Reveal.addEventListener( 'ready', function() {
var defaultIframe = document.querySelector( '.default-iframe' ),
preloadIframe = document.querySelector( '.preload-iframe' );
QUnit.module( 'Iframe' );
QUnit.test( 'Using default settings', function( assert ) {
Reveal.slide(1);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), false, 'not preloaded when within viewDistance' );
Reveal.slide(2);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
Reveal.slide(1);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), false, 'unloaded when slide becomes invisible' );
});
QUnit.test( 'Using data-preload', function( assert ) {
Reveal.slide(1);
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
Reveal.slide(2);
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'loaded when slide becoems visible' );
Reveal.slide(0);
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), false, 'unloads outside of viewDistance' );
});
QUnit.test( 'Using preloadIframes: true', function( assert ) {
Reveal.configure({ preloadIframes: true });
Reveal.slide(1);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'preloaded within viewDistance' );
Reveal.slide(2);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
});
QUnit.test( 'Using preloadIframes: false', function( assert ) {
Reveal.configure({ preloadIframes: false });
Reveal.slide(0);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), false, 'not preloaded within viewDistance' );
Reveal.slide(2);
assert.strictEqual( defaultIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
assert.strictEqual( preloadIframe.hasAttribute( 'src' ), true, 'loaded when slide becomes visible' );
});
} );
Reveal.initialize({
viewDistance: 2
});
</script>
</body>
</html>

View File

@@ -7,7 +7,7 @@
<title>reveal.js - Test Markdown Element Attributes</title>
<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>
<body style="overflow: auto;">
@@ -66,8 +66,7 @@
Test
![Example Picture](examples/assets/image2.png)
<!-- {_class="reveal stretch"} -->
![Example Picture](examples/assets/image2.png) <!-- {_class="reveal stretch"} -->
</script>
</section>
@@ -122,11 +121,10 @@
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script>
<script src="qunit-2.5.0.js"></script>
<script src="test-markdown-element-attributes.js"></script>

View File

@@ -1,46 +1,44 @@
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Markdown' );
test( 'Vertical separator', function() {
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
QUnit.test( 'Vertical separator', function( assert ) {
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 4, 'found four slides' );
});
test( 'Attributes on element header in vertical slides', function() {
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.shrink' ).length, 1, 'found one vertical slide with class fragment.shrink on header' );
QUnit.test( 'Attributes on element header in vertical slides', function( assert ) {
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' );
assert.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() {
strictEqual( document.querySelectorAll( '.reveal .slides section>section p.fragment.grow' ).length, 2, 'found a vertical slide with two paragraphs with class fragment.grow' );
QUnit.test( 'Attributes on element paragraphs in vertical slides', function( assert ) {
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() {
strictEqual( document.querySelectorAll( '.reveal .slides section>section li.fragment.grow' ).length, 3, 'found a vertical slide with three list items with class fragment.grow' );
QUnit.test( 'Attributes on element list items in vertical slides', function( assert ) {
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() {
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' );
QUnit.test( 'Attributes on element paragraphs in horizontal slides', function( assert ) {
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 elements in vertical slides with default element attribute separator', function() {
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 element list items in horizontal slides', function( assert ) {
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() {
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' );
QUnit.test( 'Attributes on element image in horizontal slides', function( assert ) {
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();

View File

@@ -0,0 +1,37 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Markdown</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<!-- <section data-markdown="simple.md" data-separator="^\r?\n\r?\n\r?\n" data-separator-vertical="^\r?\n\r?\n"></section> -->
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="../plugin/highlight/highlight.js"></script>
<script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-2.5.0.js"></script>
<!-- <script src="test-markdown-external.js"></script> -->
<!-- Test disabled 28/2/2019 by Hakim Markdown plugin needs to be updated to load extenal files asycnhronously -->
</body>
</html>

View File

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

View File

@@ -0,0 +1,40 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Markdown Options</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section data-markdown>
<script type="text/template">
## Testing Markdown Options
This "slide" should contain 'smart' quotes.
</script>
</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script src="test-markdown-options.js"></script>
</body>
</html>

View File

@@ -0,0 +1,27 @@
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Markdown' );
QUnit.test( 'Options are set', function( assert ) {
assert.strictEqual( marked.defaults.smartypants, true );
});
QUnit.test( 'Smart quotes are activated', function( assert ) {
var text = document.querySelector( '.reveal .slides>section>p' ).textContent;
assert.strictEqual( /['"]/.test( text ), false );
assert.strictEqual( /[“”‘’]/.test( text ), true );
});
} );
Reveal.initialize({
dependencies: [
{ src: '../plugin/markdown/marked.js' },
// Test loading JS files with query strings
{ src: '../plugin/markdown/markdown.js?query=string' },
],
markdown: {
smartypants: true
}
});

View File

@@ -7,7 +7,7 @@
<title>reveal.js - Test Markdown Attributes</title>
<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>
<body style="overflow: auto;">
@@ -116,11 +116,10 @@
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script>
<script src="qunit-2.5.0.js"></script>
<script src="test-markdown-slide-attributes.js"></script>

View File

@@ -1,47 +1,44 @@
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Markdown' );
test( 'Vertical separator', function() {
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 6, 'found six vertical slides' );
QUnit.test( 'Vertical separator', function( assert ) {
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 6, 'found six vertical slides' );
});
test( 'Id on slide', function() {
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' );
QUnit.test( 'Id on slide', function( assert ) {
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 a[href="#/slide2"]' ).length, 1, 'found one slide with a link to slide2' );
});
test( 'data-background attributes', function() {
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"' );
strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
QUnit.test( 'data-background attributes', function( assert ) {
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="#ff0000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C6916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
});
test( 'data-transition attributes', function() {
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"' );
strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="zoom"]' ).length, 1, 'found one slide with data-transition="zoom"' );
QUnit.test( 'data-transition attributes', function( assert ) {
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="fade"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
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() {
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"' );
strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#C7916B"]' ).length, 1, 'found one slide with data-background="#C6916B"' );
QUnit.test( 'data-background attributes with default separator', function( assert ) {
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="#f70000"]' ).length, 1, 'found one vertical slide with data-background="#ff0000"' );
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() {
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"' );
strictEqual( document.querySelectorAll( '.reveal .slides section [data-transition="concave"]' ).length, 1, 'found one slide with data-transition="zoom"' );
QUnit.test( 'data-transition attributes with default separator', function( assert ) {
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="page"]' ).length, 1, 'found one vertical slide with data-transition="fade"' );
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() {
strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
QUnit.test( 'data-transition attributes with inline content', function( assert ) {
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section[data-background="#ff0000"]' ).length, 3, 'found three horizontal slides with data-background="#ff0000"' );
});
} );
Reveal.initialize();

View File

@@ -7,13 +7,13 @@
<title>reveal.js - Test Markdown</title>
<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>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
@@ -40,11 +40,10 @@
</div>
<script src="../lib/js/head.min.js"></script>
<script src="../js/reveal.js"></script>
<script src="../plugin/markdown/marked.js"></script>
<script src="../plugin/markdown/markdown.js"></script>
<script src="qunit-1.12.0.js"></script>
<script src="qunit-2.5.0.js"></script>
<script src="test-markdown.js"></script>

View File

@@ -1,15 +1,11 @@
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Markdown' );
test( 'Vertical separator', function() {
strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
QUnit.test( 'Vertical separator', function( assert ) {
assert.strictEqual( document.querySelectorAll( '.reveal .slides>section>section' ).length, 2, 'found two slides' );
});
} );
Reveal.initialize();

View File

@@ -8,7 +8,7 @@
<link rel="stylesheet" href="../css/reveal.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>
<body style="overflow: auto;">
@@ -22,7 +22,7 @@
<section>
<h1>1</h1>
<img data-src="fake-url.png">
<img data-src="">
</section>
<section>
@@ -73,9 +73,8 @@
</div>
<script src="../lib/js/head.min.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>

View File

@@ -1,15 +1,12 @@
Reveal.addEventListener( 'ready', function() {
// Only one test for now, we're mainly ensuring that there
// are no execution errors when running PDF mode
test( 'Reveal.isReady', function() {
strictEqual( Reveal.isReady(), true, 'returns true' );
QUnit.test( 'Reveal.isReady', function( assert ) {
assert.strictEqual( Reveal.isReady(), true, 'returns true' );
});
} );
Reveal.initialize({ pdf: true });

105
test/test-plugins.html Normal file
View File

@@ -0,0 +1,105 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test Plugins</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section>Slide content</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
QUnit.module( 'Plugins' );
var initCounter = { PluginB: 0, PluginC: 0, PluginD: 0 };
// Plugin with no init method
var PluginA = {};
// Plugin with init method
var PluginB = { init: function() {
initCounter['PluginB'] += 1;
} };
// Async plugin with init method
var PluginC = { init: function() {
return new Promise(function( resolve ) {
setTimeout( () => {
initCounter['PluginC'] += 1;
resolve();
}, 1000 );
});
} };
// Plugin initialized after reveal.js is ready
var PluginD = { init: function() {
initCounter['PluginD'] += 1;
} };
var PluginE = {};
Reveal.registerPlugin( 'PluginA', PluginA );
Reveal.registerPlugin( 'PluginB', PluginB );
Reveal.registerPlugin( 'PluginC', PluginC );
Reveal.initialize();
QUnit.test( 'Can initialize synchronously', function( assert ) {
assert.strictEqual( initCounter['PluginB'], 1 );
Reveal.registerPlugin( 'PluginB', PluginB );
assert.strictEqual( initCounter['PluginB'], 1, 'prevents duplicate registration' );
});
QUnit.test( 'Can initialize asynchronously', function( assert ) {
assert.expect( 3 );
var done = assert.async( 2 );
assert.strictEqual( initCounter['PluginC'], 0, 'async plugin not immediately initialized' );
Reveal.addEventListener( 'ready', function() {
assert.strictEqual( initCounter['PluginC'], 1, 'finsihed initializing when reveal.js dispatches "ready"' );
done();
Reveal.registerPlugin( 'PluginD', PluginD );
assert.strictEqual( initCounter['PluginD'], 1, 'plugin registered after reveal.js is ready still initiailizes' );
done();
});
} );
QUnit.test( 'Can check if plugin is registered', function( assert ) {
assert.strictEqual( Reveal.hasPlugin( 'PluginA' ), true );
assert.strictEqual( Reveal.hasPlugin( 'PluginE' ), false );
Reveal.registerPlugin( 'PluginE', PluginE );
assert.strictEqual( Reveal.hasPlugin( 'PluginE' ), true );
} );
QUnit.test( 'Can retrieve plugin instance', function( assert ) {
assert.strictEqual( Reveal.getPlugin( 'PluginB' ), PluginB );
} );
</script>
</body>
</html>

139
test/test-state.html Normal file
View File

@@ -0,0 +1,139 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>reveal.js - Test State</title>
<link rel="stylesheet" href="../css/reveal.css">
<link rel="stylesheet" href="qunit-2.5.0.css">
</head>
<body style="overflow: auto;">
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div class="reveal" style="display: none;">
<div class="slides">
<section>No state</section>
<section id="slide2" data-state="state1">State 1</section>
<section data-state="state1">State 1</section>
<section data-state="state2">State 2</section>
<section>
<section>No state</section>
<section data-state="state1">State 1</section>
<section data-state="state3">State 3</section>
<section>No state</section>
</section>
<section>No state</section>
</div>
</div>
<script src="../js/reveal.js"></script>
<script src="qunit-2.5.0.js"></script>
<script>
Reveal.addEventListener( 'ready', function() {
QUnit.module( 'State' );
QUnit.test( 'Fire events when changing slide', function( assert ) {
assert.expect( 2 );
var state1 = assert.async();
var state2 = assert.async();
var _onState1 = function( event ) {
assert.ok( true, 'state1 fired' );
state1();
}
var _onState2 = function( event ) {
assert.ok( true, 'state2 fired' );
state2();
}
Reveal.addEventListener( 'state1', _onState1 );
Reveal.addEventListener( 'state2', _onState2 );
Reveal.slide( 1 );
Reveal.slide( 3 );
Reveal.removeEventListener( 'state1', _onState1 );
Reveal.removeEventListener( 'state2', _onState2 );
});
QUnit.test( 'Fire state events for vertical slides', function( assert ) {
assert.expect( 2 );
var done = assert.async( 2 );
var _onState1 = function( event ) {
assert.ok( true, 'state1 fired' );
done();
}
var _onState3 = function( event ) {
assert.ok( true, 'state3 fired' );
done();
}
Reveal.addEventListener( 'state1', _onState1 );
Reveal.addEventListener( 'state3', _onState3 );
Reveal.slide( 0 );
Reveal.slide( 4, 1 );
Reveal.slide( 4, 2 );
Reveal.removeEventListener( 'state1', _onState1 );
Reveal.removeEventListener( 'state3', _onState3 );
});
QUnit.test( 'No events if state remains unchanged', function( assert ) {
var stateChanges = 0;
var _onEvent = function( event ) {
stateChanges += 1;
}
Reveal.addEventListener( 'state1', _onEvent );
Reveal.slide( 0 ); // no state
Reveal.slide( 1 ); // state1
Reveal.slide( 2 ); // state1
Reveal.prev(); // state1
Reveal.next(); // state1
Reveal.slide( 4, 1 ); // state1
Reveal.slide( 0 ); // no state
Reveal.removeEventListener( 'state1', _onEvent );
assert.strictEqual( stateChanges, 1, 'no event was fired when going to slide with same state' );
});
QUnit.test( 'Event order', function( assert ) {
var _onEvent = function( event ) {
assert.ok( Reveal.getCurrentSlide() == document.querySelector( '#slide2' ), 'correct current slide immediately after state event' );
}
Reveal.addEventListener( 'state1', _onEvent );
Reveal.slide( 0 );
Reveal.slide( 1 );
Reveal.removeEventListener( 'state1', _onEvent );
});
} );
Reveal.initialize();
</script>
</body>
</html>

View File

@@ -7,7 +7,7 @@
<title>reveal.js - Tests</title>
<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>
<body style="overflow: auto;">
@@ -21,13 +21,14 @@
<section data-background-image="examples/assets/image1.png">
<h1>1</h1>
<img data-src="fake-url.png">
<video data-src="fake-url.mp4"></video>
<audio data-src="fake-url.mp3"></audio>
<img data-src="">
<video data-src=""></video>
<audio data-src=""></audio>
<aside class="notes">speaker notes 1</aside>
</section>
<section>
<section data-background="examples/assets/image2.png">
<section data-background="examples/assets/image2.png" data-notes="speaker notes 2">
<h1>2.1</h1>
</section>
<section>
@@ -75,9 +76,8 @@
</div>
<script src="../lib/js/head.min.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>

View File

@@ -1,4 +1,3 @@
// These tests expect the DOM to contain a presentation
// with the following slide structure:
//
@@ -8,7 +7,6 @@
// 3 - Two fragments with same data-fragment-index
// 4
Reveal.addEventListener( 'ready', function() {
// ---------------------------------------------------------------
@@ -16,16 +14,16 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'DOM' );
test( 'Initial slides classes', function() {
QUnit.test( 'Initial slides classes', function( assert ) {
var horizontalSlides = document.querySelectorAll( '.reveal .slides>section' )
strictEqual( document.querySelectorAll( '.reveal .slides section.past' ).length, 0, 'no .past slides' );
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.past' ).length, 0, 'no .past slides' );
assert.strictEqual( document.querySelectorAll( '.reveal .slides section.present' ).length, 1, 'one .present slide' );
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,195 +31,203 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'API' );
test( 'Reveal.isReady', function() {
strictEqual( Reveal.isReady(), true, 'returns true' );
QUnit.test( 'Reveal.isReady', function( assert ) {
assert.strictEqual( Reveal.isReady(), true, 'returns true' );
});
test( 'Reveal.isOverview', function() {
strictEqual( Reveal.isOverview(), false, 'false by default' );
QUnit.test( 'Reveal.isOverview', function( assert ) {
assert.strictEqual( Reveal.isOverview(), false, 'false by default' );
Reveal.toggleOverview();
strictEqual( Reveal.isOverview(), true, 'true after toggling on' );
assert.strictEqual( Reveal.isOverview(), true, 'true after toggling on' );
Reveal.toggleOverview();
strictEqual( Reveal.isOverview(), false, 'false after toggling off' );
assert.strictEqual( Reveal.isOverview(), false, 'false after toggling off' );
});
test( 'Reveal.isPaused', function() {
strictEqual( Reveal.isPaused(), false, 'false by default' );
QUnit.test( 'Reveal.isPaused', function( assert ) {
assert.strictEqual( Reveal.isPaused(), false, 'false by default' );
Reveal.togglePause();
strictEqual( Reveal.isPaused(), true, 'true after pausing' );
assert.strictEqual( Reveal.isPaused(), true, 'true after pausing' );
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 );
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 );
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 );
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( 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 );
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;
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 );
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;
Reveal.slide( 1, 1 );
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() {
strictEqual( Reveal.getTotalSlides(), 8, 'eight slides in total' );
QUnit.test( 'Reveal.getTotalSlides', function( assert ) {
assert.strictEqual( Reveal.getTotalSlides(), 8, 'eight slides in total' );
});
test( 'Reveal.getIndices', function() {
QUnit.test( 'Reveal.getIndices', function( assert ) {
var indices = Reveal.getIndices();
ok( indices.hasOwnProperty( 'h' ), 'h exists' );
ok( indices.hasOwnProperty( 'v' ), 'v exists' );
ok( indices.hasOwnProperty( 'f' ), 'f exists' );
assert.ok( indices.hasOwnProperty( 'h' ), 'h exists' );
assert.ok( indices.hasOwnProperty( 'v' ), 'v exists' );
assert.ok( indices.hasOwnProperty( 'f' ), 'f exists' );
Reveal.slide( 1, 0 );
strictEqual( Reveal.getIndices().h, 1, 'h 1' );
strictEqual( Reveal.getIndices().v, 0, 'v 0' );
assert.strictEqual( Reveal.getIndices().h, 1, 'h 1' );
assert.strictEqual( Reveal.getIndices().v, 0, 'v 0' );
Reveal.slide( 1, 2 );
strictEqual( Reveal.getIndices().h, 1, 'h 1' );
strictEqual( Reveal.getIndices().v, 2, 'v 2' );
assert.strictEqual( Reveal.getIndices().h, 1, 'h 1' );
assert.strictEqual( Reveal.getIndices().v, 2, 'v 2' );
Reveal.slide( 0, 0 );
strictEqual( Reveal.getIndices().h, 0, 'h 0' );
strictEqual( Reveal.getIndices().v, 0, 'v 0' );
assert.strictEqual( Reveal.getIndices().h, 0, 'h 0' );
assert.strictEqual( Reveal.getIndices().v, 0, 'v 0' );
});
test( 'Reveal.getSlide', function() {
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' );
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' );
QUnit.test( 'Reveal.getSlide', function( assert ) {
assert.equal( Reveal.getSlide( 0 ), document.querySelector( '.reveal .slides>section:first-child' ), 'gets correct first slide' );
assert.equal( Reveal.getSlide( 1 ), document.querySelector( '.reveal .slides>section:nth-child(2)' ), 'no v index returns stack' );
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' );
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' );
strictEqual( Reveal.getSlide( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
assert.strictEqual( Reveal.getSlide( 100 ), undefined, 'undefined when out of horizontal bounds' );
assert.strictEqual( Reveal.getSlide( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
});
test( 'Reveal.getSlideBackground', function() {
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' );
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' );
QUnit.test( 'Reveal.getSlideBackground', function( assert ) {
assert.equal( Reveal.getSlideBackground( 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:first-child' ), 'gets correct first background' );
assert.equal( Reveal.getSlideBackground( 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2)' ), 'no v index returns stack' );
assert.equal( Reveal.getSlideBackground( 1, 0 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(2)' ), 'v index 0 returns first vertical child' );
assert.equal( Reveal.getSlideBackground( 1, 1 ), document.querySelector( '.reveal .backgrounds>.slide-background:nth-child(2) .slide-background:nth-child(3)' ), 'v index 1 returns second vertical child' );
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( 100 ), undefined, 'undefined when out of horizontal bounds' );
assert.strictEqual( Reveal.getSlideBackground( 1, 100 ), undefined, 'undefined when out of vertical bounds' );
});
test( 'Reveal.getPreviousSlide/getCurrentSlide', function() {
QUnit.test( 'Reveal.getSlideNotes', function( assert ) {
Reveal.slide( 0, 0 );
assert.ok( Reveal.getSlideNotes() === 'speaker notes 1', 'works with <aside class="notes">' );
Reveal.slide( 1, 0 );
assert.ok( Reveal.getSlideNotes() === 'speaker notes 2', 'works with <section data-notes="">' );
});
QUnit.test( 'Reveal.getPreviousSlide/getCurrentSlide', function( assert ) {
Reveal.slide( 0, 0 );
Reveal.slide( 1, 0 );
var firstSlide = document.querySelector( '.reveal .slides>section:first-child' );
var secondSlide = document.querySelector( '.reveal .slides>section:nth-child(2)>section' );
equal( Reveal.getPreviousSlide(), firstSlide, 'previous is slide #0' );
equal( Reveal.getCurrentSlide(), secondSlide, 'current is slide #1' );
assert.equal( Reveal.getPreviousSlide(), firstSlide, 'previous is slide #0' );
assert.equal( Reveal.getCurrentSlide(), secondSlide, 'current is slide #1' );
});
test( 'Reveal.getProgress', function() {
QUnit.test( 'Reveal.getProgress', function( assert ) {
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;
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() {
ok( typeof Reveal.getScale() === 'number', 'has scale' );
QUnit.test( 'Reveal.getScale', function( assert ) {
assert.ok( typeof Reveal.getScale() === 'number', 'has scale' );
});
test( 'Reveal.getConfig', function() {
ok( typeof Reveal.getConfig() === 'object', 'has config' );
QUnit.test( 'Reveal.getConfig', function( assert ) {
assert.ok( typeof Reveal.getConfig() === 'object', 'has config' );
});
test( 'Reveal.configure', function() {
strictEqual( Reveal.getConfig().loop, false, '"loop" is false to start with' );
QUnit.test( 'Reveal.configure', function( assert ) {
assert.strictEqual( Reveal.getConfig().loop, false, '"loop" is false to start with' );
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 });
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 );
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 );
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 );
// Step through vertical child slides
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 1, v: 0, f: undefined } );
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 0, f: undefined } );
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 1, v: 1, f: undefined } );
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 1, f: undefined } );
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined } );
assert.deepEqual( Reveal.getIndices(), { h: 1, v: 2, f: undefined } );
// Step through fragments
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 } );
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: -1 } );
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 } );
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 0 } );
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 } );
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 } );
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 );
// We're at the end, this should have no effect
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
assert.deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
Reveal.next();
deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
assert.deepEqual( Reveal.getIndices(), { h: 3, v: 0, f: undefined } );
});
@@ -230,121 +236,144 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Fragments' );
test( 'Sliding to fragments', function() {
QUnit.test( 'Sliding to fragments', function( assert ) {
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 );
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 );
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 );
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( 'data-fragment is set on slide <section>', function( assert ) {
Reveal.slide( 2, 0, -1 );
assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '-1' );
Reveal.slide( 2, 0, 2 );
assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '2' );
Reveal.slide( 2, 0, 0 );
assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '0' );
var fragmentSlide = Reveal.getCurrentSlide();
Reveal.slide( 3, 0 );
assert.deepEqual( fragmentSlide.getAttribute( 'data-fragment' ), '0', 'data-fragment persists when jumping to another slide' );
});
QUnit.test( 'Hiding all fragments', function( assert ) {
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );
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 );
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 lastFragmentIndex = [].slice.call( fragmentSlide.querySelectorAll( '.fragment' ) ).pop().getAttribute( 'data-fragment-index' );
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 );
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 );
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 );
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' );
Reveal.slide( 2, 1, -1 );
Reveal.prev();
assert.strictEqual( fragmentSlide.querySelector( '.fragment.current-fragment' ).getAttribute( 'data-fragment-index' ), lastFragmentIndex, 'last fragment is current fragment when returning from future slide' );
});
test( 'Stepping through fragments', function() {
QUnit.test( 'Stepping through fragments', function( assert ) {
Reveal.slide( 2, 0, -1 );
// forwards:
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();
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();
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
// backwards:
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();
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();
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)' );
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 );
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)' );
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
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 );
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)' );
// These have no indices defined to start with
equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
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' )[0].getAttribute( 'data-fragment-index' ), '0' );
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
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)' );
// These start out as 1-4-4 and should normalize to 0-1-1
equal( fragmentSlide.querySelectorAll( '.fragment' )[0].getAttribute( 'data-fragment-index' ), '0' );
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' )[0].getAttribute( 'data-fragment-index' ), '0' );
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[1].getAttribute( 'data-fragment-index' ), '1' );
assert.equal( fragmentSlide.querySelectorAll( '.fragment' )[2].getAttribute( 'data-fragment-index' ), '1' );
});
asyncTest( 'fragmentshown event', function() {
expect( 2 );
QUnit.test( 'fragmentshown event', function( assert ) {
assert.expect( 2 );
var done = assert.async( 2 );
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'fragmentshown', _onEvent );
@@ -356,16 +385,16 @@ Reveal.addEventListener( 'ready', function() {
Reveal.next();
Reveal.prev(); // shouldn't fire fragmentshown
start();
Reveal.removeEventListener( 'fragmentshown', _onEvent );
});
asyncTest( 'fragmenthidden event', function() {
expect( 2 );
QUnit.test( 'fragmenthidden event', function( assert ) {
assert.expect( 2 );
var done = assert.async( 2 );
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'fragmenthidden', _onEvent );
@@ -376,8 +405,6 @@ Reveal.addEventListener( 'ready', function() {
Reveal.prev();
Reveal.next(); // shouldn't fire fragmenthidden
start();
Reveal.removeEventListener( 'fragmenthidden', _onEvent );
});
@@ -387,50 +414,52 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Auto Sliding' );
test( 'Reveal.isAutoSliding', function() {
strictEqual( Reveal.isAutoSliding(), false, 'false by default' );
QUnit.test( 'Reveal.isAutoSliding', function( assert ) {
assert.strictEqual( Reveal.isAutoSliding(), false, 'false by default' );
Reveal.configure({ autoSlide: 10000 });
strictEqual( Reveal.isAutoSliding(), true, 'true after starting' );
assert.strictEqual( Reveal.isAutoSliding(), true, 'true after starting' );
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.toggleAutoSlide();
strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' );
assert.strictEqual( Reveal.isAutoSliding(), false, 'false after first toggle' );
Reveal.toggleAutoSlide();
strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' );
assert.strictEqual( Reveal.isAutoSliding(), true, 'true after second toggle' );
Reveal.configure({ autoSlide: 0 });
});
asyncTest( 'autoslidepaused', function() {
expect( 1 );
QUnit.test( 'autoslidepaused', function( assert ) {
assert.expect( 1 );
var done = assert.async();
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'autoslidepaused', _onEvent );
Reveal.configure({ autoSlide: 10000 });
Reveal.toggleAutoSlide();
start();
// cleanup
Reveal.configure({ autoSlide: 0 });
Reveal.removeEventListener( 'autoslidepaused', _onEvent );
});
asyncTest( 'autoslideresumed', function() {
expect( 1 );
QUnit.test( 'autoslideresumed', function( assert ) {
assert.expect( 1 );
var done = assert.async();
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'autoslideresumed', _onEvent );
@@ -438,8 +467,6 @@ Reveal.addEventListener( 'ready', function() {
Reveal.toggleAutoSlide();
Reveal.toggleAutoSlide();
start();
// cleanup
Reveal.configure({ autoSlide: 0 });
Reveal.removeEventListener( 'autoslideresumed', _onEvent );
@@ -451,36 +478,36 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Configuration' );
test( 'Controls', function() {
QUnit.test( 'Controls', function( assert ) {
var controlsElement = document.querySelector( '.reveal>.controls' );
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 });
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' );
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 });
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.slide( 0, 0 );
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();
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 });
});
@@ -491,34 +518,34 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Lazy-Loading' );
test( 'img with data-src', function() {
strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' );
QUnit.test( 'img with data-src', function( assert ) {
assert.strictEqual( document.querySelectorAll( '.reveal section img[src]' ).length, 1, 'Image source has been set' );
});
test( 'video with data-src', function() {
strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' );
QUnit.test( 'video with data-src', function( assert ) {
assert.strictEqual( document.querySelectorAll( '.reveal section video[src]' ).length, 1, 'Video source has been set' );
});
test( 'audio with data-src', function() {
strictEqual( document.querySelectorAll( '.reveal section audio[src]' ).length, 1, 'Audio source has been set' );
QUnit.test( 'audio with data-src', function( assert ) {
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 );
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 );
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 );
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 imageSource2 = Reveal.getSlide( 1, 0 ).getAttribute( 'data-background' );
// check that the images are applied to the background elements
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( 0 ).querySelector( '.slide-background-content' ).style.backgroundImage.indexOf( imageSource1 ) !== -1, 'data-background-image worked' );
assert.ok( Reveal.getSlideBackground( 1, 0 ).querySelector( '.slide-background-content' ).style.backgroundImage.indexOf( imageSource2 ) !== -1, 'data-background worked' );
});
@@ -527,11 +554,13 @@ Reveal.addEventListener( 'ready', function() {
QUnit.module( 'Events' );
asyncTest( 'slidechanged', function() {
expect( 3 );
QUnit.test( 'slidechanged', function( assert ) {
assert.expect( 3 );
var done = assert.async( 3 );
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'slidechanged', _onEvent );
@@ -542,17 +571,17 @@ Reveal.addEventListener( 'ready', function() {
Reveal.slide( 3, 0 ); // should trigger
Reveal.next(); // should do nothing
start();
Reveal.removeEventListener( 'slidechanged', _onEvent );
});
asyncTest( 'paused', function() {
expect( 1 );
QUnit.test( 'paused', function( assert ) {
assert.expect( 1 );
var done = assert.async();
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'paused', _onEvent );
@@ -560,16 +589,16 @@ Reveal.addEventListener( 'ready', function() {
Reveal.togglePause();
Reveal.togglePause();
start();
Reveal.removeEventListener( 'paused', _onEvent );
});
asyncTest( 'resumed', function() {
expect( 1 );
QUnit.test( 'resumed', function( assert ) {
assert.expect( 1 );
var done = assert.async();
var _onEvent = function( event ) {
ok( true, 'event fired' );
assert.ok( true, 'event fired' );
done();
}
Reveal.addEventListener( 'resumed', _onEvent );
@@ -577,13 +606,9 @@ Reveal.addEventListener( 'ready', function() {
Reveal.togglePause();
Reveal.togglePause();
start();
Reveal.removeEventListener( 'resumed', _onEvent );
});
} );
Reveal.initialize();