qwc2
Version:
QGIS Web Client
62 lines (61 loc) • 2.05 kB
JavaScript
/**
* 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);
}
};
}
};