mobility-toolbox-js
Version:
Toolbox for JavaScript applications in the domains of mobility and logistics.
72 lines (71 loc) • 2.76 kB
JavaScript
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;