UNPKG

thematic-earth

Version:

HTML-based, whole-Earth thematic maps using locally hosted data layers

2 lines 2.54 kB
/* Copyright (c) 2023 Read Write Tools. Legal use subject to the Thematic Earth Software License Agreement. */ import BasePanel from'../panels/base-panel.class.js';import LegendCanvas from'../legend/legend-canvas.class.js';import LegendSlice from'../legend/legend-slice.class.js';import LegendConsts from'../legend/legend-consts.js';import LS from'../enum/legend-symbol.enum.js';import expect from'../dev/expect.js';export default class LegendPanel extends BasePanel{constructor(e){super(e),this.legendCanvas=new LegendCanvas(e),this.resizeObserver=null,this.registerResizeListener(),Object.seal(this)}registerBroadcasters(){}registerReceivers(){this.signal.listen('api/runCourtesyValidator',(e=>{this.runCourtesyValidator()})),this.signal.listen('api/addLegendItem',(e=>{this.addLegendItem(e),this.resizeAndRedrawCanvas()})),this.signal.listen('symbolSpecifier/valueChanged',(e=>{this.recomputeLegendStyles(),this.drawLegend()})),this.signal.listen('visualization/tessRulesAdded',(e=>{this.recomputeLegendStyles(),this.drawLegend()})),this.signal.listen('carte/mapScale',(e=>{this.recomputeLegendStyles(),this.drawLegend()})),this.signal.listen('user/layerVisibilityChanged',(e=>{this.recomputeLegendStyles(),this.drawLegend()})),this.signal.listen('legendPanel/legendCountChanged',(e=>{this.resizeAndRedrawCanvas()}))}addLegendItem(e){expect(e,'Object');var s=e.layerId??null,t=e.zOrder??0,n=null!=s?this.thematicEarthElement.earth.catalog.getLayer(s):null,a=e.legendSymbol??LS.CIRCLE,i=e.tessClassname??(null!=n?n.tessClassname:''),l=e.tessIdentifier??(null!=n?n.tessIdentifier:''),r=e.tessPropertyName??(null!=n?n.featureKey:''),d=e.tessPropertyValue??'',g=e.legendText??(null!=n?n.layerName:''),h=e.tessBackgroundIdentifier||'',o=e.tessLabelIdentifier??'',m=new LegendSlice(s,t,a,i,l,r,d,g,h,o);this.legendCanvas.addLegendItem(t,m),this.recomputeLegendStyles()}registerResizeListener(){var e=this.getElementById('legend');this.resizeObserver=new ResizeObserver(this.resizeAndRedrawCanvas.bind(this)),this.resizeObserver.observe(e)}resizeAndRedrawCanvas(){var e=this.getElementById('legend').offsetWidth,s=this.getElementById('legend-canvas');s.height=LegendConsts.getSliceHeight()*this.legendCanvas.countVisibleSlices(),s.width=e,this.drawLegend()}recomputeLegendStyles(){this.legendCanvas.recomputeStyles(this.thematicEarthElement.earth.visual)}runCourtesyValidator(){this.legendCanvas.runCourtesyValidator(this.thematicEarthElement.earth.visual)}drawLegend(){var e=this.getElementById('legend-canvas');null!=e&&this.legendCanvas.draw(e)}}