+++ /dev/null
-(function($) {\r
-\r
- //If the UI scope is not availalable, add it\r
- $.ui = $.ui || {};\r
- \r
- //Make nodes selectable by expression\r
- $.extend($.expr[':'], { magnifier: "(' '+a.className+' ').indexOf(' ui-magnifier ')" });\r
-\r
- //Macros for external methods that support chaining\r
- var methods = "destroy,enable,disable,reset".split(",");\r
- for(var i=0;i<methods.length;i++) {\r
- var cur = methods[i], f;\r
- eval('f = function() { var a = arguments; return this.each(function() { if(jQuery(this).is(".ui-magnifier")) jQuery.data(this, "ui-magnifier")["'+cur+'"](a); }); }');\r
- $.fn["magnifier"+cur.substr(0,1).toUpperCase()+cur.substr(1)] = f;\r
- };\r
-\r
- //get instance method\r
- $.fn.magnifierInstance = function() {\r
- if($(this[0]).is(".ui-magnifier")) return $.data(this[0], "ui-magnifier");\r
- return false;\r
- };\r
- \r
- $.fn.magnifier = function(options) {\r
- return this.each(function() {\r
- new $.ui.magnifier(this,options); \r
- });\r
- };\r
- \r
- $.ui.magnifier = function(el,options) {\r
- \r
- var self = this; this.items = []; this.element = el;\r
- this.options = options || {}; var o = this.options;\r
- $.data(el, "ui-magnifier", this);\r
- $(el).addClass("ui-magnifier");\r
- \r
- o.distance = o.distance || 150;\r
- o.magnification = o.magnification || 2;\r
- o.baseline = o.baseline || 0;\r
- o.verticalLine = o.verticalLine != undefined ? o.verticalLine : -0.5;\r
- \r
- this.pp = $(el).offset({ border: false });\r
- \r
- $('> *', el).each(function() {\r
- var co = $(this).offset({ border: false });\r
- if(self.options.overlap) var cp = $(this).position();\r
- self.items.push([this, co, [$(this).width(),$(this).height()], (cp || null)]);\r
- \r
- if(o.opacity)\r
- $(this).css('opacity', o.opacity.min); \r
- });\r
- \r
- if(o.overlap) {\r
- for(var i=0;i<this.items.length;i++) {\r
- //Absolute stuff\r
- $(this.items[i][0]).css({\r
- position: "absolute",\r
- top: this.items[i][3].top,\r
- left: this.items[i][3].left\r
- });\r
- };\r
- }\r
- \r
- this.moveEvent = function(e) { if(!self.disabled) self.magnify.apply(self, [e]); }\r
- $(document).bind("mousemove", this.moveEvent);\r
- \r
- if(o.click) { //If onclick callback is available\r
-\r
- this.clickEvent = function(e) { if(!self.disabled) o.click.apply(this, [e, { options: self.options, current: self.current[0], currentOffset: self.current[1] }]); }\r
- $(el).bind('click', this.clickEvent);\r
- }\r
- \r
- }\r
- \r
- $.extend($.ui.magnifier.prototype, {\r
- destroy: function() {\r
- $(this.element).removeClass("ui-magnifier").removeClass("ui-magnifier-disabled");\r
- $(document).unbind("mousemove", this.moveEvent);\r
- if(this.clickEvent) $(this.element).unbind("click", this.clickEvent);\r
- },\r
- enable: function() {\r
- $(this.element).removeClass("ui-magnifier-disabled");\r
- this.disabled = false;\r
- },\r
- disable: function() {\r
- $(this.element).addClass("ui-magnifier-disabled");\r
- this.reset();\r
- this.disabled = true;\r
- },\r
- reset: function(e) {\r
- \r
- var o = this.options;\r
- var c;\r
- var distance = 1;\r
- \r
- for(var i=0;i<this.items.length;i++) {\r
- \r
- c = this.items[i];\r
- \r
- $(c[0]).css({\r
- width: c[2][0],\r
- height: c[2][1],\r
- top: (c[3] ? c[3].top : 0),\r
- left: (c[3] ? c[3].left : 0)\r
- });\r
- \r
- if(o.opacity)\r
- $(c[0]).css('opacity', o.opacity.min);\r
- \r
- if(o.zIndex)\r
- $(c[0]).css("z-index", "");\r
- \r
- }\r
- \r
- },\r
- magnify: function(e) {\r
- var p = [e.pageX,e.pageY];\r
- var o = this.options;\r
- var c;\r
- this.current = this.items[0];\r
- var distance = 1;\r
- \r
- //Compute the parents distance, because we don't need to fire anything if we are not near the parent\r
- \r
- var overlap = ((p[0] > this.pp.left-o.distance && p[0] < this.pp.left + this.element.offsetWidth + o.distance) && (p[1] > this.pp.top-o.distance && p[1] < this.pp.top + this.element.offsetHeight + o.distance));\r
- if(!overlap) return false;\r
- \r
- \r
- for(var i=0;i<this.items.length;i++) {\r
- c = this.items[i];\r
- \r
- var olddistance = distance;\r
- if(!o.axis) {\r
- distance = Math.sqrt(\r
- Math.pow(p[0] - ((c[3] ? this.pp.left : c[1].left) + parseInt(c[0].style.left)) - (c[0].offsetWidth/2), 2)\r
- + Math.pow(p[1] - ((c[3] ? this.pp.top : c[1].top ) + parseInt(c[0].style.top )) - (c[0].offsetHeight/2), 2)\r
- );\r
- } else {\r
- if(o.axis == "y") {\r
- distance = Math.abs(p[1] - ((c[3] ? this.pp.top : c[1].top ) + parseInt(c[0].style.top )) - (c[0].offsetHeight/2));\r
- } else {\r
- distance = Math.abs(p[0] - ((c[3] ? this.pp.left : c[1].left) + parseInt(c[0].style.left)) - (c[0].offsetWidth/2));\r
- } \r
- }\r
- \r
- if(distance < o.distance) {\r
- \r
- this.current = distance < olddistance ? this.items[i] : this.current;\r
- \r
- if(!o.axis || o.axis != "y") {\r
- $(c[0]).css({\r
- width: c[2][0]+ (c[2][0] * (o.magnification-1)) - (((distance/o.distance)*c[2][0]) * (o.magnification-1)),\r
- left: (c[3] ? (c[3].left + o.verticalLine * ((c[2][1] * (o.magnification-1)) - (((distance/o.distance)*c[2][1]) * (o.magnification-1)))) : 0)\r
- });\r
- }\r
- \r
- if(!o.axis || o.axis != "x") {\r
- $(c[0]).css({\r
- height: c[2][1]+ (c[2][1] * (o.magnification-1)) - (((distance/o.distance)*c[2][1]) * (o.magnification-1)),\r
- top: (c[3] ? c[3].top : 0) + (o.baseline-0.5) * ((c[2][0] * (o.magnification-1)) - (((distance/o.distance)*c[2][0]) * (o.magnification-1)))\r
- }); \r
- }\r
- \r
- if(o.opacity)\r
- $(c[0]).css('opacity', o.opacity.max-(distance/o.distance) < o.opacity.min ? o.opacity.min : o.opacity.max-(distance/o.distance));\r
- \r
- } else {\r
- \r
- $(c[0]).css({\r
- width: c[2][0],\r
- height: c[2][1],\r
- top: (c[3] ? c[3].top : 0),\r
- left: (c[3] ? c[3].left : 0)\r
- });\r
- \r
- if(o.opacity)\r
- $(c[0]).css('opacity', o.opacity.min);\r
- \r
- }\r
- \r
- if(o.zIndex)\r
- $(c[0]).css("z-index", "");\r
- \r
- }\r
- \r
- if(this.options.zIndex)\r
- $(this.current[0]).css("z-index", this.options.zIndex);\r
- \r
- }\r
- });\r
-\r
-})($);
\ No newline at end of file