ScaleBar.js 4.4 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.24/esri/copyright.txt for details.
  4. */
  5. import{_ as e}from"../chunks/tslib.es6.js";import{watch as r}from"../core/reactiveUtils.js";import{createScreenPoint as t}from"../core/screenUtils.js";import{aliasOf as s}from"../core/accessorSupport/decorators/aliasOf.js";import"../core/arrayUtils.js";import"../core/has.js";import{cast as a}from"../core/accessorSupport/decorators/cast.js";import{property as i}from"../core/accessorSupport/decorators/property.js";import{subclass as l}from"../core/accessorSupport/decorators/subclass.js";import o from"./Widget.js";import n from"./ScaleBar/ScaleBarViewModel.js";import"./support/widgetUtils.js";import{messageBundle as c}from"./support/decorators/messageBundle.js";import{tsx as d}from"./support/jsxFactory.js";const u={base:"esri-scale-bar esri-widget",labelContainer:"esri-scale-bar__label-container",rulerLabelContainer:"esri-scale-bar__label-container--ruler",lineLabelContainer:"esri-scale-bar__label-container--line",topLabelContainer:"esri-scale-bar__label-container--top",bottomLabelContainer:"esri-scale-bar__label-container--bottom",label:"esri-scale-bar__label",line:"esri-scale-bar__line",topLine:"esri-scale-bar__line--top",bottomLine:"esri-scale-bar__line--bottom",ruler:"esri-scale-bar__ruler",rulerBlock:"esri-scale-bar__ruler-block",barContainer:"esri-scale-bar__bar-container",rulerBarContainer:"esri-scale-bar__bar-container--ruler",lineBarContainer:"esri-scale-bar__bar-container--line",disabled:"esri-disabled"};function p(e){return 2*e}let b=class extends o{constructor(e,r){super(e,r),this.label=void 0,this.messages=null,this.unit="non-metric",this.view=null,this.viewModel=new n}initialize(){this.own([r((()=>{const{view:e}=this;return[e?.stationary,e?.center,e?.scale,e?.zoom]}),(([e])=>{e&&this.scheduleRender()}))])}set style(e){const r="dual"===this.unit?"line":e;this._set("style",r)}castStyle(e){return"line"===e?e:"ruler"}castUnit(e){return"metric"===e||"dual"===e?e:"non-metric"}render(){const e="disabled"===this.get("viewModel.state"),r={[u.disabled]:e};let t,s;if(!e){const{unit:e,style:r}=this,a="metric"===e||"dual"===e,i=50;if("non-metric"===e||"dual"===e){const e=this.viewModel.getScaleBarProperties(i,"non-metric");e&&(s="ruler"===r?this._renderRuler(e):this._renderLine(e,"bottom"))}if(a){const e=this.viewModel.getScaleBarProperties(i,"metric");e&&(t="ruler"===r?this._renderRuler(e):this._renderLine(e,"top"))}}return d("div",{afterCreate:this._handleRootCreateOrUpdate,afterUpdate:this._handleRootCreateOrUpdate,bind:this,class:this.classes(u.base,r)},t,s)}_renderRuler(e){const r=p(Math.round(e.length)),{messages:t}=this,s=t[e.unit]||t.unknownUnit,a=`${p(e.value)} ${s}`;return d("div",{class:this.classes(u.barContainer,u.rulerBarContainer),key:"esri-scale-bar__ruler"},d("div",{class:u.ruler,styles:{width:`${r}px`}},d("div",{class:u.rulerBlock}),d("div",{class:u.rulerBlock}),d("div",{class:u.rulerBlock}),d("div",{class:u.rulerBlock})),d("div",{class:this.classes(u.labelContainer,u.rulerLabelContainer)},d("div",{class:u.label},"0"),d("div",{class:u.label},a)))}_renderLine(e,r){const{messages:t}=this,s=t[e.unit]||t.unknownUnit,a=`${p(e.value)} ${s}`,i={[u.topLabelContainer]:"top"===r,[u.bottomLabelContainer]:"bottom"===r},l=d("div",{class:this.classes(u.labelContainer,u.lineLabelContainer,i),key:"esri-scale-bar__label"},d("div",{class:u.label},a)),o={[u.topLine]:"top"===r,[u.bottomLine]:"bottom"===r},n=p(Math.round(e.length)),c=d("div",{class:this.classes(u.line,o),key:"esri-scale-bar__line",styles:{width:`${n}px`}});return d("div",{class:this.classes(u.barContainer,u.lineBarContainer),key:"esri-scale-bar__line-container"},[c,l])}_handleRootCreateOrUpdate(e){const r=this.viewModel;if(!r)return;const s=e.getBoundingClientRect(),a=s.left+window.pageXOffset,i=s.top+window.pageYOffset,l=t(a,i);(l.x!==r.scaleComputedFrom.x||l.y!==r.scaleComputedFrom.y)&&(r.scaleComputedFrom=l)}};e([i({aliasOf:{source:"messages.widgetLabel",overridable:!0}})],b.prototype,"label",void 0),e([i(),c("esri/widgets/ScaleBar/t9n/ScaleBar")],b.prototype,"messages",void 0),e([i()],b.prototype,"style",null),e([a("style")],b.prototype,"castStyle",null),e([i()],b.prototype,"unit",void 0),e([a("unit")],b.prototype,"castUnit",null),e([s("viewModel.view")],b.prototype,"view",void 0),e([i()],b.prototype,"viewModel",void 0),b=e([l("esri.widgets.ScaleBar")],b);const m=b;export{m as default};