“use strict”;
(function ($) {
$.fn.collapsible = function (options) { var defaults = { accordion: undefined }; options = $.extend(defaults, options); function accordionOpen($collapsible, object) { $panelHeaders = $collapsible.find('> li > .collapsible-header'); if (object.hasClass('active')) { object.parent().addClass('active'); } else { object.parent().removeClass('active'); } if (object.parent().hasClass('active')) { object.siblings('.collapsible-body').stop(true, false).slideDown({ duration: 350, easing: 'easeOutQuart', queue: false, complete: function complete() { $(this).css('height', ''); } }); } else { object.siblings('.collapsible-body').stop(true, false).slideUp({ duration: 350, easing: 'easeOutQuart', queue: false, complete: function complete() { $(this).css('height', ''); } }); } $panelHeaders.not(object).removeClass('active').parent().removeClass('active'); $panelHeaders.not(object).parent().children('.collapsible-body').stop(true, false).slideUp({ duration: 350, easing: 'easeOutQuart', queue: false, complete: function complete() { $(this).css('height', ''); } }); } function expandableOpen(object) { if (object.hasClass('active')) { object.parent().addClass('active'); } else { object.parent().removeClass('active'); } if (object.parent().hasClass('active')) { object.siblings('.collapsible-body').stop(true, false).slideDown({ duration: 350, easing: 'easeOutQuart', queue: false, complete: function complete() { $(this).css('height', ''); } }); } else { object.siblings('.collapsible-body').stop(true, false).slideUp({ duration: 350, easing: 'easeOutQuart', queue: false, complete: function complete() { $(this).css('height', ''); } }); } } function isChildrenOfPanelHeader(object) { var panelHeader = getPanelHeader(object); return panelHeader.length > 0; } function getPanelHeader(object) { return object.closest('li > .collapsible-header'); } return this.each(function () { var $this = $(this); var $panelHeaders = $(this).find('> li > .collapsible-header'); var collapsibleType = $this.data('collapsible'); // Turn off any existing event handlers $this.off('click.collapse', '.collapsible-header'); $panelHeaders.off('click.collapse'); if (options.accordion || collapsibleType === 'accordion' || collapsibleType === undefined) { $panelHeaders = $this.find('> li > .collapsible-header'); $panelHeaders.on('click.collapse', function (e) { var element = $(e.target); if (isChildrenOfPanelHeader(element)) { element = getPanelHeader(element); } element.toggleClass('active'); accordionOpen($this, element); }); accordionOpen($this, $panelHeaders.filter('.active').first()); } else { $panelHeaders.each(function () { $(this).on('click.collapse', function (e) { var element = $(e.target); if (isChildrenOfPanelHeader(element)) { element = getPanelHeader(element); } element.toggleClass('active'); expandableOpen(element); }); if ($(this).hasClass('active')) { expandableOpen($(this)); } }); } }); }; $('.collapsible').collapsible();
})(jQuery);