From bc26778e4132d38ba38537e5f0f98796c42693ac Mon Sep 17 00:00:00 2001 From: didier amyot Date: Sat, 11 Mar 2017 14:19:05 -0500 Subject: [PATCH] first commit --- .gitignore | 15 + LICENSE | 214 + Procfile | 1 + README.md | 0 env/dev/clj/transducerpres/middleware.clj | 10 + env/dev/clj/transducerpres/repl.clj | 33 + env/dev/cljs/transducerpres/dev.cljs | 11 + env/prod/clj/transducerpres/middleware.clj | 5 + env/prod/cljs/transducerpres/prod.cljs | 7 + project.clj | 119 + resources/public/css/site.css | 0 resources/public/reveal | 1 + resources/public/reveal.js-3.4.1/.gitignore | 13 + resources/public/reveal.js-3.4.1/.travis.yml | 5 + .../public/reveal.js-3.4.1/CONTRIBUTING.md | 23 + resources/public/reveal.js-3.4.1/Gruntfile.js | 187 + resources/public/reveal.js-3.4.1/LICENSE | 19 + resources/public/reveal.js-3.4.1/README.md | 1170 ++++ resources/public/reveal.js-3.4.1/bower.json | 27 + .../reveal.js-3.4.1/css/print/paper.css | 203 + .../public/reveal.js-3.4.1/css/print/pdf.css | 171 + .../public/reveal.js-3.4.1/css/reveal.css | 1365 +++++ .../public/reveal.js-3.4.1/css/reveal.scss | 1446 +++++ .../reveal.js-3.4.1/css/theme/README.md | 21 + .../reveal.js-3.4.1/css/theme/beige.css | 296 + .../reveal.js-3.4.1/css/theme/black.css | 292 + .../reveal.js-3.4.1/css/theme/blood.css | 315 ++ .../reveal.js-3.4.1/css/theme/league.css | 298 + .../public/reveal.js-3.4.1/css/theme/moon.css | 296 + .../reveal.js-3.4.1/css/theme/night.css | 290 + .../reveal.js-3.4.1/css/theme/serif.css | 292 + .../reveal.js-3.4.1/css/theme/simple.css | 295 + .../public/reveal.js-3.4.1/css/theme/sky.css | 299 + .../reveal.js-3.4.1/css/theme/solarized.css | 296 + .../css/theme/source/beige.scss | 39 + .../css/theme/source/black.scss | 49 + .../css/theme/source/blood.scss | 78 + .../css/theme/source/league.scss | 34 + .../css/theme/source/moon.scss | 57 + .../css/theme/source/night.scss | 34 + .../css/theme/source/serif.scss | 35 + .../css/theme/source/simple.scss | 43 + .../reveal.js-3.4.1/css/theme/source/sky.scss | 46 + .../css/theme/source/solarized.scss | 63 + .../css/theme/source/white.scss | 49 + .../css/theme/template/mixins.scss | 29 + .../css/theme/template/settings.scss | 43 + .../css/theme/template/theme.scss | 352 ++ .../reveal.js-3.4.1/css/theme/white.css | 292 + resources/public/reveal.js-3.4.1/demo.html | 410 ++ resources/public/reveal.js-3.4.1/index.html | 50 + resources/public/reveal.js-3.4.1/js/reveal.js | 4961 +++++++++++++++++ .../reveal.js-3.4.1/lib/css/zenburn.css | 80 + .../lib/font/league-gothic/LICENSE | 2 + .../lib/font/league-gothic/league-gothic.css | 10 + .../lib/font/league-gothic/league-gothic.eot | Bin 0 -> 25696 bytes .../lib/font/league-gothic/league-gothic.ttf | Bin 0 -> 64256 bytes .../lib/font/league-gothic/league-gothic.woff | Bin 0 -> 30764 bytes .../lib/font/source-sans-pro/LICENSE | 45 + .../source-sans-pro-italic.eot | Bin 0 -> 75720 bytes .../source-sans-pro-italic.ttf | Bin 0 -> 238084 bytes .../source-sans-pro-italic.woff | Bin 0 -> 98556 bytes .../source-sans-pro-regular.eot | Bin 0 -> 88070 bytes .../source-sans-pro-regular.ttf | Bin 0 -> 288008 bytes .../source-sans-pro-regular.woff | Bin 0 -> 114324 bytes .../source-sans-pro-semibold.eot | Bin 0 -> 89897 bytes .../source-sans-pro-semibold.ttf | Bin 0 -> 284640 bytes .../source-sans-pro-semibold.woff | Bin 0 -> 115648 bytes .../source-sans-pro-semibolditalic.eot | Bin 0 -> 75706 bytes .../source-sans-pro-semibolditalic.ttf | Bin 0 -> 240944 bytes .../source-sans-pro-semibolditalic.woff | Bin 0 -> 98816 bytes .../font/source-sans-pro/source-sans-pro.css | 39 + .../reveal.js-3.4.1/lib/js/classList.js | 2 + .../public/reveal.js-3.4.1/lib/js/head.min.js | 9 + .../reveal.js-3.4.1/lib/js/html5shiv.js | 7 + resources/public/reveal.js-3.4.1/package.json | 45 + .../plugin/highlight/highlight.js | 78 + .../plugin/markdown/example.html | 129 + .../plugin/markdown/example.md | 31 + .../plugin/markdown/markdown.js | 411 ++ .../reveal.js-3.4.1/plugin/markdown/marked.js | 6 + .../reveal.js-3.4.1/plugin/math/math.js | 67 + .../plugin/multiplex/client.js | 13 + .../reveal.js-3.4.1/plugin/multiplex/index.js | 64 + .../plugin/multiplex/master.js | 31 + .../plugin/multiplex/package.json | 19 + .../plugin/notes-server/client.js | 65 + .../plugin/notes-server/index.js | 69 + .../plugin/notes-server/notes.html | 585 ++ .../reveal.js-3.4.1/plugin/notes/notes.html | 609 ++ .../reveal.js-3.4.1/plugin/notes/notes.js | 136 + .../plugin/print-pdf/print-pdf.js | 48 + .../reveal.js-3.4.1/plugin/search/search.js | 196 + .../reveal.js-3.4.1/plugin/zoom-js/zoom.js | 288 + .../test/examples/assets/image1.png | Bin 0 -> 21991 bytes .../test/examples/assets/image2.png | Bin 0 -> 10237 bytes .../test/examples/barebones.html | 41 + .../test/examples/embedded-media.html | 49 + .../reveal.js-3.4.1/test/examples/math.html | 185 + .../test/examples/slide-backgrounds.html | 144 + .../test/examples/slide-transitions.html | 101 + .../reveal.js-3.4.1/test/qunit-1.12.0.css | 244 + .../reveal.js-3.4.1/test/qunit-1.12.0.js | 2212 ++++++++ .../public/reveal.js-3.4.1/test/simple.md | 12 + .../test-markdown-element-attributes.html | 134 + .../test/test-markdown-element-attributes.js | 46 + .../test/test-markdown-external.html | 36 + .../test/test-markdown-external.js | 24 + .../test/test-markdown-options.html | 41 + .../test/test-markdown-options.js | 26 + .../test/test-markdown-slide-attributes.html | 128 + .../test/test-markdown-slide-attributes.js | 47 + .../reveal.js-3.4.1/test/test-markdown.html | 52 + .../reveal.js-3.4.1/test/test-markdown.js | 15 + .../public/reveal.js-3.4.1/test/test-pdf.html | 83 + .../public/reveal.js-3.4.1/test/test-pdf.js | 15 + .../public/reveal.js-3.4.1/test/test.html | 86 + resources/public/reveal.js-3.4.1/test/test.js | 597 ++ src/clj/transducerpres/handler.clj | 37 + src/clj/transducerpres/presentation.clj | 10 + src/clj/transducerpres/server.clj | 9 + src/clj/transducerpres/slides/intro.clj | 5 + src/clj/transducerpres/slides/roadmap.clj | 7 + src/clj/transducerpres/slides/util.clj | 7 + src/clj/transducerpres/slides/what.clj | 15 + src/cljc/transducerpres/util.cljc | 6 + src/cljs/transducerpres/core.cljs | 45 + system.properties | 1 + test/clj/transducerpres/slides/util_test.clj | 20 + test/cljs/transducerpres/core_test.cljs | 39 + test/cljs/transducerpres/doo_runner.cljs | 5 + 131 files changed, 22307 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 Procfile create mode 100644 README.md create mode 100644 env/dev/clj/transducerpres/middleware.clj create mode 100644 env/dev/clj/transducerpres/repl.clj create mode 100644 env/dev/cljs/transducerpres/dev.cljs create mode 100644 env/prod/clj/transducerpres/middleware.clj create mode 100644 env/prod/cljs/transducerpres/prod.cljs create mode 100644 project.clj create mode 100644 resources/public/css/site.css create mode 120000 resources/public/reveal create mode 100644 resources/public/reveal.js-3.4.1/.gitignore create mode 100644 resources/public/reveal.js-3.4.1/.travis.yml create mode 100644 resources/public/reveal.js-3.4.1/CONTRIBUTING.md create mode 100644 resources/public/reveal.js-3.4.1/Gruntfile.js create mode 100644 resources/public/reveal.js-3.4.1/LICENSE create mode 100644 resources/public/reveal.js-3.4.1/README.md create mode 100644 resources/public/reveal.js-3.4.1/bower.json create mode 100644 resources/public/reveal.js-3.4.1/css/print/paper.css create mode 100644 resources/public/reveal.js-3.4.1/css/print/pdf.css create mode 100644 resources/public/reveal.js-3.4.1/css/reveal.css create mode 100644 resources/public/reveal.js-3.4.1/css/reveal.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/README.md create mode 100644 resources/public/reveal.js-3.4.1/css/theme/beige.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/black.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/blood.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/league.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/moon.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/night.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/serif.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/simple.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/sky.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/solarized.css create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/beige.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/black.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/blood.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/league.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/moon.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/night.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/serif.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/simple.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/sky.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/solarized.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/source/white.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/template/mixins.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/template/settings.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/template/theme.scss create mode 100644 resources/public/reveal.js-3.4.1/css/theme/white.css create mode 100644 resources/public/reveal.js-3.4.1/demo.html create mode 100644 resources/public/reveal.js-3.4.1/index.html create mode 100644 resources/public/reveal.js-3.4.1/js/reveal.js create mode 100644 resources/public/reveal.js-3.4.1/lib/css/zenburn.css create mode 100644 resources/public/reveal.js-3.4.1/lib/font/league-gothic/LICENSE create mode 100644 resources/public/reveal.js-3.4.1/lib/font/league-gothic/league-gothic.css create mode 100755 resources/public/reveal.js-3.4.1/lib/font/league-gothic/league-gothic.eot create mode 100755 resources/public/reveal.js-3.4.1/lib/font/league-gothic/league-gothic.ttf create mode 100755 resources/public/reveal.js-3.4.1/lib/font/league-gothic/league-gothic.woff create mode 100644 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/LICENSE create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-italic.eot create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-italic.ttf create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-italic.woff create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-regular.eot create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-regular.ttf create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-regular.woff create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-semibold.eot create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-semibold.ttf create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-semibold.woff create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf create mode 100755 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff create mode 100644 resources/public/reveal.js-3.4.1/lib/font/source-sans-pro/source-sans-pro.css create mode 100644 resources/public/reveal.js-3.4.1/lib/js/classList.js create mode 100644 resources/public/reveal.js-3.4.1/lib/js/head.min.js create mode 100644 resources/public/reveal.js-3.4.1/lib/js/html5shiv.js create mode 100644 resources/public/reveal.js-3.4.1/package.json create mode 100644 resources/public/reveal.js-3.4.1/plugin/highlight/highlight.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/markdown/example.html create mode 100644 resources/public/reveal.js-3.4.1/plugin/markdown/example.md create mode 100755 resources/public/reveal.js-3.4.1/plugin/markdown/markdown.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/markdown/marked.js create mode 100755 resources/public/reveal.js-3.4.1/plugin/math/math.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/multiplex/client.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/multiplex/index.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/multiplex/master.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/multiplex/package.json create mode 100644 resources/public/reveal.js-3.4.1/plugin/notes-server/client.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/notes-server/index.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/notes-server/notes.html create mode 100644 resources/public/reveal.js-3.4.1/plugin/notes/notes.html create mode 100644 resources/public/reveal.js-3.4.1/plugin/notes/notes.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/print-pdf/print-pdf.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/search/search.js create mode 100644 resources/public/reveal.js-3.4.1/plugin/zoom-js/zoom.js create mode 100644 resources/public/reveal.js-3.4.1/test/examples/assets/image1.png create mode 100644 resources/public/reveal.js-3.4.1/test/examples/assets/image2.png create mode 100644 resources/public/reveal.js-3.4.1/test/examples/barebones.html create mode 100644 resources/public/reveal.js-3.4.1/test/examples/embedded-media.html create mode 100644 resources/public/reveal.js-3.4.1/test/examples/math.html create mode 100644 resources/public/reveal.js-3.4.1/test/examples/slide-backgrounds.html create mode 100644 resources/public/reveal.js-3.4.1/test/examples/slide-transitions.html create mode 100644 resources/public/reveal.js-3.4.1/test/qunit-1.12.0.css create mode 100644 resources/public/reveal.js-3.4.1/test/qunit-1.12.0.js create mode 100644 resources/public/reveal.js-3.4.1/test/simple.md create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-element-attributes.html create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-element-attributes.js create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-external.html create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-external.js create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-options.html create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-options.js create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-slide-attributes.html create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown-slide-attributes.js create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown.html create mode 100644 resources/public/reveal.js-3.4.1/test/test-markdown.js create mode 100644 resources/public/reveal.js-3.4.1/test/test-pdf.html create mode 100644 resources/public/reveal.js-3.4.1/test/test-pdf.js create mode 100644 resources/public/reveal.js-3.4.1/test/test.html create mode 100644 resources/public/reveal.js-3.4.1/test/test.js create mode 100644 src/clj/transducerpres/handler.clj create mode 100644 src/clj/transducerpres/presentation.clj create mode 100644 src/clj/transducerpres/server.clj create mode 100644 src/clj/transducerpres/slides/intro.clj create mode 100644 src/clj/transducerpres/slides/roadmap.clj create mode 100644 src/clj/transducerpres/slides/util.clj create mode 100644 src/clj/transducerpres/slides/what.clj create mode 100644 src/cljc/transducerpres/util.cljc create mode 100644 src/cljs/transducerpres/core.cljs create mode 100644 system.properties create mode 100644 test/clj/transducerpres/slides/util_test.clj create mode 100644 test/cljs/transducerpres/core_test.cljs create mode 100644 test/cljs/transducerpres/doo_runner.cljs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7fcc1b --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/target +/classes +/checkouts +profiles.clj +pom.xml +pom.xml.asc +*.jar +*.class +/.lein-* +/.nrepl-port +/resources/public/js +/out +/.repl +*.log +/.env diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7689f30 --- /dev/null +++ b/LICENSE @@ -0,0 +1,214 @@ +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + +a) in the case of the initial Contributor, the initial code and +documentation distributed under this Agreement, and + +b) in the case of each subsequent Contributor: + +i) changes to the Program, and + +ii) additions to the Program; + +where such changes and/or additions to the Program originate from and are +distributed by that particular Contributor. A Contribution 'originates' from +a Contributor if it was added to the Program by such Contributor itself or +anyone acting on such Contributor's behalf. Contributions do not include +additions to the Program which: (i) are separate modules of software +distributed in conjunction with the Program under their own license +agreement, and (ii) are not derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which are +necessarily infringed by the use or sale of its Contribution alone or when +combined with the Program. + +"Program" means the Contributions distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, +including all Contributors. + +2. GRANT OF RIGHTS + +a) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free copyright license to +reproduce, prepare derivative works of, publicly display, publicly perform, +distribute and sublicense the Contribution of such Contributor, if any, and +such derivative works, in source code and object code form. + +b) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free patent license under +Licensed Patents to make, use, sell, offer to sell, import and otherwise +transfer the Contribution of such Contributor, if any, in source code and +object code form. This patent license shall apply to the combination of the +Contribution and the Program if, at the time the Contribution is added by the +Contributor, such addition of the Contribution causes such combination to be +covered by the Licensed Patents. The patent license shall not apply to any +other combinations which include the Contribution. No hardware per se is +licensed hereunder. + +c) Recipient understands that although each Contributor grants the licenses +to its Contributions set forth herein, no assurances are provided by any +Contributor that the Program does not infringe the patent or other +intellectual property rights of any other entity. Each Contributor disclaims +any liability to Recipient for claims brought by any other entity based on +infringement of intellectual property rights or otherwise. As a condition to +exercising the rights and licenses granted hereunder, each Recipient hereby +assumes sole responsibility to secure any other intellectual property rights +needed, if any. For example, if a third party patent license is required to +allow Recipient to distribute the Program, it is Recipient's responsibility +to acquire that license before distributing the Program. + +d) Each Contributor represents that to its knowledge it has sufficient +copyright rights in its Contribution, if any, to grant the copyright license +set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under +its own license agreement, provided that: + +a) it complies with the terms and conditions of this Agreement; and + +b) its license agreement: + +i) effectively disclaims on behalf of all Contributors all warranties and +conditions, express and implied, including warranties or conditions of title +and non-infringement, and implied warranties or conditions of merchantability +and fitness for a particular purpose; + +ii) effectively excludes on behalf of all Contributors all liability for +damages, including direct, indirect, special, incidental and consequential +damages, such as lost profits; + +iii) states that any provisions which differ from this Agreement are offered +by that Contributor alone and not by any other party; and + +iv) states that source code for the Program is available from such +Contributor, and informs licensees how to obtain it in a reasonable manner on +or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + +a) it must be made available under this Agreement; and + +b) a copy of this Agreement must be included with each copy of the Program. + +Contributors may not remove or alter any copyright notices contained within +the Program. + +Each Contributor must identify itself as the originator of its Contribution, +if any, in a manner that reasonably allows subsequent Recipients to identify +the originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with +respect to end users, business partners and the like. While this license is +intended to facilitate the commercial use of the Program, the Contributor who +includes the Program in a commercial product offering should do so in a +manner which does not create potential liability for other Contributors. +Therefore, if a Contributor includes the Program in a commercial product +offering, such Contributor ("Commercial Contributor") hereby agrees to defend +and indemnify every other Contributor ("Indemnified Contributor") against any +losses, damages and costs (collectively "Losses") arising from claims, +lawsuits and other legal actions brought by a third party against the +Indemnified Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program in +a commercial product offering. The obligations in this section do not apply +to any claims or Losses relating to any actual or alleged intellectual +property infringement. In order to qualify, an Indemnified Contributor must: +a) promptly notify the Commercial Contributor in writing of such claim, and +b) allow the Commercial Contributor tocontrol, and cooperate with the +Commercial Contributor in, the defense and any related settlement +negotiations. The Indemnified Contributor may participate in any such claim +at its own expense. + +For example, a Contributor might include the Program in a commercial product +offering, Product X. That Contributor is then a Commercial Contributor. If +that Commercial Contributor then makes performance claims, or offers +warranties related to Product X, those performance claims and warranties are +such Commercial Contributor's responsibility alone. Under this section, the +Commercial Contributor would have to defend claims against the other +Contributors related to those performance claims and warranties, and if a +court requires any other Contributor to pay any damages as a result, the +Commercial Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON +AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER +EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR +CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A +PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all risks +associated with its exercise of rights under this Agreement , including but +not limited to the risks and costs of program errors, compliance with +applicable laws, damage to or loss of data, programs or equipment, and +unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION +LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of the +remainder of the terms of this Agreement, and without further action by the +parties hereto, such provision shall be reformed to the minimum extent +necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Program itself +(excluding combinations of the Program with other software or hardware) +infringes such Recipient's patent(s), then such Recipient's rights granted +under Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to +comply with any of the material terms or conditions of this Agreement and +does not cure such failure in a reasonable period of time after becoming +aware of such noncompliance. If all Recipient's rights under this Agreement +terminate, Recipient agrees to cease use and distribution of the Program as +soon as reasonably practicable. However, Recipient's obligations under this +Agreement and any licenses granted by Recipient relating to the Program shall +continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in +order to avoid inconsistency the Agreement is copyrighted and may only be +modified in the following manner. The Agreement Steward reserves the right to +publish new versions (including revisions) of this Agreement from time to +time. No one other than the Agreement Steward has the right to modify this +Agreement. The Eclipse Foundation is the initial Agreement Steward. The +Eclipse Foundation may assign the responsibility to serve as the Agreement +Steward to a suitable separate entity. Each new version of the Agreement will +be given a distinguishing version number. The Program (including +Contributions) may always be distributed subject to the version of the +Agreement under which it was received. In addition, after a new version of +the Agreement is published, Contributor may elect to distribute the Program +(including its Contributions) under the new version. Except as expressly +stated in Sections 2(a) and 2(b) above, Recipient receives no rights or +licenses to the intellectual property of any Contributor under this +Agreement, whether expressly, by implication, estoppel or otherwise. All +rights in the Program not expressly granted under this Agreement are +reserved. + +This Agreement is governed by the laws of the State of New York and the +intellectual property laws of the United States of America. No party to this +Agreement will bring a legal action under this Agreement more than one year +after the cause of action arose. Each party waives its rights to a jury trial +in any resulting litigation. diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..cf90692 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: java $JVM_OPTS -cp target/transducerpres.jar clojure.main -m transducerpres.server diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/env/dev/clj/transducerpres/middleware.clj b/env/dev/clj/transducerpres/middleware.clj new file mode 100644 index 0000000..e430dac --- /dev/null +++ b/env/dev/clj/transducerpres/middleware.clj @@ -0,0 +1,10 @@ +(ns transducerpres.middleware + (:require [ring.middleware.defaults :refer [site-defaults wrap-defaults]] + [prone.middleware :refer [wrap-exceptions]] + [ring.middleware.reload :refer [wrap-reload]])) + +(defn wrap-middleware [handler] + (-> handler + (wrap-defaults site-defaults) + wrap-exceptions + wrap-reload)) diff --git a/env/dev/clj/transducerpres/repl.clj b/env/dev/clj/transducerpres/repl.clj new file mode 100644 index 0000000..4706981 --- /dev/null +++ b/env/dev/clj/transducerpres/repl.clj @@ -0,0 +1,33 @@ +(ns transducerpres.repl + (:use transducerpres.handler + figwheel-sidecar.repl-api + ring.server.standalone + [ring.middleware file-info file])) + +(defonce server (atom nil)) + +(defn get-handler [] + ;; #'app expands to (var app) so that when we reload our code, + ;; the server is forced to re-resolve the symbol in the var + ;; rather than having its own copy. When the root binding + ;; changes, the server picks it up without having to restart. + (-> #'app + ; Makes static assets in $PROJECT_DIR/resources/public/ available. + (wrap-file "resources") + ; Content-Type, Content-Length, and Last Modified headers for files in body + (wrap-file-info))) + +(defn start-server + "used for starting the server in development mode from REPL" + [& [port]] + (let [port (if port (Integer/parseInt port) 3000)] + (reset! server + (serve (get-handler) + {:port port + :auto-reload? true + :join? false})) + (println (str "You can view the site at http://localhost:" port)))) + +(defn stop-server [] + (.stop @server) + (reset! server nil)) diff --git a/env/dev/cljs/transducerpres/dev.cljs b/env/dev/cljs/transducerpres/dev.cljs new file mode 100644 index 0000000..27f56be --- /dev/null +++ b/env/dev/cljs/transducerpres/dev.cljs @@ -0,0 +1,11 @@ +(ns ^:figwheel-no-load transducerpres.dev + (:require [transducerpres.core :as core] + [figwheel.client :as figwheel :include-macros true])) + +(enable-console-print!) + +(figwheel/watch-and-reload + :websocket-url "ws://localhost:3449/figwheel-ws" + :jsload-callback core/mount-root) + +(core/init!) diff --git a/env/prod/clj/transducerpres/middleware.clj b/env/prod/clj/transducerpres/middleware.clj new file mode 100644 index 0000000..a408ed1 --- /dev/null +++ b/env/prod/clj/transducerpres/middleware.clj @@ -0,0 +1,5 @@ +(ns transducerpres.middleware + (:require [ring.middleware.defaults :refer [site-defaults wrap-defaults]])) + +(defn wrap-middleware [handler] + (wrap-defaults handler site-defaults)) diff --git a/env/prod/cljs/transducerpres/prod.cljs b/env/prod/cljs/transducerpres/prod.cljs new file mode 100644 index 0000000..f7b5b24 --- /dev/null +++ b/env/prod/cljs/transducerpres/prod.cljs @@ -0,0 +1,7 @@ +(ns transducerpres.prod + (:require [transducerpres.core :as core])) + +;;ignore println statements in prod +(set! *print-fn* (fn [& _])) + +(core/init!) diff --git a/project.clj b/project.clj new file mode 100644 index 0000000..ec2d8ae --- /dev/null +++ b/project.clj @@ -0,0 +1,119 @@ +(defproject transducerpres "0.1.0-SNAPSHOT" + :description "FIXME: write description" + :url "http://example.com/FIXME" + :license {:name "Eclipse Public License" + :url "http://www.eclipse.org/legal/epl-v10.html"} + + :dependencies [[org.clojure/clojure "1.8.0"] + [ring-server "0.4.0"] + [reagent "0.6.0"] + [reagent-utils "0.2.0"] + [ring "1.5.0"] + [ring/ring-defaults "0.2.1"] + [compojure "1.5.1"] + [hiccup "1.0.5"] + [yogthos/config "0.8"] + [org.clojure/clojurescript "1.9.473" + :scope "provided"] + [secretary "1.2.3"] + [venantius/accountant "0.1.7" + :exclusions [org.clojure/tools.reader]]] + + :plugins [[lein-environ "1.0.2"] + [lein-cljsbuild "1.1.1"] + [lein-asset-minifier "0.2.7" + :exclusions [org.clojure/clojure]]] + + :ring {:handler transducerpres.handler/app + :uberwar-name "transducerpres.war"} + + :min-lein-version "2.5.0" + + :uberjar-name "transducerpres.jar" + + :main transducerpres.server + + :clean-targets ^{:protect false} + [:target-path + [:cljsbuild :builds :app :compiler :output-dir] + [:cljsbuild :builds :app :compiler :output-to]] + + :source-paths ["src/clj" "src/cljc"] + :test-paths ["test/clj" "test/cljc"] + :resource-paths ["resources" "target/cljsbuild"] + + :minify-assets + {:assets + {"resources/public/css/site.min.css" "resources/public/css/site.css"}} + + :cljsbuild + {:builds {:min + {:source-paths ["src/cljs" "src/cljc" "env/prod/cljs"] + :compiler + {:output-to "target/cljsbuild/public/js/app.js" + :output-dir "target/uberjar" + :optimizations :advanced + :pretty-print false}} + :app + {:source-paths ["src/cljs" "src/cljc" "env/dev/cljs"] + :compiler + {:main "transducerpres.dev" + :asset-path "/js/out" + :output-to "target/cljsbuild/public/js/app.js" + :output-dir "target/cljsbuild/public/js/out" + :source-map true + :optimizations :none + :pretty-print true}} + ; :test + ; {:source-paths ["src/cljs" "src/cljc" "test/cljs"] + ; :compiler {:main transducerpres.doo-runner + ; :asset-path "/js/out" + ; :output-to "target/test.js" + ; :output-dir "target/cljstest/public/js/out" + ; :optimizations :whitespace + ; :pretty-print true}} + + + } + } + + + :figwheel + {:http-server-root "public" + :server-port 3449 + :nrepl-port 7002 + :nrepl-middleware ["cemerick.piggieback/wrap-cljs-repl" + ] + :css-dirs ["resources/public/css"] + :ring-handler transducerpres.handler/app} + + + + :profiles {:dev {:repl-options {:init-ns transducerpres.repl + :nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]} + + :dependencies [[ring/ring-mock "0.3.0"] + [ring/ring-devel "1.5.0"] + [prone "1.1.4"] + [figwheel-sidecar "0.5.8"] + [org.clojure/tools.nrepl "0.2.12"] + [com.cemerick/piggieback "0.2.2-SNAPSHOT"] + [pjstadig/humane-test-output "0.8.1"] + ] + + :source-paths ["env/dev/clj"] + :plugins [[lein-figwheel "0.5.8"] + [lein-doo "0.1.6"] + ] + + :injections [(require 'pjstadig.humane-test-output) + (pjstadig.humane-test-output/activate!)] + + :env {:dev true}} + + :uberjar {:hooks [minify-assets.plugin/hooks] + :source-paths ["env/prod/clj"] + :prep-tasks ["compile" ["cljsbuild" "once" "min"]] + :env {:production true} + :aot :all + :omit-source true}}) diff --git a/resources/public/css/site.css b/resources/public/css/site.css new file mode 100644 index 0000000..e69de29 diff --git a/resources/public/reveal b/resources/public/reveal new file mode 120000 index 0000000..bec36b8 --- /dev/null +++ b/resources/public/reveal @@ -0,0 +1 @@ +reveal.js-3.4.1 \ No newline at end of file diff --git a/resources/public/reveal.js-3.4.1/.gitignore b/resources/public/reveal.js-3.4.1/.gitignore new file mode 100644 index 0000000..e7b4f21 --- /dev/null +++ b/resources/public/reveal.js-3.4.1/.gitignore @@ -0,0 +1,13 @@ +.idea/ +*.iml +*.iws +*.eml +out/ +.DS_Store +.svn +log/*.log +tmp/** +node_modules/ +.sass-cache +css/reveal.min.css +js/reveal.min.js \ No newline at end of file diff --git a/resources/public/reveal.js-3.4.1/.travis.yml b/resources/public/reveal.js-3.4.1/.travis.yml new file mode 100644 index 0000000..264c6ec --- /dev/null +++ b/resources/public/reveal.js-3.4.1/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 4.1.1 +before_script: + - npm install -g grunt-cli \ No newline at end of file diff --git a/resources/public/reveal.js-3.4.1/CONTRIBUTING.md b/resources/public/reveal.js-3.4.1/CONTRIBUTING.md new file mode 100644 index 0000000..c2091e8 --- /dev/null +++ b/resources/public/reveal.js-3.4.1/CONTRIBUTING.md @@ -0,0 +1,23 @@ +## Contributing + +Please keep the [issue tracker](http://github.com/hakimel/reveal.js/issues) limited to **bug reports**, **feature requests** and **pull requests**. + + +### Personal Support +If you have personal support or setup questions the best place to ask those are [StackOverflow](http://stackoverflow.com/questions/tagged/reveal.js). + + +### Bug Reports +When reporting a bug make sure to include information about which browser and operating system you are on as well as the necessary steps to reproduce the issue. If possible please include a link to a sample presentation where the bug can be tested. + + +### Pull Requests +- Should follow the coding style of the file you work in, most importantly: + - Tabs to indent + - Single-quoted strings +- Should be made towards the **dev branch** +- Should be submitted from a feature/topic branch (not your master) + + +### Plugins +Please do not submit plugins as pull requests. They should be maintained in their own separate repository. More information here: https://github.com/hakimel/reveal.js/wiki/Plugin-Guidelines diff --git a/resources/public/reveal.js-3.4.1/Gruntfile.js b/resources/public/reveal.js-3.4.1/Gruntfile.js new file mode 100644 index 0000000..96a4f52 --- /dev/null +++ b/resources/public/reveal.js-3.4.1/Gruntfile.js @@ -0,0 +1,187 @@ +/* global module:false */ +module.exports = function(grunt) { + var port = grunt.option('port') || 8000; + var root = grunt.option('root') || '.'; + + if (!Array.isArray(root)) root = [root]; + + // Project configuration + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + meta: { + banner: + '/*!\n' + + ' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' + + ' * http://lab.hakim.se/reveal-js\n' + + ' * MIT licensed\n' + + ' *\n' + + ' * Copyright (C) 2016 Hakim El Hattab, http://hakim.se\n' + + ' */' + }, + + qunit: { + files: [ 'test/*.html' ] + }, + + uglify: { + options: { + banner: '<%= meta.banner %>\n' + }, + build: { + src: 'js/reveal.js', + dest: 'js/reveal.min.js' + } + }, + + sass: { + core: { + files: { + 'css/reveal.css': 'css/reveal.scss', + } + }, + themes: { + files: [ + { + expand: true, + cwd: 'css/theme/source', + src: ['*.scss'], + dest: 'css/theme', + ext: '.css' + } + ] + } + }, + + autoprefixer: { + dist: { + src: 'css/reveal.css' + } + }, + + cssmin: { + compress: { + files: { + 'css/reveal.min.css': [ 'css/reveal.css' ] + } + } + }, + + jshint: { + options: { + curly: false, + eqeqeq: true, + immed: true, + esnext: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + eqnull: true, + browser: true, + expr: true, + globals: { + head: false, + module: false, + console: false, + unescape: false, + define: false, + exports: false + } + }, + files: [ 'Gruntfile.js', 'js/reveal.js' ] + }, + + connect: { + server: { + options: { + port: port, + base: root, + livereload: true, + open: true + } + }, + + }, + + zip: { + 'reveal-js-presentation.zip': [ + 'index.html', + 'css/**', + 'js/**', + 'lib/**', + 'images/**', + 'plugin/**', + '**.md' + ] + }, + + watch: { + js: { + files: [ 'Gruntfile.js', 'js/reveal.js' ], + tasks: 'js' + }, + theme: { + files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ], + tasks: 'css-themes' + }, + css: { + files: [ 'css/reveal.scss' ], + tasks: 'css-core' + }, + html: { + files: root.map(path => path + '/*.html') + }, + markdown: { + files: root.map(path => path + '/*.md') + }, + options: { + livereload: true + } + }, + + retire: { + js: ['js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js'], + node: ['.'], + options: {} + } + + }); + + // 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' ); + grunt.loadNpmTasks( 'grunt-retire' ); + + // Default task + grunt.registerTask( 'default', [ 'css', 'js' ] ); + + // JS task + grunt.registerTask( 'js', [ 'jshint', 'uglify', 'qunit' ] ); + + // Theme CSS + grunt.registerTask( 'css-themes', [ 'sass:themes' ] ); + + // Core framework CSS + grunt.registerTask( 'css-core', [ 'sass:core', 'autoprefixer', 'cssmin' ] ); + + // All CSS + grunt.registerTask( 'css', [ 'sass', 'autoprefixer', 'cssmin' ] ); + + // Package presentation to archive + grunt.registerTask( 'package', [ 'default', 'zip' ] ); + + // Serve presentation locally + grunt.registerTask( 'serve', [ 'connect', 'watch' ] ); + + // Run tests + grunt.registerTask( 'test', [ 'jshint', 'qunit' ] ); + +}; diff --git a/resources/public/reveal.js-3.4.1/LICENSE b/resources/public/reveal.js-3.4.1/LICENSE new file mode 100644 index 0000000..924cd89 --- /dev/null +++ b/resources/public/reveal.js-3.4.1/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2016 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 +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/resources/public/reveal.js-3.4.1/README.md b/resources/public/reveal.js-3.4.1/README.md new file mode 100644 index 0000000..8878842 --- /dev/null +++ b/resources/public/reveal.js-3.4.1/README.md @@ -0,0 +1,1170 @@ +# reveal.js [![Build Status](https://travis-ci.org/hakimel/reveal.js.svg?branch=master)](https://travis-ci.org/hakimel/reveal.js) Slides + +A framework for easily creating beautiful presentations using HTML. [Check out the live demo](http://lab.hakim.se/reveal-js/). + +reveal.js comes with a broad range of features including [nested slides](https://github.com/hakimel/reveal.js#markup), [Markdown contents](https://github.com/hakimel/reveal.js#markdown), [PDF export](https://github.com/hakimel/reveal.js#pdf-export), [speaker notes](https://github.com/hakimel/reveal.js#speaker-notes) and a [JavaScript API](https://github.com/hakimel/reveal.js#api). There's also a fully featured visual editor and platform for sharing reveal.js presentations at [slides.com](https://slides.com?ref=github). + +## Table of contents +- [Online Editor](#online-editor) +- [Instructions](#instructions) + - [Markup](#markup) + - [Markdown](#markdown) + - [Element Attributes](#element-attributes) + - [Slide Attributes](#slide-attributes) +- [Configuration](#configuration) +- [Presentation Size](#presentation-size) +- [Dependencies](#dependencies) +- [Ready Event](#ready-event) +- [Auto-sliding](#auto-sliding) +- [Keyboard Bindings](#keyboard-bindings) +- [Touch Navigation](#touch-navigation) +- [Lazy Loading](#lazy-loading) +- [API](#api) + - [Slide Changed Event](#slide-changed-event) + - [Presentation State](#presentation-state) + - [Slide States](#slide-states) + - [Slide Backgrounds](#slide-backgrounds) + - [Parallax Background](#parallax-background) + - [Slide Transitions](#slide-transitions) + - [Internal links](#internal-links) + - [Fragments](#fragments) + - [Fragment events](#fragment-events) + - [Code syntax highlighting](#code-syntax-highlighting) + - [Slide number](#slide-number) + - [Overview mode](#overview-mode) + - [Fullscreen mode](#fullscreen-mode) + - [Embedded media](#embedded-media) + - [Stretching elements](#stretching-elements) + - [postMessage API](#postmessage-api) +- [PDF Export](#pdf-export) +- [Theming](#theming) +- [Speaker Notes](#speaker-notes) + - [Share and Print Speaker Notes](#share-and-print-speaker-notes) + - [Server Side Speaker Notes](#server-side-speaker-notes) +- [Multiplexing](#multiplexing) + - [Master presentation](#master-presentation) + - [Client presentation](#client-presentation) + - [Socket.io server](#socketio-server) +- [MathJax](#mathjax) +- [Installation](#installation) + - [Basic setup](#basic-setup) + - [Full setup](#full-setup) + - [Folder Structure](#folder-structure) +- [License](#license) + +#### More reading +- [Changelog](https://github.com/hakimel/reveal.js/releases): Up-to-date version history. +- [Examples](https://github.com/hakimel/reveal.js/wiki/Example-Presentations): Presentations created with reveal.js, add your own! +- [Browser Support](https://github.com/hakimel/reveal.js/wiki/Browser-Support): Explanation of browser support and fallbacks. +- [Plugins](https://github.com/hakimel/reveal.js/wiki/Plugins,-Tools-and-Hardware): A list of plugins that can be used to extend reveal.js. + +## Online Editor + +Presentations are written using HTML or Markdown but there's also an online editor for those of you who prefer a graphical interface. Give it a try at [https://slides.com](https://slides.com?ref=github). + + +## Instructions + +### Markup + +Here's a barebones example of a fully working reveal.js presentation: +```html + + + + + + +
+
+
Slide 1
+
Slide 2
+
+
+ + + + +``` + +The presentation markup hierarchy needs to be `.reveal > .slides > section` where the `section` represents one slide and can be repeated indefinitely. If you place multiple `section` elements inside of another `section` they will be shown as vertical slides. The first of the vertical slides is the "root" of the others (at the top), and will be included in the horizontal sequence. For example: + +```html +
+
+
Single Horizontal Slide
+
+
Vertical Slide 1
+
Vertical Slide 2
+
+
+
+``` + +### Markdown + +It's possible to write your slides using Markdown. To enable Markdown, add the `data-markdown` attribute to your `
` elements and wrap the contents in a ` +
+``` + +#### External Markdown + +You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file: the `data-separator` attribute defines a regular expression for horizontal slides (defaults to `^\r?\n---\r?\n$`, a newline-bounded horizontal rule) and `data-separator-vertical` defines vertical slides (disabled by default). The `data-separator-notes` attribute is a regular expression for specifying the beginning of the current slide's speaker notes (defaults to `note:`). The `data-charset` attribute is optional and specifies which charset to use when loading the external file. + +When used locally, this feature requires that reveal.js [runs from a local web server](#full-setup). The following example customises all available options: + +```html +
+
+``` + +#### Element Attributes + +Special syntax (in html comment) is available for adding attributes to Markdown elements. This is useful for fragments, amongst other things. + +```html +
+ +
+``` + +#### Slide Attributes + +Special syntax (in html comment) is available for adding attributes to the slide `
` elements generated by your Markdown. + +```html +
+ +
+``` + +#### Configuring *marked* + +We use [marked](https://github.com/chjj/marked) to parse Markdown. To customise marked's rendering, you can pass in options when [configuring Reveal](#configuration): + +```javascript +Reveal.initialize({ + // Options which are passed into marked + // See https://github.com/chjj/marked#options-1 + markdown: { + smartypants: true + } +}); +``` + +### Configuration + +At the end of your page you need to initialize reveal by running the following code. Note that all config values are optional and will default as specified below. + +```javascript +Reveal.initialize({ + + // Display controls in the bottom right corner + controls: true, + + // Display a presentation progress bar + progress: true, + + // Display the page number of the current slide + slideNumber: false, + + // Push each slide change to the browser history + history: false, + + // Enable keyboard shortcuts for navigation + keyboard: true, + + // Enable the slide overview mode + overview: true, + + // Vertical centering of slides + center: true, + + // Enables touch navigation on devices with touch input + touch: true, + + // Loop the presentation + loop: false, + + // Change the presentation direction to be RTL + rtl: false, + + // Randomizes the order of slides each time the presentation loads + shuffle: false, + + // Turns fragments on and off globally + fragments: true, + + // Flags if the presentation is running in an embedded mode, + // i.e. contained within a limited portion of the screen + embedded: false, + + // Flags if we should show a help overlay when the questionmark + // key is pressed + help: true, + + // Flags if speaker notes should be visible to all viewers + showNotes: false, + + // Number of milliseconds between automatically proceeding to the + // next slide, disabled when set to 0, this value can be overwritten + // by using a data-autoslide attribute on your slides + autoSlide: 0, + + // Stop auto-sliding after user input + autoSlideStoppable: true, + + // Use this method for navigation when auto-sliding + autoSlideMethod: Reveal.navigateNext, + + // Enable slide navigation via mouse wheel + mouseWheel: false, + + // Hides the address bar on mobile devices + hideAddressBar: true, + + // Opens links in an iframe preview overlay + previewLinks: false, + + // Transition style + transition: 'slide', // none/fade/slide/convex/concave/zoom + + // Transition speed + transitionSpeed: 'default', // default/fast/slow + + // Transition style for full page slide backgrounds + backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom + + // Number of slides away from the current that are visible + viewDistance: 3, + + // Parallax background image + parallaxBackgroundImage: '', // e.g. "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'" + + // Parallax background size + parallaxBackgroundSize: '', // CSS syntax, e.g. "2100px 900px" + + // Number of pixels to move the parallax background per slide + // - Calculated automatically unless specified + // - Set to 0 to disable movement along an axis + parallaxBackgroundHorizontal: null, + parallaxBackgroundVertical: null + +}); +``` + + +The configuration can be updated after initialization using the ```configure``` method: + +```javascript +// Turn autoSlide off +Reveal.configure({ autoSlide: 0 }); + +// Start auto-sliding every 5s +Reveal.configure({ autoSlide: 5000 }); +``` + + +### Presentation Size + +All presentations have a normal size, that is the resolution at which they are authored. The framework will automatically scale presentations uniformly based on this size to ensure that everything fits on any given display or viewport. + +See below for a list of configuration options related to sizing, including default values: + +```javascript +Reveal.initialize({ + + ... + + // The "normal" size of the presentation, aspect ratio will be preserved + // when the presentation is scaled to fit different resolutions. Can be + // specified using percentage units. + width: 960, + height: 700, + + // Factor of the display size that should remain empty around the content + margin: 0.1, + + // Bounds for smallest/largest possible scale to apply to content + minScale: 0.2, + maxScale: 1.5 + +}); +``` + +If you wish to disable this behavior and do your own scaling (e.g. using media queries), try these settings: + +```javascript +Reveal.initialize({ + + ... + + width: "100%", + height: "100%", + margin: 0, + minScale: 1, + maxScale: 1 +}); +``` + +### Dependencies + +Reveal.js doesn't _rely_ on any third party scripts to work but a few optional libraries are included by default. These libraries are loaded as dependencies in the order they appear, for example: + +```javascript +Reveal.initialize({ + dependencies: [ + // Cross-browser shim that fully implements classList - https://github.com/eligrey/classList.js/ + { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, + + // Interpret Markdown in
elements + { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, + { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, + + // Syntax highlight for elements + { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, + + // Zoom in and out with Alt+click + { src: 'plugin/zoom-js/zoom.js', async: true }, + + // Speaker notes + { src: 'plugin/notes/notes.js', async: true }, + + // MathJax + { src: 'plugin/math/math.js', async: true } + ] +}); +``` + +You can add your own extensions using the same syntax. The following properties are available for each dependency object: +- **src**: Path to the script to load +- **async**: [optional] Flags if the script should load after reveal.js has started, defaults to false +- **callback**: [optional] Function to execute when the script has loaded +- **condition**: [optional] Function which must return true for the script to be loaded + +To load these dependencies, reveal.js requires [head.js](http://headjs.com/) *(a script loading library)* to be loaded before reveal.js. + +### Ready Event + +A 'ready' event is fired when reveal.js has loaded all non-async dependencies and is ready to start navigating. To check if reveal.js is already 'ready' you can call `Reveal.isReady()`. + +```javascript +Reveal.addEventListener( 'ready', function( event ) { + // event.currentSlide, event.indexh, event.indexv +} ); +``` + +Note that we also add a `.ready` class to the `.reveal` element so that you can hook into this with CSS. + +### Auto-sliding + +Presentations can be configured to progress through slides automatically, without any user input. To enable this you will need to tell the framework how many milliseconds it should wait between slides: + +```javascript +// Slide every five seconds +Reveal.configure({ + autoSlide: 5000 +}); +``` +When this is turned on a control element will appear that enables users to pause and resume auto-sliding. Alternatively, sliding can be paused or resumed by pressing »a« on the keyboard. Sliding is paused automatically as soon as the user starts navigating. You can disable these controls by specifying ```autoSlideStoppable: false``` in your reveal.js config. + +You can also override the slide duration for individual slides and fragments by using the ```data-autoslide``` attribute: + +```html +
+

After 2 seconds the first fragment will be shown.

+

After 10 seconds the next fragment will be shown.

+

Now, the fragment is displayed for 2 seconds before the next slide is shown.

+
+``` + +To override the method used for navigation when auto-sliding, you can specify the ```autoSlideMethod``` setting. To only navigate along the top layer and ignore vertical slides, set this to ```Reveal.navigateRight```. + +Whenever the auto-slide mode is resumed or paused the ```autoslideresumed``` and ```autoslidepaused``` events are fired. + + +### Keyboard Bindings + +If you're unhappy with any of the default keyboard bindings you can override them using the ```keyboard``` config option: + +```javascript +Reveal.configure({ + keyboard: { + 13: 'next', // go to the next slide when the ENTER key is pressed + 27: function() {}, // do something custom when ESC is pressed + 32: null // don't do anything when SPACE is pressed (i.e. disable a reveal.js default binding) + } +}); +``` + +### Touch Navigation + +You can swipe to navigate through a presentation on any touch-enabled device. Horizontal swipes change between horizontal slides, vertical swipes change between vertical slides. If you wish to disable this you can set the `touch` config option to false when initializing reveal.js. + +If there's some part of your content that needs to remain accessible to touch events you'll need to highlight this by adding a `data-prevent-swipe` attribute to the element. One common example where this is useful is elements that need to be scrolled. + + +### Lazy Loading + +When working on presentation with a lot of media or iframe content it's important to load lazily. Lazy loading means that reveal.js will only load content for the few slides nearest to the current slide. The number of slides that are preloaded is determined by the `viewDistance` configuration option. + +To enable lazy loading all you need to do is change your "src" attributes to "data-src" as shown below. This is supported for image, video, audio and iframe elements. Lazy loaded iframes will also unload when the containing slide is no longer visible. + +```html +
+ + + +
+``` + + +### API + +The ``Reveal`` object exposes a JavaScript API for controlling navigation and reading state: + +```javascript +// Navigation +Reveal.slide( indexh, indexv, indexf ); +Reveal.left(); +Reveal.right(); +Reveal.up(); +Reveal.down(); +Reveal.prev(); +Reveal.next(); +Reveal.prevFragment(); +Reveal.nextFragment(); + +// Randomize the order of slides +Reveal.shuffle(); + +// Shows a help overlay with keyboard shortcuts +Reveal.showHelp(); + +// Toggle presentation states, optionally pass true/false to force on/off +Reveal.toggleOverview(); +Reveal.togglePause(); +Reveal.toggleAutoSlide(); + +// Change a config value at runtime +Reveal.configure({ controls: true }); + +// Returns the present configuration options +Reveal.getConfig(); + +// Fetch the current scale of the presentation +Reveal.getScale(); + +// Retrieves the previous and current slide elements +Reveal.getPreviousSlide(); +Reveal.getCurrentSlide(); + +Reveal.getIndices(); // { h: 0, v: 0 } } +Reveal.getProgress(); // 0-1 +Reveal.getTotalSlides(); + +// Returns the speaker notes for the current slide +Reveal.getSlideNotes(); + +// State checks +Reveal.isFirstSlide(); +Reveal.isLastSlide(); +Reveal.isOverview(); +Reveal.isPaused(); +Reveal.isAutoSliding(); +``` + +### Slide Changed Event + +A 'slidechanged' event is fired each time the slide is changed (regardless of state). The event object holds the index values of the current slide as well as a reference to the previous and current slide HTML nodes. + +Some libraries, like MathJax (see [#226](https://github.com/hakimel/reveal.js/issues/226#issuecomment-10261609)), get confused by the transforms and display states of slides. Often times, this can be fixed by calling their update or render function from this callback. + +```javascript +Reveal.addEventListener( 'slidechanged', function( event ) { + // event.previousSlide, event.currentSlide, event.indexh, event.indexv +} ); +``` + +### Presentation State + +The presentation's current state can be fetched by using the `getState` method. A state object contains all of the information required to put the presentation back as it was when `getState` was first called. Sort of like a snapshot. It's a simple object that can easily be stringified and persisted or sent over the wire. + +```javascript +Reveal.slide( 1 ); +// we're on slide 1 + +var state = Reveal.getState(); + +Reveal.slide( 3 ); +// we're on slide 3 + +Reveal.setState( state ); +// we're back on slide 1 +``` + +### Slide States + +If you set ``data-state="somestate"`` on a slide ``
``, "somestate" will be applied as a class on the document element when that slide is opened. This allows you to apply broad style changes to the page based on the active slide. + +Furthermore you can also listen to these changes in state via JavaScript: + +```javascript +Reveal.addEventListener( 'somestate', function() { + // TODO: Sprinkle magic +}, false ); +``` + +### Slide Backgrounds + +Slides are contained within a limited portion of the screen by default to allow them to fit any display and scale uniformly. You can apply full page backgrounds outside of the slide area by adding a ```data-background``` attribute to your ```
``` elements. Four different types of backgrounds are supported: color, image, video and iframe. + +##### Color Backgrounds +All CSS color formats are supported, like rgba() or hsl(). +```html +
+

Color

+
+``` + +##### Image Backgrounds +By default, background images are resized to cover the full page. Available options: + +| Attribute | Default | Description | +| :--------------------------- | :--------- | :---------- | +| data-background-image | | URL of the image to show. GIFs restart when the slide opens. | +| data-background-size | cover | See [background-size](https://developer.mozilla.org/docs/Web/CSS/background-size) on MDN. | +| data-background-position | center | See [background-position](https://developer.mozilla.org/docs/Web/CSS/background-position) on MDN. | +| data-background-repeat | no-repeat | See [background-repeat](https://developer.mozilla.org/docs/Web/CSS/background-repeat) on MDN. | +```html +
+

Image

+
+
+

This background image will be sized to 100px and repeated

+
+``` + +##### Video Backgrounds +Automatically plays a full size video behind the slide. + +| Attribute | Default | Description | +| :--------------------------- | :------ | :---------- | +| data-background-video | | A single video source, or a comma separated list of video sources. | +| data-background-video-loop | false | Flags if the video should play repeatedly. | +| data-background-video-muted | false | Flags if the audio should be muted. | + +```html +
+

Video

+
+``` + +##### Iframe Backgrounds +Embeds a web page as a background. Note that since the iframe is in the background layer, behind your slides, it is not possible to interact with the embedded page. +```html +
+

Iframe

+
+``` + +##### Background Transitions +Backgrounds transition using a fade animation by default. This can be changed to a linear sliding transition by passing ```backgroundTransition: 'slide'``` to the ```Reveal.initialize()``` call. Alternatively you can set ```data-background-transition``` on any section with a background to override that specific transition. + + +### Parallax Background + +If you want to use a parallax scrolling background, set the first two config properties below when initializing reveal.js (the other two are optional). + +```javascript +Reveal.initialize({ + + // Parallax background image + parallaxBackgroundImage: '', // e.g. "https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg" + + // Parallax background size + parallaxBackgroundSize: '', // CSS syntax, e.g. "2100px 900px" - currently only pixels are supported (don't use % or auto) + + // Number of pixels to move the parallax background per slide + // - Calculated automatically unless specified + // - Set to 0 to disable movement along an axis + parallaxBackgroundHorizontal: 200, + parallaxBackgroundVertical: 50 + +}); +``` + +Make sure that the background size is much bigger than screen size to allow for some scrolling. [View example](http://lab.hakim.se/reveal-js/?parallaxBackgroundImage=https%3A%2F%2Fs3.amazonaws.com%2Fhakim-static%2Freveal-js%2Freveal-parallax-1.jpg¶llaxBackgroundSize=2100px%20900px). + + + +### Slide Transitions +The global presentation transition is set using the ```transition``` config value. You can override the global transition for a specific slide by using the ```data-transition``` attribute: + +```html +
+

This slide will override the presentation transition and zoom!

+
+ +
+

Choose from three transition speeds: default, fast or slow!

+
+``` + +You can also use different in and out transitions for the same slide: + +```html +
+ The train goes on … +
+
+ and on … +
+
+ and stops. +
+
+ (Passengers entering and leaving) +
+
+ And it starts again. +
+``` + + +### Internal links + +It's easy to link between slides. The first example below targets the index of another slide whereas the second targets a slide with an ID attribute (```
```): + +```html +Link +Link +``` + +You can also add relative navigation links, similar to the built in reveal.js controls, by appending one of the following classes on any element. Note that each element is automatically given an ```enabled``` class when it's a valid navigation route based on the current slide. + +```html + + + + + + +``` + + +### Fragments +Fragments are used to highlight individual elements on a slide. Every element with the class ```fragment``` will be stepped through before moving on to the next slide. Here's an example: http://lab.hakim.se/reveal-js/#/fragments + +The default fragment style is to start out invisible and fade in. This style can be changed by appending a different class to the fragment: + +```html +
+

grow

+

shrink

+

fade-out

+

fade-up (also down, left and right!)

+

visible only once

+

blue only once

+

highlight-red

+

highlight-green

+

highlight-blue

+
+``` + +Multiple fragments can be applied to the same element sequentially by wrapping it, this will fade in the text on the first step and fade it back out on the second. + +```html +
+ + I'll fade in, then out + +
+``` + +The display order of fragments can be controlled using the ```data-fragment-index``` attribute. + +```html +
+

Appears last

+

Appears first

+

Appears second

+
+``` + +### Fragment events + +When a slide fragment is either shown or hidden reveal.js will dispatch an event. + +Some libraries, like MathJax (see #505), get confused by the initially hidden fragment elements. Often times this can be fixed by calling their update or render function from this callback. + +```javascript +Reveal.addEventListener( 'fragmentshown', function( event ) { + // event.fragment = the fragment DOM element +} ); +Reveal.addEventListener( 'fragmenthidden', function( event ) { + // event.fragment = the fragment DOM element +} ); +``` + +### Code syntax highlighting + +By default, Reveal is configured with [highlight.js](https://highlightjs.org/) for code syntax highlighting. Below is an example with clojure code that will be syntax highlighted. When the `data-trim` attribute is present, surrounding whitespace is automatically removed. HTML will be escaped by default. To avoid this, for example if you are using `` to call out a line of code, add the `data-noescape` attribute to the `` element. + +```html +
+

+(def lazy-fib
+  (concat
+   [0 1]
+   ((fn rfib [a b]
+        (lazy-cons (+ a b) (rfib b (+ a b)))) 0 1)))
+	
+
+``` + +### Slide number +If you would like to display the page number of the current slide you can do so using the ```slideNumber``` configuration value. + +```javascript +// Shows the slide number using default formatting +Reveal.configure({ slideNumber: true }); + +// Slide number formatting can be configured using these variables: +// "h.v": horizontal . vertical slide number (default) +// "h/v": horizontal / vertical slide number +// "c": flattened slide number +// "c/t": flattened slide number / total slides +Reveal.configure({ slideNumber: 'c/t' }); + +``` + + +### Overview mode + +Press "Esc" or "o" keys to toggle the overview mode on and off. While you're in this mode, you can still navigate between slides, +as if you were at 1,000 feet above your presentation. The overview mode comes with a few API hooks: + +```javascript +Reveal.addEventListener( 'overviewshown', function( event ) { /* ... */ } ); +Reveal.addEventListener( 'overviewhidden', function( event ) { /* ... */ } ); + +// Toggle the overview mode programmatically +Reveal.toggleOverview(); +``` + +### Fullscreen mode +Just press »F« on your keyboard to show your presentation in fullscreen mode. Press the »ESC« key to exit fullscreen mode. + + +### Embedded media +Embedded HTML5 `