Homepage refresh, activities redesign + newsletter rollout
Navigation - Replace "Donate" with a "Support MSOS ❤️" CTA site-wide - Remove dead nav links (Gallery, Press releases) - Turn the one-item News dropdown into a direct link Homepage - Replace the non-functional "Become part" contact form with a "Find your people in Slovenia" join CTA (blue/white gradient band, orange button, photo collage), in all three languages - Fix the placeholder Activities subtitle - Redesign Activities into card-style tabs with icons; move per-tab content into HTML panels and switch by index so the tabs work in every language (MK/SI tabs were previously dead) Newsletter (MailerLite) - Add the subscribe block to the News hub, news articles, and every events/projects page and hub, in all three languages - Resize/rebalance the block, shrink the privacy line, add top spacing - Standardise on honest copy (drop the "2,000+ subscribers" claim) - Load main.js on the News hub pages (they shipped without it, so the form and header dropdowns didn't work there) - Fix a dead privacy-policy link on the makedonska-vecer page - Document the signup convention in docs/newsletter-signup.md Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
f492a8a547
commit
9e8cbc5876
199 files changed
+1765
-3971
No files matched your search
@@ -197,52 +197,42 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
console.error('Error in FAQ Accordion:', error);
|
||||
}
|
||||
|
||||
// --- Activities Tab ---
|
||||
// --- Activities Tabs ---
|
||||
// Index-based: content lives in the HTML panels (one per language),
|
||||
// so switching works regardless of the tab label language.
|
||||
try {
|
||||
const activityNavItems = document.querySelectorAll('.activities-nav li');
|
||||
const activityDetailsText = document.querySelector('.activity-details p');
|
||||
const activityDetailsImage = document.querySelector('.activity-details img');
|
||||
|
||||
if (activityNavItems.length > 0 && activityDetailsText && activityDetailsImage) {
|
||||
const activitiesData = {
|
||||
'Student Support': {
|
||||
text: "We know moving to a new country can feel overwhelming, so we’re here to make it easier. From helping you with university applications to finding your way around student life in Slovenia, you can always count on us. We offer free consultations, answer your questions on Instagram and Facebook (yes, even late at night), and host events where you can meet others and hear real experiences first-hand. With mentorship, info sessions, and a friendly community by your side, you’ll never have to go through the journey alone.",
|
||||
imgSrc: "../images/img1-08.09.2025.webp",
|
||||
altText: "Students receiving support and guidance"
|
||||
},
|
||||
'Fun & Social Life': {
|
||||
text: "Student life is so much more than lectures and exams — it’s about the moments in between. At MSOS, we create those moments: from parties, concerts, and casual hangouts, to cinema nights, excursions, and team-building trips. We also host talks and events where you can share ideas, meet new people, and feel part of something bigger. Whether you’re connecting with Macedonian students or making friends with Slovenians and internationals, our activities are all about building a community where you can relax, have fun, and create memories that last long after university.",
|
||||
imgSrc: "../images/img2-08.09.2025.webp",
|
||||
altText: "Students socializing and having fun at an event"
|
||||
},
|
||||
'Education & Culture': {
|
||||
text: "Studying abroad isn’t only about lectures and exams — it’s also about growing as a person. That’s why we mix learning with culture. We run study groups and small workshops where you can share knowledge and pick up new skills. At the same time, we keep our traditions alive with cultural evenings, music, food, and gatherings that remind us of home. It’s a balance: support for your studies, and a space to stay connected to who we are.",
|
||||
imgSrc: "../images/img3-08.09.2025.webp",
|
||||
altText: "An educational workshop or cultural event"
|
||||
},
|
||||
'Student Representation': {
|
||||
text: "Studying abroad comes with challenges, and sometimes students need a voice that’s heard. At MSOS, we take that role seriously. We organize meetings with government representatives, ministries, embassies, universities, and other key institutions to make sure the interests of Macedonian students in Slovenia are on the table. From campus issues to academic policies and integration, we work to solve problems, push for positive changes, and create a better experience for all of us.",
|
||||
imgSrc: "../images/img4-08.09.2025.webp",
|
||||
altText: "MSOS members representing students at a formal meeting"
|
||||
}
|
||||
};
|
||||
const activityTabs = document.querySelectorAll('.activities-nav .activity-tab');
|
||||
const activityPanels = document.querySelectorAll('.activities-panels .activity-panel');
|
||||
|
||||
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;
|
||||
activityDetailsImage.src = activitiesData[activityName].imgSrc;
|
||||
activityDetailsImage.alt = activitiesData[activityName].altText;
|
||||
if (activityTabs.length > 0 && activityPanels.length > 0) {
|
||||
activityTabs.forEach(tab => {
|
||||
tab.addEventListener('click', () => {
|
||||
const idx = tab.getAttribute('data-panel');
|
||||
|
||||
activityTabs.forEach(t => {
|
||||
t.classList.remove('active');
|
||||
t.setAttribute('aria-selected', 'false');
|
||||
});
|
||||
activityPanels.forEach(p => {
|
||||
p.classList.remove('active');
|
||||
p.hidden = true;
|
||||
});
|
||||
|
||||
tab.classList.add('active');
|
||||
tab.setAttribute('aria-selected', 'true');
|
||||
|
||||
const panel = document.querySelector(
|
||||
`.activities-panels .activity-panel[data-panel="${idx}"]`
|
||||
);
|
||||
if (panel) {
|
||||
panel.hidden = false;
|
||||
panel.classList.add('active');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error in Activities Tab:', error);
|
||||
console.error('Error in Activities Tabs:', error);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user