* @fires AccordionMenu#down
*/
down($target) {
- var _this = this;
-
if(!this.options.multiOpen) {
this.up(this.$element.find('.is-active').not($target.parentsUntil(this.$element).add($target)));
}
- $target.addClass('is-active').attr({'aria-hidden': false});
+ $target
+ .addClass('is-active')
+ .attr({ 'aria-hidden': false });
if(this.options.submenuToggle) {
$target.prev('.submenu-toggle').attr({'aria-expanded': true});
$target.parent('.is-accordion-submenu-parent').attr({'aria-expanded': true});
}
- $target.slideDown(_this.options.slideSpeed, function () {
+ $target.slideDown(this.options.slideSpeed, () => {
/**
* Fires when the menu is done opening.
* @event AccordionMenu#down
*/
- _this.$element.trigger('down.zf.accordionMenu', [$target]);
+ this.$element.trigger('down.zf.accordionMenu', [$target]);
});
}
* @fires AccordionMenu#up
*/
up($target) {
- var _this = this;
- $target.slideUp(_this.options.slideSpeed, function () {
- /**
- * Fires when the menu is done collapsing up.
- * @event AccordionMenu#up
- */
- _this.$element.trigger('up.zf.accordionMenu', [$target]);
- });
+ const $submenus = $target.find('[data-submenu]');
+ const $allmenus = $target.add($submenus);
- var $menus = $target.find('[data-submenu]').slideUp(0).addBack().attr('aria-hidden', true);
+ $submenus.slideUp(0);
+ $allmenus
+ .removeClass('is-active')
+ .attr('aria-hidden', true);
if(this.options.submenuToggle) {
- $menus.prev('.submenu-toggle').attr('aria-expanded', false);
+ $allmenus.prev('.submenu-toggle').attr('aria-expanded', false);
}
else {
- $menus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);
+ $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);
}
+
+ $target.slideUp(this.options.slideSpeed, () => {
+ /**
+ * Fires when the menu is done collapsing up.
+ * @event AccordionMenu#up
+ */
+ this.$element.trigger('up.zf.accordionMenu', [$target]);
+ });
}
/**
plugin.options.should.be.an('object');
});
});
-
+
describe('up()', function() {
it('closes the targeted submenu', function(done) {
$html = $(template).appendTo('body');
plugin = new Foundation.AccordionMenu($html);
+ const $submenu = $html.find('.is-accordion-submenu').eq(0);
// Open it first
- plugin.down($html.find('.is-accordion-submenu').eq(0));
-
- plugin.up($html.find('.is-accordion-submenu').eq(0));
+ plugin.down($submenu);
+
+ plugin.up($submenu);
+
setTimeout(() => {
- $html.find('.is-accordion-submenu').eq(0).should.be.hidden;
+ // Should be hidden
+ $submenu.should.be.hidden;
+ // Should have attributes updated and without active classe
+ $submenu.should.have.attr('aria-hidden', 'true');
+ $submenu.should.not.have.class('is-active');
done();
}, 1);
});
it('opens the targeted submenu', function() {
$html = $(template).appendTo('body');
plugin = new Foundation.AccordionMenu($html, {});
+ const $submenu = $html.find('.is-accordion-submenu').eq(0);
- plugin.down($html.find('.is-accordion-submenu').eq(0));
- $html.find('.is-accordion-submenu').eq(0).should.be.visible;
+ plugin.down($submenu);
+
+ // Should be visible
+ $submenu.should.be.visible;
+ // Should have attributes updated and with an active classe
+ $submenu.should.have.attr('aria-hidden', 'false');
+ $submenu.should.have.class('is-active');
});
it('toggles attributes of title of the targeted submenu', function() {
// Open another one first
plugin.down($html.find('.is-accordion-submenu').eq(0));
-
+
plugin.down($html.find('.is-accordion-submenu').eq(2));
$html.find('.is-accordion-submenu').eq(0).should.be.hidden;
});
// Open another one first
plugin.down($html.find('.is-accordion-submenu').eq(0));
-
+
plugin.down($html.find('.is-accordion-submenu').eq(2));
$html.find('.is-accordion-submenu').eq(0).should.be.visible;
});