deckr 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. data/Gemfile +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +29 -0
  4. data/Rakefile +9 -0
  5. data/bin/deckr +3 -0
  6. data/lib/deckr.rb +7 -0
  7. data/lib/deckr/cli.rb +22 -0
  8. data/lib/deckr/deck.rb +64 -0
  9. data/lib/deckr/package.rb +22 -0
  10. data/lib/deckr/resource.rb +37 -0
  11. data/lib/deckr/templates/Gemfile +5 -0
  12. data/lib/deckr/templates/config.ru +12 -0
  13. data/lib/deckr/templates/deck/GPL-license.txt +278 -0
  14. data/lib/deckr/templates/deck/MIT-license.txt +21 -0
  15. data/lib/deckr/templates/deck/README.md +64 -0
  16. data/lib/deckr/templates/deck/boilerplate.html +96 -0
  17. data/lib/deckr/templates/deck/core/deck.core.css +407 -0
  18. data/lib/deckr/templates/deck/core/deck.core.js +498 -0
  19. data/lib/deckr/templates/deck/core/deck.core.scss +450 -0
  20. data/lib/deckr/templates/deck/extensions/goto/deck.goto.css +41 -0
  21. data/lib/deckr/templates/deck/extensions/goto/deck.goto.html +7 -0
  22. data/lib/deckr/templates/deck/extensions/goto/deck.goto.js +170 -0
  23. data/lib/deckr/templates/deck/extensions/goto/deck.goto.scss +46 -0
  24. data/lib/deckr/templates/deck/extensions/hash/deck.hash.css +13 -0
  25. data/lib/deckr/templates/deck/extensions/hash/deck.hash.html +2 -0
  26. data/lib/deckr/templates/deck/extensions/hash/deck.hash.js +142 -0
  27. data/lib/deckr/templates/deck/extensions/hash/deck.hash.scss +15 -0
  28. data/lib/deckr/templates/deck/extensions/menu/deck.menu.css +47 -0
  29. data/lib/deckr/templates/deck/extensions/menu/deck.menu.js +187 -0
  30. data/lib/deckr/templates/deck/extensions/menu/deck.menu.scss +58 -0
  31. data/lib/deckr/templates/deck/extensions/navigation/deck.navigation.css +43 -0
  32. data/lib/deckr/templates/deck/extensions/navigation/deck.navigation.html +3 -0
  33. data/lib/deckr/templates/deck/extensions/navigation/deck.navigation.js +92 -0
  34. data/lib/deckr/templates/deck/extensions/navigation/deck.navigation.scss +56 -0
  35. data/lib/deckr/templates/deck/extensions/scale/deck.scale.css +28 -0
  36. data/lib/deckr/templates/deck/extensions/scale/deck.scale.js +170 -0
  37. data/lib/deckr/templates/deck/extensions/scale/deck.scale.scss +31 -0
  38. data/lib/deckr/templates/deck/extensions/status/deck.status.css +18 -0
  39. data/lib/deckr/templates/deck/extensions/status/deck.status.html +6 -0
  40. data/lib/deckr/templates/deck/extensions/status/deck.status.js +95 -0
  41. data/lib/deckr/templates/deck/extensions/status/deck.status.scss +22 -0
  42. data/lib/deckr/templates/deck/introduction/index.html +215 -0
  43. data/lib/deckr/templates/deck/jquery-1.7.2.min.js +4 -0
  44. data/lib/deckr/templates/deck/modernizr.custom.js +4 -0
  45. data/lib/deckr/templates/deck/test/fixtures/complex.html +24 -0
  46. data/lib/deckr/templates/deck/test/fixtures/empty.html +19 -0
  47. data/lib/deckr/templates/deck/test/fixtures/iframe_simple.html +10 -0
  48. data/lib/deckr/templates/deck/test/fixtures/iframes.html +32 -0
  49. data/lib/deckr/templates/deck/test/fixtures/nesteds.html +36 -0
  50. data/lib/deckr/templates/deck/test/fixtures/standard.html +42 -0
  51. data/lib/deckr/templates/deck/test/index.html +39 -0
  52. data/lib/deckr/templates/deck/test/lib/jasmine-html.js +190 -0
  53. data/lib/deckr/templates/deck/test/lib/jasmine-jquery.js +288 -0
  54. data/lib/deckr/templates/deck/test/lib/jasmine.css +166 -0
  55. data/lib/deckr/templates/deck/test/lib/jasmine.js +2477 -0
  56. data/lib/deckr/templates/deck/test/settings.js +3 -0
  57. data/lib/deckr/templates/deck/test/spec.core.js +436 -0
  58. data/lib/deckr/templates/deck/test/spec.goto.js +142 -0
  59. data/lib/deckr/templates/deck/test/spec.hash.js +81 -0
  60. data/lib/deckr/templates/deck/test/spec.menu.js +66 -0
  61. data/lib/deckr/templates/deck/test/spec.navigation.js +51 -0
  62. data/lib/deckr/templates/deck/test/spec.scale.js +57 -0
  63. data/lib/deckr/templates/deck/test/spec.status.js +58 -0
  64. data/lib/deckr/templates/deck/themes/style/neon.css +123 -0
  65. data/lib/deckr/templates/deck/themes/style/neon.scss +155 -0
  66. data/lib/deckr/templates/deck/themes/style/swiss.css +84 -0
  67. data/lib/deckr/templates/deck/themes/style/swiss.scss +107 -0
  68. data/lib/deckr/templates/deck/themes/style/web-2.0.css +214 -0
  69. data/lib/deckr/templates/deck/themes/style/web-2.0.scss +250 -0
  70. data/lib/deckr/templates/deck/themes/transition/fade.css +43 -0
  71. data/lib/deckr/templates/deck/themes/transition/fade.scss +69 -0
  72. data/lib/deckr/templates/deck/themes/transition/horizontal-slide.css +76 -0
  73. data/lib/deckr/templates/deck/themes/transition/horizontal-slide.scss +90 -0
  74. data/lib/deckr/templates/deck/themes/transition/vertical-slide.css +94 -0
  75. data/lib/deckr/templates/deck/themes/transition/vertical-slide.scss +112 -0
  76. data/lib/deckr/templates/views/index.slim +13 -0
  77. data/lib/deckr/templates/views/layout.slim +48 -0
  78. data/lib/deckr/version.rb +3 -0
  79. data/lib/rack/deckr.rb +31 -0
  80. data/lib/sinatra/deckr.rb +17 -0
  81. data/spec/deck_spec.rb +118 -0
  82. data/spec/fixtures/foo.txt +1 -0
  83. data/spec/fixtures/foo/bar.txt +1 -0
  84. data/spec/package_spec.rb +45 -0
  85. data/spec/rack/deckr_spec.rb +38 -0
  86. data/spec/resource_spec.rb +62 -0
  87. data/spec/sinatra/deckr_spec.rb +32 -0
  88. data/spec/spec_helper.rb +27 -0
  89. metadata +161 -0
@@ -0,0 +1,170 @@
1
+ /*!
2
+ Deck JS - deck.scale
3
+ Copyright (c) 2011-2012 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
+ This module adds automatic scaling to the deck. Slides are scaled down
11
+ using CSS transforms to fit within the deck container. If the container is
12
+ big enough to hold the slides without scaling, no scaling occurs. The user
13
+ can disable and enable scaling with a keyboard shortcut.
14
+
15
+ Note: CSS transforms may make Flash videos render incorrectly. Presenters
16
+ that need to use video may want to disable scaling to play them. HTML5 video
17
+ works fine.
18
+ */
19
+ (function($, deck, window, undefined) {
20
+ var $d = $(document),
21
+ $w = $(window),
22
+ baseHeight, // Value to scale against
23
+ timer, // Timeout id for debouncing
24
+ rootSlides,
25
+
26
+ /*
27
+ Internal function to do all the dirty work of scaling the slides.
28
+ */
29
+ scaleDeck = function() {
30
+ var opts = $[deck]('getOptions'),
31
+ obh = opts.baseHeight,
32
+ $container = $[deck]('getContainer'),
33
+ baseHeight = obh ? obh : $container.height();
34
+
35
+ // Scale each slide down if necessary (but don't scale up)
36
+ $.each(rootSlides, function(i, $slide) {
37
+ var slideHeight = $slide.innerHeight(),
38
+ $scaler = $slide.find('.' + opts.classes.scaleSlideWrapper),
39
+ scale = $container.hasClass(opts.classes.scale) ?
40
+ baseHeight / slideHeight :
41
+ 1;
42
+
43
+ $.each('Webkit Moz O ms Khtml'.split(' '), function(i, prefix) {
44
+ if (scale === 1) {
45
+ $scaler.css(prefix + 'Transform', '');
46
+ }
47
+ else {
48
+ $scaler.css(prefix + 'Transform', 'scale(' + scale + ')');
49
+ }
50
+ });
51
+ });
52
+ }
53
+
54
+ /*
55
+ Extends defaults/options.
56
+
57
+ options.classes.scale
58
+ This class is added to the deck container when scaling is enabled.
59
+ It is enabled by default when the module is included.
60
+
61
+ options.classes.scaleSlideWrapper
62
+ Scaling is done using a wrapper around the contents of each slide. This
63
+ class is applied to that wrapper.
64
+
65
+ options.keys.scale
66
+ The numeric keycode used to toggle enabling and disabling scaling.
67
+
68
+ options.baseHeight
69
+ When baseHeight is falsy, as it is by default, the deck is scaled in
70
+ proportion to the height of the deck container. You may instead specify
71
+ a height as a number of px, and slides will be scaled against this
72
+ height regardless of the container size.
73
+
74
+ options.scaleDebounce
75
+ Scaling on the browser resize event is debounced. This number is the
76
+ threshold in milliseconds. You can learn more about debouncing here:
77
+ http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
78
+
79
+ */
80
+ $.extend(true, $[deck].defaults, {
81
+ classes: {
82
+ scale: 'deck-scale',
83
+ scaleSlideWrapper: 'deck-slide-scaler'
84
+ },
85
+
86
+ keys: {
87
+ scale: 83 // s
88
+ },
89
+
90
+ baseHeight: null,
91
+ scaleDebounce: 200
92
+ });
93
+
94
+ /*
95
+ jQuery.deck('disableScale')
96
+
97
+ Disables scaling and removes the scale class from the deck container.
98
+ */
99
+ $[deck]('extend', 'disableScale', function() {
100
+ $[deck]('getContainer').removeClass($[deck]('getOptions').classes.scale);
101
+ scaleDeck();
102
+ });
103
+
104
+ /*
105
+ jQuery.deck('enableScale')
106
+
107
+ Enables scaling and adds the scale class to the deck container.
108
+ */
109
+ $[deck]('extend', 'enableScale', function() {
110
+ $[deck]('getContainer').addClass($[deck]('getOptions').classes.scale);
111
+ scaleDeck();
112
+ });
113
+
114
+ /*
115
+ jQuery.deck('toggleScale')
116
+
117
+ Toggles between enabling and disabling scaling.
118
+ */
119
+ $[deck]('extend', 'toggleScale', function() {
120
+ var $c = $[deck]('getContainer');
121
+ $[deck]($c.hasClass($[deck]('getOptions').classes.scale) ?
122
+ 'disableScale' : 'enableScale');
123
+ });
124
+
125
+ $d.bind('deck.init', function() {
126
+ var opts = $[deck]('getOptions'),
127
+ slideTest = $.map([
128
+ opts.classes.before,
129
+ opts.classes.previous,
130
+ opts.classes.current,
131
+ opts.classes.next,
132
+ opts.classes.after
133
+ ], function(el, i) {
134
+ return '.' + el;
135
+ }).join(', ');
136
+
137
+ // Build top level slides array
138
+ rootSlides = [];
139
+ $.each($[deck]('getSlides'), function(i, $el) {
140
+ if (!$el.parentsUntil(opts.selectors.container, slideTest).length) {
141
+ rootSlides.push($el);
142
+ }
143
+ });
144
+
145
+ // Use a wrapper on each slide to handle content scaling
146
+ $.each(rootSlides, function(i, $slide) {
147
+ $slide.children().wrapAll('<div class="' + opts.classes.scaleSlideWrapper + '"/>');
148
+ });
149
+
150
+ // Debounce the resize scaling
151
+ $w.unbind('resize.deckscale').bind('resize.deckscale', function() {
152
+ window.clearTimeout(timer);
153
+ timer = window.setTimeout(scaleDeck, opts.scaleDebounce);
154
+ })
155
+ // Scale once on load, in case images or something change layout
156
+ .unbind('load.deckscale').bind('load.deckscale', scaleDeck);
157
+
158
+ // Bind key events
159
+ $d.unbind('keydown.deckscale').bind('keydown.deckscale', function(e) {
160
+ if (e.which === opts.keys.scale || $.inArray(e.which, opts.keys.scale) > -1) {
161
+ $[deck]('toggleScale');
162
+ e.preventDefault();
163
+ }
164
+ });
165
+
166
+ // Enable scale on init
167
+ $[deck]('enableScale');
168
+ });
169
+ })(jQuery, 'deck', this);
170
+
@@ -0,0 +1,31 @@
1
+ /* Remove this line if you are embedding deck.js in a page and
2
+ using the scale extension. */
3
+ .csstransforms {
4
+ overflow:hidden;
5
+ }
6
+
7
+ .csstransforms .deck-container.deck-scale:not(.deck-menu) {
8
+ > .slide {
9
+ -webkit-box-sizing: padding-box;
10
+ -moz-box-sizing: padding-box;
11
+ box-sizing: padding-box;
12
+ width:100%;
13
+ padding-bottom:20px;
14
+
15
+ > .deck-slide-scaler {
16
+ -webkit-transform-origin: 50% 0;
17
+ -moz-transform-origin: 50% 0;
18
+ -o-transform-origin: 50% 0;
19
+ -ms-transform-origin: 50% 0;
20
+ transform-origin: 50% 0;
21
+ }
22
+ }
23
+ }
24
+
25
+ .csstransforms .deck-container.deck-menu .deck-slide-scaler {
26
+ -webkit-transform:none !important;
27
+ -moz-transform:none !important;
28
+ -o-transform:none !important;
29
+ -ms-transform:none !important;
30
+ transform:none !important;
31
+ }
@@ -0,0 +1,18 @@
1
+ .deck-container .deck-status {
2
+ position: absolute;
3
+ bottom: 10px;
4
+ right: 5px;
5
+ color: #888;
6
+ z-index: 3;
7
+ margin: 0;
8
+ }
9
+
10
+ body.deck-container .deck-status {
11
+ position: fixed;
12
+ }
13
+
14
+ @media print {
15
+ .deck-status {
16
+ display: none;
17
+ }
18
+ }
@@ -0,0 +1,6 @@
1
+ <!-- Place the following snippet at the bottom of the deck container. -->
2
+ <p class="deck-status">
3
+ <span class="deck-status-current"></span>
4
+ /
5
+ <span class="deck-status-total"></span>
6
+ </p>
@@ -0,0 +1,95 @@
1
+ /*!
2
+ Deck JS - deck.status
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
+ This module adds a (current)/(total) style status indicator to the deck.
11
+ */
12
+ (function($, deck, undefined) {
13
+ var $d = $(document),
14
+
15
+ updateCurrent = function(e, from, to) {
16
+ var opts = $[deck]('getOptions');
17
+
18
+ $(opts.selectors.statusCurrent).text(opts.countNested ?
19
+ to + 1 :
20
+ $[deck]('getSlide', to).data('rootSlide')
21
+ );
22
+ };
23
+
24
+ /*
25
+ Extends defaults/options.
26
+
27
+ options.selectors.statusCurrent
28
+ The element matching this selector displays the current slide number.
29
+
30
+ options.selectors.statusTotal
31
+ The element matching this selector displays the total number of slides.
32
+
33
+ options.countNested
34
+ If false, only top level slides will be counted in the current and
35
+ total numbers.
36
+ */
37
+ $.extend(true, $[deck].defaults, {
38
+ selectors: {
39
+ statusCurrent: '.deck-status-current',
40
+ statusTotal: '.deck-status-total'
41
+ },
42
+
43
+ countNested: true
44
+ });
45
+
46
+ $d.bind('deck.init', function() {
47
+ var opts = $[deck]('getOptions'),
48
+ slides = $[deck]('getSlides'),
49
+ $current = $[deck]('getSlide'),
50
+ ndx;
51
+
52
+ // Set total slides once
53
+ if (opts.countNested) {
54
+ $(opts.selectors.statusTotal).text(slides.length);
55
+ }
56
+ else {
57
+ /* Determine root slides by checking each slide's ancestor tree for
58
+ any of the slide classes. */
59
+ var rootIndex = 1,
60
+ slideTest = $.map([
61
+ opts.classes.before,
62
+ opts.classes.previous,
63
+ opts.classes.current,
64
+ opts.classes.next,
65
+ opts.classes.after
66
+ ], function(el, i) {
67
+ return '.' + el;
68
+ }).join(', ');
69
+
70
+ /* Store the 'real' root slide number for use during slide changes. */
71
+ $.each(slides, function(i, $el) {
72
+ var $parentSlides = $el.parentsUntil(opts.selectors.container, slideTest);
73
+
74
+ $el.data('rootSlide', $parentSlides.length ?
75
+ $parentSlides.last().data('rootSlide') :
76
+ rootIndex++
77
+ );
78
+ });
79
+
80
+ $(opts.selectors.statusTotal).text(rootIndex - 1);
81
+ }
82
+
83
+ // Find where we started in the deck and set initial state
84
+ $.each(slides, function(i, $el) {
85
+ if ($el === $current) {
86
+ ndx = i;
87
+ return false;
88
+ }
89
+ });
90
+ updateCurrent(null, ndx, ndx);
91
+ })
92
+ /* Update current slide number with each change event */
93
+ .bind('deck.change', updateCurrent);
94
+ })(jQuery, 'deck');
95
+
@@ -0,0 +1,22 @@
1
+ .deck-container {
2
+ .deck-status {
3
+ position:absolute;
4
+ bottom:10px;
5
+ right:5px;
6
+ color:#888;
7
+ z-index:3;
8
+ margin:0;
9
+ }
10
+ }
11
+
12
+ body.deck-container {
13
+ .deck-status {
14
+ position:fixed;
15
+ }
16
+ }
17
+
18
+ @media print {
19
+ .deck-status {
20
+ display:none;
21
+ }
22
+ }
@@ -0,0 +1,215 @@
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
3
+ <!--[if IE 7]> <html class="no-js ie7" lang="en"> <![endif]-->
4
+ <!--[if IE 8]> <html class="no-js ie8" lang="en"> <![endif]-->
5
+ <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
9
+
10
+ <title>Getting Started with deck.js</title>
11
+
12
+ <meta name="description" content="A jQuery library for modern HTML presentations">
13
+ <meta name="author" content="Caleb Troughton">
14
+ <meta name="viewport" content="width=1024, user-scalable=no">
15
+
16
+ <!-- Core and extension CSS files -->
17
+ <link rel="stylesheet" href="../core/deck.core.css">
18
+ <link rel="stylesheet" href="../extensions/goto/deck.goto.css">
19
+ <link rel="stylesheet" href="../extensions/menu/deck.menu.css">
20
+ <link rel="stylesheet" href="../extensions/navigation/deck.navigation.css">
21
+ <link rel="stylesheet" href="../extensions/status/deck.status.css">
22
+ <link rel="stylesheet" href="../extensions/hash/deck.hash.css">
23
+ <link rel="stylesheet" href="../extensions/scale/deck.scale.css">
24
+
25
+ <!-- Style theme. More available in /themes/style/ or create your own. -->
26
+ <link rel="stylesheet" href="../themes/style/web-2.0.css">
27
+
28
+ <!-- Transition theme. More available in /themes/transition/ or create your own. -->
29
+ <link rel="stylesheet" href="../themes/transition/horizontal-slide.css">
30
+
31
+ <script src="../modernizr.custom.js"></script>
32
+ </head>
33
+
34
+ <body class="deck-container">
35
+
36
+ <!-- Begin slides -->
37
+ <section class="slide" id="title-slide">
38
+ <h1>Getting Started with deck.js</h1>
39
+ </section>
40
+
41
+ <section class="slide" id="how-to-overview">
42
+ <h2>How to Make a Deck</h2>
43
+ <ol>
44
+ <li>
45
+ <h3>Write Slides</h3>
46
+ <p>Slide content is simple&nbsp;HTML.</p>
47
+ </li>
48
+ <li>
49
+ <h3>Choose Themes</h3>
50
+ <p>One for slide styles and one for deck&nbsp;transitions.</p>
51
+ </li>
52
+ <li>
53
+ <h3>Include Extensions</h3>
54
+ <p>Add extra functionality to your deck, or leave it stripped&nbsp;down.</p>
55
+ </li>
56
+ </ol>
57
+ </section>
58
+
59
+ <section class="slide" id="markup">
60
+ <h2>The Markup</h2>
61
+ <p>Slides are just HTML elements with a class of <code>slide</code>.</p>
62
+ <pre><code>&lt;section class=&quot;slide&quot;&gt;
63
+ &lt;h2&gt;How to Make a Deck&lt;/h2&gt;
64
+ &lt;ol&gt;
65
+ &lt;li&gt;
66
+ &lt;h3&gt;Write Slides&lt;/h3&gt;
67
+ &lt;p&gt;Slide content is simple HTML.&lt;/p&gt;
68
+ &lt;/li&gt;
69
+ &lt;li&gt;
70
+ &lt;h3&gt;Choose Themes&lt;/h3&gt;
71
+ &lt;p&gt;One for slide styles and one for deck transitions.&lt;/p&gt;
72
+ &lt;/li&gt;
73
+ &hellip;
74
+ &lt;/ol&gt;
75
+ &lt;/section&gt;</code></pre>
76
+ </section>
77
+
78
+ <section class="slide" id="themes">
79
+ <h2>Style Themes</h2>
80
+ <p>Customizes the colors, typography, and layout of slide&nbsp;content.</p>
81
+ <pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;/path/to/css/style-theme.css&quot;&gt;</code></pre>
82
+ <h2>Transition Themes</h2>
83
+ <p>Defines transitions between slides using CSS3 transitions. Less capable browsers fall back to cutaways. But <strong>you</strong> aren&rsquo;t using <em>those</em> browsers to give your presentations, are&nbsp;you&hellip;</p>
84
+ <pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;/path/to/css/transition-theme.css&quot;&gt;</code></pre>
85
+ </section>
86
+
87
+ <section class="slide" id="extensions">
88
+ <h2>Extensions</h2>
89
+ <p>Core gives you basic slide functionality with left and right arrow navigation, but you may want more. Here are the ones included in this&nbsp;deck:</p>
90
+
91
+ <ul>
92
+ <li class="slide" id="extensions-goto">
93
+ <strong>deck.goto</strong>: Adds a shortcut key to jump to any slide number. Hit g, type in the slide number, and hit&nbsp;enter.
94
+ </li>
95
+
96
+ <li class="slide" id="extensions-hash">
97
+ <strong>deck.hash</strong>: Enables internal linking within slides, deep linking to individual slides, and updates the address bar &amp; a permalink anchor with each slide&nbsp;change.
98
+ </li>
99
+
100
+ <li class="slide" id="extensions-menu">
101
+ <strong>deck.menu</strong>: Adds a menu view, letting you see all slides in a grid. Hit m to toggle to menu view, continue navigating your deck, and hit m to return to normal view. Touch devices can double-tap the deck to switch between&nbsp;views.
102
+ </li>
103
+
104
+ <li class="slide" id="extensions-navigation">
105
+ <strong>deck.navigation</strong>: Adds clickable left and right buttons for the less keyboard&nbsp;inclined.
106
+ </li>
107
+
108
+ <li class="slide" id="extensions-status">
109
+ <strong>deck.status</strong>: Adds a page number indicator. (current/total)
110
+ </li>
111
+
112
+ <li class="slide" id="extensions-scale">
113
+ <strong>deck.scale</strong>: Scales each slide to fit within the deck container using CSS Transforms for those browsers that support them.
114
+ </li>
115
+ </ul>
116
+
117
+ <p class="slide" id="extension-folders">Each extension folder in the download package contains the necessary JavaScript, CSS, and HTML&nbsp;files. For a complete list of extension modules included in deck.js, check out the&nbsp;<a href="http://imakewebthings.github.com/deck.js/docs">documentation</a>.</p>
118
+ </section>
119
+
120
+ <section class="slide" id="nested">
121
+ <h2>Nested Slides</h2>
122
+ <p>That last slide had a few steps. To create substeps in slides, just nest them:</p>
123
+ <pre><code>&lt;section class=&quot;slide&quot;&gt;
124
+ &lt;h2&gt;Extensions&lt;/h2&gt;
125
+ &lt;p&gt;Core gives you basic slide functionality...&lt;/p&gt;
126
+ &lt;ul&gt;
127
+ &lt;li class=&quot;slide&quot;&gt;
128
+ &lt;h3&gt;deck.goto&lt;/h3&gt;
129
+ &lt;p&gt;Adds a shortcut key to jump to any slide number...&lt;/p&gt;
130
+ &lt;/li&gt;
131
+ &lt;li class=&quot;slide&quot;&gt;...&lt;/li&gt;
132
+ &lt;li class=&quot;slide&quot;&gt;...&lt;/li&gt;
133
+ &lt;li class=&quot;slide&quot;&gt;...&lt;/li&gt;
134
+ &lt;/ul&gt;
135
+ &lt;/section&gt;</code></pre>
136
+ </section>
137
+
138
+ <section class="slide" id="elements-images">
139
+ <h2>Other Elements: Images</h2>
140
+ <img src="http://placekitten.com/600/375" alt="Kitties">
141
+ <pre><code>&lt;img src=&quot;http://placekitten.com/600/375&quot; alt=&quot;Kitties&quot;&gt;</code></pre>
142
+ </section>
143
+
144
+ <section class="slide" id="elements-blockquotes">
145
+ <h2>Other Elements: Blockquotes</h2>
146
+ <blockquote cite="http://example.org">
147
+ <p>Food is an important part of a balanced diet.</p>
148
+ <p><cite>Fran Lebowitz</cite></p>
149
+ </blockquote>
150
+ <pre><code>&lt;blockquote cite=&quot;http://example.org&quot;&gt;
151
+ &lt;p&gt;Food is an important part of a balanced diet.&lt;/p&gt;
152
+ &lt;p&gt;&lt;cite&gt;Fran Lebowitz&lt;/cite&gt;&lt;/p&gt;
153
+ &lt;/blockquote&gt;</code></pre>
154
+ </section>
155
+
156
+
157
+ <section class="slide" id="elements-videos">
158
+ <h2>Other Elements: Video Embeds</h2>
159
+ <p>Embed videos from your favorite online video service or with an HTML5 video&nbsp;element.</p>
160
+
161
+ <iframe src="http://player.vimeo.com/video/1063136?title=0&amp;byline=0&amp;portrait=0" width="400" height="225" frameborder="0"></iframe>
162
+
163
+ <pre><code>&lt;iframe src=&quot;http://player.vimeo.com/video/1063136?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;</code></pre>
164
+ </section>
165
+
166
+ <section class="slide" id="digging-deeper">
167
+ <h2>Digging Deeper</h2>
168
+ <p>If you want to learn about making your own themes, extending deck.js, and more, check out the&nbsp;<a href="../docs/">documentation</a>.</p>
169
+ </section>
170
+
171
+ <!-- deck.navigation snippet -->
172
+ <a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
173
+ <a href="#" class="deck-next-link" title="Next">&#8594;</a>
174
+
175
+ <!-- deck.status snippet -->
176
+ <p class="deck-status">
177
+ <span class="deck-status-current"></span>
178
+ /
179
+ <span class="deck-status-total"></span>
180
+ </p>
181
+
182
+ <!-- deck.goto snippet -->
183
+ <form action="." method="get" class="goto-form">
184
+ <label for="goto-slide">Go to slide:</label>
185
+ <input type="text" name="slidenum" id="goto-slide" list="goto-datalist">
186
+ <datalist id="goto-datalist"></datalist>
187
+ <input type="submit" value="Go">
188
+ </form>
189
+
190
+ <!-- deck.hash snippet -->
191
+ <a href="." title="Permalink to this slide" class="deck-permalink">#</a>
192
+
193
+
194
+ <!-- Grab CDN jQuery, with a protocol relative URL; fall back to local if offline -->
195
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
196
+ <script>window.jQuery || document.write('<script src="../jquery-1.7.2.min.js"><\/script>')</script>
197
+
198
+ <!-- Deck Core and extensions -->
199
+ <script src="../core/deck.core.js"></script>
200
+ <script src="../extensions/hash/deck.hash.js"></script>
201
+ <script src="../extensions/menu/deck.menu.js"></script>
202
+ <script src="../extensions/goto/deck.goto.js"></script>
203
+ <script src="../extensions/status/deck.status.js"></script>
204
+ <script src="../extensions/navigation/deck.navigation.js"></script>
205
+ <script src="../extensions/scale/deck.scale.js"></script>
206
+
207
+ <!-- Initialize the deck -->
208
+ <script>
209
+ $(function() {
210
+ $.deck('.slide');
211
+ });
212
+ </script>
213
+
214
+ </body>
215
+ </html>