thematic-earth
Version:
HTML-based, whole-Earth thematic maps using locally hosted data layers
2 lines • 1.38 kB
JavaScript
/* Copyright (c) 2023 Read Write Tools. Legal use subject to the Thematic Earth Software License Agreement. */
import LegendConsts from'../legend/legend-consts.js';import expect from'../dev/expect.js';import terminal from'../dev/terminal.js';export default class LegendCanvas{constructor(e){this.thematicEarthElement=e,this.slices=new Map,Object.seal(this)}countVisibleSlices(){var e=0;for(let[t,s]of this.slices)1==s.showSlice()&&e++;return e}addLegendItem(e,t){expect(e,'Number'),expect(t,'LegendSlice'),this.slices.has(e)&&terminal.warning(`Legend item with zOrder ${e} already exists. Each legend item should have a unique zOrder`),this.slices.set(e,t)}recomputeStyles(e){expect(e,'Visualizer');var t=this.countVisibleSlices();for(let[t,s]of this.slices)s.recomputeStyles(e);t!=this.countVisibleSlices()&&this.thematicEarthElement.signal.broadcast('legendPanel/legendCountChanged',null)}runCourtesyValidator(e){expect(e,'Visualizer');for(let[t,s]of this.slices)s.runCourtesyValidator(e)}draw(e){expect(e,'HTMLCanvasElement');var t=e.getContext('2d');t.clearRect(0,0,t.canvas.width,t.canvas.height);var s=this.thematicEarthElement.earth.patternCache,i=[...this.slices];i.sort(((e,t)=>e[0]>t[0]?-1:e[0]<t[0]?1:0));var r=0;for(let t=0;t<i.length;t++){var a=i[t][1];1==a.showSlice()&&(a.determineSliceXY(),a.determineLegendXY(r),a.draw(e,s,r),r+=LegendConsts.getSliceHeight())}}}