/*! * cropme v1.4.0 * https://shpontex.github.io/cropme * * Copyright 2019 shpontex * Released under the MIT license * * Date: 2019-10-28T17:18:45.700Z */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Cropme=e()}(this,function(){"use strict";function Z(t){return(Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){for(var i=0;ie.offsetWidth?i.viewport.width+2*r+"px":e.offsetWidth,e.style.height=i.viewport.height>e.offsetHeight?i.viewport.height+2*r+"px":e.offsetHeight,t.style.width=i.viewport.width+"px",t.style.height=i.viewport.height+"px",t.className="viewport","circle"===i.viewport.type&&(t.className="viewport circle"),i.viewport.border.enable){var o=(e.offsetWidth-i.viewport.width)/2;i.viewport.border.width=oc.options.zoom.min&&ee&&(o.length=e)}var o=P(e),n=0;return function(t,e){o[n++]=t,o[n++]=e,2===n&&$.nextTick(r)}}function p(t,e){var i,r,o,n,s=0;if(!t)throw l(B);var p=t[$[S].iterator];if(a(p))r=p.call(t);else{if(!a(t.next)){if(h(t,P)){for(i=t.length;sthis.options.container.width)throw"Error: Viewport width cannot be greater that container width";if(this.options.viewport.height>this.options.container.height)throw"Error: Viewport height cannot be greater that container height";"img"===(this.properties.wrapper=t).tagName.toLowerCase()&&(this.properties.image=new Image,this.properties.image.src=t.src,this.properties.wrapper=document.createElement("div"),t.parentNode.insertBefore(this.properties.wrapper,t.previousSibling),t.parentNode.removeChild(t)),this.properties.wrapper.className+=" cropme-wrapper "+this.options.customClass,n.call(this),this.properties.image.src&&this.bind({url:this.properties.image.src})}return function(t,e,i){e&&r(t.prototype,e),i&&r(t,i)}(i,[{key:"resize",value:function(){var t=this.properties.container,e=this.properties.container_w-t.offsetWidth,i=this.properties.container_h-t.offsetHeight;t.style.width=this.options.container.width+("string"==typeof this.options.container.width?"":"px"),t.offsetWidth>this.options.viewport.width?(this.properties.x-=e/2,this.properties.y-=i/2,this.properties.container_w=t.offsetWidth,this.properties.container_h=t.offsetHeight,this.properties.ox-=e/2,this.properties.oy-=i/2,this.properties.image.style.transform=w.call(this),u.call(this),l.call(this)):t.style.width=this.options.viewport.width+2*this.options.viewport.border.width+"px"}},{key:"bind",value:function(a){var t=this;window.onresize=this.resize.bind(this),this.properties.image.src=a.url;var h=this.properties,c=this.options,l=this;return new Promise(function(p){t.properties.image.onload=function(){var t=h.image.getBoundingClientRect(),e=h.container.getBoundingClientRect(),i=(e.width-t.width)/2,r=(e.height-t.height)/2,o=e.height/t.height,n=0;h.ox=i,h.oy=r;var s={};if("object"===Z(a.position)&&(i=a.position.x?a.position.x+i:i,r=a.position.y?a.position.y+r:r,o=a.position.scale||o,n=a.position.angle||n,s=a.position.origin||s,c.transformOrigin="object"===a.position.origin?"viewport":"image"),c.zoom.max<=c.zoom.min)throw"Error: max zoom cannot be less or equal to min zoom";oc.zoom.max&&(o=c.zoom.max),h.x=i,h.y=r,h.container_w=e.width,h.container_h=e.height,h.origin_x=t.width/2,h.origin_y=t.height/2,h.scale=o,l.options.zoom.slider&&(h.slider.value=o),l.options.rotation.slider&&(h.rotation_slider.value=n),h.deg=n,h.image.style.transform=w.call(l),h.image.style.transformOrigin=d.call(l,s.x||h.origin_x,s.y||h.origin_y),h.image.style.opacity=1,g.call(l),p(l.properties.image)}})}},{key:"rotate",value:function(t){this.properties.deg=t;var e=this.properties.image.style.transformOrigin.split("px "),i=parseInt(e[0]),r=parseInt(e[1]);this.properties.rotate_originx=i,this.properties.rotate_originy=r,this.properties.image.style.transform=w.call(this)}},{key:"crop",value:function(t){var i=function(t){var e=document.createElement("canvas"),i=e.getContext("2d"),r=this.options.viewport.width,o=this.options.viewport.height;"object"===Z(t)&&(t.scale?(r*=t.scale,o*=t.scale):t.width&&(o=t.width*o/r,r=t.width)),e.width=r,e.height=o;var n=r/this.options.viewport.width,s=o/this.options.viewport.height,p=this.properties.deg,a=this.properties.x,h=this.properties.y;function c(t,e,i){this.properties.deg=t,this.properties.x=e,this.properties.y=i,this.properties.image.style.transform=w.call(this)}c.call(this,0,this.properties.ox,this.properties.oy);var l=this.properties.image.getBoundingClientRect(),u=this.properties.viewport.getBoundingClientRect(),f=n*(l.left-u.left-this.options.viewport.border.width),d=s*(l.top-u.top-this.options.viewport.border.width),m=this.options.transformOrigin,g=(a-this.properties.x)*n,v=(h-this.properties.y)*s;return"image"===m&&i.translate(g,v),i.translate(r/2,o/2),i.rotate(p*Math.PI/180),"image"===m?i.translate(-r/2,-o/2):i.translate(-r/2+g,-o/2+v),i.drawImage(this.properties.image,f,d,l.width*n,l.height*s),"circle"===this.options.viewport.type&&("image"===m?i.translate(r/2,o/2):i.translate(r/2-g,o/2-v),i.rotate(-p*Math.PI/180),i.translate(-r/2,-o/2),i.scale(1,this.options.viewport.height/this.options.viewport.width),"image"===m?i.translate(2*-g,2*-v):i.translate(-g,-v),i.globalCompositeOperation="destination-in",i.arc(r/2+g,o/2+v,r/2,0,2*Math.PI),i.fill()),c.call(this,p,a,h),e}.call(this,t),r="object"===Z(t)?t.type:t;return new Promise(function(e){"blob"===r?i.toBlob(function(t){return e(URL.createObjectURL(t))},t.mimetype,t.quality):"object"===Z(t)?e(i.toDataURL(t.mimetype,t.quality)):e(i.toDataURL())})}},{key:"position",value:function(){var t={x:parseFloat((this.properties.x-this.properties.ox).toFixed(3)),y:parseFloat((this.properties.y-this.properties.oy).toFixed(3)),scale:parseFloat(this.properties.scale.toFixed(4)),angle:parseInt(this.properties.deg)};return"viewport"===this.options.transformOrigin&&(t.origin=m.call(this)),t}},{key:"reload",value:function(t){this.options=h(c,t),u.call(this),e.call(this),l.call(this),f.call(this),g.call(this)}},{key:"destroy",value:function(){this.properties.wrapper.innerHTML="",this.properties.wrapper.className=this.properties.wrapper.className.replace("cropme-wrapper",""),delete this.options,delete this.properties}}]),i}(),c={container:{width:300,height:300},viewport:{width:100,height:100,border:{enable:!0,width:2,color:"#fff"}},transformOrigin:"viewport",zoom:{min:.01,max:3,enable:!0,mouseWheel:!0,slider:!1},customClass:"",rotation:{slider:!1,enable:!0,position:"right"}};return s});