This repository has been archived by the owner on Feb 7, 2018. It is now read-only.
/
fancyzoom.min.js
1 lines (1 loc) · 6.4 KB
/
fancyzoom.min.js
1
Object.extend(String.prototype,{ensureEndsWith:function(A){return this.endsWith(A)?this:this+A},px:function(){return this.ensureEndsWith("px")}});Object.extend(Number.prototype,{px:function(){return this.toString().px()}});var Window={size:function(){var C=window.innerWidth||(window.document.documentElement.clientWidth||window.document.body.clientWidth);var B=window.innerHeight||(window.document.documentElement.clientHeight||window.document.body.clientHeight);var A=window.pageXOffset||(window.document.documentElement.scrollLeft||window.document.body.scrollLeft);var D=window.pageYOffset||(window.document.documentElement.scrollTop||window.document.body.scrollTop);return{width:C,height:B,x:A,y:D}}};var FancyZoomBox={directory:"images",zooming:false,setup:false,init:function(C){if(FancyZoomBox.setup){return }FancyZoomBox.setup=true;var E=navigator.userAgent.match(/MSIE\s(\d)+/);if(E){var B=parseInt(E[1]);Prototype.Browser["IE"+B.toString()]=true;Prototype.Browser.ltIE7=(B<7)?true:false}var D='<div id="zoom" style="display:none;"> <table id="zoom_table" style="border-collapse:collapse; width:100%; height:100%;"> <tbody> <tr> <td class="tl" style="background:url('+FancyZoomBox.directory+'/tl.png) 0 0 no-repeat; width:20px height:20px; overflow:hidden;" /> <td class="tm" style="background:url('+FancyZoomBox.directory+'/tm.png) 0 0 repeat-x; height:20px; overflow:hidden;" /> <td class="tr" style="background:url('+FancyZoomBox.directory+'/tr.png) 100% 0 no-repeat; width:20px height:20px; overflow:hidden;" /> </tr> <tr> <td class="ml" style="background:url('+FancyZoomBox.directory+'/ml.png) 0 0 repeat-y; width:20px; overflow:hidden;" /> <td class="mm" style="background:#fff; vertical-align:top; padding:10px;"> <div id="zoom_content"> </div> </td> <td class="mr" style="background:url('+FancyZoomBox.directory+'/mr.png) 100% 0 repeat-y; width:20px; overflow:hidden;" /> </tr> <tr> <td class="bl" style="background:url('+FancyZoomBox.directory+'/bl.png) 0 100% no-repeat; width:20px height:20px; overflow:hidden;" /> <td class="bm" style="background:url('+FancyZoomBox.directory+'/bm.png) 0 100% repeat-x; height:20px; overflow:hidden;" /> <td class="br" style="background:url('+FancyZoomBox.directory+'/br.png) 100% 100% no-repeat; width:20px height:20px; overflow:hidden;" /> </tr> </tbody> </table> <a href="#" title="Close" id="zoom_close" style="position:absolute; top:0; left:0;"> <img src="'+FancyZoomBox.directory+'/closebox.png" alt="Close" style="border:none; margin:0; padding:0;" /> </a> </div>';var A=$$("body").first();A.insert(D);FancyZoomBox.zoom=$("zoom");FancyZoomBox.zoom_table=$("zoom_table");FancyZoomBox.zoom_close=$("zoom_close");FancyZoomBox.zoom_content=$("zoom_content");FancyZoomBox.zoom_close.observe("click",FancyZoomBox.hide);FancyZoomBox.middle_row=$A([$$("td.ml"),$$("td.mm"),$$("td.mr")]).flatten();FancyZoomBox.cells=FancyZoomBox.zoom_table.select("td");$$("html").first().observe("click",function(H){var G=H.findElement("#zoom"),F=FancyZoomBox.zoom.getStyle("display");if(F=="block"&&!G){FancyZoomBox.hide(H)}});$(document).observe("keyup",function(G){var F=FancyZoomBox.zoom.getStyle("display");if(G.keyCode==Event.KEY_ESC&&F=="block"){FancyZoomBox.hide(G)}});if(Prototype.Browser.ltIE7){FancyZoomBox.switchBackgroundImagesTo("gif")}},show:function(E){E.stop();if(FancyZoomBox.zooming){return }FancyZoomBox.zooming=true;var C=E.findElement("a");var D=C.content_div;var A=(C.zoom_width||D.getWidth())+60;var I=(C.zoom_height||D.getHeight())+60;var F=Window.size();var B=document.viewport.getScrollOffsets()[1];var G=Math.max((F.height/2)-(I/2)+B,0);var H=(F.width/2)-(A/2);FancyZoomBox.curTop=E.pointerY();FancyZoomBox.curLeft=E.pointerX();FancyZoomBox.moveX=-(FancyZoomBox.curLeft-H);FancyZoomBox.moveY=-(FancyZoomBox.curTop-G);FancyZoomBox.zoom.hide().setStyle({position:"absolute",top:FancyZoomBox.curTop.px(),left:FancyZoomBox.curLeft.px()});new Effect.Parallel([new Effect.Appear(FancyZoomBox.zoom,{sync:true}),new Effect.Move(FancyZoomBox.zoom,{x:FancyZoomBox.moveX,y:FancyZoomBox.moveY,sync:true}),new Effect.Morph(FancyZoomBox.zoom,{style:{width:A.px(),height:I.px()},sync:true,beforeStart:function(J){if(Prototype.Browser.IE){FancyZoomBox.middle_row.invoke("setStyle",{height:(I-40).px()})}FancyZoomBox.fixBackgroundsForIE()},afterFinish:function(J){FancyZoomBox.zoom_content.innerHTML=D.innerHTML;FancyZoomBox.unfixBackgroundsForIE();FancyZoomBox.zoom_close.show();FancyZoomBox.zooming=false}})],{duration:0.5})},hide:function(A){A.stop();if(FancyZoomBox.zooming){return }FancyZoomBox.zooming=true;new Effect.Parallel([new Effect.Move(FancyZoomBox.zoom,{x:FancyZoomBox.moveX*-1,y:FancyZoomBox.moveY*-1,sync:true}),new Effect.Morph(FancyZoomBox.zoom,{style:{width:"1".px(),height:"1".px()},sync:true,beforeStart:function(B){FancyZoomBox.fixBackgroundsForIE();FancyZoomBox.zoom_content.innerHTML="";FancyZoomBox.zoom_close.hide()},afterFinish:function(B){FancyZoomBox.unfixBackgroundsForIE();FancyZoomBox.zooming=false}}),new Effect.Fade(FancyZoomBox.zoom,{sync:true})],{duration:0.5})},switchBackgroundImagesTo:function(C){FancyZoomBox.cells.each(function(E){var D=E.getStyle("background-image").gsub(/\.(png|gif|none)\)$/,"."+C+")");E.setStyle("background-image: "+D)});var B=FancyZoomBox.zoom_close.firstDescendant();var A=B.readAttribute("src").gsub(/\.(png|gif|none)$/,"."+C);B.writeAttribute("src",A)},fixBackgroundsForIE:function(){if(Prototype.Browser.IE7){FancyZoomBox.switchBackgroundImagesTo("gif")}},unfixBackgroundsForIE:function(){if(Prototype.Browser.IE7){FancyZoomBox.switchBackgroundImagesTo("png")}}};var FancyZoom=Class.create({initialize:function(A){this.options=arguments.length>1?arguments[1]:{};FancyZoomBox.init();this.element=$(A);if(this.element){this.element.content_div=$(this.element.readAttribute("href").gsub(/^#/,""));this.element.content_div.hide();this.element.zoom_width=this.options.width;this.element.zoom_height=this.options.height;this.element.observe("click",FancyZoomBox.show)}}});