Add GDPR cookie-consent banner (Consent Mode v2)

- consent.js: self-contained, non-blocking bottom banner in EN/MK/SI,
  remembers the choice in localStorage, links to the per-language cookie
  policy. Accept -> gtag consent 'update' granted; Decline stays denied.
- Head GA snippet restores a returning visitor's prior "granted" choice
  before the first hit; loads /consent.js on every page.
- Re-openable via window.msosOpenConsent() for a "manage cookies" link.

Verified in-browser: shows for new visitors, Accept grants + remembers,
reload keeps consent without re-prompting, Slovene text + /si/ policy link.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
popovskikandClaude Opus 4.8 committed 2026-08-02 18:30:35 +02:00
1 parent 9a6d2c335c
commit f24fc704d6
203 files changed
+1100

No files matched your search

@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Повеќе од 200 студенти се собраа во Марибор и преку спорт собраа 1.000 € за поддршка на семејствата погодени од трагедијата во Кочани.">
<link rel="canonical" href="https://msosorg.com/mk/projects/humanitarian-tournament-in-maribor/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/humanitarian-tournament-in-maribor/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="На 8 февруари 2025 година, македонските студенти во Љубљана се собраа на мирен јавен настан за да ја почестат меморијата на Фросина Кулакова, која трагично го…">
<link rel="canonical" href="https://msosorg.com/mk/projects/in-memory-of-frosina-kulakova/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/in-memory-of-frosina-kulakova/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="На 21 март 2025 година, повеќе од 600 луѓе се собраа на Конгресниот плоштад во Љубљана на мирен јавен собир за да ги почестат жртвите од трагичниот пожар во Кочани.">
<link rel="canonical" href="https://msosorg.com/mk/projects/in-memory-of-the-kochani-victims/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/in-memory-of-the-kochani-victims/">
+5
View File
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Настаните, проектите и моментите што ја зближуваат македонската студентска заедница во Словенија.">
<link rel="canonical" href="https://msosorg.com/mk/projects/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Од идеја до журка со 500 студенти, вака започна нашата приказна!">
<link rel="canonical" href="https://msosorg.com/mk/projects/macedonian-student-night-in-ljubljana/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/macedonian-student-night-in-ljubljana/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Преку искрени приказни од прва рака, идните студентите добија поддршка за првиот чекор кон нивниот нов дом.">
<link rel="canonical" href="https://msosorg.com/mk/projects/meet-student-slovenia-2023/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/meet-student-slovenia-2023/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Кога студентските приказни се претвораат во првиот чекор кон новиот дом.">
<link rel="canonical" href="https://msosorg.com/mk/projects/meet-student-slovenia-2024/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/meet-student-slovenia-2024/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Кога испитите некако ти стануваат полесни со саботно утринско кафе, бурек и добро друштво пред ЦТК!">
<link rel="canonical" href="https://msosorg.com/mk/projects/morning-coffee-in-front-of-ctk/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/morning-coffee-in-front-of-ctk/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Сликање, вино и музика ги собраа студентите во Горица за да го одбележат Денот на жената и првиот настан на МСОС Нова Горица.">
<link rel="canonical" href="https://msosorg.com/mk/projects/paint-and-wine-at-sunset/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/paint-and-wine-at-sunset/">
@@ -14,9 +14,14 @@
ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied',
analytics_storage: 'denied', wait_for_update: 500
});
// Restore a returning visitor's prior choice before the first hit.
try { if (localStorage.getItem('msos-consent') === 'granted') {
gtag('consent', 'update', { ad_storage:'granted', ad_user_data:'granted',
ad_personalization:'granted', analytics_storage:'granted' }); } } catch(e){}
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<meta name="description" content="Од Љубљана до Марибор, македонските студенти ги наполнија кафулињата со навивачки извици, знамиња и смеа додека ја гледаа ракометната репрезентација.">
<link rel="canonical" href="https://msosorg.com/mk/projects/watching-handball-together-in-slovenia/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/projects/watching-handball-together-in-slovenia/">