This is an automated email from the ASF dual-hosted git repository.
bchapuis pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps-site.git
The following commit(s) were added to refs/heads/main by this push:
new 3068793 Add maplibre extensions
3068793 is described below
commit 30687930afe7a9b6391e62cf78d39a4b04701772
Author: Bertil Chapuis <[email protected]>
AuthorDate: Wed Feb 28 00:06:50 2024 +0100
Add maplibre extensions
---
.../assets/maplibre/maplibre-custom-controls.css | 6 +
public/assets/maplibre/maplibre-custom-controls.js | 76 ++++++++
public/assets/maplibre/maplibre-gl-framerate.js | 204 +++++++++++++++++++++
public/assets/maplibre/maplibre-gl-inspect.css | 74 ++++++++
public/assets/maplibre/maplibre-gl-inspect.js | 35 ++++
.../maplibre/maplibre-gl-tile-boundaries.css | 30 +++
.../assets/maplibre/maplibre-gl-tile-boundaries.js | 94 ++++++++++
7 files changed, 519 insertions(+)
diff --git a/public/assets/maplibre/maplibre-custom-controls.css
b/public/assets/maplibre/maplibre-custom-controls.css
new file mode 100644
index 0000000..f43e749
--- /dev/null
+++ b/public/assets/maplibre/maplibre-custom-controls.css
@@ -0,0 +1,6 @@
+.maplibregl-ctrl-split-view {
+ background-image: url("data:image/svg+xml,%3Csvg
xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M0 96C0
60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3
0-64-28.7-64-64V96zm64 64V416H224V160H64zm384
0H288V416H448V160z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-size: 20px 20px;
+ background-position: 5px 5px;
+}
\ No newline at end of file
diff --git a/public/assets/maplibre/maplibre-custom-controls.js
b/public/assets/maplibre/maplibre-custom-controls.js
new file mode 100644
index 0000000..0b032d0
--- /dev/null
+++ b/public/assets/maplibre/maplibre-custom-controls.js
@@ -0,0 +1,76 @@
+/**
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ **/
+
+/**
+ * Maplibre control to toggle the split view with another map.
+ *
+ * Both maps must be in a container of display: flex. The control will toggle
the flex property of
+ * the map container between 0 and 1.
+ * @see https://maplibre.org/maplibre-gl-js-docs/api/markers/#icontrol
+ */
+class MaplibreMapSplitViewToggle {
+ constructor({ splitMap, splitMapContainerId }) {
+ this._splitMap = splitMap;
+ this._splitMapContainerId = splitMapContainerId;
+ }
+ /**
+ * Add the control to the map.
+ * @param {maplibre.Map} map the map
+ * @returns {HTMLDivElement} the control
+ */
+ onAdd(map) {
+ this._map = map;
+ this._container = document.createElement('div');
+ this._container.className = 'maplibregl-ctrl maplibregl-ctrl-group';
+ // Add button to the container
+ this._button = document.createElement('button');
+ this._button.type = 'button';
+ this._button.className = 'maplibregl-ctrl-icon
maplibregl-ctrl-split-view';
+ // Toggle the split view
+ this._button.onclick = () => {
+ const splitMapContainer =
document.getElementById(this._splitMapContainerId);
+ const state = splitMapContainer.getAttribute('data-state');
+ if (state === 'visible') {
+ // Hide the osm map
+ splitMapContainer.setAttribute('data-state', 'hidden');
+ splitMapContainer.style.flex = '0';
+ this._map.resize();
+ this._splitMap.resize();
+ this._button.style.backgroundColor = '';
+ } else {
+ // Show the osm map
+ splitMapContainer.setAttribute('data-state', 'visible');
+ splitMapContainer.style.flex = '1';
+ this._map.resize();
+ this._splitMap.resize();
+ this._button.style.backgroundColor = 'rgb(0 0 0/20%)';
+ }
+ };
+ this._container.appendChild(this._button);
+ return this._container;
+ }
+
+ /**
+ * Remove the control from the map.
+ */
+ onRemove() {
+ this._container.parentNode.removeChild(this._container);
+ this._button = undefined;
+ this._map = undefined;
+ }
+}
+
\ No newline at end of file
diff --git a/public/assets/maplibre/maplibre-gl-framerate.js
b/public/assets/maplibre/maplibre-gl-framerate.js
new file mode 100644
index 0000000..5df1302
--- /dev/null
+++ b/public/assets/maplibre/maplibre-gl-framerate.js
@@ -0,0 +1,204 @@
+/**
+ * Copyright (c) 2019, Mapbox
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Source:
+ * https://github.com/mapbox/mapbox-gl-framerate
+ */
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ?
module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.FrameRateControl = factory());
+}(this, (function () { 'use strict';
+
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+
+ function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+ }
+
+ function _objectSpread(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+ var ownKeys = Object.keys(source);
+
+ if (typeof Object.getOwnPropertySymbols === 'function') {
+ ownKeys =
ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+ return Object.getOwnPropertyDescriptor(source,
sym).enumerable;
+ }));
+ }
+
+ ownKeys.forEach(function (key) {
+ _defineProperty(target, key, source[key]);
+ });
+ }
+
+ return target;
+ }
+
+ var FrameRateControl = function FrameRateControl(options) {
+ var _this = this;
+
+ _classCallCheck(this, FrameRateControl);
+
+ _defineProperty(this, "onAdd", function (map) {
+ _this.map = map;
+ var dpr = window.devicePixelRatio;
+ var _this$options = _this.options,
+ width = _this$options.width,
+ graphWidth = _this$options.graphWidth,
+ graphHeight = _this$options.graphHeight,
+ color = _this$options.color,
+ background = _this$options.background,
+ font = _this$options.font;
+ var el = _this.container = document.createElement('div');
+ el.className = 'maplibregl-ctrl maplibregl-ctrl-fps';
+ el.style.backgroundColor = background;
+ el.style.borderRadius = '6px';
+ _this.readOutput = document.createElement('div');
+ _this.readOutput.style.color = color;
+ _this.readOutput.style.fontFamily = font;
+ _this.readOutput.style.padding = '0 5px 5px';
+ _this.readOutput.style.fontSize = '9px';
+ _this.readOutput.style.fontWeight = 'bold';
+ _this.readOutput.textContent = 'Waiting…';
+ _this.canvas = document.createElement('canvas');
+ _this.canvas.className = 'maplibregl-ctrl-canvas';
+ _this.canvas.width = width;
+ _this.canvas.height = graphHeight;
+ _this.canvas.style.cssText = "width: ".concat(width / dpr, "px;
height: ").concat(graphHeight / dpr, "px;");
+ el.appendChild(_this.readOutput);
+ el.appendChild(_this.canvas);
+
+ _this.map.on('movestart', _this.onMoveStart);
+
+ _this.map.on('moveend', _this.onMoveEnd);
+
+ return _this.container;
+ });
+
+ _defineProperty(this, "onMoveStart", function () {
+ _this.frames = 0;
+ _this.time = performance.now();
+
+ _this.map.on('render', _this.onRender);
+ });
+
+ _defineProperty(this, "onMoveEnd", function () {
+ var now = performance.now();
+
+ _this.updateGraph(_this.getFPS(now));
+
+ _this.frames = 0;
+ _this.time = null;
+
+ _this.map.off('render', _this.onRender);
+ });
+
+ _defineProperty(this, "onRender", function () {
+ _this.frames++;
+ var now = performance.now();
+
+ if (now >= _this.time + 1e3) {
+ _this.updateGraph(_this.getFPS(now));
+
+ _this.frames = 0;
+ _this.time = now;
+ }
+ });
+
+ _defineProperty(this, "getFPS", function (now) {
+ _this.totalTime += now - _this.time, _this.totalFrames +=
_this.frames;
+ return Math.round(1e3 * _this.frames / (now - _this.time)) || 0;
+ });
+
+ _defineProperty(this, "updateGraph", function (fpsNow) {
+ var _this$options2 = _this.options,
+ barWidth = _this$options2.barWidth,
+ graphRight = _this$options2.graphRight,
+ graphTop = _this$options2.graphTop,
+ graphWidth = _this$options2.graphWidth,
+ graphHeight = _this$options2.graphHeight,
+ background = _this$options2.background,
+ color = _this$options2.color;
+
+ var context = _this.canvas.getContext('2d');
+
+ var fps = Math.round(1e3 * _this.totalFrames / _this.totalTime) ||
0;
+ var rect = (barWidth);
+ context.fillStyle = background;
+ context.globalAlpha = 1;
+ context.fillRect(0, 0, graphWidth, graphTop);
+ context.fillStyle = color;
+ _this.readOutput.textContent = "".concat(fpsNow, " FPS
(").concat(fps, " Avg)");
+ context.drawImage(_this.canvas, graphRight + rect, graphTop,
graphWidth - rect, graphHeight, graphRight, graphTop, graphWidth - rect,
graphHeight);
+ context.fillRect(graphRight + graphWidth - rect, graphTop, rect,
graphHeight);
+ context.fillStyle = background;
+ context.globalAlpha = 0.75;
+ context.fillRect(graphRight + graphWidth - rect, graphTop, rect,
(1 - fpsNow / 100) * graphHeight);
+ });
+
+ _defineProperty(this, "onRemove", function () {
+ _this.map.off('render', _this.onRender);
+
+ _this.map.off('movestart', _this.onMoveStart);
+
+ _this.map.off('moveend', _this.onMoveEnd);
+
+ _this.container.parentNode.removeChild(_this.container);
+
+ _this.map = null;
+ return _this;
+ });
+
+ var _dpr = window.devicePixelRatio;
+ var defaultOptions = {
+ background: 'rgba(0,0,0,0.9)',
+ barWidth: 4 * _dpr,
+ color: '#7cf859',
+ font: 'Monaco, Consolas, Courier, monospace',
+ graphHeight: 60 * _dpr,
+ graphWidth: 90 * _dpr,
+ graphTop: 0,
+ graphRight: 5 * _dpr,
+ width: 100 * _dpr
+ };
+ this.frames = 0;
+ this.totalTime = 0;
+ this.totalFrames = 0;
+ this.options = _objectSpread({}, options, defaultOptions);
+ };
+
+ if (window.maplibregl) {
+ maplibregl.FrameRateControl = FrameRateControl;
+ }
+
+ return FrameRateControl;
+
+})));
\ No newline at end of file
diff --git a/public/assets/maplibre/maplibre-gl-inspect.css
b/public/assets/maplibre/maplibre-gl-inspect.css
new file mode 100644
index 0000000..ac30063
--- /dev/null
+++ b/public/assets/maplibre/maplibre-gl-inspect.css
@@ -0,0 +1,74 @@
+/**
+ * BSD 3-Clause License
+ *
+ * Copyright (c) 2017, Lukas Martinelli
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
this
+ * list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Source:
+ * https://github.com/acalcutt/maplibre-gl-inspect
+ */
+
+.maplibregl-inspect_popup {
+ color: #333;
+ display: table;
+}
+
+.maplibregl-inspect_feature:not(:last-child) {
+ border-bottom: 1px solid #ccc;
+}
+
+.maplibregl-inspect_layer:before {
+ content: '#';
+}
+
+.maplibregl-inspect_layer {
+ display: block;
+ font-weight: bold;
+}
+
+.maplibregl-inspect_property {
+ display: table-row;
+}
+
+.maplibregl-inspect_property-value {
+ display: table-cell;
+
+}
+
+.maplibregl-inspect_property-name {
+ display: table-cell;
+ padding-right: 10px;
+}
+
+.maplibregl-ctrl-inspect {
+ background-image: url("data:image/svg+xml,%3Csvg
xmlns='http://www.w3.org/2000/svg' fill='%23333333'
preserveAspectRatio='xMidYMid meet' viewBox='-10 -10 60 60'%3E%3Cg%3E%3Cpath
d='m15 21.6q0-2 1.5-3.5t3.5-1.5 3.5 1.5 1.5 3.5-1.5 3.6-3.5
1.4-3.5-1.4-1.5-3.6z m18.4 11.1l-6.4-6.5q1.4-2.1 1.4-4.6
0-3.4-2.5-5.8t-5.9-2.4-5.9 2.4-2.5 5.8 2.5 5.9 5.9 2.5q2.4 0 4.6-1.4l7.4
7.4q-0.9 0.6-2 0.6h-20q-1.3 0-2.3-0.9t-1.1-2.3l0.1-26.8q0-1.3
1-2.3t2.3-0.9h13.4l10 10v19.3z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");
+}
+
+.maplibregl-ctrl-map {
+ background-image: url("data:image/svg+xml,%3Csvg
xmlns='http://www.w3.org/2000/svg' fill='%23333333' viewBox='-10 -10 60 60'
preserveAspectRatio='xMidYMid meet'%3E%3Cg%3E%3Cpath d='m25
31.640000000000004v-19.766666666666673l-10-3.511666666666663v19.766666666666666z
m9.140000000000008-26.640000000000004q0.8599999999999923 0 0.8599999999999923
0.8600000000000003v25.156666666666666q0 0.625-0.625 0.783333333333335l-9.375
3.1999999999999993-10-3.5133333333333354-8.906666666666668 3.43833333 [...]
+}
diff --git a/public/assets/maplibre/maplibre-gl-inspect.js
b/public/assets/maplibre/maplibre-gl-inspect.js
new file mode 100644
index 0000000..a2ef598
--- /dev/null
+++ b/public/assets/maplibre/maplibre-gl-inspect.js
@@ -0,0 +1,35 @@
+/**
+ * BSD 3-Clause License
+ *
+ * Copyright (c) 2017, Lukas Martinelli
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
this
+ * list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the copyright holder nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Source:
+ * https://github.com/acalcutt/maplibre-gl-inspect
+ */
+!function(t){"object"==typeof exports&&"undefined"!=typeof
module?module.exports=t():"function"==typeof
define&&define.amd?define([],t):("undefined"!=typeof
window?window:"undefined"!=typeof global?global:"undefined"!=typeof
self?self:this).MaplibreInspect=t()}(function(){return function
r(o,i,s){function a(e,t){if(!i[e]){if(!o[e]){var n="function"==typeof
require&&require;if(!t&&n)return n(e,!0);if(u)return u(e,!0);throw(n=new
Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND" [...]
\ No newline at end of file
diff --git a/public/assets/maplibre/maplibre-gl-tile-boundaries.css
b/public/assets/maplibre/maplibre-gl-tile-boundaries.css
new file mode 100644
index 0000000..72324ef
--- /dev/null
+++ b/public/assets/maplibre/maplibre-gl-tile-boundaries.css
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.maplibregl-ctrl-hide-boundaries {
+ background-image: url("data:image/svg+xml,%3Csvg
xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3C!--! Font Awesome
Pro 6.2.0 by @fontawesome - https://fontawesome.com License -
https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons,
Inc. --%3E%3Cpath d='M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3
32-32s-14.3-32-32-32zm96 64c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32
32s14.3 32 32 32zm0-384c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3- [...]
+ background-repeat: no-repeat;
+ background-size: 20px 20px;
+ background-position: 5px 5px;
+}
+
+.maplibregl-ctrl-show-boundaries {
+ background-image: url("data:image/svg+xml,%3Csvg
xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3C!--! Font Awesome
Pro 6.2.0 by @fontawesome - https://fontawesome.com License -
https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons,
Inc. --%3E%3Cpath d='M384 96V224H256V96H384zm0 192V416H256V288H384zM192
224H64V96H192V224zM64 288H192V416H64V288zM64 32C28.7 32 0 60.7 0 96V416c0 35.3
28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z' [...]
+ background-repeat: no-repeat;
+ background-size: 20px 20px;
+ background-position: 5px 5px;
+}
diff --git a/public/assets/maplibre/maplibre-gl-tile-boundaries.js
b/public/assets/maplibre/maplibre-gl-tile-boundaries.js
new file mode 100644
index 0000000..75991dd
--- /dev/null
+++ b/public/assets/maplibre/maplibre-gl-tile-boundaries.js
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+function container(child, show) {
+ var container = document.createElement('div');
+ container.className = 'maplibregl-ctrl maplibregl-ctrl-group';
+ container.appendChild(child);
+ if (!show) {
+ container.style.display = 'none';
+ }
+ return container;
+}
+
+function button() {
+ var btn = document.createElement('button');
+ btn.className = 'maplibregl-ctrl-icon maplibregl-ctrl-boundaries';
+ btn.type = 'button';
+ btn['aria-label'] = 'Inspect';
+ return btn;
+}
+
+function BoundariesButton(options) {
+ options = Object.assign({
+ show: true,
+ onToggle: function () {},
+ }, options);
+ this._btn = button();
+ this._btn.onclick = options.onToggle;
+ this.elem = container(this._btn, options.show);
+}
+
+BoundariesButton.prototype.setShowTileBoundariesIcon = function () {
+ this._btn.className = 'maplibregl-ctrl-icon
maplibregl-ctrl-show-boundaries';
+};
+
+BoundariesButton.prototype.setHideTileBoundariesIcon = function () {
+ this._btn.className = 'maplibregl-ctrl-icon
maplibregl-ctrl-hide-boundaries';
+};
+
+function MaplibreTileBoundaries(options) {
+ if (!(this instanceof MaplibreTileBoundaries)) {
+ throw new Error('MaplibreTileBoundaries needs to be called with the
new keyword');
+ }
+
+ this.options = Object.assign({
+ showTileBoundariesButton: true,
+ tileBoundaries: false,
+ }, options);
+
+ this._tileBoundaries = this.options.tileBoundaries;
+ this._toggle = new BoundariesButton({
+ show: this.options.showTileBoundariesButton,
+ onToggle: this.toggleTileBoundaries.bind(this)
+ });
+}
+
+MaplibreTileBoundaries.prototype.toggleTileBoundaries = function () {
+ this._tileBoundaries = !this._tileBoundaries;
+ this.render();
+};
+
+MaplibreTileBoundaries.prototype.render = function () {
+ if (this._tileBoundaries) {
+ this._map.showTileBoundaries = true;
+ this._toggle.setHideTileBoundariesIcon();
+ } else {
+ this._map.showTileBoundaries = false;
+ this._toggle.setShowTileBoundariesIcon();
+ }
+};
+
+MaplibreTileBoundaries.prototype.onAdd = function (map) {
+ this._map = map;
+ this.render();
+ return this._toggle.elem;
+};
+
+MaplibreTileBoundaries.prototype.onRemove = function () {
+ this._map = undefined;
+};