@trailstash/ultra 3.0.0-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitlab-ci.yml +15 -0
- package/Examples/alt-bbox-format.ultra +9 -0
- package/Examples/atp-usps-dropboxes.ultra +68 -0
- package/Examples/bike-infra.ultra +111 -0
- package/Examples/contribution-heatmap.ultra +17 -0
- package/Examples/custom-style.ultra +114 -0
- package/Examples/glow-effect.ultra +27 -0
- package/Examples/index.md +7 -0
- package/Examples/landmarks-prototype.ultra +68 -0
- package/Examples/minimalist-ski-map.ultra +55 -0
- package/Examples/opentrailstash-3d.ultra +40 -0
- package/Examples/overture-landcover-plus-hillshade.ultra +45 -0
- package/Examples/overture-places-and-osm.ultra +29 -0
- package/Examples/trees.ultra +60 -0
- package/Examples/wikidata-photo.ultra +28 -0
- package/Examples/within-bounds.ultra +12 -0
- package/LICENSE +23 -0
- package/MapLibre-Examples/3d-buildings.ultra +43 -0
- package/MapLibre-Examples/3d-extrusion-floorplan.ultra +28 -0
- package/MapLibre-Examples/3d-terrain.ultra +39 -0
- package/MapLibre-Examples/add-image.ultra +26 -0
- package/MapLibre-Examples/attribution-position.ultra +12 -0
- package/MapLibre-Examples/change-case-of-labels.ultra +26 -0
- package/MapLibre-Examples/cluster.ultra +59 -0
- package/MapLibre-Examples/cooperative-gestures.ultra +11 -0
- package/MapLibre-Examples/custom-marker-icons.ultra +65 -0
- package/MapLibre-Examples/data-driven-lines.ultra +169 -0
- package/MapLibre-Examples/disable-rotation.ultra +11 -0
- package/MapLibre-Examples/disable-scroll-zoom.ultra +9 -0
- package/MapLibre-Examples/display-and-style-rich-text-labels.ultra +22 -0
- package/MapLibre-Examples/fill-pattern.ultra +43 -0
- package/MapLibre-Examples/fullscreen.ultra +10 -0
- package/MapLibre-Examples/geojson-layer-in-stack.ultra +23 -0
- package/MapLibre-Examples/geojson-line.ultra +114 -0
- package/MapLibre-Examples/geojson-markers.ultra +217 -0
- package/MapLibre-Examples/geojson-polygon.ultra +104 -0
- package/MapLibre-Examples/heatmap-layer.ultra +111 -0
- package/MapLibre-Examples/index.md +4 -0
- package/MapLibre-Examples/locate-user.ultra +14 -0
- package/MapLibre-Examples/map-tiles.ultra +9 -0
- package/MapLibre-Examples/pmtiles.ultra +25 -0
- package/MapLibre-Examples/wms.ultra +14 -0
- package/README.md +46 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +6 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +5 -0
- package/build-examples-docs.js +104 -0
- package/build-examples-images.js +87 -0
- package/build-sprites.sh +30 -0
- package/cli/build.js +53 -0
- package/cli/serve.js +34 -0
- package/components/button-modal.js +111 -0
- package/components/button.css +22 -0
- package/components/button.js +6 -0
- package/components/code-editor.js +87 -0
- package/components/download-button.js +69 -0
- package/components/fontawesome-icon.js +80 -0
- package/components/fs-button.js +52 -0
- package/components/help-modal.js +98 -0
- package/components/map-popup.js +57 -0
- package/components/nav-bar.js +76 -0
- package/components/run-button.js +78 -0
- package/components/share-button.js +35 -0
- package/components/share-modal.js +139 -0
- package/components/style-picker.js +47 -0
- package/components/ultra-ide.js +298 -0
- package/components/ultra-loader.js +60 -0
- package/components/ultra-map.js +312 -0
- package/configs/minimal.js +9 -0
- package/configs/overpass-ultra.js +185 -0
- package/docs/assets/Examples/alt-bbox-format.png +0 -0
- package/docs/assets/Examples/atp-usps-dropboxes.png +0 -0
- package/docs/assets/Examples/bike-infra.png +0 -0
- package/docs/assets/Examples/contribution-heatmap.png +0 -0
- package/docs/assets/Examples/custom-style.png +0 -0
- package/docs/assets/Examples/glow-effect.png +0 -0
- package/docs/assets/Examples/landmarks-prototype.png +0 -0
- package/docs/assets/Examples/minimalist-ski-map.png +0 -0
- package/docs/assets/Examples/opentrailstash-3d.png +0 -0
- package/docs/assets/Examples/overture-landcover-plus-hillshade.png +0 -0
- package/docs/assets/Examples/overture-places-and-osm.png +0 -0
- package/docs/assets/Examples/trees.png +0 -0
- package/docs/assets/Examples/wikidata-photo.png +0 -0
- package/docs/assets/Examples/within-bounds.png +0 -0
- package/docs/assets/MapLibre-Examples/3d-buildings.png +0 -0
- package/docs/assets/MapLibre-Examples/3d-extrusion-floorplan.png +0 -0
- package/docs/assets/MapLibre-Examples/3d-terrain.png +0 -0
- package/docs/assets/MapLibre-Examples/add-image.png +0 -0
- package/docs/assets/MapLibre-Examples/attribution-position.png +0 -0
- package/docs/assets/MapLibre-Examples/change-case-of-labels.png +0 -0
- package/docs/assets/MapLibre-Examples/cluster.png +0 -0
- package/docs/assets/MapLibre-Examples/cooperative-gestures.png +0 -0
- package/docs/assets/MapLibre-Examples/custom-marker-icons.png +0 -0
- package/docs/assets/MapLibre-Examples/data-driven-lines.png +0 -0
- package/docs/assets/MapLibre-Examples/disable-rotation.png +0 -0
- package/docs/assets/MapLibre-Examples/disable-scroll-zoom.png +0 -0
- package/docs/assets/MapLibre-Examples/display-and-style-rich-text-labels.png +0 -0
- package/docs/assets/MapLibre-Examples/fill-pattern.png +0 -0
- package/docs/assets/MapLibre-Examples/fullscreen.png +0 -0
- package/docs/assets/MapLibre-Examples/geojson-layer-in-stack.png +0 -0
- package/docs/assets/MapLibre-Examples/geojson-line.png +0 -0
- package/docs/assets/MapLibre-Examples/geojson-markers.png +0 -0
- package/docs/assets/MapLibre-Examples/geojson-polygon.png +0 -0
- package/docs/assets/MapLibre-Examples/heatmap-layer.png +0 -0
- package/docs/assets/MapLibre-Examples/locate-user.png +0 -0
- package/docs/assets/MapLibre-Examples/map-tiles.png +0 -0
- package/docs/assets/MapLibre-Examples/pmtiles.png +0 -0
- package/docs/assets/MapLibre-Examples/wms.png +0 -0
- package/docs/assets/data/Examples/atp_usps_collection_boxes.geojson +1 -0
- package/docs/further-reading.md +15 -0
- package/docs/index.md +55 -0
- package/docs/overrides/partials/integrations/analytics/custom.html +11 -0
- package/docs/query-shortcuts.md +21 -0
- package/docs/style.md +120 -0
- package/docs/url-parameters.md +45 -0
- package/docs/yaml.md +117 -0
- package/index.js +53 -0
- package/lib/base.css +12 -0
- package/lib/bounds.js +8 -0
- package/lib/dom.js +21 -0
- package/lib/glyphFallback.js +31 -0
- package/lib/localStorage.js +34 -0
- package/lib/normalize.js +5 -0
- package/lib/queryMap.js +50 -0
- package/lib/queryParams.js +142 -0
- package/lib/queryProviders/auto.js +47 -0
- package/lib/queryProviders/geojson.js +134 -0
- package/lib/queryProviders/gpx.js +101 -0
- package/lib/queryProviders/index.js +22 -0
- package/lib/queryProviders/kml.js +132 -0
- package/lib/queryProviders/osm.js +199 -0
- package/lib/queryProviders/overpass.js +162 -0
- package/lib/queryProviders/raster.js +23 -0
- package/lib/queryProviders/tcx.js +105 -0
- package/lib/queryProviders/vector.js +13 -0
- package/lib/settings.js +72 -0
- package/lib/sprites.js +18 -0
- package/lib/style.js +222 -0
- package/mkdocs.yml +26 -0
- package/package.json +80 -0
- package/screenshot.png +0 -0
- package/static/embed.js +18 -0
- package/static/font/0-255.pbf +0 -0
- package/static/font/1024-1279.pbf +0 -0
- package/static/font/10240-10495.pbf +3 -0
- package/static/font/10496-10751.pbf +0 -0
- package/static/font/10752-11007.pbf +3 -0
- package/static/font/11008-11263.pbf +0 -0
- package/static/font/11264-11519.pbf +0 -0
- package/static/font/11520-11775.pbf +0 -0
- package/static/font/11776-12031.pbf +0 -0
- package/static/font/12032-12287.pbf +0 -0
- package/static/font/12288-12543.pbf +0 -0
- package/static/font/12544-12799.pbf +0 -0
- package/static/font/1280-1535.pbf +0 -0
- package/static/font/12800-13055.pbf +0 -0
- package/static/font/13056-13311.pbf +0 -0
- package/static/font/13312-13567.pbf +0 -0
- package/static/font/13568-13823.pbf +0 -0
- package/static/font/13824-14079.pbf +0 -0
- package/static/font/14080-14335.pbf +0 -0
- package/static/font/14336-14591.pbf +0 -0
- package/static/font/14592-14847.pbf +0 -0
- package/static/font/14848-15103.pbf +0 -0
- package/static/font/15104-15359.pbf +0 -0
- package/static/font/1536-1791.pbf +0 -0
- package/static/font/15360-15615.pbf +0 -0
- package/static/font/15616-15871.pbf +0 -0
- package/static/font/15872-16127.pbf +0 -0
- package/static/font/16128-16383.pbf +0 -0
- package/static/font/16384-16639.pbf +0 -0
- package/static/font/16640-16895.pbf +0 -0
- package/static/font/16896-17151.pbf +0 -0
- package/static/font/17152-17407.pbf +0 -0
- package/static/font/17408-17663.pbf +0 -0
- package/static/font/17664-17919.pbf +0 -0
- package/static/font/1792-2047.pbf +0 -0
- package/static/font/17920-18175.pbf +0 -0
- package/static/font/18176-18431.pbf +0 -0
- package/static/font/18432-18687.pbf +0 -0
- package/static/font/18688-18943.pbf +0 -0
- package/static/font/18944-19199.pbf +0 -0
- package/static/font/19200-19455.pbf +0 -0
- package/static/font/19456-19711.pbf +0 -0
- package/static/font/19712-19967.pbf +0 -0
- package/static/font/19968-20223.pbf +0 -0
- package/static/font/20224-20479.pbf +0 -0
- package/static/font/2048-2303.pbf +0 -0
- package/static/font/20480-20735.pbf +0 -0
- package/static/font/20736-20991.pbf +0 -0
- package/static/font/20992-21247.pbf +0 -0
- package/static/font/21248-21503.pbf +0 -0
- package/static/font/21504-21759.pbf +0 -0
- package/static/font/21760-22015.pbf +0 -0
- package/static/font/22016-22271.pbf +0 -0
- package/static/font/22272-22527.pbf +192 -26
- package/static/font/22528-22783.pbf +0 -0
- package/static/font/22784-23039.pbf +0 -0
- package/static/font/2304-2559.pbf +0 -0
- package/static/font/23040-23295.pbf +0 -0
- package/static/font/23296-23551.pbf +0 -0
- package/static/font/23552-23807.pbf +0 -0
- package/static/font/23808-24063.pbf +0 -0
- package/static/font/24064-24319.pbf +0 -0
- package/static/font/24320-24575.pbf +0 -0
- package/static/font/24576-24831.pbf +0 -0
- package/static/font/24832-25087.pbf +0 -0
- package/static/font/25088-25343.pbf +0 -0
- package/static/font/25344-25599.pbf +0 -0
- package/static/font/256-511.pbf +0 -0
- package/static/font/2560-2815.pbf +0 -0
- package/static/font/25600-25855.pbf +0 -0
- package/static/font/25856-26111.pbf +0 -0
- package/static/font/26112-26367.pbf +0 -0
- package/static/font/26368-26623.pbf +0 -0
- package/static/font/26624-26879.pbf +0 -0
- package/static/font/26880-27135.pbf +0 -0
- package/static/font/27136-27391.pbf +0 -0
- package/static/font/27392-27647.pbf +0 -0
- package/static/font/27648-27903.pbf +0 -0
- package/static/font/27904-28159.pbf +0 -0
- package/static/font/2816-3071.pbf +0 -0
- package/static/font/28160-28415.pbf +0 -0
- package/static/font/28416-28671.pbf +0 -0
- package/static/font/28672-28927.pbf +0 -0
- package/static/font/28928-29183.pbf +0 -0
- package/static/font/29184-29439.pbf +0 -0
- package/static/font/29440-29695.pbf +0 -0
- package/static/font/29696-29951.pbf +0 -0
- package/static/font/29952-30207.pbf +0 -0
- package/static/font/30208-30463.pbf +0 -0
- package/static/font/30464-30719.pbf +0 -0
- package/static/font/3072-3327.pbf +0 -0
- package/static/font/30720-30975.pbf +0 -0
- package/static/font/30976-31231.pbf +0 -0
- package/static/font/31232-31487.pbf +0 -0
- package/static/font/31488-31743.pbf +0 -0
- package/static/font/31744-31999.pbf +0 -0
- package/static/font/32000-32255.pbf +0 -0
- package/static/font/32256-32511.pbf +0 -0
- package/static/font/32512-32767.pbf +0 -0
- package/static/font/32768-33023.pbf +0 -0
- package/static/font/33024-33279.pbf +0 -0
- package/static/font/3328-3583.pbf +0 -0
- package/static/font/33280-33535.pbf +0 -0
- package/static/font/33536-33791.pbf +0 -0
- package/static/font/33792-34047.pbf +0 -0
- package/static/font/34048-34303.pbf +0 -0
- package/static/font/34304-34559.pbf +0 -0
- package/static/font/34560-34815.pbf +0 -0
- package/static/font/34816-35071.pbf +0 -0
- package/static/font/35072-35327.pbf +0 -0
- package/static/font/35328-35583.pbf +0 -0
- package/static/font/35584-35839.pbf +0 -0
- package/static/font/3584-3839.pbf +0 -0
- package/static/font/35840-36095.pbf +0 -0
- package/static/font/36096-36351.pbf +0 -0
- package/static/font/36352-36607.pbf +0 -0
- package/static/font/36608-36863.pbf +0 -0
- package/static/font/36864-37119.pbf +0 -0
- package/static/font/37120-37375.pbf +0 -0
- package/static/font/37376-37631.pbf +0 -0
- package/static/font/37632-37887.pbf +0 -0
- package/static/font/37888-38143.pbf +0 -0
- package/static/font/38144-38399.pbf +0 -0
- package/static/font/3840-4095.pbf +0 -0
- package/static/font/38400-38655.pbf +45 -4
- package/static/font/38656-38911.pbf +0 -0
- package/static/font/38912-39167.pbf +0 -0
- package/static/font/39168-39423.pbf +0 -0
- package/static/font/39424-39679.pbf +0 -0
- package/static/font/39680-39935.pbf +0 -0
- package/static/font/39936-40191.pbf +0 -0
- package/static/font/40192-40447.pbf +0 -0
- package/static/font/40448-40703.pbf +0 -0
- package/static/font/40704-40959.pbf +0 -0
- package/static/font/4096-4351.pbf +0 -0
- package/static/font/40960-41215.pbf +3 -0
- package/static/font/41216-41471.pbf +3 -0
- package/static/font/41472-41727.pbf +3 -0
- package/static/font/41728-41983.pbf +3 -0
- package/static/font/41984-42239.pbf +3 -0
- package/static/font/42240-42495.pbf +3 -0
- package/static/font/42496-42751.pbf +3 -0
- package/static/font/42752-43007.pbf +0 -0
- package/static/font/43008-43263.pbf +0 -0
- package/static/font/43264-43519.pbf +0 -0
- package/static/font/4352-4607.pbf +0 -0
- package/static/font/43520-43775.pbf +0 -0
- package/static/font/43776-44031.pbf +0 -0
- package/static/font/44032-44287.pbf +0 -0
- package/static/font/44288-44543.pbf +0 -0
- package/static/font/44544-44799.pbf +0 -0
- package/static/font/44800-45055.pbf +0 -0
- package/static/font/45056-45311.pbf +0 -0
- package/static/font/45312-45567.pbf +0 -0
- package/static/font/45568-45823.pbf +0 -0
- package/static/font/45824-46079.pbf +0 -0
- package/static/font/4608-4863.pbf +0 -0
- package/static/font/46080-46335.pbf +0 -0
- package/static/font/46336-46591.pbf +0 -0
- package/static/font/46592-46847.pbf +0 -0
- package/static/font/46848-47103.pbf +0 -0
- package/static/font/47104-47359.pbf +0 -0
- package/static/font/47360-47615.pbf +0 -0
- package/static/font/47616-47871.pbf +0 -0
- package/static/font/47872-48127.pbf +0 -0
- package/static/font/48128-48383.pbf +0 -0
- package/static/font/48384-48639.pbf +0 -0
- package/static/font/4864-5119.pbf +0 -0
- package/static/font/48640-48895.pbf +0 -0
- package/static/font/48896-49151.pbf +0 -0
- package/static/font/49152-49407.pbf +0 -0
- package/static/font/49408-49663.pbf +0 -0
- package/static/font/49664-49919.pbf +0 -0
- package/static/font/49920-50175.pbf +0 -0
- package/static/font/50176-50431.pbf +0 -0
- package/static/font/50432-50687.pbf +0 -0
- package/static/font/50688-50943.pbf +0 -0
- package/static/font/50944-51199.pbf +0 -0
- package/static/font/512-767.pbf +0 -0
- package/static/font/5120-5375.pbf +3 -0
- package/static/font/51200-51455.pbf +0 -0
- package/static/font/51456-51711.pbf +0 -0
- package/static/font/51712-51967.pbf +0 -0
- package/static/font/51968-52223.pbf +0 -0
- package/static/font/52224-52479.pbf +0 -0
- package/static/font/52480-52735.pbf +0 -0
- package/static/font/52736-52991.pbf +0 -0
- package/static/font/52992-53247.pbf +0 -0
- package/static/font/53248-53503.pbf +0 -0
- package/static/font/53504-53759.pbf +0 -0
- package/static/font/5376-5631.pbf +3 -0
- package/static/font/53760-54015.pbf +0 -0
- package/static/font/54016-54271.pbf +0 -0
- package/static/font/54272-54527.pbf +0 -0
- package/static/font/54528-54783.pbf +0 -0
- package/static/font/54784-55039.pbf +0 -0
- package/static/font/55040-55295.pbf +0 -0
- package/static/font/55296-55551.pbf +3 -0
- package/static/font/55552-55807.pbf +3 -0
- package/static/font/55808-56063.pbf +3 -0
- package/static/font/56064-56319.pbf +3 -0
- package/static/font/5632-5887.pbf +3 -0
- package/static/font/56320-56575.pbf +3 -0
- package/static/font/56576-56831.pbf +3 -0
- package/static/font/56832-57087.pbf +3 -0
- package/static/font/57088-57343.pbf +3 -0
- package/static/font/57344-57599.pbf +3 -0
- package/static/font/57600-57855.pbf +3 -0
- package/static/font/57856-58111.pbf +3 -0
- package/static/font/58112-58367.pbf +3 -0
- package/static/font/58368-58623.pbf +3 -0
- package/static/font/58624-58879.pbf +3 -0
- package/static/font/5888-6143.pbf +0 -0
- package/static/font/58880-59135.pbf +3 -0
- package/static/font/59136-59391.pbf +3 -0
- package/static/font/59392-59647.pbf +3 -0
- package/static/font/59648-59903.pbf +3 -0
- package/static/font/59904-60159.pbf +3 -0
- package/static/font/60160-60415.pbf +3 -0
- package/static/font/60416-60671.pbf +3 -0
- package/static/font/60672-60927.pbf +3 -0
- package/static/font/60928-61183.pbf +3 -0
- package/static/font/61184-61439.pbf +3 -0
- package/static/font/6144-6399.pbf +0 -0
- package/static/font/61440-61695.pbf +3 -0
- package/static/font/61696-61951.pbf +3 -0
- package/static/font/61952-62207.pbf +3 -0
- package/static/font/62208-62463.pbf +3 -0
- package/static/font/62464-62719.pbf +3 -0
- package/static/font/62720-62975.pbf +3 -0
- package/static/font/62976-63231.pbf +3 -0
- package/static/font/63232-63487.pbf +3 -0
- package/static/font/63488-63743.pbf +3 -0
- package/static/font/63744-63999.pbf +0 -0
- package/static/font/6400-6655.pbf +0 -0
- package/static/font/64000-64255.pbf +0 -0
- package/static/font/64256-64511.pbf +0 -0
- package/static/font/64512-64767.pbf +0 -0
- package/static/font/64768-65023.pbf +0 -0
- package/static/font/65024-65279.pbf +0 -0
- package/static/font/65280-65535.pbf +0 -0
- package/static/font/6656-6911.pbf +3 -0
- package/static/font/6912-7167.pbf +0 -0
- package/static/font/7168-7423.pbf +0 -0
- package/static/font/7424-7679.pbf +0 -0
- package/static/font/768-1023.pbf +0 -0
- package/static/font/7680-7935.pbf +0 -0
- package/static/font/7936-8191.pbf +0 -0
- package/static/font/8192-8447.pbf +0 -0
- package/static/font/8448-8703.pbf +0 -0
- package/static/font/8704-8959.pbf +0 -0
- package/static/font/8960-9215.pbf +0 -0
- package/static/font/9216-9471.pbf +0 -0
- package/static/font/9472-9727.pbf +0 -0
- package/static/font/9728-9983.pbf +0 -0
- package/static/font/9984-10239.pbf +0 -0
- package/static/index.html +59 -0
- package/static/logo.png +0 -0
- package/static/logo.svg +78 -0
- package/static/mapbox-gl-rtl-text@0.2.3.js +9851 -0
- package/static/minimal.js +9 -0
- package/static/minimal.json +7 -0
- package/static/sprites/maki.json +1706 -0
- package/static/sprites/maki.license +116 -0
- package/static/sprites/maki.png +0 -0
- package/static/sprites/maki@2x.json +1706 -0
- package/static/sprites/maki@2x.png +0 -0
- package/static/sprites/temaki.json +4306 -0
- package/static/sprites/temaki.license +118 -0
- package/static/sprites/temaki.png +0 -0
- package/static/sprites/temaki@2x.json +4306 -0
- package/static/sprites/temaki@2x.png +0 -0
package/lib/style.js
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { validateStyleMin, v8 } from "@maplibre/maplibre-gl-style-spec";
|
|
2
|
+
import FallbackGlyphProtocol from "./glyphFallback.js";
|
|
3
|
+
|
|
4
|
+
const paintKeys = new Set(
|
|
5
|
+
Object.entries(v8)
|
|
6
|
+
.filter(([k]) => k.startsWith("paint_"))
|
|
7
|
+
.map(([, v]) => Object.keys(v))
|
|
8
|
+
.reduce((a, c) => [...a, ...c], []),
|
|
9
|
+
);
|
|
10
|
+
const layoutKeys = new Set(
|
|
11
|
+
Object.entries(v8)
|
|
12
|
+
.filter(([k]) => k.startsWith("layout_"))
|
|
13
|
+
.map(([, v]) => Object.keys(v))
|
|
14
|
+
.reduce((a, c) => [...a, ...c], []),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export function setBaseStyle(style, baseStyle, overwrite = false) {
|
|
18
|
+
if (!baseStyle) {
|
|
19
|
+
return style;
|
|
20
|
+
}
|
|
21
|
+
if (typeof style === "string") {
|
|
22
|
+
return overwrite ? baseStyle : style;
|
|
23
|
+
} else if (overwrite) {
|
|
24
|
+
return {
|
|
25
|
+
...style,
|
|
26
|
+
extends: baseStyle,
|
|
27
|
+
};
|
|
28
|
+
} else {
|
|
29
|
+
return {
|
|
30
|
+
extends: baseStyle,
|
|
31
|
+
...style,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function getStyle(style, source) {
|
|
37
|
+
if (typeof style === "string") {
|
|
38
|
+
// Style is just a string, fetch it, parse it, and add ultra source & layers if defined
|
|
39
|
+
const resp = await fetch(style);
|
|
40
|
+
const styleJSON = await resp.json();
|
|
41
|
+
return ensureSourceAndLayers(styleJSON, source);
|
|
42
|
+
} else if (style && !style.version) {
|
|
43
|
+
// extended style! Merge layers & sources
|
|
44
|
+
let parentStyle;
|
|
45
|
+
if (typeof style.extends === "string") {
|
|
46
|
+
const resp = await fetch(style.extends);
|
|
47
|
+
parentStyle = await resp.json();
|
|
48
|
+
} else {
|
|
49
|
+
parentStyle = style.extends;
|
|
50
|
+
}
|
|
51
|
+
const layers = [...parentStyle.layers];
|
|
52
|
+
for (const i in style.layers) {
|
|
53
|
+
const { beforeLayerId, ...layer } = style.layers[i];
|
|
54
|
+
// If the layer defines the ID, see if it belongs to an existing layer
|
|
55
|
+
const curLayerIdx = layers.findIndex(({ id }) => id === layer.id);
|
|
56
|
+
let layerIdx = -1;
|
|
57
|
+
let newLayer = movePaintAndLayoutKeys(ensureLayerProps({ ...layer }, i));
|
|
58
|
+
// If the layer exists, merge with defined layer, remove from layers, and default to
|
|
59
|
+
// reinserting it at the same index
|
|
60
|
+
if (curLayerIdx >= 0) {
|
|
61
|
+
newLayer = {
|
|
62
|
+
...layers[curLayerIdx],
|
|
63
|
+
...movePaintAndLayoutKeys({ ...layer }),
|
|
64
|
+
};
|
|
65
|
+
layerIdx = curLayerIdx;
|
|
66
|
+
layers.splice(curLayerIdx, 1);
|
|
67
|
+
}
|
|
68
|
+
// find insertion point if beforeLayerId is specified.
|
|
69
|
+
// If insertion point is not found, layer is appended instead.
|
|
70
|
+
// an intetional side-effect of this is that you can specify an non-existing layer to move an
|
|
71
|
+
// existing layer from a style to the top
|
|
72
|
+
if (beforeLayerId) {
|
|
73
|
+
layerIdx = layers.findIndex(({ id }) => id === beforeLayerId);
|
|
74
|
+
}
|
|
75
|
+
if (newLayer.source === "ultra" && !source) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (layerIdx >= 0) {
|
|
79
|
+
layers.splice(layerIdx, 0, newLayer);
|
|
80
|
+
} else {
|
|
81
|
+
layers.push(newLayer);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!parentStyle.sprite) {
|
|
85
|
+
parentStyle.sprite = [];
|
|
86
|
+
} else if (typeof parentStyle.sprite === "string") {
|
|
87
|
+
parentStyle.sprite = [{ id: "default", url: parentStyle.sprite }];
|
|
88
|
+
}
|
|
89
|
+
if (!style.sprite) {
|
|
90
|
+
style.sprite = [];
|
|
91
|
+
} else if (typeof style.sprite === "string") {
|
|
92
|
+
style.sprite = [{ id: "default", url: style.sprite }];
|
|
93
|
+
}
|
|
94
|
+
const extendedStyle = {
|
|
95
|
+
...parentStyle,
|
|
96
|
+
...style,
|
|
97
|
+
sources: { ...parentStyle.sources, ...(style.sources || {}) },
|
|
98
|
+
sprite: [...parentStyle.sprite, ...style.sprite],
|
|
99
|
+
layers,
|
|
100
|
+
};
|
|
101
|
+
return ensureSourceAndLayers(extendedStyle, source);
|
|
102
|
+
} else {
|
|
103
|
+
// "complete" style, process layers & add ultra source & layers if defined
|
|
104
|
+
return ensureSourceAndLayers(
|
|
105
|
+
{
|
|
106
|
+
...style,
|
|
107
|
+
layers: style.layers
|
|
108
|
+
?.map(ensureLayerProps)
|
|
109
|
+
.filter((l) => l.source !== "ultra" || source)
|
|
110
|
+
.map(movePaintAndLayoutKeys),
|
|
111
|
+
},
|
|
112
|
+
source,
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function movePaintAndLayoutKeys(layer) {
|
|
118
|
+
for (const [key, value] of Object.entries(layer)) {
|
|
119
|
+
if (paintKeys.has(key)) {
|
|
120
|
+
if (!layer.paint) {
|
|
121
|
+
layer.paint = {};
|
|
122
|
+
}
|
|
123
|
+
layer.paint[key] = value;
|
|
124
|
+
delete layer[key];
|
|
125
|
+
}
|
|
126
|
+
if (layoutKeys.has(key)) {
|
|
127
|
+
if (!layer.layout) {
|
|
128
|
+
layer.layout = {};
|
|
129
|
+
}
|
|
130
|
+
layer.layout[key] = value;
|
|
131
|
+
delete layer[key];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return layer;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ensureLayerProps generates a layer ID if one is not set and sets the source to `ultra` if
|
|
138
|
+
// not set
|
|
139
|
+
function ensureLayerProps(layer, i) {
|
|
140
|
+
if (!layer.id) {
|
|
141
|
+
layer.id = `ultra-${i}`;
|
|
142
|
+
}
|
|
143
|
+
if (!layer.source && layer.type !== "background") {
|
|
144
|
+
layer.source = "ultra";
|
|
145
|
+
}
|
|
146
|
+
return layer;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function ensureSourceAndLayers(style, source) {
|
|
150
|
+
style.glyphs = FallbackGlyphProtocol.makeURL(style.glyphs);
|
|
151
|
+
if (!style.sources) {
|
|
152
|
+
style.sources = {};
|
|
153
|
+
}
|
|
154
|
+
if (!style.sprite) {
|
|
155
|
+
style.sprite = [];
|
|
156
|
+
} else if (typeof style.sprite === "string") {
|
|
157
|
+
style.sprite = [{ id: "default", url: style.sprite }];
|
|
158
|
+
}
|
|
159
|
+
const spritesheets = style.sprite.map(({ id }) => id);
|
|
160
|
+
if (!spritesheets.includes("maki")) {
|
|
161
|
+
style.sprite.push({
|
|
162
|
+
id: "maki",
|
|
163
|
+
url: window.location.origin + "/sprites/maki",
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (!spritesheets.includes("temaki")) {
|
|
167
|
+
style.sprite.push({
|
|
168
|
+
id: "temaki",
|
|
169
|
+
url: window.location.origin + "/sprites/temaki",
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (source && !style.sources.ultra) {
|
|
173
|
+
let foundAttribution = false;
|
|
174
|
+
for (const sourceName in style.sources) {
|
|
175
|
+
if (
|
|
176
|
+
style.sources[sourceName].attribution
|
|
177
|
+
?.toLowerCase()
|
|
178
|
+
.includes("openstreetmap") ||
|
|
179
|
+
style.sources[sourceName].url?.startsWith("https://tile.ourmap.us")
|
|
180
|
+
) {
|
|
181
|
+
foundAttribution = true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
style.sources.ultra = source.source;
|
|
185
|
+
if (foundAttribution) {
|
|
186
|
+
style.sources.ultra.attribution = "";
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (!style.layers) {
|
|
190
|
+
style.layers = [];
|
|
191
|
+
}
|
|
192
|
+
let hasUltraLayer = false;
|
|
193
|
+
for (const layer of style.layers) {
|
|
194
|
+
if (layer.source === "ultra") {
|
|
195
|
+
hasUltraLayer = true;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (source && source.layers && !hasUltraLayer) {
|
|
200
|
+
for (const layer of source.layers) {
|
|
201
|
+
style.layers.push(layer);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const errors = validateStyleMin(style, v8);
|
|
205
|
+
if (errors.length) {
|
|
206
|
+
throw new Error(
|
|
207
|
+
"Invalid style:\n\n" + errors.map(({ message }) => message).join("\n"),
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
return style;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export const handleStyleImageMissing = (ev) => {
|
|
214
|
+
if (ev.id.startsWith("https://") || ev.id.startsWith("data:")) {
|
|
215
|
+
ev.target.loadImage(ev.id, (error, image) => {
|
|
216
|
+
if (error) throw error;
|
|
217
|
+
if (!ev.target.hasImage(ev.id)) {
|
|
218
|
+
ev.target.addImage(ev.id, image);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
};
|
package/mkdocs.yml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
site_name: Overpass Ultra
|
|
2
|
+
site_url: https://overpass-ultra.us/docs/
|
|
3
|
+
repo_url: https://gitlab.com/trailstash/overpass-ultra/
|
|
4
|
+
copyright: '<a href="https://creativecommons.org/publicdomain/zero/1.0/deed.en">CC0 1.0 Universal</a>'
|
|
5
|
+
edit_uri: ''
|
|
6
|
+
site_dir: static/docs
|
|
7
|
+
theme:
|
|
8
|
+
name: material
|
|
9
|
+
custom_dir: docs/overrides
|
|
10
|
+
logo: assets/logo.svg
|
|
11
|
+
favicon: assets/logo.svg
|
|
12
|
+
features:
|
|
13
|
+
- content.code.copy
|
|
14
|
+
hide:
|
|
15
|
+
- footer
|
|
16
|
+
extra:
|
|
17
|
+
social:
|
|
18
|
+
- icon: fontawesome/brands/mastodon
|
|
19
|
+
link: https://mapstodon.space/@trailstash
|
|
20
|
+
- icon: fontawesome/brands/gitlab
|
|
21
|
+
link: https://gitlab.com/trailstash
|
|
22
|
+
- icon: fontawesome/brands/instagram
|
|
23
|
+
link: https://instagram.com/trailstashmaps
|
|
24
|
+
extra:
|
|
25
|
+
analytics:
|
|
26
|
+
provider: custom
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@trailstash/ultra",
|
|
3
|
+
"publishConfig": {
|
|
4
|
+
"access": "public"
|
|
5
|
+
},
|
|
6
|
+
"version": "3.0.0-dev",
|
|
7
|
+
"description": "A web based tool for making MapLibre GL maps with data from souces such as Overpass, GeoJSON, GPX, KML, TCX, etc",
|
|
8
|
+
"main": "index.js",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "node ./bin/run.js build",
|
|
11
|
+
"build:icons": "bash ./build-icons.sh",
|
|
12
|
+
"build:examples-docs": "node ./build-examples-docs.js Examples",
|
|
13
|
+
"build:examples-images": "node ./build-examples-images.js",
|
|
14
|
+
"build:maplibre-examples-docs": "node ./build-examples-docs.js MapLibre-Examples",
|
|
15
|
+
"build:docs": "mkdocs build",
|
|
16
|
+
"start:docs": "mkdocs serve",
|
|
17
|
+
"build:pages": "mkdir -p public && cp -Lr static/* public/.",
|
|
18
|
+
"start": "node ./bin/run.js serve",
|
|
19
|
+
"format": "prettier --print-width=80 --write '**/*.js' '**/*.json' README.md static/index.html '**/*.css'",
|
|
20
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://gitlab.com/trailstash/overpass-ultra.git"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"maps",
|
|
29
|
+
"cartography",
|
|
30
|
+
"osm",
|
|
31
|
+
"overpass",
|
|
32
|
+
"mapbox-gl",
|
|
33
|
+
"mapbox-gl-js"
|
|
34
|
+
],
|
|
35
|
+
"author": "Daniel Schep",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://gitlab.com/trailstash/overpass-ultra/issues"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://overpass-ultra.us/",
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^18.19.44",
|
|
42
|
+
"@unvt/sprite-one": "^0.1.1",
|
|
43
|
+
"esbuild": "^0.19.2",
|
|
44
|
+
"prettier": "^3.1.1",
|
|
45
|
+
"puppeteer": "^22.13.1",
|
|
46
|
+
"svg2png": "^4.1.1",
|
|
47
|
+
"ts-node": "^10.9.2"
|
|
48
|
+
},
|
|
49
|
+
"license": "ISC",
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@fortawesome/fontawesome-svg-core": "^6.5.1",
|
|
52
|
+
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
|
53
|
+
"@oclif/core": "^4.0.17",
|
|
54
|
+
"@tmcw/togeojson": "^5.8.1",
|
|
55
|
+
"@trailstash/maplibre-component": "^1.0.0",
|
|
56
|
+
"@turf/bbox": "^7.0.0",
|
|
57
|
+
"deep-equal": "^2.2.3",
|
|
58
|
+
"liquidjs": "^10.10.0",
|
|
59
|
+
"lodash.pick": "^4.4.0",
|
|
60
|
+
"lz-string": "^1.5.0",
|
|
61
|
+
"maplibre-gl": "^4.5.1",
|
|
62
|
+
"marked": "^13.0.2",
|
|
63
|
+
"normalize.css": "^8.0.1",
|
|
64
|
+
"osmtogeojson": "^3.0.0-beta.5",
|
|
65
|
+
"pmtiles": "^3.0.5",
|
|
66
|
+
"yaml": "^2.3.4"
|
|
67
|
+
},
|
|
68
|
+
"peerDependencies": {
|
|
69
|
+
"@maplibre/maplibre-gl-style-spec": "20.x"
|
|
70
|
+
},
|
|
71
|
+
"bin": {
|
|
72
|
+
"ultra": "./bin/run.js"
|
|
73
|
+
},
|
|
74
|
+
"oclif": {
|
|
75
|
+
"bin": "ultra",
|
|
76
|
+
"commands": "./cli",
|
|
77
|
+
"dirname": "ultra",
|
|
78
|
+
"topicSeparator": " "
|
|
79
|
+
}
|
|
80
|
+
}
|
package/screenshot.png
ADDED
|
Binary file
|
package/static/embed.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const el = document.createElement("iframe");
|
|
2
|
+
el.setAttribute("style", document.currentScript.getAttribute("style"));
|
|
3
|
+
document.currentScript.style.display = "none";
|
|
4
|
+
const params = new URLSearchParams();
|
|
5
|
+
params.set("query", document.currentScript.text.trim());
|
|
6
|
+
el.src = new URL(
|
|
7
|
+
`/#map&${params.toString()}`,
|
|
8
|
+
document.currentScript.src,
|
|
9
|
+
).toString();
|
|
10
|
+
|
|
11
|
+
if (document.currentScript.nextSibling) {
|
|
12
|
+
document.currentScript.parentElement.insertBefore(
|
|
13
|
+
el,
|
|
14
|
+
document.currentScript.nextSibling,
|
|
15
|
+
);
|
|
16
|
+
} else {
|
|
17
|
+
document.currentScript.parentElement.appendChild(el);
|
|
18
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
|
|
2
|
+
�
|
|
3
|
+
�Noto Sans Regular, Noto Naskh Arabic Regular, Noto Sans Armenian Regular, Noto Sans Balinese Regular, Noto Sans Bengali Regular, Noto Sans CJK TC Regular, Noto Sans Devanagari Regular, Noto Sans Ethiopic Regular, Noto Sans Georgian Regular, Noto Sans Gujarati Regular, Noto Sans Gurmukhi Regular, Noto Sans Hebrew Regular, Noto Sans Javanese Regular, Noto Sans Kannada Regular, Noto Sans Khmer Regular, Noto Sans Lao Regular, Noto Sans Mongolian Regular, Noto Sans Myanmar Regular, Noto Sans Oriya Regular, Noto Sans Sinhala Regular, Noto Sans Tamil Regular, Noto Sans Thai Regular, Noto Sans Tibetan Regular10240-10495
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
|
|
2
|
+
�
|
|
3
|
+
�Noto Sans Regular, Noto Naskh Arabic Regular, Noto Sans Armenian Regular, Noto Sans Balinese Regular, Noto Sans Bengali Regular, Noto Sans CJK TC Regular, Noto Sans Devanagari Regular, Noto Sans Ethiopic Regular, Noto Sans Georgian Regular, Noto Sans Gujarati Regular, Noto Sans Gurmukhi Regular, Noto Sans Hebrew Regular, Noto Sans Javanese Regular, Noto Sans Kannada Regular, Noto Sans Khmer Regular, Noto Sans Lao Regular, Noto Sans Mongolian Regular, Noto Sans Myanmar Regular, Noto Sans Oriya Regular, Noto Sans Sinhala Regular, Noto Sans Tamil Regular, Noto Sans Thai Regular, Noto Sans Tibetan Regular10752-11007
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|