UNPKG

mobility-toolbox-js

Version:

Toolbox for JavaScript applications in the domains of mobility and logistics.

72 lines (71 loc) 2.76 kB
import Control from 'ol/control/Control'; import { inView } from 'ol/layer/Layer'; import createDefaultCopyrightElement from '../../common/utils/createDefaultCopyrightElt'; import removeDuplicate from '../../common/utils/removeDuplicate'; /** * Display layer's copyrights. Adding the possibility to format them as you wish. * * @example * import { Map } from 'ol'; * import { CopyrightControl } from 'mobility-toolbox-js/ol'; * * const map = new Map({ * target: 'map', * }); * * const control = new CopyrightControl(); * map.addControl(control); * * * @see <a href="/example/ol-realtime>OpenLayers Realtime layer example</a> * * @extends {ol/control/Control~Control} * */ class CopyrightControl extends Control { /** * Constructor. * * @param {Object} options * @param {Function} format Function used to format the list of copyrights available to a single string. By default join all the copyrights with a |. * @public */ constructor(options = {}) { const element = createDefaultCopyrightElement(); element.className = options.className || 'mbt-copyright'; super(Object.assign({ element }, options)); this.format = options.format || ((copyrights) => { return copyrights === null || copyrights === void 0 ? void 0 : copyrights.join(' | '); }); } render({ frameState }) { if (!frameState) { this.element.innerHTML = ''; return; } let copyrights = []; // This code loop comes mainly from ol. frameState === null || frameState === void 0 ? void 0 : frameState.layerStatesArray.forEach((layerState) => { var _a; const { layer } = layerState; if (frameState && inView(layerState, frameState.viewState)) { const attribFunc = (_a = layer === null || layer === void 0 ? void 0 : layer.getSource()) === null || _a === void 0 ? void 0 : _a.getAttributions(); if (attribFunc) { copyrights = copyrights.concat(attribFunc(frameState)); } if (layer === null || layer === void 0 ? void 0 : layer.get('copyrights')) { let copyProp = layer.get('copyrights'); copyProp = !Array.isArray(copyProp) ? [copyProp] : copyProp; if (copyProp === null || copyProp === void 0 ? void 0 : copyProp.length) { copyrights.push(...copyProp); } } } }); const unique = removeDuplicate(copyrights) || []; this.element.innerHTML = this.format(unique); } } export default CopyrightControl;