Skip to content
Permalink
Browse files

Tabs: rotation handles asynchronous loading/animations, fixes #2651

  • Loading branch information
Klaus Hartl
Klaus Hartl committed Jan 24, 2009
1 parent 53b73d6 commit 272854df860970b20dd64423ec953a0f08020a7f
Showing with 21 additions and 21 deletions.
  1. +21 −21 ui/ui.tabs.js
@@ -473,6 +473,7 @@ $.widget("ui.tabs", {

var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0],
bypassCache = callback == undefined || callback === false, url = $a.data('load.tabs');
// TODO bypassCache == false should work

callback = callback || function() {};

@@ -578,38 +579,37 @@ $.extend($.ui.tabs.prototype, {
rotation: null,
rotate: function(ms, continuing) {

continuing = continuing || false;

var self = this, t = this.options.selected;

function start() {
self.rotation = setInterval(function() {
function rotate() {
clearTimeout(self.rotation);
self.rotation = setTimeout(function() {
t = ++t < self.$tabs.length ? t : 0;
self.select(t);
}, ms);
}

function stop(event) {
if (!event || event.clientX) { // only in case of a true click
clearInterval(self.rotation);
}
}

// start interval
// start rotation
if (ms) {
start();
if (!continuing)
this.$tabs.bind(this.options.event + '.tabs', stop);
else
this.$tabs.bind(this.options.event + '.tabs', function() {
stop();
this.element.bind('tabsshow', rotate); // will not be attached twice
this.$tabs.bind(this.options.event + '.tabs', !continuing ?
function(e) {
if (e.clientX) { // in case of a true click
clearTimeout(self.rotation);
self.element.unbind('tabsshow', rotate);
}
} :
function(e) {
t = self.options.selected;
start();
});
rotate();
}
);
rotate();
}
// stop interval
// stop rotation
else {
stop();
clearTimeout(self.rotation);
this.element.unbind('tabsshow', rotate);
this.$tabs.unbind(this.options.event + '.tabs', stop);
}
}

0 comments on commit 272854d

Please sign in to comment.
You can’t perform that action at this time.