/** * @file: tab_builder.js * * take the html markup for tabbed/accordion body * content and convert to the desired presentation. * * we'll have to rework the markup structure first and then, * we can apply the toggle event elements for the user interaction * bits. */ (function ($){ Drupal.behaviors.wysiwyg_tools_plus_theme_createTabs = { attach:function (context) { //tabbed elements first // for each of the div's apply an id to each $('.ready-tabber', context).each(function (index) { // a couple of opening set-ups for first run. if (index == 0) { //create the ul that our headers can be added to for the tabs row plus id's to link to content $(this).before(''); } // add an indexed id to the div $(this).attr('id', 'content-' + index); //wrap the tab header as an anchor and li $(this).children('.ready-tabber-header').wrap('
  • '); // move the header element to the ul as a li $(this).children('li').appendTo('ul.ready-tabs'); }); $('.ready-tabs', context).after('
    '); } } Drupal.behaviors.wysiwyg_tools_plus_theme_createAccordions = { attach:function (context) { $('.ready-accordion').each(function (index) { $(this).attr('id', 'acc-' + index); $(this).children('.ready-accordion-header').wrap(''); $(this).children('a').insertBefore(jQuery(this)); // awful hack: apply .last to the accordion heads which appear to be last if ($(this).next().length == 0 || !$(this).next().hasClass("ready-accordion")) { $(this).prev().addClass("last"); } }); } } Drupal.behaviors.wysiwyg_tools_plus_theme_initPage = { attach:function (context) { $('.ready-accordion', context).hide(); $('.acc-head', context).children('span').addClass('collapsed'); // set the click events $('.ready-tabs a', context).click(function (event) { idClicked = this.id; wysiwyg_tools_plus_theme_toggleTabContent(idClicked); }); $('.acc-head', context).click(function (event) { idClicked = this.id; wysiwyg_tools_plus_theme_toggleAccordionContent(idClicked); // attach an active class to active accordion heads if ($(this).children('span').hasClass("expanded")) { $(this).children('span').removeClass("expanded"); $(this).children('span').addClass("collapsed"); } else { $(this).children('span').addClass("expanded"); $(this).children('span').removeClass("collapsed"); } }); wysiwyg_tools_plus_theme_toggleTabContent('tab-0'); } } /** * Toggle the visibility of the tab content and set active link */ function wysiwyg_tools_plus_theme_toggleTabContent (eventId) { eventId = eventId.substring(eventId.length-1, eventId.length); $('.ready-tabber').each(function (index) { if (this.id == "content-" + eventId) { // set the link as active $('.ready-tabs #tab-' + eventId).parent('li').addClass('active'); // expose active content $(this).show(); } else { //unset active class from non-event links $('.ready-tabs #tab-' + index).parent('li').removeClass('active'); //hide unactive content $(this).hide(); } }); } /** * Toggle the visibility of the accordion content */ function wysiwyg_tools_plus_theme_toggleAccordionContent(eventId) { eventId = eventId.substring(eventId.lastIndexOf('-')+1, eventId.length); $('#acc-' + eventId).toggle('fast'); } }(jQuery));