slideshift-static 0.0.1

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