/** * ZumuJS - 1.0.3 * https://github.com/selcher/zumu * * Released under the MIT License * http://opensource.org/licenses/MIT */ var Zumu=function(t){"use strict";function e(){var t=null;return this instanceof e?(this.container=n.createElement("div"),this.contentContainer=null,this.x=0,this.y=0,this.z=0,this.scale=1,this.zoomIncrement=.1,this.moveIncrement=10,t=this):t=new e,t}var n=t||{},o=function(t){void 0!==console&&console.log&&console.log(t)},i=function(t){return void 0===t||null===t};return e.prototype.init=function(t){if(this.contentContainer)o("ZumuJS: HTML Element already initialized.");else if(t){this.contentContainer=t;var e=this.initContainer(this.container,t);this.addZoomButtons(e),this.addKeyListeners(e)}else o("ZumuJS: Initialization failed. No HTML Element passed.")},e.prototype.initContainer=function(t,e){e.parentElement.insertBefore(t,e.nextSibling),t.appendChild(e);var n=e.getBoundingClientRect();return t.className="zumu-container",t.style.cssText+=[this.buildPerspectiveStyle("800px"),this.buildSizeStyle(n.width,n.height)].join(""),t.setAttribute("tabindex",0),this.resetZoom(),t},e.prototype.createButton=function(t){var e=n.createElement("div");return t&&(e.style.cssText+=t.style,e.className=t["class"],e.innerHTML=t.html,e.addEventListener("click",t.click)),e},e.prototype.addZoomButtons=function(t){var e=this,n=this.createButton({style:this.buildPositionStyle("absolute",{top:10,left:10}),"class":"zumu-button",html:"+",click:function(){e.zoom(e.zoomIncrement)}}),o=this.createButton({style:this.buildPositionStyle("absolute",{top:10,left:35}),"class":"zumu-button",html:"-",click:function(){e.zoom(-e.zoomIncrement)}}),i=this.createButton({style:this.buildPositionStyle("absolute",{top:10,left:60}),"class":"zumu-button",html:"*",click:function(){e.resetZoom()}});t.appendChild(n),t.appendChild(o),t.appendChild(i)},e.prototype.setContentContainerStyle=function(t){this.contentContainer.style.cssText+=t},e.prototype.updateTransform=function(t,e){var n=this.buildTransformStyle(t,e);this.setContentContainerStyle(n)},e.prototype.zoom=function(t){this.scale+=t,this.updateTransform()},e.prototype.resetZoom=function(){this.resetPosition(),this.resetScale(),this.updateTransform()},e.prototype.resetPosition=function(){this.x=0,this.y=0,this.z=0},e.prototype.resetScale=function(){this.scale=1},e.prototype.addKeyListeners=function(t){var e=this;n.addEventListener("keydown",function(e){return n.activeElement===t?(e.preventDefault(),!1):!0}),t.addEventListener("keydown",function(t){var n=t.keyCode;return e.addZoomKeyListeners(n),e.addMoveKeyListeners(n),t.preventDefault(),!1})},e.prototype.addZoomKeyListeners=function(t){73===t&&this.zoom(this.zoomIncrement),79===t&&this.zoom(-this.zoomIncrement),82===t&&this.resetZoom()},e.prototype.addMoveKeyListeners=function(t){37===t&&this.moveX(-this.moveIncrement),39===t&&this.moveX(this.moveIncrement),38===t&&this.moveY(-this.moveIncrement),40===t&&this.moveY(this.moveIncrement)},e.prototype.moveX=function(t){this.x+=t,this.updateTransform()},e.prototype.moveY=function(t){this.y+=t,this.updateTransform()},e.prototype.buildPerspectiveStyle=function(t){return["perspective:"+t+";","-webkit-perspective:"+t+";","-moz-perspective:"+t+";","-o-perspective:"+t+";","perspective-origin:center;"].join("")},e.prototype.buildTranslateStyle=function(t,e,n){return"translate3d("+(t?t+"px":0)+","+(e?e+"px":0)+","+(n?n+"px":0)+")"},e.prototype.buildScaleStyle=function(t){return"scale("+t+","+t+")"},e.prototype.buildTransformStyle=function(t,e){var n=this.buildTransformValueStyle(t,e);return this.buildTransformPrefixStyle(n)},e.prototype.buildTransformValueStyle=function(t,e){var n=i(t)?this.scale:t,o=i(e)?{}:e,r=this.buildScaleStyle(n),s=this.buildTranslateStyle(i(o.x)?this.x:o.x,i(o.y)?this.y:o.y,i(o.z)?this.z:o.z);return r+" "+s+";"},e.prototype.buildTransformPrefixStyle=function(t){return["transform:"+t,"-webkit-transform:"+t,"-moz-transform:"+t,"-o-transform:"+t].join("")},e.prototype.buildSizeStyle=function(t,e){return[void 0!==t?"width:"+t+"px;":"",void 0!==e?"height:"+e+"px;":""].join("")},e.prototype.buildPositionStyle=function(t,e){var n="";return"relative"===t?n="position:relative;":"absolute"===t&&(n=["position:absolute;",e&&i(e.top)?"":"top:"+e.top+"px;",e&&i(e.right)?"":"right:"+e.right+"px;",e&&i(e.left)?"":"left:"+e.left+"px;",e&&i(e.bottom)?"":"bottom:"+e.bottom+"px;"].join("")),n},e.prototype.revert=function(){this.contentContainer?(this.resetPosition(),this.resetScale(),this.resetTransform(),this.container.parentElement.insertBefore(this.contentContainer,this.container.nextSibling),this.container.remove?this.container.remove():this.container.parentElement.removeChild(this.container),this.resetContainers()):o("ZumuJS: Initialize before calling revert.")},e.prototype.resetTransform=function(){this.setContentContainerStyle(this.buildTransformPrefixStyle("none;"))},e.prototype.resetContainers=function(){this.container=n.createElement("div"),this.contentContainer=null},e}(document);"undefined"!=typeof module&&(module.exports=Zumu);