diff options
Diffstat (limited to 'doc/backends/deckjs/deck.js/extensions/navigation/deck.navigation.js')
-rw-r--r-- | doc/backends/deckjs/deck.js/extensions/navigation/deck.navigation.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/doc/backends/deckjs/deck.js/extensions/navigation/deck.navigation.js b/doc/backends/deckjs/deck.js/extensions/navigation/deck.navigation.js new file mode 100644 index 00000000..7dc95107 --- /dev/null +++ b/doc/backends/deckjs/deck.js/extensions/navigation/deck.navigation.js @@ -0,0 +1,94 @@ +/*! +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); + |