keydown 0.7.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +3 -0
  3. data/LICENSE +1 -1
  4. data/README.md +16 -15
  5. data/VERSION +1 -1
  6. data/keydown.gemspec +9 -6
  7. data/lib/keydown.rb +9 -22
  8. data/lib/keydown/html_helpers.rb +12 -0
  9. data/lib/keydown/{lib/slide.rb → slide.rb} +16 -19
  10. data/lib/keydown/{lib/slidedeck.rb → slidedeck.rb} +20 -5
  11. data/lib/keydown/tasks.rb +5 -0
  12. data/lib/keydown/tasks/base.rb +15 -0
  13. data/lib/keydown/tasks/generate.rb +5 -1
  14. data/lib/keydown/tasks/slides.rb +1 -1
  15. data/lib/version.rb +1 -1
  16. data/spec/lib/html_helpers_spec.rb +26 -0
  17. data/spec/lib/slide_spec.rb +29 -17
  18. data/spec/lib/slidedeck_spec.rb +41 -13
  19. data/spec/spec_helper.rb +2 -6
  20. data/spec/tasks/generate_spec.rb +41 -20
  21. data/spec/tasks/slides_spec.rb +83 -44
  22. data/templates/deck.js/code.html.haml +1 -0
  23. data/templates/deck.js/index.html.haml +54 -0
  24. data/templates/deck.js/slide.html.haml +6 -0
  25. data/templates/generate/css/%presentation_name%.css +12 -1
  26. data/templates/generate/deck.js/core/deck.core.css +394 -0
  27. data/templates/generate/deck.js/core/deck.core.js +461 -0
  28. data/templates/generate/deck.js/core/deck.core.scss +432 -0
  29. data/templates/generate/deck.js/extensions/codemirror/CONTRIBUTORS.txt +2 -0
  30. data/templates/generate/deck.js/extensions/codemirror/MIT-LICENSE.txt +21 -0
  31. data/templates/generate/deck.js/extensions/codemirror/README.md +120 -0
  32. data/templates/generate/deck.js/extensions/codemirror/VERSION.txt +1 -0
  33. data/templates/generate/deck.js/extensions/codemirror/codemirror.js +21 -0
  34. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.css +89 -0
  35. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.js +213 -0
  36. data/templates/generate/deck.js/extensions/codemirror/deck.codemirror.scss +107 -0
  37. data/templates/generate/deck.js/extensions/codemirror/mode/clike/clike.js +247 -0
  38. data/templates/generate/deck.js/extensions/codemirror/mode/clike/index.html +102 -0
  39. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/clojure.js +207 -0
  40. data/templates/generate/deck.js/extensions/codemirror/mode/clojure/index.html +85 -0
  41. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/LICENSE +22 -0
  42. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/coffeescript.js +325 -0
  43. data/templates/generate/deck.js/extensions/codemirror/mode/coffeescript/index.html +722 -0
  44. data/templates/generate/deck.js/extensions/codemirror/mode/css/css.js +124 -0
  45. data/templates/generate/deck.js/extensions/codemirror/mode/css/index.html +56 -0
  46. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.css +3 -0
  47. data/templates/generate/deck.js/extensions/codemirror/mode/diff/diff.js +13 -0
  48. data/templates/generate/deck.js/extensions/codemirror/mode/diff/index.html +99 -0
  49. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/haskell.js +242 -0
  50. data/templates/generate/deck.js/extensions/codemirror/mode/haskell/index.html +60 -0
  51. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/htmlmixed.js +79 -0
  52. data/templates/generate/deck.js/extensions/codemirror/mode/htmlmixed/index.html +52 -0
  53. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/index.html +78 -0
  54. data/templates/generate/deck.js/extensions/codemirror/mode/javascript/javascript.js +348 -0
  55. data/templates/generate/deck.js/extensions/codemirror/mode/lua/index.html +72 -0
  56. data/templates/generate/deck.js/extensions/codemirror/mode/lua/lua.js +138 -0
  57. data/templates/generate/deck.js/extensions/codemirror/mode/php/index.html +49 -0
  58. data/templates/generate/deck.js/extensions/codemirror/mode/php/php.js +115 -0
  59. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/index.html +63 -0
  60. data/templates/generate/deck.js/extensions/codemirror/mode/plsql/plsql.js +217 -0
  61. data/templates/generate/deck.js/extensions/codemirror/mode/python/LICENSE.txt +21 -0
  62. data/templates/generate/deck.js/extensions/codemirror/mode/python/index.html +123 -0
  63. data/templates/generate/deck.js/extensions/codemirror/mode/python/python.js +321 -0
  64. data/templates/generate/deck.js/extensions/codemirror/mode/r/LICENSE +24 -0
  65. data/templates/generate/deck.js/extensions/codemirror/mode/r/index.html +74 -0
  66. data/templates/generate/deck.js/extensions/codemirror/mode/r/r.js +141 -0
  67. data/templates/generate/deck.js/extensions/codemirror/mode/rst/index.html +526 -0
  68. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.css +75 -0
  69. data/templates/generate/deck.js/extensions/codemirror/mode/rst/rst.js +333 -0
  70. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/LICENSE +24 -0
  71. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/index.html +172 -0
  72. data/templates/generate/deck.js/extensions/codemirror/mode/ruby/ruby.js +195 -0
  73. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/index.html +65 -0
  74. data/templates/generate/deck.js/extensions/codemirror/mode/scheme/scheme.js +202 -0
  75. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/index.html +56 -0
  76. data/templates/generate/deck.js/extensions/codemirror/mode/smalltalk/smalltalk.js +122 -0
  77. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/index.html +41 -0
  78. data/templates/generate/deck.js/extensions/codemirror/mode/sparql/sparql.js +143 -0
  79. data/templates/generate/deck.js/extensions/codemirror/mode/stex/index.html +96 -0
  80. data/templates/generate/deck.js/extensions/codemirror/mode/stex/stex.js +167 -0
  81. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/index.html +103 -0
  82. data/templates/generate/deck.js/extensions/codemirror/mode/velocity/velocity.js +146 -0
  83. data/templates/generate/deck.js/extensions/codemirror/mode/xml/index.html +42 -0
  84. data/templates/generate/deck.js/extensions/codemirror/mode/xml/xml.js +231 -0
  85. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/index.html +60 -0
  86. data/templates/generate/deck.js/extensions/codemirror/mode/xmlpure/xmlpure.js +481 -0
  87. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/index.html +68 -0
  88. data/templates/generate/deck.js/extensions/codemirror/mode/yaml/yaml.js +95 -0
  89. data/templates/generate/deck.js/extensions/codemirror/themes/cobalt.css +17 -0
  90. data/templates/generate/deck.js/extensions/codemirror/themes/default.css +19 -0
  91. data/templates/generate/deck.js/extensions/codemirror/themes/elegant.css +9 -0
  92. data/templates/generate/deck.js/extensions/codemirror/themes/neat.css +8 -0
  93. data/templates/generate/deck.js/extensions/codemirror/themes/night.css +20 -0
  94. data/templates/generate/deck.js/extensions/goto/deck.goto.css +41 -0
  95. data/templates/generate/deck.js/extensions/goto/deck.goto.html +6 -0
  96. data/templates/generate/deck.js/extensions/goto/deck.goto.js +118 -0
  97. data/templates/generate/deck.js/extensions/goto/deck.goto.scss +46 -0
  98. data/templates/generate/deck.js/extensions/hash/deck.hash.css +13 -0
  99. data/templates/generate/deck.js/extensions/hash/deck.hash.html +2 -0
  100. data/templates/generate/deck.js/extensions/hash/deck.hash.js +125 -0
  101. data/templates/generate/deck.js/extensions/hash/deck.hash.scss +15 -0
  102. data/templates/generate/deck.js/extensions/menu/deck.menu.css +24 -0
  103. data/templates/generate/deck.js/extensions/menu/deck.menu.js +127 -0
  104. data/templates/generate/deck.js/extensions/menu/deck.menu.scss +29 -0
  105. data/templates/generate/deck.js/extensions/navigation/deck.navigation.css +43 -0
  106. data/templates/generate/deck.js/extensions/navigation/deck.navigation.html +3 -0
  107. data/templates/generate/deck.js/extensions/navigation/deck.navigation.js +83 -0
  108. data/templates/generate/deck.js/extensions/navigation/deck.navigation.scss +56 -0
  109. data/templates/generate/deck.js/extensions/scale/deck.scale.css +16 -0
  110. data/templates/generate/deck.js/extensions/scale/deck.scale.js +155 -0
  111. data/templates/generate/deck.js/extensions/scale/deck.scale.scss +17 -0
  112. data/templates/generate/deck.js/extensions/status/deck.status.css +14 -0
  113. data/templates/generate/deck.js/extensions/status/deck.status.html +6 -0
  114. data/templates/generate/deck.js/extensions/status/deck.status.js +42 -0
  115. data/templates/generate/deck.js/extensions/status/deck.status.scss +16 -0
  116. data/templates/generate/deck.js/support/jquery.1.6.4.min.js +4 -0
  117. data/templates/generate/deck.js/support/modernizr.custom.js +4 -0
  118. data/templates/generate/deck.js/themes/style/neon.css +114 -0
  119. data/templates/generate/deck.js/themes/style/neon.scss +139 -0
  120. data/templates/generate/deck.js/themes/style/swiss.css +75 -0
  121. data/templates/generate/deck.js/themes/style/swiss.scss +91 -0
  122. data/templates/generate/deck.js/themes/style/web-2.0.css +187 -0
  123. data/templates/generate/deck.js/themes/style/web-2.0.scss +214 -0
  124. data/templates/generate/deck.js/themes/transition/fade.css +44 -0
  125. data/templates/generate/deck.js/themes/transition/fade.scss +70 -0
  126. data/templates/generate/deck.js/themes/transition/horizontal-slide.css +79 -0
  127. data/templates/generate/deck.js/themes/transition/horizontal-slide.scss +94 -0
  128. data/templates/generate/deck.js/themes/transition/vertical-slide.css +97 -0
  129. data/templates/generate/deck.js/themes/transition/vertical-slide.scss +116 -0
  130. data/templates/keydown.css.erb +27 -23
  131. metadata +171 -32
  132. data/Gemfile.lock +0 -41
  133. data/templates/generate/css/rocks.css +0 -392
  134. data/templates/generate/css/syntax_highlighting.css +0 -135
  135. data/templates/generate/js/rocks.js +0 -419
  136. data/templates/rocks/index.rhtml +0 -132
  137. data/templates/rocks/slide.rhtml +0 -10
@@ -0,0 +1,6 @@
1
+ %section{:class => container_classnames}
2
+ %div{classnames }
3
+ = html_content
4
+ - if background_attribution_classnames.length > 2
5
+ %div{:class => background_attribution_classnames}
6
+ %a{:href => background_image[:attribution_link], :target => "_blank"}= background_image[:attribution_text]
@@ -1 +1,12 @@
1
- /* Custom CSS for your KeyDown presentation here */
1
+ /* Custom CSS for your KeyDown presentation here */
2
+
3
+ /* Uncomment to turn off deck.js navigation */
4
+ /*.deck-prev-link,*/
5
+ /*.deck-next-link {*/
6
+ /*display: none;*/
7
+ /*}*/
8
+
9
+ /* Uncomment to turn off deck.js status */
10
+ /*.deck-status {*/
11
+ /*display: none;*/
12
+ /*}*/
@@ -0,0 +1,394 @@
1
+ html {
2
+ height: 100%;
3
+ }
4
+
5
+ .deck-container {
6
+ position: relative;
7
+ height: 100%;
8
+ width: 70%;
9
+ margin: 0 auto;
10
+ padding: 0 48px;
11
+ font-size: 16px;
12
+ line-height: 1.25;
13
+ overflow: hidden;
14
+ /* Resets and base styles from HTML5 Boilerplate */
15
+ /* End HTML5 Boilerplate adaptations */
16
+ }
17
+ .js .deck-container {
18
+ visibility: hidden;
19
+ }
20
+ .ready .deck-container {
21
+ visibility: visible;
22
+ }
23
+ .touch .deck-container {
24
+ -webkit-text-size-adjust: none;
25
+ }
26
+ .deck-container div, .deck-container span, .deck-container object, .deck-container iframe,
27
+ .deck-container h1, .deck-container h2, .deck-container h3, .deck-container h4, .deck-container h5, .deck-container h6, .deck-container p, .deck-container blockquote, .deck-container pre,
28
+ .deck-container abbr, .deck-container address, .deck-container cite, .deck-container code, .deck-container del, .deck-container dfn, .deck-container em, .deck-container img, .deck-container ins, .deck-container kbd, .deck-container q, .deck-container samp,
29
+ .deck-container small, .deck-container strong, .deck-container sub, .deck-container sup, .deck-container var, .deck-container b, .deck-container i, .deck-container dl, .deck-container dt, .deck-container dd, .deck-container ol, .deck-container ul, .deck-container li,
30
+ .deck-container fieldset, .deck-container form, .deck-container label, .deck-container legend,
31
+ .deck-container table, .deck-container caption, .deck-container tbody, .deck-container tfoot, .deck-container thead, .deck-container tr, .deck-container th, .deck-container td,
32
+ .deck-container article, .deck-container aside, .deck-container canvas, .deck-container details, .deck-container figcaption, .deck-container figure,
33
+ .deck-container footer, .deck-container header, .deck-container hgroup, .deck-container menu, .deck-container nav, .deck-container section, .deck-container summary,
34
+ .deck-container time, .deck-container mark, .deck-container audio, .deck-container video {
35
+ margin: 0;
36
+ padding: 0;
37
+ border: 0;
38
+ font-size: 100%;
39
+ font: inherit;
40
+ vertical-align: baseline;
41
+ }
42
+ .deck-container article, .deck-container aside, .deck-container details, .deck-container figcaption, .deck-container figure,
43
+ .deck-container footer, .deck-container header, .deck-container hgroup, .deck-container menu, .deck-container nav, .deck-container section {
44
+ display: block;
45
+ }
46
+ .deck-container blockquote, .deck-container q {
47
+ quotes: none;
48
+ }
49
+ .deck-container blockquote:before, .deck-container blockquote:after, .deck-container q:before, .deck-container q:after {
50
+ content: "";
51
+ content: none;
52
+ }
53
+ .deck-container ins {
54
+ background-color: #ff9;
55
+ color: #000;
56
+ text-decoration: none;
57
+ }
58
+ .deck-container mark {
59
+ background-color: #ff9;
60
+ color: #000;
61
+ font-style: italic;
62
+ font-weight: bold;
63
+ }
64
+ .deck-container del {
65
+ text-decoration: line-through;
66
+ }
67
+ .deck-container abbr[title], .deck-container dfn[title] {
68
+ border-bottom: 1px dotted;
69
+ cursor: help;
70
+ }
71
+ .deck-container table {
72
+ border-collapse: collapse;
73
+ border-spacing: 0;
74
+ }
75
+ .deck-container hr {
76
+ display: block;
77
+ height: 1px;
78
+ border: 0;
79
+ border-top: 1px solid #ccc;
80
+ margin: 1em 0;
81
+ padding: 0;
82
+ }
83
+ .deck-container input, .deck-container select {
84
+ vertical-align: middle;
85
+ }
86
+ .deck-container select, .deck-container input, .deck-container textarea, .deck-container button {
87
+ font: 99% sans-serif;
88
+ }
89
+ .deck-container pre, .deck-container code, .deck-container kbd, .deck-container samp {
90
+ font-family: monospace, sans-serif;
91
+ }
92
+ .deck-container a {
93
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
94
+ }
95
+ .deck-container a:hover, .deck-container a:active {
96
+ outline: none;
97
+ }
98
+ .deck-container ul, .deck-container ol {
99
+ margin-left: 2em;
100
+ vertical-align: top;
101
+ }
102
+ .deck-container ol {
103
+ list-style-type: decimal;
104
+ }
105
+ .deck-container nav ul, .deck-container nav li {
106
+ margin: 0;
107
+ list-style: none;
108
+ list-style-image: none;
109
+ }
110
+ .deck-container small {
111
+ font-size: 85%;
112
+ }
113
+ .deck-container strong, .deck-container th {
114
+ font-weight: bold;
115
+ }
116
+ .deck-container td {
117
+ vertical-align: top;
118
+ }
119
+ .deck-container sub, .deck-container sup {
120
+ font-size: 75%;
121
+ line-height: 0;
122
+ position: relative;
123
+ }
124
+ .deck-container sup {
125
+ top: -0.5em;
126
+ }
127
+ .deck-container sub {
128
+ bottom: -0.25em;
129
+ }
130
+ .deck-container textarea {
131
+ overflow: auto;
132
+ }
133
+ .ie6 .deck-container legend, .ie7 .deck-container legend {
134
+ margin-left: -7px;
135
+ }
136
+ .deck-container input[type="radio"] {
137
+ vertical-align: text-bottom;
138
+ }
139
+ .deck-container input[type="checkbox"] {
140
+ vertical-align: bottom;
141
+ }
142
+ .deck-container .ie7 input[type="checkbox"] {
143
+ vertical-align: baseline;
144
+ }
145
+ .deck-container .ie6 input {
146
+ vertical-align: text-bottom;
147
+ }
148
+ .deck-container label, .deck-container input[type="button"], .deck-container input[type="submit"], .deck-container input[type="image"], .deck-container button {
149
+ cursor: pointer;
150
+ }
151
+ .deck-container button, .deck-container input, .deck-container select, .deck-container textarea {
152
+ margin: 0;
153
+ }
154
+ .deck-container input:invalid, .deck-container textarea:invalid {
155
+ border-radius: 1px;
156
+ -moz-box-shadow: 0px 0px 5px red;
157
+ -webkit-box-shadow: 0px 0px 5px red;
158
+ box-shadow: 0px 0px 5px red;
159
+ }
160
+ .deck-container input:invalid .no-boxshadow, .deck-container textarea:invalid .no-boxshadow {
161
+ background-color: #f0dddd;
162
+ }
163
+ .deck-container button {
164
+ width: auto;
165
+ overflow: visible;
166
+ }
167
+ .ie7 .deck-container img {
168
+ -ms-interpolation-mode: bicubic;
169
+ }
170
+ .deck-container, .deck-container select, .deck-container input, .deck-container textarea {
171
+ color: #444;
172
+ }
173
+ .deck-container a {
174
+ color: #607890;
175
+ }
176
+ .deck-container a:hover, .deck-container a:focus {
177
+ color: #036;
178
+ }
179
+ .deck-container a:link {
180
+ -webkit-tap-highlight-color: #fff;
181
+ }
182
+ .deck-container h1 {
183
+ font-size: 4.5em;
184
+ font-weight: bold;
185
+ text-align: center;
186
+ padding-top: 1em;
187
+ }
188
+ .csstransforms .deck-container h1 {
189
+ padding: 0 48px;
190
+ position: absolute;
191
+ left: 0;
192
+ right: 0;
193
+ top: 50%;
194
+ -webkit-transform: translate3d(0, -50%, 0);
195
+ -moz-transform: translate(0, -50%);
196
+ -ms-transform: translate(0, -50%);
197
+ -o-transform: translate(0, -50%);
198
+ transform: translate3d(0, -50%, 0);
199
+ }
200
+ .deck-container h2 {
201
+ font-size: 2.25em;
202
+ font-weight: bold;
203
+ padding-top: .5em;
204
+ margin: 0 0 .66666em 0;
205
+ border-bottom: 3px solid #888;
206
+ }
207
+ .deck-container h3 {
208
+ font-size: 1.4375em;
209
+ font-weight: bold;
210
+ margin-bottom: .30435em;
211
+ }
212
+ .deck-container h4 {
213
+ font-size: 1.25em;
214
+ font-weight: bold;
215
+ margin-bottom: .25em;
216
+ }
217
+ .deck-container h5 {
218
+ font-size: 1.125em;
219
+ font-weight: bold;
220
+ margin-bottom: .2222em;
221
+ }
222
+ .deck-container h6 {
223
+ font-size: 1em;
224
+ font-weight: bold;
225
+ }
226
+ .deck-container img, .deck-container iframe, .deck-container video {
227
+ display: block;
228
+ max-width: 100%;
229
+ }
230
+ .deck-container video, .deck-container iframe, .deck-container img {
231
+ display: block;
232
+ margin: 0 auto;
233
+ }
234
+ .deck-container p, .deck-container blockquote, .deck-container iframe, .deck-container img, .deck-container ul, .deck-container ol, .deck-container pre, .deck-container video {
235
+ margin-bottom: 1em;
236
+ }
237
+ .deck-container pre {
238
+ white-space: pre;
239
+ white-space: pre-wrap;
240
+ word-wrap: break-word;
241
+ padding: 1em;
242
+ border: 1px solid #888;
243
+ }
244
+ .deck-container em {
245
+ font-style: italic;
246
+ }
247
+ .deck-container li {
248
+ padding: .25em 0;
249
+ vertical-align: middle;
250
+ }
251
+ .deck-container.deck-loading {
252
+ display: none;
253
+ }
254
+
255
+ .slide {
256
+ width: auto;
257
+ min-height: 100%;
258
+ position: relative;
259
+ }
260
+
261
+ .deck-before, .deck-previous, .deck-next, .deck-after {
262
+ position: absolute;
263
+ left: -999em;
264
+ top: -999em;
265
+ }
266
+
267
+ .deck-current {
268
+ z-index: 2;
269
+ }
270
+
271
+ .slide .slide {
272
+ visibility: hidden;
273
+ position: static;
274
+ min-height: 0;
275
+ }
276
+
277
+ .deck-child-current {
278
+ position: static;
279
+ z-index: 2;
280
+ }
281
+ .deck-child-current .slide {
282
+ visibility: hidden;
283
+ }
284
+ .deck-child-current .deck-previous, .deck-child-current .deck-before, .deck-child-current .deck-current {
285
+ visibility: visible;
286
+ }
287
+
288
+ body.deck-container {
289
+ overflow: visible;
290
+ }
291
+
292
+ @media all and (orientation:portrait) {}
293
+ @media all and (orientation:landscape) {}
294
+ @media screen and (max-device-width: 480px) {
295
+ /* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
296
+ }
297
+
298
+ @media print {
299
+ * {
300
+ background: transparent !important;
301
+ color: black !important;
302
+ text-shadow: none !important;
303
+ filter: none !important;
304
+ -ms-filter: none !important;
305
+ -webkit-box-reflect: none !important;
306
+ -moz-box-reflect: none !important;
307
+ -webkit-box-shadow: none !important;
308
+ -moz-box-shadow: none !important;
309
+ box-shadow: none !important;
310
+ }
311
+ * :before, * :after {
312
+ display: none !important;
313
+ }
314
+
315
+ a, a:visited {
316
+ color: #444 !important;
317
+ text-decoration: underline;
318
+ }
319
+
320
+ a[href]:after {
321
+ content: " (" attr(href) ")";
322
+ }
323
+
324
+ abbr[title]:after {
325
+ content: " (" attr(title) ")";
326
+ }
327
+
328
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
329
+ content: "";
330
+ }
331
+
332
+ pre, blockquote {
333
+ border: 1px solid #999;
334
+ page-break-inside: avoid;
335
+ }
336
+
337
+ thead {
338
+ display: table-header-group;
339
+ }
340
+
341
+ tr, img {
342
+ page-break-inside: avoid;
343
+ }
344
+
345
+ @page {
346
+ margin: 0.5cm;
347
+ }
348
+
349
+ p, h2, h3 {
350
+ orphans: 3;
351
+ widows: 3;
352
+ }
353
+
354
+ h2, h3 {
355
+ page-break-after: avoid;
356
+ }
357
+
358
+ .slide {
359
+ position: static !important;
360
+ visibility: visible !important;
361
+ display: block !important;
362
+ -webkit-transform: none !important;
363
+ -moz-transform: none !important;
364
+ -o-transform: none !important;
365
+ -ms-transform: none !important;
366
+ transform: none !important;
367
+ opacity:1 !important;
368
+ }
369
+
370
+ h1 {
371
+ -webkit-transform: none !important;
372
+ -moz-transform: none !important;
373
+ -o-transform: none !important;
374
+ -ms-transform: none !important;
375
+ transform: none !important;
376
+ padding: 0 !important;
377
+ position: static !important;
378
+ }
379
+
380
+ .deck-container > .slide {
381
+ page-break-after: always;
382
+ }
383
+
384
+ .deck-container {
385
+ width: 100% !important;
386
+ height: auto !important;
387
+ padding: 0 !important;
388
+ display: block !important;
389
+ }
390
+
391
+ script {
392
+ display: none;
393
+ }
394
+ }
@@ -0,0 +1,461 @@
1
+ /*!
2
+ Deck JS - deck.core
3
+ Copyright (c) 2011 Caleb Troughton
4
+ Dual licensed under the MIT license and GPL license.
5
+ https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
6
+ https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
7
+ */
8
+
9
+ /*
10
+ The deck.core module provides all the basic functionality for creating and
11
+ moving through a deck. It does so by applying classes to indicate the state of
12
+ the deck and its slides, allowing CSS to take care of the visual representation
13
+ of each state. It also provides methods for navigating the deck and inspecting
14
+ its state, as well as basic key bindings for going to the next and previous
15
+ slides. More functionality is provided by wholly separate extension modules
16
+ that use the API provided by core.
17
+ */
18
+ (function($, deck, document, undefined) {
19
+ var slides, // Array of all the uh, slides...
20
+ current, // Array index of the current slide
21
+
22
+ events = {
23
+ /*
24
+ This event fires whenever the current slide changes, whether by way of
25
+ next, prev, or go. The callback function is passed two parameters, from
26
+ and to, equal to the indices of the old slide and the new slide
27
+ respectively.
28
+
29
+ $(document).bind('deck.change', function(event, from, to) {
30
+ alert('Moving from slide ' + from + ' to ' + to);
31
+ });
32
+ */
33
+ change: 'deck.change',
34
+
35
+ /*
36
+ This event fires at the end of deck initialization. Extensions should
37
+ implement any code that relies on user extensible options (key bindings,
38
+ element selectors, classes) within a handler for this event. Native
39
+ events associated with Deck JS should be scoped under a .deck event
40
+ namespace, as with the example below:
41
+
42
+ var $d = $(document);
43
+ $.deck.defaults.keys.myExtensionKeycode = 70; // 'h'
44
+ $d.bind('deck.init', function() {
45
+ $d.bind('keydown.deck', function(event) {
46
+ if (event.which === $.deck.getOptions().keys.myExtensionKeycode) {
47
+ // Rock out
48
+ }
49
+ });
50
+ });
51
+ */
52
+ initialize: 'deck.init'
53
+ },
54
+
55
+ options = {},
56
+ $d = $(document),
57
+
58
+ /*
59
+ Internal function. Updates slide and container classes based on which
60
+ slide is the current slide.
61
+ */
62
+ updateStates = function() {
63
+ var oc = options.classes,
64
+ osc = options.selectors.container,
65
+ $container = $(osc),
66
+ old = $container.data('onSlide'),
67
+ $all = $();
68
+
69
+ // Container state
70
+ $container.removeClass(oc.onPrefix + old)
71
+ .addClass(oc.onPrefix + current)
72
+ .data('onSlide', current);
73
+
74
+ // Remove and re-add child-current classes for nesting
75
+ $('.' + oc.current).parentsUntil(osc).removeClass(oc.childCurrent);
76
+ slides[current].parentsUntil(osc).addClass(oc.childCurrent);
77
+
78
+ // Remove previous states
79
+ $.each(slides, function(i, el) {
80
+ $all = $all.add(el);
81
+ });
82
+ $all.removeClass([
83
+ oc.before,
84
+ oc.previous,
85
+ oc.current,
86
+ oc.next,
87
+ oc.after
88
+ ].join(" "));
89
+
90
+ // Add new states back in
91
+ slides[current].addClass(oc.current);
92
+ if (current > 0) {
93
+ slides[current-1].addClass(oc.previous);
94
+ }
95
+ if (current + 1 < slides.length) {
96
+ slides[current+1].addClass(oc.next);
97
+ }
98
+ if (current > 1) {
99
+ $.each(slides.slice(0, current - 1), function(i, el) {
100
+ el.addClass(oc.before);
101
+ });
102
+ }
103
+ if (current + 2 < slides.length) {
104
+ $.each(slides.slice(current+2), function(i, el) {
105
+ el.addClass(oc.after);
106
+ });
107
+ }
108
+ },
109
+
110
+ /* Methods exposed in the jQuery.deck namespace */
111
+ methods = {
112
+
113
+ /*
114
+ jQuery.deck(selector, options)
115
+
116
+ selector: string | jQuery | array
117
+ options: object, optional
118
+
119
+ Initializes the deck, using each element matched by selector as a slide.
120
+ May also be passed an array of string selectors or jQuery objects, in
121
+ which case each selector in the array is considered a slide. The second
122
+ parameter is an optional options object which will extend the default
123
+ values.
124
+
125
+ $.deck('.slide');
126
+
127
+ or
128
+
129
+ $.deck([
130
+ '#first-slide',
131
+ '#second-slide',
132
+ '#etc'
133
+ ]);
134
+ */
135
+ init: function(elements, opts) {
136
+ var startTouch,
137
+ $c,
138
+ tolerance,
139
+ esp = function(e) {
140
+ e.stopPropagation();
141
+ };
142
+
143
+ options = $.extend(true, {}, $[deck].defaults, opts);
144
+ slides = [];
145
+ current = 0;
146
+ $c = $[deck]('getContainer');
147
+ tolerance = options.touch.swipeTolerance;
148
+
149
+ // Hide the deck while states are being applied to kill transitions
150
+ $c.addClass(options.classes.loading);
151
+
152
+ // Fill slides array depending on parameter type
153
+ if ($.isArray(elements)) {
154
+ $.each(elements, function(i, e) {
155
+ slides.push($(e));
156
+ });
157
+ }
158
+ else {
159
+ $(elements).each(function(i, e) {
160
+ slides.push($(e));
161
+ });
162
+ }
163
+
164
+ /* Remove any previous bindings, and rebind key events */
165
+ $d.unbind('keydown.deck').bind('keydown.deck', function(e) {
166
+ if (e.which === options.keys.next || $.inArray(e.which, options.keys.next) > -1) {
167
+ methods.next();
168
+ e.preventDefault();
169
+ }
170
+ else if (e.which === options.keys.previous || $.inArray(e.which, options.keys.previous) > -1) {
171
+ methods.prev();
172
+ e.preventDefault();
173
+ }
174
+ });
175
+
176
+ /* Bind touch events for swiping between slides on touch devices */
177
+ $c.unbind('touchstart.deck').bind('touchstart.deck', function(e) {
178
+ if (!startTouch) {
179
+ startTouch = $.extend({}, e.originalEvent.targetTouches[0]);
180
+ }
181
+ })
182
+ .unbind('touchmove.deck').bind('touchmove.deck', function(e) {
183
+ $.each(e.originalEvent.changedTouches, function(i, t) {
184
+ if (startTouch && t.identifier === startTouch.identifier) {
185
+ if (t.screenX - startTouch.screenX > tolerance || t.screenY - startTouch.screenY > tolerance) {
186
+ $[deck]('prev');
187
+ startTouch = undefined;
188
+ }
189
+ else if (t.screenX - startTouch.screenX < -1 * tolerance || t.screenY - startTouch.screenY < -1 * tolerance) {
190
+ $[deck]('next');
191
+ startTouch = undefined;
192
+ }
193
+ return false;
194
+ }
195
+ });
196
+ e.preventDefault();
197
+ })
198
+ .unbind('touchend.deck').bind('touchend.deck', function(t) {
199
+ $.each(t.originalEvent.changedTouches, function(i, t) {
200
+ if (startTouch && t.identifier === startTouch.identifier) {
201
+ startTouch = undefined;
202
+ }
203
+ });
204
+ })
205
+ .scrollLeft(0).scrollTop(0)
206
+ /* Stop propagation of key events within editable elements of slides */
207
+ .undelegate('input, textarea, select, button, meter, progress, [contentEditable]', 'keydown', esp)
208
+ .delegate('input, textarea, select, button, meter, progress, [contentEditable]', 'keydown', esp);
209
+
210
+ /*
211
+ Kick iframe videos, which dont like to redraw w/ transforms.
212
+ Remove this if Webkit ever fixes it.
213
+ */
214
+ $.each(slides, function(i, $el) {
215
+ $el.unbind('webkitTransitionEnd.deck').bind('webkitTransitionEnd.deck',
216
+ function(event) {
217
+ if ($el.hasClass($[deck]('getOptions').classes.current)) {
218
+ var embeds = $(this).find('iframe').css('opacity', 0);
219
+ window.setTimeout(function() {
220
+ embeds.css('opacity', 1);
221
+ }, 100);
222
+ }
223
+ });
224
+ });
225
+
226
+ updateStates();
227
+
228
+ // Show deck again now that slides are in place
229
+ $c.removeClass(options.classes.loading);
230
+ $d.trigger(events.initialize);
231
+ },
232
+
233
+ /*
234
+ jQuery.deck('go', index)
235
+
236
+ index: integer
237
+
238
+ Moves to the slide at the specified index. Index is 0-based, so
239
+ $.deck('go', 0); will move to the first slide. If index is out of bounds
240
+ or not a number the call is ignored.
241
+ */
242
+ go: function(index) {
243
+ if (typeof index != 'number' || index < 0 || index >= slides.length) return;
244
+
245
+ $d.trigger(events.change, [current, index]);
246
+ current = index;
247
+ updateStates();
248
+ },
249
+
250
+ /*
251
+ jQuery.deck('next')
252
+
253
+ Moves to the next slide. If the last slide is already active, the call
254
+ is ignored.
255
+ */
256
+ next: function() {
257
+ methods.go(current+1);
258
+ },
259
+
260
+ /*
261
+ jQuery.deck('prev')
262
+
263
+ Moves to the previous slide. If the first slide is already active, the
264
+ call is ignored.
265
+ */
266
+ prev: function() {
267
+ methods.go(current-1);
268
+ },
269
+
270
+ /*
271
+ jQuery.deck('getSlide', index)
272
+
273
+ index: integer, optional
274
+
275
+ Returns a jQuery object containing the slide at index. If index is not
276
+ specified, the current slide is returned.
277
+ */
278
+ getSlide: function(index) {
279
+ var i = typeof index !== 'undefined' ? index : current;
280
+ if (typeof i != 'number' || i < 0 || i >= slides.length) return null;
281
+ return slides[i];
282
+ },
283
+
284
+ /*
285
+ jQuery.deck('getSlides')
286
+
287
+ Returns all slides as an array of jQuery objects.
288
+ */
289
+ getSlides: function() {
290
+ return slides;
291
+ },
292
+
293
+ /*
294
+ jQuery.deck('getContainer')
295
+
296
+ Returns a jQuery object containing the deck container as defined by the
297
+ container option.
298
+ */
299
+ getContainer: function() {
300
+ return $(options.selectors.container);
301
+ },
302
+
303
+ /*
304
+ jQuery.deck('getOptions')
305
+
306
+ Returns the options object for the deck, including any overrides that
307
+ were defined at initialization.
308
+ */
309
+ getOptions: function() {
310
+ return options;
311
+ },
312
+
313
+ /*
314
+ jQuery.deck('extend', name, method)
315
+
316
+ name: string
317
+ method: function
318
+
319
+ Adds method to the deck namespace with the key of name. This doesn’t
320
+ give access to any private member data — public methods must still be
321
+ used within method — but lets extension authors piggyback on the deck
322
+ namespace rather than pollute jQuery.
323
+
324
+ $.deck('extend', 'alert', function(msg) {
325
+ alert(msg);
326
+ });
327
+
328
+ // Alerts 'boom'
329
+ $.deck('alert', 'boom');
330
+ */
331
+ extend: function(name, method) {
332
+ methods[name] = method;
333
+ }
334
+ };
335
+
336
+ /* jQuery extension */
337
+ $[deck] = function(method, arg) {
338
+ if (methods[method]) {
339
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
340
+ }
341
+ else {
342
+ return methods.init(method, arg);
343
+ }
344
+ };
345
+
346
+ /*
347
+ The default settings object for a deck. All deck extensions should extend
348
+ this object to add defaults for any of their options.
349
+
350
+ options.classes.after
351
+ This class is added to all slides that appear after the 'next' slide.
352
+
353
+ options.classes.before
354
+ This class is added to all slides that appear before the 'previous'
355
+ slide.
356
+
357
+ options.classes.childCurrent
358
+ This class is added to all elements in the DOM tree between the
359
+ 'current' slide and the deck container. For standard slides, this is
360
+ mostly seen and used for nested slides.
361
+
362
+ options.classes.current
363
+ This class is added to the current slide.
364
+
365
+ options.classes.loading
366
+ This class is applied to the deck container during loading phases and is
367
+ primarily used as a way to short circuit transitions between states
368
+ where such transitions are distracting or unwanted. For example, this
369
+ class is applied during deck initialization and then removed to prevent
370
+ all the slides from appearing stacked and transitioning into place
371
+ on load.
372
+
373
+ options.classes.next
374
+ This class is added to the slide immediately following the 'current'
375
+ slide.
376
+
377
+ options.classes.onPrefix
378
+ This prefix, concatenated with the current slide index, is added to the
379
+ deck container as you change slides.
380
+
381
+ options.classes.previous
382
+ This class is added to the slide immediately preceding the 'current'
383
+ slide.
384
+
385
+ options.selectors.container
386
+ Elements matched by this CSS selector will be considered the deck
387
+ container. The deck container is used to scope certain states of the
388
+ deck, as with the onPrefix option, or with extensions such as deck.goto
389
+ and deck.menu.
390
+
391
+ options.keys.next
392
+ The numeric keycode used to go to the next slide.
393
+
394
+ options.keys.previous
395
+ The numeric keycode used to go to the previous slide.
396
+
397
+ options.touch.swipeTolerance
398
+ The number of pixels the users finger must travel to produce a swipe
399
+ gesture.
400
+ */
401
+ $[deck].defaults = {
402
+ classes: {
403
+ after: 'deck-after',
404
+ before: 'deck-before',
405
+ childCurrent: 'deck-child-current',
406
+ current: 'deck-current',
407
+ loading: 'deck-loading',
408
+ next: 'deck-next',
409
+ onPrefix: 'on-slide-',
410
+ previous: 'deck-previous'
411
+ },
412
+
413
+ selectors: {
414
+ container: '.deck-container'
415
+ },
416
+
417
+ keys: {
418
+ // enter, space, page down, right arrow, down arrow,
419
+ next: [13, 32, 34, 39, 40],
420
+ // backspace, page up, left arrow, up arrow
421
+ previous: [8, 33, 37, 38]
422
+ },
423
+
424
+ touch: {
425
+ swipeTolerance: 60
426
+ }
427
+ };
428
+
429
+ $d.ready(function() {
430
+ $('html').addClass('ready');
431
+ });
432
+
433
+ /*
434
+ FF + Transforms + Flash video don't get along...
435
+ Firefox will reload and start playing certain videos after a
436
+ transform. Blanking the src when a previously shown slide goes out
437
+ of view prevents this.
438
+ */
439
+ $d.bind('deck.change', function(e, from, to) {
440
+ var oldFrames = $[deck]('getSlide', from).find('iframe'),
441
+ newFrames = $[deck]('getSlide', to).find('iframe');
442
+
443
+ oldFrames.each(function() {
444
+ var $this = $(this),
445
+ curSrc = $this.attr('src');
446
+
447
+ if(curSrc) {
448
+ $this.data('deck-src', curSrc).attr('src', '');
449
+ }
450
+ });
451
+
452
+ newFrames.each(function() {
453
+ var $this = $(this),
454
+ originalSrc = $this.data('deck-src');
455
+
456
+ if (originalSrc) {
457
+ $this.attr('src', originalSrc);
458
+ }
459
+ });
460
+ });
461
+ })(jQuery, 'deck', document);