UNPKG

maplair

Version:

JavaScript library for mobile-friendly interactive maps

49 lines (42 loc) • 1.72 kB
import {Canvas} from './Canvas.js'; import {SVG} from './SVG.js'; // Registers `getRenderer()` and related methods on the given map class, called by `MaplairMap` itself. export function register(MaplairMap) { MaplairMap.include({ // @namespace MaplairMap; @method getRenderer(layer: Path): Renderer // Returns the instance of `Renderer` that should be used to render the given // `Path`. It will ensure that the `renderer` options of the map and paths // are respected, and that the renderers do exist on the map. getRenderer(layer) { // @namespace Path; @option renderer: Renderer // Use this specific instance of `Renderer` for this path. Takes // precedence over the map's [default renderer](#map-renderer). // If set, it will override the `pane` option of the path. let renderer = layer.options.renderer ?? this._getPaneRenderer(layer.options.pane) ?? this.options.renderer ?? this._renderer; if (!renderer) { renderer = this._renderer = this._createRenderer(); } if (!this.hasLayer(renderer)) { this.addLayer(renderer); } return renderer; }, _getPaneRenderer(name) { if (name === 'overlayPane' || name === undefined) { return; } let renderer = this._paneRenderers[name]; if (renderer === undefined) { renderer = this._createRenderer({pane: name}); this._paneRenderers[name] = renderer; } return renderer; }, _createRenderer(options) { // @namespace MaplairMap; @option preferCanvas: Boolean = false // Whether `Path`s should be rendered on a `Canvas` renderer. // By default, all `Path`s are rendered in a `SVG` renderer. return (this.options.preferCanvas && new Canvas(options)) || new SVG(options); } }); }