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="Храната е важна, но важни се и редоследот на чиниите, луѓето околу нив и фактот дека никој не си оди по првото јадење.">
<link rel="canonical" href="https://msosorg.com/mk/get-to-know-macedonia/a-table-full-of-macedonia/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/a-table-full-of-macedonia/">
@@ -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/get-to-know-macedonia/history-you-can-still-walk-through/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/history-you-can-still-walk-through/">
+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/get-to-know-macedonia/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/">
@@ -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/get-to-know-macedonia/music-dance-and-the-moments-that-bring-us-together/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/music-dance-and-the-moments-that-bring-us-together/">
@@ -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/get-to-know-macedonia/ohrid-more-than-a-postcard/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/ohrid-more-than-a-postcard/">
@@ -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/get-to-know-macedonia/skopje-a-city-of-many-layers/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/skopje-a-city-of-many-layers/">
@@ -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/get-to-know-macedonia/welcome-to-macedonia/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/get-to-know-macedonia/welcome-to-macedonia/">