Compare commits

..

12 Commits

20 changed files with 483 additions and 171 deletions

45
atom_gen.py Executable file
View File

@ -0,0 +1,45 @@
#! /usr/bin/python3
# needs lowdown and feegden installed
# feedgen can be installed with pip
# also expects that *.md files are in blog/ directory
from feedgen.feed import FeedGenerator
import subprocess
import os
blogs_dir = os.fsencode("blog")
def blogposts_list_gen():
output_list = []
for file in os.listdir(blogs_dir):
filename = os.fsdecode(file)
if filename.endswith(".md"):
full_path = "blog/" + filename
author = subprocess.run("lowdown -X author " + full_path, capture_output=True, shell=True, text=True).stdout.strip()
title = subprocess.run("lowdown -X title " + full_path, capture_output=True, shell=True, text=True).stdout.strip()
time = subprocess.run("lowdown -X time " + full_path, capture_output=True, shell=True, text=True).stdout.strip()
content_html = subprocess.run("lowdown " + full_path, capture_output=True, shell=True, text=True).stdout.strip()
output_list.append([author, title, time, content_html, full_path])
return output_list
def feedgen(blogs):
fg = FeedGenerator()
fg.id('http://dmz.rs/')
fg.title('Decentrala Blog')
fg.author( {'name':'Decentrala','email':'dmz@dmz.rs'} )
fg.link( href='https://dmz.rs/atom.xml', rel='self' )
for post in blogs:
fe = fg.add_entry()
fe.id("https://dmz.rs/" + post[4][:-3] + ".html")
fe.author({'name': post[0]})
fe.title(post[1])
fe.updated(post[2])
fe.content(content=post[3], type='html')
fg.atom_file('atom.xml')
feedgen(blogposts_list_gen())

View File

@ -1,43 +0,0 @@
<h1>Nulla possent lacrimas huius</h1>
<h2>Fratres quoque</h2>
<p>Lorem markdownum pariter: lata per tuae quo salus rorant septemfluus mecum
summisque feres potes Ulixes. Aeacus Tritonida reicere non convocat pariter
neque arma refovet quoque stabunt in. Velamina inrita, silvestribus, ut sarcina
memori, bellaque dummodo.</p>
<p>Factis dixit macies coissent! Nactasque molliter quam in memorant velamine;
praemia mundi <em>illo</em> Achille <strong>de</strong>.</p>
<h2>Velut Procrin</h2>
<p>Vobis <a href="http://www.palmae.net/aquis-inmota.html">grave</a> fessos ita Belides; poena
hora oculis celebrandaque audita guttur ad custodia exprobravit. Pacis monuere
et crimen loquor <em>contigit quae</em>! Nondum iudex, auro moratur rogaberis manet.
Faciem in dolor adusque, sum soror pectoris in reppulit superest caesis, Hebrum
e natura sonabunt. Incensaque An monitae, in animoque vulnerat terra cavo
torquet qui humili perque, cristis alii fruitur adacto.</p>
<ul>
<li>Est velavit idem</li>
<li>Naupliades tenebant instanti ense iactura ut nutantem</li>
<li>Miserarum corpore habet</li>
</ul>
<h2>Ad utque sic Charybdis iamque sequenti genitore</h2>
<p>Hesperien arida. Tibi caelo clavigeram saxoque capillos doleamne faveas testes
senex <strong>rudente lacrimis</strong> insula Cnosiacaeque? Dant ablato adulterium gemino,
pluvialibus una, dependent iactura illum redit atque dixi pondera. Eumque
sanguis errare, formasque parabat volubilibus satis creaverat dextera Iuppiter
te sero, est. Opem duceret quam tum pollentibus ramumque tauri; at Saturnia
erigitur imitamine ferens adunca delapsaque viminis, terras.</p>
<h2>Denique ostendit femina tamen</h2>
<p>Telum in ab utque ut et mihi <strong>auras Midan</strong> meo genus membra comites ne. Orbis
via necis. Romana deus, sub frangunt furor crepuscula equorum Teleboasque templa
virgineumque belua obsita est. Fragorem Somnus; ducebas placido oscula.</p>
<blockquote>
<p>Inmota manifesta producit, inquit verbisque fluctus iamque, quo fuerat ipse
nostra, iussit <strong>nec tenebat</strong>. Pars procul, pietate crinales meus <em>totiens</em>
haustus frondes, per sedebat. Domum vincite.</p>
</blockquote>
<h2>De curaque quoque reddat numina quae veniam</h2>
<p>Fessus iacit tantum elimat a medios vinoque finita adspergine liquerat munere
vultibus Atridae pecus positoque reluxit. Veniebat videtur laesae quod vacca,
lolium neu Perseus fraude nominibus contraria.</p>
<p>Parat <strong>ferus</strong> in actis terebrata animaeque <strong>quoque</strong>, deos et morte agitantem
ore. Proelia casus Gryneus. Quis mihi <em>ille cur</em> Assyrius per siquis, ille
Hecabe Arethusa, erigite perfectis.</p>

View File

@ -1,53 +0,0 @@
# Nulla possent lacrimas huius
## Fratres quoque
Lorem markdownum pariter: lata per tuae quo salus rorant septemfluus mecum
summisque feres potes Ulixes. Aeacus Tritonida reicere non convocat pariter
neque arma refovet quoque stabunt in. Velamina inrita, silvestribus, ut sarcina
memori, bellaque dummodo.
Factis dixit macies coissent! Nactasque molliter quam in memorant velamine;
praemia mundi *illo* Achille **de**.
## Velut Procrin
Vobis [grave](http://www.palmae.net/aquis-inmota.html) fessos ita Belides; poena
hora oculis celebrandaque audita guttur ad custodia exprobravit. Pacis monuere
et crimen loquor *contigit quae*! Nondum iudex, auro moratur rogaberis manet.
Faciem in dolor adusque, sum soror pectoris in reppulit superest caesis, Hebrum
e natura sonabunt. Incensaque An monitae, in animoque vulnerat terra cavo
torquet qui humili perque, cristis alii fruitur adacto.
- Est velavit idem
- Naupliades tenebant instanti ense iactura ut nutantem
- Miserarum corpore habet
## Ad utque sic Charybdis iamque sequenti genitore
Hesperien arida. Tibi caelo clavigeram saxoque capillos doleamne faveas testes
senex **rudente lacrimis** insula Cnosiacaeque? Dant ablato adulterium gemino,
pluvialibus una, dependent iactura illum redit atque dixi pondera. Eumque
sanguis errare, formasque parabat volubilibus satis creaverat dextera Iuppiter
te sero, est. Opem duceret quam tum pollentibus ramumque tauri; at Saturnia
erigitur imitamine ferens adunca delapsaque viminis, terras.
## Denique ostendit femina tamen
Telum in ab utque ut et mihi **auras Midan** meo genus membra comites ne. Orbis
via necis. Romana deus, sub frangunt furor crepuscula equorum Teleboasque templa
virgineumque belua obsita est. Fragorem Somnus; ducebas placido oscula.
> Inmota manifesta producit, inquit verbisque fluctus iamque, quo fuerat ipse
> nostra, iussit **nec tenebat**. Pars procul, pietate crinales meus *totiens*
> haustus frondes, per sedebat. Domum vincite.
## De curaque quoque reddat numina quae veniam
Fessus iacit tantum elimat a medios vinoque finita adspergine liquerat munere
vultibus Atridae pecus positoque reluxit. Veniebat videtur laesae quod vacca,
lolium neu Perseus fraude nominibus contraria.
Parat **ferus** in actis terebrata animaeque **quoque**, deos et morte agitantem
ore. Proelia casus Gryneus. Quis mihi *ille cur* Assyrius per siquis, ille
Hecabe Arethusa, erigite perfectis.

View File

@ -10,3 +10,11 @@ datum, vreme, lokacija, tema
08-05-2023, 19:00, DC Krov https://www.openstreetmap.org/node/10594728522, Linux install day
09-05-2023, 19:00, DC Krov https://www.openstreetmap.org/node/10594728522, Cryptoparty - Uvod u privatnost
11-05-2023, 18:00, Polyhedra https://www.openstreetmap.org/node/4856556781, Uvod u racunarske mreze
01-08-2023, 19:00, DC Krov, Tehno veče
07-08-2023, 19:00, DC Krov, Linux ricing
08-08-2023, 19:00, DC Krov, Lambda račun
14-08-2023, 19:00, DC Krov, Linux distro diskusija
15-08-2023, 19:00, DC Krov, Pirati 777 mora
21-08-2023, 19:00, DC Krov, Python vežbe
22-08-2023, 19:00, DC Krov, Autentifikacija na internetu
28-08-2023, 19:00, DC Krov, Kviz
1 datum vreme lokacija tema
10 08-05-2023 19:00 DC Krov https://www.openstreetmap.org/node/10594728522 Linux install day
11 09-05-2023 19:00 DC Krov https://www.openstreetmap.org/node/10594728522 Cryptoparty - Uvod u privatnost
12 11-05-2023 18:00 Polyhedra https://www.openstreetmap.org/node/4856556781 Uvod u racunarske mreze
13 01-08-2023 19:00 DC Krov Tehno veče
14 07-08-2023 19:00 DC Krov Linux ricing
15 08-08-2023 19:00 DC Krov Lambda račun
16 14-08-2023 19:00 DC Krov Linux distro diskusija
17 15-08-2023 19:00 DC Krov Pirati 777 mora
18 21-08-2023 19:00 DC Krov Python vežbe
19 22-08-2023 19:00 DC Krov Autentifikacija na internetu
20 28-08-2023 19:00 DC Krov Kviz

BIN
font/Facade-Sud.woff Normal file

Binary file not shown.

Binary file not shown.

21
img/strelica-closed.svg Normal file
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="40"
height="40"
viewBox="0 0 10 10"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<g
id="layer1">
<path
id="path1336"
style="fill:#181715;stroke-width:0.504542;fill-opacity:1"
d="M 10 0 L 8.8911133 0.57714844 L 8.8862305 0.58544922 L 0.96435547 4.2792969 A 10 10 0 0 0 1.574707 5.3740234 L 7.6362305 2.5473633 L 4.1142578 8.0756836 A 10 10 0 0 0 5.1674805 8.7485352 L 8.6904297 3.21875 L 8.6904297 9.9086914 A 10 10 0 0 0 9.9404297 9.9975586 L 9.9404297 1.2568359 L 9.9453125 1.2490234 L 10 0 z " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 773 B

21
img/strelica-opened.svg Normal file
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="40"
height="40"
viewBox="0 0 10 10"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<g
id="layer1">
<path
id="path1336"
style="fill:#181715;fill-opacity:1;stroke-width:0.504542"
d="M 5 0.0029296875 L 4.375 1.0859375 L 4.375 1.0952148 L 0.35400391 7.4072266 A 8.75 8.75 0 0 0 1.4614258 7.9956055 L 4.375 3.4213867 L 4.375 8.7265625 A 8.75 8.75 0 0 0 5 8.75 A 8.75 8.75 0 0 0 5.625 8.7265625 L 5.625 3.4213867 L 8.5390625 7.9956055 A 8.75 8.75 0 0 0 9.6464844 7.4072266 L 5.625 1.0952148 L 5.625 1.0859375 L 5 0.0029296875 z " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 799 B

View File

@ -4,6 +4,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/styles/reset.css">
<link rel="stylesheet" href="/styles/style.css">
<link rel="stylesheet" href="/styles/home.css">
<link rel="shortcut icon" href="/img/favicon.ico" type="image/x-icon">
@ -13,43 +14,36 @@
<body>
<header>
<a class="logo" href="/index.html">Decentrala</a>
<a id="logo" href="/index.html">Decentrala</a>
<span>
<button id="theme-switcher">turn the lights off</button>
<a class="account" href="/pages/account.html">Nalog</a>
</span>
</header>
<div id="main">
<h1>Dobrodosli!</h1>
<h1>Dobrodošao!</h1>
<p>
Mi smo <em>Decentrala</em> - grupa entuzijasta okupljena oko ideja decentralizacije i slobodnog sirenja znanja.
Zvuci interesantno? Evo jos nekih stvari o nama:
Mi smo <em>Decentrala</em> - grupa entuzijasta okupljena oko ideja decentralizacije i slobodnog širenja znanja.
Zvuči interesantno? Evo još nekih stvari o nama:
</p>
<dl>
<dt>Znanje:</dt>
<dd>Sve nase radionice su besplatne i otvorene za sve zainteresovane, a ako imate nesto sto zelite da
podelite, najavite se na nasem <a href="https://forum.dmz.rs">Forumu</a> i odrzite radionicu kod nas!</dd>
<dd>Sve naše radionice su besplatne i otvorene za sve zainteresovane.
Ako želiš nešto da podeliš najavi se na našem <a href="https://forum.dmz.rs">Forumu</a> i održi radionicu kod nas!</dd>
<dt>Akcije:</dt>
<dd>Povremeno organizujemo razlicite akcije, hakatone, crypto-partije, izlozbe i slicne dogadjaje otvorene za sve
zainteresovane. </dd>
<dd>Povremeno organizujemo različite akcije, hakatone, crypto-partije, izložbe i slične događaje otvorene za sve zainteresovane. </dd>
<dt>Servisi:</dt>
<dd>Na nasim serverima pokrecemo neke servise (email, git, wiki i druge) koji su otvoreni za sve i koje mozes
koristiti sa ili bez naseg naloga.</dd>
<dt>Ljudi:</dt>
<dd>Lorem ipsum dolor sit amet.</dd>
<dd>Na našim serverima pokrećemo razne servise (email, git, wiki i druge) koji su otvoreni za sve i koji se mogu koristiti sa ili bez našeg naloga.</dd>
</dl>
<p>
Ako si procitao sve i i dalje si zainteresovan, mozes da napravis <a href="/pages/account.html">nalog</a> na nasem
serveru koji ce
ti omoguciti da koristis sve nase <a href="/pages/services.html">servise</a>, a ako prvo hoces da vidis kako to
sve izgleda u realnosti, mozes da dodjes na neki od nasih <a href="/pages/events.html">dogadjaja</a>, i tamo nas
upoznas!
Ako si i dalje zainteresovan, možeš napraviti <a href="/pages/account.html">nalog</a> na našem serveru koji će ti omogućiti korišćenje svih naših <a href="/pages/services.html">servisa</a>.
Ako želiš prvo da vidiš kako to sve izgleda u realnosti, možeš doći na neki od naših <a href="/pages/events.html">događaja</a>, i tu nas upoznati!
</p>
<img id="mesh" src="/img/mesh-light.svg">
</div>
<footer>
<div id="sections-menu">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
@ -57,19 +51,21 @@
</div>
<button id="sections-button" opened="false"><img src="/img/strelica-closed-light.svg" alt="OpenMenu"></button>
<span class="sections">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
<a href="/pages/contact.html">Kontakt</a>
</span>
<span class="copyleft">
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="/img/cc-light.svg"
alt="CreativeCommons"></a>
<a href=""><img src="/img/w-light.svg" alt="Webring"></a>
<a href="https://gitea.dmz.rs/eline/decentrala-website-static-new"><img src="/img/git-light.svg"
alt="SourceCode"></a>
<a href="https://balkan.fedive.rs/@decentrala"><img src="/img/mastodon-light.svg" alt="Mastodon"></a>
<span class="links">
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="/img/cc-light.svg"
alt="CreativeCommons"></a>
<a href=""><img src="/img/w-light.svg" alt="Webring"></a>
<a href="https://gitea.dmz.rs/eline/decentrala-website-static-new"><img src="/img/git-light.svg"
alt="SourceCode"></a>
<a href="https://balkan.fedive.rs/@decentrala"><img src="/img/mastodon-light.svg" alt="Mastodon"></a>
</span>
<span>Decentrala &copy; 2023</span>
</span>
</footer>

View File

@ -25,7 +25,7 @@
</div>
<footer>
<div id="sections-menu">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
@ -33,7 +33,7 @@
</div>
<button id="sections-button" opened="false"><img src="/img/strelica-closed-light.svg" alt="OpenMenu"></button>
<span class="sections">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>

View File

@ -25,7 +25,7 @@
</div>
<footer>
<div id="sections-menu">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
@ -33,7 +33,7 @@
</div>
<button id="sections-button" opened="false"><img src="/img/strelica-closed-light.svg" alt="OpenMenu"></button>
<span class="sections">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>

View File

@ -21,16 +21,16 @@
</header>
<div id="main">
<h1>Kontakt</h1>
<p>Mozes nam poslati mail na <a href="mailto:dmz@dmz.rs">dmz@dmz.rs</a> ili se mozes pridruziti nasem <a
<p>Možeš nam poslati mail na <a href="mailto:dmz@dmz.rs">dmz@dmz.rs</a> ili se mozes pridružiti našem <a
href="https://forum.dmz.rs">Forumu</a>.</p>
<p>Takodje smo i na <a href="https://balkan.fedive.rs/@decentrala">Fediversu!</a></p>
<p>Takođe smo i na <a href="https://balkan.fedive.rs/@decentrala">Fediversu!</a></p>
<p style="position: relative; top: 5rem;">U slucaju da nadjete <em>bug</em> na sajtu, bili bismo jako zahvalni
ako bi mogli da nam ga prijavite (npr. putem emaila).</p>
<img id="mesh" src="/img/mesh-light.svg">
</div>
<footer>
<div id="sections-menu">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
@ -38,7 +38,7 @@
</div>
<button id="sections-button" opened="false"><img src="/img/strelica-closed-light.svg" alt="OpenMenu"></button>
<span class="sections">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>

View File

@ -25,7 +25,7 @@
</div>
<footer>
<div id="sections-menu">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
@ -33,7 +33,7 @@
</div>
<button id="sections-button" opened="false"><img src="/img/strelica-closed-light.svg" alt="OpenMenu"></button>
<span class="sections">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>

View File

@ -66,7 +66,7 @@
</div>
<footer>
<div id="sections-menu">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>
@ -74,7 +74,7 @@
</div>
<button id="sections-button" opened="false"><img src="/img/strelica-closed-light.svg" alt="OpenMenu"></button>
<span class="sections">
<a href="/pages/events.html">Dogadjaji</a>
<a href="/pages/events.html">Događaji</a>
<a href="/pages/projects.html">Projekti</a>
<a href="/pages/blog.html">Blog</a>
<a href="/pages/services.html">Servisi</a>

9
poster.html Normal file
View File

@ -0,0 +1,9 @@
<html><head><link rel="stylesheet" href="styles/poster.css"><head><body><main><h1>DECENTRALA</h1><h2>Plan za Avgust</h2><table><tr><td>UTO</td><td>1.</td><td> Tehno veče</td></tr>
<tr><td>PON</td><td>7.</td><td> Linux ricing</td></tr>
<tr><td>UTO</td><td>8.</td><td> Lambda račun</td></tr>
<tr><td>PON</td><td>14.</td><td> Linux distro diskusija</td></tr>
<tr><td>UTO</td><td>15.</td><td> Pirati 777 mora</td></tr>
<tr><td>PON</td><td>21.</td><td> Python vežbe</td></tr>
<tr><td>UTO</td><td>22.</td><td> Autentifikacija na internetu</td></tr>
<tr><td>PON</td><td>28.</td><td> Kviz</td></tr>
</table><p>Radionice počinju u <strong>19h</strong> u Društvenom centru Krov u <strong>Kraljice Marije 47</strong>.</p><p>Ulaz u zgradu je u prolazu pored Štark prodavnice slatkiša, odmah pored menjačnice. DC Krov je na poslednjem spratu.</p><div id=link>dmz.rs</div></main></body></html>

61
poster.py Normal file
View File

@ -0,0 +1,61 @@
import csv
import datetime as dt
from dateutil import relativedelta
EVENTS_CSV_PATH = "dogadjaji.csv"
CURRENT_TIME = dt.date.today()
NEXT_MONTH = CURRENT_TIME + relativedelta.relativedelta(months=1, day=1)
DAYS_OF_WEEK_SR = ("PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED")
MONTHS_SR = ("Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust",\
"Septembar", "Oktobar", "Novembar", "Decembar")
def load_events(csv_path:str) -> list[dict]:
events = []
with open(csv_path) as csv_file:
csv_reader = csv.reader(csv_file)
next(csv_reader, None)
for event in csv_reader:
event_date = event[0]
event_date_parsed = dt.datetime.strptime(event_date, "%d-%m-%Y").date()
event_time = event[1]
event_title = event[3]
current_event = {"date":event_date_parsed,
"time":event_time,
"title":event_title.strip()}
if event_date_parsed >= NEXT_MONTH:
events.append(current_event)
return events
def render_table(events:list[dict])-> str:
html = ""
for event in events:
date = DAYS_OF_WEEK_SR[event["date"].weekday()]
day = event["date"].day
title = event["title"]
html += f"\t\t\t<tr> <td>{date}</td> <td>{day}.</td> <td>{title}</td> </tr>\n"
return html
def render_page(table: str) -> str:
head = "<head>\n\t<meta charset=\"UTF-8\">\n\t<link rel=\"stylesheet\"\
href=\"styles/poster.css\">\n<head>"
header = "<h1>DECENTRALA</h1>"
subheader = f"<h2>Plan za {MONTHS_SR[NEXT_MONTH.month - 1]}</h2>"
link = "<div id=link>dmz.rs</div>"
p1 = "<p>Radionice počinju u <strong>19h</strong> u Društvenom centru Krov\
u <strong>Kraljice Marije 47</strong>.</p>"
p2 = "<p>Ulaz u zgradu je u prolazu pored Štark prodavnice slatkiša, odmah\
pored menjačnice. DC Krov je na poslednjem spratu.</p>"
return f"<html>\n{head}\n<body>\n\t<main>\n\t\t{header}\n\t\t{subheader}\
\n\t\t<table>\n{table}\t\t</table>\n\t\t{p1}\n\t\t{p2}\n\t\t{link}\n\t</main>\
\n</body>\n</html>"
def main():
events = load_events(EVENTS_CSV_PATH)
table = render_table(events)
page = render_page(table)
f = open("poster.html", "w")
f.write(page)
f.close()
if __name__ == "__main__":
main()

View File

@ -22,7 +22,7 @@ if (theme !== null) {
}
theme_switcher.addEventListener("click", () => {
if (theme_switcher.textContent.indexOf("off") !== -1) {
if (theme_switcher.getAttribute("title").indexOf("off") !== -1) {
changeToDarkTheme();
} else {
changeToLightTheme();
@ -30,7 +30,7 @@ theme_switcher.addEventListener("click", () => {
});
function changeToDarkTheme() {
theme_switcher.textContent = "turn the light on";
theme_switcher.setAttribute("title", "turn the light on");
document.documentElement.style.setProperty("--border", "var(--dark-border)");
document.documentElement.style.setProperty("--text", "var(--dark-text)");
document.documentElement.style.setProperty("--bg", "var(--dark-bg)");
@ -41,7 +41,7 @@ function changeToDarkTheme() {
}
function changeToLightTheme() {
theme_switcher.textContent = "turn the light off";
theme_switcher.setAttribute("title", "turn the light off");
document.documentElement.style.setProperty("--border", "var(--light-border)");
document.documentElement.style.setProperty("--text", "var(--light-text)");
document.documentElement.style.setProperty("--bg", "var(--light-bg)");
@ -84,12 +84,10 @@ window.addEventListener("resize", () => {
}
});
main.addEventListener("click", (event) => {
main.addEventListener("click", () => {
if (sections_button.getAttribute("opened") === "true") {
closeMenu();
}
});
DEBUG;
console.log(window.innerWidth);
console.log(window.innerHeight);

68
styles/poster.css Normal file
View File

@ -0,0 +1,68 @@
html {
}
@font-face {
font-family: Facade;
src: url(../font/Facade-Sud.woff);
}
@font-face {
font-family: jetbrains-mono;
src: url(../font/JetBrainsMono-Regular.ttf);
}
html, body {
margin: 0;
padding: 0;
}
main {
max-width: 1200px;
margin: auto;
font-family: 'jetbrains-mono';
padding: 2.3rem;
}
h1 {
font-family: 'Facade';
text-align: center;
font-size: 5rem;
margin: 0rem;
}
h2 {
text-align: center;
margin-top: 0.0rem;
margin-bottom: 2rem;
font-size: 2rem;
}
p {
font-size: 1.5rem;
}
table {
margin: 4rem 0;
}
td {
font-size: 1.8rem;
padding-top: 0.5rem;
}
td:first-child {
width: 3.5rem;
}
td:nth-child(2) {
padding-right: 1rem;
}
#link {
margin-top: 8rem;
text-align: right;
font-size: 3rem;
}

149
styles/reset.css Normal file
View File

@ -0,0 +1,149 @@
/* Copyright (c) 2023 Luka Ivanovic */
/* https://github.com/luka-hash/css-reset */
/* This code is licensed under MIT licence */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body {
width: 100%;
height: 100%;
}
a,
article,
audio,
blockquote,
body,
canvas,
caption,
code,
dd,
del,
details,
div,
dl,
dt,
em,
fieldset,
figcaption,
figure,
footer,
form,
h1,
h2,
h3,
h4,
h5,
h6,
header,
hgroup,
html,
iframe,
img,
ins,
kbd,
label,
legend,
li,
mark,
menu,
nav,
ol,
output,
p,
pre,
s,
section,
small,
span,
strong,
sub,
summary,
sup,
table,
tbody,
td,
tfoot,
th,
thead,
time,
tr,
ul,
video {
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
article,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block;
}
body {
line-height: 1.5;
-webkit-font-smoothing: antialiased;
}
ol,
ul {
list-style: none;
}
blockquote {
quotes: none;
}
blockquote::before,
blockquote::after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
img,
picture,
video,
canvas,
svg {
display: block;
max-width: 100%;
}
input,
button,
textarea,
select {
font: inherit;
}
p,
h1,
h2,
h3,
h4,
h5,
h6 {
overflow-wrap: break-word;
hyphens: auto;
}

View File

@ -5,9 +5,7 @@
--dark-text: #ffffff;
--dark-bg: #181715;
--dark-border: #ffffff;
--hightlight: #72dec2;
--border: var(--light-border);
--text: var(--light-text);
--bg: var(--light-bg);
@ -34,10 +32,12 @@ body {
body {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 5rem 1fr 5rem;
grid-column-gap: 0px;
grid-row-gap: 0px;
grid-template:
"header" 10vh
"main" 1fr
"footer" 10vh
/ 1fr;
gap: 0;
font-family: 'Iosevka';
}
@ -50,17 +50,17 @@ footer {
}
header {
grid-area: 1 / 1 / 2 / 2;
grid-area: "header";
border-bottom: 2px solid var(--border);
}
footer {
grid-area: 3 / 1 / 4 / 2;
grid-area: "footer";
border-top: 2px solid var(--border);
}
#main {
grid-area: 2 / 1 / 3 / 2;
grid-area: "main";
padding: 3rem 3rem 3rem 3rem;
font-size: 1.3rem;
line-height: 2rem;
@ -85,11 +85,25 @@ a:focus {
text-decoration: line-through var(--text);
}
.logo {
font-size: 3rem;
#logo {
font-size: 2.5rem;
font-weight: bold;
font-variant: small-caps;
}
#theme-switcher {
border: 3px solid var(--border);
width: 1.5rem;
height: 1.5rem;
border-radius: 3rem;
margin-left: auto;
background: linear-gradient(90deg, var(--border) 0%, var(--border) 50%, var(--bg) 51%, var(--bg) 100%);
}
#theme-switcher:hover {
border-color: var(--hightlight);
background: linear-gradient(90deg, var(--hightlight) 0%, var(--hightlight) 50%, var(--bg) 51%, var(--bg) 100%);
}
.account,
.sections,
#sections-menu {
@ -98,27 +112,14 @@ a:focus {
#mesh {
position: absolute;
bottom: 5rem;
bottom: 10vh;
right: 0;
user-select: none;
pointer-events: none;
}
@media screen and (max-height: 860px),
screen and (max-width: 1500px) {
#mesh {
display: none;
}
}
@media screen and (max-width: 1160px) {
.sections {
display: none;
}
#sections-button {
display: block !important;
}
.links {
display: flex;
}
#sections-button {
@ -133,15 +134,13 @@ screen and (max-width: 1500px) {
border: 2px solid var(--border);
background-color: var(--bg);
position: absolute;
bottom: calc(5rem - 2px);
left: 0;
bottom: calc(10vh - 2px);
left: calc(0px - 2px);
align-items: center;
padding: 2rem 3rem;
display: none;
}
.copyleft a,
.sections a {
margin: 0 1rem 0 0;
@ -165,4 +164,37 @@ button {
background: var(--bg);
color: var(--text);
margin: 0 2rem 0 0;
cursor: pointer;
}
@media screen and (max-height: 860px),
screen and (max-width: 1500px) {
#mesh {
display: none;
}
}
@media screen and (max-width: 1160px) {
.sections {
display: none;
}
#sections-button {
display: block !important;
}
}
@media screen and (max-width: 540px) {
#logo {
font-size: 2.2rem;
}
.links {
display: none;
}
header,
footer {
padding: 0 1rem;
}
}