diff options
author | Christian Franke <nobody@nowhere.ws> | 2013-04-09 14:49:43 +0200 |
---|---|---|
committer | Christian Franke <nobody@nowhere.ws> | 2013-04-09 14:49:43 +0200 |
commit | 7ccd2b9d1b3ee8bdd9557f9209eb222ed68d4927 (patch) | |
tree | 84796c055b8a2aa1203dfaf4f1c775097a1c9625 | |
parent | 5a774ef6f3b38b19b26913a34b1388530c72334e (diff) |
add automatic extension
-rw-r--r-- | deck.js/extensions/automatic/VERSION | 1 | ||||
-rw-r--r-- | deck.js/extensions/automatic/deck.automatic.css | 40 | ||||
-rw-r--r-- | deck.js/extensions/automatic/deck.automatic.js | 185 | ||||
-rw-r--r-- | index.html (renamed from presentation.html) | 33 |
4 files changed, 244 insertions, 15 deletions
diff --git a/deck.js/extensions/automatic/VERSION b/deck.js/extensions/automatic/VERSION new file mode 100644 index 0000000..afaf360 --- /dev/null +++ b/deck.js/extensions/automatic/VERSION @@ -0,0 +1 @@ +1.0.0
\ No newline at end of file diff --git a/deck.js/extensions/automatic/deck.automatic.css b/deck.js/extensions/automatic/deck.automatic.css new file mode 100644 index 0000000..8977540 --- /dev/null +++ b/deck.js/extensions/automatic/deck.automatic.css @@ -0,0 +1,40 @@ +.deck-container .deck-automatic-link { + position:absolute; + z-index:3; + bottom: 0; + left:49%; + margin-top:-16px; + font-size:20px; + font-weight:bold; + line-height:32px; + vertical-align:middle; + text-align:center; + text-decoration:none; + cursor: pointer; +} + +.deck-container .deck-automatic-link.deck-automatic-running { + color: green; +} + +.deck-container .deck-automatic-link.deck-automatic-stopped { + color: red; +} + +.borderradius .deck-container .deck-automatic-link { + border-radius(10px); +} + +.deck-container .deck-automatic-link:hover { + background-color: lightgrey; +} + +.deck-container .deck-automatic-link:active { + background-color: grey; +} + +@media print { + .deck-automatic-link { + display:none !important; + } +}
\ No newline at end of file diff --git a/deck.js/extensions/automatic/deck.automatic.js b/deck.js/extensions/automatic/deck.automatic.js new file mode 100644 index 0000000..6a32209 --- /dev/null +++ b/deck.js/extensions/automatic/deck.automatic.js @@ -0,0 +1,185 @@ +/*! +Deck JS - deck.navigation +Copyright (c) 2012 Romain Champourlier +Dual licensed under the MIT license and GPL license. +https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt +https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt +*/ + +/* +This module adds automatic control of the deck. +*/ +(function($, deck, undefined) { + var $d = $(document); + var running = false; + + clearAutomaticTimeout = function() { + if ($[deck].automatic && $[deck].automatic.timeout) { + window.clearTimeout($[deck].automatic.timeout); + } + }; + + // from and to are set with the values of the slide event calling + // this method, not the changes this method should trigger. + setTimeoutIfNeeded = function(e, from, to) { + // Clear previous timeout (necessary in cases the user generates deck's change + // events, for example by changing slides manually). + clearAutomaticTimeout(); + + var opts = $[deck]('getOptions'); + + if (running) { + // Slideshow running. + + var elem = $[deck]('getSlide', to); + + var duration = opts.automatic.slideDuration; + + // Iterate over element's classes to + // match against classdata + $.each(elem.attr('class').split(/\s+/), function(idx, cls){ + $.each(opts.classdata, function(feat_cls, features){ + if(cls == feat_cls && features.duration){ + duration = features.duration; + } + }); + }); + + var customDuration = elem.attr('data-duration'); + if(customDuration){ + duration = customDuration; + } + + // If duration is negative, don't set a timeout + if(duration >= 0){ + if (to == $[deck]('getSlides').length-1) { + // setTimeout... called when going to last slide. + // If cycling, set a timeout to go to first slide, else don't set a timeout, and set + // state to stopped. + if (opts.automatic.cycle) { + $[deck].automatic = { + timeout: window.setTimeout(function() { + $[deck]('go', 0); + if (e) e.preventDefault(); + }, duration) + }; + } + else { + $(opts.selectors.automaticLink).removeClass(opts.classes.automaticRunning); + $(opts.selectors.automaticLink).addClass(opts.classes.automaticStopped); + } + } + else { + // Running, not yet on last slide. + $[deck].automatic = { + timeout: window.setTimeout(function() { + $[deck]('next'); + if (e) e.preventDefault(); + }, duration) + }; + } + } + } + }; + + /* + Extends defaults/options. + + options.classes.automaticRunning + This class is added to the automatic link when the deck is currently in running + state. + + options.classes.automaticStopped + This class is added to the automatic link when the deck is currently in stopped + state. + + options.selectors.automaticLink + The elements that match this selector will toggle automatic run of the deck + when clicked. + */ + $.extend(true, $[deck].defaults, { + classes: { + automaticRunning: 'deck-automatic-running', + automaticStopped: 'deck-automatic-stopped' + }, + + selectors: { + automaticLink: '.deck-automatic-link' + }, + + classdata: { + /* // Example duration class-feature + * // Sets the duration of all elements with + * // bullet-point-timing class to 500ms. + * 'bullet-point-timing': { + * duration: 500 + * } + */ + }, + + automatic: { + startRunning: true, + cycle: true, + slideDuration: 3000 + } + }); + + // Lets others detect when slideshow is running automatically + $[deck]('extend', 'isRunning', function(){ + return running; + }); + + $d.bind('deck.init', function() { + var opts = $[deck]('getOptions'), + slides = $[deck]('getSlides'), + $current = $[deck]('getSlide'), + ndx; + + // Extension function to play the slideshow + $[deck]('extend', 'play', function(){ + var slides = $[deck]('getSlides'); + if (slides[slides.length-1] == $[deck]('getSlide')) { + // Stopped on last slide. Clicking to play/pause will rewind to first slide, and play. + $.deck('go', 0); + } + running = true; + $(opts.selectors.automaticLink).addClass(opts.classes.automaticRunning); + $(opts.selectors.automaticLink).removeClass(opts.classes.automaticStopped); + $d.trigger('deck.onPlayToggle', true); + $d.trigger('deck.onPlay'); + setTimeoutIfNeeded(null, slides.length, 0); + }); + + // Extension function to pause the slideshow + $[deck]('extend', 'pause', function(){ + running = false; + $(opts.selectors.automaticLink).addClass(opts.classes.automaticStopped); + $(opts.selectors.automaticLink).removeClass(opts.classes.automaticRunning); + $d.trigger('deck.onPlayToggle', true); + $d.trigger('deck.onPause'); + clearAutomaticTimeout(); + }); + + // Setup initial state + if (opts.automatic.startRunning) { + $[deck]('play'); + } + else { + $[deck]('pause'); + } + setTimeoutIfNeeded(null, ndx, 0); + + // Setup automatic link toggle events + $(opts.selectors.automaticLink) + .unbind('click.deckautomatic') + .bind('click.deckautomatic', function(e) { + if (!running) { + $[deck]('play'); + } + else { + $[deck]('pause'); + } + }); + }) + .bind('deck.change', setTimeoutIfNeeded); +})(jQuery, 'deck'); diff --git a/presentation.html b/index.html index a670be2..8c22e93 100644 --- a/presentation.html +++ b/index.html @@ -44,9 +44,6 @@ <!-- slide number indicator (uses "status snippet" at the end of the page) --> <link rel="stylesheet" href="deck.js/extensions/status/deck.status.css"> <script src="deck.js/extensions/status/deck.status.js"></script> - <!-- navigation buttons (uses "navigation snippet" at the end of the page) --> - <link rel="stylesheet" href="deck.js/extensions/navigation/deck.navigation.css"> - <script src="deck.js/extensions/navigation/deck.navigation.js"></script> <!-- slide selector by typing 'm' --> <script src="deck.js/extensions/menu/deck.menu.js"></script> <link rel="stylesheet" href="deck.js/extensions/menu/deck.menu.css"> @@ -61,13 +58,22 @@ <script src="deck.js/libs/jquerysvg/jquery.svganim.min.js"></script> <script src="deck.js/extensions/svg/deck.svg.js"></script> + <link rel="stylesheet" href="deck.js/extensions/automatic/deck.automatic.css"></link> + <script src="deck.js/extensions/automatic/deck.automatic.js"></script> <!-- Deck.js options (advanced) --> - <script>$(function() {$.deck('.slide', { - // fitMarginX:100, fitMarginY:100, // uncomment to tune margin - // fitMode: "stretched", // uncomment to strech - dummy:"" - });}); + <script> + $(function() { + $.deck('.slide', { + // fitMarginX:100, fitMarginY:100, // uncomment to tune margin + // fitMode: "stretched", // uncomment to strech + automatic: { + startRunning: true, + cycle: true, + slideDuration: 10000 + } + }); + }); </script> <!-- override some style here if needed (or in an external file) --> @@ -105,8 +111,8 @@ This text should not be displayed if everything goes well: use left/right arrow <div class="deck-container"> <!-- this presentation uses smart syntax --> - <section class="slide" id="logo"> - <img width="100%" src="logo.png" alt="Cryptocon 13"/> + <section class="slide" id="logo" data-duration="5000"> + <img width="100%" src="logo.png" alt="Cryptocon 13"></img> </section> <section class="slide" id="friday"> <p class="location">Lounge</p> @@ -317,8 +323,8 @@ This text should not be displayed if everything goes well: use left/right arrow </tr> </table> </section> -<section class="slide" id="epilog"> - <img width="40%" src="qrcode.png" alt="http://sublab.org/cryptocon13" style="margin-top: 10%;"/> +<section class="slide" id="epilog" data-duration="5000"> + <img width="40%" src="qrcode.png" alt="http://sublab.org/cryptocon13" style="margin-top: 10%;"></img> <p style="text-align: center">http://sublab.org/cryptocon13</p> </section> <!-- end of the presentation --> @@ -339,9 +345,6 @@ Infodesk an der Bar − Programm unter http://sublab.org/cryptocon13 <datalist id="goto-datalist"></datalist> <input type="submit" value="Go"> </form> -<!-- deck.navigation snippet --> -<a href="#" class="deck-prev-link" title="Previous">←</a> -<a href="#" class="deck-next-link" title="Next">→</a> <!-- deck.clone snippet: simple red box with top-left corner as cursor position --> <div class="clonepointer" style="position:absolute; width:20px; height:20px; background:red; z-index:10"></div> <!-- deck.clone snippet: simple green box with center as cursor position --> |