|
|
!function(a,b,c,d){a.fn.tabNavigation=function(c){var e,f,g,h,i,j=a.extend(!0,{},a.fn.tabNavigation.settings,c),k=a(this),l=a(j.context).find(j.selector.tabs),m={},n=!0,o=0,p=this,q=(new Date).getTime(),r=[],s=k.selector||"",t="."+j.namespace,u=j.namespace+"-module",v=j.className,w=j.metadata,x=j.namespace,y=j.errors,z=k.data(u),A=arguments[0],B=z!==d&&"string"==typeof A,C=[].slice.call(arguments,1);return h={initialize:function(){if(h.debug("Initializing Tabs",k),j.history){if(a.address===d)return h.error(y.state),!1;if(j.path===!1)return h.error(y.path),!1;j.apiSettings||(h.debug("No API url found, using current url"),j.apiSettings={url:j.path+"/{$tab}"}),h.verbose("Address library found adding state change event"),a.address.state(j.path).change(h.event.history.change)}a.isWindow(p)||k.on("click."+t,h.event.click),k.data(u,h)},destroy:function(){h.debug("Destroying tabs",k),k.off("."+x)},event:{click:function(){h.debug("Navigation clicked");var b=a(this).data(w.tab);b!==d?b!==e&&(j.history?a.address.value(b):h.change(b)):h.debug("No tab specified")},history:{change:function(b){var c=b.pathNames.join("/")||h.get.initialPath(),e=j.templates.determineTitle(c)||!1;h.debug("History change event",c,b),g=b,c!==d&&h.change(c),e&&a.address.title(e)}}},refresh:function(){e&&(h.debug("Refreshing tab",e),h.change(e))},cache:{read:function(a){return a!==d?m[a]:!1},add:function(a,b){a=a||e,h.debug("Adding cached content for",a),m[a]=b},remove:function(a){a=a||e,h.debug("Removing cached content for",a),delete m[a]}},change:function(c){var d=h.get.defaultPathArray(c);h.deactivate.all(),a.each(d,function(i,k){var l,m,o,p=d.slice(0,i+1),q=h.utils.arrayToPath(p),r=h.is.tab(q),s=i+1==d.length,t=b.history&&b.history.pushState,u=t&&j.ignoreFirstLoad&&n,v=a.isPlainObject(j.apiSettings),w=h.get.tabElement(q);return h.verbose("Looking for tab",k),r?(h.verbose("Tab was found",k),e=q,f=h.utils.filterArray(d,p),s?o=!0:(l=d.slice(0,i+2),m=h.utils.arrayToPath(l),o=!h.is.tab(m),h.verbose("Tab parameters found",l)),o&&v?u?(h.debug("Ignoring remote content on first tab load",q),n=!1,h.cache.add(c,w.html()),h.activate.all(q),a.proxy(j.onTabInit,w)(q,f,g)):(h.activate.navigation(q),h.content.fetch(q,c)):(h.debug("Opened local tab",q),h.activate.all(q),a.proxy(j.onTabLoad,w)(q,f,g)),!1):(h.error(y.missingTab,k),!1)})},content:{fetch:function(b,c){var i=h.get.tabElement(b),c=c||b,k=h.cache.read(c),l={dataType:"html",stateContext:i,success:function(d){h.cache.add(c,d),h.content.update(b,d),b==e?(h.debug("Content loaded",b),h.activate.tab(b)):h.debug("Content loaded in background",b),a.proxy(j.onTabInit,i)(b,f,g)},urlData:{tab:c}},m=i.data(w.promise)||!1,n=m&&"pending"===m.state();j.cache&&k?(h.debug("Showing existing content",c),h.content.update(b,k),h.activate.tab(b),a.proxy(j.onTabInit,i)(b,f,g)):n?(h.debug("Content is already loading",c),i.addClass(v.loading)):a.api!==d?(h.debug("Retrieving remote content",c),a.api(a.extend(!0,{headers:{"X-Remote":!0}},j.apiSettings,l))):h.error(y.api)},update:function(a,b){h.debug("Updating html for",a);var c=h.get.tabElement(a);c.html(b)}},activate:{all:function(a){h.activate.tab(a),h.activate.navigation(a)},tab:function(a){var b=h.get.tabElement(a);h.verbose("Showing tab content for",b),b.addClass(v.active)},navigation:function(a){var b=h.get.navElement(a);h.verbose("Activating tab navigation for",b),b.addClass(v.active)}},deactivate:{all:function(){h.deactivate.navigation(),h.deactivate.tabs()},navigation:function(){k.removeClass(v.active)},tabs:function(){l.removeClass(v.active+" "+v.loading)}},is:{tab:function(a){return a!==d?h.get.tabElement(a).size()>0:!1}},get:{initialPath:function(){return k.eq(0).data(w.tab)||l.eq(0).data(w.tab)},path:function(){return a.address.value()},defaultPathArray:function(a){return h.utils.pathToArray(h.get.defaultPath(a))},defaultPath:function(a){var b=k.filter("[data-"+w.tab+'^="'+a+'/"]').eq(0),c=b.data(w.tab)||!1;if(c){if(h.debug("Found default tab",c),o<j.maxDepth)return o++,h.get.defaultPath(c);h.error(y.recursion)}return o=0,a},navElement:function(a){return a=a||e,k.filter("[d
|