msos/main.js

185 lines
8.2 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function() {
/**
* ===================================================================
* 1. OSNOVNA FUNKCIONALNOST MOBILNE NAVIGACIJE
* Ta koda je ključna za delovanje mobilnega menija.
* ===================================================================
*/
// --- Odpiranje in zapiranje glavnega mobilnega panela ---
try {
const mobileMenuIcon = document.querySelector('.mobile-menu-icon');
const body = document.querySelector('body');
if (mobileMenuIcon && body) {
mobileMenuIcon.addEventListener('click', () => {
body.classList.toggle('nav-open');
});
} else {
console.error('Mobile menu icon or body not found.');
}
} catch (error) {
console.error('Error in Mobile Menu Toggle:', error);
}
// --- Mobilni Accordion podmeni ---
try {
const mobileNav = document.querySelector('.mobile-nav-panel .mobile-nav');
if (mobileNav) {
const menuItemsWithChildren = mobileNav.querySelectorAll('.menu-item-has-children');
menuItemsWithChildren.forEach(item => {
const link = item.querySelector('a');
if (link) {
link.addEventListener('click', (event) => {
// Prepreči privzeto dejanje samo za glavne povezave, ki imajo podmeni
if (event.currentTarget.parentElement.classList.contains('menu-item-has-children')) {
event.preventDefault();
}
const parentLi = event.currentTarget.parentElement;
// Zapri ostale odprte podmenije (efekt harmonike)
menuItemsWithChildren.forEach(otherItem => {
if (otherItem !== parentLi && otherItem.classList.contains('open')) {
otherItem.classList.remove('open');
}
});
// Preklopi stanje trenutnega podmenija
parentLi.classList.toggle('open');
});
}
});
}
} catch (error) {
console.error('Error in Mobile Accordion Menu:', error);
}
/**
* ===================================================================
* 2. DODATNE FUNKCIONALNOSTI (Jezik, FAQ, itd.)
* Te skripte so ločene, da morebitne napake ne vplivajo na meni.
* ===================================================================
*/
// --- Preklopnik jezika (Language Switcher) ---
try {
const languageSelectors = document.querySelectorAll('.language-selector');
if (languageSelectors.length > 0) {
languageSelectors.forEach(selector => {
const currentLang = selector.querySelector('.current-lang');
if (currentLang) {
currentLang.addEventListener('click', (event) => {
event.stopPropagation();
const isActive = selector.classList.contains('active');
languageSelectors.forEach(s => s.classList.remove('active')); // Zapri vse
if (!isActive) {
selector.classList.add('active'); // Odpri samo trenutnega
}
});
}
});
// Globalni listenerji za zapiranje
window.addEventListener('click', () => {
languageSelectors.forEach(s => s.classList.remove('active'));
});
window.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
languageSelectors.forEach(s => s.classList.remove('active'));
}
});
// Dinamično generiranje URL-jev
const path = window.location.pathname;
const pathParts = path.split('/').filter(Boolean);
const validLangs = ['en', 'si', 'mk'];
let currentLangCode = validLangs[0]; // Privzeto na 'en', če ni najden
let relativePathAfterLang = path;
for (const lang of validLangs) {
if (pathParts.length > 0 && pathParts[0] === lang) {
currentLangCode = lang;
relativePathAfterLang = '/' + pathParts.slice(1).join('/');
break;
}
}
languageSelectors.forEach(selector => {
const langLinks = selector.querySelectorAll('.lang-dropdown a[data-lang]');
langLinks.forEach(link => {
const targetLang = link.getAttribute('data-lang');
// Zgradi novo pot relativno glede na korensko mapo
const newUrl = `/${targetLang}${relativePathAfterLang === '/' ? '' : relativePathAfterLang}`;
link.setAttribute('href', newUrl);
});
});
}
} catch (error) {
console.error('Error in Language Switcher:', error);
}
// --- FAQ Accordion ---
try {
const faqItems = document.querySelectorAll('.faq-item');
if (faqItems.length > 0) {
faqItems.forEach(item => {
const header = item.querySelector('h3');
if (header) {
header.addEventListener('click', () => {
const content = item.querySelector('p');
if (content) {
if (content.style.display === "none" || content.style.display === "") {
content.style.display = "block";
} else {
content.style.display = "none";
}
}
});
}
});
}
} catch (error) {
console.error('Error in FAQ Accordion:', error);
}
// --- Activities Tab ---
try {
const activityNavItems = document.querySelectorAll('.activities-nav li');
const activityDetailsText = document.querySelector('.activity-details p');
if (activityNavItems.length > 0 && activityDetailsText) {
const activitiesData = {
'Študentsko predstavništvo': { text: 'Vsebina za študentsko predstavništvo...'},
'Izobraževanje in kultura': { text: 'Vsebina za izobraževanje in kulturo...'},
'Zabava in druženje': { text: 'Vsebina za zabavo in druženje...'},
'Študentska podpora': { text: 'Vsebina za študentsko podoro...'},
'Student representation': { text: 'Content for student representation...'},
'Education and culture': { text: 'Content for education and culture...'},
'Entertainment and socializing': { text: 'Content for entertainment and socializing...'},
'Student support': { text: 'Content for student support...'},
'Студентско претставување': { text: 'Содржина за студентско претставување...'},
'Образование и култура': { text: 'Содржина за образование и култура...'},
'Забава и дружење': { text: 'Содржина за забава и дружење...'},
'Студентска поддршка': { text: 'Содржина за студентска поддршка...'}
};
activityNavItems.forEach(item => {
item.addEventListener('click', () => {
activityNavItems.forEach(navItem => navItem.classList.remove('active'));
item.classList.add('active');
const activityName = item.textContent.trim();
if (activitiesData[activityName]) {
activityDetailsText.textContent = activitiesData[activityName].text;
}
});
});
}
} catch (error) {
console.error('Error in Activities Tab:', error);
}
});