Mercurial > hg > Members > taiki > slides
diff deck.js/extensions/status/deck.status.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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deck.js/extensions/status/deck.status.js Mon Mar 25 05:14:03 2013 +0900 @@ -0,0 +1,95 @@ +/*! +Deck JS - deck.status +Copyright (c) 2011 Caleb Troughton +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 a (current)/(total) style status indicator to the deck. +*/ +(function($, deck, undefined) { + var $d = $(document), + + updateCurrent = function(e, from, to) { + var opts = $[deck]('getOptions'); + + $(opts.selectors.statusCurrent).text(opts.countNested ? + to + 1 : + $[deck]('getSlide', to).data('rootSlide') + ); + }; + + /* + Extends defaults/options. + + options.selectors.statusCurrent + The element matching this selector displays the current slide number. + + options.selectors.statusTotal + The element matching this selector displays the total number of slides. + + options.countNested + If false, only top level slides will be counted in the current and + total numbers. + */ + $.extend(true, $[deck].defaults, { + selectors: { + statusCurrent: '.deck-status-current', + statusTotal: '.deck-status-total' + }, + + countNested: true + }); + + $d.bind('deck.init', function() { + var opts = $[deck]('getOptions'), + slides = $[deck]('getSlides'), + $current = $[deck]('getSlide'), + ndx; + + // Set total slides once + if (opts.countNested) { + $(opts.selectors.statusTotal).text(slides.length); + } + else { + /* Determine root slides by checking each slide's ancestor tree for + any of the slide classes. */ + var rootIndex = 1, + slideTest = $.map([ + opts.classes.before, + opts.classes.previous, + opts.classes.current, + opts.classes.next, + opts.classes.after + ], function(el, i) { + return '.' + el; + }).join(', '); + + /* Store the 'real' root slide number for use during slide changes. */ + $.each(slides, function(i, $el) { + var $parentSlides = $el.parentsUntil(opts.selectors.container, slideTest); + + $el.data('rootSlide', $parentSlides.length ? + $parentSlides.last().data('rootSlide') : + rootIndex++ + ); + }); + + $(opts.selectors.statusTotal).text(rootIndex - 1); + } + + // Find where we started in the deck and set initial state + $.each(slides, function(i, $el) { + if ($el === $current) { + ndx = i; + return false; + } + }); + updateCurrent(null, ndx, ndx); + }) + /* Update current slide number with each change event */ + .bind('deck.change', updateCurrent); +})(jQuery, 'deck'); +