ui/panel-toggle.js

'use strict';

var _ = require('lodash'),

    callback;

/**
 * Creates panels that can open and close based on a toggle.
 * @module SHPanelToggle
 */
module.exports = {
    /**
     * Initializes the clicks on .Panel-toggles for "Bootstrap-like" panels.
     * @param {Function} cb - Additional function to call with the toggle.
     * @example
     * SHPanelToggle.init();
     * @returns {void}
     */
    init: function(cb) {
        callback = cb || $.noop;

        $(document)
            .off('.Panel-toggle')
            .on('click.Panel-toggle', '.Panel-collapse .Panel-heading', _.bind(this._panelHeadingClicked, this));
    },

    _panelHeadingClicked: function(evt) {
        evt.preventDefault();

        var $panel = $(evt.currentTarget).closest('.Panel');

        if ($panel.hasClass('no-close')) { return; }

        $('.Panel-content', $panel).slideToggle(100, $.easing.def, function() {
            $panel.toggleClass('open');
        });

        callback();
    }
};