2027b94179
Fixes #40,#24
11 lines
No EOL
9.4 KiB
JavaScript
11 lines
No EOL
9.4 KiB
JavaScript
/*!
|
|
* # Semantic UI 1.11.4 - Tab
|
|
* http://github.com/semantic-org/semantic-ui/
|
|
*
|
|
*
|
|
* Copyright 2014 Contributorss
|
|
* Released under the MIT license
|
|
* http://opensource.org/licenses/MIT
|
|
*
|
|
*/
|
|
!function(e,t,a,n){"use strict";e.fn.tab=function(a){var i,o,r=e(e.isFunction(this)?t:this),s=e.isPlainObject(a)?e.extend(!0,{},e.fn.tab.settings,a):e.extend({},e.fn.tab.settings),c=r.selector||"",l=(new Date).getTime(),u=[],d=arguments[0],b="string"==typeof d,g=[].slice.call(arguments,1);return r.each(function(){var a,f,h,p,m,v=s.className,y=s.metadata,T=s.selector,x=s.error,A="."+s.namespace,P="module-"+s.namespace,C=e(this),E={},S=!0,w=0,j=this,D=C.data(P);i={initialize:function(){i.debug("Initializing tab menu item",C),i.determineTabs(),i.debug("Determining tabs",s.context,f),s.auto&&i.set.auto(),e.isWindow(j)||(i.debug("Attaching tab activation events to element",C),C.on("click"+A,i.event.click)),i.instantiate()},determineTabs:function(){var t;"parent"===s.context?(C.closest(T.ui).length>0?(t=C.closest(T.ui),i.verbose("Using closest UI element for determining parent",t)):t=C,a=t.parent(),i.verbose("Determined parent element for creating context",a)):s.context?(a=e(s.context),i.verbose("Using selector for tab context",s.context,a)):a=e("body"),s.childrenOnly?(f=a.children(T.tabs),i.debug("Searching tab context children for tabs",a,f)):(f=a.find(T.tabs),i.debug("Searching tab context for tabs",a,f))},initializeHistory:function(){if(s.history){if(i.debug("Initializing page state"),e.address===n)return i.error(x.state),!1;if("state"==s.historyType){if(i.debug("Using HTML5 to manage state"),s.path===!1)return i.error(x.path),!1;e.address.history(!0).state(s.path)}e.address.bind("change",i.event.history.change)}},instantiate:function(){i.verbose("Storing instance of module",i),D=i,C.data(P,i)},destroy:function(){i.debug("Destroying tabs",C),C.removeData(P).off(A)},event:{click:function(t){var a=e(this).data(y.tab);a!==n?(s.history?(i.verbose("Updating page state",t),e.address.value(a)):(i.verbose("Changing tab",t),i.changeTab(a)),t.preventDefault()):i.debug("No tab specified")},history:{change:function(t){var a=t.pathNames.join("/")||i.get.initialPath(),o=s.templates.determineTitle(a)||!1;i.performance.display(),i.debug("History change event",a,t),m=t,a!==n&&i.changeTab(a),o&&e.address.title(o)}}},refresh:function(){h&&(i.debug("Refreshing tab",h),i.changeTab(h))},cache:{read:function(e){return e!==n?E[e]:!1},add:function(e,t){e=e||h,i.debug("Adding cached content for",e),E[e]=t},remove:function(e){e=e||h,i.debug("Removing cached content for",e),delete E[e]}},set:{auto:function(){var t="string"==typeof s.path?s.path.replace(/\/$/,"")+"/{$tab}":"/{$tab}";i.verbose("Setting up automatic tab retrieval from server",t),e.isPlainObject(s.apiSettings)?s.apiSettings.url=t:s.apiSettings={url:t}},state:function(t){e.address.value(t)}},changeTab:function(n){var o=t.history&&t.history.pushState,r=o&&s.ignoreFirstLoad&&S,c=s.auto||e.isPlainObject(s.apiSettings),l=c&&!r?i.utilities.pathToArray(n):i.get.defaultPathArray(n);n=i.utilities.arrayToPath(l),e.each(l,function(t,o){var u,d,b,g,f=l.slice(0,t+1),v=i.utilities.arrayToPath(f),y=i.is.tab(v),T=t+1==l.length,A=i.get.tabElement(v);if(i.verbose("Looking for tab",o),y){if(i.verbose("Tab was found",o),h=v,p=i.utilities.filterArray(l,f),T?g=!0:(d=l.slice(0,t+2),b=i.utilities.arrayToPath(d),g=!i.is.tab(b),g&&i.verbose("Tab parameters found",d)),g&&c)return r?(i.debug("Ignoring remote content on first tab load",v),S=!1,i.cache.add(n,A.html()),i.activate.all(v),s.onTabInit.call(A,v,p,m),s.onTabLoad.call(A,v,p,m)):(i.activate.navigation(v),i.content.fetch(v,n)),!1;i.debug("Opened local tab",v),i.activate.all(v),i.cache.read(v)||(i.cache.add(v,!0),i.debug("First time tab loaded calling tab init"),s.onTabInit.call(A,v,p,m)),s.onTabLoad.call(A,v,p,m)}else{if(-1!=n.search("/")||""===n)return i.error(x.missingTab,C,a,v),!1;if(u=e("#"+n+', a[name="'+n+'"]'),v=u.closest("[data-tab]").data("tab"),A=i.get.tabElement(v),u&&u.length>0&&v)return i.debug("No tab found, but deep anchor link present, opening parent tab"),i.activate.all(v),i.cache.read(v)||(i.cache.add(v,!0),i.debug("First time tab loaded calling tab init"),s.onTabInit.call(A,v,p,m)),!1}})},content:{fetch:function(t,a){var o,r,c=i.get.tabElement(t),l={dataType:"html",on:"now",onSuccess:function(e){i.cache.add(a,e),i.content.update(t,e),t==h?(i.debug("Content loaded",t),i.activate.tab(t)):i.debug("Content loaded in background",t),s.onTabInit.call(c,t,p,m),s.onTabLoad.call(c,t,p,m)},urlData:{tab:a}},u=c.api("get request")||!1,d=u&&"pending"===u.state();a=a||t,r=i.cache.read(a),i.activate.tab(t),s.cache&&r?(i.debug("Showing existing content",a),i.content.update(t,r),s.onTabLoad.call(c,t,p,m)):d?(i.debug("Content is already loading",a),c.addClass(v.loading)):e.api!==n?(o=e.extend(!0,{headers:{"X-Remote":!0}},s.apiSettings,l),i.debug("Retrieving remote content",a,o),c.api(o)):i.error(x.api)},update:function(e,t){i.debug("Updating html for",e);var a=i.get.tabElement(e);a.html(t)}},activate:{all:function(e){i.activate.tab(e),i.activate.navigation(e)},tab:function(e){var t=i.get.tabElement(e);i.verbose("Showing tab content for",t),t.addClass(v.active).siblings(f).removeClass(v.active+" "+v.loading)},navigation:function(e){var t=i.get.navElement(e);i.verbose("Activating tab navigation for",t,e),t.addClass(v.active).siblings(r).removeClass(v.active+" "+v.loading)}},deactivate:{all:function(){i.deactivate.navigation(),i.deactivate.tabs()},navigation:function(){r.removeClass(v.active)},tabs:function(){f.removeClass(v.active+" "+v.loading)}},is:{tab:function(e){return e!==n?i.get.tabElement(e).length>0:!1}},get:{initialPath:function(){return r.eq(0).data(y.tab)||f.eq(0).data(y.tab)},path:function(){return e.address.value()},defaultPathArray:function(e){return i.utilities.pathToArray(i.get.defaultPath(e))},defaultPath:function(e){var t=r.filter("[data-"+y.tab+'^="'+e+'/"]').eq(0),a=t.data(y.tab)||!1;if(a){if(i.debug("Found default tab",a),w<s.maxDepth)return w++,i.get.defaultPath(a);i.error(x.recursion)}else i.debug("No default tabs found for",e,f);return w=0,e},navElement:function(e){return e=e||h,r.filter("[data-"+y.tab+'="'+e+'"]')},tabElement:function(e){var t,a,n,o;return e=e||h,n=i.utilities.pathToArray(e),o=i.utilities.last(n),t=f.filter("[data-"+y.tab+'="'+o+'"]'),a=f.filter("[data-"+y.tab+'="'+e+'"]'),t.length>0?t:a},tab:function(){return h}},utilities:{filterArray:function(t,a){return e.grep(t,function(t){return-1==e.inArray(t,a)})},last:function(t){return e.isArray(t)?t[t.length-1]:!1},pathToArray:function(e){return e===n&&(e=h),"string"==typeof e?e.split("/"):[e]},arrayToPath:function(t){return e.isArray(t)?t.join("/"):!1}},setting:function(t,a){if(i.debug("Changing setting",t,a),e.isPlainObject(t))e.extend(!0,s,t);else{if(a===n)return s[t];s[t]=a}},internal:function(t,a){if(e.isPlainObject(t))e.extend(!0,i,t);else{if(a===n)return i[t];i[t]=a}},debug:function(){s.debug&&(s.performance?i.performance.log(arguments):(i.debug=Function.prototype.bind.call(console.info,console,s.name+":"),i.debug.apply(console,arguments)))},verbose:function(){s.verbose&&s.debug&&(s.performance?i.performance.log(arguments):(i.verbose=Function.prototype.bind.call(console.info,console,s.name+":"),i.verbose.apply(console,arguments)))},error:function(){i.error=Function.prototype.bind.call(console.error,console,s.name+":"),i.error.apply(console,arguments)},performance:{log:function(e){var t,a,n;s.performance&&(t=(new Date).getTime(),n=l||t,a=t-n,l=t,u.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:j,"Execution Time":a})),clearTimeout(i.performance.timer),i.performance.timer=setTimeout(i.performance.display,100)},display:function(){var t=s.name+":",a=0;l=!1,clearTimeout(i.performance.timer),e.each(u,function(e,t){a+=t["Execution Time"]}),t+=" "+a+"ms",c&&(t+=" '"+c+"'"),(console.group!==n||console.table!==n)&&u.length>0&&(console.groupCollapsed(t),console.table?console.table(u):e.each(u,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),u=[]}},invoke:function(t,a,r){var s,c,l,u=D;return a=a||g,r=j||r,"string"==typeof t&&u!==n&&(t=t.split(/[\. ]/),s=t.length-1,e.each(t,function(a,o){var r=a!=s?o+t[a+1].charAt(0).toUpperCase()+t[a+1].slice(1):t;if(e.isPlainObject(u[r])&&a!=s)u=u[r];else{if(u[r]!==n)return c=u[r],!1;if(!e.isPlainObject(u[o])||a==s)return u[o]!==n?(c=u[o],!1):(i.error(x.method,t),!1);u=u[o]}})),e.isFunction(c)?l=c.apply(r,a):c!==n&&(l=c),e.isArray(o)?o.push(l):o!==n?o=[o,l]:l!==n&&(o=l),c}},b?(D===n&&i.initialize(),i.invoke(d)):(D!==n&&D.invoke("destroy"),i.initialize())}),i&&!b&&i.initializeHistory(),o!==n?o:this},e.tab=function(){e(t).tab.apply(this,arguments)},e.fn.tab.settings={name:"Tab",namespace:"tab",debug:!1,verbose:!0,performance:!0,auto:!1,history:!1,historyType:"hash",path:!1,context:!1,childrenOnly:!1,maxDepth:25,alwaysRefresh:!1,cache:!0,ignoreFirstLoad:!1,apiSettings:!1,onTabInit:function(){},onTabLoad:function(){},templates:{determineTitle:function(){}},error:{api:"You attempted to load content without API module",method:"The method you called is not defined",missingTab:"Activated tab cannot be found for this context.",noContent:"The tab you specified is missing a content url.",path:"History enabled, but no path was specified",recursion:"Max recursive depth reached",state:"History requires Asual's Address library <https://github.com/asual/jquery-address>"},metadata:{tab:"tab",loaded:"loaded",promise:"promise"},className:{loading:"loading",active:"active"},selector:{tabs:".ui.tab",ui:".ui"}}}(jQuery,window,document); |