Add Kurse

This commit is contained in:
Dennis Reimann
2022-07-22 12:16:51 +02:00
parent ed3d25334e
commit a9b4d575e7
7 changed files with 68 additions and 10 deletions

10
content/kurse.json Normal file
View File

@@ -0,0 +1,10 @@
[
{
"name": "VHS-Kurs Trading im Turm, Kempten",
"url": "https://t.me/EinundzwanzigKempten",
"top": 77,
"left": 41,
"country": "DE",
"state": ["Bayern"]
}
]

View File

@@ -4,7 +4,8 @@
3% { transform: scale(.75); }
}
#meetups {
#meetups,
#kurse {
& #map {
@media (--up_to_L) {
margin-top: var(--space-xl);

View File

@@ -27,6 +27,7 @@ html(lang="en")
.more
a(href="/meetups/" class=(navCurrent === 'meetups' && 'current')) Meetups
a(href="/events/" class=(navCurrent === 'events' && 'current')) Events
a(href="/kurse/" class=(navCurrent === 'kurse' && 'current')) Kurse
a(href="/spenden/" class=(navCurrent === 'spenden' && 'current')) Spenden
a(href="/telegram/" class=(navCurrent === 'telegram' && 'current')) Telegram
a(href="/shops/" class=(navCurrent === 'shops' && 'current')) Shops

42
src/kurse.pug Normal file
View File

@@ -0,0 +1,42 @@
extends /template.pug
block vars
- const title = 'Bitcoin-Kurse'
- const description = 'Eine Liste von Bitcoin-Kursen und Lehrveranstaltungen im D/A/CH-Raum.'
- const filterUnmapped = (list) => list.filter(kurs => !kurs.top || !kurs.left)
- const unmapped = filterUnmapped(kurse)
- 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
block main
#kurse.wrap
section
h1= title
p= description
:markdown-it(html linkify typographer)
Neue Kurse können gerne [per Pull Request](https://github.com/Einundzwanzig-Podcast/einundzwanzig.space/edit/master/content/kurse.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.
#map
h2 Lehrveranstaltungen im D/A/CH-Raum
ul.kurse
each m in kurse
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:${kurse.length*2}s;`)
= m.name
- j++
img#dach(src=assetPath('/img/dach.svg') alt="DE, AT, CH")
if unmapped.length
#unmapped
h2 Weitere Kurse
ul.kurse
each m in unmapped
li(class=clss(m) style=style(m))
a(href=m.url target="_blank" rel="nofollow noopener")
= m.name

View File

@@ -64,11 +64,3 @@ block main
if m.members
= ' '
small.members= `(${m.members})`
script.
document.getElementById('dach').onclick = e => {
console.log({
top: Math.round(e.offsetY / e.target.height * 100) - 2,
left: Math.round(e.offsetX / e.target.width * 100) + 1
})
}

View File

@@ -107,4 +107,15 @@ document.addEventListener("DOMContentLoaded", () => {
}
})
})
// Map
const map = document.getElementById('dach')
if (map) {
map.onclick = e => {
console.log({
top: Math.round((e.offsetY / e.target.height) * 100) - 2,
left: Math.round((e.offsetX / e.target.width) * 100) + 1,
})
}
}
})

View File

@@ -8,7 +8,7 @@ const episodes = require('../generated/episodes.json')
const spendenregister = require('../generated/spendenregister.json')
const spendenuebersicht = require('../content/spendenuebersicht.json')
const team = require('../content/team.json')
const telegram = require('../content/telegram.json')
const kurse = require('../content/kurse.json')
const shops = require('../content/shops.json')
const soundboard = require('../content/soundboard.json')
const adventskalender = require('../content/adventskalender.json')
@@ -34,6 +34,7 @@ renderPage('index', 'index', { navCurrent: 'index', currentEpisode: episodes[0]
renderPage('podcast', 'podcast', { navCurrent: 'podcast', episodes: [...episodes] })
renderPage('team', 'team', { navCurrent: 'team', team })
renderPage('meetups', 'meetups', { navCurrent: 'meetups', meetups: meetupsSorted })
renderPage('kurse', 'kurse', { navCurrent: 'kurse', kurse })
renderPage('spenden', 'spenden', { navCurrent: 'spenden', spendenregister, spendenuebersicht })
renderPage('media', 'media', { navCurrent: 'media' })
renderPage('soundboard', 'soundboard', { navCurrent: 'soundboard', soundboard })