Add countNested option to deck.goto for #58

This commit is contained in:
imakewebthings 2012-01-09 13:18:32 -08:00
parent e1ba017e0e
commit d027a17fc6
3 changed files with 56 additions and 7 deletions

View file

@ -39,6 +39,10 @@ the deck container.
options.keys.goto options.keys.goto
The numeric keycode used to show the Go To Slide form. The numeric keycode used to show the Go To Slide form.
options.countNested
If false, only top level slides will be counted when entering a
slide number.
*/ */
$.extend(true, $[deck].defaults, { $.extend(true, $[deck].defaults, {
classes: { classes: {
@ -53,7 +57,9 @@ the deck container.
keys: { keys: {
goto: 71 // g goto: 71 // g
} },
countNested: true
}); });
/* /*
@ -89,7 +95,17 @@ the deck container.
$d.bind('deck.init', function() { $d.bind('deck.init', function() {
var opts = $[deck]('getOptions'), var opts = $[deck]('getOptions'),
$datalist = $(opts.selectors.gotoDatalist); $datalist = $(opts.selectors.gotoDatalist),
slideTest = $.map([
opts.classes.before,
opts.classes.previous,
opts.classes.current,
opts.classes.next,
opts.classes.after
], function(el, i) {
return '.' + el;
}).join(', '),
rootCounter = 1;
// Bind key events // Bind key events
$d.unbind('keydown.deckgoto').bind('keydown.deckgoto', function(e) { $d.unbind('keydown.deckgoto').bind('keydown.deckgoto', function(e) {
@ -101,13 +117,22 @@ the deck container.
} }
}); });
/* Populate datalist */ /* Populate datalist and work out countNested*/
$.each($[deck]('getSlides'), function(i, $slide) { $.each($[deck]('getSlides'), function(i, $slide) {
var id = $slide.attr('id'); var id = $slide.attr('id'),
$parentSlides = $slide.parentsUntil(opts.selectors.container, slideTest);
if (id) { if (id) {
$datalist.append('<option value="' + id + '">'); $datalist.append('<option value="' + id + '">');
} }
if ($parentSlides.length) {
$slide.removeData('rootIndex');
}
else if (!opts.countNested) {
$slide.data('rootIndex', rootCounter);
++rootCounter;
}
}); });
// Process form submittal, go to the slide entered // Process form submittal, go to the slide entered
@ -115,15 +140,25 @@ the deck container.
.unbind('submit.deckgoto') .unbind('submit.deckgoto')
.bind('submit.deckgoto', function(e) { .bind('submit.deckgoto', function(e) {
var $field = $($[deck]('getOptions').selectors.gotoInput), var $field = $($[deck]('getOptions').selectors.gotoInput),
i = parseInt($field.val(), 10); ndx = parseInt($field.val(), 10);
$[deck]('go', isNaN(i) ? $field.val() : i - 1); if (!$[deck]('getOptions').countNested) {
$.each($[deck]('getSlides'), function(i, $slide) {
if ($slide.data('rootIndex') === ndx) {
ndx = i + 1;
return false;
}
});
}
$[deck]('go', isNaN(ndx) ? $field.val() : ndx - 1);
$[deck]('hideGoTo'); $[deck]('hideGoTo');
$field.val(''); $field.val('');
e.preventDefault(); e.preventDefault();
}); });
// Dont let keys in the input trigger deck actions
$(opts.selectors.gotoInput) $(opts.selectors.gotoInput)
.unbind('keydown.deckgoto') .unbind('keydown.deckgoto')
.bind('keydown.deckgoto', function(e) { .bind('keydown.deckgoto', function(e) {

View file

@ -16,7 +16,7 @@
</div> </div>
</div> </div>
<div class="slide"> <div class="slide" id="after">
</div> </div>
<div class="slide"> <div class="slide">

View file

@ -116,4 +116,18 @@ describe('Deck JS Quick Go-To', function() {
expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto); expect($(defaults.selectors.container)).not.toHaveClass(defaults.classes.goto);
}); });
}); });
describe('countNested false', function() {
it('should ignore nested slides when given a slide number', function() {
loadFixtures('nesteds.html');
$.deck('.slide', {
countNested: false
});
$.deck('showGoTo');
$(defaults.selectors.gotoInput).val('4');
$(defaults.selectors.gotoForm).submit();
expect($.deck('getSlide')).toHaveId('after');
});
});
}); });