Mercurial > hg > Members > taiki > slides
comparison deck.js/extensions/scale/deck.scale.js @ 0:dd1c78c6398f
add having slides
author | taiki <taiki@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 Mar 2013 05:14:03 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:dd1c78c6398f |
---|---|
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 |