(function($) { 'use strict'; var i, settings; /** * Accordion Shortcodes plugin function * * @param object options Plugin settings to override the defaults */ $.fn.accordionShortcodes = function(options) { var items = []; var allControllers = $('#' + options.id + ' .js-accordion-controller'); var selectedId = window.location.hash; var duration = 250; var settings = $.extend({ // Set default settings autoClose: true, openFirst: false, openAll: false, clickToClose: false, scroll: false, usebuttons: false, }, options); /** * Initial setup * Remove the 'no-js' class since JavaScript is enabled and set the * scroll offset. */ $('.accordion').removeClass('no-js'); settings.scrollOffset = Math.floor(parseInt(settings.scroll)) | 0; allControllers.each(function(index) { var initiallyOpen = false; // Should any accordions be opened or closed on load? if (index == 0 && settings.openFirst) { initiallyOpen = true; } // Open all overwrites open first setting if (settings.openAll) { initiallyOpen = true; } // Initial state settings on individual items override global initial state settings switch ($(this).data('initialstate')) { case 'open': var initiallyOpen = true; break; case 'closed': var initiallyOpen = false; break; } // ID hashs override all initial state settings if (selectedId.length && selectedId == '#' + $(this).attr('id')) { initiallyOpen = true; } var item = getAccordionItemObject($(this), initiallyOpen); items.push(item); // Add event listeners to controller $(this).click(function(event) { clickControllerHandler(item); }); $(this).keyup(function(event) { var code = event.which; // We only need to add manual keyboard events if _not_ using `