7 Commits

Author SHA1 Message Date
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
9 changed files with 106 additions and 90 deletions

View File

@@ -1,6 +1,6 @@
# Decentrala # Decentrala
dmz.rs/decentrala.org website [dmz.rs](https://dmz.rs/) / [decentrala.org](https://decentrala.org) website
## Setup ## Setup
@@ -42,18 +42,10 @@ To update events, update `dogadjaji.csv` then run:
make events make events
``` ```
## TODO: For checking the csv data, suggestion is the [tennis pkg](https://github.com/gurgeous/tennis), with example command:
```sh
- [x] create page builder tennis -nt --zebra --color on --theme dark --tail 20 dogadjaji.csv
- [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
## TODO: ## TODO:

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,,, 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,, 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,, 16-01-2023, 19:00, DC Krov https://www.openstreetmap.org/node/10594728522, Privatnost na internetu, workshop,,
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

View File

@@ -4,12 +4,14 @@
<p> <p>
Decentrala is a community, united around the principles of decentralized technology and the spreading of knowledge.  Decentrala is a community, united around the principles of decentralized technology and the spreading of knowledge. 
</p> </p>
<label>Key values include:</label> <div class="values">
<label>Our key values include:</label>
<ul> <ul>
<li>Equal access to technology</li> <li>Equal access to technology</li>
<li>Free software</li> <li>Free and open source software</li>
<li>Privacy and security</li> <li>Privacy and security</li>
</ul> </ul>
</div>
<p> Donations are accepted only from individuals, with no conditions or obligations. </p> <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> 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> <p> Parts of the statute can be defined immutable, and cannot be voted on. </p>

View File

@@ -29,11 +29,11 @@
</p> </p>
<ul> <ul>
<li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li> <li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li>
<li> <!-- <li>
Monero: Monero:
<i <i
>8BESz45LnxrgCwZP32KieiN1D4LinCfsS1YjdFHfGXrVCmPs35167QsW1gd7qbff4UAtBbT6oWrkbfZnJm71HornVRiRZFS</i >8BESz45LnxrgCwZP32KieiN1D4LinCfsS1YjdFHfGXrVCmPs35167QsW1gd7qbff4UAtBbT6oWrkbfZnJm71HornVRiRZFS</i
> >
</li> </li> -->
</ul> </ul>
</dd> </dd>

View File

@@ -3,9 +3,16 @@
<div> <div>
<p> <p>
Decentrala je zajednica okupljena oko decentralizacije tehnologija i širenja Decentrala je zajednica okupljena oko decentralizacije tehnologija i širenja
znanja. Decentralizacija uključuje ravnopravnost korišćenja tehnologije, znanja.
slobodnog softvera, privatnost i bezbednost.
</p> </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> <p>
Na Decentralinoj arhitekturi hostuju se samo servisi koji su otvorenog koda Na Decentralinoj arhitekturi hostuju se samo servisi koji su otvorenog koda
</p> </p>
@@ -51,7 +58,8 @@
dodavanja novog clana, ako je prisutan na tom sastanku. dodavanja novog clana, ako je prisutan na tom sastanku.
</p> </p>
<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> </p>
</div> </div>

View File

@@ -27,11 +27,13 @@
<p>Takođe primamo donacije u bitcoinu i moneru na adresama:</p> <p>Takođe primamo donacije u bitcoinu i moneru na adresama:</p>
<ul> <ul>
<li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li> <li>Bitcoin: <i>bc1qjhsfgq79wuzzv32yml9zglwzf9qcwfj3atuy74</i></li>
<!--
<li> <li>
Monero: Monero:
<i <i
>8BESz45LnxrgCwZP32KieiN1D4LinCfsS1YjdFHfGXrVCmPs35167QsW1gd7qbff4UAtBbT6oWrkbfZnJm71HornVRiRZFS</i >8BESz45LnxrgCwZP32KieiN1D4LinCfsS1YjdFHfGXrVCmPs35167QsW1gd7qbff4UAtBbT6oWrkbfZnJm71HornVRiRZFS</i
> >
</li> </li>
-->
</ul> </ul>
</dd> </dd>

21
prep.py
View File

@@ -20,20 +20,16 @@ TYPES_DICT = {
def load_events(csv_path:str) -> list[dict]: def load_events(csv_path:str) -> list[dict]:
events = [] events = []
with open(csv_path) as csv_file: with open(csv_path, encoding='utf-8') as csv_file:
csv_reader = csv.reader(csv_file, skipinitialspace=True) csv_reader = csv.DictReader(csv_file, skipinitialspace=True)
next(csv_reader, None)
for event in csv_reader: 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_date_parsed = datetime.strptime(event_date, "%d-%m-%Y").date()
event_time = event[1] event_time = event["vreme"]
event_location = event[2] event_location = event["lokacija"]
event_title = event[3] event_title = event["tema"]
types = event[4].split() types = event["tip"].split()
try: link = event.get("link", "")
link = event[5]
except IndexError:
link = ""
current_event = {"date":event_date_parsed, current_event = {"date":event_date_parsed,
"time":event_time, "time":event_time,
"location": event_location, "location": event_location,
@@ -43,6 +39,7 @@ def load_events(csv_path:str) -> list[dict]:
events.append(current_event) events.append(current_event)
return events return events
def build_html(events: list[dict], dayNames: list[str], typesNames: dict) -> str: def build_html(events: list[dict], dayNames: list[str], typesNames: dict) -> str:
events_html = [] events_html = []
for event in events: for event in events:

View File

@@ -1,3 +1,5 @@
window.addEventListener("DOMContentLoaded", () => {
const getById = (id) => document.getElementById(id); const getById = (id) => document.getElementById(id);
const getByClass = (className) => document.getElementsByClassName(className)[0]; const getByClass = (className) => document.getElementsByClassName(className)[0];
@@ -44,7 +46,7 @@ const openMenu = () => {
window.addEventListener("resize", () => isMenuOpen() && closeMenu()); window.addEventListener("resize", () => isMenuOpen() && closeMenu());
main.addEventListener("click", () => isMenuOpen() && closeMenu()); main.addEventListener("click", () => isMenuOpen() && closeMenu());
hamburger.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu()); hamburger?.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu());
themeBtn.addEventListener("click", () => { themeBtn.addEventListener("click", () => {
const title = themeBtn.getAttribute("title") ?? "off" const title = themeBtn.getAttribute("title") ?? "off"
@@ -57,3 +59,4 @@ themeBtn.addEventListener("click", () => {
const userPerfersDark = window?.matchMedia?.("(prefers-color-scheme: dark)").matches const userPerfersDark = window?.matchMedia?.("(prefers-color-scheme: dark)").matches
if (!theme && userPerfersDark) changeToDarkTheme(); if (!theme && userPerfersDark) changeToDarkTheme();
else theme === "light" ? changeToLightTheme() : changeToDarkTheme(); else theme === "light" ? changeToLightTheme() : changeToDarkTheme();
})

View File

@@ -8,3 +8,15 @@ h2 {
p { p {
padding-bottom: 1.5rem; padding-bottom: 1.5rem;
} }
.values {
margin-bottom: 1.5rem;
label {
display: block;
padding-bottom: 1rem;
}
ul > li {
padding-left: 1.5rem;
}
}