UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.69 kB
import{_ as t}from"../../../chunks/tslib.es6.js";import e from"../../../core/Accessor.js";import{createScreenPoint as i}from"../../../core/screenUtils.js";import{property as r}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as s}from"../../../core/accessorSupport/decorators/subclass.js";import{ViewEventPriorities as o}from"../../input/InputManager.js";const a="esri-zoom-box",n={container:`${a}__container`,overlay:`${a}__overlay`,background:`${a}__overlay-background`,box:`${a}__outline`},h={zoom:"Shift",counter:"Ctrl"};let l=class extends e{constructor(t){super(t),this._container=null,this._overlay=null,this._backgroundShape=null,this._boxShape=null,this._box={x:0,y:0,width:0,height:0},this._rafId=null,this._handles=null,this._redraw=this._redraw.bind(this)}destroy(){this.view=null}set view(t){this._handles&&this._handles.forEach((t=>{t.remove()})),this._handles=null,this._destroyOverlay(),this._set("view",t),t&&(t.on("drag",[h.zoom],(t=>this._handleDrag(t,1)),o.INTERNAL),t.on("drag",[h.zoom,h.counter],(t=>this._handleDrag(t,-1)),o.INTERNAL))}_start(){this._createContainer(),this._createOverlay(),this.navigation.begin()}_update(t,e,i,r){this._box.x=t,this._box.y=e,this._box.width=i,this._box.height=r,this._rafId||(this._rafId=requestAnimationFrame(this._redraw))}_end(t,e,r,s,o){const a=this.view,n=a.toMap(i(t+.5*r,e+.5*s));let h=Math.max(r/a.width,s/a.height);-1===o&&(h=1/h),this._destroyOverlay(),this.navigation.end(),a.goTo({center:n,scale:a.scale*h})}_updateBox(t,e,i,r){const s=this._boxShape;s.setAttributeNS(null,"x",""+t),s.setAttributeNS(null,"y",""+e),s.setAttributeNS(null,"width",""+i),s.setAttributeNS(null,"height",""+r),s.setAttributeNS(null,"class",n.box)}_updateBackground(t,e,i,r){this._backgroundShape.setAttributeNS(null,"d",this._toSVGPath(t,e,i,r,this.view.width,this.view.height))}_createContainer(){const t=document.createElement("div");t.className=n.container,this.view.root.appendChild(t),this._container=t}_createOverlay(){const t=this.view.width,e=this.view.height,i=document.createElementNS("http://www.w3.org/2000/svg","path");i.setAttributeNS(null,"d","M 0 0 L "+t+" 0 L "+t+" "+e+" L 0 "+e+" Z"),i.setAttributeNS(null,"class",n.background);const r=document.createElementNS("http://www.w3.org/2000/svg","rect"),s=document.createElementNS("http://www.w3.org/2000/svg","svg");s.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),s.setAttributeNS(null,"class",n.overlay),s.appendChild(i),s.appendChild(r),this._container.appendChild(s),this._backgroundShape=i,this._boxShape=r,this._overlay=s}_destroyOverlay(){this._container&&this._container.parentNode&&this._container.parentNode.removeChild(this._container),this._container=this._backgroundShape=this._boxShape=this._overlay=null}_toSVGPath(t,e,i,r,s,o){const a=t+i,n=e+r;return"M 0 0 L "+s+" 0 L "+s+" "+o+" L 0 "+o+" ZM "+t+" "+e+" L "+t+" "+n+" L "+a+" "+n+" L "+a+" "+e+" Z"}_handleDrag(t,e){const i=t.x,r=t.y,s=t.origin.x,o=t.origin.y;let a,n,h,l;switch(i>s?(a=s,h=i-s):(a=i,h=s-i),r>o?(n=o,l=r-o):(n=r,l=o-r),t.action){case"start":this._start();break;case"update":this._update(a,n,h,l);break;case"end":this._end(a,n,h,l,e)}t.stopPropagation()}_redraw(){if(!this._rafId)return;if(this._rafId=null,!this._overlay)return;const{x:t,y:e,width:i,height:r}=this._box;this._updateBox(t,e,i,r),this._updateBackground(t,e,i,r),this._rafId=requestAnimationFrame(this._redraw)}};t([r()],l.prototype,"navigation",void 0),t([r()],l.prototype,"view",null),l=t([s("esri.views.2d.navigation.ZoomBox")],l);const c=l;export{c as default};