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
|
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) {
|
||||||
|
|
2
test/fixtures/nesteds.html
vendored
2
test/fixtures/nesteds.html
vendored
|
@ -16,7 +16,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="slide">
|
<div class="slide" id="after">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="slide">
|
<div class="slide">
|
||||||
|
|
|
@ -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');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
Loading…
Reference in a new issue