95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
/*!
|
|
Deck JS - deck.navigation
|
|
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 clickable previous and next links to the deck.
|
|
*/
|
|
(function($, undefined) {
|
|
var $document = $(document);
|
|
|
|
/* Updates link hrefs, and disabled states if last/first slide */
|
|
var updateButtons = function(event, from, to) {
|
|
var options = $.deck('getOptions');
|
|
var lastIndex = $.deck('getSlides').length - 1;
|
|
var $prevSlide = $.deck('getSlide', to - 1);
|
|
var $nextSlide = $.deck('getSlide', to + 1);
|
|
var hrefBase = window.location.href.replace(/#.*/, '');
|
|
var prevId = $prevSlide ? $prevSlide.attr('id') : undefined;
|
|
var nextId = $nextSlide ? $nextSlide.attr('id') : undefined;
|
|
var $prevButton = $(options.selectors.previousLink);
|
|
var $nextButton = $(options.selectors.nextLink);
|
|
|
|
$prevButton.toggleClass(options.classes.navDisabled, to === 0);
|
|
$prevButton.attr('aria-disabled', to === 0);
|
|
$prevButton.attr('href', hrefBase + '#' + (prevId ? prevId : ''));
|
|
$nextButton.toggleClass(options.classes.navDisabled, to === lastIndex);
|
|
$nextButton.attr('aria-disabled', to === lastIndex);
|
|
$nextButton.attr('href', hrefBase + '#' + (nextId ? nextId : ''));
|
|
};
|
|
|
|
/*
|
|
Extends defaults/options.
|
|
|
|
options.classes.navDisabled
|
|
This class is added to a navigation link when that action is disabled.
|
|
It is added to the previous link when on the first slide, and to the
|
|
next link when on the last slide.
|
|
|
|
options.selectors.nextLink
|
|
The elements that match this selector will move the deck to the next
|
|
slide when clicked.
|
|
|
|
options.selectors.previousLink
|
|
The elements that match this selector will move to deck to the previous
|
|
slide when clicked.
|
|
*/
|
|
$.extend(true, $.deck.defaults, {
|
|
classes: {
|
|
navDisabled: 'deck-nav-disabled'
|
|
},
|
|
|
|
selectors: {
|
|
nextLink: '.deck-next-link',
|
|
previousLink: '.deck-prev-link'
|
|
}
|
|
});
|
|
|
|
$document.bind('deck.init', function() {
|
|
var options = $.deck('getOptions');
|
|
var slides = $.deck('getSlides');
|
|
var $current = $.deck('getSlide');
|
|
var $prevButton = $(options.selectors.previousLink);
|
|
var $nextButton = $(options.selectors.nextLink);
|
|
var index;
|
|
|
|
// Setup prev/next link events
|
|
$prevButton.unbind('click.decknavigation');
|
|
$prevButton.bind('click.decknavigation', function(event) {
|
|
$.deck('prev');
|
|
event.preventDefault();
|
|
});
|
|
|
|
$nextButton.unbind('click.decknavigation');
|
|
$nextButton.bind('click.decknavigation', function(event) {
|
|
$.deck('next');
|
|
event.preventDefault();
|
|
});
|
|
|
|
// Find where we started in the deck and set initial states
|
|
$.each(slides, function(i, $slide) {
|
|
if ($slide === $current) {
|
|
index = i;
|
|
return false;
|
|
}
|
|
});
|
|
updateButtons(null, index, index);
|
|
});
|
|
|
|
$document.bind('deck.change', updateButtons);
|
|
})(jQuery);
|
|
|