6 Commits
Author SHA1 Message Date
coja db0169f34b [Theme] light/dark persistance 2026-08-09 04:43:46 +02:00
coja b4a968d991 [Lang] fix persistance 2026-08-09 04:39:00 +02:00
coja a823f3a8bf [Services] pastebin 2026-08-09 04:14:56 +02:00
fram3d a3e9b61c5c added events for 08-2026 2026-07-29 00:50:30 +02:00
coja ec0b797f15 [Events] July update 2026-07-01 00:40:44 +02:00
coja e63f6a85be [Fix] typo and locations 2026-06-22 16:47:27 +02:00
6 changed files with 54 additions and 15 deletions
+9
View File
@@ -374,3 +374,12 @@ datum, vreme, lokacija, tema, tip, link, temaEN
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
06-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Linux ricing,lightning,,Linux ricing
13-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Hardware CTF/Logic analyzer,workshop,,Hardware CTF/Logic analyzer
20-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,T-shirt workshop,workshop,,T-shirt workshop
27-07-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Lightning talks,lightning,,Lightning talks
03-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Sysadmin radionica,workshop,,Sysadmin workshop
10-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,LAN party,party,,LAN Party
17-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Mail server - 1. deo,workshop,, Mail server - part 1
24-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Film: Primer (2004),movie,,Movie: Primer (2004)
31-08-2026, 19:00, Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876,Lightning talks,lightning,,Lightning talks
1 datum vreme lokacija tema tip link temaEN
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
377 06-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Linux ricing lightning Linux ricing
378 13-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Hardware CTF/Logic analyzer workshop Hardware CTF/Logic analyzer
379 20-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 T-shirt workshop workshop T-shirt workshop
380 27-07-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Lightning talks lightning Lightning talks
381 03-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Sysadmin radionica workshop Sysadmin workshop
382 10-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 LAN party party LAN Party
383 17-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Mail server - 1. deo workshop Mail server - part 1
384 24-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Film: Primer (2004) movie Movie: Primer (2004)
385 31-08-2026 19:00 Xecut - Jovana Ćirilova 15 - Local 3 https://www.openstreetmap.org/node/11749277876 Lightning talks lightning Lightning talks
+1 -1
View File
@@ -11,7 +11,7 @@ from cairosvg import svg2png
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")
DAYS_OF_WEEK_EN = ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUn")
DAYS_OF_WEEK_EN = ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
MONTHS_SR = ("Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul",
"Avgust", "Septembar", "Oktobar", "Novembar", "Decembar")
+2 -2
View File
@@ -66,14 +66,14 @@
<a href="https://github.com/searxng/searxg/">SearXNG</a> instance used for
Web searching.
</td>
</tr>
</tr> -->
<tr>
<td><a href="https://pastebin.dmz.rs/">Pastebin</a></td>
<td>
<a href="https://privatebin.info/">PrivateBin</a> instance we use for
sharing text files
</td>
</tr> -->
</tr>
<tr>
<td><a href="ssh://soft.dmz.rs:2222/">Soft Serve</a></td>
<td>
+2 -2
View File
@@ -68,14 +68,14 @@
<a href="https://github.com/searxng/searxng/">SearXNG</a> instanca koju
koristimo za pretraživanje Interneta. Zamena za Google.
</td>
</tr>
</tr>-->
<tr>
<td><a href="https://pastebin.dmz.rs/">Pastebin</a></td>
<td>
<a href="https://privatebin.info/">PrivateBin</a> instanca koju koristimo
za brzo deljenje tekstualnih fajlova
</td>
</tr>-->
</tr>
<tr>
<td><a href="ssh://soft.dmz.rs:2222/">Soft Serve</a></td>
<td>
+13 -6
View File
@@ -5,6 +5,13 @@ from datetime import datetime
DAYS_SR = ["PON", "UTO", "SRE", "ČET", "PET", "SUB", "NED"]
DAYS_EN = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
ICAL_LOCATION_ADDRESSES = {
"Xecut": "XECUT\\, Jovana Ćirilova 15\\, Local 3\\, Beograd\\, Serbia",
"Matematički fakultet (Učionica JAG2)": "Matematički fakultet (JAG2)\\, Vatroslava Jagića 5\\, Beograd\\, Serbia",
"Matematički fakultet (Učionica JAG3)": "Matematički fakultet (JAG3)\\, Vatroslava Jagića 5\\, Beograd\\, Serbia",
"Matematički fakultet (Učionica 153)": "Matematički fakultet\\, Svetog Nikole 39\\, Beograd\\, Serbia",
}
TYPES_DICT = {
"hack": ("hakaton", "hackathon"),
"lecture": ("predavanje", "lecture"),
@@ -104,12 +111,12 @@ def build_ical(events: list[dict]) -> str:
event_template = event_template.replace("<!--DATE-->", date)
event_template = event_template.replace("<!--TITLE-->", title)
event_template = event_template.replace("<!--URL-->", url)
if location.startswith("DC Krov"):
event_template = event_template.replace("<!--LOCATION-->", "DC Krov\\, Kraljice Marije 47\\, 6\\, Beograd\\, Serbia")
elif location.startswith("Matematički fakultet (Učionica 153)"):
event_template = event_template.replace("<!--LOCATION-->", "Matematički fakultet\\, Svetog Nikole 39\\, Beograd\\, Serbia")
else:
event_template = event_template.replace("<!--LOCATION-->", location)
ical_location = location
for prefix, address in ICAL_LOCATION_ADDRESSES.items():
if location.startswith(prefix):
ical_location = address
break
event_template = event_template.replace("<!--LOCATION-->", ical_location)
events_ical += event_template
+23
View File
@@ -15,6 +15,7 @@ window.addEventListener("DOMContentLoaded", () => {
/* Functions */
const changeToDarkTheme = () => {
window.localStorage.setItem("theme", "dark");
document.documentElement.classList.add("dark");
themeBtn?.setAttribute("title", "turn the light on");
Array.from(imgs).forEach((img) => {
@@ -23,6 +24,7 @@ window.addEventListener("DOMContentLoaded", () => {
}
const changeToLightTheme = () => {
window.localStorage.setItem("theme", "light");
document.documentElement.classList.remove("dark");
themeBtn?.setAttribute("title", "turn the light off");
Array.from(imgs).forEach((img) => {
@@ -46,6 +48,27 @@ window.addEventListener("DOMContentLoaded", () => {
window.addEventListener("resize", () => isMenuOpen() && closeMenu());
main.addEventListener("click", () => isMenuOpen() && closeMenu());
/* Language persistence */
const currentLang = document.documentElement.lang || "sr";
const anchors = document.getElementsByTagName("a");
Array.from(anchors).forEach((a) => {
// Skip language switcher links
if (a.classList.contains("lang")) return;
const href = a.getAttribute("href");
if (!href) return;
if (href.startsWith("/")) {
// Replace existing language prefix or add one
if (href.startsWith("/sr") || href.startsWith("/en")) {
if (!href.startsWith(`/${currentLang}`)) {
a.setAttribute("href", `/${currentLang}${href.slice(3)}`);
}
} else {
// No language prefix, prepend currentLang
a.setAttribute("href", `/${currentLang}${href}`);
}
}
});
hamburger?.addEventListener("click", () => isMenuOpen() ? closeMenu() : openMenu());
themeBtn.addEventListener("click", () => {