15 Commits

Author SHA1 Message Date
coja 3906aef068 [Events] june update 2026-06-02 01:14:46 +02:00
coja 1210930ff9 [Event] june update 2026-06-01 23:20:47 +02:00
coja a212d2bece [Event] page, repetition cleanup 2026-06-01 00:49:01 +02:00
coja b34ed3c578 [Events] June partial 2026-06-01 00:47:23 +02:00
coja 7e7dbe1b49 [Events] fix and first event june 2026-06-01 00:35:27 +02:00
coja a58f5e4514 [Events] Loza lecture 2026-05-27 01:56:06 +02:00
hugo 15c0354eb3 Konferencija umesto filma 2026-05-15 22:36:19 +02:00
coja 2cf941f284 [Page] support remove monero 2026-05-05 14:26:44 +02:00
coja 9eca59f80f [Doc] csv check 2026-05-02 05:05:26 +02:00
coja c3ae746d83 [Doc] update 2026-05-02 04:49:06 +02:00
coja a66da9b2d5 [Page] statute update 2026-05-02 04:17:07 +02:00
coja e9147b34cb [Page] support monero wallet removed 2026-05-02 04:03:12 +02:00
coja 02c2dcc9fc [CSV] parsing csv with DictReader instead 2026-05-02 04:00:17 +02:00
coja 749574c8dc [Doc] cleanup 2026-05-02 03:58:58 +02:00
coja c40f101540 [JS] Wrapped everything to DOM Loaded 2026-05-02 03:56:03 +02:00
10 changed files with 118 additions and 94 deletions
+5 -13
View File
@@ -1,6 +1,6 @@
# Decentrala
dmz.rs/decentrala.org website
[dmz.rs](https://dmz.rs/) / [decentrala.org](https://decentrala.org) website
## Setup
@@ -42,18 +42,10 @@ To update events, update `dogadjaji.csv` then run:
make events
```
## TODO:
- [x] create page builder
- [x] rename `prep.py` to more informative name (`build_events.py`)
- [x] create xmpp bot that connects to events section.
- [ ] create blogging system
- [ ] webring system
- [x] make page
- [ ] populate page
- [x] make english version
- double check spelling and wording
- [x] add account and donations page and style them with the site style
For checking the csv data, suggestion is the [tennis pkg](https://github.com/gurgeous/tennis), with example command:
```sh
tennis -nt --zebra --color on --theme dark --tail 20 dogadjaji.csv
```
## TODO:
+11 -2
View File
@@ -1,4 +1,4 @@
datum, vreme, lokacija, tema, tip, link, temaE
datum, vreme, lokacija, tema, tip, link, temaEN
20-12-2022, 19:00, DC Krov https://www.openstreetmap.org/node/10594728522, Uvod u računarske mreže,,,
03-01-2023, 19:00, DC Krov https://www.openstreetmap.org/node/10594728522, Hackathon žurka, hack,,
16-01-2023, 19:00, DC Krov https://www.openstreetmap.org/node/10594728522, Privatnost na internetu, workshop,,
@@ -362,6 +362,15 @@ datum, vreme, lokacija, tema, tip, link, temaE
11-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Hardware hackathon,workshop,,Hardware hackathon
12-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,OpenSCAD,lecture,,OpenSCAD
18-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,OverTheWire (Bandit),workshop,https://forum.dmz.rs/t/overthewire-bandit-1-14/1196,OverTheWire (Bandit)
19-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Film: The Seventh Seal (1957),movie,,Movie: The Seventh Seal (1957)
19-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,The Strange Loop videos,lecture,https://www.thestrangeloop.com/index.html,The Strange Loop videos
25-05-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Reverse engineering,workshop,,Reverse engineering
26-05-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Film: TPB-AFK (2013),movie,,Movie: TPB-AFK (2013)
31-05-2026, 17:00, Drustveni centar Loza - Ivankovačka 21 https://www.openstreetmap.org/node/4013343518,Uvod u informacionu bezbednost,lecture,,Introduction to information security
01-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Sysadmin radionica,workshop,,Sysadmin workshop
02-06-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606,Software hackathon,workshop,,Software hackathon
07-06-2026, 10:00, KC Magacin - Marka Kraljevica 4 https://www.openstreetmap.org/#map=18/44.813246/20.453640, Zig Day,workshop,https://zig.day/europe/belgrade/1/,Zig Day
08-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876, Decentrala offline forum,workshop,, Decentrala offline forum
15-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876, OverTheWire - Bandit CTF,workshop,, OverTheWire - Bandit CTF
16-06-2026, 18:00, Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606, OSM contributing,workshop,,OSM contributing
22-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876, OverTheWire - Bandit CTF,workshop,, OverTheWire - Bandit CTF
29-06-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876, LAN party,party,, LAN Party
1 datum vreme lokacija tema tip link temaE temaEN
2 20-12-2022 19:00 DC Krov https://www.openstreetmap.org/node/10594728522 Uvod u računarske mreže
3 03-01-2023 19:00 DC Krov https://www.openstreetmap.org/node/10594728522 Hackathon žurka hack
4 16-01-2023 19:00 DC Krov https://www.openstreetmap.org/node/10594728522 Privatnost na internetu workshop
362 11-05-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Hardware hackathon workshop Hardware hackathon
363 12-05-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 OpenSCAD lecture OpenSCAD
364 18-05-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 OverTheWire (Bandit) workshop https://forum.dmz.rs/t/overthewire-bandit-1-14/1196 OverTheWire (Bandit)
365 19-05-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 Film: The Seventh Seal (1957) The Strange Loop videos movie lecture https://www.thestrangeloop.com/index.html Movie: The Seventh Seal (1957) The Strange Loop videos
366 25-05-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Reverse engineering workshop Reverse engineering
367 26-05-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 Film: TPB-AFK (2013) movie Movie: TPB-AFK (2013)
368 31-05-2026 17:00 Drustveni centar Loza - Ivankovačka 21 https://www.openstreetmap.org/node/4013343518 Uvod u informacionu bezbednost lecture Introduction to information security
369 01-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Sysadmin radionica workshop Sysadmin workshop
370 02-06-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 Software hackathon workshop Software hackathon
371 07-06-2026 10:00 KC Magacin - Marka Kraljevica 4 https://www.openstreetmap.org/#map=18/44.813246/20.453640 Zig Day workshop https://zig.day/europe/belgrade/1/ Zig Day
372 08-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Decentrala offline forum workshop Decentrala offline forum
373 15-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 OverTheWire - Bandit CTF workshop OverTheWire - Bandit CTF
374 16-06-2026 18:00 Matematički fakultet (Učionica JAG2) https://www.openstreetmap.org/node/3807078606 OSM contributing workshop OSM contributing
375 22-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 OverTheWire - Bandit CTF workshop OverTheWire - Bandit CTF
376 29-06-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 LAN party party LAN Party
+4 -2
View File
@@ -4,12 +4,14 @@
<p>
Decentrala is a community, united around the principles of decentralized technology and the spreading of knowledge. 
</p>
<label>Key values include:</label>
<div class="values">
<label>Our key values include:</label>
<ul>
<li>Equal access to technology</li>
<li>Free software</li>
<li>Free and open source software</li>
<li>Privacy and security</li>
</ul>
</div>
<p> Donations are accepted only from individuals, with no conditions or obligations. </p>
<p> Only open-source services are hosted on the Decentrala infrastructure. </p>
<p> Parts of the statute can be defined immutable, and cannot be voted on. </p>
+3 -3
View File
@@ -25,15 +25,15 @@
that way you joining the decetralization.
</p>
<p>
Also, we accept donations in bitcoin and monero to the following addresses:
Also, we accept donations in bitcoin on the following address:
</p>
<ul>
<li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li>
<li>
<!-- <li>
Monero:
<i
>8BESz45LnxrgCwZP32KieiN1D4LinCfsS1YjdFHfGXrVCmPs35167QsW1gd7qbff4UAtBbT6oWrkbfZnJm71HornVRiRZFS</i
>
</li>
</li> -->
</ul>
</dd>
+11 -3
View File
@@ -3,9 +3,16 @@
<div>
<p>
Decentrala je zajednica okupljena oko decentralizacije tehnologija i širenja
znanja. Decentralizacija uključuje ravnopravnost korišćenja tehnologije,
slobodnog softvera, privatnost i bezbednost.
znanja.
</p>
<div class="values">
<label> Decentralizacija uključuje: </label>
<ul>
<li>Ravnopravnost korišćenja tehnologije</li>
<li>Slobodan software otvorenog koda</li>
<li>Privatnost i bezbednost.</li>
</ul>
</div>
<p>
Na Decentralinoj arhitekturi hostuju se samo servisi koji su otvorenog koda
</p>
@@ -51,7 +58,8 @@
dodavanja novog clana, ako je prisutan na tom sastanku.
</p>
<p>
Trenutni članovi glasačkog tela su pod pseudonimom malin, coja, bora, mad3v, txrpe, euffrat, netstat.
Trenutni članovi glasačkog tela su pod pseudonimom malin, coja, bora, mad3v,
txrpe, euffrat, netstat.
</p>
</div>
+3 -1
View File
@@ -24,14 +24,16 @@
Jednostavno koriscenje naseg softwera se takodje racuna kao doprinos, posto
bi se time pridruzili decentralizaciji.
</p>
<p>Takođe primamo donacije u bitcoinu i moneru na adresama:</p>
<p>Takođe primamo donacije u bitcoin na adresi:</p>
<ul>
<li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li>
<!--
<li>
Monero:
<i
>8BESz45LnxrgCwZP32KieiN1D4LinCfsS1YjdFHfGXrVCmPs35167QsW1gd7qbff4UAtBbT6oWrkbfZnJm71HornVRiRZFS</i
>
</li>
-->
</ul>
</dd>
+9 -12
View File
@@ -20,20 +20,16 @@ TYPES_DICT = {
def load_events(csv_path:str) -> list[dict]:
events = []
with open(csv_path) as csv_file:
csv_reader = csv.reader(csv_file, skipinitialspace=True)
next(csv_reader, None)
with open(csv_path, encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file, skipinitialspace=True)
for event in csv_reader:
event_date = event[0]
event_date = event["datum"]
event_date_parsed = datetime.strptime(event_date, "%d-%m-%Y").date()
event_time = event[1]
event_location = event[2]
event_title = event[3]
types = event[4].split()
try:
link = event[5]
except IndexError:
link = ""
event_time = event["vreme"]
event_location = event["lokacija"]
event_title = event["tema"]
types = event["tip"].split()
link = event.get("link", "")
current_event = {"date":event_date_parsed,
"time":event_time,
"location": event_location,
@@ -43,6 +39,7 @@ def load_events(csv_path:str) -> list[dict]:
events.append(current_event)
return events
def build_html(events: list[dict], dayNames: list[str], typesNames: dict) -> str:
events_html = []
for event in events:
+32 -29
View File
@@ -1,59 +1,62 @@
const getById = (id) => document.getElementById(id);
const getByClass = (className) => document.getElementsByClassName(className)[0];
window.addEventListener("DOMContentLoaded", () => {
const themeBtn = getById("theme-switcher");
const hamburger = getByClass("hamburger");
const hamburgerIcon = hamburger.children[0]
const menu = document.getElementsByTagName("nav")[0];
const imgs = document.getElementsByTagName("img");
const main = document.getElementsByTagName("main")[0];
const isMenuOpen = () => hamburger.classList.contains("open");
const theme = window.localStorage.getItem("theme");
const getById = (id) => document.getElementById(id);
const getByClass = (className) => document.getElementsByClassName(className)[0];
/* Functions */
const themeBtn = getById("theme-switcher");
const hamburger = getByClass("hamburger");
const hamburgerIcon = hamburger.children[0]
const menu = document.getElementsByTagName("nav")[0];
const imgs = document.getElementsByTagName("img");
const main = document.getElementsByTagName("main")[0];
const isMenuOpen = () => hamburger.classList.contains("open");
const theme = window.localStorage.getItem("theme");
const changeToDarkTheme = () => {
/* Functions */
const changeToDarkTheme = () => {
document.documentElement.classList.add("dark");
themeBtn?.setAttribute("title", "turn the light on");
Array.from(imgs).forEach((img) => {
if (img.src.includes("-light")) img.src = img.src.replace("-light", "-dark");
});
}
}
const changeToLightTheme = () => {
const changeToLightTheme = () => {
document.documentElement.classList.remove("dark");
themeBtn?.setAttribute("title", "turn the light off");
Array.from(imgs).forEach((img) => {
if (img.src.includes("-dark")) img.src = img.src.replace("-dark", "-light");
});
}
}
const closeMenu = () => {
const closeMenu = () => {
hamburger.classList = "hamburger closed"
hamburgerIcon.src = hamburgerIcon.src.replace("opened", "closed");
menu.classList = "menu closed";
}
}
const openMenu = () => {
const openMenu = () => {
hamburger.classList = "hamburger open"
hamburgerIcon.src = hamburgerIcon.src.replace("closed", "opened");
menu.classList = "menu open";
}
}
/* Listeners */
/* Listeners */
window.addEventListener("resize", () => isMenuOpen() && closeMenu());
main.addEventListener("click", () => isMenuOpen() && closeMenu());
hamburger.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu());
window.addEventListener("resize", () => isMenuOpen() && closeMenu());
main.addEventListener("click", () => isMenuOpen() && closeMenu());
hamburger?.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu());
themeBtn.addEventListener("click", () => {
themeBtn.addEventListener("click", () => {
const title = themeBtn.getAttribute("title") ?? "off"
if (title.indexOf("off") !== -1) changeToDarkTheme();
else changeToLightTheme();
});
});
/* Rest */
/* Rest */
const userPerfersDark = window?.matchMedia?.("(prefers-color-scheme: dark)").matches
if (!theme && userPerfersDark) changeToDarkTheme();
else theme === "light" ? changeToLightTheme() : changeToDarkTheme();
const userPerfersDark = window?.matchMedia?.("(prefers-color-scheme: dark)").matches
if (!theme && userPerfersDark) changeToDarkTheme();
else theme === "light" ? changeToLightTheme() : changeToDarkTheme();
})
+12
View File
@@ -8,3 +8,15 @@ h2 {
p {
padding-bottom: 1.5rem;
}
.values {
margin-bottom: 1.5rem;
label {
display: block;
padding-bottom: 1rem;
}
ul > li {
padding-left: 1.5rem;
}
}
-1
View File
@@ -9,7 +9,6 @@
Events are also available as an
<a href="https://dmz.rs/events.ical">ical</a> file.
</p>
<p>We also provide <a href="https://dmz.rs/events.ical">ical</a> file</p>
<p>
<a href="https://wiki.dmz.rs/en/kako-pronaci-prostor" target="_blank">
Short description