/*! 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');