From 143f5b522dc22d18ef1898fba40c4ece8a170cfd Mon Sep 17 00:00:00 2001 From: d11n Date: Fri, 20 Jan 2023 18:15:41 +0100 Subject: [PATCH] Update Meetup Map (#155) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Benutzt die Meetup-Daten aus dem Portal und enhält nun auch mobil eine Ansicht der Karte. --- content/meetups-old.json | 879 +++++++ content/meetups.json | 2048 ++++++++++++----- src/css/base/variables.css | 3 + src/css/sections/meetups.css | 6 + src/gesundes-geld.pug | 19 +- src/includes/_head.pug | 1 + src/includes/mixins.pug | 90 +- src/meetups.pug | 21 +- static/css/gesundes-geld.css | 10 + .../vendor/jvectormap/jquery-jvectormap.css | 135 ++ static/vendor/jvectormap/jquery-jvectormap.js | 1 + static/vendor/jvectormap/jquery.min.js | 2 + static/vendor/jvectormap/maps/at_mill.js | 1 + static/vendor/jvectormap/maps/ch_mill.js | 1 + static/vendor/jvectormap/maps/de_mill.js | 1 + static/vendor/jvectormap/maps/europe_mill.js | 1 + tasks/generate_pages.js | 1 - tasks/generate_site_data.js | 28 +- 18 files changed, 2543 insertions(+), 705 deletions(-) create mode 100644 content/meetups-old.json create mode 100644 static/vendor/jvectormap/jquery-jvectormap.css create mode 100644 static/vendor/jvectormap/jquery-jvectormap.js create mode 100644 static/vendor/jvectormap/jquery.min.js create mode 100644 static/vendor/jvectormap/maps/at_mill.js create mode 100644 static/vendor/jvectormap/maps/ch_mill.js create mode 100644 static/vendor/jvectormap/maps/de_mill.js create mode 100644 static/vendor/jvectormap/maps/europe_mill.js diff --git a/content/meetups-old.json b/content/meetups-old.json new file mode 100644 index 00000000000..9b54b66f996 --- /dev/null +++ b/content/meetups-old.json @@ -0,0 +1,879 @@ +[ + { + "name": "Einundzwanzig Nordfriesland", + "url": "https://t.me/Einundzwanzig_NF", + "top": 1, + "left": 34, + "country": "DE", + "state": ["Schleswig-Holstein"] + }, + { + "name": "Einundzwanzig Rostock", + "url": "https://t.me/einundzwanzigRostock", + "top": 7, + "left": 55, + "country": "DE", + "state": ["Mecklenburg-Vorpommern"] + }, + { + "name": "Einundzwanzig Heilbronn", + "url": "https://t.me/einundzwanzigHeilbronn", + "top": 62, + "left": 30, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Lübeck", + "url": "https://www.bitcoin-luebeck.de/", + "top": 11, + "left": 45, + "country": "DE", + "state": ["Hamburg"] + }, + { + "name": "Einundzwanzig Wacken", + "url": "https://t.me/einundzwanzigWOA", + "top": 10, + "left": 37, + "country": "DE", + "state": ["Schleswig-Holstein"] + }, + { + "name": "Einundzwanzig Mecklenburg-Vorpommern", + "url": "https://t.me/EinundzwanzigMV", + "top": 11, + "left": 59, + "country": "DE", + "state": ["Mecklenburg-Vorpommern"] + }, + { + "name": "Einundzwanzig Ostfriesland", + "url": "https://t.me/Einundzwanzig_Ostriesland", + "top": 13, + "left": 20, + "country": "DE", + "state": ["Niedersachsen"] + }, + { + "name": "Einundzwanzig Hamburg", + "url": "https://t.me/Einundzwanzig_HH", + "top": 17, + "left": 38, + "country": "DE", + "state": ["Hamburg", "Bremen", "Niedersachsen"] + }, + { + "name": "Einundzwanzig Norddeutschland", + "url": "https://t.me/Einundzwanzig_Norden", + "top": 19, + "left": 37, + "country": "DE", + "state": ["Hamburg", "Bremen", "Niedersachsen"] + }, + { + "name": "Einundzwanzig Bremen", + "url": "https://t.me/Einundzwanzig_Norden", + "top": 20, + "left": 29, + "country": "DE", + "state": ["Bremen"] + }, + { + "name": "Einundzwanzig Oldenburg", + "url": "https://t.me/einundzwanzig_OL", + "top": 18, + "left": 27, + "country": "DE", + "state": ["Niedersachsen"] + }, + { + "name": "Bitcoin Berlin", + "url": "https://www.meetup.com/de-DE/Bitcoin-Lab-Berlin/", + "top": 25, + "left": 65, + "country": "DE", + "state": ["Berlin"] + }, + { + "name": "Einundzwanzig Berlin", + "url": "https://t.me/Einundzwanzig_Berlin", + "top": 26, + "left": 65, + "country": "DE", + "state": ["Berlin"] + }, + { + "name": "Einundzwanzig Potsdam", + "url": "https://t.me/Einundzwanzig_Potsdam", + "top": 27, + "left": 63, + "country": "DE", + "state": ["Brandenburg"] + }, + { + "name": "Bitcoin Hannover", + "url": "https://t.me/+RSXEIZ_xoq1lNDM6", + "top": 27, + "left": 37, + "country": "DE", + "state": ["Niedersachsen"] + }, + { + "name": "Einundzwanzig Vreden", + "url": "https://t.me/Einundzwanzig_VREDEN", + "top": 29, + "left": 14, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Osnabrück/Münster", + "url": "https://t.me/Einundzwanzig_OS", + "top": 29, + "left": 27, + "country": "DE", + "state": ["Niedersachsen"] + }, + { + "name": "Einundzwanzig Oelde", + "url": "https://t.me/EinundzwanzigOelde", + "top": 31, + "left": 27, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Sachsen-Anhalt", + "url": "https://t.me/Meetup21SA", + "top": 31, + "left": 53, + "country": "DE", + "state": ["Sachsen-Anhalt"] + }, + { + "name": "Einundzwanzig Ostwestfalen-Lippe", + "url": "https://t.me/einundzwanzig_owl", + "top": 32, + "left": 30, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Sauerland", + "url": "https://t.me/einundzwanzig_sauerland", + "top": 35, + "left": 30, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Recklinghausen", + "url": "https://t.me/Einundzwanzig_Recklinghausen", + "top": 33, + "left": 22, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Dortmund", + "url": "https://t.me/Dortmund_Einundzwanzig_Bitcoin", + "top": 34, + "left": 24, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Elbe-Elster", + "url": "https://t.me/Einundzwanzig_EE", + "top": 33, + "left": 64, + "country": "DE", + "state": ["Brandenburg"] + }, + { + "name": "Einundzwanzig Göttingen", + "url": "https://t.me/einundzwanzigsuedniedersachsen", + "top": 34, + "left": 41, + "country": "DE", + "state": ["Niedersachsen"] + }, + { + "name": "Einundzwanzig Essen", + "url": "https://t.me/Einundzwanzig_Ruhrgebiet", + "top": 35, + "left": 20, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Bitcoin Leipzig", + "url": "https://www.meetup.com/de-DE/Leipziger-Bitcoin-Stammtisch/", + "top": 37, + "left": 60, + "country": "DE", + "state": ["Sachsen"] + }, + { + "name": "Einundzwanzig Düsseldorf", + "url": "https://t.me/einundzwanzig_duesseldorf", + "top": 38, + "left": 16, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Solingen", + "url": "https://t.me/einundzwanzig_solingen", + "top": 39, + "left": 18, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Heinsberg", + "url": "https://t.me/Einundzwanzig_HEINSBERG", + "top": 40, + "left": 9, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Bitcoin Dresden", + "url": "https://www.meetup.com/de-DE/Dresdner-Bitcoin-Stammtisch", + "top": 40, + "left": 69, + "country": "DE", + "state": ["Sachsen"] + }, + { + "name": "Einundzwanzig Sachsen", + "url": "https://t.me/einundzwanzigsachsen", + "top": 38, + "left": 70, + "country": "DE", + "state": ["Sachsen"] + }, + { + "name": "Einundzwanzig Thüringen", + "url": "https://t.me/einundzwanzigthueringen", + "top": 41, + "left": 46, + "country": "DE", + "state": ["Thüringen"] + }, + { + "name": "Einundzwanzig Köln", + "url": "https://t.me/einundzwanzig_koeln", + "top": 42, + "left": 17, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Aachen", + "url": "https://t.me/einundzwanzig_aachen", + "top": 43, + "left": 8, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Siegen", + "url": "https://t.me/einundzwanzig_siegen", + "top": 43, + "left": 23, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Bonn", + "url": "https://t.me/einundzwanzig_bonn", + "top": 45, + "left": 18, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Hennef", + "url": "https://t.me/einundzwanzig_hennef", + "top": 44, + "left": 20, + "country": "DE", + "state": ["Nordrhein-Westfalen"] + }, + { + "name": "Einundzwanzig Fulda", + "url": "https://t.me/einundzwanzigFD", + "top": 46, + "left": 38, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Koblenz", + "url": "https://t.me/Einundzwanzig_Ko", + "top": 48, + "left": 21, + "country": "DE", + "state": ["Rheinland-Pfalz"] + }, + { + "name": "Einundzwanzig Wiesbaden", + "url": "https://t.me/einundzwanzigwiesbaden", + "top": 50, + "left": 20, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Frankfurt am Main", + "url": "https://t.me/einundzwanzigffm", + "top": 51, + "left": 26, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Langen", + "url": "https://t.me/bitcoinlangen", + "top": 52, + "left": 26, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Darmstadt", + "url": "https://t.me/einundzwanzigda", + "top": 53, + "left": 26, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Mainz", + "url": "https://t.me/Einundzwanzig_MAINZ", + "top": 55, + "left": 24, + "country": "DE", + "state": ["Rheinland-Pfalz"] + }, + { + "name": "Einundzwanzig Mannheim", + "url": "https://t.me/Einundzwanzig_MANNHEIM", + "top": 58, + "left": 25, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Saarland", + "url": "https://t.me/einundzwanzigsaarland", + "top": 58, + "left": 13, + "country": "DE", + "state": ["Saarland"] + }, + { + "name": "Einundzwanzig Saarlouis", + "url": "https://t.me/EinundzwanzigSaarlouis", + "top": 57, + "left": 12, + "country": "DE", + "state": ["Saarland"] + }, + { + "name": "Einundzwanzig Pfalz", + "url": "https://t.me/einundzwanzigPfalz", + "top": 59, + "left": 19, + "country": "DE", + "state": ["Rheinland-Pfalz"] + }, + { + "name": "Einundzwanzig Unterfranken", + "url": "https://t.me/einundzwanzig_unterfranken", + "top": 51, + "left": 42, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Franken", + "url": "https://t.me/Einundzwanzig_FRANKEN", + "top": 59, + "left": 52, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Heidelberg", + "url": "https://t.me/Einundzwanzig_HEIDELBERG", + "top": 60, + "left": 27, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Bitcoin Karlsruhe", + "url": "https://www.meetup.com/BitcoinKarlsruhe/", + "top": 63, + "left": 25, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Karlsruhe", + "url": "https://t.me/BitcoinKarlsruhe", + "top": 64, + "left": 25, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Ellwangen", + "url": "https://t.me/einundzwanzigEllwangen", + "top": 64, + "left": 40, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Stuttgart", + "url": "https://t.me/einundzwanzigStuttgart", + "top": 66, + "left": 30, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Passau", + "url": "https://t.me/Einundzwanzig_Passau", + "top": 67, + "left": 68, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Rosenheim", + "url": "https://t.me/Einundzwanzig_Rosenheim", + "top": 75, + "left": 57, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Pfarrkirchen", + "url": "https://t.me/BTCPAN", + "top": 68, + "left": 65, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Freising", + "url": "https://t.me/Einundzwanzig_FS", + "top": 70, + "left": 56, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Augsburg", + "url": "https://t.me/Einundzwanzig_Augsburg", + "top": 70, + "left": 46, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Bitcoin Ulm", + "url": "https://www.meetup.com/de-DE/Bitcoin-Ulm/", + "top": 70, + "left": 38, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Balingen", + "url": "https://t.me/+wNgJ6sTsTOljMjFi", + "top": 71, + "left": 27, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Sigmaringen", + "url": "https://t.me/+OyyMlOQv-hYwOGIy", + "top": 72, + "left": 30, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Bitcoin München", + "url": "https://www.meetup.com/de-DE/Bitcoin-Munich/", + "top": 72, + "left": 53, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Memmingen", + "url": "https://t.me/BTCOnlyMM21", + "top": 73, + "left": 40, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Freiburg", + "url": "https://t.me/Einundzwanzig_Freiburg", + "top": 73, + "left": 21, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Konstanz", + "url": "https://t.me/Einundzwanzig_Konstanz", + "top": 77, + "left": 29, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Friedrichshafen", + "url": "https://t.me/+i7hOYiYDVagyOWVi", + "top": 78, + "left": 35, + "country": "DE", + "state": ["Baden-Württemberg"] + }, + { + "name": "Einundzwanzig Kempten", + "url": "https://t.me/EinundzwanzigKempten", + "top": 77, + "left": 41, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Wien", + "url": "https://t.me/+eXlL83e7wO0yZjg0", + "top": 70, + "left": 93, + "country": "AT", + "state": ["Wien"] + }, + { + "name": "Einundzwanzig Wien (Matrix Group)", + "url": "https://matrix.to/#/%2321_Wien-Meetup:matrix.org", + "top": 72, + "left": 93, + "country": "AT", + "state": ["Wien"] + }, + { + "name": "Bitcoin Wien", + "url": "https://bitcoin-austria.at/events/", + "top": 69, + "left": 93, + "country": "AT", + "state": ["Wien"] + }, + + { + "name": "Einundzwanzig Ried i.I.", + "url": "https://t.me/joinchat/ilNlHsXTLqsyOTA0", + "top": 70, + "left": 69, + "country": "AT", + "state": ["Oberösterreich"] + }, + { + "name": "Einundzwanzig Salzburg", + "url": "https://t.me/BitcoinSalzburg", + "top": 76, + "left": 66, + "country": "AT", + "state": ["Salzburg"] + }, + { + "name": "Einundzwanzig Vorarlberg", + "url": "https://t.me/BitcoinVorarlberg", + "top": 81, + "left": 37, + "country": "AT", + "state": ["Vorarlberg"] + }, + { + "name": "Einundzwanzig Tirol", + "url": "https://t.me/Einundzwanzig_Tirol", + "top": 82, + "left": 51, + "country": "AT", + "state": ["Tirol"] + }, + { + "name": "Bitcoin Graz", + "url": "https://bitcoin-austria.at/events/", + "top": 83, + "left": 87, + "country": "AT", + "state": ["Steiermark"] + }, + { + "name": "Einundzwanzig Klagenfurt", + "url": "https://t.me/Einundzwanzig_Kaernten", + "top": 88, + "left": 73, + "country": "AT", + "state": ["Kärnten"] + }, + { + "name": "Einundzwanzig Basel", + "url": "https://t.me/EinundzwanzigBS", + "top": 80, + "left": 19, + "country": "CH", + "state": ["Basel"] + }, + { + "name": "Bitcoin Bern", + "url": "https://www.meetup.com/de-DE/bitcoin-bern/events/", + "top": 85, + "left": 17, + "country": "CH", + "state": ["Bern"] + }, + { + "name": "Einezwänzg Solothurn", + "url": "https://t.me/+o2gLvxb2SxFhNTI0", + "top": 82, + "left": 16, + "country": "CH", + "state": ["Solothurn"] + }, + { + "name": "32-Einezwänzg Bitcoin Seeland", + "url": "https://t.me/Einundzwanzig_Seeland", + "top": 82.5, + "left": 15.5, + "country": "CH", + "state": ["Bern"] + }, + { + "name": "Bitcoin Zürich", + "url": "https://www.meetup.com/de-DE/Bitcoin-Meetup-Switzerland/", + "top": 81, + "left": 27, + "country": "CH", + "state": ["Zürich"] + }, + { + "name": "Bitcoin Zürich (Beginners)", + "url": "https://www.meetup.com/de-DE/bitcoin-4-beginners-meetup-zurich/", + "top": 82.5, + "left": 27, + "country": "CH", + "state": ["Zürich"] + }, + { + "name": "Einundzwanzig Schweiz", + "url": "https://t.me/joinchat/8-FBDoq3Y9hkODZk", + "top": 87, + "left": 23, + "country": "CH", + "state": ["Bern", "Luzern", "Nidwalden", "Zürich", "Zug", "Solothurn"] + }, + { + "name": "Einundzwanzig Ostschweiz", + "url": "https://www.meetup.com/de-DE/einundzwanzig-bitcoin-meetup-schweiz/", + "top": 80, + "left": 31, + "country": "CH", + "state": [ + "St.Gallen", + "Graubünden", + "Glarus", + "Thurgau", + "Appenzell Ausserrhoden", + "Appenzell Innerrhoden" + ] + }, + { + "name": "Einundzwanzig Thurgau", + "url": "https://t.me/Einundzwanzig_Thurgau", + "top": 79, + "left": 29, + "country": "CH", + "state": ["Thurgau"] + }, + { + "name": "Einundzwanzig Liechtenstein", + "url": "https://t.me/joinchat/0UnzuwPmiitlMzE0", + "top": 84, + "left": 35, + "country": "LI", + "state": ["Liechtenstein"] + }, + { + "name": "Einundzwanzig Südtirol", + "url": "https://t.me/Einundzwanzig_Suedtirol", + "top": 88, + "left": 51, + "country": "IT", + "state": ["Südtirol"] + }, + { + "name": "Einundzwanzig Gran Canaria", + "url": "https://t.me/GranCanaria21", + "country": "ES", + "state": ["Canaria"] + }, + { + "name": "Einundzwanzig Styria", + "url": "https://t.me/Einundzwanzig_Styria", + "top": 84, + "left": 87, + "country": "AT", + "state": ["Steiermark"] + }, + { + "name": "Einundzwanzig Regensburg", + "url": "https://t.me/+2s5SRFj8khYwYzNi", + "top": 62, + "left": 57, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Cham", + "url": "https://t.me/BitcoinMeetupCham", + "top": 60, + "left": 62, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Nordburgenland", + "url": "https://t.me/Einundzwanzig_Meetup_Nordbgld", + "top": 73, + "left": 97, + "country": "AT", + "state": ["Burgenland"] + }, + { + "name": "Einundzwanzig Linz", + "url": "https://t.me/Einundzwanzig_Linz", + "top": 69, + "left": 77, + "country": "AT", + "state": ["Oberösterreich"] + }, + { + "name": "Einundzwanzig Trier", + "url": "https://t.me/Einundzwanzig_Trier", + "top": 55, + "left": 10, + "country": "DE", + "state": ["Rheinland-Pfalz"] + }, + { + "name": "Einundzwanzig Portugal", + "url": "https://t.me/EinundzwanzigPortugal", + "country": "PT", + "state": ["Portugal"] + }, + { + "name": "Einundzwanzig Luxembourg", + "url": "https://t.me/einundzwanzigLU", + "top": 56, + "left": 5, + "country": "LU", + "state": ["Luxembourg"] + } + , + { + "name": "Einundzwanzig Oberland", + "url": "https://t.me/Einundzwanzig_Oberland", + "top": 79, + "left": 49, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Herrsching", + "url": "https://t.me/Einundzwanzig_Herrsching", + "top": 73, + "left": 50, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Kassel", + "url": "https://t.me/einundzwanzig_kassel", + "top": 38, + "left": 38, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Gelnhausen", + "url": "https://t.me/einundzwanzig_gelnhausen", + "top": 48, + "left": 31, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Limburg", + "url": "https://t.me/+dXengs7l2Y8yNDA6", + "top": 49, + "left": 30, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Hochtaunuskreis", + "url": "https://t.me/bitcoin_hochtaunuskreis", + "top": 50, + "left": 30, + "country": "DE", + "state": ["Hessen"] + }, + { + "name": "Einundzwanzig Rhoihesse", + "url": "https://t.me/EinundzwanzigRHH", + "top": 57, + "left": 23, + "country": "DE", + "state": ["Rheinland-Pfalz"] + }, + { + "name": "Bitcoin Görlitz", + "url": "https://bitcoin-goerlitz.de", + "top": 38, + "left": 78.5, + "country": "DE", + "state": ["Sachsen"] + }, + { + "name": "Einundzwanzig Ingolstadt", + "url": "https://t.me/EinundzwanzigIngolstadt", + "top": 66, + "left": 52, + "country": "DE", + "state": ["Bayern"] + }, + { + "name": "Einundzwanzig Vulkaneifel", + "url": "https://t.me/Einundzwanzig_Vulka", + "top": 52, + "left": 12, + "country": "DE", + "state": ["Rheinland-Pfalz"] + } +] diff --git a/content/meetups.json b/content/meetups.json index 9b54b66f996..0c9a97ae9f7 100644 --- a/content/meetups.json +++ b/content/meetups.json @@ -1,59 +1,18 @@ [ { - "name": "Einundzwanzig Nordfriesland", - "url": "https://t.me/Einundzwanzig_NF", - "top": 1, - "left": 34, - "country": "DE", - "state": ["Schleswig-Holstein"] - }, - { - "name": "Einundzwanzig Rostock", - "url": "https://t.me/einundzwanzigRostock", - "top": 7, - "left": 55, - "country": "DE", - "state": ["Mecklenburg-Vorpommern"] - }, - { - "name": "Einundzwanzig Heilbronn", - "url": "https://t.me/einundzwanzigHeilbronn", - "top": 62, - "left": 30, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Lübeck", - "url": "https://www.bitcoin-luebeck.de/", - "top": 11, - "left": 45, - "country": "DE", - "state": ["Hamburg"] - }, - { - "name": "Einundzwanzig Wacken", - "url": "https://t.me/einundzwanzigWOA", - "top": 10, - "left": 37, - "country": "DE", - "state": ["Schleswig-Holstein"] - }, - { - "name": "Einundzwanzig Mecklenburg-Vorpommern", - "url": "https://t.me/EinundzwanzigMV", - "top": 11, - "left": 59, - "country": "DE", - "state": ["Mecklenburg-Vorpommern"] - }, - { - "name": "Einundzwanzig Ostfriesland", - "url": "https://t.me/Einundzwanzig_Ostriesland", - "top": 13, + "name": "Einundzwanzig Wiesbaden", + "url": "https://t.me/einundzwanzigwiesbaden", + "top": 50, "left": 20, "country": "DE", - "state": ["Niedersachsen"] + "state": [ + "Hessen" + ], + "city": "Wiesbaden", + "longitude": 8.2416556, + "latitude": 50.0820384, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Hamburg", @@ -61,15 +20,16 @@ "top": 17, "left": 38, "country": "DE", - "state": ["Hamburg", "Bremen", "Niedersachsen"] - }, - { - "name": "Einundzwanzig Norddeutschland", - "url": "https://t.me/Einundzwanzig_Norden", - "top": 19, - "left": 37, - "country": "DE", - "state": ["Hamburg", "Bremen", "Niedersachsen"] + "state": [ + "Hamburg", + "Bremen", + "Niedersachsen" + ], + "city": "Hamburg", + "longitude": 9.993682, + "latitude": 53.551086, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Bremen", @@ -77,15 +37,14 @@ "top": 20, "left": 29, "country": "DE", - "state": ["Bremen"] - }, - { - "name": "Einundzwanzig Oldenburg", - "url": "https://t.me/einundzwanzig_OL", - "top": 18, - "left": 27, - "country": "DE", - "state": ["Niedersachsen"] + "state": [ + "Bremen" + ], + "city": "Bremen", + "longitude": 8.8071646, + "latitude": 53.0758196, + "twitter_username": null, + "website": null }, { "name": "Bitcoin Berlin", @@ -93,47 +52,29 @@ "top": 25, "left": 65, "country": "DE", - "state": ["Berlin"] - }, - { - "name": "Einundzwanzig Berlin", - "url": "https://t.me/Einundzwanzig_Berlin", - "top": 26, - "left": 65, - "country": "DE", - "state": ["Berlin"] - }, - { - "name": "Einundzwanzig Potsdam", - "url": "https://t.me/Einundzwanzig_Potsdam", - "top": 27, - "left": 63, - "country": "DE", - "state": ["Brandenburg"] + "state": [ + "Berlin" + ], + "city": "Berlin", + "longitude": 13.3888599, + "latitude": 52.5170365, + "twitter_username": null, + "website": null }, { "name": "Bitcoin Hannover", - "url": "https://t.me/+RSXEIZ_xoq1lNDM6", + "url": "https://t.me/joinchat/CE-3VDEiVBVmMjNi", "top": 27, "left": 37, "country": "DE", - "state": ["Niedersachsen"] - }, - { - "name": "Einundzwanzig Vreden", - "url": "https://t.me/Einundzwanzig_VREDEN", - "top": 29, - "left": 14, - "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Einundzwanzig Osnabrück/Münster", - "url": "https://t.me/Einundzwanzig_OS", - "top": 29, - "left": 27, - "country": "DE", - "state": ["Niedersachsen"] + "state": [ + "Niedersachsen" + ], + "city": "Hannover", + "longitude": 6.8236481, + "latitude": 52.035862, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Oelde", @@ -141,23 +82,14 @@ "top": 31, "left": 27, "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Einundzwanzig Sachsen-Anhalt", - "url": "https://t.me/Meetup21SA", - "top": 31, - "left": 53, - "country": "DE", - "state": ["Sachsen-Anhalt"] - }, - { - "name": "Einundzwanzig Ostwestfalen-Lippe", - "url": "https://t.me/einundzwanzig_owl", - "top": 32, - "left": 30, - "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Osnabrück", + "longitude": 8.1453352, + "latitude": 51.8260823, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Sauerland", @@ -165,23 +97,14 @@ "top": 35, "left": 30, "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Einundzwanzig Recklinghausen", - "url": "https://t.me/Einundzwanzig_Recklinghausen", - "top": 33, - "left": 22, - "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Einundzwanzig Dortmund", - "url": "https://t.me/Dortmund_Einundzwanzig_Bitcoin", - "top": 34, - "left": 24, - "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Sauerland", + "longitude": 8.0475484, + "latitude": 51.2609835, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Elbe-Elster", @@ -189,39 +112,14 @@ "top": 33, "left": 64, "country": "DE", - "state": ["Brandenburg"] - }, - { - "name": "Einundzwanzig Göttingen", - "url": "https://t.me/einundzwanzigsuedniedersachsen", - "top": 34, - "left": 41, - "country": "DE", - "state": ["Niedersachsen"] - }, - { - "name": "Einundzwanzig Essen", - "url": "https://t.me/Einundzwanzig_Ruhrgebiet", - "top": 35, - "left": 20, - "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Bitcoin Leipzig", - "url": "https://www.meetup.com/de-DE/Leipziger-Bitcoin-Stammtisch/", - "top": 37, - "left": 60, - "country": "DE", - "state": ["Sachsen"] - }, - { - "name": "Einundzwanzig Düsseldorf", - "url": "https://t.me/einundzwanzig_duesseldorf", - "top": 38, - "left": 16, - "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Brandenburg" + ], + "city": "Elbe-Elster", + "longitude": 13.4804916, + "latitude": 51.6273649, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Solingen", @@ -229,7 +127,14 @@ "top": 39, "left": 18, "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Solingen", + "longitude": 7.0845893, + "latitude": 51.1721629, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Heinsberg", @@ -237,15 +142,14 @@ "top": 40, "left": 9, "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Bitcoin Dresden", - "url": "https://www.meetup.com/de-DE/Dresdner-Bitcoin-Stammtisch", - "top": 40, - "left": 69, - "country": "DE", - "state": ["Sachsen"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Heinsberg", + "longitude": 6.0984461, + "latitude": 51.0654268, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Sachsen", @@ -253,23 +157,14 @@ "top": 38, "left": 70, "country": "DE", - "state": ["Sachsen"] - }, - { - "name": "Einundzwanzig Thüringen", - "url": "https://t.me/einundzwanzigthueringen", - "top": 41, - "left": 46, - "country": "DE", - "state": ["Thüringen"] - }, - { - "name": "Einundzwanzig Köln", - "url": "https://t.me/einundzwanzig_koeln", - "top": 42, - "left": 17, - "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Sachsen" + ], + "city": "Sachsen", + "longitude": 13.4585052, + "latitude": 50.9295798, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Aachen", @@ -277,15 +172,29 @@ "top": 43, "left": 8, "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Aachen", + "longitude": 6.083862, + "latitude": 50.776351, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Siegen", - "url": "https://t.me/einundzwanzig_siegen", - "top": 43, - "left": 23, + "name": "Einundzwanzig Heilbronn", + "url": "https://t.me/einundzwanzigHeilbronn", + "top": 62, + "left": 30, "country": "DE", - "state": ["Nordrhein-Westfalen"] + "state": [ + "Baden-Württemberg" + ], + "city": "Heilbronn", + "longitude": 9.210879, + "latitude": 49.142693, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Bonn", @@ -293,47 +202,14 @@ "top": 45, "left": 18, "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Einundzwanzig Hennef", - "url": "https://t.me/einundzwanzig_hennef", - "top": 44, - "left": 20, - "country": "DE", - "state": ["Nordrhein-Westfalen"] - }, - { - "name": "Einundzwanzig Fulda", - "url": "https://t.me/einundzwanzigFD", - "top": 46, - "left": 38, - "country": "DE", - "state": ["Hessen"] - }, - { - "name": "Einundzwanzig Koblenz", - "url": "https://t.me/Einundzwanzig_Ko", - "top": 48, - "left": 21, - "country": "DE", - "state": ["Rheinland-Pfalz"] - }, - { - "name": "Einundzwanzig Wiesbaden", - "url": "https://t.me/einundzwanzigwiesbaden", - "top": 50, - "left": 20, - "country": "DE", - "state": ["Hessen"] - }, - { - "name": "Einundzwanzig Frankfurt am Main", - "url": "https://t.me/einundzwanzigffm", - "top": 51, - "left": 26, - "country": "DE", - "state": ["Hessen"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Bonn", + "longitude": 7.10066, + "latitude": 50.735851, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Langen", @@ -341,71 +217,14 @@ "top": 52, "left": 26, "country": "DE", - "state": ["Hessen"] - }, - { - "name": "Einundzwanzig Darmstadt", - "url": "https://t.me/einundzwanzigda", - "top": 53, - "left": 26, - "country": "DE", - "state": ["Hessen"] - }, - { - "name": "Einundzwanzig Mainz", - "url": "https://t.me/Einundzwanzig_MAINZ", - "top": 55, - "left": 24, - "country": "DE", - "state": ["Rheinland-Pfalz"] - }, - { - "name": "Einundzwanzig Mannheim", - "url": "https://t.me/Einundzwanzig_MANNHEIM", - "top": 58, - "left": 25, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Saarland", - "url": "https://t.me/einundzwanzigsaarland", - "top": 58, - "left": 13, - "country": "DE", - "state": ["Saarland"] - }, - { - "name": "Einundzwanzig Saarlouis", - "url": "https://t.me/EinundzwanzigSaarlouis", - "top": 57, - "left": 12, - "country": "DE", - "state": ["Saarland"] - }, - { - "name": "Einundzwanzig Pfalz", - "url": "https://t.me/einundzwanzigPfalz", - "top": 59, - "left": 19, - "country": "DE", - "state": ["Rheinland-Pfalz"] - }, - { - "name": "Einundzwanzig Unterfranken", - "url": "https://t.me/einundzwanzig_unterfranken", - "top": 51, - "left": 42, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Franken", - "url": "https://t.me/Einundzwanzig_FRANKEN", - "top": 59, - "left": 52, - "country": "DE", - "state": ["Bayern"] + "state": [ + "Hessen" + ], + "city": "Langen", + "longitude": 8.6671682, + "latitude": 49.9927036, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Heidelberg", @@ -413,15 +232,14 @@ "top": 60, "left": 27, "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Bitcoin Karlsruhe", - "url": "https://www.meetup.com/BitcoinKarlsruhe/", - "top": 63, - "left": 25, - "country": "DE", - "state": ["Baden-Württemberg"] + "state": [ + "Baden-Württemberg" + ], + "city": "Heidelberg", + "longitude": 8.694724, + "latitude": 49.4093582, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Karlsruhe", @@ -429,39 +247,14 @@ "top": 64, "left": 25, "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Ellwangen", - "url": "https://t.me/einundzwanzigEllwangen", - "top": 64, - "left": 40, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Stuttgart", - "url": "https://t.me/einundzwanzigStuttgart", - "top": 66, - "left": 30, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Passau", - "url": "https://t.me/Einundzwanzig_Passau", - "top": 67, - "left": 68, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Rosenheim", - "url": "https://t.me/Einundzwanzig_Rosenheim", - "top": 75, - "left": 57, - "country": "DE", - "state": ["Bayern"] + "state": [ + "Baden-Württemberg" + ], + "city": "Karlsruhe", + "longitude": 8.4034195, + "latitude": 49.0068705, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Pfarrkirchen", @@ -469,47 +262,14 @@ "top": 68, "left": 65, "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Freising", - "url": "https://t.me/Einundzwanzig_FS", - "top": 70, - "left": 56, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Augsburg", - "url": "https://t.me/Einundzwanzig_Augsburg", - "top": 70, - "left": 46, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Bitcoin Ulm", - "url": "https://www.meetup.com/de-DE/Bitcoin-Ulm/", - "top": 70, - "left": 38, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Balingen", - "url": "https://t.me/+wNgJ6sTsTOljMjFi", - "top": 71, - "left": 27, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Sigmaringen", - "url": "https://t.me/+OyyMlOQv-hYwOGIy", - "top": 72, - "left": 30, - "country": "DE", - "state": ["Baden-Württemberg"] + "state": [ + "Bayern" + ], + "city": "Pfarrkirchen", + "longitude": 12.9386266, + "latitude": 48.4320329, + "twitter_username": null, + "website": null }, { "name": "Bitcoin München", @@ -517,63 +277,29 @@ "top": 72, "left": 53, "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Memmingen", - "url": "https://t.me/BTCOnlyMM21", - "top": 73, - "left": 40, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Freiburg", - "url": "https://t.me/Einundzwanzig_Freiburg", - "top": 73, - "left": 21, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Konstanz", - "url": "https://t.me/Einundzwanzig_Konstanz", - "top": 77, - "left": 29, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Friedrichshafen", - "url": "https://t.me/+i7hOYiYDVagyOWVi", - "top": 78, - "left": 35, - "country": "DE", - "state": ["Baden-Württemberg"] - }, - { - "name": "Einundzwanzig Kempten", - "url": "https://t.me/EinundzwanzigKempten", - "top": 77, - "left": 41, - "country": "DE", - "state": ["Bayern"] + "state": [ + "Bayern" + ], + "city": "München", + "longitude": 11.5753822, + "latitude": 48.1371079, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Wien", - "url": "https://t.me/+eXlL83e7wO0yZjg0", + "url": "https://t.me/+kM_-ZHlOS-44YWNk", "top": 70, "left": 93, "country": "AT", - "state": ["Wien"] - }, - { - "name": "Einundzwanzig Wien (Matrix Group)", - "url": "https://matrix.to/#/%2321_Wien-Meetup:matrix.org", - "top": 72, - "left": 93, - "country": "AT", - "state": ["Wien"] + "state": [ + "Wien" + ], + "city": "Wien", + "longitude": 16.373819, + "latitude": 48.208176, + "twitter_username": null, + "website": null }, { "name": "Bitcoin Wien", @@ -581,40 +307,59 @@ "top": 69, "left": 93, "country": "AT", - "state": ["Wien"] - }, - - { - "name": "Einundzwanzig Ried i.I.", - "url": "https://t.me/joinchat/ilNlHsXTLqsyOTA0", - "top": 70, - "left": 69, - "country": "AT", - "state": ["Oberösterreich"] + "state": [ + "Wien" + ], + "city": "Wien", + "longitude": 16.373819, + "latitude": 48.208176, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Salzburg", - "url": "https://t.me/BitcoinSalzburg", - "top": 76, - "left": 66, - "country": "AT", - "state": ["Salzburg"] + "name": "Einundzwanzig Lübeck", + "url": "https://www.bitcoin-luebeck.de/", + "top": 11, + "left": 45, + "country": "DE", + "state": [ + "Hamburg" + ], + "city": "Lübeck", + "longitude": 10.686559, + "latitude": 53.865467, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Vorarlberg", - "url": "https://t.me/BitcoinVorarlberg", - "top": 81, - "left": 37, - "country": "AT", - "state": ["Vorarlberg"] + "name": "Einundzwanzig Trier", + "url": "https://t.me/Einundzwanzig_Trier", + "top": 55, + "left": 10, + "country": "DE", + "state": [ + "Rheinland-Pfalz" + ], + "city": "Trier", + "longitude": 6.6441878, + "latitude": 49.7596208, + "twitter_username": "EinundzwanzigTR", + "website": null }, { - "name": "Einundzwanzig Tirol", - "url": "https://t.me/Einundzwanzig_Tirol", - "top": 82, - "left": 51, + "name": "Einundzwanzig Linz", + "url": "https://t.me/Einundzwanzig_Linz", + "top": 69, + "left": 77, "country": "AT", - "state": ["Tirol"] + "state": [ + "Oberösterreich" + ], + "city": "Linz", + "longitude": 14.28583, + "latitude": 48.306938, + "twitter_username": "Einundzwanzig_L", + "website": null }, { "name": "Bitcoin Graz", @@ -622,15 +367,14 @@ "top": 83, "left": 87, "country": "AT", - "state": ["Steiermark"] - }, - { - "name": "Einundzwanzig Klagenfurt", - "url": "https://t.me/Einundzwanzig_Kaernten", - "top": 88, - "left": 73, - "country": "AT", - "state": ["Kärnten"] + "state": [ + "Steiermark" + ], + "city": "Graz", + "longitude": 15.4382786, + "latitude": 47.0708678, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Basel", @@ -638,31 +382,14 @@ "top": 80, "left": 19, "country": "CH", - "state": ["Basel"] - }, - { - "name": "Bitcoin Bern", - "url": "https://www.meetup.com/de-DE/bitcoin-bern/events/", - "top": 85, - "left": 17, - "country": "CH", - "state": ["Bern"] - }, - { - "name": "Einezwänzg Solothurn", - "url": "https://t.me/+o2gLvxb2SxFhNTI0", - "top": 82, - "left": 16, - "country": "CH", - "state": ["Solothurn"] - }, - { - "name": "32-Einezwänzg Bitcoin Seeland", - "url": "https://t.me/Einundzwanzig_Seeland", - "top": 82.5, - "left": 15.5, - "country": "CH", - "state": ["Bern"] + "state": [ + "Basel" + ], + "city": "Basel", + "longitude": 7.5878261, + "latitude": 47.5581077, + "twitter_username": null, + "website": null }, { "name": "Bitcoin Zürich", @@ -670,15 +397,988 @@ "top": 81, "left": 27, "country": "CH", - "state": ["Zürich"] + "state": [ + "Zürich" + ], + "city": "Zürich", + "longitude": 8.5410422, + "latitude": 47.3744489, + "twitter_username": null, + "website": null }, { - "name": "Bitcoin Zürich (Beginners)", - "url": "https://www.meetup.com/de-DE/bitcoin-4-beginners-meetup-zurich/", - "top": 82.5, - "left": 27, + "name": "Einundzwanzig Thurgau", + "url": "https://t.me/Einundzwanzig_Thurgau", + "top": 79, + "left": 29, "country": "CH", - "state": ["Zürich"] + "state": [ + "Thurgau" + ], + "city": "Thurgau", + "longitude": 9.1428769, + "latitude": 47.5859649, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Nordburgenland", + "url": "https://t.me/Einundzwanzig_Meetup_Nordbgld", + "top": 73, + "left": 97, + "country": "AT", + "state": [ + "Burgenland" + ], + "city": "Nordburgenland", + "longitude": 16.60317, + "latitude": 47.84248, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Oberland", + "url": "https://t.me/Einundzwanzig_Oberland", + "top": 79, + "left": 49, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Oberland", + "longitude": 11.4038717, + "latitude": 48.9467562, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Limburg", + "url": "https://t.me/+dXengs7l2Y8yNDA6", + "top": 49, + "left": 30, + "country": "DE", + "state": [ + "Hessen" + ], + "city": "Limburg", + "longitude": 5.9046302, + "latitude": 51.2015196, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Görlitz", + "url": "https://bitcoin-goerlitz.de", + "top": 38, + "left": 78.5, + "country": "DE", + "state": [ + "Sachsen" + ], + "city": "Görlitz", + "longitude": 14.991018, + "latitude": 51.1563185, + "twitter_username": null, + "website": null + }, + { + "name": "Yirmibir Istanbul", + "url": "https://t.me/YirmibirBitcoin", + "top": null, + "left": null, + "country": "TR", + "state": null, + "city": "Istanbul", + "longitude": 28.9662187, + "latitude": 41.0091982, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Ingolstadt", + "url": "https://t.me/EinundzwanzigIngolstadt", + "top": 66, + "left": 52, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Ingolstadt", + "longitude": 11.4250395, + "latitude": 48.7630165, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Osnabrück/Münster", + "url": "https://t.me/Einundzwanzig_OS", + "top": 29, + "left": 27, + "country": "DE", + "state": [ + "Niedersachsen" + ], + "city": "Osnabrück", + "longitude": 8.1453352, + "latitude": 51.8260823, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Salzburg", + "url": "https://t.me/BitcoinSalzburg", + "top": 76, + "left": 66, + "country": "AT", + "state": [ + "Salzburg" + ], + "city": "Salzburg", + "longitude": 13.0464806, + "latitude": 47.7981346, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Franken", + "url": "https://t.me/Einundzwanzig_FRANKEN", + "top": 59, + "left": 52, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Franken", + "longitude": 10.5722288, + "latitude": 49.3028611, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Mallorca (MBD)", + "url": "https://www.meetup.com/de-DE/Bitcoin-Mallorca/", + "top": null, + "left": null, + "country": "ES", + "state": null, + "city": "Palma", + "longitude": 2.64995, + "latitude": 39.56945, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Saarland Stammtisch St. Wendel", + "url": "https://t.me/+O4QRQXEEo_Y0MTZi", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "St. Wendel", + "longitude": 7.1725, + "latitude": 49.468056, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Rheinhessen", + "url": "https://t.me/EinundzwanzigRHH", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "Rhoihesse", + "longitude": 8.0347486, + "latitude": 49.7842147, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Konstanz", + "url": "https://t.me/Einundzwanzig_Konstanz", + "top": 77, + "left": 29, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Konstanz", + "longitude": 9.1750718, + "latitude": 47.659216, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Norddeutschland", + "url": "https://t.me/Einundzwanzig_Norden", + "top": 19, + "left": 37, + "country": "DE", + "state": [ + "Hamburg", + "Bremen", + "Niedersachsen" + ], + "city": "Hannover", + "longitude": 6.8236481, + "latitude": 52.035862, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Leipzig", + "url": "https://www.meetup.com/de-DE/Leipziger-Bitcoin-Stammtisch/", + "top": 37, + "left": 60, + "country": "DE", + "state": [ + "Sachsen" + ], + "city": "Leipzig", + "longitude": 12.3747329, + "latitude": 51.3406321, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Fulda", + "url": "https://t.me/einundzwanzigFD", + "top": 46, + "left": 38, + "country": "DE", + "state": [ + "Hessen" + ], + "city": "Fulda", + "longitude": 9.6770448, + "latitude": 50.5542328, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Mannheim", + "url": "https://t.me/Einundzwanzig_MANNHEIM", + "top": 58, + "left": 25, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Mannheim", + "longitude": 8.4673098, + "latitude": 49.4892913, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Augsburg", + "url": "https://t.me/Einundzwanzig_Augsburg", + "top": 70, + "left": 46, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Augsburg", + "longitude": 10.8986971, + "latitude": 48.3668041, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Balingen", + "url": "https://t.me/+wNgJ6sTsTOljMjFi", + "top": 71, + "left": 27, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Balingen", + "longitude": 8.85511, + "latitude": 48.27549, + "twitter_username": null, + "website": null + }, + { + "name": "Eenanzwanzeg Lëtzebuerg", + "url": "https://t.me/einundzwanzigLU", + "top": 56, + "left": 5, + "country": "LU", + "state": [ + "Luxembourg" + ], + "city": "Luxembourg", + "longitude": 6.1296751, + "latitude": 49.8158683, + "twitter_username": "@EinundzwanzigLU", + "website": null + }, + { + "name": "Einundzwanzig Kassel Bitcoin", + "url": "https://t.me/einundzwanzig_kassel", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "Kassel", + "longitude": 9.4924096, + "latitude": 51.3154546, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig OWL", + "url": "https://t.me/einundzwanzig_owl", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "OWL", + "longitude": 8.6457839, + "latitude": 51.9867058, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Süd Niedersachsen", + "url": "https://t.me/einundzwanzigsuedniedersachsen", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "Göttingen", + "longitude": 9.9351811, + "latitude": 51.5328328, + "twitter_username": null, + "website": null + }, + { + "name": "32-Einezwänzg Seeland", + "url": "https://t.me/Einundzwanzig_Seeland", + "top": null, + "left": null, + "country": "CH", + "state": null, + "city": "Lyss", + "longitude": 7.306577, + "latitude": 47.074029, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Heide", + "url": "https://t.me/Einundzwanzig_Norden", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "Handeloh", + "longitude": 9.83926, + "latitude": 53.24554, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Nordfriesland", + "url": "https://t.me/Einundzwanzig_NF", + "top": 1, + "left": 34, + "country": "DE", + "state": [ + "Schleswig-Holstein" + ], + "city": "Husum", + "longitude": 9.05362, + "latitude": 54.485378, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Wacken", + "url": "https://t.me/einundzwanzigWOA", + "top": 10, + "left": 37, + "country": "DE", + "state": [ + "Schleswig-Holstein" + ], + "city": "Wacken", + "longitude": 9.3759, + "latitude": 54.020012, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Mecklenburg-Vorpommern", + "url": "https://t.me/EinundzwanzigMV", + "top": 11, + "left": 59, + "country": "DE", + "state": [ + "Mecklenburg-Vorpommern" + ], + "city": "Schwerin", + "longitude": 11.40125, + "latitude": 53.635502, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Ostfriesland", + "url": "https://t.me/Einundzwanzig_Ostriesland", + "top": 13, + "left": 20, + "country": "DE", + "state": [ + "Niedersachsen" + ], + "city": "Aurich", + "longitude": 7.3915287, + "latitude": 53.5122853, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Oldenburg", + "url": "https://t.me/einundzwanzig_OL", + "top": 18, + "left": 27, + "country": "DE", + "state": [ + "Niedersachsen" + ], + "city": "Oldenburg", + "longitude": 8.2146017, + "latitude": 53.1389753, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Berlin", + "url": "https://t.me/Einundzwanzig_Berlin", + "top": 26, + "left": 65, + "country": "DE", + "state": [ + "Berlin" + ], + "city": "Berlin", + "longitude": 13.3888599, + "latitude": 52.5170365, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Potsdam", + "url": "https://t.me/Einundzwanzig_Potsdam", + "top": 27, + "left": 63, + "country": "DE", + "state": [ + "Brandenburg" + ], + "city": "Potsdam", + "longitude": 13.0591397, + "latitude": 52.4009309, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Vreden", + "url": "https://t.me/Einundzwanzig_VREDEN", + "top": 29, + "left": 14, + "country": "DE", + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Hannover", + "longitude": 6.8236481, + "latitude": 52.035862, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Sachsen-Anhalt", + "url": "https://t.me/Meetup21SA", + "top": 31, + "left": 53, + "country": "DE", + "state": [ + "Sachsen-Anhalt" + ], + "city": "Magdeburg", + "longitude": 11.6399609, + "latitude": 52.1315889, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Recklinghausen", + "url": "https://t.me/Einundzwanzig_Recklinghausen", + "top": 33, + "left": 22, + "country": "DE", + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Recklinghausen", + "longitude": 7.1978546, + "latitude": 51.6143815, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Dortmund", + "url": "https://t.me/Dortmund_Einundzwanzig_Bitcoin", + "top": 34, + "left": 24, + "country": "DE", + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Dortmund", + "longitude": 7.4652789, + "latitude": 51.5142273, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Essen", + "url": "https://t.me/Einundzwanzig_Ruhrgebiet", + "top": 35, + "left": 20, + "country": "DE", + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Essen", + "longitude": 7.0158171, + "latitude": 51.4582235, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Düsseldorf", + "url": "https://t.me/einundzwanzig_duesseldorf", + "top": 38, + "left": 16, + "country": "DE", + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Düsseldorf", + "longitude": 6.7763137, + "latitude": 51.2254018, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Dresden", + "url": "https://www.meetup.com/de-DE/Dresdner-Bitcoin-Stammtisch", + "top": 40, + "left": 69, + "country": "DE", + "state": [ + "Sachsen" + ], + "city": "Dresden", + "longitude": 13.7381437, + "latitude": 51.0493286, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Thüringen", + "url": "https://t.me/einundzwanzigthueringen", + "top": 41, + "left": 46, + "country": "DE", + "state": [ + "Thüringen" + ], + "city": "Thüringen", + "longitude": 11.0377839, + "latitude": 50.9014721, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Köln", + "url": "https://t.me/einundzwanzig_koeln", + "top": 42, + "left": 17, + "country": "DE", + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Köln", + "longitude": 6.959974, + "latitude": 50.938361, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Friedrichshafen", + "url": "https://t.me/+i7hOYiYDVagyOWVi", + "top": 78, + "left": 35, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Friedrichshafen", + "longitude": 9.4800858, + "latitude": 47.6500279, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Bern", + "url": "https://www.meetup.com/de-DE/bitcoin-bern/events/", + "top": 85, + "left": 17, + "country": "CH", + "state": [ + "Bern" + ], + "city": "Bern", + "longitude": 7.4514512, + "latitude": 46.9482713, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Gran Canaria", + "url": "https://t.me/GranCanaria21", + "top": null, + "left": null, + "country": "ES", + "state": [ + "Canaria" + ], + "city": "Gran Canaria", + "longitude": -15.606, + "latitude": 27.931, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Portugal", + "url": "https://t.me/EinundzwanzigPortugal", + "top": null, + "left": null, + "country": "PT", + "state": [ + "Portugal" + ], + "city": "Portugal", + "longitude": -8.1353519, + "latitude": 39.6621648, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Koblenz", + "url": "https://t.me/Einundzwanzig_Ko", + "top": 48, + "left": 21, + "country": "DE", + "state": [ + "Rheinland-Pfalz" + ], + "city": "Koblenz", + "longitude": 7.5943951, + "latitude": 50.3533278, + "twitter_username": "EinundzwanzigKo", + "website": null + }, + { + "name": "Einundzwanzig Frankfurt am Main", + "url": "https://t.me/einundzwanzigffm", + "top": 51, + "left": 26, + "country": "DE", + "state": [ + "Hessen" + ], + "city": "Frankfurt am Main", + "longitude": 8.6820917, + "latitude": 50.1106444, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Darmstadt", + "url": "https://t.me/einundzwanzigda", + "top": 53, + "left": 26, + "country": "DE", + "state": [ + "Hessen" + ], + "city": "Darmstadt", + "longitude": 8.6736295, + "latitude": 49.8851869, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Mainz", + "url": "https://t.me/Einundzwanzig_MAINZ", + "top": 55, + "left": 24, + "country": "DE", + "state": [ + "Rheinland-Pfalz" + ], + "city": "Mainz", + "longitude": 8.2762513, + "latitude": 50.0012314, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Saarlouis", + "url": "https://t.me/EinundzwanzigSaarlouis", + "top": 57, + "left": 12, + "country": "DE", + "state": [ + "Saarland" + ], + "city": "Saarlouis", + "longitude": 6.75034, + "latitude": 49.315681, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Pfalz", + "url": "https://t.me/einundzwanzigPfalz", + "top": 59, + "left": 19, + "country": "DE", + "state": [ + "Rheinland-Pfalz" + ], + "city": "Pfalz", + "longitude": 7.310646, + "latitude": 49.9531599, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Unterfranken", + "url": "https://t.me/einundzwanzig_unterfranken", + "top": 51, + "left": 42, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Unterfranken", + "longitude": 9.8917959, + "latitude": 50.022585, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Karlsruhe", + "url": "https://www.meetup.com/BitcoinKarlsruhe/", + "top": 63, + "left": 25, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Karlsruhe", + "longitude": 8.4034195, + "latitude": 49.0068705, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Ellwangen", + "url": "https://t.me/einundzwanzigEllwangen", + "top": 64, + "left": 40, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Ellwangen", + "longitude": 10.131975, + "latitude": 48.9615975, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Passau", + "url": "https://t.me/Einundzwanzig_Passau", + "top": 67, + "left": 68, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Passau", + "longitude": 13.4609744, + "latitude": 48.5748229, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Rosenheim", + "url": "https://t.me/Einundzwanzig_Rosenheim", + "top": 75, + "left": 57, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Rosenheim", + "longitude": 12.127262, + "latitude": 47.8539273, + "twitter_username": null, + "website": null + }, + { + "name": "Bitcoin Ulm", + "url": "https://www.meetup.com/de-DE/Bitcoin-Ulm/", + "top": 70, + "left": 38, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Ulm", + "longitude": 9.9934336, + "latitude": 48.3974003, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Sigmaringen", + "url": "https://t.me/+OyyMlOQv-hYwOGIy", + "top": 72, + "left": 30, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Sigmaringen", + "longitude": 9.21662, + "latitude": 48.085758, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Memmingen", + "url": "https://t.me/BTCOnlyMM21", + "top": 73, + "left": 40, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Memmingen", + "longitude": 10.181319, + "latitude": 47.9867696, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Freiburg", + "url": "https://t.me/Einundzwanzig_Freiburg", + "top": 73, + "left": 21, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Freiburg", + "longitude": 7.8494005, + "latitude": 47.9960901, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Ried i.I.", + "url": "https://t.me/joinchat/ilNlHsXTLqsyOTA0", + "top": 70, + "left": 69, + "country": "AT", + "state": [ + "Oberösterreich" + ], + "city": "Wien", + "longitude": 16.373819, + "latitude": 48.208176, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Vorarlberg", + "url": "https://t.me/BitcoinVorarlberg", + "top": 81, + "left": 37, + "country": "AT", + "state": [ + "Vorarlberg" + ], + "city": "Vorarlberg", + "longitude": 9.9166667, + "latitude": 47.25, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Tirol", + "url": "https://bitcoin-tirol.at/", + "top": 82, + "left": 51, + "country": "AT", + "state": [ + "Tirol" + ], + "city": "Tirol", + "longitude": 11.5261028, + "latitude": 47.223193, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Klagenfurt", + "url": "https://t.me/Einundzwanzig_Kaernten", + "top": 88, + "left": 73, + "country": "AT", + "state": [ + "Kärnten" + ], + "city": "Klagenfurt", + "longitude": 14.3075976, + "latitude": 46.623943, + "twitter_username": null, + "website": null + }, + { + "name": "Einezwänzg Solothurn", + "url": "https://t.me/+o2gLvxb2SxFhNTI0", + "top": 82, + "left": 16, + "country": "CH", + "state": [ + "Solothurn" + ], + "city": "Solothurn", + "longitude": 7.6698284, + "latitude": 47.31874, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Schweiz", @@ -686,7 +1386,19 @@ "top": 87, "left": 23, "country": "CH", - "state": ["Bern", "Luzern", "Nidwalden", "Zürich", "Zug", "Solothurn"] + "state": [ + "Bern", + "Luzern", + "Nidwalden", + "Zürich", + "Zug", + "Solothurn" + ], + "city": "Schweiz", + "longitude": 8.2319736, + "latitude": 46.7985624, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Ostschweiz", @@ -701,15 +1413,27 @@ "Thurgau", "Appenzell Ausserrhoden", "Appenzell Innerrhoden" - ] + ], + "city": "Ostschweiz", + "longitude": 9.0838964, + "latitude": 47.2975781, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Thurgau", - "url": "https://t.me/Einundzwanzig_Thurgau", - "top": 79, - "left": 29, - "country": "CH", - "state": ["Thurgau"] + "name": "Einundzwanzig Kempten", + "url": "https://t.me/EinundzwanzigKempten", + "top": 77, + "left": 41, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Kempten", + "longitude": 10.3168835, + "latitude": 47.7267063, + "twitter_username": "@MountBitcoin21", + "website": null }, { "name": "Einundzwanzig Liechtenstein", @@ -717,21 +1441,14 @@ "top": 84, "left": 35, "country": "LI", - "state": ["Liechtenstein"] - }, - { - "name": "Einundzwanzig Südtirol", - "url": "https://t.me/Einundzwanzig_Suedtirol", - "top": 88, - "left": 51, - "country": "IT", - "state": ["Südtirol"] - }, - { - "name": "Einundzwanzig Gran Canaria", - "url": "https://t.me/GranCanaria21", - "country": "ES", - "state": ["Canaria"] + "state": [ + "Liechtenstein" + ], + "city": "Liechtenstein", + "longitude": 9.5531527, + "latitude": 47.1416307, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Styria", @@ -739,7 +1456,14 @@ "top": 84, "left": 87, "country": "AT", - "state": ["Steiermark"] + "state": [ + "Steiermark" + ], + "city": "Styria", + "longitude": 15.1666665, + "latitude": 47.2500001, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Regensburg", @@ -747,7 +1471,14 @@ "top": 62, "left": 57, "country": "DE", - "state": ["Bayern"] + "state": [ + "Bayern" + ], + "city": "Regensburg", + "longitude": 12.0974869, + "latitude": 49.0195333, + "twitter_username": null, + "website": null }, { "name": "Einundzwanzig Cham", @@ -755,125 +1486,176 @@ "top": 60, "left": 62, "country": "DE", - "state": ["Bayern"] + "state": [ + "Bayern" + ], + "city": "Cham", + "longitude": 12.66754, + "latitude": 49.219311, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Nordburgenland", - "url": "https://t.me/Einundzwanzig_Meetup_Nordbgld", - "top": 73, - "left": 97, - "country": "AT", - "state": ["Burgenland"] - }, - { - "name": "Einundzwanzig Linz", - "url": "https://t.me/Einundzwanzig_Linz", - "top": 69, - "left": 77, - "country": "AT", - "state": ["Oberösterreich"] - }, - { - "name": "Einundzwanzig Trier", - "url": "https://t.me/Einundzwanzig_Trier", - "top": 55, - "left": 10, - "country": "DE", - "state": ["Rheinland-Pfalz"] - }, - { - "name": "Einundzwanzig Portugal", - "url": "https://t.me/EinundzwanzigPortugal", - "country": "PT", - "state": ["Portugal"] - }, - { - "name": "Einundzwanzig Luxembourg", - "url": "https://t.me/einundzwanzigLU", - "top": 56, - "left": 5, - "country": "LU", - "state": ["Luxembourg"] - } - , - { - "name": "Einundzwanzig Oberland", - "url": "https://t.me/Einundzwanzig_Oberland", - "top": 79, - "left": 49, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Herrsching", + "name": "Einundzwanzig Herrsching", "url": "https://t.me/Einundzwanzig_Herrsching", "top": 73, "left": 50, "country": "DE", - "state": ["Bayern"] + "state": [ + "Bayern" + ], + "city": "Herrsching", + "longitude": 11.1703947, + "latitude": 47.9984622, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Kassel", - "url": "https://t.me/einundzwanzig_kassel", - "top": 38, - "left": 38, - "country": "DE", - "state": ["Hessen"] - }, - { - "name": "Einundzwanzig Gelnhausen", + "name": "Einundzwanzig Gelnhausen", "url": "https://t.me/einundzwanzig_gelnhausen", "top": 48, "left": 31, "country": "DE", - "state": ["Hessen"] + "state": [ + "Hessen" + ], + "city": "Gelnhausen", + "longitude": 9.190486, + "latitude": 50.2028622, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Limburg", - "url": "https://t.me/+dXengs7l2Y8yNDA6", - "top": 49, - "left": 30, - "country": "DE", - "state": ["Hessen"] - }, - { - "name": "Einundzwanzig Hochtaunuskreis", + "name": "Einundzwanzig Hochtaunuskreis", "url": "https://t.me/bitcoin_hochtaunuskreis", "top": 50, "left": 30, "country": "DE", - "state": ["Hessen"] + "state": [ + "Hessen" + ], + "city": "Hochtaunuskreis", + "longitude": 8.5036801, + "latitude": 50.2853755, + "twitter_username": null, + "website": null }, { - "name": "Einundzwanzig Rhoihesse", - "url": "https://t.me/EinundzwanzigRHH", - "top": 57, + "name": "Einundzwanzig Vulkaneifel", + "url": "https://t.me/Einundzwanzig_Vulka", + "top": 52, + "left": 12, + "country": "DE", + "state": [ + "Rheinland-Pfalz" + ], + "city": "Ulmen", + "longitude": 6.97981, + "latitude": 50.20976, + "twitter_username": null, + "website": null + }, + { + "name": "Einundzwanzig Freising", + "url": "https://t.me/Einundzwanzig_FS", + "top": 70, + "left": 56, + "country": "DE", + "state": [ + "Bayern" + ], + "city": "Freising", + "longitude": 11.7439565, + "latitude": 48.4008273, + "twitter_username": "einundzwanzigfs", + "website": null + }, + { + "name": "Einundzwanzig Saarland", + "url": "https://t.me/einundzwanzigsaarland", + "top": 58, + "left": 13, + "country": "DE", + "state": [ + "Saarland" + ], + "city": "Saarland", + "longitude": 6.9537369, + "latitude": 49.3841872, + "twitter_username": "einundzwanzigSL", + "website": "https://einundzwanzig.saarland" + }, + { + "name": "Einundzwanzig Südtirol", + "url": "https://t.me/Einundzwanzig_Suedtirol", + "top": 88, + "left": 51, + "country": "IT", + "state": [ + "Südtirol" + ], + "city": "Südtirol", + "longitude": 11.2302129, + "latitude": 46.65594557, + "twitter_username": "@SudtirolBitcoin", + "website": null + }, + { + "name": "Satoshis Coffeeshop", + "url": "https://t.me/satoshiscoffeeshop", + "top": null, + "left": null, + "country": "DE", + "state": null, + "city": "München", + "longitude": 11.5753822, + "latitude": 48.1371079, + "twitter_username": "satoshiscoffee", + "website": "https://bitcoinlight.house/events/satoshis-coffeeshop/" + }, + { + "name": "Einundzwanzig Stuttgart", + "url": "https://t.me/einundzwanzigStuttgart", + "top": 66, + "left": 30, + "country": "DE", + "state": [ + "Baden-Württemberg" + ], + "city": "Stuttgart", + "longitude": 9.1800132, + "latitude": 48.7784485, + "twitter_username": "EinundzwanzigS", + "website": "https://einundzwanzig-stuttg.art/" + }, + { + "name": "Einundzwanzig Siegen", + "url": "https://t.me/einundzwanzig_siegen", + "top": 43, "left": 23, "country": "DE", - "state": ["Rheinland-Pfalz"] + "state": [ + "Nordrhein-Westfalen" + ], + "city": "Siegen", + "longitude": 8.0227233, + "latitude": 50.8749804, + "twitter_username": "Bitcoinizer", + "website": null }, { - "name": "Bitcoin Görlitz", - "url": "https://bitcoin-goerlitz.de", - "top": 38, - "left": 78.5, - "country": "DE", - "state": ["Sachsen"] - }, - { - "name": "Einundzwanzig Ingolstadt", - "url": "https://t.me/EinundzwanzigIngolstadt", - "top": 66, - "left": 52, - "country": "DE", - "state": ["Bayern"] - }, - { - "name": "Einundzwanzig Vulkaneifel", - "url": "https://t.me/Einundzwanzig_Vulka", - "top": 52, - "left": 12, - "country": "DE", - "state": ["Rheinland-Pfalz"] + "name": "Bitcoin Zürich (Beginners)", + "url": "https://www.meetup.com/de-DE/bitcoin-4-beginners-meetup-zurich/", + "top": 82.5, + "left": 27, + "country": "CH", + "state": [ + "Zürich" + ], + "city": "Zürich", + "longitude": 8.5410422, + "latitude": 47.3744489, + "twitter_username": null, + "website": "https://www.meetup.com/de-DE/bitcoin-4-beginners-meetup-zurich/" } ] diff --git a/src/css/base/variables.css b/src/css/base/variables.css index 4d07cdf5923..530a518849b 100644 --- a/src/css/base/variables.css +++ b/src/css/base/variables.css @@ -19,6 +19,9 @@ --color-border-light: var(--color-neutral-10); --color-border-medium: var(--color-neutral-25); + --color-map-region: var(--color-border-light); + --color-map-outline: var(--color-neutral-50); + --color-overlay-bg: rgba(230, 230, 230, .95); --color-body-text: var(--color-neutral-90); --color-body-bg: var(--color-neutral-0); diff --git a/src/css/sections/meetups.css b/src/css/sections/meetups.css index b726fa9936d..319e375aa71 100644 --- a/src/css/sections/meetups.css +++ b/src/css/sections/meetups.css @@ -4,6 +4,12 @@ 3% { transform: scale(.75); } } +.vectorMap { + width: 100%; + height: 60vh; + margin-top: var(--space-xxl); +} + #map { @media (--up_to_L) { margin-top: var(--space-xl); diff --git a/src/gesundes-geld.pug b/src/gesundes-geld.pug index 6ffef2157fc..fb132da3580 100644 --- a/src/gesundes-geld.pug +++ b/src/gesundes-geld.pug @@ -6,11 +6,20 @@ block vars - const pageCard = "/img/card/gesundes-geld.jpg" - const cardType = "summary_large_image" +block pageScripts + script(src=assetPath("/vendor/jvectormap/jquery.min.js")) + script(src=assetPath("/vendor/jvectormap/jquery-jvectormap.js")) + script(src=assetPath("/vendor/jvectormap/maps/europe_mill.js")) + script(src=assetPath("/vendor/jvectormap/maps/de_mill.js")) + script(src=assetPath("/vendor/jvectormap/maps/at_mill.js")) + script(src=assetPath("/vendor/jvectormap/maps/ch_mill.js")) + link(href=assetPath("/vendor/jvectormap/jquery-jvectormap.css") rel="stylesheet") + link(href=assetPath("/css/gesundes-geld.css") rel="stylesheet") + html(lang="de" data-theme="custom") head include includes/_head - link(href=assetPath("/css/gesundes-geld.css") rel="stylesheet") body#gesundes-geld main.main .wrap @@ -62,8 +71,8 @@ html(lang="de" data-theme="custom") Daher auch der Name "[Einundzwanzig](/)" 😉 img#mcgenesis-1(src=assetPath("/img/gesundes-geld/mcgenesis-2.svg")) - section - +map(meetups, true) + section + +meetupMap() - section - a.button(href="/") Zur Einundzwanzig Website + section + a.button(href="/") Zur Einundzwanzig Website diff --git a/src/includes/_head.pug b/src/includes/_head.pug index 4812383d927..1104ce29dd4 100644 --- a/src/includes/_head.pug +++ b/src/includes/_head.pug @@ -32,6 +32,7 @@ link(rel="stylesheet" href=assetPath("/css/main.css")) link(rel="alternate" type="application/rss+xml" title="Podcast Feed" href=site.meta.publicFeedUrl) script(src=assetPath("/js/player.js") defer) script(src=assetPath("/js/main.js")) +block pageScripts title= pageTitle noscript style. diff --git a/src/includes/mixins.pug b/src/includes/mixins.pug index 961c8703f1a..9eb6cf1906f 100644 --- a/src/includes/mixins.pug +++ b/src/includes/mixins.pug @@ -32,52 +32,52 @@ mixin member(m) if m.text !=markdown(m.text) -mixin map(meetups, hideTooltip) - - const filterOfficial = (list, official) => list.filter(meetup => (meetup.name.startsWith('Einundzwanzig') || meetup.name.startsWith('Einezwänzg')) === official) - - const filterUnmapped = (list) => list.filter(meetup => !meetup.top || !meetup.left) - - const style = m => m.top && m.left ? `top:${m.top}%;left:${m.left}%;` : null - - const clss = m => m.top && m.left ? null : 'unmapped' - - let j = 0 - #map - h2 Einundzwanzig Meetups - ul.meetups - each m in filterOfficial(meetups, true) - li.official(class=clss(m) style=style(m)) - a(href=m.url target="_blank" rel="nofollow noopener") - .dot(style=`animation-delay:${((j*2000) + random(3000))}ms;animation-duration:${meetups.length*2}s;`) - = m.name.replace('Einundzwanzig ', '').replace('Einezwänzg ', '') - if m.members - = ' ' - small.members= `(${m.members})` - - j++ +mixin map(id, markers) + .vectorMap(id=id) + script. + const markers = [!{markers}]; + // https://jvectormap.com/documentation/javascript-api/jvm-map/ + new jvm.MultiMap({ + container: $(`#!{id}`), + maxLevel: 1, + main: { + map: 'europe_mill', + backgroundColor: 'transparent', + markers, + focusOn: ['DE', 'AT', 'CH', 'LI', 'LU'], + regionStyle: { + initial: { + 'fill': 'var(--color-map-region)', + 'stroke': 'var(--color-map-outline)', + 'stroke-width': .25 + }, + hover: { + 'fill-opacity': .8, + cursor: 'pointer' + } + }, + onMarkerClick(event, index) { + const marker = markers[index] + if (marker.url) window.open(marker.url, '_blank'); + } + }, + mapUrlByCode(code, multiMap) { + return `/vendor/jvectormap/maps/${code.toLowerCase()}_${multiMap.defaultProjection}.js`; + }, + mapNameByCode(code, multiMap) { + return `${code.toLowerCase()}_${multiMap.defaultProjection}`; + } + }); - h2 Weitere Meetups - ul.meetups - each m in filterOfficial(meetups, false) - li(class=clss(m) style=style(m)) - a(href=m.url target="_blank" rel="nofollow noopener") - .dot(style=`animation-delay:${((j*2000) + random(3000))}ms;animation-duration:${meetups.length*2}s;`) - = m.name.replace('Bitcoin ', '') - if m.members - = ' ' - small.members= `(${m.members})` - - j++ - - img#dach(src=assetPath('/img/dach.svg') alt="DE, AT, CH") - if !hideTooltip - #tooltip.tooltip(hidden) - #unmapped - h2 Weitere Meetups - ul.meetups - each m in filterUnmapped(meetups) - li(class=clss(m) style=style(m)) - a(href=m.url target="_blank" rel="nofollow noopener") - = m.name - if m.members - = ' ' - small.members= `(${m.members})` - li.unmapped - a(href="https://twentyone.world/" target="_blank" rel="nofollow noopener") Einundzwanzig in der ganzen Welt +mixin meetupMap() + +map('meetupMap', meetups.map(m => JSON.stringify({ + name: m.name, + latLng: [m.latitude, m.longitude], + url: m.url, + style: { + fill: m.name.startsWith('Einundzwanzig') || m.name.includes('Einezwänzg') || m.name.includes('Eenanzwanzeg') || m.name.includes('Yirmibir') ? 'var(--color-accent)' : 'var(--color-neutral-50)' + } + })).join(',')) mixin spende(d, trunc = false) .spende(id=d.id)&attributes(attributes) diff --git a/src/meetups.pug b/src/meetups.pug index 922e4dbbfb1..977f3133ab4 100644 --- a/src/meetups.pug +++ b/src/meetups.pug @@ -5,6 +5,15 @@ block vars - const description = 'Eine Liste von Bitcoin-Meetups und Einundzwanzig-Treffen im D/A/CH/S/LI/LU-Raum.' - const cardImage = '/img/card/meetups.png' +block pageScripts + script(src=assetPath("/vendor/jvectormap/jquery.min.js")) + script(src=assetPath("/vendor/jvectormap/jquery-jvectormap.js")) + script(src=assetPath("/vendor/jvectormap/maps/europe_mill.js")) + script(src=assetPath("/vendor/jvectormap/maps/de_mill.js")) + script(src=assetPath("/vendor/jvectormap/maps/at_mill.js")) + script(src=assetPath("/vendor/jvectormap/maps/ch_mill.js")) + link(href=assetPath("/vendor/jvectormap/jquery-jvectormap.css") rel="stylesheet") + block main #meetups.wrap section @@ -12,14 +21,10 @@ block main p= description :markdown-it(html linkify typographer) - Neue Meetups können gerne [per Pull Request](https://github.com/Einundzwanzig-Podcast/einundzwanzig.space/edit/master/content/meetups.json) hinzugefügt werden. - Hier gibt es ein [Video-Tutorial](https://www.youtube.com/watch?v=BNJc9LExEzU), wie ein neuer Pull Request erstellt werden kann. - Die Werte für `top/left` geben prozentual die Position des Ortes auf der Karte an. + Neue Meetups können gerne [im Portal](https://portal.einundzwanzig.space/de/meetup/overview) hinzugefügt werden. - Wir können auch die Anzahl der Gruppenmitglieder hier anzeigen lassen. - Voraussetzung dafür ist, dass die Gruppe öffentlich ist und einen Linknamen hat (a la `t.me/Einundzwanzig_ORT`, kann nur vom Ersteller der Gruppe angepasst werden). + Telegram: Die Vorlage für das Gruppenbild findest du im [Media Kit](/media). Tipp: Mit Bots wie [Shieldy](https://t.me/shieldy_bot) kann man die Spammer draußen halten. - Die Vorlage für das Telegram-Gruppenbild findest du im [Media Kit](/media). - - +map(meetups) + div(style="margin-bottom: calc(var(--space-xxl) * -1)") + +meetupMap() diff --git a/static/css/gesundes-geld.css b/static/css/gesundes-geld.css index fc7e5f8f5e5..73f5c5d953e 100644 --- a/static/css/gesundes-geld.css +++ b/static/css/gesundes-geld.css @@ -124,6 +124,16 @@ display: none; } +#gesundes-geld section:first-child { + margin-bottom: 4rem; +} + #gesundes-geld section:last-child { text-align: center; } + +.vectorMap { + width: 100%; + height: 60vh; + margin-top: var(--space-xxl); +} diff --git a/static/vendor/jvectormap/jquery-jvectormap.css b/static/vendor/jvectormap/jquery-jvectormap.css new file mode 100644 index 00000000000..1cac4ac3328 --- /dev/null +++ b/static/vendor/jvectormap/jquery-jvectormap.css @@ -0,0 +1,135 @@ +svg { + touch-action: none; +} + +.jvectormap-container { + width: 100%; + height: 100%; + position: relative; + overflow: hidden; + touch-action: none; +} + +.jvectormap-tip { + position: absolute; + display: none; + border: solid 1px #CDCDCD; + border-radius: 3px; + background: #292929; + color: white; + font-family: sans-serif, Verdana; + font-size: smaller; + padding: 3px; +} + +.jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback { + position: absolute; + left: 10px; + border-radius: 3px; + background: #292929; + padding: 3px; + color: white; + cursor: pointer; + line-height: 10px; + text-align: center; + box-sizing: content-box; +} + +.jvectormap-zoomin, .jvectormap-zoomout { + width: 10px; + height: 10px; +} + +.jvectormap-zoomin { + top: 10px; +} + +.jvectormap-zoomout { + top: 30px; +} + +.jvectormap-goback { + bottom: 10px; + z-index: 1000; + padding: 6px; +} + +.jvectormap-spinner { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: center no-repeat url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==); +} + +.jvectormap-legend-title { + font-weight: bold; + font-size: 14px; + text-align: center; +} + +.jvectormap-legend-cnt { + position: absolute; +} + +.jvectormap-legend-cnt-h { + bottom: 0; + right: 0; +} + +.jvectormap-legend-cnt-v { + top: 0; + right: 0; +} + +.jvectormap-legend { + background: black; + color: white; + border-radius: 3px; +} + +.jvectormap-legend-cnt-h .jvectormap-legend { + float: left; + margin: 0 10px 10px 0; + padding: 3px 3px 1px 3px; +} + +.jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick { + float: left; +} + +.jvectormap-legend-cnt-v .jvectormap-legend { + margin: 10px 10px 0 0; + padding: 3px; +} + +.jvectormap-legend-cnt-h .jvectormap-legend-tick { + width: 40px; +} + +.jvectormap-legend-cnt-h .jvectormap-legend-tick-sample { + height: 15px; +} + +.jvectormap-legend-cnt-v .jvectormap-legend-tick-sample { + height: 20px; + width: 20px; + display: inline-block; + vertical-align: middle; +} + +.jvectormap-legend-tick-text { + font-size: 12px; +} + +.jvectormap-legend-cnt-h .jvectormap-legend-tick-text { + text-align: center; +} + +.jvectormap-legend-cnt-v .jvectormap-legend-tick-text { + display: inline-block; + vertical-align: middle; + line-height: 20px; + padding-left: 3px; +} \ No newline at end of file diff --git a/static/vendor/jvectormap/jquery-jvectormap.js b/static/vendor/jvectormap/jquery-jvectormap.js new file mode 100644 index 00000000000..5db43bb6bb3 --- /dev/null +++ b/static/vendor/jvectormap/jquery-jvectormap.js @@ -0,0 +1 @@ +!function($){var apiParams={set:{colors:1,values:1,backgroundColor:1,scaleColors:1,normalizeFunction:1,focus:1},get:{selectedRegions:1,selectedMarkers:1,mapObject:1,regionName:1}};$.fn.vectorMap=function(options){var map=this.children(".jvectormap-container").data("mapObject");if("addMap"===options)jvm.Map.maps[arguments[1]]=arguments[2];else{if(("set"===options||"get"===options)&&apiParams[options][arguments[1]])return map[options+(arguments[1].charAt(0).toUpperCase()+arguments[1].substr(1))].apply(map,Array.prototype.slice.call(arguments,2));(options=options||{}).container=this,map=new jvm.Map(options)}return this}}(jQuery),function(factory){"function"==typeof define&&define.amd?define(["jquery"],factory):"object"==typeof exports?module.exports=factory:factory(jQuery)}(function($){var nullLowestDeltaTimeout,lowestDelta,toFix=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],toBind="onwheel"in document||9<=document.documentMode?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],slice=Array.prototype.slice;if($.event.fixHooks)for(var i=toFix.length;i;)$.event.fixHooks[toFix[--i]]=$.event.mouseHooks;var special=$.event.special.mousewheel={version:"3.1.9",setup:function(){if(this.addEventListener)for(var i=toBind.length;i;)this.addEventListener(toBind[--i],handler,!1);else this.onmousewheel=handler;$.data(this,"mousewheel-line-height",special.getLineHeight(this)),$.data(this,"mousewheel-page-height",special.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var i=toBind.length;i;)this.removeEventListener(toBind[--i],handler,!1);else this.onmousewheel=null},getLineHeight:function(elem){return parseInt($(elem)["offsetParent"in $.fn?"offsetParent":"parent"]().css("fontSize"),10)},getPageHeight:function(elem){return $(elem).height()},settings:{adjustOldDeltas:!0}};function handler(event){var absDelta,orgEvent=event||window.event,args=slice.call(arguments,1),delta=0,deltaX=0,deltaY=0;if((event=$.event.fix(orgEvent)).type="mousewheel","detail"in orgEvent&&(deltaY=-1*orgEvent.detail),"wheelDelta"in orgEvent&&(deltaY=orgEvent.wheelDelta),"wheelDeltaY"in orgEvent&&(deltaY=orgEvent.wheelDeltaY),"wheelDeltaX"in orgEvent&&(deltaX=-1*orgEvent.wheelDeltaX),"axis"in orgEvent&&orgEvent.axis===orgEvent.HORIZONTAL_AXIS&&(deltaX=-1*deltaY,deltaY=0),delta=0===deltaY?deltaX:deltaY,"deltaY"in orgEvent&&(delta=deltaY=-1*orgEvent.deltaY),"deltaX"in orgEvent&&(deltaX=orgEvent.deltaX,0===deltaY&&(delta=-1*deltaX)),0!==deltaY||0!==deltaX){if(1===orgEvent.deltaMode){var lineHeight=$.data(this,"mousewheel-line-height");delta*=lineHeight,deltaY*=lineHeight,deltaX*=lineHeight}else if(2===orgEvent.deltaMode){var pageHeight=$.data(this,"mousewheel-page-height");delta*=pageHeight,deltaY*=pageHeight,deltaX*=pageHeight}return absDelta=Math.max(Math.abs(deltaY),Math.abs(deltaX)),(!lowestDelta||absDeltamax&&(max=values[i]);else for(i in values)values[i]>max&&(max=values[i]);return max},keys:function(object){var key,keys=[];for(key in object)keys.push(key);return keys},values:function(object){var key,i,values=[];for(i=0;i");return img.on("error",function(){deferred.reject()}).on("load",function(){deferred.resolve(img)}),img.attr("src",url),deferred},isImageUrl:function(s){return/\.\w{3,4}$/.test(s)}};jvm.$=jQuery,Array.prototype.indexOf||(Array.prototype.indexOf=function(searchElement,fromIndex){var k;if(null==this)throw new TypeError('"this" is null or not defined');var O=Object(this),len=O.length>>>0;if(0==len)return-1;var n=+fromIndex||0;if(Math.abs(n)===1/0&&(n=0),len<=n)return-1;for(k=Math.max(0<=n?n:len-Math.abs(n),0);k')}}catch(e){jvm.VMLElement.prototype.createElement=function(tagName){return document.createElement("<"+tagName+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}document.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)"),jvm.VMLElement.VMLInitialized=!0},jvm.VMLElement.prototype.getElementCtr=function(ctr){return jvm["VML"+ctr]},jvm.VMLElement.prototype.addClass=function(className){jvm.$(this.node).addClass(className)},jvm.VMLElement.prototype.applyAttr=function(attr,value){this.node[attr]=value},jvm.VMLElement.prototype.getBBox=function(){var node=jvm.$(this.node);return{x:node.position().left/this.canvas.scale,y:node.position().top/this.canvas.scale,width:node.width()/this.canvas.scale,height:node.height()/this.canvas.scale}},jvm.VMLGroupElement=function(){jvm.VMLGroupElement.parentClass.call(this,"group"),this.node.style.left="0px",this.node.style.top="0px",this.node.coordorigin="0 0"},jvm.inherits(jvm.VMLGroupElement,jvm.VMLElement),jvm.VMLGroupElement.prototype.add=function(element){this.node.appendChild(element.node)},jvm.VMLCanvasElement=function(container,width,height){this.classPrefix="VML",jvm.VMLCanvasElement.parentClass.call(this,"group"),jvm.AbstractCanvasElement.apply(this,arguments),this.node.style.position="absolute"},jvm.inherits(jvm.VMLCanvasElement,jvm.VMLElement),jvm.mixin(jvm.VMLCanvasElement,jvm.AbstractCanvasElement),jvm.VMLCanvasElement.prototype.setSize=function(width,height){var paths,groups,i,l;if(this.width=width,this.height=height,this.node.style.width=width+"px",this.node.style.height=height+"px",this.node.coordsize=width+" "+height,this.node.coordorigin="0 0",this.rootElement){for(i=0,l=(paths=this.rootElement.node.getElementsByTagName("shape")).length;i"),this.body.addClass("jvectormap-legend"),this.params.cssClass&&this.body.addClass(this.params.cssClass),params.vertical?this.map.legendCntVertical.append(this.body):this.map.legendCntHorizontal.append(this.body),this.render()},jvm.Legend.prototype.render=function(){var i,tick,sample,label,ticks=this.series.scale.getTicks(),inner=jvm.$("
").addClass("jvectormap-legend-inner");for(this.body.html(""),this.params.title&&this.body.append(jvm.$("
").addClass("jvectormap-legend-title").html(this.params.title)),this.body.append(inner),i=0;i").addClass("jvectormap-legend-tick"),sample=jvm.$("
").addClass("jvectormap-legend-tick-sample"),this.series.params.attribute){case"fill":jvm.isImageUrl(ticks[i].value)?sample.css("background","url("+ticks[i].value+")"):sample.css("background",ticks[i].value);break;case"stroke":sample.css("background",ticks[i].value);break;case"image":sample.css("background","url("+("object"==typeof ticks[i].value?ticks[i].value.url:ticks[i].value)+") no-repeat center center");break;case"r":jvm.$("
").css({"border-radius":ticks[i].value,border:this.map.params.markerStyle.initial["stroke-width"]+"px "+this.map.params.markerStyle.initial.stroke+" solid",width:2*ticks[i].value+"px",height:2*ticks[i].value+"px",background:this.map.params.markerStyle.initial.fill}).appendTo(sample)}tick.append(sample),label=ticks[i].label,this.params.labelRender&&(label=this.params.labelRender(label)),tick.append(jvm.$("
"+label+"
").addClass("jvectormap-legend-tick-text")),inner.append(tick)}inner.append(jvm.$("
").css("clear","both"))},jvm.DataSeries=function(params,elements,map){var scaleConstructor;(params=params||{}).attribute=params.attribute||"fill",this.elements=elements,this.params=params,this.map=map,params.attributes&&this.setAttributes(params.attributes),jvm.$.isArray(params.scale)?(scaleConstructor="fill"===params.attribute||"stroke"===params.attribute?jvm.ColorScale:jvm.NumericScale,this.scale=new scaleConstructor(params.scale,params.normalizeFunction,params.min,params.max)):params.scale?this.scale=new jvm.OrdinalScale(params.scale):this.scale=new jvm.SimpleScale(params.scale),this.values=params.values||{},this.setValues(this.values),this.params.legend&&(this.legend=new jvm.Legend(jvm.$.extend({map:this.map,series:this},this.params.legend)))},jvm.DataSeries.prototype={setAttributes:function(key,attr){var code,attrs=key;if("string"==typeof key)this.elements[key]&&this.elements[key].setStyle(this.params.attribute,attr);else for(code in attrs)this.elements[code]&&this.elements[code].element.setStyle(this.params.attribute,attrs[code])},setValues:function(values){var val,cc,max=-Number.MAX_VALUE,min=Number.MAX_VALUE,attrs={};if(this.scale instanceof jvm.OrdinalScale||this.scale instanceof jvm.SimpleScale)for(cc in values)values[cc]?attrs[cc]=this.scale.getValue(values[cc]):attrs[cc]=this.elements[cc].element.style.initial[this.params.attribute];else{if(void 0===this.params.min||void 0===this.params.max)for(cc in values)max<(val=parseFloat(values[cc]))&&(max=val),val").addClass("jvectormap-container"),this.params.container&&this.params.container.append(this.container),this.container.data("mapObject",this),this.defaultWidth=this.mapData.width,this.defaultHeight=this.mapData.height,this.setBackgroundColor(this.params.backgroundColor),this.onResize=function(){map.updateSize()},jvm.$(window).resize(this.onResize),jvm.Map.apiEvents)this.params[e]&&this.container.bind(jvm.Map.apiEvents[e]+".jvectormap",this.params[e]);this.canvas=new jvm.VectorCanvas(this.container[0],this.width,this.height),this.params.bindTouchEvents&&("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch?this.bindContainerTouchEvents():window.MSGesture&&this.bindContainerPointerEvents()),this.bindContainerEvents(),this.bindElementEvents(),this.createTip(),this.params.zoomButtons&&this.bindZoomButtons(),this.createRegions(),this.createMarkers(this.params.markers||{}),this.updateSize(),this.params.focusOn&&("string"==typeof this.params.focusOn?this.params.focusOn={region:this.params.focusOn}:jvm.$.isArray(this.params.focusOn)&&(this.params.focusOn={regions:this.params.focusOn}),this.setFocus(this.params.focusOn)),this.params.selectedRegions&&this.setSelectedRegions(this.params.selectedRegions),this.params.selectedMarkers&&this.setSelectedMarkers(this.params.selectedMarkers),this.legendCntHorizontal=jvm.$("
").addClass("jvectormap-legend-cnt jvectormap-legend-cnt-h"),this.legendCntVertical=jvm.$("
").addClass("jvectormap-legend-cnt jvectormap-legend-cnt-v"),this.container.append(this.legendCntHorizontal),this.container.append(this.legendCntVertical),this.params.series&&this.createSeries()},jvm.Map.prototype={transX:0,transY:0,scale:1,baseTransX:0,baseTransY:0,baseScale:1,width:0,height:0,setBackgroundColor:function(backgroundColor){this.container.css("background-color",backgroundColor)},resize:function(){var curBaseScale=this.baseScale;this.width/this.height>this.defaultWidth/this.defaultHeight?(this.baseScale=this.height/this.defaultHeight,this.baseTransX=Math.abs(this.width-this.defaultWidth*this.baseScale)/(2*this.baseScale)):(this.baseScale=this.width/this.defaultWidth,this.baseTransY=Math.abs(this.height-this.defaultHeight*this.baseScale)/(2*this.baseScale)),this.scale*=this.baseScale/curBaseScale,this.transX*=this.baseScale/curBaseScale,this.transY*=this.baseScale/curBaseScale},updateSize:function(){this.width=this.container.width(),this.height=this.container.height(),this.resize(),this.canvas.setSize(this.width,this.height),this.applyTransform()},reset:function(){var key,i;for(key in this.series)for(i=0;imaxTransY?this.transY=maxTransY:this.transYmaxTransX?this.transX=maxTransX:this.transXtouches[1].pageX?touches[1].pageX+(touches[0].pageX-touches[1].pageX)/2:touches[0].pageX+(touches[1].pageX-touches[0].pageX)/2,centerTouchY=touches[0].pageY>touches[1].pageY?touches[1].pageY+(touches[0].pageY-touches[1].pageY)/2:touches[0].pageY+(touches[1].pageY-touches[0].pageY)/2,centerTouchX-=offset.left,centerTouchY-=offset.top,touchStartScale=map.scale,touchStartDistance=Math.sqrt(Math.pow(touches[0].pageX-touches[1].pageX,2)+Math.pow(touches[0].pageY-touches[1].pageY,2)))),lastTouchesLength=touches.length}var touchStartScale,touchStartDistance,touchX,touchY,centerTouchX,centerTouchY,lastTouchesLength,map=this;jvm.$(this.container).bind("touchstart",handleTouchEvent),jvm.$(this.container).bind("touchmove",handleTouchEvent)},bindContainerPointerEvents:function(){var map=this,gesture=new MSGesture,element=this.container[0];(gesture.target=element).addEventListener("MSGestureChange",function(e){var transXOld,transYOld;0==e.translationX&&0==e.translationY||(transXOld=map.transX,transYOld=map.transY,map.transX+=e.translationX/map.scale,map.transY+=e.translationY/map.scale,map.applyTransform(),map.tip.hide(),transXOld==map.transX&&transYOld==map.transY||e.preventDefault()),1!=e.scale&&(map.setScale(map.scale*e.scale,e.offsetX,e.offsetY),map.tip.hide(),e.preventDefault())},!1),element.addEventListener("pointerdown",function(e){gesture.addPointer(e.pointerId)},!1)},bindElementEvents:function(){var pageX,pageY,mouseMoved,map=this;this.container.mousemove(function(e){2").addClass("jvectormap-zoomin").text("+").appendTo(this.container),jvm.$("
").addClass("jvectormap-zoomout").html("−").appendTo(this.container),this.container.find(".jvectormap-zoomin").click(function(){map.setScale(map.scale*map.params.zoomStep,map.width/2,map.height/2,!1,map.params.zoomAnimate)}),this.container.find(".jvectormap-zoomout").click(function(){map.setScale(map.scale/map.params.zoomStep,map.width/2,map.height/2,!1,map.params.zoomAnimate)})},createTip:function(){var map=this;this.tip=jvm.$("
").addClass("jvectormap-tip").appendTo(jvm.$("body")),this.container.mousemove(function(e){var left=e.pageX-15-map.tipWidth,top=e.pageY-15-map.tipHeight;left<5&&(left=e.pageX+15),top<5&&(top=e.pageY+15),map.tip.css({left:left,top:top})})},setScale:function(scale,anchorX,anchorY,isCentered,animate){var interval,scaleStart,scaleDiff,transXStart,transXDiff,transYStart,transYDiff,transX,transY,viewportChangeEvent=jvm.$.Event("zoom.jvectormap"),that=this,i=0,count=Math.abs(Math.round(60*(scale-this.scale)/Math.max(scale,this.scale))),deferred=new jvm.$.Deferred;return scale>this.params.zoomMax*this.baseScale?scale=this.params.zoomMax*this.baseScale:scalebbox[0].x&&nxbbox[0].y&&ny(bbox=insets[i].bbox)[0].x&&xbbox[0].y&&y").addClass("jvectormap-goback").text("Zurück").appendTo(this.params.container),this.backButton.hide(),this.backButton.click(function(){that.goBack()}),this.spinner=jvm.$("
").addClass("jvectormap-spinner").appendTo(this.params.container),this.spinner.hide()},jvm.MultiMap.prototype={addMap:function(name,config){var cnt=jvm.$("
").css({width:"100%",height:"100%"});return this.params.container.append(cnt),this.maps[name]=new jvm.Map(jvm.$.extend(config,{container:cnt})),this.params.maxLevel>config.multiMapLevel&&this.maps[name].container.on("regionClick.jvectormap",{scope:this},function(e,code){var multimap=e.data.scope,mapName=multimap.params.mapNameByCode(code,multimap);multimap.drillDownPromise&&"pending"===multimap.drillDownPromise.state()||multimap.drillDown(mapName,code)}),this.maps[name]},downloadMap:function(code){var that=this,deferred=jvm.$.Deferred();return this.mapsLoaded[code]?deferred.resolve():jvm.$.get(this.params.mapUrlByCode(code,this)).then(function(){that.mapsLoaded[code]=!0,deferred.resolve()},function(){deferred.reject()}),deferred},drillDown:function(name,code){var currentMap=this.history[this.history.length-1],that=this,focusPromise=currentMap.setFocus({region:code,animate:!0}),downloadPromise=this.downloadMap(code);focusPromise.then(function(){"pending"===downloadPromise.state()&&that.spinner.show()}),downloadPromise.always(function(){that.spinner.hide()}),this.drillDownPromise=jvm.$.when(downloadPromise,focusPromise),this.drillDownPromise.then(function(){currentMap.params.container.hide(),that.maps[name]?that.maps[name].params.container.show():that.addMap(name,{map:name,multiMapLevel:currentMap.params.multiMapLevel+1,backgroundColor:currentMap.params.backgroundColor,markers:currentMap.params.markers,series:currentMap.params.series,regionStyle:currentMap.params.regionStyle,onMarkerClick:currentMap.params.onMarkerClick}),that.history.push(that.maps[name]),that.backButton.show()})},goBack:function(){var currentMap=this.history.pop(),prevMap=this.history[this.history.length-1],that=this;currentMap.setFocus({scale:1,x:.5,y:.5,animate:!0}).then(function(){currentMap.params.container.hide(),prevMap.params.container.show(),prevMap.updateSize(),1===that.history.length&&that.backButton.hide(),prevMap.setFocus({scale:1,x:.5,y:.5,animate:!0})})}},jvm.MultiMap.defaultParams={mapNameByCode:function(code,multiMap){return code.toLowerCase()+"_"+multiMap.defaultProjection+"_en"},mapUrlByCode:function(code,multiMap){return"jquery-jvectormap-data-"+code.toLowerCase()+"-"+multiMap.defaultProjection+"-en.js"}}; diff --git a/static/vendor/jvectormap/jquery.min.js b/static/vendor/jvectormap/jquery.min.js new file mode 100644 index 00000000000..b5329e9aeed --- /dev/null +++ b/static/vendor/jvectormap/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.3 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.3",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector(:is("+c+"))"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0 e.category === 'news') }) renderPage('category', 'podcast/interviews', { navCurrent: 'podcast', category: 'interview', categoryName: 'Interviews', episodes: episodes.filter(e => e.category === 'interview') }) renderPage('category', 'podcast/lesestunde', { navCurrent: 'podcast', category: 'lesestunde', categoryName: 'Lesestunde', episodes: episodes.filter(e => e.category === 'lesestunde') }) diff --git a/tasks/generate_site_data.js b/tasks/generate_site_data.js index a8f98411fb3..739a3b5a0af 100644 --- a/tasks/generate_site_data.js +++ b/tasks/generate_site_data.js @@ -3,11 +3,14 @@ const { basename, join, resolve } = require('path') const request = require('sync-request') const meta = require('../content/meta.json') -const meetups = require('../content/meetups.json') const telegram = require('../content/telegram.json') const soundboard = require('../content/soundboard.json') const { TELEGRAM_BOT_TOKEN } = process.env +const loadJson = url => { + const jsonBody = request('GET', url).getBody('utf8') + return JSON.parse(jsonBody) +} const dir = (...path) => resolve(__dirname, '..', ...path) const writeJSON = (file, data) => writeFileSync(file, JSON.stringify(data, null, 2)) @@ -18,11 +21,7 @@ const getTelegramMembersCount = group => { [, , telegramId] = url.match(/:\/\/t\.me\/(?!(\+|joinchat))(.*)/) || [] if (telegramId) { try { - const jsonBody = request( - 'GET', - `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChatMemberCount?chat_id=@${telegramId}` - ).getBody('utf8') - const { ok, result } = JSON.parse(jsonBody) + const { ok, result } = loadJson(`https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChatMemberCount?chat_id=@${telegramId}`) if (ok) { return result } @@ -39,8 +38,7 @@ const getTelegramMembersCount = group => { let recentBlocks = [] try { - const jsonBody = request('GET', 'https://mempool.observer/api/recentBlocks').getBody('utf8') - recentBlocks = JSON.parse(jsonBody) + recentBlocks = loadJson('https://mempool.observer/api/recentBlocks') } catch (err) { console.error('Could not load recent blocks:', err) } @@ -56,17 +54,21 @@ const telegramData = telegram.map(t => ) // Meetups -const meetupsData = meetups.map(m => Object.assign(m, { - members: getTelegramMembersCount(m) -})) +let meetups = [] +try { + meetups = loadJson('https://portal.einundzwanzig.space/api/meetups') +} catch (err) { + console.error('Could not load meetups:', err) + meetups = require('../content/soundboard.json') +} -writeJSON(dir('dist', 'meetups.json'), meetupsData) +writeJSON(dir('dist', 'meetups.json'), meetups) writeJSON(dir('generated', 'site-data.json'), { date, block, meta, - meetups: meetupsData, + meetups, telegram: telegramData })