Skip to content

Commit c4e57fb

Browse files
Set better initial states in deck.navigation, closes imakewebthings#55
1 parent b4cd216 commit c4e57fb

File tree

2 files changed

+36
-22
lines changed

2 files changed

+36
-22
lines changed

extensions/navigation/deck.navigation.js

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,24 @@ https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
1010
This module adds clickable previous and next links to the deck.
1111
*/
1212
(function($, deck, undefined) {
13-
var $d = $(document);
13+
var $d = $(document),
14+
15+
/* Updates link hrefs, and disabled states if last/first slide */
16+
updateButtons = function(e, from, to) {
17+
var opts = $[deck]('getOptions'),
18+
last = $[deck]('getSlides').length - 1,
19+
prevSlide = $[deck]('getSlide', to - 1),
20+
nextSlide = $[deck]('getSlide', to + 1),
21+
prevId = prevSlide ? prevSlide.attr('id') : undefined;
22+
nextId = nextSlide ? nextSlide.attr('id') : undefined;
23+
24+
$(opts.selectors.previousLink)
25+
.toggleClass(opts.classes.navDisabled, !to)
26+
.attr('href', '#' + (prevId ? prevId : ''));
27+
$(opts.selectors.nextLink)
28+
.toggleClass(opts.classes.navDisabled, to === last)
29+
.attr('href', '#' + (nextId ? nextId : ''));
30+
};
1431

1532
/*
1633
Extends defaults/options.
@@ -41,8 +58,9 @@ This module adds clickable previous and next links to the deck.
4158

4259
$d.bind('deck.init', function() {
4360
var opts = $[deck]('getOptions'),
44-
nextSlide = $[deck]('getSlide', 1),
45-
nextId = nextSlide ? nextSlide.attr('id') : undefined;
61+
slides = $[deck]('getSlides'),
62+
$current = $[deck]('getSlide'),
63+
ndx;
4664

4765
// Setup prev/next link events
4866
$(opts.selectors.previousLink)
@@ -59,25 +77,15 @@ This module adds clickable previous and next links to the deck.
5977
e.preventDefault();
6078
});
6179

62-
// Start on first slide, previous link is disabled, set next link href
63-
$(opts.selectors.previousLink).addClass(opts.classes.navDisabled);
64-
$(opts.selectors.nextLink).attr('href', '#' + (nextId ? nextId : ''));
80+
// Find where we started in the deck and set initial states
81+
$.each(slides, function(i, $slide) {
82+
if ($slide === $current) {
83+
ndx = i;
84+
return false;
85+
}
86+
});
87+
updateButtons(null, ndx, ndx);
6588
})
66-
/* Updates link hrefs, and disabled states if last/first slide */
67-
.bind('deck.change', function(e, from, to) {
68-
var opts = $[deck]('getOptions'),
69-
last = $[deck]('getSlides').length - 1,
70-
prevSlide = $[deck]('getSlide', to - 1),
71-
nextSlide = $[deck]('getSlide', to + 1),
72-
prevId = prevSlide ? prevSlide.attr('id') : undefined;
73-
nextId = nextSlide ? nextSlide.attr('id') : undefined;
74-
75-
$(opts.selectors.previousLink)
76-
.toggleClass(opts.classes.navDisabled, !to)
77-
.attr('href', '#' + (prevId ? prevId : ''));
78-
$(opts.selectors.nextLink)
79-
.toggleClass(opts.classes.navDisabled, to === last)
80-
.attr('href', '#' + (nextId ? nextId : ''));
81-
});
89+
.bind('deck.change', updateButtons);
8290
})(jQuery, 'deck');
8391

test/spec.navigation.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ describe('Deck JS Navigation Buttons', function() {
3535
expect($(defaults.selectors.nextLink)).toHaveClass(defaults.classes.navDisabled);
3636
});
3737

38+
it('should not start disabled if deck initialized in the middle', function() {
39+
$.deck('go', 2);
40+
$.deck('.slide');
41+
expect($(defaults.selectors.previousLink)).not.toHaveClass(defaults.classes.navDisabled);
42+
});
43+
3844
it('should update the links hrefs with real fragment ids', function() {
3945
expect($(defaults.selectors.previousLink)).toHaveAttr('href', '#');
4046
expect($(defaults.selectors.nextLink)).toHaveAttr('href', '#custom-id');

0 commit comments

Comments
 (0)