UNPKG

qwc2

Version:
62 lines (61 loc) 2.05 kB
/** * Copyright 2015 GeoSolutions Sas * Copyright 2016-2024 Sourcepole AG * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ import ol from 'openlayers'; var _removeIds = function removeIds(items) { if (items.length !== 0) { for (var i = 0; i < items.length; i++) { var item = items.item(i); item.removeAttribute('data-reactid'); _removeIds(item.children || []); } } }; var cloneOriginalOverlay = function cloneOriginalOverlay(original, options) { var cloned = original.cloneNode(true); cloned.id = options.id + '-overlay'; cloned.className = (options.className || original.className) + "-overlay"; cloned.removeAttribute('data-reactid'); // remove reactjs generated ids from cloned object _removeIds(cloned.children || []); // handle optional close button on overlay var closeClassName = options.closeClass || 'close'; if (options.onClose && cloned.getElementsByClassName(closeClassName).length === 1) { var close = cloned.getElementsByClassName(closeClassName)[0]; var onClose = function onClose(e) { options.onClose(e.target.getAttribute('data-overlayid')); }; close.addEventListener("click", onClose); } return cloned; }; export default { create: function create(options, map) { var original = document.getElementById(options.id); var cloned = cloneOriginalOverlay(original, options); document.body.appendChild(cloned); var overlay = new ol.Overlay({ id: options.id, element: cloned, autoPan: options.autoPan || false, positioning: options.positioning || 'top-left', offset: options.offset || [0, 0], autoPanAnimation: { duration: options.autoPanAnimation || 250 }, position: [options.position.x, options.position.y] }); map.addOverlay(overlay); return { detached: true, remove: function remove() { map.removeOverlay(overlay); } }; } };