var __extends=this&&this.__extends||function(){var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])})(e,t)};return function(e,t){function i(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}}();import Control from"./Control.js";import ProjUnits from"../proj/Units.js";import{CLASS_UNSELECTABLE}from"../css.js";import{METERS_PER_UNIT,getPointResolution}from"../proj.js";import{assert}from"../asserts.js";import{getChangeEventType}from"../Object.js";var UNITS_PROP="units",Units={DEGREES:"degrees",IMPERIAL:"imperial",NAUTICAL:"nautical",METRIC:"metric",US:"us"},LEADING_DIGITS=[1,2,5],DEFAULT_DPI=25.4/.28,ScaleLine=function(r){function e(e){var t=this,e=e||{},i=void 0!==e.className?e.className:e.bar?"ol-scale-bar":"ol-scale-line";return(t=r.call(this,{element:document.createElement("div"),render:e.render,target:e.target})||this).innerElement_=document.createElement("div"),t.innerElement_.className=i+"-inner",t.element.className=i+" "+CLASS_UNSELECTABLE,t.element.appendChild(t.innerElement_),t.viewState_=null,t.minWidth_=void 0!==e.minWidth?e.minWidth:64,t.renderedVisible_=!1,t.renderedWidth_=void 0,t.renderedHTML_="",t.addEventListener(getChangeEventType(UNITS_PROP),t.handleUnitsChanged_),t.setUnits(e.units||Units.METRIC),t.scaleBar_=e.bar||!1,t.scaleBarSteps_=e.steps||4,t.scaleBarText_=e.text||!1,t.dpi_=e.dpi||void 0,t}return __extends(e,r),e.prototype.getUnits=function(){return this.get(UNITS_PROP)},e.prototype.handleUnitsChanged_=function(){this.updateElement_()},e.prototype.setUnits=function(e){this.set(UNITS_PROP,e)},e.prototype.setDpi=function(e){this.dpi_=e},e.prototype.updateElement_=function(){var e=this.viewState_;if(e){for(var t=e.center,i=e.projection,r=this.getUnits(),n=r==Units.DEGREES?ProjUnits.DEGREES:ProjUnits.METERS,s=getPointResolution(i,e.resolution,t,n),o=this.minWidth_*(this.dpi_||DEFAULT_DPI)/DEFAULT_DPI,i=o*s,e="",a=(r==Units.DEGREES?(i*=t=METERS_PER_UNIT[ProjUnits.DEGREES])<t/60?(e="″",s*=3600):i<t?(e="′",s*=60):e="°":r==Units.IMPERIAL?i<.9144?(e="in",s/=.0254):i<1609.344?(e="ft",s/=.3048):(e="mi",s/=1609.344):r==Units.NAUTICAL?(s/=1852,e="nm"):r==Units.METRIC?i<.001?(e="μm",s*=1e6):i<1?(e="mm",s*=1e3):i<1e3?e="m":(e="km",s/=1e3):r==Units.US?i<.9144?(e="in",s*=39.37):i<1609.344?(e="ft",s/=.30480061):(e="mi",s/=1609.3472):assert(!1,33),3*Math.floor(Math.log(o*s)/Math.log(10)));;){var l=Math.floor(a/3),p=Math.pow(10,l),d=LEADING_DIGITS[(a%3+3)%3]*p,c=Math.round(d/s);if(isNaN(c))return this.element.style.display="none",void(this.renderedVisible_=!1);if(o<=c)break;++a}n=this.scaleBar_?this.createScaleBar(c,d,e):d.toFixed(l<0?-l:0)+" "+e,this.renderedHTML_!=n&&(this.innerElement_.innerHTML=n,this.renderedHTML_=n),this.renderedWidth_!=c&&(this.innerElement_.style.width=c+"px",this.renderedWidth_=c),this.renderedVisible_||(this.element.style.display="",this.renderedVisible_=!0)}else this.renderedVisible_&&(this.element.style.display="none",this.renderedVisible_=!1)},e.prototype.createScaleBar=function(e,t,i){for(var r="1 : "+Math.round(this.getScaleForResolution()).toLocaleString(),n=[],s=e/this.scaleBarSteps_,o="#ffffff",a=0;a<this.scaleBarSteps_;a++)0===a&&n.push(this.createMarker("absolute",a)),n.push('<div><div class="ol-scale-singlebar" style="width: '+s+"px;background-color: "+o+';"></div>'+this.createMarker("relative",a)+(a%2==0||2===this.scaleBarSteps_?this.createStepText(a,e,!1,t,i):"")+"</div>"),a===this.scaleBarSteps_-1&&n.push(this.createStepText(a+1,e,!0,t,i)),o="#ffffff"===o?"#000000":"#ffffff";return'<div style="display: flex;">'+(this.scaleBarText_?'<div class="ol-scale-text" style="width: '+e+'px;">'+r+"</div>":"")+n.join("")+"</div>"},e.prototype.createMarker=function(e,t){return'<div class="ol-scale-step-marker" style="position: '+e+";top: "+("absolute"===e?3:-10)+'px;"></div>'},e.prototype.createStepText=function(e,t,i,r,n){r=0===e?0:Math.round(r/this.scaleBarSteps_*e*100)/100;return'<div class="ol-scale-step-text" style="margin-left: '+(0===e?-3:t/this.scaleBarSteps_*-1)+"px;text-align: "+(0===e?"left":"center")+"; min-width: "+(0===e?0:t/this.scaleBarSteps_*2)+"px;left: "+(i?t+"px":"unset")+';">'+(r+(0===e?"":" "+n))+"</div>"},e.prototype.getScaleForResolution=function(){var e=getPointResolution(this.viewState_.projection,this.viewState_.resolution,this.viewState_.center),t=this.dpi_||DEFAULT_DPI,i=this.viewState_.projection.getMetersPerUnit();return parseFloat(e.toString())*i*(1e3/25.4)*t},e.prototype.render=function(e){e=e.frameState;this.viewState_=e?e.viewState:null,this.updateElement_()},e}(Control);export default ScaleLine;export{Units};