Display startup time of schedule_viewer.py
[busui.git] / js / jquery.effects.core.js
blob:a/js/jquery.effects.core.js -> blob:b/js/jquery.effects.core.js
/* /*
* jQuery UI Effects @VERSION * jQuery UI Effects @VERSION
* *
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses. * Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license * http://jquery.org/license
* *
* http://docs.jquery.com/UI/Effects/ * http://docs.jquery.com/UI/Effects/
*/ */
;jQuery.effects || (function($, undefined) { ;jQuery.effects || (function($, undefined) {
   
$.effects = {}; $.effects = {};
   
   
   
/******************************************************************************/ /******************************************************************************/
/****************************** COLOR ANIMATIONS ******************************/ /****************************** COLOR ANIMATIONS ******************************/
/******************************************************************************/ /******************************************************************************/
   
// override the animation for color styles // override the animation for color styles
$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', $.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'],
function(i, attr) { function(i, attr) {
$.fx.step[attr] = function(fx) { $.fx.step[attr] = function(fx) {
if (!fx.colorInit) { if (!fx.colorInit) {
fx.start = getColor(fx.elem, attr); fx.start = getColor(fx.elem, attr);
fx.end = getRGB(fx.end); fx.end = getRGB(fx.end);
fx.colorInit = true; fx.colorInit = true;
} }
   
fx.elem.style[attr] = 'rgb(' + fx.elem.style[attr] = 'rgb(' +
Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
}; };
}); });
   
// Color Conversion functions from highlightFade // Color Conversion functions from highlightFade
// By Blair Mitchelmore // By Blair Mitchelmore
// http://jquery.offput.ca/highlightFade/ // http://jquery.offput.ca/highlightFade/
   
// Parse strings looking for color tuples [255,255,255] // Parse strings looking for color tuples [255,255,255]
function getRGB(color) { function getRGB(color) {
var result; var result;
   
// Check if we're already dealing with an array of colors // Check if we're already dealing with an array of colors
if ( color && color.constructor == Array && color.length == 3 ) if ( color && color.constructor == Array && color.length == 3 )
return color; return color;
   
// Look for rgb(num,num,num) // Look for rgb(num,num,num)
if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
   
// Look for rgb(num%,num%,num%) // Look for rgb(num%,num%,num%)
if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
   
// Look for #a0b1c2 // Look for #a0b1c2
if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
   
// Look for #fff // Look for #fff
if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
   
// Look for rgba(0, 0, 0, 0) == transparent in Safari 3 // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
return colors['transparent']; return colors['transparent'];
   
// Otherwise, we're most likely dealing with a named color // Otherwise, we're most likely dealing with a named color
return colors[$.trim(color).toLowerCase()]; return colors[$.trim(color).toLowerCase()];
} }
   
function getColor(elem, attr) { function getColor(elem, attr) {
var color; var color;
   
do { do {
color = $.curCSS(elem, attr); color = $.curCSS(elem, attr);
   
// Keep going until we find an element that has color, or we hit the body // Keep going until we find an element that has color, or we hit the body
if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
break; break;
   
attr = "backgroundColor"; attr = "backgroundColor";
} while ( elem = elem.parentNode ); } while ( elem = elem.parentNode );
   
return getRGB(color); return getRGB(color);
}; };
   
// Some named colors to work with // Some named colors to work with
// From Interface by Stefan Petre // From Interface by Stefan Petre
// http://interface.eyecon.ro/ // http://interface.eyecon.ro/
   
var colors = { var colors = {
aqua:[0,255,255], aqua:[0,255,255],
azure:[240,255,255], azure:[240,255,255],
beige:[245,245,220], beige:[245,245,220],
black:[0,0,0], black:[0,0,0],
blue:[0,0,255], blue:[0,0,255],
brown:[165,42,42], brown:[165,42,42],
cyan:[0,255,255], cyan:[0,255,255],
darkblue:[0,0,139], darkblue:[0,0,139],
darkcyan:[0,139,139], darkcyan:[0,139,139],
darkgrey:[169,169,169], darkgrey:[169,169,169],
darkgreen:[0,100,0], darkgreen:[0,100,0],
darkkhaki:[189,183,107], darkkhaki:[189,183,107],
darkmagenta:[139,0,139], darkmagenta:[139,0,139],
darkolivegreen:[85,107,47], darkolivegreen:[85,107,47],
darkorange:[255,140,0], darkorange:[255,140,0],
darkorchid:[153,50,204], darkorchid:[153,50,204],
darkred:[139,0,0], darkred:[139,0,0],
darksalmon:[233,150,122], darksalmon:[233,150,122],
darkviolet:[148,0,211], darkviolet:[148,0,211],
fuchsia:[255,0,255], fuchsia:[255,0,255],
gold:[255,215,0], gold:[255,215,0],
green:[0,128,0], green:[0,128,0],
indigo:[75,0,130], indigo:[75,0,130],
khaki:[240,230,140], khaki:[240,230,140],
lightblue:[173,216,230], lightblue:[173,216,230],
lightcyan:[224,255,255], lightcyan:[224,255,255],
lightgreen:[144,238,144], lightgreen:[144,238,144],
lightgrey:[211,211,211], lightgrey:[211,211,211],
lightpink:[255,182,193], lightpink:[255,182,193],
lightyellow:[255,255,224], lightyellow:[255,255,224],
lime:[0,255,0], lime:[0,255,0],
magenta:[255,0,255], magenta:[255,0,255],
maroon:[128,0,0], maroon:[128,0,0],
navy:[0,0,128], navy:[0,0,128],
olive:[128,128,0], olive:[128,128,0],
orange:[255,165,0], orange:[255,165,0],
pink:[255,192,203], pink:[255,192,203],
purple:[128,0,128], purple:[128,0,128],
violet:[128,0,128], violet:[128,0,128],
red:[255,0,0], red:[255,0,0],
silver:[192,192,192], silver:[192,192,192],
white:[255,255,255], white:[255,255,255],
yellow:[255,255,0], yellow:[255,255,0],
transparent: [255,255,255] transparent: [255,255,255]
}; };
   
   
   
/******************************************************************************/ /******************************************************************************/
/****************************** CLASS ANIMATIONS ******************************/ /****************************** CLASS ANIMATIONS ******************************/
/******************************************************************************/ /******************************************************************************/
   
var classAnimationActions = ['add', 'remove', 'toggle'], var classAnimationActions = ['add', 'remove', 'toggle'],
shorthandStyles = { shorthandStyles = {
border: 1, border: 1,
borderBottom: 1, borderBottom: 1,
borderColor: 1, borderColor: 1,
borderLeft: 1, borderLeft: 1,
borderRight: 1, borderRight: 1,
borderTop: 1, borderTop: 1,
borderWidth: 1, borderWidth: 1,
margin: 1, margin: 1,
padding: 1 padding: 1
}; };
   
function getElementStyles() { function getElementStyles() {
var style = document.defaultView var style = document.defaultView
? document.defaultView.getComputedStyle(this, null) ? document.defaultView.getComputedStyle(this, null)
: this.currentStyle, : this.currentStyle,
newStyle = {}, newStyle = {},
key, key,
camelCase; camelCase;
   
// webkit enumerates style porperties // webkit enumerates style porperties
if (style && style.length && style[0] && style[style[0]]) { if (style && style.length && style[0] && style[style[0]]) {
var len = style.length; var len = style.length;
while (len--) { while (len--) {
key = style[len]; key = style[len];
if (typeof style[key] == 'string') { if (typeof style[key] == 'string') {
camelCase = key.replace(/\-(\w)/g, function(all, letter){ camelCase = key.replace(/\-(\w)/g, function(all, letter){
return letter.toUpperCase(); return letter.toUpperCase();
}); });
newStyle[camelCase] = style[key]; newStyle[camelCase] = style[key];
} }
} }
} else { } else {
for (key in style) { for (key in style) {
if (typeof style[key] === 'string') { if (typeof style[key] === 'string') {
newStyle[key] = style[key]; newStyle[key] = style[key];
} }
} }
} }
return newStyle; return newStyle;
} }
   
function filterStyles(styles) { function filterStyles(styles) {
var name, value; var name, value;
for (name in styles) { for (name in styles) {
value = styles[name]; value = styles[name];
if ( if (
// ignore null and undefined values // ignore null and undefined values
value == null || value == null ||
// ignore functions (when does this occur?) // ignore functions (when does this occur?)
$.isFunction(value) || $.isFunction(value) ||
// shorthand styles that need to be expanded // shorthand styles that need to be expanded
name in shorthandStyles || name in shorthandStyles ||
// ignore scrollbars (break in IE) // ignore scrollbars (break in IE)
(/scrollbar/).test(name) || (/scrollbar/).test(name) ||
   
// only colors or values that can be converted to numbers // only colors or values that can be converted to numbers
(!(/color/i).test(name) && isNaN(parseFloat(value))) (!(/color/i).test(name) && isNaN(parseFloat(value)))
) { ) {
delete styles[name]; delete styles[name];
} }
} }
return styles; return styles;
} }
   
function styleDifference(oldStyle, newStyle) { function styleDifference(oldStyle, newStyle) {
var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
name; name;
   
for (name in newStyle) { for (name in newStyle) {
if (oldStyle[name] != newStyle[name]) { if (oldStyle[name] != newStyle[name]) {
diff[name] = newStyle[name]; diff[name] = newStyle[name];
} }
} }
   
return diff; return diff;
} }
   
$.effects.animateClass = function(value, duration, easing, callback) { $.effects.animateClass = function(value, duration, easing, callback) {
if ($.isFunction(easing)) { if ($.isFunction(easing)) {
callback = easing; callback = easing;
easing = null; easing = null;
} }
   
return this.queue('fx', function() { return this.queue('fx', function() {
var that = $(this), var that = $(this),
originalStyleAttr = that.attr('style') || ' ', originalStyleAttr = that.attr('style') || ' ',
originalStyle = filterStyles(getElementStyles.call(this)), originalStyle = filterStyles(getElementStyles.call(this)),
newStyle, newStyle,
className = that.attr('className'); className = that.attr('className');
   
$.each(classAnimationActions, function(i, action) { $.each(classAnimationActions, function(i, action) {
if (value[action]) { if (value[action]) {
that[action + 'Class'](value[action]); that[action + 'Class'](value[action]);
} }
}); });
newStyle = filterStyles(getElementStyles.call(this)); newStyle = filterStyles(getElementStyles.call(this));
that.attr('className', className); that.attr('className', className);
   
that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() { that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() {
$.each(classAnimationActions, function(i, action) { $.each(classAnimationActions, function(i, action) {
if (value[action]) { that[action + 'Class'](value[action]); } if (value[action]) { that[action + 'Class'](value[action]); }
}); });
// work around bug in IE by clearing the cssText before setting it // work around bug in IE by clearing the cssText before setting it
if (typeof that.attr('style') == 'object') { if (typeof that.attr('style') == 'object') {
that.attr('style').cssText = ''; that.attr('style').cssText = '';
that.attr('style').cssText = originalStyleAttr; that.attr('style').cssText = originalStyleAttr;
} else { } else {
that.attr('style', originalStyleAttr); that.attr('style', originalStyleAttr);
} }
if (callback) { callback.apply(this, arguments); } if (callback) { callback.apply(this, arguments); }
}); });
   
// $.animate adds a function to the end of the queue // $.animate adds a function to the end of the queue
// but we want it at the front // but we want it at the front
var queue = $.queue(this), var queue = $.queue(this),
anim = queue.splice(queue.length - 1, 1)[0]; anim = queue.splice(queue.length - 1, 1)[0];
queue.splice(1, 0, anim); queue.splice(1, 0, anim);
$.dequeue(this); $.dequeue(this);
}); });
}; };
   
$.fn.extend({ $.fn.extend({
_addClass: $.fn.addClass, _addClass: $.fn.addClass,
addClass: function(classNames, speed, easing, callback) { addClass: function(classNames, speed, easing, callback) {
return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
}, },
   
_removeClass: $.fn.removeClass, _removeClass: $.fn.removeClass,
removeClass: function(classNames,speed,easing,callback) { removeClass: function(classNames,speed,easing,callback) {
return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
}, },
   
_toggleClass: $.fn.toggleClass, _toggleClass: $.fn.toggleClass,
toggleClass: function(classNames, force, speed, easing, callback) { toggleClass: function(classNames, force, speed, easing, callback) {
if ( typeof force == "boolean" || force === undefined ) { if ( typeof force == "boolean" || force === undefined ) {
if ( !speed ) { if ( !speed ) {
// without speed parameter; // without speed parameter;
return this._toggleClass(classNames, force); return this._toggleClass(classNames, force);
} else { } else {
return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
} }
} else { } else {
// without switch parameter; // without switch parameter;
return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
} }
}, },
   
switchClass: function(remove,add,speed,easing,callback) { switchClass: function(remove,add,speed,easing,callback) {
return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
} }
}); });
   
   
   
/******************************************************************************/ /******************************************************************************/
/*********************************** EFFECTS **********************************/ /*********************************** EFFECTS **********************************/
/******************************************************************************/ /******************************************************************************/
   
$.extend($.effects, { $.extend($.effects, {
version: "@VERSION", version: "@VERSION",
   
// Saves a set of properties in a data storage // Saves a set of properties in a data storage
save: function(element, set) { save: function(element, set) {
for(var i=0; i < set.length; i++) { for(var i=0; i < set.length; i++) {
if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
} }
}, },
   
// Restores a set of previously saved properties from a data storage // Restores a set of previously saved properties from a data storage
restore: function(element, set) { restore: function(element, set) {
for(var i=0; i < set.length; i++) { for(var i=0; i < set.length; i++) {
if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
} }
}, },
   
setMode: function(el, mode) { setMode: function(el, mode) {
if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
return mode; return mode;
}, },
   
getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
// this should be a little more flexible in the future to handle a string & hash // this should be a little more flexible in the future to handle a string & hash
var y, x; var y, x;
switch (origin[0]) { switch (origin[0]) {
case 'top': y = 0; break; case 'top': y = 0; break;
case 'middle': y = 0.5; break; case 'middle': y = 0.5; break;
case 'bottom': y = 1; break; case 'bottom': y = 1; break;
default: y = origin[0] / original.height; default: y = origin[0] / original.height;
}; };
switch (origin[1]) { switch (origin[1]) {
case 'left': x = 0; break; case 'left': x = 0; break;
case 'center': x = 0.5; break; case 'center': x = 0.5; break;
case 'right': x = 1; break; case 'right': x = 1; break;
default: x = origin[1] / original.width; default: x = origin[1] / original.width;
}; };
return {x: x, y: y}; return {x: x, y: y};
}, },
   
// Wraps the element around a wrapper that copies position properties // Wraps the element around a wrapper that copies position properties
createWrapper: function(element) { createWrapper: function(element) {
   
// if the element is already wrapped, return it // if the element is already wrapped, return it
if (element.parent().is('.ui-effects-wrapper')) { if (element.parent().is('.ui-effects-wrapper')) {
return element.parent(); return element.parent();
} }
   
// wrap the element // wrap the element
var props = { var props = {
width: element.outerWidth(true), width: element.outerWidth(true),
height: element.outerHeight(true), height: element.outerHeight(true),
'float': element.css('float') 'float': element.css('float')
}, },
wrapper = $('<div></div>') wrapper = $('<div></div>')
.addClass('ui-effects-wrapper') .addClass('ui-effects-wrapper')
.css({ .css({
fontSize: '100%', fontSize: '100%',
background: 'transparent', background: 'transparent',
border: 'none', border: 'none',
margin: 0, margin: 0,
padding: 0 padding: 0
}); });
   
element.wrap(wrapper); element.wrap(wrapper);
wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
   
// transfer positioning properties to the wrapper // transfer positioning properties to the wrapper
if (element.css('position') == 'static') { if (element.css('position') == 'static') {
wrapper.css({ position: 'relative' }); wrapper.css({ position: 'relative' });
element.css({ position: 'relative' }); element.css({ position: 'relative' });
} else { } else {
$.extend(props, { $.extend(props, {
position: element.c