Compare commits
16 Commits
e18bf1899e
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9eca59f80f | ||
|
|
c3ae746d83 | ||
|
|
a66da9b2d5 | ||
|
|
e9147b34cb | ||
|
|
02c2dcc9fc | ||
|
|
749574c8dc | ||
|
|
c40f101540 | ||
|
|
5958bbc24f | ||
|
|
d9c93d1182 | ||
|
|
d001d6b287 | ||
|
|
910f375c94 | ||
|
|
69b0e5b63a | ||
|
|
ec64147c6b | ||
|
|
b6cfef830a | ||
|
|
e3330ad1bd | ||
|
|
6d31b3915b |
@@ -1 +0,0 @@
|
|||||||
,user,localhost,03.05.2025 20:05,file:///home/user/.config/libreoffice/4;
|
|
||||||
30
Makefile
Normal file
30
Makefile
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
.PHONY: build events dev stop help prep
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Available commands:"
|
||||||
|
@echo " make prep - Create venv and install requirements"
|
||||||
|
@echo " make events - Update site from CSV (build pages + images)"
|
||||||
|
@echo " make dev - Start development server"
|
||||||
|
@echo " make stop - Stop development server"
|
||||||
|
@echo " make build - Full website build sequence"
|
||||||
|
@echo " make help - Show this help message"
|
||||||
|
|
||||||
|
prep:
|
||||||
|
python3 -m venv .venv
|
||||||
|
./.venv/bin/pip install --upgrade pip
|
||||||
|
./.venv/bin/pip install -r requirements.txt
|
||||||
|
|
||||||
|
build:
|
||||||
|
./.venv/bin/python atom_gen.py
|
||||||
|
./.venv/bin/python prep.py
|
||||||
|
./.venv/bin/python build_pages.py
|
||||||
|
|
||||||
|
events:
|
||||||
|
./.venv/bin/python build_pages.py
|
||||||
|
./.venv/bin/python image_poster.py
|
||||||
|
|
||||||
|
dev:
|
||||||
|
nginx -p . -c nginx.dev.conf
|
||||||
|
|
||||||
|
stop:
|
||||||
|
nginx -p . -s stop
|
||||||
34
README.md
34
README.md
@@ -1,40 +1,50 @@
|
|||||||
# Decentrala
|
# Decentrala
|
||||||
|
|
||||||
dmz.rs/decentrala.org website
|
[dmz.rs](https://dmz.rs/) / [decentrala.org](https://decentrala.org) website
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
First, prepare the virtual environment and install dependencies:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make prep
|
||||||
|
```
|
||||||
|
|
||||||
## Build site
|
## Build site
|
||||||
|
|
||||||
Run
|
To build the complete website:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python atom_gen.py
|
make build
|
||||||
python prep.py
|
|
||||||
python build_pages.py
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Complete website will be contained in `site/`. You can copy this to server.
|
The complete website will be contained in `site/`. You can copy this to your server.
|
||||||
|
|
||||||
## Development server
|
## Development server
|
||||||
|
|
||||||
To start a development server, first build site, then run (possibly with `sudo`)
|
To start a development server, first build the site, then run (possibly with `sudo`):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nginx -p . -c nginx.dev.conf
|
make dev
|
||||||
```
|
```
|
||||||
|
|
||||||
To stop it:
|
To stop it:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nginx -p . -s stop
|
make stop
|
||||||
```
|
```
|
||||||
|
|
||||||
## Events
|
## Events
|
||||||
|
|
||||||
To update events, update the `events.csv` then run commands
|
To update events, update `dogadjaji.csv` then run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
python build_pages.py # builds html out of csv
|
make events
|
||||||
python image_poster.py # generates images for events
|
```
|
||||||
|
|
||||||
|
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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ def main():
|
|||||||
f.write(html)
|
f.write(html)
|
||||||
f.close()
|
f.close()
|
||||||
with open(f'pages/en/{page["name"]}.html') as f:
|
with open(f'pages/en/{page["name"]}.html') as f:
|
||||||
pageHtml = "<div><img src='/img/students_bug.jpg' alt='Students found the bug' /></div>"
|
pageHtml = "<div class='cover-wrap'><img src='/img/students_bug.jpg' alt='Students found the bug' /></div>"
|
||||||
pageHtml += f.read()
|
pageHtml += f.read()
|
||||||
html = buildPage(page['name'], page['titleEN'], pageHtml, page['style'], templateEN)
|
html = buildPage(page['name'], page['titleEN'], pageHtml, page['style'], templateEN)
|
||||||
f = open(f'site/en/{page["name"]}.html', 'w')
|
f = open(f'site/en/{page["name"]}.html', 'w')
|
||||||
|
|||||||
@@ -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,,
|
||||||
|
|||||||
|
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
23
prep.py
23
prep.py
@@ -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:
|
||||||
@@ -59,7 +56,7 @@ def build_html(events: list[dict], dayNames: list[str], typesNames: dict) -> str
|
|||||||
event_html.append(f"<div class='title'>{title}</div>")
|
event_html.append(f"<div class='title'>{title}</div>")
|
||||||
if "https://" in location:
|
if "https://" in location:
|
||||||
place,link = location.split("https://")
|
place,link = location.split("https://")
|
||||||
event_html.append(f"<div class='place'><a href=\"https://{link}\">@{place.strip()}</a></div>")
|
event_html.append(f"<div class='place'><a href=\"https://{link}\" target='_blank'>@{place.strip()}</a></div>")
|
||||||
else:
|
else:
|
||||||
event_html.append(f"<div class='place'>@{location.strip()}</div>")
|
event_html.append(f"<div class='place'>@{location.strip()}</div>")
|
||||||
|
|
||||||
|
|||||||
@@ -2,3 +2,5 @@ cairosvg
|
|||||||
markdown
|
markdown
|
||||||
freetype-py
|
freetype-py
|
||||||
python-dateutil
|
python-dateutil
|
||||||
|
feedgen
|
||||||
|
pillow
|
||||||
|
|||||||
@@ -1,6 +1,16 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="sr">
|
<html lang="sr">
|
||||||
<head>
|
<head>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
const theme = localStorage.getItem("theme");
|
||||||
|
const prefersDark = window.matchMedia(
|
||||||
|
"(prefers-color-scheme: dark)",
|
||||||
|
).matches;
|
||||||
|
if (theme === "dark" || (!theme && prefersDark))
|
||||||
|
document.documentElement.classList.add("dark");
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
@@ -36,7 +46,7 @@
|
|||||||
<title>Dekonferencija Decentrala</title>
|
<title>Dekonferencija Decentrala</title>
|
||||||
<link rel="alternate" hreflang="en" href="/en/deconference" />
|
<link rel="alternate" hreflang="en" href="/en/deconference" />
|
||||||
</head>
|
</head>
|
||||||
<body class="theme light">
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<a id="logo" href="/">
|
<a id="logo" href="/">
|
||||||
<img src="/img/logo-light.svg" alt="Logo" />
|
<img src="/img/logo-light.svg" alt="Logo" />
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|
||||||
@@ -9,22 +11,23 @@ const imgs = document.getElementsByTagName("img");
|
|||||||
const main = document.getElementsByTagName("main")[0];
|
const main = document.getElementsByTagName("main")[0];
|
||||||
const isMenuOpen = () => hamburger.classList.contains("open");
|
const isMenuOpen = () => hamburger.classList.contains("open");
|
||||||
const theme = window.localStorage.getItem("theme");
|
const theme = window.localStorage.getItem("theme");
|
||||||
const body = document.getElementsByClassName("theme")[0];
|
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
|
||||||
const changeToDarkTheme = () => {
|
const changeToDarkTheme = () => {
|
||||||
body.classList = "theme dark"
|
document.documentElement.classList.add("dark");
|
||||||
window.localStorage.setItem("theme", "dark");
|
|
||||||
themeBtn?.setAttribute("title", "turn the light on");
|
themeBtn?.setAttribute("title", "turn the light on");
|
||||||
Array.from(imgs).forEach((img) => img.src = img.src.replace("-light", "-dark"));
|
Array.from(imgs).forEach((img) => {
|
||||||
|
if (img.src.includes("-light")) img.src = img.src.replace("-light", "-dark");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeToLightTheme = () => {
|
const changeToLightTheme = () => {
|
||||||
body.classList = "theme light"
|
document.documentElement.classList.remove("dark");
|
||||||
window.localStorage.setItem("theme", "light");
|
|
||||||
themeBtn?.setAttribute("title", "turn the light off");
|
themeBtn?.setAttribute("title", "turn the light off");
|
||||||
Array.from(imgs).forEach((img) => img.src = img.src.replace("-dark", "-light"));
|
Array.from(imgs).forEach((img) => {
|
||||||
|
if (img.src.includes("-dark")) img.src = img.src.replace("-dark", "-light");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const closeMenu = () => {
|
const closeMenu = () => {
|
||||||
@@ -43,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"
|
||||||
@@ -56,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();
|
||||||
|
})
|
||||||
|
|||||||
@@ -1,25 +1,30 @@
|
|||||||
|
.description {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 4px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
.event {
|
.event {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
|
||||||
|
|
||||||
.event:hover {
|
&:hover {
|
||||||
border-bottom: 5px var(--hightlight) solid;
|
border-bottom: 5px var(--hightlight) solid;
|
||||||
}
|
& > div {
|
||||||
|
|
||||||
.event:hover > div {
|
|
||||||
padding-bottom: calc(0.5rem - 5px);
|
padding-bottom: calc(0.5rem - 5px);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.event > div {
|
& > div {
|
||||||
padding-top: 0.5rem;
|
padding-top: 0.5rem;
|
||||||
padding-bottom: 0.5rem;
|
padding-bottom: 0.5rem;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.date {
|
.date {
|
||||||
width: 250px;
|
width: 220px;
|
||||||
font-size: 0.9em;
|
font-size: 0.75em;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
@@ -27,38 +32,44 @@
|
|||||||
.title {
|
.title {
|
||||||
border-left: 2px solid var(--border);
|
border-left: 2px solid var(--border);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding-left: 1rem;
|
padding-left: 2rem;
|
||||||
padding-right: 0.5em;
|
padding-right: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.place {
|
.place {
|
||||||
font-size: 0.9em;
|
font-size: 0.7em;
|
||||||
|
opacity: 0.7;
|
||||||
|
&:before {
|
||||||
|
content: "-";
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.types {
|
.types {
|
||||||
font-size: 0.9em;
|
font-size: 0.8em;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
font-weight: 900;
|
||||||
|
opacity: 0.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 1160px) {
|
@media screen and (max-width: 1160px) {
|
||||||
.event {
|
.event {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 2.2rem;
|
||||||
border-left: 3px solid var(--border);
|
border-left: 3px solid var(--border);
|
||||||
|
&:hover {
|
||||||
|
border-bottom: none;
|
||||||
|
border-left: 3px solid var(--hightlight);
|
||||||
|
& > div {
|
||||||
|
padding-bottom: 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
.event > div {
|
& > div {
|
||||||
padding: 0 0.5rem;
|
padding: 0 0.5rem;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.event:hover {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.event:hover > div {
|
|
||||||
padding-bottom: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.date {
|
.date {
|
||||||
@@ -68,6 +79,9 @@
|
|||||||
.title {
|
.title {
|
||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
.place:before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.types {
|
.types {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
--bg: var(--light-bg);
|
--bg: var(--light-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
body.dark {
|
html.dark {
|
||||||
--border: var(--dark-border);
|
--border: var(--dark-border);
|
||||||
--text: var(--dark-text);
|
--text: var(--dark-text);
|
||||||
--bg: var(--dark-bg);
|
--bg: var(--dark-bg);
|
||||||
|
|||||||
@@ -1,8 +1,19 @@
|
|||||||
<h1>Events</h1>
|
<h1>Events</h1>
|
||||||
|
|
||||||
|
<div class="description">
|
||||||
<p>
|
<p>
|
||||||
Following list contains all forthcoming events. Held events are listed in
|
Following list contains all forthcoming events. Held events are listed in
|
||||||
<a href="/en/events_archive">archive</a>.
|
<a href="/en/events_archive">archive</a>.
|
||||||
</p>
|
</p>
|
||||||
<br />
|
<p>
|
||||||
<p>We also provide <a href="https://dmz.rs/events.ical">ical file</a></p>
|
Events are also available as an
|
||||||
<br />
|
<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
|
||||||
|
</a>
|
||||||
|
how to find a space
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
<h1>Događaji</h1>
|
<h1>Događaji</h1>
|
||||||
|
|
||||||
|
<div class="description">
|
||||||
<p>
|
<p>
|
||||||
Naredna lista sadrži sve predstojeće događaje. Za listu održanih događaja
|
Naredna lista sadrži sve predstojeće događaje. Za listu održanih događaja
|
||||||
pogledaj <a href="/events_archive">arhivu</a>.
|
pogledaj <a href="/events_archive">arhivu</a>.
|
||||||
</p>
|
</p>
|
||||||
<br />
|
|
||||||
<p>
|
<p>
|
||||||
Događaje možeš učitati i sa
|
Događaje možeš učitati i sa
|
||||||
<a href="https://dmz.rs/events.ical">ical</a> datotekom.
|
<a href="https://dmz.rs/events.ical">ical</a> datotekom.
|
||||||
</p>
|
</p>
|
||||||
<br />
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://wiki.dmz.rs/en/kako-pronaci-prostor" target="_blank">
|
<a href="https://wiki.dmz.rs/en/kako-pronaci-prostor" target="_blank">
|
||||||
Kratako uputstvo
|
Kratako uputstvo
|
||||||
</a>
|
</a>
|
||||||
kako pronaci prostor
|
kako pronaci prostor
|
||||||
</p>
|
</p>
|
||||||
<br />
|
</div>
|
||||||
<br />
|
|
||||||
|
|||||||
@@ -1,6 +1,16 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
const theme = localStorage.getItem("theme");
|
||||||
|
const prefersDark = window.matchMedia(
|
||||||
|
"(prefers-color-scheme: dark)",
|
||||||
|
).matches;
|
||||||
|
if (theme === "dark" || (!theme && prefersDark))
|
||||||
|
document.documentElement.classList.add("dark");
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
@@ -36,7 +46,7 @@
|
|||||||
<title><!--TITLE--> Decentrala</title>
|
<title><!--TITLE--> Decentrala</title>
|
||||||
<link rel="alternate" hreflang="sr" href="/PAGE_NAME" />
|
<link rel="alternate" hreflang="sr" href="/PAGE_NAME" />
|
||||||
</head>
|
</head>
|
||||||
<body class="theme light">
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<a id="logo" href="/en/index">
|
<a id="logo" href="/en/index">
|
||||||
<img src="/img/logo-light.svg" alt="Logo" /> Decentrala
|
<img src="/img/logo-light.svg" alt="Logo" /> Decentrala
|
||||||
|
|||||||
@@ -1,6 +1,16 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="sr">
|
<html lang="sr">
|
||||||
<head>
|
<head>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
const theme = localStorage.getItem("theme");
|
||||||
|
const prefersDark = window.matchMedia(
|
||||||
|
"(prefers-color-scheme: dark)",
|
||||||
|
).matches;
|
||||||
|
if (theme === "dark" || (!theme && prefersDark))
|
||||||
|
document.documentElement.classList.add("dark");
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
@@ -36,7 +46,7 @@
|
|||||||
<title><!--TITLE--> Decentrala</title>
|
<title><!--TITLE--> Decentrala</title>
|
||||||
<link rel="alternate" hreflang="en" href="/en/PAGE_NAME" />
|
<link rel="alternate" hreflang="en" href="/en/PAGE_NAME" />
|
||||||
</head>
|
</head>
|
||||||
<body class="theme light">
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<a id="logo" href="/">
|
<a id="logo" href="/">
|
||||||
<img src="/img/logo-light.svg" alt="Logo" />
|
<img src="/img/logo-light.svg" alt="Logo" />
|
||||||
|
|||||||
Reference in New Issue
Block a user