From 40f7a24326d27846b5723bde7d18cee02b76830c Mon Sep 17 00:00:00 2001 From: astridx Date: Mon, 25 Apr 2022 10:55:32 +0200 Subject: [PATCH] wip --- changelog.xml | 3 + .../plg_fields_aggpxtrack/js/aggpxtrack.js | 54 +- .../layerstree/.eslintrc | 35 + .../layerstree/.github/workflows/main.yml | 52 + .../.github/workflows/npm-publish.yml | 29 + .../layerstree/.npmignore | 7 + .../layerstree/L.Control.Layers.Tree.css | 61 + .../layerstree/L.Control.Layers.Tree.d.ts | 115 + .../layerstree/L.Control.Layers.Tree.js | 521 ++++ .../plg_fields_aggpxtrack/layerstree/LICENSE | 29 + .../layerstree/README.md | 191 ++ .../layerstree/bower.json | 27 + .../layerstree/examples/airports.html | 335 +++ .../layerstree/examples/basic.html | 80 + .../layerstree/examples/basic_1.3.4.html | 79 + .../layerstree/examples/index.html | 14 + .../layerstree/examples/options.html | 140 + .../layerstree/package-lock.json | 2334 +++++++++++++++++ .../layerstree/package.json | 47 + .../layerstree/smalloverlay.png | Bin 0 -> 68187 bytes .../layerstree/smalltree.png | Bin 0 -> 32252 bytes .../layerstree/test-types/.eslintrc | 18 + .../test-types/L.Control.Layers.Tree.ts | 88 + .../layerstree/test-types/package-lock.json | 1305 +++++++++ .../layerstree/test-types/package.json | 21 + .../layerstree/test-types/tsconfig.json | 16 + .../layerstree/test/index.html | 53 + .../layerstree/test/spec.js | 932 +++++++ .../language/de-DE/plg_fields_aggpxtrack.ini | 6 +- .../language/en-GB/plg_fields_aggpxtrack.ini | 6 +- .../language/fr-FR/plg_fields_aggpxtrack.ini | 6 +- .../language/it-IT/plg_fields_aggpxtrack.ini | 6 +- .../language/nl-NL/plg_fields_aggpxtrack.ini | 6 +- .../fields/aggpxtrack/params/aggpxtrack.xml | 36 +- .../fields/aggpxtrack/tmpl/aggpxtrack.php | 6 + 35 files changed, 6622 insertions(+), 36 deletions(-) create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.eslintrc create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/main.yml create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.github/workflows/npm-publish.yml create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/.npmignore create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.css create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.d.ts create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/L.Control.Layers.Tree.js create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/LICENSE create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/README.md create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/bower.json create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/airports.html create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic.html create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/basic_1.3.4.html create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/index.html create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/examples/options.html create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package-lock.json create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/package.json create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalloverlay.png create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/smalltree.png create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/.eslintrc create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/L.Control.Layers.Tree.ts create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package-lock.json create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/package.json create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test-types/tsconfig.json create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/index.html create mode 100644 j4/pkg_aggpxtrack/src/media/plg_fields_aggpxtrack/layerstree/test/spec.js 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 0000000000000000000000000000000000000000..b01aaccef28d37a54a16245ee7fc290ec475145b GIT binary patch literal 68187 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 literal 0 HcmV?d00001 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 @@ - + - -