diff --git a/agosms-update4.xml b/agosms-update4.xml index 1f81d101..6a2cfe98 100644 --- a/agosms-update4.xml +++ b/agosms-update4.xml @@ -105,4 +105,25 @@ c963ae798e308048f5a6f74ba0a58f1992b8d2e2c14668ec40a91ee78fcb8ba2 ac6b52d219a49e341b091f0143d5bb45514cf9fdb304d1e7aa99b05f6d707b911cb3c1999b87ae83092e0f7f045607f9 + + pkg_agosms + pkg_agosms + pkg_agosms + package + site + 4.0.15 + https://github.com/astridx/pkg_agosms/blob/v4.0.15/README.md + + https://github.com/astridx/pkg_agosms/releases/download/v4.0.15/pkg-agosms-4.0.15.zip + + + rc + stable + + Astrid Günther + https://astrid-guenther.de + + ff75458971412ce21c5cd1dc063112ccdd62f2560270d8a4905e153ce29cd22d + da6fe539ea5d84e097483880fa6f710534ab00a5ef9bc41521b9abc2a63074ad5be986900e32bf00bf82a32098e94882 + \ No newline at end of file diff --git a/changelog.xml b/changelog.xml index aa9f57e8..6a229f1d 100644 --- a/changelog.xml +++ b/changelog.xml @@ -69,4 +69,38 @@ Add mod_agosmsmt. + + pkg_agosms + package + 4.0.13 + + Fixes and improvments in mod_agosmsmt. + + + + pkg_agosms + package + 4.0.14 + + Add Layer Tree (for satellite) in module agosms. + Make separators more visible in the backend + + + + pkg_agosms + package + 4.0.15 + + Agosmsaddressmarker Field: Make the separators more visible in the backend. + Agosmsaddressmarker Field: Change the maximum default values for lat and lon to the largest possible values. + Agosmsaddressmarker Field: Add possibility to add a field for popup text. + + + + pkg_agosms + package + 4.0.16 + + + diff --git a/j4/pkg_agosms/jorobo.ini b/j4/pkg_agosms/jorobo.ini index aa6abd56..48b9ecdd 100644 --- a/j4/pkg_agosms/jorobo.ini +++ b/j4/pkg_agosms/jorobo.ini @@ -1,5 +1,5 @@ extension = agosms -version = 4.0.13 +version = 4.0.16 source = src target = package diff --git a/j4/pkg_agosms/src/media/mod_agosm/js/agosm.js b/j4/pkg_agosms/src/media/mod_agosm/js/agosm.js index 0ab3b241..e40d3ca3 100644 --- a/j4/pkg_agosms/src/media/mod_agosm/js/agosm.js +++ b/j4/pkg_agosms/src/media/mod_agosm/js/agosm.js @@ -21,6 +21,8 @@ document.addEventListener('DOMContentLoaded', function () { var moduleId = element.getAttribute('data-module-id'); var detectRetina = element.getAttribute('data-detect-retina'); var baselayer = element.getAttribute('data-baselayer'); + var layertree = element.getAttribute('data-layertree'); + var lonlat = element.getAttribute('data-lonlat').split(",", 3); var zoom = element.getAttribute('data-zoom'); var disableClusteringAtZoom = element.getAttribute('data-disable-clustering-at-zoom'); @@ -283,6 +285,19 @@ document.addEventListener('DOMContentLoaded', function () { tileLayer.addTo(window['mymap' + moduleId]); + 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' + moduleId]); + } + // SCALE CONTROL if ((scale) !== '0') { let aggpxScale = L.control.scale(); @@ -964,6 +979,11 @@ document.addEventListener('DOMContentLoaded', function () { } let popuptext = " " + title + " "; + + if (objcf.specialpopuptext) { + popuptext = objcf.specialpopuptext; + } + tempMarkercf.bindPopup(popuptext.replace(/` 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_agosms/src/media/mod_agosm/layerstree/bower.json b/j4/pkg_agosms/src/media/mod_agosm/layerstree/bower.json new file mode 100644 index 00000000..8b74aaf9 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/examples/airports.html b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/airports.html new file mode 100644 index 00000000..3d719c8f --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/airports.html @@ -0,0 +1,335 @@ + + + + + + Leaflet Layers Tree Demo: Airports in Europe + + + + + + + + +
+ + + + + + diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/basic.html b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/basic.html new file mode 100644 index 00000000..c692df96 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/basic.html @@ -0,0 +1,80 @@ + + + + + + Leaflet Layers Tree Basic Demo + + + + + + + +
+ + + + + + diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/basic_1.3.4.html b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/basic_1.3.4.html new file mode 100644 index 00000000..261a435c --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/basic_1.3.4.html @@ -0,0 +1,79 @@ + + + + + Leaflet Layers Tree Basic Demo + + + + + + + +
+ + + + + + diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/index.html b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/index.html new file mode 100644 index 00000000..8b64bf4d --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/index.html @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/options.html b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/options.html new file mode 100644 index 00000000..5fc493ca --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/layerstree/examples/options.html @@ -0,0 +1,140 @@ + + + + + + Leaflet Layers Tree Demo + + + + + + + +
+ + + + + + diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/package-lock.json b/j4/pkg_agosms/src/media/mod_agosm/layerstree/package-lock.json new file mode 100644 index 00000000..8166cc07 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/package.json b/j4/pkg_agosms/src/media/mod_agosm/layerstree/package.json new file mode 100644 index 00000000..5fb86dc6 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/smalloverlay.png b/j4/pkg_agosms/src/media/mod_agosm/layerstree/smalloverlay.png new file mode 100644 index 00000000..b01aacce Binary files /dev/null and b/j4/pkg_agosms/src/media/mod_agosm/layerstree/smalloverlay.png differ diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/smalltree.png b/j4/pkg_agosms/src/media/mod_agosm/layerstree/smalltree.png new file mode 100644 index 00000000..d13269de Binary files /dev/null and b/j4/pkg_agosms/src/media/mod_agosm/layerstree/smalltree.png differ diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/test-types/.eslintrc b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test-types/.eslintrc new file mode 100644 index 00000000..7a67f5a5 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/test-types/L.Control.Layers.Tree.ts b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test-types/L.Control.Layers.Tree.ts new file mode 100644 index 00000000..e9030f3f --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/test-types/package-lock.json b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test-types/package-lock.json new file mode 100644 index 00000000..7c4747c3 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/test-types/package.json b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test-types/package.json new file mode 100644 index 00000000..8ce500cc --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/test-types/tsconfig.json b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test-types/tsconfig.json new file mode 100644 index 00000000..d8a255a0 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosm/layerstree/test/index.html b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test/index.html new file mode 100644 index 00000000..169c7356 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test/index.html @@ -0,0 +1,53 @@ + + + + Leaflet.Control.Layers.Tree Tests + + + + + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/j4/pkg_agosms/src/media/mod_agosm/layerstree/test/spec.js b/j4/pkg_agosms/src/media/mod_agosm/layerstree/test/spec.js new file mode 100644 index 00000000..05066ff0 --- /dev/null +++ b/j4/pkg_agosms/src/media/mod_agosm/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_agosms/src/media/mod_agosmsmt/js/agosmsmt.js b/j4/pkg_agosms/src/media/mod_agosmsmt/js/agosmsmt.js index c0e56457..934963f9 100644 --- a/j4/pkg_agosms/src/media/mod_agosmsmt/js/agosmsmt.js +++ b/j4/pkg_agosms/src/media/mod_agosmsmt/js/agosmsmt.js @@ -18,7 +18,7 @@ document.addEventListener('DOMContentLoaded', function () { var fullscreen = element.getAttribute('data-fullscreen'); var locate = element.getAttribute('data-locate'); var mouseposition = element.getAttribute('data-mouseposition'); - + var uriroot = element.getAttribute('data-uriroot'); var scrollwheelzoom = element.getAttribute('data-scrollwheelzoom'); var noWorldWarp = element.getAttribute('data-no-world-warp'); @@ -247,7 +247,7 @@ document.addEventListener('DOMContentLoaded', function () { // var baseMaps = { "Karte": tileLayer, - "Sattelit": tileLayer2 + "Satellit": tileLayer2 }; L.control.layers(baseMaps).addTo(window['mymap' + moduleId]); @@ -296,7 +296,7 @@ document.addEventListener('DOMContentLoaded', function () { L.popup({ className: 'popup-fixed', autoPan: false, - }).setContent(feature.properties.link_desc) + }).setContent('' + feature.properties.link_name + '' + feature.properties.link_desc) ) .addTo(catOverlays[arrCat]); @@ -384,19 +384,31 @@ document.addEventListener('DOMContentLoaded', function () { L.control.mousePosition().addTo(window['mymap' + moduleId]); } - - - if (moveForm == "1") { // Suche in rechte Seitenleiste verschieben var thismap = document.querySelector('#map' + moduleId); + var agosmsMtFormLayer = document.getElementById("agosms-mt-form-layer" + moduleId); var agosmsMtFormRadius = document.getElementById("agosms-mt-form-radius" + moduleId); + var agosmsMtLocate = document.getElementById("agosms-mt-locate" + moduleId); + var agosmsMtLocateText = document.getElementById("agosms-mt-locate-text" + moduleId); + var clayer = thismap.querySelector(".leaflet-control-layers-expanded"); var cradius = thismap.querySelector(".leaflet-control-radiuszoom"); - setParent(clayer, agosmsMtFormLayer); - setParent(cradius, agosmsMtFormRadius); + var clocate = thismap.querySelector(".leaflet-control-locate"); + + if (clocate && agosmsMtLocate && agosmsMtLocateText) { + agosmsMtLocateText.innerHTML = "Wo bin ich? "; + setParent(clocate, agosmsMtLocate); + } + if (clayer && agosmsMtFormLayer) { + setParent(clayer, agosmsMtFormLayer); + } + if (cradius && agosmsMtFormRadius) { + setParent(cradius, agosmsMtFormRadius); + } + function setParent(el, newParent) { if (el) newParent.appendChild(el); diff --git a/j4/pkg_agosms/src/media/plg_fields_agosmsaddressmarker/js/admin-agosmsaddressmarker.js b/j4/pkg_agosms/src/media/plg_fields_agosmsaddressmarker/js/admin-agosmsaddressmarker.js index 84f83dd1..10ac81e4 100644 --- a/j4/pkg_agosms/src/media/plg_fields_agosmsaddressmarker/js/admin-agosmsaddressmarker.js +++ b/j4/pkg_agosms/src/media/plg_fields_agosmsaddressmarker/js/admin-agosmsaddressmarker.js @@ -1,5 +1,5 @@ document.addEventListener('DOMContentLoaded', function () { - document.formvalidator.setHandler('lat', function(value) { +/* document.formvalidator.setHandler('lat', function(value) { if (value == 0) { return true; } @@ -16,11 +16,11 @@ document.addEventListener('DOMContentLoaded', function () { document.getElementById("addressmarker-alert-latlon").style.display = "block"; } return test; - }); + });*/ }); document.addEventListener('DOMContentLoaded', function () { - document.formvalidator.setHandler('lon', function(value) { +/* document.formvalidator.setHandler('lon', function(value) { if (value == 0) { return true; } @@ -37,7 +37,7 @@ document.addEventListener('DOMContentLoaded', function () { document.getElementById("addressmarker-alert-latlon").style.display = "block"; } return test; - }); + });*/ }); @@ -69,13 +69,17 @@ document.addEventListener('DOMContentLoaded', function () { } var selects = element.getElementsByTagName('select'); + var iconcolor = selects[0]; var markercolor = selects[1]; var icon = selects[2]; - var iconcolorSpan = iconcolor.parentNode.getElementsByTagName('span')[0]; - var markercolorSpan = markercolor.parentNode.getElementsByTagName('span')[0]; - var iconSpan = icon.parentNode.getElementsByTagName('span')[0]; + var iconcolorSpan = iconcolor.parentNode.getElementsByTagName('option')[0]; + var markercolorSpan = markercolor.parentNode.getElementsByTagName('option')[0]; + var iconSpan = icon.parentNode.getElementsByTagName('option')[0]; + + console.log(markercolor); + console.log(markercolorSpan); // Write the value to the fields if (hiddenfield.value.split(',').length !== 6) { diff --git a/j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/de-DE.mod_agosm.ini b/j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/mod_agosm.ini similarity index 98% rename from j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/de-DE.mod_agosm.ini rename to j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/mod_agosm.ini index 3b0b204c..633c7481 100644 --- a/j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/de-DE.mod_agosm.ini +++ b/j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/mod_agosm.ini @@ -127,6 +127,8 @@ MOD_AGOSM_DISABLECLUSTERATZOOM="Cluster/Gruppierung ab Zoomlevel" MOD_AGOSM_DISABLECLUSTERATZOOM_DESC="0: Kein Cluster, 20: Immer Cluster". MOD_AGOSM_BASELAYER="Kartenstil" MOD_AGOSM_BASELAYER_DESC="Mapnik ist der Standard-Stil von OpenStreetMap." +MOD_AGOSM_ADDLAYERTREE="Ergänze Auswahlmöglichkeit Satellit" +MOD_AGOSM_ADDLAYERTREE_DESC="Ergänze Auswahlmöglichkeit Satellit (Esri_WorldImagery) im Frontend" MOD_AGOSM_CUSTOMBASELAYER="Benutzerdefinierter Kartenstil" MOD_AGOSM_CUSTOMBASELAYER_DESC="Nur wenn 'Custom' als Kartenstil gewählt wurde. Wer liefert den Kartenstil (Kacheln)?" MOD_AGOSM_CUSTOMBASELAYERURL="Tile Server URL" @@ -186,7 +188,7 @@ MOD_AGOSM_ONE_MARKER_FROM_COMPONENT_FIELDSETDESCRIPTION="Dieser Marker ist nicht MOD_AGOSM_H_PINCF="Pins zu Artikel anzeigen" MOD_AGOSM_CONFIG_CONTROL_SHOWCUSTOMFIELDPIN_DESC="Möchten Sie einen Pin zu einem Artikel anzeigen?" MOD_AGOSM_CONFIG_CONTROL_SHOWCUSTOMFIELDPIN_LABEL="Pin zu Artikel anzeigen" -MOD_AGOSM_H_PINCF_FIELDSETDESCRIPTION="Möchten Sie einen Marker auf einer Karte anzeigen, die einen Link zu einem Beitrag enthält? Weitere Informationen: https://github.com/astridx/pkg_agosms#custom-field-of-the-type-text or https://github.com/astridx/pkg_agosms#custom-field-agosmsmarker" +MOD_AGOSM_H_PINCF_FIELDSETDESCRIPTION="Do you want to display a marker on a map that contains a link to an article post? For this you need to add a custom field from this package." ; Upload COM_MODULES_UPLOAD_FIELDSET_LABEL="Upload" diff --git a/j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/de-DE.mod_agosm.sys.ini b/j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/mod_agosm.sys.ini similarity index 100% rename from j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/de-DE.mod_agosm.sys.ini rename to j4/pkg_agosms/src/modules/mod_agosm/language/de-DE/mod_agosm.sys.ini diff --git a/j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/en-GB.mod_agosm.ini b/j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/mod_agosm.ini similarity index 99% rename from j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/en-GB.mod_agosm.ini rename to j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/mod_agosm.ini index fb71ae57..84ab7fda 100644 --- a/j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/en-GB.mod_agosm.ini +++ b/j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/mod_agosm.ini @@ -129,6 +129,8 @@ MOD_AGOSM_DISABLECLUSTERATZOOM="Cluster/Gruppierung ab Zoomlevel" MOD_AGOSM_DISABLECLUSTERATZOOM_DESC="0: Kein Cluster, 20: Immer Cluster". MOD_AGOSM_BASELAYER="Map style" MOD_AGOSM_BASELAYER_DESC="Mapnik is the default style of OpenStreetMap." +MOD_AGOSM_ADDLAYERTREE="Add satellite selection option" +MOD_AGOSM_ADDLAYERTREE_DESC="Add satellite (Esri_WorldImagery) selection option in Frontend" MOD_AGOSM_CUSTOMBASELAYER="Custom map style" MOD_AGOSM_CUSTOMBASELAYER_DESC="Only if choosed 'custom' as map style. Who delivers the map style (tiles)?" MOD_AGOSM_CUSTOMBASELAYERURL="Tile server URL" @@ -188,7 +190,7 @@ MOD_AGOSM_ONE_MARKER_FROM_COMPONENT_FIELDSETDESCRIPTION="This marker is not in a MOD_AGOSM_H_PINCF="Show markers (pins) for articles" MOD_AGOSM_CONFIG_CONTROL_SHOWCUSTOMFIELDPIN_DESC="Do you like to display a pin for an article?" MOD_AGOSM_CONFIG_CONTROL_SHOWCUSTOMFIELDPIN_LABEL="Show Pin (Marker) for article" -MOD_AGOSM_H_PINCF_FIELDSETDESCRIPTION="Do you want to display a marker on a map that contains a link to a post? See https://github.com/astridx/pkg_agosms#custom-field-of-the-type-text or https://github.com/astridx/pkg_agosms#custom-field-agosmsmarker." +MOD_AGOSM_H_PINCF_FIELDSETDESCRIPTION="Do you want to display a marker on a map that contains a link to an article post? For this you need to add a custom field from this package." ; Upload COM_MODULES_UPLOAD_FIELDSET_LABEL="Upload" ; Basic Required Fields diff --git a/j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/en-GB.mod_agosm.sys.ini b/j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/mod_agosm.sys.ini similarity index 100% rename from j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/en-GB.mod_agosm.sys.ini rename to j4/pkg_agosms/src/modules/mod_agosm/language/en-GB/mod_agosm.sys.ini diff --git a/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.php b/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.php index 5a0d9ad0..2c4e0c3c 100644 --- a/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.php +++ b/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.php @@ -113,6 +113,11 @@ $document->addScript(JURI::root(true) . '/media/mod_agosm/mouseposition/L.Control.MousePosition.js'); } +if ($params->get('addlayertree', '0') == 1) { + $document->addScript(JURI::root(true) . '/media/mod_agosm/layerstree/L.Control.Layers.Tree.js'); + $document->addScript(JURI::root(true) . '/media/mod_agosm/layerstree/L.Control.Layers.Tree.css'); +} + $document->addStyleSheet(JURI::root(true) . '/media/mod_agosm/css/agosms.css'); require ModuleHelper::getLayoutPath('mod_agosm', $params->get('layout', 'default')); diff --git a/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.xml b/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.xml index f9231352..0d1d0bf7 100644 --- a/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.xml +++ b/j4/pkg_agosms/src/modules/mod_agosm/mod_agosm.xml @@ -97,6 +97,12 @@ + + + + + + @@ -155,9 +161,9 @@ - + - + @@ -168,39 +174,41 @@ + + - + - + - + - + - + @@ -293,7 +301,7 @@ - + @@ -323,7 +331,7 @@ - + @@ -362,14 +370,14 @@ - + - + diff --git a/j4/pkg_agosms/src/modules/mod_agosm/src/Helper/AgosmsCategoryHelper.php b/j4/pkg_agosms/src/modules/mod_agosm/src/Helper/AgosmsCategoryHelper.php index 6e8b2143..0f573f14 100644 --- a/j4/pkg_agosms/src/modules/mod_agosm/src/Helper/AgosmsCategoryHelper.php +++ b/j4/pkg_agosms/src/modules/mod_agosm/src/Helper/AgosmsCategoryHelper.php @@ -153,18 +153,31 @@ public static function getListCustomField(&$params) if ($popup) { $itemfiltered->popuptext = $test[5]; } + + // Check if special popup text in separat custom field + $specialpopuptext = null; + if ($field->fieldparams->get('showspecialpopuptext')) { + foreach ($fields as $pkey => $pfield) { + if ($pfield->id == $field->fieldparams->get('popuptextfields')->value) { + if (strlen($pfield->value) > 0) { + $itemfiltered->specialpopuptext = $pfield->value; + } + } + } + } } } $itemsfiltered[] = $itemfiltered; } - if ($itemsfiltered) { - return $itemsfiltered; - } } } - return []; + if ($itemsfiltered) { + return $itemsfiltered; + } else { + return []; + } } /** diff --git a/j4/pkg_agosms/src/modules/mod_agosm/tmpl/default.php b/j4/pkg_agosms/src/modules/mod_agosm/tmpl/default.php index 8d4d9aef..a64339ca 100644 --- a/j4/pkg_agosms/src/modules/mod_agosm/tmpl/default.php +++ b/j4/pkg_agosms/src/modules/mod_agosm/tmpl/default.php @@ -22,6 +22,7 @@ data-no-world-warp="get('noWorldWarp', 0); ?>" data-detect-retina="get('detectRetina', 0); ?>" data-baselayer="get('baselayer', 'mapnik'); ?>" + data-layertree="get('addlayertree', '0'); ?>" data-lonlat="get('lonlat', '50.281168, 7.276211'); ?>" data-savestate="get('savestate', false); ?>" data-zoom="get('zoom', '10'); ?>" diff --git a/j4/pkg_agosms/src/modules/mod_agosmsmt/language/de-DE/mod_agosmsmt.ini b/j4/pkg_agosms/src/modules/mod_agosmsmt/language/de-DE/mod_agosmsmt.ini index d64f493d..022c3b3d 100644 --- a/j4/pkg_agosms/src/modules/mod_agosmsmt/language/de-DE/mod_agosmsmt.ini +++ b/j4/pkg_agosms/src/modules/mod_agosmsmt/language/de-DE/mod_agosmsmt.ini @@ -6,9 +6,11 @@ MOD_AGOSM_MOSET_TREE_FIELDSETDESCRIPTION="Besonderheiten im AGOSMSMT Mosets Tree MOD_AGOSM_CONFIG_CONTROL_SHOWRADIUSSEARCH_LABEL="Zoom auf Radius" MOD_AGOSM_CONFIG_CONTROL_SHOWRADIUSSEARCH_DESC="Zoom auf Radius Control integrieren" MOD_AGOSM_FULLSCREENLINK="Weiterleitung zu URL" -MOD_AGOSM_FULLSCREENLINK_DESC="Analog dem Umschalten auf einen vollen Bildschirm leitet dieses Steuerelement auf eine URL weiter, unter eine größer Karte integrierbar ist." +MOD_AGOSM_FULLSCREENLINK_DESC="Analog dem Umschalten auf einen vollen Bildschirm leitet dieses Steuerelement auf eine URL weiter, unter der eine größer Karte integrierbar ist. Es in einer kleineren Version der Karte eingesetzt werden, beispielsweise einer Karte in einer Seitenleiste, um zu einer größeren Karteversion (Alternative zur Vollbildversion) weiterzuleiten." MOD_AGOSM_CONFIG_CONTROL_MOVEFORM_LABEL="Verschieben von Steuerelementen" -MOD_AGOSM_CONFIG_CONTROL_MOVEFORM_DESC="Auswahl Steuerelement und Radius-Zoom unter Karte verschieben." +MOD_AGOSM_CONFIG_CONTROL_MOVEFORM_DESC="Auswahl Steuerelement, Vollbild und Radius-Zoom unter die Karte verschieben." +MOD_AGOSM_FULLSCREENLINKLINK="WeiterleitungsURL" +MOD_AGOSM_FULLSCREENLINKLINK_DESC="Weitereleitung per Klick zu der hier angegeben URL." ;Routing MOD_AGOSM_ROUTING_SIMPLE_TEXT_STUNDEN=" Stunden. " MOD_AGOSM_ROUTING_SIMPLE_TEXT_KILOMETER=" Kilometer. " diff --git a/j4/pkg_agosms/src/modules/mod_agosmsmt/language/en-GB/en-GB.mod_agosmsmt.ini b/j4/pkg_agosms/src/modules/mod_agosmsmt/language/en-GB/en-GB.mod_agosmsmt.ini index 4028d66d..233b289a 100644 --- a/j4/pkg_agosms/src/modules/mod_agosmsmt/language/en-GB/en-GB.mod_agosmsmt.ini +++ b/j4/pkg_agosms/src/modules/mod_agosmsmt/language/en-GB/en-GB.mod_agosmsmt.ini @@ -6,11 +6,11 @@ MOD_AGOSM_MOSET_TREE_FIELDSETDESCRIPTION="Besonderheiten im AGOSMSMT Mosets Tree MOD_AGOSM_CONFIG_CONTROL_SHOWRADIUSSEARCH_LABEL="Zoom auf Radius" MOD_AGOSM_CONFIG_CONTROL_SHOWRADIUSSEARCH_DESC="Zoom auf Radius Control integrieren" MOD_AGOSM_FULLSCREENLINK="Weiterleitung zu URL" -MOD_AGOSM_FULLSCREENLINK_DESC="Analog dem Umschalten auf einen vollen Bildschirm leitet dieses Steuerelement auf eine URL weiter, unter eine größer Karte integrierbar ist." +MOD_AGOSM_FULLSCREENLINK_DESC="Analog dem Umschalten auf einen vollen Bildschirm leitet dieses Steuerelement auf eine URL weiter, unter der eine größer Karte integrierbar ist. Es in einer kleineren Version der Karte eingesetzt werden, beispielsweise einer Karte in einer Seitenleiste, um zu einer größeren Karteversion (Alternative zur Vollbildversion) weiterzuleiten." MOD_AGOSM_CONFIG_CONTROL_MOVEFORM_LABEL="Verschieben von Steuerelementen" -MOD_AGOSM_CONFIG_CONTROL_MOVEFORM_DESC="Auswahl Steuerelement und Radius-Zoom unter Karte verschieben" -MOD_AGOSM_CONFIG_OWNMARKERIMAGE_LABEL="Eigenes Marker Image" -MOD_AGOSM_CONFIG_OWNMARKERIMAGE_DESC="Wenn pro Kategorie ein eigenes Marker Image angezeigt werden soll, ist es neben dem Aktivieren dieser Option erforderlich ein Bild mit dem Markernamen und der Endung .png im Verzeichnis images/marker abzulegen. Beispiel: JOOMLA/images/marker/Test.png für die Kategorie Test. " +MOD_AGOSM_CONFIG_CONTROL_MOVEFORM_DESC="Auswahl Steuerelement, Vollbild und Radius-Zoom unter die Karte verschieben." +MOD_AGOSM_FULLSCREENLINKLINK="WeiterleitungsURL" +MOD_AGOSM_FULLSCREENLINKLINK_DESC="Weitereleitung per Klick zu der hier angegeben URL." ;Routing MOD_AGOSM_ROUTING_SIMPLE_TEXT_STUNDEN=" hours. " MOD_AGOSM_ROUTING_SIMPLE_TEXT_KILOMETER=" kilometers. " diff --git a/j4/pkg_agosms/src/modules/mod_agosmsmt/mod_agosmsmt.php b/j4/pkg_agosms/src/modules/mod_agosmsmt/mod_agosmsmt.php index fe107d4c..2068e8fb 100644 --- a/j4/pkg_agosms/src/modules/mod_agosmsmt/mod_agosmsmt.php +++ b/j4/pkg_agosms/src/modules/mod_agosmsmt/mod_agosmsmt.php @@ -80,9 +80,9 @@ ], 'properties' => [ - 'link_name' => json_encode($link->link_name), - 'link_desc' => json_encode($link->link_desc), - 'route' => '\'' . Route::_('index.php?option=com_mtree&task=viewlink&link_id='.$link->link_id.'&Itemid='.$Itemid) . '\'', + 'link_name' => $link->link_name, + 'link_desc' => $link->link_desc, + 'route' => Route::_('index.php?option=com_mtree&task=viewlink&link_id='.$link->link_id.'&Itemid='.$Itemid), 'cat_name' => json_encode($link->cat_name), 'cat_id' => json_encode($link->cat_id) ] diff --git a/j4/pkg_agosms/src/modules/mod_agosmsmt/tmpl/default.php b/j4/pkg_agosms/src/modules/mod_agosmsmt/tmpl/default.php index d1eba264..8d35185b 100644 --- a/j4/pkg_agosms/src/modules/mod_agosmsmt/tmpl/default.php +++ b/j4/pkg_agosms/src/modules/mod_agosmsmt/tmpl/default.php @@ -19,44 +19,35 @@ z-index:1; width:auto; height:get('height', '400'); ?>get('heightunit', 'px'); ?>;" - data-module-id="id; ?>" data-addprivacybox="get('addprivacybox', '0') ?>" data-unique='' data-no-world-warp="get('noWorldWarp', 0); ?>" data-detect-retina="get('detectRetina', 0); ?>" data-baselayer="get('baselayer', 'mapnik'); ?>" data-lonlat="get('lonlat', '50.281168, 7.276211'); ?>" data-zoom="get('zoom', '10'); ?>" data-locate="get('showlocate', false); ?>" - data-show-radiusZoom="get('show_radiusZoom', false); ?>" data-showfullscreenlink="get('showfullscreenlink', false); ?>" data-fullscreenlink="get('fullscreenlink', '#'); ?>" data-move-form="get('move_form', false); ?>" - data-use-own-marker-image="get('use_own_marker_image', false); ?>" - data-fullscreen="get('showfullscreen', false); ?>" data-mouseposition="get('showmouseposition', false); ?>" get('baselayer', 'mapbox')) : ?> data-mapboxmaptype="get('mapboxmaptype', 'mapbox/streets-v11'); ?>" data-mapboxkey="get('mapboxkey', ''); ?>" - get('baselayer', 'thunderforest')) : ?> + endif; ?> get('baselayer', 'thunderforest')) : ?> data-thunderforestkey="get('thunderforestkey', ''); ?>" data-thunderforestmaptype="get('thunderforestmaptype', 'cycle'); ?>" - get('baselayer', 'stamen')) : ?> + endif; ?> get('baselayer', 'stamen')) : ?> data-stamenmaptype="get('stamenmaptype', 'watercolor'); ?>" - get('baselayer', 'google')) : ?> + endif; ?> get('baselayer', 'google')) : ?> data-googlemapstype="get('googlemapstype', 'satellite'); ?>" - get('baselayer', 'custom')) : ?> + endif; ?> get('baselayer', 'custom')) : ?> data-customBaselayer="get('customBaselayer', 'maxZoom: 18,'); ?>" data-customBaselayerURL="get('customBaselayerURL', 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'); ?>" get('scale') !== null) : ?> data-scale="get('scale')); ?>" - data-scale-metric="get('scale', $defaultArray)); ?>" + endif; ?> data-scale-metric="get('scale', $defaultArray)); ?>" data-scale-imperial="get('scale', $defaultArray)); ?>" data-showrouting-simple="get('showrouting_simple', '1'); ?>" data-mtmarkers="" @@ -88,17 +79,21 @@ font-size: 0.85rem; justify-content: space-evenly; } + .leaflet-control-layers-expanded { - width:100%; -} -.leaflet-control-routingtoaddress{ + width: 100%; } - +.leaflet-control-routingtoaddress {} + -
-
-
+
+
+
+
+ + +
addScript(JURI::root(true) . '/media/plg_fields_agosmsaddressmarker/leaflet/leaflet.js'); -JHtml::_('script', 'plg_fields_agosmsaddressmarker/admin-agosmsaddressmarker.js', ['version' => 'auto', 'relative' => true]); +$wa = Factory::getApplication()->getDocument()->getWebAssetManager(); + +$wa->registerAndUseScript('agosmsaddressmarker', 'plg_fields_agosmsaddressmarker/admin-agosmsaddressmarker.js', [], [], []); +// We need leaflet for calculation the address +$document = Factory::getApplication()->getDocument(); +$document->addScript(URI::root(true) . '/media/plg_fields_agosmsaddressmarker/leaflet/leaflet.js'); if ($specialicon) { - $document->addStyleSheet(JURI::root(true) . '/media/plg_fields_agosmsaddressmarker/css/font-awesome.min.css'); + $wa->registerAndUseStyle('fontawesome', 'plg_fields_agosmsaddressmarker/font-awesome.min.css', [], [], []); } -JHtml::_('stylesheet', 'plg_fields_agosmsaddressmarker/agosmsaddressmarker.css', ['version' => 'auto', 'relative' => true]); +$wa->registerAndUseStyle('agosmsaddressmarker', 'plg_fields_agosmsaddressmarker/agosmsaddressmarker.css', [], [], []); JText::script('PLG_AGOSMSADDRESSMARKER_ADDRESSE_ERROR'); JText::script('PLG_AGOSMSADDRESSMARKER_ADDRESSE_NOTICE'); @@ -72,7 +75,6 @@ // Com_contact else if ($app->input->getCmd('option') === 'com_contact') { - //JFactory::getApplication()->enqueueMessage(JText::_('PLG_AGOSMSADDRESSMARKER_SUPPORTET'), 'message'); $context = 'com_contact.contact'; } @@ -204,23 +206,22 @@ class="agosmsaddressmarkericon"> - - - - - - - - - - + + + + + + + + + - - + + @@ -558,7 +559,7 @@ class="agosmsaddressmarkericon"> - + @@ -597,14 +598,14 @@ class="agosmsaddressmarkericon"> - + - + @@ -712,13 +713,13 @@ class="agosmsaddressmarkericon"> - - + + - - - + + + @@ -752,19 +753,19 @@ class="agosmsaddressmarkericon"> - - + + - + - + @@ -781,16 +782,16 @@ class="agosmsaddressmarkericon"> - + - + - - - + + + @@ -840,9 +841,9 @@ class="agosmsaddressmarkericon"> - + - + @@ -850,8 +851,8 @@ class="agosmsaddressmarkericon"> - - + + @@ -911,12 +912,12 @@ class="agosmsaddressmarkericon"> - + - + @@ -925,8 +926,8 @@ class="agosmsaddressmarkericon"> - - + + @@ -962,11 +963,11 @@ class="agosmsaddressmarkericon"> - - + + - + @@ -985,14 +986,14 @@ class="agosmsaddressmarkericon"> - - - - - - - - + + + + + + + +
diff --git a/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/models/forms/popup_data.xml b/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/models/forms/popup_data.xml new file mode 100644 index 00000000..33eb3d31 --- /dev/null +++ b/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/models/forms/popup_data.xml @@ -0,0 +1,14 @@ + +
+
+ + +
+
diff --git a/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/params/agosmsaddressmarker.xml b/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/params/agosmsaddressmarker.xml index 3a58a6d9..20dfbd8a 100644 --- a/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/params/agosmsaddressmarker.xml +++ b/j4/pkg_agosms/src/plugins/fields/agosmsaddressmarker/params/agosmsaddressmarker.xml @@ -12,12 +12,36 @@ multiple="true" formsource="plugins/fields/agosmsaddressmarker/models/forms/address_data.xml" /> - + + + + + + + + + + + - + vh (Viewport Height) - + - + - + JYES (open) - + JYES - + - + JYES - +