Add countNested option to deck.goto for #58
This commit is contained in:
parent
e1ba017e0e
commit
d027a17fc6
3 changed files with 56 additions and 7 deletions
|
@ -39,6 +39,10 @@ the deck container.
|
|||
|
||||
options.keys.goto
|
||||
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, {
|
||||
classes: {
|
||||
|
@ -53,7 +57,9 @@ the deck container.
|
|||
|
||||
keys: {
|
||||
goto: 71 // g
|
||||
}
|
||||
},
|
||||
|
||||
countNested: true
|
||||
});
|
||||
|
||||
/*
|
||||
|
@ -89,7 +95,17 @@ the deck container.
|
|||
|
||||
$d.bind('deck.init', function() {
|
||||
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
|
||||
$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) {
|
||||
var id = $slide.attr('id');
|
||||
var id = $slide.attr('id'),
|
||||
$parentSlides = $slide.parentsUntil(opts.selectors.container, slideTest);
|
||||
|
||||
if (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
|
||||
|
@ -115,15 +140,25 @@ the deck container.
|
|||
.unbind('submit.deckgoto')
|
||||
.bind('submit.deckgoto', function(e) {
|
||||
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');
|
||||
$field.val('');
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// Dont let keys in the input trigger deck actions
|
||||
$(opts.selectors.gotoInput)
|
||||
.unbind('keydown.deckgoto')
|
||||
.bind('keydown.deckgoto', function(e) {
|
||||
|
|
2
test/fixtures/nesteds.html
vendored
2
test/fixtures/nesteds.html
vendored
|
@ -16,7 +16,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<div class="slide" id="after">
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
|
|
|
@ -116,4 +116,18 @@ describe('Deck JS Quick Go-To', function() {
|
|||
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');
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue