mirror of
https://github.com/JangoSteve/jQuery-EasyTabs.git
synced 2026-01-06 22:51:10 +01:00
13 lines
6.5 KiB
JavaScript
13 lines
6.5 KiB
JavaScript
/*
|
|
* jQuery EasyTabs plugin 2.1.0
|
|
*
|
|
* Copyright (c) 2010-2011 Steve Schwartz (JangoSteve)
|
|
*
|
|
* Dual licensed under the MIT and GPL licenses:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* Date: Sat Mar 20 20:30:00 2011 -0500
|
|
*/
|
|
(function(b){function a(f,c,e){var d=b.Event(c);f.trigger(d,e);return d.result!==false}b.fn.easyTabs=function(){b.error("easyTabs() is no longer used. Now use easytabs() -- no capitalization.")};b.fn.easytabs=function(d){var c=arguments;return this.each(function(){var f=b(this),e=f.data("easytabs");if(!e){b.fn.easytabs.methods.init.apply(f,[d]);b.fn.easytabs.methods.initHashChange.apply(f);b.fn.easytabs.methods.initCycle.apply(f)}if(b.fn.easytabs.publicMethods[d]){return b.fn.easytabs.publicMethods[d].apply(f,Array.prototype.slice.call(c,1))}})};b.fn.easytabs.defaults={animate:true,panelActiveClass:"active",tabActiveClass:"active",defaultTab:"li:first-child",animationSpeed:"normal",tabs:"> ul > li",updateHash:true,cycle:false,collapsible:false,collapsedClass:"collapsed",collapsedByDefault:true,uiTabs:false};b.fn.easytabs.methods={init:function(d){var h=this,g,c,f=b(),e,i;if(d&&d.uiTabs){h.addClass("ui-tabs");b.extend(b.fn.easytabs.defaults,{tabActiveClass:"ui-tabs-selected"})}if(d.collapsible&&d.defaultTab){b.fn.easytabs.defaults.collapsedByDefault=false}g=b.extend({},b.fn.easytabs.defaults,d);c=h.find(g.tabs);c.each(function(){targetId=b(this).children("a").attr("href").match(/#([^\?]+)/)[0].substr(1);$matchingPanel=h.find("div[id="+targetId+"]");if($matchingPanel.size()>0){f=f.add($matchingPanel.hide())}else{c=c.not(b(this))}});b("a.anchor").remove().prependTo("body");h.data("easytabs",{opts:g,skipUpdateToHash:false,tabs:c,panels:f});b.fn.easytabs.methods.setDefaultTab.apply(h);c.children("a").bind("click.easytabs",function(j){h.data("easytabs").opts.cycle=false;h.data("easytabs").skipUpdateToHash=false;$clicked=b(this);b.fn.easytabs.methods.selectTab.apply($clicked,[h]);j.preventDefault()})},loadFromData:function(){return this.data("easytabs")},setDefaultTab:function(){var k=this,h=b.fn.easytabs.methods.loadFromData.apply(k),c=h.opts,j=h.tabs,d=h.panels,g=window.location.hash.match(/^[^\?]*/)[0],i=j.find("a[href='"+g+"']").parent(),e,f;if(i.size()==1){e=i;k.data("easytabs").opts.cycle=false}else{e=j.parent().find(c.defaultTab);if(e.size()==0){b.error("The specified default tab ('"+c.defaultTab+"') could not be found in the tab set.")}}f=e.children("a").first();k.data("easytabs").defaultTab=e;k.data("easytabs").defaultTabLink=f;if(c.collapsible&&i.size()==0&&c.collapsedByDefault){e.addClass(c.collapsedClass).children().addClass(c.collapsedClass)}else{d.filter("#"+f.attr("href").match(/#([^\?]+)/)[0].substr(1)).show().addClass(c.panelActiveClass);e.addClass(c.tabActiveClass).children().addClass(c.tabActiveClass)}},selectTab:function(q,p){var f=this,d=window.location,j=d.hash.match(/^[^\?]*/)[0],k=b.fn.easytabs.methods.loadFromData.apply(q),c=k.opts,g=k.skipUpdateToHash,m=k.tabs,e=k.panels,l=e.filter(f.attr("href").match(/#([^\?]+)/)[0]),i=k.defaultTabLink,o=(c.animate)?{show:"fadeIn",hide:"fadeOut",speed:c.animationSpeed,collapse:"slideUp",uncollapse:"slideDown"}:{show:"show",hide:"hide",speed:0,collapse:"hide",uncollapse:"show"};if(c.collapsible&&!g&&(f.hasClass(c.tabActiveClass)||f.hasClass(c.collapsedClass))){e.stop(true,true);if(a(q,"easytabs:before")){m.filter("."+c.tabActiveClass).removeClass(c.tabActiveClass).children().removeClass(c.tabActiveClass);if(f.hasClass(c.collapsedClass)){f.parent().removeClass(c.collapsedClass).addClass(c.tabActiveClass).children().removeClass(c.collapsedClass).addClass(c.tabActiveClass);l.addClass(c.panelActiveClass)[o.uncollapse](o.speed,function(){q.trigger("easytabs:midTransition");if(typeof p=="function"){p()}})}else{f.parent().addClass(c.collapsedClass).children().addClass(c.collapsedClass);l.removeClass(c.panelActiveClass)[o.collapse](o.speed,function(){q.trigger("easytabs:midTransition");if(typeof p=="function"){p()}})}}}else{if(!f.hasClass(c.tabActiveClass)||!l.hasClass(c.panelActiveClass)){e.stop(true,true);if(a(q,"easytabs:before")){var h=e.filter(":visible"),n=function(){l[o.show](o.speed,function(){q.data("easytabs").tabs=m;q.data("easytabs").panels=e;q.trigger("easytabs:after");if(typeof p=="function"){p()}})};m.filter("."+c.tabActiveClass).removeClass(c.tabActiveClass).children().removeClass(c.tabActiveClass);m.filter("."+c.collapsedClass).removeClass(c.collapsedClass).children().removeClass(c.collapsedClass);f.parent().addClass(c.tabActiveClass).children().addClass(c.tabActiveClass);e.filter("."+c.panelActiveClass).removeClass(c.panelActiveClass);l.addClass(c.panelActiveClass);q.trigger("easytabs:midTransition");if(c.updateHash&&!g){window.location.hash=f.attr("href")}else{q.data("easytabs").skipUpdateToHash=false}if(h.size()>0){h[o.hide](o.speed,n)}else{l[o.uncollapse](o.speed,n)}}}}},selectTabFromHashChange:function(){var i=this,g=b.fn.easytabs.methods.loadFromData.apply(i),e=g.opts,c=g.tabs,d=g.defaultTab,j=g.defaultTabLink,h=window.location.hash.match(/^[^\?]*/)[0],f=c.find("a[href='"+h+"']");if(e.updateHash){if(f.size()>0){i.data("easytabs").skipUpdateToHash=true;b.fn.easytabs.methods.selectTab.apply(f,[i])}else{if(h==""&&!d.hasClass(e.tabActiveClass)&&!e.cycle){i.data("easytabs").skipUpdateToHash=true;b.fn.easytabs.methods.selectTab.apply(j,[i])}}}},cycleTabs:function(d){var g=this,f=b.fn.easytabs.methods.loadFromData.apply(g),e=f.opts,c=f.tabs;if(e.cycle){d=d%c.size();$tab=b(c[d]).children("a").first();g.data("easytabs").skipUpdateToHash=true;b.fn.easytabs.methods.selectTab.apply($tab,[g,function(){setTimeout(function(){b.fn.easytabs.methods.cycleTabs.apply(g,[d+1])},e.cycle)}])}},initHashChange:function(){var c=this;if(typeof b(window).hashchange=="function"){b(window).hashchange(function(){b.fn.easytabs.methods.selectTabFromHashChange.apply(c)})}else{if(b.address&&typeof b.address.change=="function"){b.address.change(function(){b.fn.easytabs.methods.selectTabFromHashChange.apply(c)})}}},initCycle:function(){var h=this,g=b.fn.easytabs.methods.loadFromData.apply(h),f=g.opts,d=g.tabs,e=g.defaultTab,c;if(f.cycle){c=d.index(e);setTimeout(function(){b.fn.easytabs.methods.cycleTabs.apply(h,[c+1])},f.cycle)}}};b.fn.easytabs.publicMethods={select:function(d){var g=this,f=b.fn.easytabs.methods.loadFromData.apply(g),c=f.tabs,e;if((e=c.filter(d)).size()==0){if((e=c.find("a[href='"+d+"']")).size()==0){if((e=c.find("a"+d)).size()==0){b.error("Tab '"+d+"' does not exist in tab set")}}}else{e=e.children("a").first()}b.fn.easytabs.methods.selectTab.apply(e,[g])}}})(jQuery);
|