diff --git a/changelog.xml b/changelog.xml index 8050208..05dde6d 100644 --- a/changelog.xml +++ b/changelog.xml @@ -39,6 +39,9 @@ 4.0.6 Tiding up language files + Add possiblility for layer control with satellite in frontend + Make separators more visible in the backend + Correct Panel Layer diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/js/aggpxtrack.js b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/js/aggpxtrack.js index 64942b0..3212f55 100644 --- a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/js/aggpxtrack.js +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/js/aggpxtrack.js @@ -7,6 +7,8 @@ document.addEventListener('DOMContentLoaded', function () { var unique = element.getAttribute('data-unique'); var scrollwheelzoom = element.getAttribute('data-scrollwheelzoom'); var maptype = element.getAttribute('data-maptype'); + var layertree = element.getAttribute('data-layertree'); + var thunderforestkey = element.getAttribute('data-thunderforestkey'); var mapboxkey = element.getAttribute('data-mapboxkey'); var geoportailfrancekey = element.getAttribute('data-geoportailfrancekey'); @@ -204,37 +206,42 @@ document.addEventListener('DOMContentLoaded', function () { } // Load the correct map + // Base layer url + var tileLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: 18, + attribution: '© OpenStreetMap' + }); if (maptype === "osm") { - L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + tileLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '© OpenStreetMap' - }).addTo(window['mymap' + unique]); + }); } else if (maptype === "osm_bw") { - L.tileLayer('http://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png', { + tileLayer = L.tileLayer('http://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '© OpenStreetMap' - }).addTo(window['mymap' + unique]); + }); } else if (maptype === 'thunderforest') { - L.tileLayer('https://{s}.tile.thunderforest.com/' + thunderforestmaptype + '/{z}/{x}/{y}.png?apikey={apikey}', { + tileLayer = L.tileLayer('https://{s}.tile.thunderforest.com/' + thunderforestmaptype + '/{z}/{x}/{y}.png?apikey={apikey}', { maxZoom: 22, apikey: thunderforestkey, attribution: '© Thunderforest, © OpenStreetMap' - }).addTo(window['mymap' + unique]); + }); } else if (maptype === 'mapbox') { - L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=' + mapboxkey, { + tileLayer = L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=' + mapboxkey, { maxZoom: 18, attribution: 'Map data © OpenStreetMap contributors, ' + 'CC-BY-SA, ' + 'Imagery © Mapbox', id: 'mapbox.streets' - }).addTo(window['mymap' + unique]); + }); } else if (maptype === 'geoportailfrance') { - L.tileLayer('https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', { + tileLayer = L.tileLayer('https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}', { attribution: 'Geoportail France', bounds: [[-75, -180], [81, 180]], minZoom: 2, @@ -245,25 +252,40 @@ document.addEventListener('DOMContentLoaded', function () { format: 'image/png', style: 'normal', variant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2' - }).addTo(window['mymap' + unique]); + }); } else if (maptype === 'opentopomap') { - L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { + tileLayer = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { maxZoom: 17, attribution: 'Map data: © OpenStreetMap, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' - }).addTo(window['mymap' + unique]); + }); } else if (maptype === 'google') { - L.gridLayer.googleMutant({ + tileLayer = L.gridLayer.googleMutant({ type: googlemapstype, - }).addTo(window['mymap' + unique]); + }); } else { - L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + tileLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: '' - }).addTo(window['mymap' + unique]); + }); } + tileLayer.addTo(window['mymap' + unique]); + + if (layertree == '1') { + var tileLayer2 = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { + maxZoom: 16, + attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community', + id: '' + }); + var baseMaps = { + "Map": tileLayer, + "Satellit": tileLayer2 + }; + L.control.layers(baseMaps).addTo(window['mymap' + unique]); + } + // KML Overlay if (show_omnivore === "1") diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.eslintrc b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.eslintrc new file mode 100644 index 0000000..2e16c4a --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.eslintrc @@ -0,0 +1,35 @@ +{ + "globals": { + "define": true, + "module": true, + "L": true + }, + "plugins": [ + "html" + ], + "settings": { + "html/indent": "space", + "html/report-bad-indent": 2 + }, + "rules": { + "camelcase": "error", + "comma-spacing": ["error", {"after": true}], + "comma-style": "error", + "indent": "error", + "key-spacing": "error", + "keyword-spacing": "error", + "no-console": "error", + "no-constant-condition": "off", + "no-lonely-if": "error", + "no-multi-spaces": "error", + "no-shadow": "off", + "no-trailing-spaces": "error", + "no-underscore-dangle": "off", + "object-curly-spacing": "error", + "quotes": ["error", "single", "avoid-escape"], + "space-before-blocks": "error", + "space-before-function-paren": ["error", "never"], + "space-in-parens": "error", + "strict": "off" + } +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/main.yml b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/main.yml new file mode 100644 index 0000000..bfbc421 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/main.yml @@ -0,0 +1,52 @@ +name: CI + +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ master ] + pull_request: + branches: [ master ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + test: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [ 14.x ] + working-directory: [ '.', './test-types' ] + + steps: + - name: Checkout branch + uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules-${{ matrix.working-directory }} + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - name: Install dependencies + run: npm ci + working-directory: ${{ matrix.working-directory }} + + - name: Run tests + run: npm run test + working-directory: ${{ matrix.working-directory }} + timeout-minutes: 2 diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/npm-publish.yml b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..a1b63b3 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/npm-publish.yml @@ -0,0 +1,29 @@ +name: npm-publish + +on: + push: + branches: [ master ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + npm-publish: + name: npm-publish + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Publish if version has been updated + uses: pascalgn/npm-publish-action@1.3.7 + with: # All of theses inputs are optional + tag_name: "v%s" + tag_message: "v%s" + create_tag: "true" + commit_pattern: "^Release (\\S+)" + workspace: "." + publish_command: "yarn" + publish_args: "--non-interactive" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this as is, it's automatically generated + NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # You need to set this in your repo settings diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.npmignore b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.npmignore new file mode 100644 index 0000000..b57d3d0 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.npmignore @@ -0,0 +1,7 @@ +.github +.travis.yml +.vscode +bower.json +examples +test +test-types diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.css b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.css new file mode 100644 index 0000000..93909d7 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.css @@ -0,0 +1,61 @@ +.leaflet-control-layers-toggle.leaflet-layerstree-named-toggle { + margin: 2px 5px; + width: auto; + height: auto; + background-image: none; +} + +.leaflet-layerstree-node { +} + +.leaflet-layerstree-header input{ + margin-left: 0px; +} + + +.leaflet-layerstree-header { +} + +.leaflet-layerstree-header-pointer { + cursor: pointer; +} + +.leaflet-layerstree-header label { + display: inline-block; + cursor: pointer; +} + +.leaflet-layerstree-header-label { +} + +.leaflet-layerstree-header-name { +} + +.leaflet-layerstree-header-space { +} + +.leaflet-layerstree-children { + padding-left: 10px; +} + +.leaflet-layerstree-children-nopad { + padding-left: 0px; +} + +.leaflet-layerstree-closed { +} + +.leaflet-layerstree-opened { +} + +.leaflet-layerstree-hide { + display: none; +} + +.leaflet-layerstree-nevershow { + display: none; +} + +.leaflet-layerstree-expand-collapse { + cursor: pointer; +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.d.ts b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.d.ts new file mode 100644 index 0000000..8f140a5 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.d.ts @@ -0,0 +1,115 @@ +import * as L from 'leaflet'; + +declare module 'leaflet' { + namespace Control { + namespace Layers { + interface TreeObject { + children?: TreeObject[]; + collapsed?: boolean; + label: string; + layer?: L.Layer; + name?: string; + selectAllCheckbox?: boolean | string; + } + + interface TreeOptions extends L.Control.LayersOptions { + /** + * Symbol displayed on a closed node. + * @default '+' + */ + closedSymbol?: string; + + /** + * Symbol displayed on an open node. + * @default '−' (−) + */ + openedSymbol?: string; + + /** + * Symbol between the closed or opened symbol, and the text. + * @default ' ' (a normal space) + */ + spaceSymbol?: string; + + /** + * Flag to indicate if the selector (+ or −) is after the text. + * @default false + */ + selectorBack?: boolean; + + /** + * Flag to replace the toggle image (box with the layers image) + * with the 'name' of the selected base layer. + * If the name field is not present in the tree for this layer, + * label is used. + * See that you can show a different name when control is + * collapsed than the one that appears in the tree + * when it is expanded. Your node in the tree can be + * { label: 'OSM', name: 'OpenStreetMap', layer: layer }. + * @default false + */ + namedToggle?: boolean; + + /** + * Text for an entry in control that collapses the tree + * (baselayers or overlays). + * If empty, no entry is created. + * @default ''. + */ + collapseAll?: string; + + /** + * Text for an entry in control that expands the tree. + * If empty, no entry is created. + * @default '' + */ + expandAll?: string; + + /** + * Controls if a label or only the checkbox/radio button can + * toggle layers. + * If set to both, overlay or base those labels can be clicked on + * to toggle the layer. + * @default 'both'. + */ + labelIsSelector?: 'both' | 'overlay' | 'base' | string; + } + + class Tree extends L.Control.Layers { + constructor( + baseTree?: TreeObject, + overlayTree?: TreeObject, + options?: TreeOptions + ); + + setBaseTree(baseTree: TreeObject): this; + + setOverlayTree(overlayTree: TreeObject): this; + + addBaseLayer(layer: L.Layer, name: string): never; + + addOverlay(layer: L.Layer, name: string): never; + + removeLayer(layer: L.Layer): never; + + expandTree(isOverlay?: boolean): this; + + collapseTree(isOverlay?: boolean): this; + + expandSelected(isOverlay?: boolean): this; + + options: TreeOptions; + } + } + } + + namespace control { + namespace layers { + function tree( + baseTree?: Control.Layers.TreeObject, + overlayTree?: Control.Layers.TreeObject, + options?: Control.Layers.TreeOptions + ): Control.Layers.Tree; + } + } +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.js b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.js new file mode 100644 index 0000000..b65b294 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.js @@ -0,0 +1,521 @@ +/* + * Control like L.Control.Layers, but showing layers in a tree. + * Do not forget to include the css file. + */ + +(function(L) { + if (typeof L === 'undefined') { + throw new Error('Leaflet must be included first'); + } + + /* + * L.Control.Layers.Tree extends L.Control.Layers because it reuses + * most of its functionality. Only the HTML creation is different. + */ + L.Control.Layers.Tree = L.Control.Layers.extend({ + options: { + closedSymbol: '+', + openedSymbol: '−', + spaceSymbol: ' ', + selectorBack: false, + namedToggle: false, + collapseAll: '', + expandAll: '', + labelIsSelector: 'both', + }, + + // Class names are error prone texts, so write them once here + _initClassesNames: function() { + this.cls = { + children: 'leaflet-layerstree-children', + childrenNopad: 'leaflet-layerstree-children-nopad', + hide: 'leaflet-layerstree-hide', + closed: 'leaflet-layerstree-closed', + opened: 'leaflet-layerstree-opened', + space: 'leaflet-layerstree-header-space', + pointer: 'leaflet-layerstree-header-pointer', + header: 'leaflet-layerstree-header', + neverShow: 'leaflet-layerstree-nevershow', + node: 'leaflet-layerstree-node', + name: 'leaflet-layerstree-header-name', + label: 'leaflet-layerstree-header-label', + selAllCheckbox: 'leaflet-layerstree-sel-all-checkbox', + }; + }, + + initialize: function(baseTree, overlaysTree, options) { + this._scrollTop = 0; + this._initClassesNames(); + this._baseTree = null; + this._overlaysTree = null; + L.Util.setOptions(this, options); + L.Control.Layers.prototype.initialize.call(this, null, null, options); + this._setTrees(baseTree, overlaysTree); + }, + + setBaseTree: function(tree) { + return this._setTrees(tree); + }, + + setOverlayTree: function(tree) { + return this._setTrees(undefined, tree); + }, + + addBaseLayer: function(layer, name) { + throw 'addBaseLayer is disabled'; + }, + + addOverlay: function(layer, name) { + throw 'addOverlay is disabled'; + }, + + removeLayer: function(layer) { + throw 'removeLayer is disabled'; + }, + + collapse: function() { + this._scrollTop = this._sect().scrollTop; + return L.Control.Layers.prototype.collapse.call(this); + }, + + expand: function() { + var ret = L.Control.Layers.prototype.expand.call(this); + this._sect().scrollTop = this._scrollTop; + }, + + onAdd: function(map) { + function changeName(layer) { + if (layer._layersTreeName) { + toggle.innerHTML = layer._layersTreeName; + } + } + + var ret = L.Control.Layers.prototype.onAdd.call(this, map); + if (this.options.namedToggle) { + var toggle = this._container.getElementsByClassName('leaflet-control-layers-toggle')[0]; + L.DomUtil.addClass(toggle, 'leaflet-layerstree-named-toggle'); + // Start with this value... + map.eachLayer(function(layer) {changeName(layer);}); + // ... and change it whenever the baselayer is changed. + map.on('baselayerchange', function(e) {changeName(e.layer);}, this); + } + return ret; + }, + + // Expands the whole tree (base other overlays) + expandTree: function(overlay) { + var container = overlay ? this._overlaysList : this._baseLayersList; + if (container) { + this._applyOnTree(container, false); + } + return this._localExpand(); + }, + + // Collapses the whole tree (base other overlays) + collapseTree: function(overlay) { + var container = overlay ? this._overlaysList : this._baseLayersList; + if (container) { + this._applyOnTree(container, true); + } + return this._localExpand(); + }, + + // Expands the tree, only to show the selected inputs + expandSelected: function(overlay) { + function iter(el) { + // Function to iterate the whole DOM upwards + var p = el.parentElement; + if (p) { + if (L.DomUtil.hasClass(p, that.cls.children) && + !L.DomUtil.hasClass(el, that.cls.childrenNopad)) { + L.DomUtil.removeClass(p, hide); + } + + if (L.DomUtil.hasClass(p, that.cls.node)) { + var h = p.getElementsByClassName(that.cls.header)[0]; + that._applyOnTree(h, false); + } + iter(p); + } + } + + var that = this; + var container = overlay ? this._overlaysList : this._baseLayersList; + if (!container) return this; + var hide = this.cls.hide; + var inputs = this._layerControlInputs || container.getElementsByTagName('input'); + for (var i = 0; i < inputs.length; i++) { + // Loop over every (valid) input. + var input = inputs[i]; + if (this._getLayer && !!this._getLayer(input.layerId).overlay != !!overlay) continue + if (input.checked) { + // Get out of the header, + // to not open the posible (but rare) children + iter(input.parentElement.parentElement.parentElement.parentElement); + } + } + return this._localExpand(); + }, + + // "private" methods, not exposed in the API + _sect: function() { + // to keep compatibility after 1.3 https://github.com/Leaflet/Leaflet/pull/6380 + return this._section || this._form; + }, + + _setTrees: function(base, overlays) { + var id = 0; // to keep unique id + function iterate(tree, output, overlays) { + if (tree && tree.layer) { + if (!overlays) { + tree.layer._layersTreeName = tree.name || tree.label; + } + output[id++] = tree.layer; + } + if (tree && tree.children && tree.children.length) { + tree.children.forEach(function(child) { + iterate(child, output, overlays); + }); + } + return output; + } + + // We accept arrays, but convert into an object with children + function forArrays(input) { + if (Array.isArray(input)) { + return {noShow: true, children: input}; + } else { + return input + } + } + + // Clean everything, and start again. + if (this._layerControlInputs) { + this._layerControlInputs = []; + } + for (var i = 0; i < this._layers.length; ++i) { + this._layers[i].layer.off('add remove', this._onLayerChange, this); + } + this._layers = []; + + if (base !== undefined) this._baseTree = forArrays(base); + if (overlays !== undefined) this._overlaysTree = forArrays(overlays); + + var bflat = iterate(this._baseTree, {}); + for (var i in bflat) { + this._addLayer(bflat[i], i); + } + + var oflat = iterate(this._overlaysTree, {}, true); + for (i in oflat) { + this._addLayer(oflat[i], i, true); + } + return (this._map) ? this._update() : this; + }, + + // Used to update the vertical scrollbar + _localExpand: function() { + if (this._map && L.DomUtil.hasClass(this._container, 'leaflet-control-layers-expanded')) { + var top = this._sect().scrollTop; + this.expand(); + this._sect().scrollTop = top; // to keep the scroll location + this._scrollTop = top; + } + return this; + }, + + // collapses or expands the tree in the containter. + _applyOnTree: function(container, collapse) { + var iters = [ + {cls: this.cls.children, hide: collapse}, + {cls: this.cls.opened, hide: collapse}, + {cls: this.cls.closed, hide: !collapse}, + ]; + iters.forEach(function(it) { + var els = container.getElementsByClassName(it.cls); + for (var i = 0; i < els.length; i++) { + var el = els[i]; + if (L.DomUtil.hasClass(el, this.cls.childrenNopad)) { + // do nothing + } else if (it.hide) { + L.DomUtil.addClass(el, this.cls.hide); + } else { + L.DomUtil.removeClass(el, this.cls.hide); + } + } + }, this); + }, + + // it is called in the original _update, and shouldn't do anything. + _addItem: function(obj) { + }, + + // overwrite _update function in Control.Layers + _update: function() { + if (!this._container) { return this; } + L.Control.Layers.prototype._update.call(this); + this._addTreeLayout(this._baseTree, false); + this._addTreeLayout(this._overlaysTree, true); + return this._localExpand(); + }, + + // Create the DOM objects for the tree + _addTreeLayout: function(tree, overlay) { + if (!tree) return; + var container = overlay ? this._overlaysList : this._baseLayersList; + this._expandCollapseAll(overlay, this.options.collapseAll, this.collapseTree); + this._expandCollapseAll(overlay, this.options.expandAll, this.expandTree); + this._iterateTreeLayout(tree, container, overlay, [], tree.noShow) + if (this._checkDisabledLayers) { + // to keep compatibility + this._checkDisabledLayers(); + } + }, + + // Create the "Collapse all" or expand, if needed. + _expandCollapseAll: function(overlay, text, fn, ctx) { + var container = overlay ? this._overlaysList : this._baseLayersList; + ctx = ctx ? ctx : this; + if (text) { + var o = document.createElement('div'); + o.className = 'leaflet-layerstree-expand-collapse'; + container.appendChild(o); + o.innerHTML = text; + o.tabIndex = 0; + L.DomEvent.on(o, 'click keydown', function(e) { + if (e.type !== 'keydown' || e.keyCode === 32) { + o.blur() + fn.call(ctx, overlay); + this._localExpand(); + } + }, this); + } + }, + + // recursive function to create the DOM children + _iterateTreeLayout: function(tree, container, overlay, selAllNodes, noShow) { + if (!tree) return; + function creator(type, cls, append, innerHTML) { + var obj = L.DomUtil.create(type, cls, append); + if (innerHTML) obj.innerHTML = innerHTML; + return obj; + } + + // create the header with it fields + var header = creator('div', this.cls.header, container); + var sel = creator('span'); + var entry = creator('span'); + var closed = creator('span', this.cls.closed, sel, this.options.closedSymbol); + var opened = creator('span', this.cls.opened, sel, this.options.openedSymbol); + var space = creator('span', this.cls.space, null, this.options.spaceSymbol); + if (this.options.selectorBack) { + sel.insertBefore(space, closed); + header.appendChild(entry); + header.appendChild(sel); + } else { + sel.appendChild(space); + header.appendChild(sel); + header.appendChild(entry); + } + + function updateSelAllCheckbox(ancestor) { + var selector = ancestor.querySelector('input[type=checkbox]') + var selectedAll = true; + var selectedNone = true; + var inputs = ancestor.querySelectorAll('input[type=checkbox]'); + [].forEach.call(inputs, function(inp) { // to work in node for tests + if (inp === selector) { + // ignore + } else if (inp.indeterminate) { + selectedAll = false; + selectedNone = false; + } else if (inp.checked) { + selectedNone = false; + } else if (!inp.checked) { + selectedAll = false; + } + }); + if (selectedAll) { + selector.indeterminate = false + selector.checked = true; + } else if (selectedNone) { + selector.indeterminate = false + selector.checked = false; + } else { + selector.indeterminate = true; + selector.checked = false; + } + } + + function manageSelectorsAll(input, ctx) { + selAllNodes.forEach(function(ancestor) { + L.DomEvent.on(input, 'click', function(ev) { + updateSelAllCheckbox(ancestor) + }, ctx) + }, ctx); + } + + var selAll; + if (tree.selectAllCheckbox) { + selAll = this._createCheckboxElement(false); + selAll.className += ' ' + this.cls.selAllCheckbox; + } + + var hide = this.cls.hide; // To toggle state + // create the children group, with the header event click + if (tree.children) { + var children = creator('div', this.cls.children, container); + var sensible = tree.layer ? sel : header; + L.DomUtil.addClass(sensible, this.cls.pointer); + sensible.tabIndex = 0; + L.DomEvent.on(sensible, 'click keydown', function(e) { + if (e.type === 'keydown' && e.keyCode !== 32) { + return + } + sensible.blur(); + + if (L.DomUtil.hasClass(opened, hide)) { + // it is not opened, so open it + L.DomUtil.addClass(closed, hide); + L.DomUtil.removeClass(opened, hide); + L.DomUtil.removeClass(children, hide); + } else { + // close it + L.DomUtil.removeClass(closed, hide); + L.DomUtil.addClass(opened, hide); + L.DomUtil.addClass(children, hide); + } + this._localExpand(); + }, this); + if (selAll) { + selAllNodes.splice(0, 0, container); + } + tree.children.forEach(function(child) { + var node = creator('div', this.cls.node, children) + this._iterateTreeLayout(child, node, overlay, selAllNodes); + }, this); + if (selAll) { + selAllNodes.splice(0, 1); + } + } else { + // no children, so the selector makes no sense. + L.DomUtil.addClass(sel, this.cls.neverShow); + } + + // make (or not) the label clickable to toggle the layer + var labelType; + if (tree.layer) { + if ((this.options.labelIsSelector === 'both') || // if option is set to both + (overlay && this.options.labelIsSelector === 'overlay') || // if an overlay layer and options is set to overlay + (!overlay && this.options.labelIsSelector === 'base')) { // if a base layer and option is set to base + labelType = 'label' + } else { // if option is set to something else + labelType = 'span' + } + } else { + labelType = 'span'; + } + // create the input and label + var label = creator(labelType, this.cls.label, entry); + if (tree.layer) { + // now create the element like in _addItem + var checked = this._map.hasLayer(tree.layer) + var input; + var radioGroup = overlay ? tree.radioGroup : 'leaflet-base-layers_' + L.Util.stamp(this); + if (radioGroup) { + input = this._createRadioElement(radioGroup, checked); + } else { + input = this._createCheckboxElement(checked); + manageSelectorsAll(input, this); + } + if (this._layerControlInputs) { + // to keep compatibility with 1.0.3 + this._layerControlInputs.push(input); + } + input.layerId = L.Util.stamp(tree.layer); + L.DomEvent.on(input, 'click', this._onInputClick, this); + label.appendChild(input); + } + + function isText(variable) { + return (typeof variable === 'string' || variable instanceof String); + } + + function isFunction(functionToCheck) { + return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]'; + } + + function selectAllCheckboxes(select, ctx) { + var inputs = container.getElementsByTagName('input'); + for (var i = 0; i < inputs.length; i++) { + var input = inputs[i]; + if (input.type !== 'checkbox') continue; + input.checked = select; + input.indeterminate = false; + } + ctx._onInputClick(); + } + if (tree.selectAllCheckbox) { + // selAll is already created + label.appendChild(selAll); + if (isText(tree.selectAllCheckbox)) { + selAll.title = tree.selectAllCheckbox; + } + L.DomEvent.on(selAll, 'click', function(ev) { + ev.stopPropagation(); + selectAllCheckboxes(selAll.checked, this); + }, this); + updateSelAllCheckbox(container); + manageSelectorsAll(selAll, this); + } + + var name = creator('span', this.cls.name, label, tree.label); + + // hide the button which doesn't fit the collapsed state, then hide children conditionally + L.DomUtil.addClass(tree.collapsed ? opened : closed, hide); + tree.collapsed && children && L.DomUtil.addClass(children, hide); + + if (noShow) { + L.DomUtil.addClass(header, this.cls.neverShow); + L.DomUtil.addClass(children, this.cls.childrenNopad); + } + + var eventeds = tree.eventedClasses; + if (!(eventeds instanceof Array)) { + eventeds = [eventeds]; + } + + for (var e = 0; e < eventeds.length; e++) { + var evented = eventeds[e]; + if (evented && evented.className) { + var obj = container.querySelector('.' + evented.className); + if (obj) { + L.DomEvent.on(obj, evented.event || 'click', (function(selectAll) { + return function(ev) { + ev.stopPropagation(); + var select = isFunction(selectAll) ? selectAll(ev, container, tree, this._map) : selectAll; + if (select !== undefined && select !== null) { + selectAllCheckboxes(select, this); + } + } + })(evented.selectAll), this); + } + } + } + }, + + _createCheckboxElement: function(checked) { + var input = document.createElement('input'); + input.type = 'checkbox'; + input.className = 'leaflet-control-layers-selector'; + input.defaultChecked = checked; + return input; + }, + + }); + + L.control.layers.tree = function(base, overlays, options) { + return new L.Control.Layers.Tree(base, overlays, options); + } + +})(L); diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/LICENSE b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/LICENSE new file mode 100644 index 0000000..c44b57b --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2017, Javier Jimenez Shaw +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. diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/README.md b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/README.md new file mode 100644 index 0000000..0bace8e --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/README.md @@ -0,0 +1,191 @@ +# Leaflet.Control.Layers.Tree +[![CI](https://github.com/jjimenezshaw/Leaflet.Control.Layers.Tree/actions/workflows/main.yml/badge.svg)](https://github.com/jjimenezshaw/Leaflet.Control.Layers.Tree/actions/workflows/main.yml) +[![NPM version](https://img.shields.io/npm/v/leaflet.control.layers.tree.svg)](https://www.npmjs.com/package/leaflet.control.layers.tree) +[![License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg?style=flat)](LICENSE) +[![Leaflet 1.x compatible!](https://img.shields.io/badge/Leaflet%201.x-%E2%9C%93-1EB300.svg?style=flat)](http://leafletjs.com/reference.html) + +A Tree Layers Control for Leaflet. + +## Description +This plugin extends [`Control.Layers`](http://leafletjs.com/reference-1.7.1.html#control-layers) allowing a tree structure for the layers layout. In `Control.Layers` you can only display a flat list of layers (baselayers and overlays), that is usually enough for small sets. If you have a long list of baselayers or overlays, and you want to organize them in a tree (allowing the user collapse and expand branches), this is a good option. + +[Some live examples here](https://jjimenezshaw.github.io/Leaflet.Control.Layers.Tree/examples/) + +## Installation +Using npm for browserify `npm install leaflet.control.layers.tree` (and `require('leaflet.control.layers.tree')`), or just download `L.Control.Layers.Tree.js` and `L.Control.Layers.Tree.css` and add a script and link tag for it in your html. + +## Compatibility +This plugin has been tested with Leaflet 1.0.3, 1.1.0, 1.2.0, 1.3.1., 1.4.0, 1.5.1, 1.6.0 and 1.7.1 + +This plugin supports TypeScript. See file [L.Control.Layers.Tree.d.ts](L.Control.Layers.Tree.d.ts) + +## Usage +1. Create your layers. Do this as usual. +2. Create your layers tree, like the one just below. +3. Create the control and add to the map: `L.control.layers.tree(baseTree, overlaysTree, options).addTo(map);` +4. Voilà! +```javascript +var baseTree = { + label: 'Base Layers', + children: [ + { + label: 'World 🗺', + children: [ + { label: 'OpenStreetMap', layer: osm }, + { label: 'Esri', layer: esri }, + { label: 'Google Satellite', layer: g_s }, + /* ... */ + ] + }, + { + label: 'Europe', + children: [ + { label: 'France', layer: france }, + { label: 'Germany', layer: germany }, + { label: 'Spain', layer: spain }, + /* ... */ + ] + }, + { + label: 'USA', + children: [ + { + label: 'General', + children: [ + { label: 'Nautical', layer: usa_naut }, + { label: 'Satellite', layer: usa_sat }, + { label: 'Topographical', layer: usa_topo }, + ] + }, + { + label: 'States', + children: [ + { label: 'CA', layer: usa_ca }, + { label: 'NY', layer: usa_ny }, + /* ... */ + ] + } + ] + }, + ] +}; +``` +![small tree sample](smalltree.png) + +```javascript +var overlaysTree = { + label: 'Points of Interest', + selectAllCheckbox: 'Un/select all', + children: [ + { + label: 'Europe', + selectAllCheckbox: true, + children: [ + { + label: 'France', + selectAllCheckbox: true, + children: [ + { label: 'Tour Eiffel', layer: L.marker([48.8582441, 2.2944775]) }, + { label: 'Notre Dame', layer: L.marker([48.8529540, 2.3498726]) }, + { label: 'Louvre', layer: L.marker([48.8605847, 2.3376267]) }, + ] + }, { + label: 'Germany', + selectAllCheckbox: true, + children: [ + { label: 'Branderburger Tor', layer: L.marker([52.5162542, 13.3776805])}, + { label: 'Kölner Dom', layer: L.marker([50.9413240, 6.9581201])}, + ] + }, {label: 'Spain', + selectAllCheckbox: 'De/seleccionar todo', + children: [ + { label: 'Palacio Real', layer: L.marker([40.4184145, -3.7137051])}, + { label: 'La Alhambra', layer: L.marker([37.1767829, -3.5892795])}, + ] + } + ] + }, { + label: 'Asia', + selectAllCheckbox: true, + children: [ + { + label: 'Jordan', + selectAllCheckbox: true, + children: [ + { label: 'Petra', layer: L.marker([30.3292215, 35.4432464]) }, + { label: 'Wadi Rum', layer: L.marker([29.6233486, 35.4390656]) } + ] + }, { + /* ... */ + } + ] + } + ] +} +``` +![smalloverlay sample](smalloverlay.png) + +## API +### `L.Control.Layers.Tree` +The main (and only) 'class' involved in this plugin. It exteds `L.Control.Layers`, so most of its methods are available. `addBaseLayer`, `addOverlay` and `removeLayer` are non usable in `L.Control.Layers.Tree`. +#### `L.control.layers.tree(baseTree, overlayTree, options)` +Creates the control. The arguments are: +* `baseTree`: `` or `` Tree defining the base layers (like the one above). You can also provide an `Array` of nodes, if you want to start with a flat level. +* `overlayTree`: `` or `` Similar than baseTree, but for overlays. +* `options`: `` specific options for the tree. See that it includes `L.Control.Layer` [options](http://leafletjs.com/reference-1.4.0.html#control-layers) + +##### constructor options +* `closedSymbol`: `` Symbol displayed on a closed node (that you can click to open). Default '+'. +* `openedSymbol`: `` Symbol displayed on a opened node (that you can click to close). Default '−' (`−`). +* `spaceSymbol`: `` Symbol between the closed or opened symbol, and the text. Default ' ' (a normal space). +* `selectorBack`: `` Flag to indicate if the selector (+ or −) is _after_ the text. Default 'false'. +* `namedToggle`: `` Flag to replace the toggle image (box with the layers image) with the 'name' of the selected base layer. If the `name` field is not present in the tree for this layer, `label` is used. See that you can show a different name when control is collapsed than the one that appears in the tree when it is expanded. Your node in the tree can be `{ label: 'OSM', name: 'OpenStreetMap', layer: layer }`. Default 'false'. +* `collapseAll`: `` Text for an entry in control that collapses the tree (baselayers or overlays). If empty, no entry is created. Default ''. +* `expandAll`: `` Text for an entry in control that expands the tree. If empty, no entry is created. Default ''. +* `labelIsSelector`: `` Controls if a label or only the checkbox/radiobutton can toggle layers. If set to `both`, `overlay` or `base` those labels can be clicked on to toggle the layer. Default 'both'. + +See that those strings can be html code, with unicode, images or whatever you want. + +#### `setBaseTree(tree)` +Resets the base layers tree (like in constructor, an `` or ``). Internally removes and adds all the layers, so you may be notified if you registered those events. Returns `this`. + +#### `setOverlayTree(tree)` +Resets the overlay layers tree (like in constructor, an `` or ``). Internally removes and adds all the layers, so you may be notified if you registered those events. Returns `this`. + +#### `expandTree(overlays)` +This method expands the tree. When `overlays` is `true` expands the overlays tree. Otherwise expands the baselayers tree. Returns `this`. + +#### `collapseTree(overlays)` +This method collapses the tree. When `overlays` is `true` collapses the overlays tree. Otherwise collapses the baselayers tree. Returns `this`. + +#### `expandSelected(overlays)` +This method expands only the selected item in the tree. When `overlays` is `true` affects the overlays tree. Otherwise affects the baselayers tree. Returns `this`. + +## Tricks about the tree +The layers tree is a normal `Object`s tree like in the example above. The valid elements are: +* `children`: `` Array of children nodes for this node. Nothing special. +* `label`: `` Text displayed in the tree for this node. It may contain HTML code. +* `layer`: `` The layer itself. You can create with `L.tileLayer`, `L.marker`, or however you want. +* `name`: `` Text displayed in the toggle when control is minimized. If not present, `label` is used. It makes sense only when `namedToggle` is `true`, and with base layers. +* `radioGroup`: `` Text to identify different radio button groups. It is used in the `name` attribute in the [radio button](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio). It is used only in the overlays layers (ignored in the base layers), allowing you to have radio buttons instead of checkboxes. See that radio groups cannot be unselected, so create a 'fake' layer (like `L.layersGroup([])`) if you want to disable it. Deafult `''` (that means checkbox). +* `collapsed`: `` Indicate whether this tree node should be collapsed initially, useful for opening large trees partially based on user input or context. Disabled by default. +* `selectAllCheckbox`: `` or `` Displays a checkbox to select/unselect all overlays in the sub-tree. In case of being a ``, that text will be the title (tooltip). When any overlay in the sub-tree is clicked, the checkbox goes into `indeterminate` state (a dash in the box). +* `eventedClasses`: `` or ``. [Advanced functionality to access nodes of the tree. Use carefully] Object (or array of objects) to define events on the `label`. Now you can specify a way to select all the sub-nodes in the overlay tree inspecting the tree. The object contains: + * `className`: ``. Will add an event on the first element with this class name in this node. + * `event`: `` (optional). Event to trigger. By default is `click`. + * `selectAll`: `` or ``. `true` selects all the checkboxes in the subnodes. `false` unselects all. In case of using a `` (that should return a `Boolean` or `undefined`), it will be called with `(ev, domNode, treeNode, map)`, where: + * `ev`: event triggered. + * `domNode`: DOM node that includes the label and all the children. + * `treeNode`: node of this tree affected. Be careful. Modifying it may produce undefined behaviours. + * `map`: map associated with the control. + +You can see an example of a baselayers tree (the javascript code) above. You can provide a tree, or an array of trees. + +Non leaf nodes (that is, those with `children`) can also have a layer. In this case you will be able to select the layer, and only the icon will collapse or expand this branch. + +You can include HTML code, not only ascii chars, in the `label` attribute. It will be included as `innerHTML`. Be carefull with unicodes, because not every browser supports them all. + +A leaf node without `layer` attribute is also posible. Only with `label`. This can be used to include special commands calling a javascript function, or a separator, or whatever you like. An example of separator node is +```javascript +{label: '
'} +``` diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/bower.json b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/bower.json new file mode 100644 index 0000000..8b74aaf --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/bower.json @@ -0,0 +1,27 @@ +{ + "name": "leaflet.control.layers.tree", + "version": "1.1.0", + "description": "Control Layers in a Tree structure", + "homepage": "https://github.com/jjimenezshaw/Leaflet.Control.Layers.Tree", + "authors": [ + "Javier Jimenez Shaw" + ], + "main": "L.Control.Layers.Tree.js", + "style": "L.Control.Layers.Tree.css", + "keywords": [ + "Leaflet", + "map", + "geo", + "tree", + "control", + "layers" + ], + "license": "BSD-3-Clause", + "ignore": [ + "**/.*", + ".travis.yml", + "examples", + "node_modules", + "test" + ] +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/airports.html b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/airports.html new file mode 100644 index 0000000..3d719c8 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/airports.html @@ -0,0 +1,335 @@ + + + + + + Leaflet Layers Tree Demo: Airports in Europe + + + + + + + + +
+ + + + + + diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic.html b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic.html new file mode 100644 index 0000000..c692df9 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic.html @@ -0,0 +1,80 @@ + + + + + + Leaflet Layers Tree Basic Demo + + + + + + + +
+ + + + + + diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic_1.3.4.html b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic_1.3.4.html new file mode 100644 index 0000000..261a435 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic_1.3.4.html @@ -0,0 +1,79 @@ + + + + + Leaflet Layers Tree Basic Demo + + + + + + + +
+ + + + + + diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/index.html b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/index.html new file mode 100644 index 0000000..8b64bf4 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/index.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/options.html b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/options.html new file mode 100644 index 0000000..5fc493c --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/options.html @@ -0,0 +1,140 @@ + + + + + + Leaflet Layers Tree Demo + + + + + + + +
+ + + + + + diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package-lock.json b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package-lock.json new file mode 100644 index 0000000..8166cc0 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package-lock.json @@ -0,0 +1,2334 @@ +{ + "name": "leaflet.control.layers.tree", + "version": "1.0.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", + "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@types/node": { + "version": "14.14.32", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz", + "integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==", + "dev": true + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "blanket": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/blanket/-/blanket-1.2.3.tgz", + "integrity": "sha1-FRtJh8O9hFUrtfA7kO9fflkx5HM=", + "dev": true, + "requires": { + "acorn": "^1.0.3", + "falafel": "~1.2.0", + "foreach": "^2.0.5", + "isarray": "0.0.1", + "object-keys": "^1.0.6", + "xtend": "~4.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-leaflet": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/chai-leaflet/-/chai-leaflet-0.0.13.tgz", + "integrity": "sha1-4+2XKp+dmY2ObWudLE9t0xTK2z0=", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-launcher": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.11.2.tgz", + "integrity": "sha512-jx0kJDCXdB2ARcDMwNCtrf04oY1Up4rOmVu+fqJ5MTPOOIG8EhRcEU9NZfXZc6dMw9FU8o1r21PNp8V2M0zQ+g==", + "dev": true, + "requires": { + "@types/node": "*", + "is-wsl": "^2.1.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "0.5.1", + "rimraf": "^2.6.1" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "chrome-remote-interface": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.28.2.tgz", + "integrity": "sha512-F7mjof7rWvRNsJqhVXuiFU/HWySCxTA9tzpLxUJxVfdLkljwFJ1aMp08AnwXRmmP7r12/doTDOMwaNhFCJsacw==", + "dev": true, + "requires": { + "commander": "2.11.x", + "ws": "^7.2.0" + } + }, + "chrome-unmirror": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chrome-unmirror/-/chrome-unmirror-0.1.0.tgz", + "integrity": "sha1-6a94ukf3/7kAYCk6cgoBzSbVC6s=", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "deep-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz", + "integrity": "sha512-YX2i9XjJ7h5q/aQ/IM9PEwEnDqETAIYbggmdDB3HLTlSgo1CxPsj6pvhPG68rq6SVE0+p+6Ywsm5fTYNrYtBWw==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true + }, + "domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "requires": { + "domelementtype": "^2.1.0" + } + }, + "domutils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", + "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", + "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "globals": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", + "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-plugin-html": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.2.tgz", + "integrity": "sha512-bhBIRyZFqI4EoF12lGDHAmgfff8eLXx6R52/K3ESQhsxzCzIE6hdebS7Py651f7U3RBotqroUnC3L29bR7qJWQ==", + "dev": true, + "requires": { + "htmlparser2": "^6.0.1" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "falafel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", + "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=", + "dev": true, + "requires": { + "acorn": "^1.0.3", + "foreach": "^2.0.5", + "isarray": "0.0.1", + "object-keys": "^1.0.6" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "happen": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/happen/-/happen-0.3.2.tgz", + "integrity": "sha512-fBouIWb3fMsRCfCySHgk6+/gTEijMAWUZM/TYKmjuui9VsdS2DGWNjcH9cN7/tPn9nSkxGSGLJU6FHh37G0WUg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "htmlparser2": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", + "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.4.4", + "entities": "^2.0.0" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "leaflet": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", + "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lighthouse-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", + "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "marky": "^1.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "marky": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "dev": true + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "mocha-chrome": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mocha-chrome/-/mocha-chrome-2.2.0.tgz", + "integrity": "sha512-RXP6Q2mlM2X+eO2Z8gribmiH4J9x5zu/JcTZ3deQSwiC5260BzizOc0eD1NWP3JuypGCKRwReicv4KCNIFtTZQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "chrome-launcher": "^0.11.2", + "chrome-remote-interface": "^0.28.0", + "chrome-unmirror": "^0.1.0", + "debug": "^4.1.1", + "deep-assign": "^3.0.0", + "import-local": "^2.0.0", + "loglevel": "^1.4.1", + "meow": "^5.0.0", + "nanobus": "^4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=", + "dev": true + }, + "nanobus": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.5.0.tgz", + "integrity": "sha512-7sBZo9wthqNJ7QXnfVXZL7fkKJLN55GLOdX+RyZT34UOvxxnFtJe/c7K0ZRLAKOvaY1xJThFFn0Usw2H9R6Frg==", + "dev": true, + "requires": { + "nanoassert": "^1.1.0", + "nanotiming": "^7.2.0", + "remove-array-items": "^1.0.0" + } + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true + }, + "nanoscheduler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/nanoscheduler/-/nanoscheduler-1.0.3.tgz", + "integrity": "sha512-jBbrF3qdU9321r8n9X7yu18DjP31Do2ItJm3mWrt90wJTrnDO+HXpoV7ftaUglAtjgj9s+OaCxGufbvx6pvbEQ==", + "dev": true, + "requires": { + "nanoassert": "^1.1.0" + } + }, + "nanotiming": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/nanotiming/-/nanotiming-7.3.1.tgz", + "integrity": "sha512-l3lC7v/PfOuRWQa8vV29Jo6TG10wHtnthLElFXs4Te4Aas57Fo4n1Q8LH9n+NDh9riOzTVvb2QNBhTS4JUKNjw==", + "dev": true, + "requires": { + "nanoassert": "^1.1.0", + "nanoscheduler": "^1.0.2" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "remove-array-items": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/remove-array-items/-/remove-array-items-1.1.1.tgz", + "integrity": "sha512-MXW/jtHyl5F1PZI7NbpS8SOtympdLuF20aoWJT5lELR1p/HJDd5nqW8Eu9uLh/hCRY3FgvrIT5AwDCgBODklcA==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.0.tgz", + "integrity": "sha512-51Na3IUg3uOACsQ7hzTUCjSzGy8xROySgI8tmNJ+y9JF2hfDS6qkTP7+Ep3htUtSQG1t17QMbe+jZFTlaU4dDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package.json b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package.json new file mode 100644 index 0000000..5fb86dc --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package.json @@ -0,0 +1,47 @@ +{ + "name": "leaflet.control.layers.tree", + "version": "1.1.0", + "description": "Control Layers in a Tree structure", + "main": "L.Control.Layers.Tree.js", + "style": "L.Control.Layers.Tree.css", + "types": "L.Control.Layers.Tree.d.ts", + "directories": { + "test": "test" + }, + "license": "BSD-3-Clause", + "scripts": { + "lint": "eslint L.*.js test/* examples/*", + "lintfix": "eslint L.*.js test/* examples/* --fix", + "spec": "mocha-chrome test/index.html --ignore-exceptions", + "test": "npm run lint && npm run spec" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jjimenezshaw/Leaflet.Control.Layers.Tree.git" + }, + "keywords": [ + "Leaflet", + "map", + "geo", + "tree", + "control", + "layers" + ], + "devDependencies": { + "blanket": "^1.2.3", + "chai": "~4.3.4", + "chai-leaflet": "^0.0.13", + "eslint": "^7.22.0", + "eslint-plugin-html": "^6.1.2", + "happen": "^0.3.2", + "leaflet": "^1.7.1", + "minimist": ">=0.2.1", + "mocha": "^8.3.2", + "mocha-chrome": "^2.2.0" + }, + "peerDependencies": { + "leaflet": "^1.1.0" + }, + "author": "Javier Jimenez Shaw", + "readmeFilename": "README.md" +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalloverlay.png b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalloverlay.png new file mode 100644 index 0000000..b01aacc Binary files /dev/null and b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalloverlay.png differ diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalltree.png b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalltree.png new file mode 100644 index 0000000..d13269d Binary files /dev/null and b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalltree.png differ diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/.eslintrc b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/.eslintrc new file mode 100644 index 0000000..7a67f5a --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/.eslintrc @@ -0,0 +1,18 @@ +{ + "env": { + "es6": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json" + }, + "plugins": [ + "@typescript-eslint" + ] +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/L.Control.Layers.Tree.ts b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/L.Control.Layers.Tree.ts new file mode 100644 index 0000000..e9030f3 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/L.Control.Layers.Tree.ts @@ -0,0 +1,88 @@ +import * as L from 'leaflet'; +import 'L.Control.Layers.Tree'; + +const markerO = L.marker([0, 0]); +const markerA = L.marker([40, 0]); +const markerB = L.marker([0, 30]); +const markerC = L.marker([0, 20]); + +const baseTree = {label: 'Base'} as L.Control.Layers.TreeObject; +baseTree.name = 'None'; + +const overlayTree = {label: 'Overlay'} as L.Control.Layers.TreeObject; +overlayTree.name = 'Root'; +overlayTree.layer = markerO; +overlayTree.collapsed = true; +overlayTree.selectAllCheckbox = true; +overlayTree.children = [ + {label: 'Over one', name: 'Name Over one', layer: markerO}, + {label: 'Over two', name: 'Name Over two', layer: L.layerGroup([])}, + { + label: 'O Node 1', + selectAllCheckbox: true, + collapsed: true, + children: [ + {label: 'Over 11', name: 'Name Over 11', layer: markerA}, + {label: 'Over 12', layer: L.layerGroup([])}, + { + label: '1 Node 1', + selectAllCheckbox: 'my title', + collapsed: false, + children: [ + {label: 'Over 21', name: 'Name Over 21', layer: markerC}, + {label: 'Over 22', layer: L.layerGroup([])}, + ] + }, + ] + }, + {label: 'Over three', name: 'Name Over three', layer: markerB} +]; + +const treeOptions: L.Control.Layers.TreeOptions = {} as L.Control.Layers.TreeOptions; +treeOptions.closedSymbol = '⊞ 🗀'; +treeOptions.collapseAll = 'Collapse all'; +treeOptions.expandAll = 'Expand all'; +treeOptions.labelIsSelector = 'base'; +treeOptions.namedToggle = true; +treeOptions.openedSymbol = '⊟ 🗁'; +treeOptions.selectorBack = false; +treeOptions.spaceSymbol = '~'; +treeOptions.collapsed = false; // from L.Control.LayersOptions + +const tree: L.Control.Layers.Tree = L.control.layers.tree(baseTree, overlayTree, treeOptions); + +tree.options.closedSymbol; +tree.options.collapseAll; +tree.options.expandAll; +tree.options.labelIsSelector; +tree.options.namedToggle; +tree.options.openedSymbol; +tree.options.selectorBack; +tree.options.spaceSymbol; +tree.options.collapsed; + +tree.setBaseTree(baseTree); +tree.setOverlayTree(overlayTree); + +tree.expandSelected(false); +tree.expandTree(false); +tree.collapseTree(false); +tree.expand(); + +try { + tree.addBaseLayer(markerA, 'Throws error'); +} catch (e) { + console.error(e); +} + +try { + tree.addOverlay(markerB, 'Throws error'); +} catch (e) { + console.error(e); +} + +try { + tree.removeLayer(markerC); +} catch (e) { + console.error(e); +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package-lock.json b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package-lock.json new file mode 100644 index 0000000..7c4747c --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package-lock.json @@ -0,0 +1,1305 @@ +{ + "name": "leaflet.control.layers.tree.types.test", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@types/geojson": { + "version": "7946.0.7", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz", + "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/leaflet": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.7.0.tgz", + "integrity": "sha512-ltv5jR+VjKSMtoDkxH61Rsbo0zLU7iqyOXpVPkAX4F+79fg2eymC7t0msWsfNaEZO1FGTIQATCCCQe+ijWoicg==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.18.0.tgz", + "integrity": "sha512-Lzkc/2+7EoH7+NjIWLS2lVuKKqbEmJhtXe3rmfA8cyiKnZm3IfLf51irnBcmow8Q/AptVV0XBZmBJKuUJTe6cQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.18.0", + "@typescript-eslint/scope-manager": "4.18.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.18.0.tgz", + "integrity": "sha512-92h723Kblt9JcT2RRY3QS2xefFKar4ZQFVs3GityOKWQYgtajxt/tuXIzL7sVCUlM1hgreiV5gkGYyBpdOwO6A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.18.0", + "@typescript-eslint/types": "4.18.0", + "@typescript-eslint/typescript-estree": "4.18.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.18.0.tgz", + "integrity": "sha512-W3z5S0ZbecwX3PhJEAnq4mnjK5JJXvXUDBYIYGoweCyWyuvAKfGHvzmpUzgB5L4cRBb+cTu9U/ro66dx7dIimA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.18.0", + "@typescript-eslint/types": "4.18.0", + "@typescript-eslint/typescript-estree": "4.18.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.18.0.tgz", + "integrity": "sha512-olX4yN6rvHR2eyFOcb6E4vmhDPsfdMyfQ3qR+oQNkAv8emKKlfxTWUXU5Mqxs2Fwe3Pf1BoPvrwZtwngxDzYzQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.18.0", + "@typescript-eslint/visitor-keys": "4.18.0" + } + }, + "@typescript-eslint/types": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.18.0.tgz", + "integrity": "sha512-/BRociARpj5E+9yQ7cwCF/SNOWwXJ3qhjurMuK2hIFUbr9vTuDeu476Zpu+ptxY2kSxUHDGLLKy+qGq2sOg37A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.18.0.tgz", + "integrity": "sha512-wt4xvF6vvJI7epz+rEqxmoNQ4ZADArGQO9gDU+cM0U5fdVv7N+IAuVoVAoZSOZxzGHBfvE3XQMLdy+scsqFfeg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.18.0", + "@typescript-eslint/visitor-keys": "4.18.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.18.0.tgz", + "integrity": "sha512-Q9t90JCvfYaN0OfFUgaLqByOfz8yPeTAdotn/XYNm5q9eHax90gzdb+RJ6E9T5s97Kv/UHWKERTmqA0jTKAEHw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.18.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", + "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", + "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "leaflet": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", + "integrity": "sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw==", + "dev": true + }, + "leaflet.control.layers.tree": { + "version": "file:..", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.3.tgz", + "integrity": "sha512-idv5WZvKVXDqKralOImQgPM9v6WOdLNa0IY3B3doOjw/YxRGT8I+allIJ6kd7Uaj+SF1xZUSU+nPM5aDNBVtnw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package.json b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package.json new file mode 100644 index 0000000..8ce500c --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package.json @@ -0,0 +1,21 @@ +{ + "name": "leaflet.control.layers.tree.types.test", + "version": "0.0.1", + "author": "Javier Jimenez Shaw", + "license": "BSD-3-Clause", + "scripts": { + "lint": "eslint --no-eslintrc -c ./.eslintrc *.ts", + "spec": "tsc", + "test": "npm run lint && npm run spec" + }, + "devDependencies": { + "@types/leaflet": "^1.7.0", + "@typescript-eslint/eslint-plugin": "^4.18.0", + "@typescript-eslint/parser": "^4.18.0", + "eslint": "^7.22.0", + "leaflet": "^1.7.1", + "leaflet.control.layers.tree": "../", + "ts-node": "^9.1.1", + "typescript": "~4.1.5" + } +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/tsconfig.json b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/tsconfig.json new file mode 100644 index 0000000..d8a255a --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "es6" + ], + "module": "commonjs", + "noEmit": true + }, + "files": [ + "./node_modules/leaflet.control.layers.tree/L.Control.Layers.Tree.d.ts" + ], + "include": [ + "**/*.ts" + ] +} diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/index.html b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/index.html new file mode 100644 index 0000000..169c735 --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/index.html @@ -0,0 +1,53 @@ + + + + Leaflet.Control.Layers.Tree Tests + + + + + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/spec.js b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/spec.js new file mode 100644 index 0000000..05066ff --- /dev/null +++ b/j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/spec.js @@ -0,0 +1,932 @@ +'use strict'; + +var layerA = L.tileLayer(''); +var layerB = L.tileLayer(''); + +function baseArray1() { + return [ + {label: 'Leaf one', name: 'Name Leaf one', layer: L.tileLayer('')}, + {label: 'Leaf two', name: 'Name Leaf two', layer: L.tileLayer('', {idx: 'two'})}, + { + label: 'Node 1', + children: [ + {label: 'Leaf 11', name: 'Name Leaf 11', layer: layerA}, + {label: 'Leaf 12', layer: L.tileLayer('')} + ] + }, + {label: 'Leaf three', name: 'Name Leaf three', layer: layerB} + ]; +} + +function baseArray2() { + return [ + {label: 'Leaf one', name: 'Name Leaf one', layer: layerA}, + {label: 'Leaf two', name: 'Name Leaf two', layer: layerB}, + ]; +} + +function baseTree1() { + return { + noShow: false, + label: 'Root node', + children: baseArray1() + }; +} + +var markerO = L.marker([0, 0]); +var markerA = L.marker([40, 0]); +var markerB = L.marker([0, 30]); +var markerC = L.marker([0, 20]); + +function overlaysArray1() { + return [ + {label: 'Over one', name: 'Name Over one', layer: markerO}, + {label: 'Over two', name: 'Name Over two', layer: L.layerGroup([])}, + { + label: 'O Node 1', + children: [ + {label: 'Over 11', name: 'Name Over 11', layer: markerA}, + {label: 'Over 12', layer: L.layerGroup([])} + ] + }, + {label: 'Over three', name: 'Name Over three', layer: markerB} + ] +} + +function overlaysArraySelectAll(collapsed1, collapsed2) { + return [ + {label: 'Over one', name: 'Name Over one', layer: markerO}, + {label: 'Over two', name: 'Name Over two', layer: L.layerGroup([])}, + { + label: 'O Node 1', + selectAllCheckbox: true, + collapsed: collapsed1, + children: [ + {label: 'Over 11', name: 'Name Over 11', layer: markerA}, + {label: 'Over 12', layer: L.layerGroup([])}, + { + label: '1 Node 1', + selectAllCheckbox: 'my title', + collapsed: collapsed2, + children: [ + {label: 'Over 21', name: 'Name Over 21', layer: markerC}, + {label: 'Over 22', layer: L.layerGroup([])}, + ] + }, + ] + }, + {label: 'Over three', name: 'Name Over three', layer: markerB} + ] +} + +function overlaysArrayEventedClasses(callbackSel, callbackUnsel) { + return [ + {label: 'Over one', name: 'Name Over one', layer: markerO}, + {label: 'Over two', name: 'Name Over two', layer: L.layerGroup([])}, + { + label: 'Sel Unsel O Node 1', + eventedClasses: [{className: 'sel', selectAll: callbackSel ? callbackSel : true}, {className: 'unsel', selectAll: callbackUnsel ? callbackUnsel : false}], + children: [ + {label: 'Over 11', name: 'Name Over 11', layer: markerA}, + {label: 'Over 12', layer: L.layerGroup([])}, + { + label: 'Sel Unsel 1 Node 1', + eventedClasses: [{className: 'sel', selectAll: callbackSel ? callbackSel : true}, {className: 'unsel', selectAll: callbackUnsel ? callbackUnsel : false}], + children: [ + {label: 'Over 21', name: 'Name Over 21', layer: markerC}, + {label: 'Over 22', layer: L.layerGroup([])}, + ] + }, + ] + }, + {label: 'Over three', name: 'Name Over three', layer: markerB} + ] +} + +function overlaysTree1() { + return { + noShow: false, + label: 'Root O node', + children: overlaysArray1() + }; +} + +function overlaysArray2() { + return [ + {label: 'Over A', name: 'Name Over A', layer: markerA}, + {label: 'Over B', name: 'Name Over B', layer: markerB}, + ]; +} + +function isHidden(el) { + // https://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom + return (el.offsetParent === null) +} + +function checkHidden(list, value, first) { + first = first || 0; + if (!Array.isArray(value)) { + var v = value; + value = []; + for (var i = 0; i < list.length; i++) value.push(v); + } + for (var i = first; i < list.length; i++) { + isHidden(list[i]).should.be.equal(!!value[i], 'position ' + i); + } +} + +describe('L.Control.Layers.Tree', function() { + var should = chai.should(); + this.timeout(5000); + var map; + + beforeEach(function() { + map && map.remove(); + //map = L.map(document.createElement('div')); + map = L.map('mapA'); + document.body.appendChild(map._container); + }); + afterEach(function() { + //map.remove(); + }); + + describe('Functions in place', function() { + beforeEach(function() { + map.setView([0, 0], 14); + }); + + it('L.Control.Layers.Tree has correct func', function() { + L.control.layers.tree.should.be.a('function'); + }); + it('L.control.layers.tree object creation', function() { + var t = L.control.layers.tree(); + t.should.be.a('object'); + }); + }); + + + describe('Disabled functions', function() { + var t = L.control.layers.tree(); + var methods = [t.addBaseLayer, t.addOverlay, t.removeLayer]; + methods.forEach(function(method) { + (function() { + method(); + }).should.throw(method.name + ' is disabled'); + }); + }); + + describe('Simple base tests', function() { + beforeEach(function() { + map.setView([0, 0], 14); + }); + + it('they are there', function() { + var ctl = L.control.layers.tree(baseTree1(), null, + {collapsed: false}).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-base input'); + inputs.length.should.be.equal(5); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + checkHidden(headers, false, 0); + ctl.collapseTree(); + checkHidden(headers, true, 1); + }); + it('they are accessible on mouseover', function() { + var ctrl = L.control.layers.tree(baseTree1()).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-base input'); + inputs.length.should.be.equal(5); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + + // Nothing visible because the control is collapsed + checkHidden(inputs, true, 0); + checkHidden(headers, true, 0); + + // mouse over the control to show it. + happen.once(ctrl._container, {type: 'mouseover'}); + checkHidden(inputs, false, 0); + checkHidden(headers, false, 0); + // Hi, let it as you found it. + happen.once(ctrl._container, {type: 'mouseout'}); + }); + }); + + describe('Simple base tests with array', function() { + beforeEach(function() { + map.setView([0, 0], 14); + }); + + it('they are accessible on mouseover', function() { + var ctrl = L.control.layers.tree(baseArray1()).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-base input'); + inputs.length.should.be.equal(5); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(7); // The root is hidden, but it is there + + // Nothing visible because the control is collapsed + checkHidden(inputs, true, 0); + checkHidden(headers, true, 0); + + // mouse over the control to show it. + happen.once(ctrl._container, {type: 'mouseover'}); + checkHidden(inputs, false, 0); + checkHidden(headers, false, 1); + checkHidden(headers, [1, 0, 0, 0, 0, 0, 0], 0); // see, root is hidden! + // Hi, let it as you found it. + happen.once(ctrl._container, {type: 'mouseout'}); + }); + }); + + describe('Simple overlays tests', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + + it('they are there', function() { + var ctl = L.control.layers.tree(null, overlaysTree1(), + {collapsed: false}).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-overlays input'); + inputs.length.should.be.equal(5); + var headers = map._container.querySelectorAll('.leaflet-control-layers-overlays .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + checkHidden(headers, false, 0); + ctl.collapseTree(true); + checkHidden(headers, true, 1); + }); + it('they are accessible on mouseover', function() { + var ctrl = L.control.layers.tree(null, overlaysTree1()).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-overlays input'); + inputs.length.should.be.equal(5); + var headers = map._container.querySelectorAll('.leaflet-control-layers-overlays .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + + // Nothing visible because the control is collapsed + checkHidden(inputs, true, 0); + checkHidden(headers, true, 0); + + // mouse over the control to show it. + happen.once(ctrl._container, {type: 'mouseover'}); + checkHidden(inputs, false, 0); + checkHidden(headers, false, 0); + // Hi, let it as you found it. + happen.once(ctrl._container, {type: 'mouseout'}); + }); + }); + + describe('Simple overlays array tests', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + + it('they are accessible on mouseover', function() { + var ctrl = L.control.layers.tree(null, overlaysArray1()).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-overlays input'); + inputs.length.should.be.equal(5); + var headers = map._container.querySelectorAll('.leaflet-control-layers-overlays .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + + // Nothing visible because the control is collapsed + checkHidden(inputs, true, 0); + checkHidden(headers, true, 0); + + // mouse over the control to show it. + happen.once(ctrl._container, {type: 'mouseover'}); + checkHidden(inputs, false, 0); + checkHidden(headers, false, 1); + checkHidden(headers, [1, 0, 0, 0, 0, 0, 0], 0); + // Hi, let it as you found it. + happen.once(ctrl._container, {type: 'mouseout'}); + }); + }); + + describe('Collapsed nodes', function() { + beforeEach(function() { + map.setView([0, 0], 14); + }); + + it('all collapsed', function() { + var ctrl = L.control.layers.tree(null, overlaysArraySelectAll(true, true), {collapsed: false}).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-overlays input'); + inputs.length.should.be.equal(9); + var headers = map._container.querySelectorAll('.leaflet-control-layers-overlays .leaflet-layerstree-header'); + headers.length.should.be.equal(10); // The root is hidden, but it is there + + checkHidden(inputs, [0, 0, 0, 1, 1, 1, 1, 1, 0], 0); + checkHidden(headers, [1, 0, 0, 0, 1, 1, 1, 1, 1, 0], 0); + + happen.click(headers[3]); + checkHidden(headers, [1, 0, 0, 0, 0, 0, 0, 1, 1, 0], 0); + }); + it('inner collapsed', function() { + var ctrl = L.control.layers.tree(null, overlaysArraySelectAll(false, true), {collapsed: false}).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-overlays input'); + inputs.length.should.be.equal(9); + var headers = map._container.querySelectorAll('.leaflet-control-layers-overlays .leaflet-layerstree-header'); + headers.length.should.be.equal(10); // The root is hidden, but it is there + + checkHidden(headers, [1, 0, 0, 0, 0, 0, 0, 1, 1, 0], 0); + }); + it('outer collapsed', function() { + var ctrl = L.control.layers.tree(null, overlaysArraySelectAll(true, false), {collapsed: false}).addTo(map); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-overlays input'); + inputs.length.should.be.equal(9); + var headers = map._container.querySelectorAll('.leaflet-control-layers-overlays .leaflet-layerstree-header'); + headers.length.should.be.equal(10); // The root is hidden, but it is there + + checkHidden(inputs, [0, 0, 0, 1, 1, 1, 1, 1, 0], 0); + checkHidden(headers, [1, 0, 0, 0, 1, 1, 1, 1, 1, 0], 0); + + happen.click(headers[3]); + checkHidden(headers, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 0); + }); + }); + + describe('EventedClasses', function() { + beforeEach(function() { + map.setView([0, 0], 14); + }); + + it('select all 1', function() { + var ctl = L.control.layers.tree(null, overlaysArrayEventedClasses(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + + headers[3].parentElement.querySelectorAll('input').length.should.be.equal(4); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[3].querySelector('.sel')); + map._layers[L.Util.stamp(markerA)].should.be.equal(markerA); + map._layers[L.Util.stamp(markerC)].should.be.equal(markerC); + should.not.exist(map._layers[L.Util.stamp(markerB)]); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(4); + ctl.getContainer().parentElement.querySelectorAll('input:checked').length.should.be.equal(4); + }); + + it('deselect all 1', function() { + var ctl = L.control.layers.tree(null, overlaysArrayEventedClasses(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + + headers[3].parentElement.querySelectorAll('input').length.should.be.equal(4); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[3].querySelector('.sel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(4); + + happen.click(headers[3].querySelector('.unsel')); + should.not.exist(map._layers[L.Util.stamp(markerA)]); + should.not.exist(map._layers[L.Util.stamp(markerC)]); + should.not.exist(map._layers[L.Util.stamp(markerB)]); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + ctl.getContainer().parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + }); + + it('select all 2', function() { + var ctl = L.control.layers.tree(null, overlaysArrayEventedClasses(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + + headers[6].parentElement.querySelectorAll('input').length.should.be.equal(2); + headers[6].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[6].querySelector('.sel')); + map._layers[L.Util.stamp(markerC)].should.be.equal(markerC); + should.not.exist(map._layers[L.Util.stamp(markerA)]); + should.not.exist(map._layers[L.Util.stamp(markerB)]); + headers[6].parentElement.querySelectorAll('input:checked').length.should.be.equal(2); + ctl.getContainer().parentElement.querySelectorAll('input:checked').length.should.be.equal(2); + }); + + it('deselect all 2', function() { + var ctl = L.control.layers.tree(null, overlaysArrayEventedClasses(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + + headers[6].parentElement.querySelectorAll('input').length.should.be.equal(2); + headers[6].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[6].querySelector('.sel')); + headers[6].parentElement.querySelectorAll('input:checked').length.should.be.equal(2); + + happen.click(headers[6].querySelector('.unsel')); + should.not.exist(map._layers[L.Util.stamp(markerA)]); + should.not.exist(map._layers[L.Util.stamp(markerC)]); + should.not.exist(map._layers[L.Util.stamp(markerB)]); + headers[6].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + ctl.getContainer().parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + }); + + it('select unselect callbacks', function() { + function callbackSel(ev, domNode, treeNode, map) { + ev.type.should.be.equal('click'); + domNode.querySelectorAll('input').length.should.be.equal(4); + treeNode.children.length.should.be.equal(3); + should.exist(map); + return true; + } + + function callbackUnsel(ev, domNode, treeNode, map) { + ev.type.should.be.equal('click'); + domNode.querySelectorAll('input').length.should.be.equal(4); + treeNode.children.length.should.be.equal(3); + should.exist(map); + return false; + } + + var ctl = L.control.layers.tree(null, overlaysArrayEventedClasses(callbackSel, callbackUnsel), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + + headers[3].parentElement.querySelectorAll('input').length.should.be.equal(4); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[3].querySelector('.sel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(4); + + happen.click(headers[3].querySelector('.unsel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + }); + + it('selector toggle', function() { + function callback(ev, domNode, treeNode, map) { + var noneSelected = domNode.querySelectorAll('input:checked').length === 0; + return noneSelected; + } + + var ctl = L.control.layers.tree(null, overlaysArrayEventedClasses(callback, callback), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + + headers[3].parentElement.querySelectorAll('input').length.should.be.equal(4); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[3].querySelector('.sel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(4); + happen.click(headers[3].querySelector('.sel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[5].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(1); + + happen.click(headers[3].querySelector('.sel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + happen.click(headers[3].querySelector('.sel')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(4); + }); + }); + + describe('SelectAll', function() { + beforeEach(function() { + map.setView([0, 0], 2); + }); + + it('selector toggle', function() { + function shouldbe(mA, mB, mC) { + function checkit(layer, present) { + if (present) { + map._layers[L.Util.stamp(layer)].should.be.equal(layer); + } else { + should.not.exist(map._layers[L.Util.stamp(layer)]); + } + } + checkit(markerA, mA); + checkit(markerB, mB); + checkit(markerC, mC); + } + + var ctl = L.control.layers.tree(null, overlaysArraySelectAll(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(10); + + headers[6].querySelector('input').title.should.be.equal('my title'); + + happen.click(headers[9].querySelector('input')); + + headers[3].parentElement.querySelectorAll('input').length.should.be.equal(6); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + + happen.click(headers[3].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(6); + shouldbe(true, true, true); + happen.click(headers[3].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + shouldbe(false, true, false); + + happen.click(headers[9].querySelector('input')); + shouldbe(false, false, false); + + happen.click(headers[4].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(1); + shouldbe(true, false, false); + headers[3].parentElement.querySelectorAll('input:indeterminate').length.should.be.equal(1); + + happen.click(headers[3].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(6); + shouldbe(true, false, true); + happen.click(headers[3].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + shouldbe(false, false, false); + + happen.click(headers[6].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(3); + headers[6].parentElement.querySelectorAll('input:checked').length.should.be.equal(3); + headers[3].parentElement.querySelectorAll('input:indeterminate').length.should.be.equal(1); + shouldbe(false, false, true); + happen.click(headers[3].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(6); + shouldbe(true, false, true); + }); + it('show if all selected or deselected', function() { + var ctl = L.control.layers.tree(null, overlaysArraySelectAll(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(10); + + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(0); + headers[3].parentElement.querySelectorAll('input:indeterminate').length.should.be.equal(0); + happen.click(headers[3].querySelector('input')); + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(6); + headers[3].parentElement.querySelectorAll('input:indeterminate').length.should.be.equal(0); + + happen.click(headers[7].querySelector('input')); + headers[3].parentElement.querySelector('input').checked.should.be.false; + headers[3].parentElement.querySelector('input').indeterminate.should.be.true; + headers[6].parentElement.querySelector('input').checked.should.be.false; + headers[6].parentElement.querySelector('input').indeterminate.should.be.true; + + happen.click(headers[7].querySelector('input')); + headers[3].parentElement.querySelector('input').checked.should.be.true; + headers[3].parentElement.querySelector('input').indeterminate.should.be.false; + headers[6].parentElement.querySelector('input').checked.should.be.true; + headers[6].parentElement.querySelector('input').indeterminate.should.be.false; + + happen.click(headers[6].querySelector('input')); + headers[3].parentElement.querySelector('input').checked.should.be.false; + headers[3].parentElement.querySelector('input').indeterminate.should.be.true; + headers[6].parentElement.querySelector('input').checked.should.be.false; + headers[6].parentElement.querySelector('input').indeterminate.should.be.false; + + happen.click(headers[6].querySelector('input')); + headers[3].parentElement.querySelector('input').checked.should.be.true; + headers[3].parentElement.querySelector('input').indeterminate.should.be.false; + headers[6].parentElement.querySelector('input').checked.should.be.true; + headers[6].parentElement.querySelector('input').indeterminate.should.be.false; + + headers[3].parentElement.querySelectorAll('input:checked').length.should.be.equal(6); + headers[3].parentElement.querySelectorAll('input:indeterminate').length.should.be.equal(0); + }); + }); + + describe('Select', function() { + beforeEach(function() { + map.setView([0, 0], 14); + }); + + it('sel layer B and A', function() { + var ctl = L.control.layers.tree(baseTree1(), null, {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + happen.click(headers[6].querySelector('label')); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + happen.click(headers[4].querySelector('label')); + map._layers[L.Util.stamp(layerA)].should.be.equal(layerA); + }); + + it('labelIsSelector', function() { + var ctl; + var counter = [0, 0, 0, 0]; + ['both', 'base', 'overlay', 'none'].forEach(function(labelIsSelector) { + ctl && map.removeControl(ctl); + ctl = L.control.layers.tree(baseTree1(), overlaysArray1(), {collapsed: false, labelIsSelector: labelIsSelector}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + + if (labelIsSelector === 'both' || labelIsSelector === 'base') { + happen.click(headers[6].querySelector('label')); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + counter[0]++; + } else { + should.not.exist(headers[6].querySelector('label')); + happen.click(headers[6].querySelector('input')); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + counter[1]++; + } + + if (labelIsSelector === 'both' || labelIsSelector === 'overlay') { + happen.click(headers[11].querySelector('label')); + map._layers[L.Util.stamp(markerA)].should.be.equal(markerA); + counter[2]++; + } else { + should.not.exist(headers[11].querySelector('label')); + happen.click(headers[11].querySelector('input')); + map._layers[L.Util.stamp(markerA)].should.be.equal(markerA); + counter[3]++; + } + map.removeLayer(layerB); + map.removeLayer(markerA); + }); + chai.expect(counter).to.eql([2, 2, 2, 2]); + }); + }); + + describe('Labels', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + it('labels base', function() { + var ctl = L.control.layers.tree(baseTree1(), null, {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers[3].querySelector('.leaflet-layerstree-header-name').outerText.should.be.equal('Node 1'); + headers[4].querySelector('.leaflet-layerstree-header-name').outerText.should.be.equal('Leaf 11'); + headers[6].querySelector('.leaflet-layerstree-header-name').outerText.should.be.equal('Leaf three'); + }); + }); + + describe('Expand and collapse', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + + it('Show only selected', function() { + var ctrl = L.control.layers.tree(baseTree1(), null, {collapsed: false}).addTo(map); + map.addLayer(layerB); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(7); + checkHidden(headers, false, 0); + ctrl.collapseTree().expandSelected(false); + checkHidden(headers, [0, 0, 0, 0, 1, 1, 0], 0); + }); + + it('Collapse', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false}).addTo(map); + map.addLayer(layerB); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + checkHidden(headers, false, 0); + ctrl.collapseTree(); + checkHidden(headers, [0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], 0); + ctrl.collapseTree(true); + checkHidden(headers, [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], 0); + }); + + it('Expand', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false}).addTo(map); + map.addLayer(layerB); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + checkHidden(headers, false, 0); + ctrl.collapseTree().collapseTree(true); + ctrl.expandTree(); + checkHidden(headers, [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], 0); + ctrl.expandTree(true); + checkHidden(headers, 0, 0); + }); + }); + + describe('Names', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + it('Named Toggle', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {namedToggle: true}).addTo(map); + map.addLayer(layerB); + var toggle = map._container.querySelector('.leaflet-control-layers-toggle'); + toggle.innerHTML.should.be.equal('Name Leaf three'); + var inputs = map._container.querySelectorAll('.leaflet-control-layers-list input'); + happen.click(inputs[0]); + toggle.innerHTML.should.be.equal('Name Leaf one'); + happen.click(inputs[2]); + toggle.innerHTML.should.be.equal('Name Leaf 11'); + happen.click(inputs[8]); + toggle.innerHTML.should.be.equal('Name Leaf 11'); + }); + }); + + describe('Symbols', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + it('Defaults', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false}).addTo(map); + var items = map._container.querySelectorAll('.leaflet-layerstree-closed'); + items.length.should.be.equal(14); + for (var i = 0; i < items.length; i++) { + items[i].innerHTML.should.be.equal('+'); + } + items = map._container.querySelectorAll('.leaflet-layerstree-opened'); + items.length.should.be.equal(14); + for (var i = 0; i < items.length; i++) { + items[i].innerHTML.should.be.equal('−'); + } + items = map._container.querySelectorAll('.leaflet-layerstree-header-space'); + items.length.should.be.equal(14); + for (var i = 0; i < items.length; i++) { + items[i].innerHTML.should.be.equal(' '); + } + }); + it('Closed', function() { + var symbol = '^'; + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, closedSymbol: symbol}).addTo(map); + map.addLayer(layerB); + var items = map._container.querySelectorAll('.leaflet-layerstree-closed'); + items.length.should.be.equal(14); + for (var i = 0; i < items.length; i++) { + items[i].innerHTML.should.be.equal(symbol); + } + }); + it('Opened', function() { + var symbol = 'v'; + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, openedSymbol: symbol}).addTo(map); + var items = map._container.querySelectorAll('.leaflet-layerstree-opened'); + items.length.should.be.equal(14); + for (var i = 0; i < items.length; i++) { + items[i].innerHTML.should.be.equal(symbol); + } + }); + it('Space', function() { + var symbol = '_*_'; + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, spaceSymbol: symbol}).addTo(map); + var items = map._container.querySelectorAll('.leaflet-layerstree-header-space'); + items.length.should.be.equal(14); + for (var i = 0; i < items.length; i++) { + items[i].innerHTML.should.be.equal(symbol); + } + }); + }); + + describe('Selector back', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + it('Default', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + for (var h = 0; h < headers.length; h++) { + var things = []; + var keys = ['closed', 'opened', 'space', 'label'] + var items = headers[h].querySelectorAll('span, label, div'); + for (var i = 0; i < items.length; i++) { + keys.forEach(function(key) { + if (items[i].className.indexOf(key) > 0) { + things.push(key); + } + }); + } + things[2].should.be.equal('space'); + things[3].should.be.equal('label'); + } + }); + + it('Back', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, selectorBack: true}).addTo(map); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + for (var h = 0; h < headers.length; h++) { + var things = []; + var keys = ['closed', 'opened', 'space', 'label'] + var items = headers[h].querySelectorAll('span, label, div'); + for (var i = 0; i < items.length; i++) { + keys.forEach(function(key) { + if (items[i].className.indexOf(key) > 0) { + things.push(key); + } + }); + } + things[1].should.be.equal('space'); + things[0].should.be.equal('label'); + } + }); + }); + + describe('Expand and collapse all', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + it('expandAll', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, expandAll: 'exp'}).addTo(map); + ctrl.collapseTree().collapseTree(true); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + checkHidden(headers, [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], 0); + var ct = map._container.querySelectorAll('.leaflet-layerstree-expand-collapse'); + ct.length.should.be.equal(2); + happen.click(ct[0]); + checkHidden(headers, [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], 0); + happen.click(ct[1]); + checkHidden(headers, false, 0); + }); + it('collapseAll', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, collapseAll: 'col'}).addTo(map); + ctrl.expandTree().expandTree(true); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + checkHidden(headers, false, 0); + var ct = map._container.querySelectorAll('.leaflet-layerstree-expand-collapse'); + ct.length.should.be.equal(2); + happen.click(ct[0]); + checkHidden(headers, [0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], 0); + happen.click(ct[1]); + checkHidden(headers, [0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1], 0); + }); + it('Empties', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, collapseAll: '', expandAll: ''}).addTo(map); + var ct = map._container.querySelectorAll('.leaflet-layerstree-expand-collapse'); + ct.length.should.be.equal(0); + }); + it('All', function() { + var ctrl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false, collapseAll: 'col', expandAll: 'exp'}).addTo(map); + var ct = map._container.querySelectorAll('.leaflet-layerstree-expand-collapse'); + ct.length.should.be.equal(4); + }); + it('Arrays', function() { + var ctrl = L.control.layers.tree(baseArray1(), overlaysArray1(), {collapsed: false, collapseAll: 'col'}).addTo(map); + var ct = map._container.querySelectorAll('.leaflet-layerstree-expand-collapse'); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + checkHidden(headers, [1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], 0); + var ct = map._container.querySelectorAll('.leaflet-layerstree-expand-collapse'); + ct.length.should.be.equal(2); + happen.click(ct[0]); + checkHidden(headers, [1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0], 0); + happen.click(ct[1]); + checkHidden(headers, [1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0], 0); + }); + }); + + describe('Reset trees', function() { + beforeEach(function() { + map.setView([0, 0], 1); + }); + it('case 1', function() { + var ctl = L.control.layers.tree(baseArray2(), null, {collapsed: false}).addTo(map); + map.addLayer(layerB); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(3); // including the hidden root + ctl.setBaseTree(baseTree1()); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + + headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(7) + happen.click(headers[4].querySelector('label')); + map._layers[L.Util.stamp(layerA)].should.be.equal(layerA); + }); + it('case 2', function() { + var ctl = L.control.layers.tree(baseArray2(), overlaysTree1(), {collapsed: false}).addTo(map); + map.addLayer(layerB); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + var headers = map._container.querySelectorAll('.leaflet-control-layers-base .leaflet-layerstree-header'); + headers.length.should.be.equal(3); // including the hidden root + ctl.setBaseTree(baseTree1()); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + + headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14) + }); + it('case 3', function() { + var ctl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false}).addTo(map); + map.addLayer(layerB); + map.addLayer(markerA); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + map._layers[L.Util.stamp(markerA)].should.be.equal(markerA); + var headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(14); + var inputs = map._container.querySelectorAll('.leaflet-layerstree-header input'); + inputs.length.should.be.equal(10); + inputs[4].checked.should.be.true; + inputs[7].checked.should.be.true; + + ctl.setBaseTree(baseArray2()); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + map._layers[L.Util.stamp(markerA)].should.be.equal(markerA); + + headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(10) + inputs = map._container.querySelectorAll('.leaflet-layerstree-header input'); + inputs.length.should.be.equal(7); + inputs[1].checked.should.be.true; + inputs[4].checked.should.be.true; + + ctl.setOverlayTree(overlaysArray2()); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + map._layers[L.Util.stamp(markerA)].should.be.equal(markerA); + + headers = map._container.querySelectorAll('.leaflet-layerstree-header'); + headers.length.should.be.equal(6) + inputs = map._container.querySelectorAll('.leaflet-layerstree-header input'); + inputs.length.should.be.equal(4); + inputs[1].checked.should.be.true; + inputs[2].checked.should.be.true; + }); + it('case 4', function() { + var ctl = L.control.layers.tree(baseTree1(), overlaysTree1(), {collapsed: false}).addTo(map); + map.addLayer(layerB); + map.addLayer(markerO); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + map._layers[L.Util.stamp(markerO)].should.be.equal(markerO); + + ctl.setOverlayTree(overlaysArray2()); + map._layers[L.Util.stamp(layerB)].should.be.equal(layerB); + map._layers[L.Util.stamp(markerO)].should.be.equal(markerO); + + var inputs = map._container.querySelectorAll('.leaflet-layerstree-header input'); + inputs.length.should.be.equal(7); + inputs[5].checked.should.be.false; + inputs[6].checked.should.be.false; + }); + }); +}); diff --git a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/de-DE/plg_fields_aggpxtrack.ini b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/de-DE/plg_fields_aggpxtrack.ini index b7b63e5..400ef4f 100644 --- a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/de-DE/plg_fields_aggpxtrack.ini +++ b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/de-DE/plg_fields_aggpxtrack.ini @@ -156,6 +156,10 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_DESC="In der Google Maps JavaScr PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_LABEL="GoogleMaps Kartentyp" PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_HEIGHT_LABEL="Map Height" PLG_FIELDS_AGGPXTRACK_PARAMS__CONTROL_HEIGHT_DESC="The height of the map in pixel" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_LABEL="Geoportail France Key" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_DESC="Geoportail France Key: See https://www.geoportail.gouv.fr/depot/api/cgu/DT_APIGeoportail.pdf" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE="Add satellite selection option" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE_DESC="Add satellite (Esri_WorldImagery) selection option in Frontend. This is a simple variant to make it possible to switch to a satellite layer. Attention, you cannot use this option together with 'Show map selection'." PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_DESC="Dunkle Farbe" PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_LABEL="Dunkle Farbe" @@ -238,7 +242,7 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_KILOMETERPOINTRADIUS_LABEL="Radius" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_LABEL="Drucksteuerung anzeigen" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_DESC="Ein einfaches Steuerelement, das ein Symbol zum Drucken einer Karte hinzufügt. Getestet in Chrome und Firefox. Nicht kompatibel mit IE & Edge." -PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Zeige Kartenauswahl im Frondend auswählen" +PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Zeige Kartenauswahl im Frondend. This is a variant to make it possible to switch different layers. Attention, you cannot use this option together with 'Show map satellite'." PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_LABEL="Zeige Kartenauswahl" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_DESC="Fügen Sie die Karten ein, die Sie im Frontend auswählen möchten" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_LABEL="Karten" diff --git a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/en-GB/plg_fields_aggpxtrack.ini b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/en-GB/plg_fields_aggpxtrack.ini index f85a7e2..59b46fe 100644 --- a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/en-GB/plg_fields_aggpxtrack.ini +++ b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/en-GB/plg_fields_aggpxtrack.ini @@ -156,6 +156,10 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_DESC="There are four types of ma PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_LABEL="Google Maps Map Type" PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_HEIGHT_LABEL="Height of the map" PLG_FIELDS_AGGPXTRACK_PARAMS__CONTROL_HEIGHT_DESC="Height of the map in pixels" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_LABEL="Geoportail France Key" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_DESC="Geoportail France Key: See https://www.geoportail.gouv.fr/depot/api/cgu/DT_APIGeoportail.pdf" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE="Add satellite selection option" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE_DESC="Add satellite (Esri_WorldImagery) selection option in Frontend. This is a simple variant to make it possible to switch to a satellite layer. Attention, you cannot use this option together with 'Show map selection'." PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_DESC="Dark color" PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_LABEL="Dark color" @@ -238,7 +242,7 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_KILOMETERPOINTRADIUS_LABEL="Radius" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_LABEL="Show Print Control" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_DESC="A simple control which adds an icon to print a map. Tested on Chrome and Firefox. Incompatible with IE & Edge." -PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Show map selection in Frondend" +PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Show map selection in Frondend. This is a variant to make it possible to switch different layers. Attention, you cannot use this option together with 'Show map satellite'." PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_LABEL="Show map selection" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_DESC="Insert the maps you like to make possible to choose in the frontend" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_LABEL="Maps" diff --git a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/fr-FR/plg_fields_aggpxtrack.ini b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/fr-FR/plg_fields_aggpxtrack.ini index c8e9d84..69780ba 100644 --- a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/fr-FR/plg_fields_aggpxtrack.ini +++ b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/fr-FR/plg_fields_aggpxtrack.ini @@ -155,6 +155,10 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_DESC="There are four types of ma PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_LABEL="Google Maps Map Type" PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_HEIGHT_LABEL="Height of the map" PLG_FIELDS_AGGPXTRACK_PARAMS__CONTROL_HEIGHT_DESC="Height of the map in pixels" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_LABEL="Geoportail France Key" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_DESC="Geoportail France Key: See https://www.geoportail.gouv.fr/depot/api/cgu/DT_APIGeoportail.pdf" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE="Add satellite selection option" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE_DESC="Add satellite (Esri_WorldImagery) selection option in Frontend. This is a simple variant to make it possible to switch to a satellite layer. Attention, you cannot use this option together with 'Show map selection'." PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_DESC="Dark color" PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_LABEL="Dark color" @@ -237,7 +241,7 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_KILOMETERPOINTRADIUS_LABEL="Radius" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_LABEL="Show Print Control" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_DESC="A simple control which adds an icon to print a map. Tested on Chrome and Firefox. Incompatible with IE & Edge." -PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Show map selection in Frondend" +PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Show map selection in Frondend. This is a variant to make it possible to switch different layers. Attention, you cannot use this option together with 'Show map satellite'." PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_LABEL="Show map selection" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_DESC="Insert the maps you like to make possible to choose in the frontend" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_LABEL="Maps" diff --git a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/it-IT/plg_fields_aggpxtrack.ini b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/it-IT/plg_fields_aggpxtrack.ini index 54b7a80..ef51065 100644 --- a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/it-IT/plg_fields_aggpxtrack.ini +++ b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/it-IT/plg_fields_aggpxtrack.ini @@ -156,6 +156,10 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_DESC="Ci sono quattro tipi di ma PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_LABEL="Tipo di mappa di Google Maps" PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_HEIGHT_LABEL="Höhe der Karte" PLG_FIELDS_AGGPXTRACK_PARAMS__CONTROL_HEIGHT_DESC="Höhe der Karte in Pixeln" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_LABEL="Geoportail France Key" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_DESC="Geoportail France Key: See https://www.geoportail.gouv.fr/depot/api/cgu/DT_APIGeoportail.pdf" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE="Add satellite selection option" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE_DESC="Add satellite (Esri_WorldImagery) selection option in Frontend. This is a simple variant to make it possible to switch to a satellite layer. Attention, you cannot use this option together with 'Show map selection'." PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_DESC="Colore scuro" PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_LABEL="Colore scuro" @@ -238,7 +242,7 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_KILOMETERPOINTRADIUS_LABEL="raggio" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_DESC="Mostra controllo stampa" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_LABEL="Un semplice controllo che aggiunge un'icona per stampare una mappa Testato su Chrome e Firefox, incompatibile con IE & Edge." -PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Mostra interruttori livelli in Frondend" +PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Mostra interruttori livelli in Frondend. This is a variant to make it possible to switch different layers. Attention, you cannot use this option together with 'Show map satellite'." PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_LABEL="Mostra livelli" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_DESC="Inserisci le mappe che ti piacciono per rendere possibile la scelta nel frontend" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_LABEL="Mappe" diff --git a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/nl-NL/plg_fields_aggpxtrack.ini b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/nl-NL/plg_fields_aggpxtrack.ini index 2e8513a..bf9b394 100644 --- a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/nl-NL/plg_fields_aggpxtrack.ini +++ b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/language/nl-NL/plg_fields_aggpxtrack.ini @@ -155,6 +155,10 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_DESC="Er zijn vier soorten kaart PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GOOGLETYPE_LABEL="Google Maps Kaart Type" PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_HEIGHT_LABEL="Hoogte van de kaart" PLG_FIELDS_AGGPXTRACK_PARAMS__CONTROL_HEIGHT_DESC="Hoogte van de kaart in pixels" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_LABEL="Geoportail France Key" +PLG_FIELDS_AGGPXTRACK_PARAMS_CONTROL_GEOPORTAILFRAMCEKEY_DESC="Geoportail France Key: See https://www.geoportail.gouv.fr/depot/api/cgu/DT_APIGeoportail.pdf" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE="Add satellite selection option" +PLG_FIELDS_AGGPXTRACK_ADDLAYERTREE_DESC="Add satellite (Esri_WorldImagery) selection option in Frontend. This is a simple variant to make it possible to switch to a satellite layer. Attention, you cannot use this option together with 'Show map selection'." PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_DESC="Donkere kleur" PLG_FIELDS_AGGPXTRACK_PARAMS_INFOCOLORDARK_LABEL="Donkere kleur" @@ -237,7 +241,7 @@ PLG_FIELDS_AGGPXTRACK_PARAMS_KILOMETERPOINTRADIUS_LABEL="Straal" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_LABEL="Afdrukbesturing tonen" PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_EASYPRINT_DESC="Een eenvoudige controle die een pictogram toevoegt om een kaart af te drukken. Getest op Chrome en Firefox. Niet compatibel met IE & Edge." -PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Kaart selectie tonen in Frondend" +PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_DESC="Kaart selectie tonen in Frondend. This is a variant to make it possible to switch different layers. Attention, you cannot use this option together with 'Show map satellite'." PLG_FIELDS_AGGPXTRACK_PARAMS_SHOW_PANELLAYERS_LABEL="Kaart selectie tonen" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_DESC="Voeg de gewenste kaarten in om het mogelijk te maken te kiezen in de frontend" PLG_FIELDS_AGGPXTRACK_PARAMS_PANELLAYERS_LABEL="Kaarten" diff --git a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/params/aggpxtrack.xml b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/params/aggpxtrack.xml index 2fd3284..0565600 100644 --- a/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/params/aggpxtrack.xml +++ b/j4/pkg_aggpxtrack/src/plugins/fields/aggpxtrack/params/aggpxtrack.xml @@ -9,7 +9,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -139,6 +139,11 @@ + + + + + @@ -165,14 +170,14 @@ - + - + @@ -266,7 +271,7 @@ - + @@ -335,7 +340,7 @@ - + @@ -348,7 +353,7 @@ - + @@ -384,7 +389,7 @@ - + @@ -418,7 +423,7 @@ - + @@ -433,7 +438,7 @@ - + @@ -445,20 +450,21 @@ - + - -