Skip to content

Instantly share code, notes, and snippets.

@danrcoull
Last active November 18, 2016 16:09
Show Gist options
  • Select an option

  • Save danrcoull/ccfad47afaf10e09fc9f8e6e34f279d5 to your computer and use it in GitHub Desktop.

Select an option

Save danrcoull/ccfad47afaf10e09fc9f8e6e34f279d5 to your computer and use it in GitHub Desktop.

Revisions

  1. danrcoull revised this gist Oct 24, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Foundation6-TabToAccordion.js
    Original file line number Diff line number Diff line change
    @@ -148,4 +148,4 @@ var tabsToAccordian = {
    }
    }

    tabsToAccordian.innit();
    tabsToAccordian.init();
  2. danrcoull renamed this gist Oct 24, 2016. 1 changed file with 0 additions and 0 deletions.
  3. danrcoull renamed this gist Oct 24, 2016. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. danrcoull revised this gist Oct 24, 2016. 1 changed file with 2 additions and 8 deletions.
    10 changes: 2 additions & 8 deletions Foundatiion6-TabToAccordion
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    Add the below To any Foundation 6 theme and change the iniialUlClass to whatever your tab ul class is.
    ## Description Add the below To any Foundation 6 theme and change the iniialUlClass to whatever your tab ul class is.
    ## Author : Daniel Coull <[email protected]>

    ```js
    var tabsToAccordian = {

    initialUlClass: '.easytabs',
    @@ -148,10 +148,4 @@ var tabsToAccordian = {
    }
    }

    ```

    Then call the class with

    ```js
    tabsToAccordian.innit();
    ```
  5. danrcoull created this gist Oct 24, 2016.
    157 changes: 157 additions & 0 deletions Foundatiion6-TabToAccordion
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,157 @@
    Add the below To any Foundation 6 theme and change the iniialUlClass to whatever your tab ul class is.

    ```js
    var tabsToAccordian = {

    initialUlClass: '.easytabs',

    accordian: null,
    tabs:null,

    activeClass: 'is-active',

    accordianUlClass: 'accordion',
    accordianUlAttr: 'data-accordion',

    accordianItemAttr: 'data-accordion-item',
    accordianItemClass: 'accordion-item',

    accordianTitleClass: 'accordion-title',

    accordianContentClass: 'accordion-content',
    accordianContentAttr: 'data-tab-content',

    tabsUlClass: 'tabs',
    tabsUlAttr: 'data-tabs',

    tabsItemClass : 'tabs-title',
    tabsContentClass: 'tabs-panel',
    tabsMainContainer: 'tabs-content',

    init : function() {
    if (Foundation.MediaQuery.current == 'small') {
    this.toAccordian();
    }else
    {
    this.toTabs();
    }
    },
    toTabs: function() {
    if(!$j(this.initialUlClass).hasClass(this.tabsUlClass)) {

    this.destroyActive();

    //start at the main ul
    $j(this.initialUlClass)
    .removeClass(this.accordianUlClass)
    .addClass(this.tabsUlClass)
    .removeAttr(this.accordianUlAttr)
    .removeAttr('role')
    .attr(this.tabsUlAttr, '');

    $j('.'+this.accordianItemClass).each(function (index) {

    console.log(index);
    $j(this)
    .removeClass(tabsToAccordian.accordianItemClass)
    .removeClass(tabsToAccordian.activeClass)
    .removeAttr('role')
    .removeAttr(tabsToAccordian.accordianItemAttr)
    .addClass(tabsToAccordian.tabsItemClass);

    tabsToAccordian.addActive(this, index);

    //get the corrisponding content by index (there should be x tabs x panels)
    var corrispondingContent = $j('.'+tabsToAccordian.accordianContentClass).eq(0);

    corrispondingContent
    .removeClass(tabsToAccordian.accordianContentClass)
    .removeClass(tabsToAccordian.activeClass)
    .removeAttr(tabsToAccordian.accordianContentAttr)
    .removeAttr('role')
    .addClass(tabsToAccordian.tabsContentClass);

    tabsToAccordian.addActive('#'+corrispondingContent.attr('id'), index)

    $j(this).find('a').removeAttr('role aria-selected aria-expanded')
    .removeClass(tabsToAccordian.accordianTitleClass);

    $j('.' + tabsToAccordian.tabsMainContainer).append(corrispondingContent);

    });
    this.tabs = new Foundation.Tabs($j(this.initialUlClass));
    }
    },
    toAccordian:function() {

    if(!$j(this.initialUlClass).hasClass(this.accordianUlClass)) {

    this.destroyActive();

    //start at the main ul
    $j(this.initialUlClass)
    .removeClass(this.tabsUlClass)
    .addClass(this.accordianUlClass)
    .removeAttr(this.tabsUlAttr)
    .removeAttr('role')
    .attr(this.accordianUlAttr, '');
    //then start at the titles

    $j('.'+this.tabsItemClass).each(function (index) {

    //main li construct
    $j(this)
    .removeClass(tabsToAccordian.tabsItemClass )
    .removeClass(tabsToAccordian.activeClass)
    .removeAttr('style')
    .attr(tabsToAccordian.accordianItemAttr, '')
    .addClass(tabsToAccordian.accordianItemClass);

    tabsToAccordian.addActive(this, index);

    // get the corrisponding content by index (there should be x tabs x panels)
    var corrispondingContent = $j('.'+tabsToAccordian.tabsContentClass).eq(0);



    //mdify class and attr
    corrispondingContent
    .addClass(tabsToAccordian.accordianContentClass)
    .attr(tabsToAccordian.accordianContentAttr, '')
    .removeAttr('role')
    .removeClass(tabsToAccordian.tabsContentClass);

    console.log(corrispondingContent);

    //add the class to the title
    $j(this).find('a')
    .removeAttr('role aria-selected aria-expanded')
    .addClass(tabsToAccordian.accordianTitleClass)
    .after(corrispondingContent);
    });

    var options = {multiExpand: false, allowAllClosed: true};
    this.accordian = new Foundation.Accordion($j(this.initialUlClass), options);
    }
    },
    destroyActive : function(){
    //destroy original component
    $j(this.initialUlClass).foundation('destroy');
    return this;
    },
    addActive : function(element, index) {
    if(index == 0)
    {
    $j(element).addClass('is-active');
    }
    return this;
    }
    }

    ```

    Then call the class with

    ```js
    tabsToAccordian.innit();
    ```