mirror of https://github.com/1099438829/macUI.git
718 lines
26 KiB
JavaScript
718 lines
26 KiB
JavaScript
/*
|
|
* Interface elements for jQuery - http://interface.eyecon.ro
|
|
*
|
|
* Copyright (c) 2006 Stefan Petre
|
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
|
* and GPL (GPL-LICENSE.txt) licenses.
|
|
*/
|
|
jQuery.iUtil = {
|
|
getPosition: function(e) {
|
|
var x = 0;
|
|
var y = 0;
|
|
var restoreStyle = false;
|
|
var es = e.style;
|
|
if (jQuery(e).css('display') == 'none') {
|
|
oldVisibility = es.visibility;
|
|
oldPosition = es.position;
|
|
es.visibility = 'hidden';
|
|
es.display = 'block';
|
|
es.position = 'absolute';
|
|
restoreStyle = true
|
|
}
|
|
var el = e;
|
|
while (el) {
|
|
x += el.offsetLeft + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderLeftWidth) || 0: 0);
|
|
y += el.offsetTop + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderTopWidth) || 0: 0);
|
|
el = el.offsetParent
|
|
}
|
|
el = e;
|
|
while (el && el.tagName && el.tagName.toLowerCase() != 'body') {
|
|
x -= el.scrollLeft || 0;
|
|
y -= el.scrollTop || 0;
|
|
el = el.parentNode
|
|
}
|
|
if (restoreStyle) {
|
|
es.display = 'none';
|
|
es.position = oldPosition;
|
|
es.visibility = oldVisibility
|
|
}
|
|
return {
|
|
x: x,
|
|
y: y
|
|
}
|
|
},
|
|
getPositionLite: function(el) {
|
|
var x = 0,
|
|
y = 0;
|
|
while (el) {
|
|
x += el.offsetLeft || 0;
|
|
y += el.offsetTop || 0;
|
|
el = el.offsetParent
|
|
}
|
|
return {
|
|
x: x,
|
|
y: y
|
|
}
|
|
},
|
|
getSize: function(e) {
|
|
var w = jQuery.css(e, 'width');
|
|
var h = jQuery.css(e, 'height');
|
|
var wb = 0;
|
|
var hb = 0;
|
|
var es = e.style;
|
|
if (jQuery(e).css('display') != 'none') {
|
|
wb = e.offsetWidth;
|
|
hb = e.offsetHeight
|
|
} else {
|
|
oldVisibility = es.visibility;
|
|
oldPosition = es.position;
|
|
es.visibility = 'hidden';
|
|
es.display = 'block';
|
|
es.position = 'absolute';
|
|
wb = e.offsetWidth;
|
|
hb = e.offsetHeight;
|
|
es.display = 'none';
|
|
es.position = oldPosition;
|
|
es.visibility = oldVisibility
|
|
}
|
|
return {
|
|
w: w,
|
|
h: h,
|
|
wb: wb,
|
|
hb: hb
|
|
}
|
|
},
|
|
getSizeLite: function(el) {
|
|
return {
|
|
wb: el.offsetWidth || 0,
|
|
hb: el.offsetHeight || 0
|
|
}
|
|
},
|
|
getClient: function(e) {
|
|
var h,
|
|
w,
|
|
de;
|
|
if (e) {
|
|
w = e.clientWidth;
|
|
h = e.clientHeight
|
|
} else {
|
|
de = document.documentElement;
|
|
w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
|
|
h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight
|
|
}
|
|
return {
|
|
w: w,
|
|
h: h
|
|
}
|
|
},
|
|
getScroll: function(e) {
|
|
var t,
|
|
l,
|
|
w,
|
|
h,
|
|
iw,
|
|
ih;
|
|
if (e && e.nodeName.toLowerCase() != 'body') {
|
|
t = e.scrollTop;
|
|
l = e.scrollLeft;
|
|
w = e.scrollWidth;
|
|
h = e.scrollHeight;
|
|
iw = 0;
|
|
ih = 0
|
|
} else {
|
|
if (document.documentElement && document.documentElement.scrollTop) {
|
|
t = document.documentElement.scrollTop;
|
|
l = document.documentElement.scrollLeft;
|
|
w = document.documentElement.scrollWidth;
|
|
h = document.documentElement.scrollHeight
|
|
} else if (document.body) {
|
|
t = document.body.scrollTop;
|
|
l = document.body.scrollLeft;
|
|
w = document.body.scrollWidth;
|
|
h = document.body.scrollHeight
|
|
}
|
|
iw = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
|
|
ih = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
|
|
}
|
|
return {
|
|
t: t,
|
|
l: l,
|
|
w: w,
|
|
h: h,
|
|
iw: iw,
|
|
ih: ih
|
|
}
|
|
},
|
|
getMargins: function(e, toInteger) {
|
|
var el = jQuery(e);
|
|
var t = el.css('marginTop') || '';
|
|
var r = el.css('marginRight') || '';
|
|
var b = el.css('marginBottom') || '';
|
|
var l = el.css('marginLeft') || '';
|
|
if (toInteger) return {
|
|
t: parseInt(t) || 0,
|
|
r: parseInt(r) || 0,
|
|
b: parseInt(b) || 0,
|
|
l: parseInt(l)
|
|
};
|
|
else return {
|
|
t: t,
|
|
r: r,
|
|
b: b,
|
|
l: l
|
|
}
|
|
},
|
|
getPadding: function(e, toInteger) {
|
|
var el = jQuery(e);
|
|
var t = el.css('paddingTop') || '';
|
|
var r = el.css('paddingRight') || '';
|
|
var b = el.css('paddingBottom') || '';
|
|
var l = el.css('paddingLeft') || '';
|
|
if (toInteger) return {
|
|
t: parseInt(t) || 0,
|
|
r: parseInt(r) || 0,
|
|
b: parseInt(b) || 0,
|
|
l: parseInt(l)
|
|
};
|
|
else return {
|
|
t: t,
|
|
r: r,
|
|
b: b,
|
|
l: l
|
|
}
|
|
},
|
|
getBorder: function(e, toInteger) {
|
|
var el = jQuery(e);
|
|
var t = el.css('borderTopWidth') || '';
|
|
var r = el.css('borderRightWidth') || '';
|
|
var b = el.css('borderBottomWidth') || '';
|
|
var l = el.css('borderLeftWidth') || '';
|
|
if (toInteger) return {
|
|
t: parseInt(t) || 0,
|
|
r: parseInt(r) || 0,
|
|
b: parseInt(b) || 0,
|
|
l: parseInt(l) || 0
|
|
};
|
|
else return {
|
|
t: t,
|
|
r: r,
|
|
b: b,
|
|
l: l
|
|
}
|
|
},
|
|
getPointer: function(event) {
|
|
var x = event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) || 0;
|
|
var y = event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) || 0;
|
|
return {
|
|
x: x,
|
|
y: y
|
|
}
|
|
},
|
|
traverseDOM: function(nodeEl, func) {
|
|
func(nodeEl);
|
|
nodeEl = nodeEl.firstChild;
|
|
while (nodeEl) {
|
|
jQuery.iUtil.traverseDOM(nodeEl, func);
|
|
nodeEl = nodeEl.nextSibling
|
|
}
|
|
},
|
|
purgeEvents: function(nodeEl) {
|
|
jQuery.iUtil.traverseDOM(nodeEl,
|
|
function(el) {
|
|
for (var attr in el) {
|
|
if (typeof el[attr] === 'function') {
|
|
el[attr] = null
|
|
}
|
|
}
|
|
})
|
|
},
|
|
centerEl: function(el, axis) {
|
|
var clientScroll = $.iUtil.getScroll();
|
|
var windowSize = $.iUtil.getSize(el);
|
|
if (!axis || axis == 'vertically') $(el).css({
|
|
top: clientScroll.t + ((Math.max(clientScroll.h, clientScroll.ih) - clientScroll.t - windowSize.hb) / 2) + 'px'
|
|
});
|
|
if (!axis || axis == 'horizontally') $(el).css({
|
|
left: clientScroll.l + ((Math.max(clientScroll.w, clientScroll.iw) - clientScroll.l - windowSize.wb) / 2) + 'px'
|
|
})
|
|
},
|
|
fixPNG: function(el, emptyGIF) {
|
|
var images = $('img[@src*="png"]', el || document),
|
|
png;
|
|
images.each(function() {
|
|
png = this.src;
|
|
this.src = emptyGIF;
|
|
this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png + "')"
|
|
})
|
|
}
|
|
}; [].indexOf || (Array.prototype.indexOf = function(v, n) {
|
|
n = (n == null) ? 0: n;
|
|
var m = this.length;
|
|
for (var i = n; i < m; i++) if (this[i] == v) return i;
|
|
return - 1
|
|
});
|
|
jQuery.fxCheckTag = function(e) {
|
|
if (/^tr$|^td$|^tbody$|^caption$|^thead$|^tfoot$|^col$|^colgroup$|^th$|^body$|^header$|^script$|^frame$|^frameset$|^option$|^optgroup$|^meta$/i.test(e.nodeName)) return false;
|
|
else return true
|
|
};
|
|
jQuery.fx.destroyWrapper = function(e, old) {
|
|
var c = e.firstChild;
|
|
var cs = c.style;
|
|
cs.position = old.position;
|
|
cs.marginTop = old.margins.t;
|
|
cs.marginLeft = old.margins.l;
|
|
cs.marginBottom = old.margins.b;
|
|
cs.marginRight = old.margins.r;
|
|
cs.top = old.top + 'px';
|
|
cs.left = old.left + 'px';
|
|
e.parentNode.insertBefore(c, e);
|
|
e.parentNode.removeChild(e)
|
|
};
|
|
jQuery.fx.buildWrapper = function(e) {
|
|
if (!jQuery.fxCheckTag(e)) return false;
|
|
var t = jQuery(e);
|
|
var es = e.style;
|
|
var restoreStyle = false;
|
|
var oldStyle = {};
|
|
oldStyle.position = t.css('position');
|
|
if (t.css('display') == 'none') {
|
|
oldVisibility = t.css('visibility');
|
|
es.visibility = 'hidden';
|
|
es.display = '';
|
|
restoreStyle = true
|
|
}
|
|
oldStyle.sizes = jQuery.iUtil.getSize(e);
|
|
oldStyle.margins = jQuery.iUtil.getMargins(e);
|
|
var oldFloat = e.currentStyle ? e.currentStyle.styleFloat: t.css('float');
|
|
oldStyle.top = parseInt(t.css('top')) || 0;
|
|
oldStyle.left = parseInt(t.css('left')) || 0;
|
|
var wid = 'w_' + parseInt(Math.random() * 10000);
|
|
var wr = document.createElement(/^img$|^br$|^input$|^hr$|^select$|^textarea$|^object$|^iframe$|^button$|^form$|^table$|^ul$|^dl$|^ol$/i.test(e.nodeName) ? 'div': e.nodeName);
|
|
jQuery.attr(wr, 'id', wid);
|
|
wr.className = 'fxWrapper';
|
|
var wrs = wr.style;
|
|
var top = 0;
|
|
var left = 0;
|
|
if (oldStyle.position == 'relative' || oldStyle.position == 'absolute') {
|
|
top = oldStyle.top;
|
|
left = oldStyle.left
|
|
}
|
|
wrs.display = 'none';
|
|
wrs.top = top + 'px';
|
|
wrs.left = left + 'px';
|
|
wrs.position = oldStyle.position != 'relative' && oldStyle.position != 'absolute' ? 'relative': oldStyle.position;
|
|
wrs.overflow = 'hidden';
|
|
wrs.height = oldStyle.sizes.hb + 'px';
|
|
wrs.width = oldStyle.sizes.wb + 'px';
|
|
wrs.marginTop = oldStyle.margins.t;
|
|
wrs.marginRight = oldStyle.margins.r;
|
|
wrs.marginBottom = oldStyle.margins.b;
|
|
wrs.marginLeft = oldStyle.margins.l;
|
|
if (jQuery.browser.msie) {
|
|
wrs.styleFloat = oldFloat
|
|
} else {
|
|
wrs.cssFloat = oldFloat
|
|
}
|
|
e.parentNode.insertBefore(wr, e);
|
|
es.marginTop = '0px';
|
|
es.marginRight = '0px';
|
|
es.marginBottom = '0px';
|
|
es.marginLeft = '0px';
|
|
es.position = 'absolute';
|
|
es.listStyle = 'none';
|
|
es.top = '0px';
|
|
es.left = '0px';
|
|
if (restoreStyle) {
|
|
es.display = 'none';
|
|
es.visibility = oldVisibility
|
|
}
|
|
wr.appendChild(e);
|
|
wrs.display = 'block';
|
|
return {
|
|
oldStyle: oldStyle,
|
|
wrapper: jQuery(wr)
|
|
}
|
|
};
|
|
jQuery.fx.namedColors = {
|
|
aqua: [0, 255, 255],
|
|
azure: [240, 255, 255],
|
|
beige: [245, 245, 220],
|
|
black: [0, 0, 0],
|
|
blue: [0, 0, 255],
|
|
brown: [165, 42, 42],
|
|
cyan: [0, 255, 255],
|
|
darkblue: [0, 0, 139],
|
|
darkcyan: [0, 139, 139],
|
|
darkgrey: [169, 169, 169],
|
|
darkgreen: [0, 100, 0],
|
|
darkkhaki: [189, 183, 107],
|
|
darkmagenta: [139, 0, 139],
|
|
darkolivegreen: [85, 107, 47],
|
|
darkorange: [255, 140, 0],
|
|
darkorchid: [153, 50, 204],
|
|
darkred: [139, 0, 0],
|
|
darksalmon: [233, 150, 122],
|
|
darkviolet: [148, 0, 211],
|
|
fuchsia: [255, 0, 255],
|
|
gold: [255, 215, 0],
|
|
green: [0, 128, 0],
|
|
indigo: [75, 0, 130],
|
|
khaki: [240, 230, 140],
|
|
lightblue: [173, 216, 230],
|
|
lightcyan: [224, 255, 255],
|
|
lightgreen: [144, 238, 144],
|
|
lightgrey: [211, 211, 211],
|
|
lightpink: [255, 182, 193],
|
|
lightyellow: [255, 255, 224],
|
|
lime: [0, 255, 0],
|
|
magenta: [255, 0, 255],
|
|
maroon: [128, 0, 0],
|
|
navy: [0, 0, 128],
|
|
olive: [128, 128, 0],
|
|
orange: [255, 165, 0],
|
|
pink: [255, 192, 203],
|
|
purple: [128, 0, 128],
|
|
red: [255, 0, 0],
|
|
silver: [192, 192, 192],
|
|
white: [255, 255, 255],
|
|
yellow: [255, 255, 0]
|
|
};
|
|
jQuery.fx.parseColor = function(color, notColor) {
|
|
if (jQuery.fx.namedColors[color]) return {
|
|
r: jQuery.fx.namedColors[color][0],
|
|
g: jQuery.fx.namedColors[color][1],
|
|
b: jQuery.fx.namedColors[color][2]
|
|
};
|
|
else if (result = /^rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)$/.exec(color)) return {
|
|
r: parseInt(result[1]),
|
|
g: parseInt(result[2]),
|
|
b: parseInt(result[3])
|
|
};
|
|
else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)$/.exec(color)) return {
|
|
r: parseFloat(result[1]) * 2.55,
|
|
g: parseFloat(result[2]) * 2.55,
|
|
b: parseFloat(result[3]) * 2.55
|
|
};
|
|
else if (result = /^#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/.exec(color)) return {
|
|
r: parseInt("0x" + result[1] + result[1]),
|
|
g: parseInt("0x" + result[2] + result[2]),
|
|
b: parseInt("0x" + result[3] + result[3])
|
|
};
|
|
else if (result = /^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/.exec(color)) return {
|
|
r: parseInt("0x" + result[1]),
|
|
g: parseInt("0x" + result[2]),
|
|
b: parseInt("0x" + result[3])
|
|
};
|
|
else return notColor == true ? false: {
|
|
r: 255,
|
|
g: 255,
|
|
b: 255
|
|
}
|
|
};
|
|
jQuery.fx.cssProps = {
|
|
borderBottomWidth: 1,
|
|
borderLeftWidth: 1,
|
|
borderRightWidth: 1,
|
|
borderTopWidth: 1,
|
|
bottom: 1,
|
|
fontSize: 1,
|
|
height: 1,
|
|
left: 1,
|
|
letterSpacing: 1,
|
|
lineHeight: 1,
|
|
marginBottom: 1,
|
|
marginLeft: 1,
|
|
marginRight: 1,
|
|
marginTop: 1,
|
|
maxHeight: 1,
|
|
maxWidth: 1,
|
|
minHeight: 1,
|
|
minWidth: 1,
|
|
opacity: 1,
|
|
outlineOffset: 1,
|
|
outlineWidth: 1,
|
|
paddingBottom: 1,
|
|
paddingLeft: 1,
|
|
paddingRight: 1,
|
|
paddingTop: 1,
|
|
right: 1,
|
|
textIndent: 1,
|
|
top: 1,
|
|
width: 1,
|
|
zIndex: 1
|
|
};
|
|
jQuery.fx.colorCssProps = {
|
|
backgroundColor: 1,
|
|
borderBottomColor: 1,
|
|
borderLeftColor: 1,
|
|
borderRightColor: 1,
|
|
borderTopColor: 1,
|
|
color: 1,
|
|
outlineColor: 1
|
|
};
|
|
jQuery.fx.cssSides = ['Top', 'Right', 'Bottom', 'Left'];
|
|
jQuery.fx.cssSidesEnd = {
|
|
'borderWidth': ['border', 'Width'],
|
|
'borderColor': ['border', 'Color'],
|
|
'margin': ['margin', ''],
|
|
'padding': ['padding', '']
|
|
};
|
|
jQuery.fn.extend({
|
|
animate: function(prop, speed, easing, callback) {
|
|
return this.queue(function() {
|
|
var opt = jQuery.speed(speed, easing, callback);
|
|
var e = new jQuery.fxe(this, opt, prop)
|
|
})
|
|
},
|
|
pause: function(speed, callback) {
|
|
return this.queue(function() {
|
|
var opt = jQuery.speed(speed, callback);
|
|
var e = new jQuery.pause(this, opt)
|
|
})
|
|
},
|
|
stop: function(step) {
|
|
return this.each(function() {
|
|
if (this.animationHandler) jQuery.stopAnim(this, step)
|
|
})
|
|
},
|
|
stopAll: function(step) {
|
|
return this.each(function() {
|
|
if (this.animationHandler) jQuery.stopAnim(this, step);
|
|
if (this.queue && this.queue['fx']) this.queue.fx = []
|
|
})
|
|
}
|
|
});
|
|
jQuery.extend({
|
|
pause: function(elem, options) {
|
|
var z = this,
|
|
values;
|
|
z.step = function() {
|
|
if (jQuery.isFunction(options.complete)) options.complete.apply(elem)
|
|
};
|
|
z.timer = setInterval(function() {
|
|
z.step()
|
|
},
|
|
options.duration);
|
|
elem.animationHandler = z
|
|
},
|
|
easing: {
|
|
linear: function(p, n, firstNum, delta, duration) {
|
|
return (( - Math.cos(p * Math.PI) / 2) + 0.5) * delta + firstNum
|
|
}
|
|
},
|
|
fxe: function(elem, options, prop) {
|
|
var z = this,
|
|
values;
|
|
var y = elem.style;
|
|
var oldOverflow = jQuery.css(elem, "overflow");
|
|
var oldDisplay = jQuery.css(elem, "display");
|
|
var props = {};
|
|
z.startTime = (new Date()).getTime();
|
|
options.easing = options.easing && jQuery.easing[options.easing] ? options.easing: 'linear';
|
|
z.getValues = function(tp, vp) {
|
|
if (jQuery.fx.cssProps[tp]) {
|
|
if (vp == 'show' || vp == 'hide' || vp == 'toggle') {
|
|
if (!elem.orig) elem.orig = {};
|
|
var r = parseFloat(jQuery.css(elem, tp));
|
|
elem.orig[tp] = r && r > -10000 ? r: (parseFloat(jQuery.css(elem, tp)) || 0);
|
|
vp = vp == 'toggle' ? (oldDisplay == 'none' ? 'show': 'hide') : vp;
|
|
options[vp] = true;
|
|
props[tp] = vp == 'show' ? [0, elem.orig[tp]] : [elem.orig[tp], 0];
|
|
if (tp != 'opacity') y[tp] = props[tp][0] + (tp != 'zIndex' && tp != 'fontWeight' ? 'px': '');
|
|
else jQuery.attr(y, "opacity", props[tp][0])
|
|
} else {
|
|
props[tp] = [parseFloat(jQuery.css(elem, tp)), parseFloat(vp) || 0]
|
|
}
|
|
} else if (jQuery.fx.colorCssProps[tp]) props[tp] = [jQuery.fx.parseColor(jQuery.css(elem, tp)), jQuery.fx.parseColor(vp)];
|
|
else if (/^margin$|padding$|border$|borderColor$|borderWidth$/i.test(tp)) {
|
|
var m = vp.replace(/\s+/g, ' ').replace(/rgb\s*\(\s*/g, 'rgb(').replace(/\s*,\s*/g, ',').replace(/\s*\)/g, ')').match(/([^\s]+)/g);
|
|
switch (tp) {
|
|
case 'margin':
|
|
case 'padding':
|
|
case 'borderWidth':
|
|
case 'borderColor':
|
|
m[3] = m[3] || m[1] || m[0];
|
|
m[2] = m[2] || m[0];
|
|
m[1] = m[1] || m[0];
|
|
for (var i = 0; i < jQuery.fx.cssSides.length; i++) {
|
|
var nmp = jQuery.fx.cssSidesEnd[tp][0] + jQuery.fx.cssSides[i] + jQuery.fx.cssSidesEnd[tp][1];
|
|
props[nmp] = tp == 'borderColor' ? [jQuery.fx.parseColor(jQuery.css(elem, nmp)), jQuery.fx.parseColor(m[i])] : [parseFloat(jQuery.css(elem, nmp)), parseFloat(m[i])]
|
|
}
|
|
break;
|
|
case 'border':
|
|
for (var i = 0; i < m.length; i++) {
|
|
var floatVal = parseFloat(m[i]);
|
|
var sideEnd = !isNaN(floatVal) ? 'Width': (!/transparent|none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset/i.test(m[i]) ? 'Color': false);
|
|
if (sideEnd) {
|
|
for (var j = 0; j < jQuery.fx.cssSides.length; j++) {
|
|
nmp = 'border' + jQuery.fx.cssSides[j] + sideEnd;
|
|
props[nmp] = sideEnd == 'Color' ? [jQuery.fx.parseColor(jQuery.css(elem, nmp)), jQuery.fx.parseColor(m[i])] : [parseFloat(jQuery.css(elem, nmp)), floatVal]
|
|
}
|
|
} else {
|
|
y['borderStyle'] = m[i]
|
|
}
|
|
}
|
|
break
|
|
}
|
|
} else {
|
|
y[tp] = vp
|
|
}
|
|
return false
|
|
};
|
|
for (p in prop) {
|
|
if (p == 'style') {
|
|
var newStyles = jQuery.parseStyle(prop[p]);
|
|
for (np in newStyles) {
|
|
this.getValues(np, newStyles[np])
|
|
}
|
|
} else if (p == 'className') {
|
|
if (document.styleSheets) for (var i = 0; i < document.styleSheets.length; i++) {
|
|
var cssRules = document.styleSheets[i].cssRules || document.styleSheets[i].rules || null;
|
|
if (cssRules) {
|
|
for (var j = 0; j < cssRules.length; j++) {
|
|
if (cssRules[j].selectorText == '.' + prop[p]) {
|
|
var rule = new RegExp('\.' + prop[p] + ' {');
|
|
var styles = cssRules[j].style.cssText;
|
|
var newStyles = jQuery.parseStyle(styles.replace(rule, '').replace(/}/g, ''));
|
|
for (np in newStyles) {
|
|
this.getValues(np, newStyles[np])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
this.getValues(p, prop[p])
|
|
}
|
|
}
|
|
y.display = oldDisplay == 'none' ? 'block': oldDisplay;
|
|
y.overflow = 'hidden';
|
|
z.step = function() {
|
|
var t = (new Date()).getTime();
|
|
if (t > options.duration + z.startTime) {
|
|
clearInterval(z.timer);
|
|
z.timer = null;
|
|
for (p in props) {
|
|
if (p == "opacity") jQuery.attr(y, "opacity", props[p][1]);
|
|
else if (typeof props[p][1] == 'object') y[p] = 'rgb(' + props[p][1].r + ',' + props[p][1].g + ',' + props[p][1].b + ')';
|
|
else y[p] = props[p][1] + (p != 'zIndex' && p != 'fontWeight' ? 'px': '')
|
|
}
|
|
if (options.hide || options.show) for (var p in elem.orig) if (p == "opacity") jQuery.attr(y, p, elem.orig[p]);
|
|
else y[p] = "";
|
|
y.display = options.hide ? 'none': (oldDisplay != 'none' ? oldDisplay: 'block');
|
|
y.overflow = oldOverflow;
|
|
elem.animationHandler = null;
|
|
if (jQuery.isFunction(options.complete)) options.complete.apply(elem)
|
|
} else {
|
|
var n = t - this.startTime;
|
|
var pr = n / options.duration;
|
|
for (p in props) {
|
|
if (typeof props[p][1] == 'object') {
|
|
y[p] = 'rgb(' + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].r, (props[p][1].r - props[p][0].r), options.duration)) + ',' + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].g, (props[p][1].g - props[p][0].g), options.duration)) + ',' + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].b, (props[p][1].b - props[p][0].b), options.duration)) + ')'
|
|
} else {
|
|
var pValue = jQuery.easing[options.easing](pr, n, props[p][0], (props[p][1] - props[p][0]), options.duration);
|
|
if (p == "opacity") jQuery.attr(y, "opacity", pValue);
|
|
else y[p] = pValue + (p != 'zIndex' && p != 'fontWeight' ? 'px': '')
|
|
}
|
|
}
|
|
}
|
|
};
|
|
z.timer = setInterval(function() {
|
|
z.step()
|
|
},
|
|
13);
|
|
elem.animationHandler = z
|
|
},
|
|
stopAnim: function(elem, step) {
|
|
if (step) elem.animationHandler.startTime -= 100000000;
|
|
else {
|
|
window.clearInterval(elem.animationHandler.timer);
|
|
elem.animationHandler = null;
|
|
jQuery.dequeue(elem, "fx")
|
|
}
|
|
}
|
|
});
|
|
jQuery.parseStyle = function(styles) {
|
|
var newStyles = {};
|
|
if (typeof styles == 'string') {
|
|
styles = styles.toLowerCase().split(';');
|
|
for (var i = 0; i < styles.length; i++) {
|
|
rule = styles[i].split(':');
|
|
if (rule.length == 2) {
|
|
newStyles[jQuery.trim(rule[0].replace(/\-(\w)/g,
|
|
function(m, c) {
|
|
return c.toUpperCase()
|
|
}))] = jQuery.trim(rule[1])
|
|
}
|
|
}
|
|
}
|
|
return newStyles
|
|
};
|
|
jQuery.iFisheye = {
|
|
build: function(options) {
|
|
return this.each(function() {
|
|
var el = this;
|
|
el.fisheyeCfg = {
|
|
items: jQuery(options.items, this),
|
|
container: jQuery(options.container, this),
|
|
pos: jQuery.iUtil.getPosition(this),
|
|
itemWidth: options.itemWidth,
|
|
itemsText: options.itemsText,
|
|
proximity: options.proximity,
|
|
valign: options.valign,
|
|
halign: options.halign,
|
|
maxWidth: options.maxWidth
|
|
};
|
|
jQuery.iFisheye.positionContainer(el, 0);
|
|
jQuery(window).bind('resize',
|
|
function() {
|
|
el.fisheyeCfg.pos = jQuery.iUtil.getPosition(el);
|
|
jQuery.iFisheye.positionContainer(el, 0);
|
|
jQuery.iFisheye.positionItems(el)
|
|
});
|
|
jQuery.iFisheye.positionItems(el);
|
|
el.fisheyeCfg.items.bind('mouseover',
|
|
function() {
|
|
jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'block'
|
|
}).bind('mouseout',
|
|
function() {
|
|
jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'none'
|
|
});
|
|
jQuery(document).bind('mousemove',
|
|
function(e) {
|
|
var pointer = jQuery.iUtil.getPointer(e);
|
|
var toAdd = 0;
|
|
if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'center') var posx = pointer.x - el.fisheyeCfg.pos.x - (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) / 2 - el.fisheyeCfg.itemWidth / 2;
|
|
else if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'right') var posx = pointer.x - el.fisheyeCfg.pos.x - el.offsetWidth + el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size();
|
|
else var posx = pointer.x - el.fisheyeCfg.pos.x;
|
|
var posy = Math.pow(pointer.y - el.fisheyeCfg.pos.y - el.offsetHeight / 2, 2);
|
|
el.fisheyeCfg.items.each(function(nr) {
|
|
distance = Math.sqrt(Math.pow(posx - nr * el.fisheyeCfg.itemWidth, 2) + posy);
|
|
distance -= el.fisheyeCfg.itemWidth / 2;
|
|
distance = distance < 0 ? 0: distance;
|
|
distance = distance > el.fisheyeCfg.proximity ? el.fisheyeCfg.proximity: distance;
|
|
distance = el.fisheyeCfg.proximity - distance;
|
|
extraWidth = el.fisheyeCfg.maxWidth * distance / el.fisheyeCfg.proximity;
|
|
this.style.width = el.fisheyeCfg.itemWidth + extraWidth + 'px';
|
|
this.style.left = el.fisheyeCfg.itemWidth * nr + toAdd + 'px';
|
|
toAdd += extraWidth
|
|
});
|
|
jQuery.iFisheye.positionContainer(el, toAdd)
|
|
})
|
|
})
|
|
},
|
|
positionContainer: function(el, toAdd) {
|
|
if (el.fisheyeCfg.halign) if (el.fisheyeCfg.halign == 'center') el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) / 2 - toAdd / 2 + 'px';
|
|
else if (el.fisheyeCfg.halign == 'left') el.fisheyeCfg.container.get(0).style.left = -toAdd / el.fisheyeCfg.items.size() + 'px';
|
|
else if (el.fisheyeCfg.halign == 'right') el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) - toAdd / 2 + 'px';
|
|
el.fisheyeCfg.container.get(0).style.width = el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size() + toAdd + 'px'
|
|
},
|
|
positionItems: function(el) {
|
|
el.fisheyeCfg.items.each(function(nr) {
|
|
this.style.width = el.fisheyeCfg.itemWidth + 'px';
|
|
this.style.left = el.fisheyeCfg.itemWidth * nr + 'px'
|
|
})
|
|
}
|
|
};
|
|
jQuery.fn.Fisheye = jQuery.iFisheye.build;
|