From 28dcb0081d738032ff066492ef8274139a5d1958 Mon Sep 17 00:00:00 2001 From: Falk Mueller Date: Sun, 2 Nov 2025 18:52:10 +0100 Subject: [PATCH] [ADD] chaos map --- README.md | 4 +- content/_index.md | 2 +- content/news/20221219_36c3.md | 4 + content/news/20231219_37c3.md | 4 + content/news/20250415_Geekend.md | 4 + themes/zone3/layouts/baseof.html | 4 +- themes/zone3/layouts/index.html | 18 +- themes/zone3/static/css/style.css | 44 +- themes/zone3/static/img/marker_cluster.png | Bin 0 -> 15401 bytes themes/zone3/static/img/marker_small.png | Bin 0 -> 11924 bytes .../zone3/static/img/marker_small_green.png | Bin 0 -> 14126 bytes .../zone3/static/img/marker_small_white.png | Bin 0 -> 16968 bytes themes/zone3/static/js/map.js | 176 ++ themes/zone3/static/js/mapstyle.json | 1618 +++++++++++++++++ themes/zone3/static/js/pong-game.js | 134 ++ themes/zone3/static/js/script.js | 134 -- 16 files changed, 2005 insertions(+), 141 deletions(-) create mode 100644 content/news/20221219_36c3.md create mode 100644 content/news/20231219_37c3.md create mode 100644 content/news/20250415_Geekend.md create mode 100644 themes/zone3/static/img/marker_cluster.png create mode 100644 themes/zone3/static/img/marker_small.png create mode 100644 themes/zone3/static/img/marker_small_green.png create mode 100644 themes/zone3/static/img/marker_small_white.png create mode 100644 themes/zone3/static/js/map.js create mode 100644 themes/zone3/static/js/mapstyle.json create mode 100644 themes/zone3/static/js/pong-game.js diff --git a/README.md b/README.md index 17c09d3..911841f 100644 --- a/README.md +++ b/README.md @@ -21,4 +21,6 @@ The source files for the website. - play section - game of live - raindrop: https://experiments.p5aholic.me/day/005/ - - pong: https://designs.events.ccc.de/GPN8/GPN8-Visual.png \ No newline at end of file + - pong: https://designs.events.ccc.de/GPN8/GPN8-Visual.png + - poly play: https://www.gugeli.de/2025/08/12/poly-play-der-einzige-arcade-automat-der-ddr-und-wie-man-ihn-heute-emuliert/ +- matrix link im footer zu eigener unterseite mit beschreibung \ No newline at end of file diff --git a/content/_index.md b/content/_index.md index b7b40de..195b0e3 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,5 +1,5 @@ +++ -title = 'ChaosZone' +title = 'About' date = 2025-06-01T22:39:26+02:00 draft = true +++ diff --git a/content/news/20221219_36c3.md b/content/news/20221219_36c3.md new file mode 100644 index 0000000..517c74f --- /dev/null +++ b/content/news/20221219_36c3.md @@ -0,0 +1,4 @@ ++++ +title = 'ChaosZone at 36C3' +date = 2023-12-19T22:39:26+02:00 ++++ \ No newline at end of file diff --git a/content/news/20231219_37c3.md b/content/news/20231219_37c3.md new file mode 100644 index 0000000..35dd45f --- /dev/null +++ b/content/news/20231219_37c3.md @@ -0,0 +1,4 @@ ++++ +title = 'ChaosZone goes 37c3 ~ Kombinate aller Länder vereinigt euch! ~' +date = 2023-12-19T22:39:26+02:00 ++++ \ No newline at end of file diff --git a/content/news/20250415_Geekend.md b/content/news/20250415_Geekend.md new file mode 100644 index 0000000..f938845 --- /dev/null +++ b/content/news/20250415_Geekend.md @@ -0,0 +1,4 @@ ++++ +title = 'Halle Geekend Weekend 2025 - Review' +date = 2025-04-15T22:39:26+02:00 ++++ \ No newline at end of file diff --git a/themes/zone3/layouts/baseof.html b/themes/zone3/layouts/baseof.html index 2fc4e29..d32f029 100644 --- a/themes/zone3/layouts/baseof.html +++ b/themes/zone3/layouts/baseof.html @@ -11,9 +11,11 @@
{{ block "main" . }}{{ end }}
- + {{ partial "footer.html" . }} + + \ No newline at end of file diff --git a/themes/zone3/layouts/index.html b/themes/zone3/layouts/index.html index 0aa8967..1c6506c 100644 --- a/themes/zone3/layouts/index.html +++ b/themes/zone3/layouts/index.html @@ -15,8 +15,24 @@

News

- ... + {{ $subpage := site.GetPage "news" }} + {{ with $subpage.Pages }} + + {{ end }} + news archiv >>> +
+ +
+
{{ end }} diff --git a/themes/zone3/static/css/style.css b/themes/zone3/static/css/style.css index 93d2739..e296bf7 100644 --- a/themes/zone3/static/css/style.css +++ b/themes/zone3/static/css/style.css @@ -4,7 +4,8 @@ --menu-font-color: white; --font-color: #430C08; --box-bg: #ece2d5; - --main-font: 'Cubellan'; + --main-font: Arial, Helvetica, sans-serif; + --highlight-font: 'Cubellan'; } @font-face { @@ -41,7 +42,17 @@ section.red { } main { - font-size: 1.2rem; + font-size: clamp(1rem, 2vw, 1.2rem); +} + +h1, h2, h3, h4, h5 { + font-family: var(--highlight-font); +} + +h1 { + font-size: clamp(2rem, 5vw, 3.5rem); + margin-bottom: 0.5rem; + margin-top: 1rem; } /** Header and Navigation ###################################################### **/ @@ -49,6 +60,7 @@ main { header { background-color: var(--bg-color); border-bottom: 1px solid var(--box-bg); + font-family: var(--highlight-font); } header .container { @@ -81,7 +93,7 @@ header .site-nav { } .logo img { - height: 3rem; + height: clamp(1.5rem, 4vw, 3rem); margin: .5rem; } @@ -176,4 +188,30 @@ pong-game { display: block; } +.news-list { + list-style: none; + padding: 0; + margin: 0; + text-decoration: none; +} + +.news-list li a { + display: block; + margin-bottom: 0.5rem; + background-color: var(--hl-color); + color: var(--menu-font-color); + text-decoration: none; + padding: 0.5rem; +} + +.news-list li a:hover { + background-color: var(--bg-color); +} + +.news-list li a span { + display: block; + font-size: 0.7em; + margin-bottom: 0.3em; +} + diff --git a/themes/zone3/static/img/marker_cluster.png b/themes/zone3/static/img/marker_cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..b600d028b999c631bc563b0dda23dc8930650a82 GIT binary patch literal 15401 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 M>FVdQ&MBb@0GAAlF#rGn literal 0 HcmV?d00001 diff --git a/themes/zone3/static/img/marker_small.png b/themes/zone3/static/img/marker_small.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1649ac928ec199bdb409258d14a9f907a6bead GIT binary patch literal 11924 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 literal 0 HcmV?d00001 diff --git a/themes/zone3/static/img/marker_small_green.png b/themes/zone3/static/img/marker_small_green.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0dbe6af88c5568597d62b4858ab1354d90e7b6 GIT binary patch literal 14126 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 C+AdlE literal 0 HcmV?d00001 diff --git a/themes/zone3/static/img/marker_small_white.png b/themes/zone3/static/img/marker_small_white.png new file mode 100644 index 0000000000000000000000000000000000000000..cabaa764024dd526a8e322619a6bca572f0fe142 GIT binary patch literal 16968 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 v&I=d)d)t}p7oR;EJtgR!wu+6 { + const map = new maplibregl.Map({ + style: mapStyleUrl, + center: [12.318427099380749, 51.323676093687546], + zoom: 7, + container: containerId, + }); + map.on("load", () => { + addImages(map); + addEvents(map); + resolve(map); + }); + }); +} + + +async function displaySpacesLayer(spaces, map) { + const spaceFeatures = []; + const bounds = new maplibregl.LngLatBounds(); + + spaces.forEach((space, idx) => { + if ( + !space.data || + !space.data.ext_habitat || + space.data.ext_habitat.toLowerCase() != "chaoszone" + ) { + return; + } + + const open = space.data.state && space.data.state.open; + + spaceFeatures.push({ + type: "Feature", + properties: { + space: space.data, + icon: "custom-marker" + (open ? "-green" : ""), + }, + geometry: { + type: "Point", + coordinates: [space.data.location.lon, space.data.location.lat], + }, + }); + + bounds.extend( + new maplibregl.LngLat(space.data.location.lon, space.data.location.lat) + ); + }); + + map.addSource("points", { + type: "geojson", + data: { + type: "FeatureCollection", + features: spaceFeatures, + }, + }); + + // Add a symbol layer + map.addLayer({ + id: "symbols", + type: "symbol", + source: "points", + filter: ["!", ["has", "point_count"]], + layout: { + "icon-image": "{icon}", + "icon-size": 0.4, + "icon-allow-overlap": true, + }, + }); + + map.fitBounds(bounds, { padding: 100, animate: false }); + + map.getCanvas().style.cursor = "default"; + + map.scrollZoom.disable(); +} + + +async function addImages(map) { + map + .loadImage("./img/marker_small_white.png?l=1") + .then((image) => map.addImage("custom-marker", image.data)); + map + .loadImage("./img/marker_small_green.png?l=1") + .then((image) => map.addImage("custom-marker-green", image.data)); +} + + +function addEvents(map) { + map.on("mouseenter", "symbols", () => { + map.getCanvas().style.cursor = "pointer"; + }); + + map.on("mouseleave", "symbols", () => { + map.getCanvas().style.cursor = "default"; + }); + + map.on("click", "symbols", (e) => { + const coordinates = e.features[0].geometry.coordinates.slice(); + const space = JSON.parse(e.features[0].properties.space); + console.log(e.features[0]); + + // Ensure that if the map is zoomed out such that multiple + // copies of the feature are visible, the popup appears + // over the copy being pointed to. + while (Math.abs(e.lngLat.lng - coordinates[0]) > 180) { + coordinates[0] += e.lngLat.lng > coordinates[0] ? 360 : -360; + } + + const open = space.state && space.state.open; + + let stateHtml = space.state + ? `
${open ? "geöffnet" : "gerade geschlossen"}
` + : ""; + + let html = `
+
${space.space}
+ ${stateHtml} + +
`; + + new maplibregl.Popup().setLngLat(coordinates).setHTML(html).addTo(map); + }); +} + +class ChaosMap extends HTMLElement { + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + } + + connectedCallback() { + this.render(); + } + + render() { + this.shadowRoot.innerHTML = ` + + + +
+ `; + + setTimeout(() => { + this.initMap(); + }, 500); + } + + async initMap() { + const map = await initMap(this.shadowRoot.getElementById('map'), './js/mapstyle.json'); + + // Fetch spaces data from the API + const response = await fetch('https://map.chaoszone.cz/spaceapi'); + const data = await response.json(); + + await displaySpacesLayer(data, map); + } +} + +const script = document.createElement('script'); +script.src = 'https://map.chaoszone.cz/proxy/maplibre-gl/dist/maplibre-gl.js'; +document.body.appendChild(script); + +customElements.define('chaos-map', ChaosMap); diff --git a/themes/zone3/static/js/mapstyle.json b/themes/zone3/static/js/mapstyle.json new file mode 100644 index 0000000..724488b --- /dev/null +++ b/themes/zone3/static/js/mapstyle.json @@ -0,0 +1,1618 @@ + +{ + "version": 8, + "metadata": {}, + "sources": { + "ne2_shaded": { + "maxzoom": 6, + "tileSize": 256, + "tiles": [ + "https://map.chaoszone.cz/proxy/tiles/natural_earth/ne2sr/{z}/{x}/{y}.png" + ], + "type": "raster" + }, + "openmaptiles": { + "type": "vector", + "url": "https://map.chaoszone.cz/proxy/tiles/planet" + } + }, + "sprite": "https://map.chaoszone.cz/proxy/tiles/sprites/ofm_f384/ofm", + "glyphs": "https://map.chaoszone.cz/proxy/tiles/fonts/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": {"background-color": "rgba(251, 49, 49, 1)"} + }, + { + "id": "park", + "type": "fill", + "source": "openmaptiles", + "source-layer": "park", + "filter": [ + "match", + ["geometry-type"], + ["MultiPolygon", "Polygon"], + true, + false + ], + "paint": {"fill-color": "rgba(255, 73, 73, 1)"} + }, + { + "id": "water", + "type": "fill", + "source": "openmaptiles", + "source-layer": "water", + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["!=", ["get", "brunnel"], "tunnel"] + ], + "paint": {"fill-antialias": true, "fill-color": "rgba(71, 124, 140, 1)"} + }, + { + "id": "landcover_ice_shelf", + "type": "fill", + "source": "openmaptiles", + "source-layer": "landcover", + "maxzoom": 8, + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["==", ["get", "subclass"], "ice_shelf"] + ], + "paint": {"fill-color": "hsl(0,0%,98%)", "fill-opacity": 0.7} + }, + { + "id": "landcover_glacier", + "type": "fill", + "source": "openmaptiles", + "source-layer": "landcover", + "maxzoom": 8, + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["==", ["get", "subclass"], "glacier"] + ], + "paint": { + "fill-color": "hsl(0,0%,98%)", + "fill-opacity": ["interpolate", ["linear"], ["zoom"], 0, 1, 8, 0.5] + } + }, + { + "id": "landuse_residential", + "type": "fill", + "source": "openmaptiles", + "source-layer": "landuse", + "maxzoom": 16, + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["==", ["get", "class"], "residential"] + ], + "layout": {"visibility": "visible"}, + "paint": { + "fill-color": "rgba(166, 44, 44, 1)", + "fill-opacity": [ + "interpolate", + ["exponential", 0.6], + ["zoom"], + 8, + 0.8, + 9, + 0.6 + ] + } + }, + { + "id": "landcover_wood", + "type": "fill", + "source": "openmaptiles", + "source-layer": "landcover", + "minzoom": 10, + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["==", ["get", "class"], "wood"] + ], + "layout": {"visibility": "visible"}, + "paint": { + "fill-color": "rgba(115, 142, 115, 1)", + "fill-opacity": ["interpolate", ["linear"], ["zoom"], 8, 0, 12, 1] + } + }, + { + "id": "waterway", + "type": "line", + "source": "openmaptiles", + "source-layer": "waterway", + "filter": [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + "paint": {"line-color": "rgba(71, 124, 140, 1)"} + }, + { + "id": "building", + "type": "fill", + "source": "openmaptiles", + "source-layer": "building", + "minzoom": 12, + "paint": { + "fill-antialias": true, + "fill-color": "rgb(234, 234, 229)", + "fill-outline-color": "rgb(219, 219, 218)" + } + }, + { + "id": "tunnel_motorway_casing", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["==", ["get", "brunnel"], "tunnel"], + ["==", ["get", "class"], "motorway"] + ] + ], + "layout": {"line-cap": "butt", "line-join": "miter"}, + "paint": { + "line-color": "rgb(213, 213, 213)", + "line-opacity": 1, + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 5.8, + 0, + 6, + 3, + 20, + 40 + ] + } + }, + { + "id": "tunnel_motorway_inner", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["==", ["get", "brunnel"], "tunnel"], + ["==", ["get", "class"], "motorway"] + ] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgb(234,234,234)", + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 4, + 2, + 6, + 1.3, + 20, + 30 + ] + } + }, + { + "id": "aeroway-taxiway", + "type": "line", + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 12, + "filter": ["match", ["get", "class"], ["taxiway"], true, false], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "hsl(0,0%,88%)", + "line-opacity": 1, + "line-width": [ + "interpolate", + ["exponential", 1.55], + ["zoom"], + 13, + 1.8, + 20, + 20 + ] + } + }, + { + "id": "aeroway-runway-casing", + "type": "line", + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 11, + "filter": ["match", ["get", "class"], ["runway"], true, false], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "hsl(0,0%,88%)", + "line-opacity": 1, + "line-width": [ + "interpolate", + ["exponential", 1.5], + ["zoom"], + 11, + 6, + 17, + 55 + ] + } + }, + { + "id": "aeroway-area", + "type": "fill", + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 4, + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["match", ["get", "class"], ["runway", "taxiway"], true, false] + ], + "paint": { + "fill-color": "rgba(255, 255, 255, 1)", + "fill-opacity": ["interpolate", ["linear"], ["zoom"], 13, 0, 14, 1] + } + }, + { + "id": "aeroway-runway", + "type": "line", + "source": "openmaptiles", + "source-layer": "aeroway", + "minzoom": 11, + "filter": [ + "all", + ["match", ["get", "class"], ["runway"], true, false], + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "rgba(255, 255, 255, 1)", + "line-opacity": 1, + "line-width": [ + "interpolate", + ["exponential", 1.5], + ["zoom"], + 11, + 4, + 17, + 50 + ] + } + }, + { + "id": "road_area_pier", + "type": "fill", + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], true, false], + ["==", ["get", "class"], "pier"] + ], + "layout": {"visibility": "visible"}, + "paint": {"fill-antialias": true, "fill-color": "rgb(242,243,240)"} + }, + { + "id": "road_pier", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["match", ["get", "class"], ["pier"], true, false] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "rgb(242,243,240)", + "line-width": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 15, + 1, + 17, + 4 + ] + } + }, + { + "id": "highway_path", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["==", ["get", "class"], "path"] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "rgb(234, 234, 234)", + "line-opacity": 0.9, + "line-width": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 13, + 1, + 20, + 10 + ] + } + }, + { + "id": "highway_minor", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 8, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["match", ["get", "class"], ["minor", "service", "track"], true, false] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "hsl(0,0%,88%)", + "line-opacity": 0.9, + "line-width": [ + "interpolate", + ["exponential", 1.55], + ["zoom"], + 13, + 1.8, + 20, + 20 + ] + } + }, + { + "id": "highway_major_casing", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "match", + ["get", "class"], + ["primary", "secondary", "tertiary", "trunk"], + true, + false + ] + ], + "layout": { + "line-cap": "butt", + "line-join": "miter", + "visibility": "visible" + }, + "paint": { + "line-color": "rgb(213, 213, 213)", + "line-dasharray": [12, 0], + "line-width": [ + "interpolate", + ["exponential", 1.3], + ["zoom"], + 10, + 3, + 20, + 23 + ] + } + }, + { + "id": "highway_major_inner", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 11, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "match", + ["get", "class"], + ["primary", "secondary", "tertiary", "trunk"], + true, + false + ] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": { + "line-color": "#fff", + "line-width": [ + "interpolate", + ["exponential", 1.3], + ["zoom"], + 10, + 2, + 20, + 20 + ] + } + }, + { + "id": "highway_major_subtle", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "maxzoom": 11, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "match", + ["get", "class"], + ["primary", "secondary", "tertiary", "trunk"], + true, + false + ] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "visible" + }, + "paint": {"line-color": "rgba(197, 0, 0, 0.74)", "line-width": 2} + }, + { + "id": "highway_motorway_casing", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true], + ["==", ["get", "class"], "motorway"] + ] + ], + "layout": { + "line-cap": "butt", + "line-join": "miter", + "visibility": "visible" + }, + "paint": { + "line-color": "rgba(197, 0, 0, 1)", + "line-dasharray": [2, 0], + "line-opacity": 1, + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 5.8, + 0, + 6, + 3, + 20, + 40 + ] + } + }, + { + "id": "highway_motorway_inner", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["match", ["get", "brunnel"], ["bridge", "tunnel"], false, true], + ["==", ["get", "class"], "motorway"] + ] + ], + "layout": { + "line-cap": "round", + "line-join": "round", + "visibility": "none" + }, + "paint": { + "line-color": [ + "interpolate", + ["linear"], + ["zoom"], + 5.8, + "rgba(197, 0, 0, 1)", + 6, + "#fff" + ], + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 4, + 2, + 6, + 1.3, + 20, + 30 + ] + } + }, + { + "id": "highway_motorway_subtle", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "maxzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["==", ["get", "class"], "motorway"] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "hsla(0,0%,85%,0.53)", + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 4, + 2, + 6, + 1.3 + ] + } + }, + { + "id": "railway_transit", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 16, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["==", ["get", "class"], "transit"], + ["match", ["get", "brunnel"], ["tunnel"], false, true] + ] + ], + "layout": {"line-join": "round"}, + "paint": {"line-color": "#dddddd", "line-width": 3} + }, + { + "id": "railway_transit_dashline", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 16, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["==", ["get", "class"], "transit"], + ["match", ["get", "brunnel"], ["tunnel"], false, true] + ] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#fafafa", + "line-dasharray": [3, 3], + "line-width": 2 + } + }, + { + "id": "railway_service", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 16, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["all", ["==", ["get", "class"], "rail"], ["has", "service"]] + ], + "layout": {"line-join": "round"}, + "paint": {"line-color": "#dddddd", "line-width": 3} + }, + { + "id": "railway_service_dashline", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 16, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["==", ["get", "class"], "rail"], + ["has", "service"] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#fafafa", + "line-dasharray": [3, 3], + "line-width": 2 + } + }, + { + "id": "railway", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["all", ["!", ["has", "service"]], ["==", ["get", "class"], "rail"]] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#dddddd", + "line-width": [ + "interpolate", + ["exponential", 1.3], + ["zoom"], + 16, + 3, + 20, + 7 + ] + } + }, + { + "id": "railway_dashline", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 13, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["all", ["!", ["has", "service"]], ["==", ["get", "class"], "rail"]] + ], + "layout": {"line-join": "round"}, + "paint": { + "line-color": "#fafafa", + "line-dasharray": [3, 3], + "line-width": [ + "interpolate", + ["exponential", 1.3], + ["zoom"], + 16, + 2, + 20, + 6 + ] + } + }, + { + "id": "highway_motorway_bridge_casing", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["==", ["get", "brunnel"], "bridge"], + ["==", ["get", "class"], "motorway"] + ] + ], + "layout": {"line-cap": "butt", "line-join": "miter"}, + "paint": { + "line-color": "rgb(213, 213, 213)", + "line-dasharray": [2, 0], + "line-opacity": 1, + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 5.8, + 0, + 6, + 5, + 20, + 45 + ] + } + }, + { + "id": "highway_motorway_bridge_inner", + "type": "line", + "source": "openmaptiles", + "source-layer": "transportation", + "minzoom": 6, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "all", + ["==", ["get", "brunnel"], "bridge"], + ["==", ["get", "class"], "motorway"] + ] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": [ + "interpolate", + ["linear"], + ["zoom"], + 5.8, + "hsla(0,0%,85%,0.53)", + 6, + "#fff" + ], + "line-width": [ + "interpolate", + ["exponential", 1.4], + ["zoom"], + 4, + 2, + 6, + 1.3, + 20, + 30 + ] + } + }, + { + "id": "boundary_3", + "type": "line", + "source": "openmaptiles", + "source-layer": "boundary", + "minzoom": 0, + "filter": [ + "all", + [">=", ["get", "admin_level"], 3], + ["<=", ["get", "admin_level"], 6], + ["!=", ["get", "maritime"], 1], + ["!=", ["get", "disputed"], 1], + ["!", ["has", "claimed_by"]] + ], + "paint": { + "line-color": "hsl(0,0%,70%)", + "line-opacity": ["interpolate", ["linear"], ["zoom"], 0, 0.4, 4, 1], + "line-width": ["interpolate", ["linear"], ["zoom"], 3, 1, 5, 1.2, 12, 3] + } + }, + { + "id": "boundary_2", + "type": "line", + "source": "openmaptiles", + "source-layer": "boundary", + "filter": [ + "all", + ["==", ["get", "admin_level"], 2], + ["!=", ["get", "maritime"], 1], + ["!=", ["get", "disputed"], 1], + ["!", ["has", "claimed_by"]] + ], + "layout": {"line-cap": "round", "line-join": "round"}, + "paint": { + "line-color": "hsl(0,0%,70%)", + "line-opacity": ["interpolate", ["linear"], ["zoom"], 0, 0.4, 4, 1], + "line-width": ["interpolate", ["linear"], ["zoom"], 3, 1, 5, 6.2, 12, 3] + } + }, + { + "id": "boundary_disputed", + "type": "line", + "source": "openmaptiles", + "source-layer": "boundary", + "filter": [ + "all", + ["!=", ["get", "maritime"], 1], + ["==", ["get", "disputed"], 1] + ], + "paint": { + "line-color": "hsl(0,0%,70%)", + "line-dasharray": [1, 2], + "line-width": ["interpolate", ["linear"], ["zoom"], 3, 1, 5, 1.2, 12, 3] + } + }, + { + "id": "waterway_line_label", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "waterway", + "minzoom": 10, + "filter": [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + "layout": { + "symbol-placement": "line", + "symbol-spacing": 350, + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Italic"], + "text-letter-spacing": 0.2, + "text-max-width": 5, + "text-size": 14 + }, + "paint": { + "text-color": "hsl(0,0%,66%)", + "text-halo-color": "rgba(255,255,255,0.7)", + "text-halo-width": 1.5 + } + }, + { + "id": "water_name_point_label", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "water_name", + "filter": [ + "match", + ["geometry-type"], + ["MultiPoint", "Point"], + true, + false + ], + "layout": { + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Italic"], + "text-letter-spacing": 0.2, + "text-max-width": 5, + "text-size": ["interpolate", ["linear"], ["zoom"], 0, 10, 8, 14] + }, + "paint": { + "text-color": "#495e91", + "text-halo-color": "rgba(255,255,255,0.7)", + "text-halo-width": 1.5 + } + }, + { + "id": "water_name_line_label", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "water_name", + "filter": [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + "layout": { + "symbol-placement": "line", + "symbol-spacing": 350, + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Italic"], + "text-letter-spacing": 0.2, + "text-max-width": 5, + "text-size": 14 + }, + "paint": { + "text-color": "#495e91", + "text-halo-color": "rgba(255,255,255,0.7)", + "text-halo-width": 1.5 + } + }, + { + "id": "highway-name-path", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 15.5, + "filter": ["==", ["get", "class"], "path"], + "layout": { + "symbol-placement": "line", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-rotation-alignment": "map", + "text-size": ["interpolate", ["linear"], ["zoom"], 13, 12, 14, 13] + }, + "paint": { + "text-color": "hsl(30,0%,62%)", + "text-halo-color": "#f8f4f0", + "text-halo-width": 0.5 + } + }, + { + "id": "highway-name-minor", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 15, + "filter": [ + "all", + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["match", ["get", "class"], ["minor", "service", "track"], true, false] + ], + "layout": { + "symbol-placement": "line", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-rotation-alignment": "map", + "text-size": ["interpolate", ["linear"], ["zoom"], 13, 12, 14, 13] + }, + "paint": { + "text-color": "#666", + "text-halo-blur": 0.5, + "text-halo-width": 1 + } + }, + { + "id": "highway-name-major", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 12.2, + "filter": [ + "match", + ["get", "class"], + ["primary", "secondary", "tertiary", "trunk"], + true, + false + ], + "layout": { + "symbol-placement": "line", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], " ", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-rotation-alignment": "map", + "text-size": ["interpolate", ["linear"], ["zoom"], 13, 12, 14, 13] + }, + "paint": { + "text-color": "#666", + "text-halo-blur": 0.5, + "text-halo-width": 1 + } + }, + { + "id": "highway-shield-non-us", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 11, + "filter": [ + "all", + ["<=", ["get", "ref_length"], 6], + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + [ + "match", + ["get", "network"], + ["us-highway", "us-interstate", "us-state"], + false, + true + ] + ], + "layout": { + "icon-image": ["concat", "road_", ["get", "ref_length"]], + "icon-rotation-alignment": "viewport", + "icon-size": 1, + "symbol-placement": ["step", ["zoom"], "point", 11, "line"], + "symbol-spacing": 200, + "text-field": ["to-string", ["get", "ref"]], + "text-font": ["Noto Sans Regular"], + "text-rotation-alignment": "viewport", + "text-size": 10 + } + }, + { + "id": "highway-shield-us-interstate", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 11, + "filter": [ + "all", + ["<=", ["get", "ref_length"], 6], + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["match", ["get", "network"], ["us-interstate"], true, false] + ], + "layout": { + "icon-image": [ + "concat", + ["get", "network"], + "_", + ["get", "ref_length"] + ], + "icon-rotation-alignment": "viewport", + "icon-size": 1, + "symbol-placement": ["step", ["zoom"], "point", 7, "line", 8, "line"], + "symbol-spacing": 200, + "text-field": ["to-string", ["get", "ref"]], + "text-font": ["Noto Sans Regular"], + "text-rotation-alignment": "viewport", + "text-size": 10 + } + }, + { + "id": "road_shield_us", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "transportation_name", + "minzoom": 12, + "filter": [ + "all", + ["<=", ["get", "ref_length"], 6], + [ + "match", + ["geometry-type"], + ["LineString", "MultiLineString"], + true, + false + ], + ["match", ["get", "network"], ["us-highway", "us-state"], true, false] + ], + "layout": { + "icon-image": [ + "concat", + ["get", "network"], + "_", + ["get", "ref_length"] + ], + "icon-rotation-alignment": "viewport", + "icon-size": 1, + "symbol-placement": ["step", ["zoom"], "point", 11, "line"], + "symbol-spacing": 200, + "text-field": ["to-string", ["get", "ref"]], + "text-font": ["Noto Sans Regular"], + "text-rotation-alignment": "viewport", + "text-size": 10 + } + }, + { + "id": "airport", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "aerodrome_label", + "minzoom": 11, + "filter": ["all", ["has", "iata"]], + "layout": { + "icon-image": "airport_11", + "icon-size": 1, + "text-anchor": "top", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-max-width": 9, + "text-offset": [0, 0.6], + "text-optional": true, + "text-padding": 2, + "text-size": 12 + }, + "paint": { + "text-color": "#666", + "text-halo-blur": 0.5, + "text-halo-color": "#ffffff", + "text-halo-width": 1 + } + }, + { + "id": "label_other", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 8, + "filter": [ + "match", + ["get", "class"], + ["city", "continent", "country", "state", "town", "village"], + false, + true + ], + "layout": { + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Italic"], + "text-letter-spacing": 0.1, + "text-max-width": 9, + "text-size": ["interpolate", ["linear"], ["zoom"], 8, 9, 12, 10], + "text-transform": "uppercase", + "visibility": "visible" + }, + "paint": { + "text-color": "#333", + "text-halo-blur": 1, + "text-halo-color": "#fff", + "text-halo-width": 1 + } + }, + { + "id": "label_village", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 9, + "filter": ["==", ["get", "class"], "village"], + "layout": { + "icon-allow-overlap": true, + "icon-image": ["step", ["zoom"], "circle_11_black", 10, ""], + "icon-optional": false, + "icon-size": 0.2, + "text-anchor": "bottom", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-max-width": 8, + "text-size": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 7, + 10, + 11, + 12 + ], + "visibility": "visible" + }, + "paint": { + "text-color": "#000", + "text-halo-blur": 1, + "text-halo-color": "#fff", + "text-halo-width": 1 + } + }, + { + "id": "label_town", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 6, + "filter": ["==", ["get", "class"], "town"], + "layout": { + "icon-allow-overlap": true, + "icon-image": ["step", ["zoom"], "circle_11_black", 10, ""], + "icon-optional": false, + "icon-size": 0.2, + "text-anchor": "bottom", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-max-width": 8, + "text-size": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 7, + 12, + 11, + 14 + ], + "visibility": "visible" + }, + "paint": { + "text-color": "rgba(255, 255, 255, 1)", + "text-halo-blur": 1, + "text-halo-color": "rgba(0, 0, 0, 1)", + "text-halo-width": 1 + } + }, + { + "id": "label_state", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 5, + "maxzoom": 8, + "filter": ["==", ["get", "class"], "state"], + "layout": { + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Italic"], + "text-letter-spacing": 0.2, + "text-max-width": 9, + "text-size": ["interpolate", ["linear"], ["zoom"], 5, 10, 8, 14], + "text-transform": "uppercase", + "visibility": "none" + }, + "paint": { + "text-color": "#333", + "text-halo-blur": 1, + "text-halo-color": "#fff", + "text-halo-width": 1 + } + }, + { + "id": "label_city", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 3, + "filter": [ + "all", + ["==", ["get", "class"], "city"], + ["!=", ["get", "capital"], 2] + ], + "layout": { + "icon-allow-overlap": true, + "icon-image": ["step", ["zoom"], "circle_11_black", 9, ""], + "icon-optional": false, + "icon-size": 0.4, + "text-anchor": "bottom", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Regular"], + "text-max-width": 8, + "text-offset": [0, -0.1], + "text-size": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 4, + 11, + 7, + 13, + 11, + 18 + ] + }, + "paint": { + "text-color": "rgba(255, 255, 255, 1)", + "text-halo-blur": 1, + "text-halo-color": "rgba(2, 2, 2, 1)", + "text-halo-width": 1 + } + }, + { + "id": "label_city_capital", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 3, + "filter": [ + "all", + ["==", ["get", "class"], "city"], + ["==", ["get", "capital"], 2] + ], + "layout": { + "icon-allow-overlap": true, + "icon-image": ["step", ["zoom"], "circle_11_black", 9, ""], + "icon-optional": false, + "icon-size": 0.5, + "text-anchor": "bottom", + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Bold"], + "text-max-width": 8, + "text-offset": [0, -0.2], + "text-size": [ + "interpolate", + ["exponential", 1.2], + ["zoom"], + 4, + 12, + 7, + 14, + 11, + 20 + ], + "visibility": "visible" + }, + "paint": { + "text-color": "rgba(255, 255, 255, 1)", + "text-halo-blur": 1, + "text-halo-color": "rgba(0, 0, 0, 1)", + "text-halo-width": 1 + } + }, + { + "id": "label_country_3", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "minzoom": 2, + "maxzoom": 24, + "filter": [ + "all", + ["==", ["get", "class"], "country"], + [">=", ["get", "rank"], 3] + ], + "layout": { + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Bold"], + "text-max-width": 6.25, + "text-size": ["interpolate", ["linear"], ["zoom"], 3, 9, 7, 17], + "visibility": "visible" + }, + "paint": { + "text-color": "#000", + "text-halo-blur": 1, + "text-halo-color": "#fff", + "text-halo-width": 1 + } + }, + { + "id": "label_country_2", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "maxzoom": 9, + "filter": [ + "all", + ["==", ["get", "class"], "country"], + ["==", ["get", "rank"], 2] + ], + "layout": { + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Bold"], + "text-max-width": 6.25, + "text-size": ["interpolate", ["linear"], ["zoom"], 2, 9, 5, 17], + "visibility": "visible" + }, + "paint": { + "text-color": "#000", + "text-halo-blur": 1, + "text-halo-color": "#fff", + "text-halo-width": 1 + } + }, + { + "id": "label_country_1", + "type": "symbol", + "source": "openmaptiles", + "source-layer": "place", + "maxzoom": 9, + "filter": [ + "all", + ["==", ["get", "class"], "country"], + ["==", ["get", "rank"], 1] + ], + "layout": { + "text-field": [ + "case", + ["has", "name:nonlatin"], + ["concat", ["get", "name:latin"], "\n", ["get", "name:nonlatin"]], + ["coalesce", ["get", "name_en"], ["get", "name"]] + ], + "text-font": ["Noto Sans Bold"], + "text-max-width": 6.25, + "text-size": ["interpolate", ["linear"], ["zoom"], 1, 9, 4, 17], + "visibility": "visible" + }, + "paint": { + "text-color": "rgba(255, 255, 255, 1)", + "text-halo-blur": 1, + "text-halo-color": "rgba(0, 0, 0, 1)", + "text-halo-width": 1 + } + } + ], + "id": "zquzkz0me" +} \ No newline at end of file diff --git a/themes/zone3/static/js/pong-game.js b/themes/zone3/static/js/pong-game.js new file mode 100644 index 0000000..c7709b7 --- /dev/null +++ b/themes/zone3/static/js/pong-game.js @@ -0,0 +1,134 @@ +const chaoszoneArray = [ + // Zeile 1: " ###### ## ## ### ####### ###### ######## ####### ## ## ######## " + [0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1], + + // Zeile 2: "## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## " + [1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0], + + // Zeile 3: "## ## ## ## ## ## ## ## ## ## ## #### ## ## " + [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0], + + // Zeile 4: "## ######### ## ## ## ## ###### ## ## ## ## ## ## ###### " + [1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0], + + // Zeile 5: "## ## ## ######### ## ## ## ## ## ## ## #### ## " + [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0], + + // Zeile 6: "## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## " + [1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0], + + // Zeile 7: " ###### ## ## ## ## ####### ###### ######## ####### ## ## ######## " + [0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1] +]; + +//register custom element +class PongGame extends HTMLElement { + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + } + + connectedCallback() { + this.render(); + } + + render() { + this.shadowRoot.innerHTML = ` + + + `; + + this.initGame(); + } + + initGame() { + const canvas = this.shadowRoot.getElementById('pongCanvas'); + const ctx = canvas.getContext('2d'); + + console.log('Initializing Pong Game'); + + // set cancan inner dimanesion + canvas.width = 520; + canvas.height = 100; + + // Game variables + let ballRadius = 2; + let x = canvas.width / 2; + let y = canvas.height - 30; + let dx = 2; + let dy = -2; + + // Draw the ball + function draw() { + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.beginPath(); + ctx.arc(x, y, ballRadius, 0, Math.PI * 2); + ctx.fillStyle = 'var(--ball-color)'; + ctx.fill(); + ctx.closePath(); + + // Draw the ASCII art + ctx.font = '10px monospace'; + ctx.fillStyle = '#ece2d5'; + //set text color + for (let row = 0; row < chaoszoneArray.length; row++) { + for (let col = 0; col < chaoszoneArray[row].length; col++) { + if (chaoszoneArray[row][col] === 1) { + ctx.fillText('#', col * 6 + 10, row * 12 + 20); + } + } + } + } + + // Update the game state + function update() { + draw(); + + // Move the ball + x += dx; + y += dy; + + // Bounce off walls + if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) { + dx = -dx; + } + if (y + dy > canvas.height - ballRadius || y + dy < ballRadius) { + dy = -dy; + } + + //detect collision with ASCII art and remove part of it + let col = Math.floor((x - 10) / 6); + let row = Math.floor((y - 20) / 12); + if (row >= 0 && row < chaoszoneArray.length && col >= 0 && col < chaoszoneArray[row].length) { + if (chaoszoneArray[row][col] === 1) { + chaoszoneArray[row][col] = 0; + dy = -dy; //bounce the ball + } + } + + requestAnimationFrame(update); + } + + update(); + } +} + +customElements.define('pong-game', PongGame); \ No newline at end of file diff --git a/themes/zone3/static/js/script.js b/themes/zone3/static/js/script.js index c7709b7..e69de29 100644 --- a/themes/zone3/static/js/script.js +++ b/themes/zone3/static/js/script.js @@ -1,134 +0,0 @@ -const chaoszoneArray = [ - // Zeile 1: " ###### ## ## ### ####### ###### ######## ####### ## ## ######## " - [0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1], - - // Zeile 2: "## ## ## ## ## ## ## ## ## ## ## ## ## ### ## ## " - [1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0], - - // Zeile 3: "## ## ## ## ## ## ## ## ## ## ## #### ## ## " - [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0], - - // Zeile 4: "## ######### ## ## ## ## ###### ## ## ## ## ## ## ###### " - [1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0], - - // Zeile 5: "## ## ## ######### ## ## ## ## ## ## ## #### ## " - [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,0,0,0], - - // Zeile 6: "## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ## " - [1,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0], - - // Zeile 7: " ###### ## ## ## ## ####### ###### ######## ####### ## ## ######## " - [0,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1] -]; - -//register custom element -class PongGame extends HTMLElement { - constructor() { - super(); - this.attachShadow({ mode: 'open' }); - } - - connectedCallback() { - this.render(); - } - - render() { - this.shadowRoot.innerHTML = ` - - - `; - - this.initGame(); - } - - initGame() { - const canvas = this.shadowRoot.getElementById('pongCanvas'); - const ctx = canvas.getContext('2d'); - - console.log('Initializing Pong Game'); - - // set cancan inner dimanesion - canvas.width = 520; - canvas.height = 100; - - // Game variables - let ballRadius = 2; - let x = canvas.width / 2; - let y = canvas.height - 30; - let dx = 2; - let dy = -2; - - // Draw the ball - function draw() { - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.beginPath(); - ctx.arc(x, y, ballRadius, 0, Math.PI * 2); - ctx.fillStyle = 'var(--ball-color)'; - ctx.fill(); - ctx.closePath(); - - // Draw the ASCII art - ctx.font = '10px monospace'; - ctx.fillStyle = '#ece2d5'; - //set text color - for (let row = 0; row < chaoszoneArray.length; row++) { - for (let col = 0; col < chaoszoneArray[row].length; col++) { - if (chaoszoneArray[row][col] === 1) { - ctx.fillText('#', col * 6 + 10, row * 12 + 20); - } - } - } - } - - // Update the game state - function update() { - draw(); - - // Move the ball - x += dx; - y += dy; - - // Bounce off walls - if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) { - dx = -dx; - } - if (y + dy > canvas.height - ballRadius || y + dy < ballRadius) { - dy = -dy; - } - - //detect collision with ASCII art and remove part of it - let col = Math.floor((x - 10) / 6); - let row = Math.floor((y - 20) / 12); - if (row >= 0 && row < chaoszoneArray.length && col >= 0 && col < chaoszoneArray[row].length) { - if (chaoszoneArray[row][col] === 1) { - chaoszoneArray[row][col] = 0; - dy = -dy; //bounce the ball - } - } - - requestAnimationFrame(update); - } - - update(); - } -} - -customElements.define('pong-game', PongGame); \ No newline at end of file