109 lines
2.7 KiB
JavaScript
109 lines
2.7 KiB
JavaScript
|
/*!
|
||
|
Deck JS - deck.status
|
||
|
Copyright (c) 2011-2014 Caleb Troughton
|
||
|
Dual licensed under the MIT license.
|
||
|
https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
This module adds a (current)/(total) style status indicator to the deck.
|
||
|
*/
|
||
|
(function($, undefined) {
|
||
|
var $document = $(document);
|
||
|
var rootCounter;
|
||
|
|
||
|
var updateCurrent = function(event, from, to) {
|
||
|
var options = $.deck('getOptions');
|
||
|
var currentSlideNumber = to + 1;
|
||
|
if (!options.countNested) {
|
||
|
currentSlideNumber = $.deck('getSlide', to).data('rootSlide');
|
||
|
}
|
||
|
$(options.selectors.statusCurrent).text(currentSlideNumber);
|
||
|
};
|
||
|
|
||
|
var markRootSlides = function() {
|
||
|
var options = $.deck('getOptions');
|
||
|
var slideTest = $.map([
|
||
|
options.classes.before,
|
||
|
options.classes.previous,
|
||
|
options.classes.current,
|
||
|
options.classes.next,
|
||
|
options.classes.after
|
||
|
], function(el, i) {
|
||
|
return '.' + el;
|
||
|
}).join(', ');
|
||
|
|
||
|
rootCounter = 0;
|
||
|
$.each($.deck('getSlides'), function(i, $slide) {
|
||
|
var $parentSlides = $slide.parentsUntil(
|
||
|
options.selectors.container,
|
||
|
slideTest
|
||
|
);
|
||
|
|
||
|
if ($parentSlides.length) {
|
||
|
$slide.data('rootSlide', $parentSlides.last().data('rootSlide'));
|
||
|
}
|
||
|
else {
|
||
|
++rootCounter;
|
||
|
$slide.data('rootSlide', rootCounter);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var setInitialSlideNumber = function() {
|
||
|
var slides = $.deck('getSlides');
|
||
|
var $currentSlide = $.deck('getSlide');
|
||
|
var index;
|
||
|
|
||
|
$.each(slides, function(i, $slide) {
|
||
|
if ($slide === $currentSlide) {
|
||
|
index = i;
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
updateCurrent(null, index, index);
|
||
|
};
|
||
|
|
||
|
var setTotalSlideNumber = function() {
|
||
|
var options = $.deck('getOptions');
|
||
|
var slides = $.deck('getSlides');
|
||
|
|
||
|
if (options.countNested) {
|
||
|
$(options.selectors.statusTotal).text(slides.length);
|
||
|
}
|
||
|
else {
|
||
|
$(options.selectors.statusTotal).text(rootCounter);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
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
|
||
|
});
|
||
|
|
||
|
$document.bind('deck.init', function() {
|
||
|
markRootSlides();
|
||
|
setInitialSlideNumber();
|
||
|
setTotalSlideNumber();
|
||
|
});
|
||
|
$document.bind('deck.change', updateCurrent);
|
||
|
})(jQuery, 'deck');
|
||
|
|