@onsvisual/svelte-components 1.0.40 → 1.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/dist/css/main.css +513 -513
- package/dist/datavis/BarChart/BarChart.stories.svelte +84 -84
- package/dist/datavis/BarChart/docs/component.md +19 -19
- package/dist/datavis/Chart/Chart.stories.svelte +128 -128
- package/dist/datavis/Chart/docs/component.md +31 -31
- package/dist/datavis/Chart/docs/example.md +28 -28
- package/dist/datavis/ColumnChart/ColumnChart.stories.svelte +84 -84
- package/dist/datavis/ColumnChart/docs/component.md +19 -19
- package/dist/datavis/DataCard/DataCard.stories.svelte +45 -45
- package/dist/datavis/DataCard/DataCard.svelte +70 -70
- package/dist/datavis/DataCard/Sparkline.svelte +117 -117
- package/dist/datavis/DataCard/docs/component.md +20 -20
- package/dist/datavis/DataCard/docs/example.md +25 -25
- package/dist/datavis/DotPlotChart/DotPlotChart.stories.svelte +40 -40
- package/dist/datavis/DotPlotChart/docs/component.md +19 -19
- package/dist/datavis/LineChart/LineChart.stories.svelte +64 -64
- package/dist/datavis/LineChart/docs/component.md +31 -31
- package/dist/datavis/ScatterChart/ScatterChart.stories.svelte +55 -55
- package/dist/datavis/ScatterChart/docs/component.md +53 -53
- package/dist/datavis/Table/Table.stories.svelte +48 -48
- package/dist/datavis/Table/Table.svelte +161 -161
- package/dist/datavis/Table/docs/component.md +20 -20
- package/dist/datavis/demo-data/data-scatter.js +40 -40
- package/dist/datavis/demo-data/data.js +18 -18
- package/dist/datavis/intro.mdx +21 -21
- package/dist/decorators/Blockquote/Blockquote.stories.svelte +25 -25
- package/dist/decorators/Blockquote/Blockquote.svelte +27 -27
- package/dist/decorators/Blockquote/docs/component.md +10 -10
- package/dist/decorators/Divider/Divider.stories.svelte +29 -29
- package/dist/decorators/Divider/Divider.svelte +52 -52
- package/dist/decorators/Divider/docs/component.md +12 -12
- package/dist/decorators/Em/Em.stories.svelte +30 -30
- package/dist/decorators/Em/Em.svelte +58 -58
- package/dist/decorators/Em/docs/component.md +12 -12
- package/dist/decorators/Icon/Icon.stories.svelte +27 -27
- package/dist/decorators/Icon/Icon.svelte +93 -93
- package/dist/decorators/Icon/docs/component.md +10 -10
- package/dist/decorators/Indent/Indent.stories.svelte +22 -22
- package/dist/decorators/Indent/Indent.svelte +3 -3
- package/dist/decorators/Indent/docs/component.md +10 -10
- package/dist/index.js +86 -86
- package/dist/inputs/Button/Button.stories.svelte +70 -70
- package/dist/inputs/Button/Button.svelte +152 -152
- package/dist/inputs/Button/Button.svelte.d.ts +2 -2
- package/dist/inputs/Button/docs/component.md +17 -17
- package/dist/inputs/ButtonGroup/ButtonGroup.stories.svelte +40 -40
- package/dist/inputs/ButtonGroup/ButtonGroup.svelte +57 -57
- package/dist/inputs/ButtonGroup/ButtonGroupItem.svelte +101 -101
- package/dist/inputs/ButtonGroup/docs/component.md +23 -23
- package/dist/inputs/Checkbox/Checkbox.stories.svelte +34 -34
- package/dist/inputs/Checkbox/Checkbox.svelte +180 -180
- package/dist/inputs/Checkbox/docs/component.md +14 -14
- package/dist/inputs/Checkboxes/Checkboxes.stories.svelte +34 -34
- package/dist/inputs/Checkboxes/Checkboxes.svelte +62 -62
- package/dist/inputs/Checkboxes/docs/component.md +20 -20
- package/dist/inputs/Checkboxes/docs/example.md +16 -16
- package/dist/inputs/Dropdown/Dropdown.stories.svelte +54 -54
- package/dist/inputs/Dropdown/Dropdown.svelte +66 -66
- package/dist/inputs/Dropdown/docs/component.md +22 -22
- package/dist/inputs/ErrorPanel/ErrorPanel.stories.svelte +25 -25
- package/dist/inputs/ErrorPanel/ErrorPanel.svelte +24 -24
- package/dist/inputs/ErrorPanel/docs/component.md +14 -14
- package/dist/inputs/ErrorSummary/ErrorSummary.stories.svelte +34 -34
- package/dist/inputs/ErrorSummary/ErrorSummary.svelte +47 -47
- package/dist/inputs/ErrorSummary/docs/component.md +17 -17
- package/dist/inputs/ErrorSummary/docs/example.md +12 -12
- package/dist/inputs/Input/Input.stories.svelte +73 -73
- package/dist/inputs/Input/Input.svelte +151 -151
- package/dist/inputs/Input/docs/component.md +16 -16
- package/dist/inputs/Radios/Radio.svelte +90 -90
- package/dist/inputs/Radios/Radios.stories.svelte +51 -51
- package/dist/inputs/Radios/Radios.svelte +62 -62
- package/dist/inputs/Radios/docs/component.md +24 -24
- package/dist/inputs/Radios/docs/example.md +21 -21
- package/dist/inputs/Select/Select.stories.svelte +63 -63
- package/dist/inputs/Select/Select.svelte +326 -326
- package/dist/inputs/Select/docs/component.md +27 -27
- package/dist/inputs/Textarea/Textarea.stories.svelte +40 -40
- package/dist/inputs/Textarea/Textarea.svelte +113 -113
- package/dist/inputs/Textarea/docs/component.md +16 -16
- package/dist/inputs/Toolbar/HelpModal.svelte +234 -234
- package/dist/inputs/Toolbar/ToolControl.svelte +23 -23
- package/dist/inputs/Toolbar/ToolControls.svelte +9 -9
- package/dist/inputs/Toolbar/Toolbar.stories.svelte +148 -148
- package/dist/inputs/Toolbar/Toolbar.svelte +70 -70
- package/dist/inputs/Toolbar/ToolbarButton.svelte +184 -184
- package/dist/inputs/Toolbar/ToolbarDivider.svelte +29 -29
- package/dist/inputs/Toolbar/ToolbarIcon.svelte +106 -106
- package/dist/inputs/Toolbar/ToolbarsContainer.svelte +69 -69
- package/dist/inputs/Toolbar/docs/component.md +101 -101
- package/dist/intro.mdx +66 -66
- package/dist/js/menuOptions.js +14 -14
- package/dist/js/utils.js +133 -133
- package/dist/js/withParams.js +43 -43
- package/dist/layout/Accordion/Accordion.stories.svelte +30 -30
- package/dist/layout/Accordion/Accordion.svelte +55 -55
- package/dist/layout/Accordion/AccordionItem.svelte +51 -51
- package/dist/layout/Accordion/accordion.js +64 -64
- package/dist/layout/Accordion/details.js +83 -83
- package/dist/layout/Accordion/docs/component.md +19 -19
- package/dist/layout/AnalyticsBanner/AnalyticsBanner.stories.svelte +16 -16
- package/dist/layout/AnalyticsBanner/AnalyticsBanner.svelte +314 -314
- package/dist/layout/AnalyticsBanner/docs/component.md +44 -44
- package/dist/layout/BackLink/BackLink.stories.svelte +16 -16
- package/dist/layout/BackLink/BackLink.svelte +30 -30
- package/dist/layout/BackLink/docs/component.md +12 -12
- package/dist/layout/Breadcrumb/Breadcrumb.stories.svelte +31 -31
- package/dist/layout/Breadcrumb/Breadcrumb.svelte +69 -69
- package/dist/layout/Breadcrumb/docs/component.md +15 -15
- package/dist/layout/Card/Card.stories.svelte +39 -39
- package/dist/layout/Card/Card.svelte +127 -127
- package/dist/layout/Card/docs/component.md +14 -14
- package/dist/layout/Card/docs/eg-images.md +27 -27
- package/dist/layout/Card/docs/eg-links.md +12 -12
- package/dist/layout/Card/docs/eg-spans.md +12 -12
- package/dist/layout/Contents/Contents.stories.svelte +27 -27
- package/dist/layout/Contents/Contents.svelte +51 -51
- package/dist/layout/Contents/docs/component.md +18 -18
- package/dist/layout/DescriptionList/DescriptionList.stories.svelte +22 -22
- package/dist/layout/DescriptionList/DescriptionList.svelte +59 -59
- package/dist/layout/DescriptionList/docs/component.md +18 -18
- package/dist/layout/Details/Details.stories.svelte +32 -32
- package/dist/layout/Details/Details.svelte +75 -75
- package/dist/layout/Details/docs/component.md +14 -14
- package/dist/layout/DocumentList/Document.svelte +103 -103
- package/dist/layout/DocumentList/DocumentList.stories.svelte +88 -88
- package/dist/layout/DocumentList/DocumentList.svelte +33 -33
- package/dist/layout/DocumentList/docs/component.md +28 -28
- package/dist/layout/DocumentList/docs/example.md +23 -23
- package/dist/layout/ErrorPage/ErrorPage.stories.svelte +18 -18
- package/dist/layout/ErrorPage/ErrorPage.svelte +48 -48
- package/dist/layout/ErrorPage/docs/component.md +13 -13
- package/dist/layout/Footer/Footer.stories.svelte +24 -24
- package/dist/layout/Footer/Footer.svelte +366 -366
- package/dist/layout/Footer/docs/component.md +10 -10
- package/dist/layout/Grid/Grid.stories.svelte +50 -50
- package/dist/layout/Grid/Grid.svelte +117 -117
- package/dist/layout/Grid/GridCell.svelte +65 -65
- package/dist/layout/Grid/docs/component.md +14 -14
- package/dist/layout/Header/Header.stories.svelte +26 -26
- package/dist/layout/Header/Header.svelte +875 -875
- package/dist/layout/Header/docs/component.md +11 -11
- package/dist/layout/Hero/Hero.stories.svelte +79 -79
- package/dist/layout/Hero/Hero.svelte +364 -364
- package/dist/layout/Hero/docs/component.md +14 -14
- package/dist/layout/Highlight/Highlight.stories.svelte +29 -29
- package/dist/layout/Highlight/Highlight.svelte +77 -77
- package/dist/layout/Highlight/docs/component.md +12 -12
- package/dist/layout/Image/Image.stories.svelte +23 -23
- package/dist/layout/Image/Image.svelte +29 -29
- package/dist/layout/Image/docs/component.md +15 -15
- package/dist/layout/List/Li.svelte +3 -3
- package/dist/layout/List/List.stories.svelte +40 -40
- package/dist/layout/List/List.svelte +46 -46
- package/dist/layout/List/docs/component.md +14 -14
- package/dist/layout/List/docs/example.md +12 -12
- package/dist/layout/NavSections/NavSection.svelte +90 -90
- package/dist/layout/NavSections/NavSections.stories.svelte +51 -51
- package/dist/layout/NavSections/NavSections.svelte +160 -160
- package/dist/layout/NavSections/docs/component.md +25 -25
- package/dist/layout/Notice/Notice.stories.svelte +61 -61
- package/dist/layout/Notice/Notice.svelte +56 -56
- package/dist/layout/Notice/docs/component.md +14 -14
- package/dist/layout/PhaseBanner/PhaseBanner.stories.svelte +24 -24
- package/dist/layout/PhaseBanner/PhaseBanner.svelte +66 -66
- package/dist/layout/PhaseBanner/docs/component.md +14 -14
- package/dist/layout/RelatedContent/RelatedContent.stories.svelte +36 -36
- package/dist/layout/RelatedContent/RelatedContent.svelte +54 -54
- package/dist/layout/RelatedContent/docs/component.md +16 -16
- package/dist/layout/Scroller/Scroller.stories.svelte +60 -60
- package/dist/layout/Scroller/Scroller.svelte +368 -368
- package/dist/layout/Scroller/ScrollerSection.svelte +70 -70
- package/dist/layout/Scroller/docs/component.md +39 -39
- package/dist/layout/Section/Section.stories.svelte +33 -33
- package/dist/layout/Section/Section.svelte +60 -60
- package/dist/layout/Section/docs/component.md +12 -12
- package/dist/layout/ShareButtons/ShareButtons.stories.svelte +20 -20
- package/dist/layout/ShareButtons/ShareButtons.svelte +131 -131
- package/dist/layout/ShareButtons/docs/component.md +14 -14
- package/dist/layout/SkipLink/SkipLink.stories.svelte +16 -16
- package/dist/layout/SkipLink/SkipLink.svelte +9 -9
- package/dist/layout/SkipLink/docs/component.md +11 -11
- package/dist/layout/Summary/Summary.stories.svelte +21 -21
- package/dist/layout/Summary/Summary.svelte +60 -60
- package/dist/layout/Summary/docs/component.md +17 -17
- package/dist/layout/Tabs/Tab.svelte +53 -53
- package/dist/layout/Tabs/Tabs.stories.svelte +29 -29
- package/dist/layout/Tabs/Tabs.svelte +89 -89
- package/dist/layout/Tabs/docs/component.md +16 -16
- package/dist/layout/Tabs/tabs.js +302 -302
- package/dist/layout/Timeline/Timeline.stories.svelte +44 -44
- package/dist/layout/Timeline/Timeline.svelte +17 -17
- package/dist/layout/Timeline/TimelineItem.svelte +14 -14
- package/dist/layout/Timeline/docs/component.md +27 -27
- package/dist/layout/Timeline/docs/example.md +20 -20
- package/dist/templates/EmbedArticle/EmbedArticle.stories.svelte +72 -72
- package/dist/templates/EmbedArticle/docs/component.md +56 -56
- package/dist/templates/FeatureArticle/FeatureArticle.stories.svelte +150 -150
- package/dist/templates/FeatureArticle/docs/component.md +125 -125
- package/dist/templates/StandardArticle/StandardArticle.stories.svelte +86 -86
- package/dist/templates/StandardArticle/docs/component.md +76 -76
- package/dist/templates/intro.mdx +18 -18
- package/dist/wrappers/Container/Container.stories.svelte +38 -38
- package/dist/wrappers/Container/Container.svelte +77 -77
- package/dist/wrappers/Container/docs/component.md +12 -12
- package/dist/wrappers/Embed/Embed.stories.svelte +24 -24
- package/dist/wrappers/Embed/Embed.svelte +44 -44
- package/dist/wrappers/Embed/docs/component.md +15 -15
- package/dist/wrappers/LazyLoad/LazyLoad.stories.svelte +37 -37
- package/dist/wrappers/LazyLoad/LazyLoad.svelte +50 -50
- package/dist/wrappers/LazyLoad/docs/component.md +29 -29
- package/dist/wrappers/Main/Main.stories.svelte +24 -24
- package/dist/wrappers/Main/Main.svelte +11 -11
- package/dist/wrappers/Main/docs/component.md +16 -16
- package/dist/wrappers/Observe/Observe.stories.svelte +29 -29
- package/dist/wrappers/Observe/Observe.svelte +35 -35
- package/dist/wrappers/Observe/docs/component.md +22 -22
- package/dist/wrappers/Theme/Theme.stories.svelte +70 -70
- package/dist/wrappers/Theme/Theme.svelte +76 -76
- package/dist/wrappers/Theme/docs/component.md +10 -10
- package/dist/wrappers/Theme/themes.js +70 -70
- package/package.json +88 -88
|
@@ -1,314 +1,314 @@
|
|
|
1
|
-
<script context="module">
|
|
2
|
-
export function analyticsEvent(props) {
|
|
3
|
-
if (window?.dataLayer) window.dataLayer.push(props);
|
|
4
|
-
}
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<script>
|
|
8
|
-
import { onMount, getContext } from "svelte";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Google analytics/tags manager ID
|
|
12
|
-
* @type {string}
|
|
13
|
-
*/
|
|
14
|
-
export let analyticsId = "GTM-MBCBVQS";
|
|
15
|
-
/**
|
|
16
|
-
* Optional props to describe the content
|
|
17
|
-
* @type {object}
|
|
18
|
-
*/
|
|
19
|
-
export let analyticsProps = {};
|
|
20
|
-
/**
|
|
21
|
-
* Optional: Pass the "page" store from "$app/state" in SvelteKit (gets read from context by default if it exists)
|
|
22
|
-
* @type {any}
|
|
23
|
-
*/
|
|
24
|
-
export let page = getContext("page");
|
|
25
|
-
/**
|
|
26
|
-
* Use this to hide the banner (only initialises analytics if cookies already accepted)
|
|
27
|
-
* @type {boolean}
|
|
28
|
-
*/
|
|
29
|
-
export let hideBanner = false;
|
|
30
|
-
/**
|
|
31
|
-
* Bind to this value if you need to know if cookies have been accepted
|
|
32
|
-
* @type {boolean}
|
|
33
|
-
*/
|
|
34
|
-
export let usageCookies = false;
|
|
35
|
-
/**
|
|
36
|
-
* Set the width of the banner
|
|
37
|
-
* @type {"wide"|"wider"}
|
|
38
|
-
*/
|
|
39
|
-
export let width = "wide";
|
|
40
|
-
/**
|
|
41
|
-
* Enable automatic pageView event on route changes
|
|
42
|
-
* @type {boolean}
|
|
43
|
-
*/
|
|
44
|
-
export let pageViewEnabled = true;
|
|
45
|
-
|
|
46
|
-
let live; // Don't run analytics unless page is live on ONS site (re-set in the onMount function)
|
|
47
|
-
let showBanner = false;
|
|
48
|
-
let showConfirm = false;
|
|
49
|
-
let message = "";
|
|
50
|
-
let lang = "en";
|
|
51
|
-
let baseurl = "https://www.ons.gov.uk";
|
|
52
|
-
let location = null; // For keeping track of navigation multi-page apps
|
|
53
|
-
|
|
54
|
-
function setPaths() {
|
|
55
|
-
const url = page?.url || document.location;
|
|
56
|
-
lang = url.host.startsWith("cy") ? "cy" : "en";
|
|
57
|
-
baseurl = lang === "cy" ? "https://cy.ons.gov.uk" : "https://www.ons.gov.uk";
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function hasCookiesPreferencesSet() {
|
|
61
|
-
return -1 < document.cookie.indexOf("ons_cookie_message_displayed=true");
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// extractValue extracts the value from a undecodeable json cookie string
|
|
65
|
-
function extractValue(key, extractionString) {
|
|
66
|
-
const extractionRegex = new RegExp(`'${key}':(.*?)[,}]`);
|
|
67
|
-
const match = extractionString.match(extractionRegex);
|
|
68
|
-
if (match) {
|
|
69
|
-
return match[1];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Check if usage cookies are allowed (for Google Analytics + Hotjar)
|
|
76
|
-
// note: this ported function returns the inverse truth value to the dp-renderer code that it's based on
|
|
77
|
-
// ----------------------
|
|
78
|
-
// getUsageCookieValue reads the legacy cookies_policy and ons_cookie_policy to determine the user's usage preference.
|
|
79
|
-
// The legacy policy takes precedence over the new policy. When no policy is found, the user is opted out by default.
|
|
80
|
-
function getUsageCookieValue() {
|
|
81
|
-
// TODO: this is the legacy cookie (cookies_policy) handling and will be removed in due course
|
|
82
|
-
var legacyPolicyCookie = document.cookie.match(
|
|
83
|
-
new RegExp("(^|;) ?cookies_policy=([^;]*)(;|$)")
|
|
84
|
-
);
|
|
85
|
-
if (legacyPolicyCookie) {
|
|
86
|
-
console.debug("legacy cookies_policy found");
|
|
87
|
-
var decodedCookie = decodeURIComponent(legacyPolicyCookie[2]);
|
|
88
|
-
var cookieValue = JSON.parse(decodedCookie);
|
|
89
|
-
console.debug("usage is", cookieValue.usage);
|
|
90
|
-
return cookieValue.usage;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// ons_cookie_policy handler
|
|
94
|
-
var policyCookie = document.cookie.match("(?:^|; )ons_cookie_policy=({.*?})");
|
|
95
|
-
if (policyCookie) {
|
|
96
|
-
console.debug("ons_cookie_policy found");
|
|
97
|
-
|
|
98
|
-
var usageValue = extractValue("usage", policyCookie[1]);
|
|
99
|
-
console.debug("usage is", usageValue);
|
|
100
|
-
|
|
101
|
-
return usageValue === "true";
|
|
102
|
-
}
|
|
103
|
-
console.debug("no cookie found - opting out");
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Set site cookie with 'all' or 'essential' cookies
|
|
108
|
-
function setCookie(option) {
|
|
109
|
-
let oneYearInSeconds = 60 * 60 * 24 * 365;
|
|
110
|
-
let cookiesDomain = window.location.hostname;
|
|
111
|
-
let cookiesPreference = !0;
|
|
112
|
-
let acceptAllCookiesPolicy = `{'essential':true,'settings':true,'usage':true,'campaigns':true}`;
|
|
113
|
-
let rejectAllCookiesPolicy = `{'essential':true,'settings':false,'usage':false,'campaigns':false}`;
|
|
114
|
-
let cookiesPolicy = option == "all" ? acceptAllCookiesPolicy : rejectAllCookiesPolicy;
|
|
115
|
-
let cookiesPath = "/";
|
|
116
|
-
|
|
117
|
-
document.cookie = `ons_cookie_message_displayed=${cookiesPreference};max-age=${oneYearInSeconds};domain=${cookiesDomain};path=${cookiesPath};`;
|
|
118
|
-
document.cookie = `ons_cookie_policy=${cookiesPolicy};max-age=${oneYearInSeconds};domain=${cookiesDomain};path=${cookiesPath};`;
|
|
119
|
-
|
|
120
|
-
message = `You have ${option == "all" ? "accepted" : "rejected"} all additional cookies.`;
|
|
121
|
-
if (option == "all") usageCookies = true;
|
|
122
|
-
showConfirm = true;
|
|
123
|
-
|
|
124
|
-
if (option == "all") initAnalytics();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Initialise analytics and 'window.dataLayer' (which can be used throughout the app)
|
|
128
|
-
function initAnalytics() {
|
|
129
|
-
console.log("initialising analytics");
|
|
130
|
-
window.dataLayer = [
|
|
131
|
-
{
|
|
132
|
-
analyticsOptOut: false,
|
|
133
|
-
"gtm.whitelist": ["google", "hjtc", "lcl"],
|
|
134
|
-
"gtm.blacklist": ["customScripts", "sp", "adm", "awct", "k", "d", "j"],
|
|
135
|
-
...analyticsProps
|
|
136
|
-
}
|
|
137
|
-
];
|
|
138
|
-
|
|
139
|
-
(function (w, d, s, l, i) {
|
|
140
|
-
w[l] = w[l] || [];
|
|
141
|
-
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
|
|
142
|
-
var f = d.head,
|
|
143
|
-
j = d.createElement(s),
|
|
144
|
-
dl = l != "dataLayer" ? "&l=" + l : "";
|
|
145
|
-
j.async = true;
|
|
146
|
-
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
|
|
147
|
-
f.appendChild(j);
|
|
148
|
-
})(window, document, "script", "dataLayer", analyticsId);
|
|
149
|
-
|
|
150
|
-
if ($page) location = `${$page.url.href}`.replace($page.url.hash, "");
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// This code is only relevant for multi-page Svelte Kit apps. It sends an analytics event when the URL changes
|
|
154
|
-
function onPageChange(page) {
|
|
155
|
-
if (page && location) {
|
|
156
|
-
const newlocation = `${page.url.href}`.replace(page.url.hash, "");
|
|
157
|
-
if (newlocation !== location) {
|
|
158
|
-
location = newlocation;
|
|
159
|
-
analyticsEvent({
|
|
160
|
-
event: "pageView",
|
|
161
|
-
pageURL: location,
|
|
162
|
-
...analyticsProps
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
$: if (pageViewEnabled) onPageChange($page);
|
|
168
|
-
|
|
169
|
-
onMount(() => {
|
|
170
|
-
setPaths();
|
|
171
|
-
live = true;
|
|
172
|
-
//live = document.location.hostname == "www.ons.gov.uk" || document.location.hostname == "cy.ons.gov.uk";
|
|
173
|
-
if (!page) lang = document.location.host.startsWith("cy") ? "cy" : "en";
|
|
174
|
-
showBanner = !hasCookiesPreferencesSet();
|
|
175
|
-
usageCookies = getUsageCookieValue();
|
|
176
|
-
if (usageCookies && live) initAnalytics();
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
const texts = {
|
|
180
|
-
"Cookies on ons.gov.uk": "Cwcis ar ons.gov.uk",
|
|
181
|
-
"Cookies are small files stored on your device when you visit a website. We use some essential cookies to make this website work.":
|
|
182
|
-
"Ffeiliau bach a gaiff eu storio ar eich dyfais pan fyddwch yn mynd ar wefan yw cwcis. Rydym ni’n defnyddio rhai cwcis hanfodol i wneud i’r wefan hon weithio.",
|
|
183
|
-
"We would like to set": "Hoffem osod",
|
|
184
|
-
"additional cookies": "cwcis ychwanegol",
|
|
185
|
-
"to remember your settings and understand how you use the site. This helps us to improve our services.":
|
|
186
|
-
"er mwyn cofio eich gosodiadau a deall sut rydych chi’n defnyddio’r wefan. Mae hyn yn ein helpu ni i wella ein gwasanaethau.",
|
|
187
|
-
"Accept additional cookies": "Derbyn cwcis ychwanegol",
|
|
188
|
-
"Reject additional cookies": "Gwrthod cwcis ychwanegol",
|
|
189
|
-
"View cookies": "Gweld cwcis",
|
|
190
|
-
"You have accepted all additional cookies.": "Rydych chi wedi derbyn yr holl gwcis ychwanegol.",
|
|
191
|
-
"You have rejected all additional cookies.":
|
|
192
|
-
"Rydych chi wedi gwrthod yr holl gwcis ychwanegol.",
|
|
193
|
-
"You can": "Gallwch chi",
|
|
194
|
-
"change your cookie preferences": "newid eich dewisiadau o ran cwcis",
|
|
195
|
-
"at any time.": "ar unrhyw adeg.",
|
|
196
|
-
Hide: "Cuddio",
|
|
197
|
-
"Hide this message": "Cuddiwch y neges yma"
|
|
198
|
-
};
|
|
199
|
-
$: i18n = (text) => (lang === "cy" && texts[text] ? texts[text] : text);
|
|
200
|
-
</script>
|
|
201
|
-
|
|
202
|
-
{#if showBanner && !hideBanner}
|
|
203
|
-
<div
|
|
204
|
-
class="ons-cookies-banner"
|
|
205
|
-
role="region"
|
|
206
|
-
aria-label="Cookies banner"
|
|
207
|
-
style:display={showBanner ? "block" : null}
|
|
208
|
-
>
|
|
209
|
-
{#if !showConfirm}
|
|
210
|
-
<form
|
|
211
|
-
action={baseurl + "/cookies/accept-all"}
|
|
212
|
-
method="GET"
|
|
213
|
-
id="global-cookie-message"
|
|
214
|
-
aria-label="cookie banner"
|
|
215
|
-
>
|
|
216
|
-
<div
|
|
217
|
-
class="ons-container ons-cookies-banner__primary"
|
|
218
|
-
class:ons-page__container--wider={width === "wider"}
|
|
219
|
-
>
|
|
220
|
-
<div class="ons-grid">
|
|
221
|
-
<div class="ons-grid__col ons-col-8@m">
|
|
222
|
-
<h2 class="ons-cookies-banner__title ons-u-mb-xs">{i18n("Cookies on ons.gov.uk")}</h2>
|
|
223
|
-
<div class="ons-cookies-banner__statement">
|
|
224
|
-
<p>
|
|
225
|
-
{i18n(
|
|
226
|
-
"Cookies are small files stored on your device when you visit a website. We use some essential cookies to make this website work."
|
|
227
|
-
)}
|
|
228
|
-
</p>
|
|
229
|
-
<p>
|
|
230
|
-
{i18n("We would like to set")}
|
|
231
|
-
<a href={baseurl + "/cookies"}>{i18n("additional cookies")}</a>
|
|
232
|
-
{i18n(
|
|
233
|
-
"to remember your settings and understand how you use the site. This helps us to improve our services."
|
|
234
|
-
)}
|
|
235
|
-
</p>
|
|
236
|
-
</div>
|
|
237
|
-
</div>
|
|
238
|
-
</div>
|
|
239
|
-
<div class="ons-grid ons-grid--flex ons-u-mt-s">
|
|
240
|
-
<div class="ons-grid__col">
|
|
241
|
-
<button
|
|
242
|
-
type="submit"
|
|
243
|
-
class="ons-btn ons-btn--small ons-js-accept-cookies ons-cookies-banner__btn"
|
|
244
|
-
data-button="accept"
|
|
245
|
-
on:click|preventDefault={() => setCookie("all")}
|
|
246
|
-
>
|
|
247
|
-
<span class="ons-btn__inner"
|
|
248
|
-
><span class="ons-btn__text">{i18n("Accept additional cookies")}</span>
|
|
249
|
-
</span>
|
|
250
|
-
</button>
|
|
251
|
-
</div>
|
|
252
|
-
<div class="ons-grid__col">
|
|
253
|
-
<button
|
|
254
|
-
type="button"
|
|
255
|
-
class="ons-btn ons-btn--small ons-js-reject-cookies ons-cookies-banner__btn"
|
|
256
|
-
data-button="reject"
|
|
257
|
-
on:click|preventDefault={() => setCookie("reject")}
|
|
258
|
-
>
|
|
259
|
-
<span class="ons-btn__inner"
|
|
260
|
-
><span class="ons-btn__text">{i18n("Reject additional cookies")}</span>
|
|
261
|
-
</span>
|
|
262
|
-
</button>
|
|
263
|
-
</div>
|
|
264
|
-
<div class="ons-grid__col">
|
|
265
|
-
<a class="ons-cookies-banner__link" href={baseurl + "/cookies"}
|
|
266
|
-
>{i18n("View cookies")}</a
|
|
267
|
-
>
|
|
268
|
-
</div>
|
|
269
|
-
</div>
|
|
270
|
-
</div>
|
|
271
|
-
</form>
|
|
272
|
-
{:else}
|
|
273
|
-
<div
|
|
274
|
-
class="ons-container ons-cookies-banner__confirmation"
|
|
275
|
-
class:ons-page__container--wider={width === "wider"}
|
|
276
|
-
>
|
|
277
|
-
<div
|
|
278
|
-
class="ons-grid ons-grid--flex ons-grid--between ons-grid--gutterless ons-grid--no-wrap@s ons-grid--vertical-center"
|
|
279
|
-
>
|
|
280
|
-
<div class="ons-grid__col ons-grid__col--flex ons-col-auto ons-u-flex-shrink@s">
|
|
281
|
-
<p class="ons-cookies-banner__desc ons-u-mb-no@s ons-u-mr-s@s">
|
|
282
|
-
<span>{i18n(message)}</span>
|
|
283
|
-
<span class="ons-cookies-banner__preferences-text"
|
|
284
|
-
>{i18n("You can")}
|
|
285
|
-
<a href={baseurl + "/cookies"}>{i18n("change your cookie preferences")}</a>
|
|
286
|
-
{i18n("at any time")}.</span
|
|
287
|
-
>
|
|
288
|
-
</p>
|
|
289
|
-
</div>
|
|
290
|
-
<div class="ons-grid__col">
|
|
291
|
-
<button
|
|
292
|
-
type="button"
|
|
293
|
-
class="ons-btn ons-btn--secondary ons-btn--small ons-js-hide-button"
|
|
294
|
-
aria-label={i18n("Hide this message")}
|
|
295
|
-
on:click={() => (showBanner = false)}
|
|
296
|
-
>
|
|
297
|
-
<span class="ons-btn__inner"><span class="ons-btn__text">{i18n("Hide")}</span> </span>
|
|
298
|
-
</button>
|
|
299
|
-
</div>
|
|
300
|
-
</div>
|
|
301
|
-
</div>
|
|
302
|
-
{/if}
|
|
303
|
-
</div>
|
|
304
|
-
{/if}
|
|
305
|
-
|
|
306
|
-
<style>
|
|
307
|
-
.ons-cookies-banner {
|
|
308
|
-
/* padding: 0; */
|
|
309
|
-
background: var(--pale, #f0f0f0) !important;
|
|
310
|
-
}
|
|
311
|
-
.ons-page__container--wider {
|
|
312
|
-
max-width: 1240px;
|
|
313
|
-
}
|
|
314
|
-
</style>
|
|
1
|
+
<script context="module">
|
|
2
|
+
export function analyticsEvent(props) {
|
|
3
|
+
if (window?.dataLayer) window.dataLayer.push(props);
|
|
4
|
+
}
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
import { onMount, getContext } from "svelte";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Google analytics/tags manager ID
|
|
12
|
+
* @type {string}
|
|
13
|
+
*/
|
|
14
|
+
export let analyticsId = "GTM-MBCBVQS";
|
|
15
|
+
/**
|
|
16
|
+
* Optional props to describe the content
|
|
17
|
+
* @type {object}
|
|
18
|
+
*/
|
|
19
|
+
export let analyticsProps = {};
|
|
20
|
+
/**
|
|
21
|
+
* Optional: Pass the "page" store from "$app/state" in SvelteKit (gets read from context by default if it exists)
|
|
22
|
+
* @type {any}
|
|
23
|
+
*/
|
|
24
|
+
export let page = getContext("page");
|
|
25
|
+
/**
|
|
26
|
+
* Use this to hide the banner (only initialises analytics if cookies already accepted)
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
*/
|
|
29
|
+
export let hideBanner = false;
|
|
30
|
+
/**
|
|
31
|
+
* Bind to this value if you need to know if cookies have been accepted
|
|
32
|
+
* @type {boolean}
|
|
33
|
+
*/
|
|
34
|
+
export let usageCookies = false;
|
|
35
|
+
/**
|
|
36
|
+
* Set the width of the banner
|
|
37
|
+
* @type {"wide"|"wider"}
|
|
38
|
+
*/
|
|
39
|
+
export let width = "wide";
|
|
40
|
+
/**
|
|
41
|
+
* Enable automatic pageView event on route changes
|
|
42
|
+
* @type {boolean}
|
|
43
|
+
*/
|
|
44
|
+
export let pageViewEnabled = true;
|
|
45
|
+
|
|
46
|
+
let live; // Don't run analytics unless page is live on ONS site (re-set in the onMount function)
|
|
47
|
+
let showBanner = false;
|
|
48
|
+
let showConfirm = false;
|
|
49
|
+
let message = "";
|
|
50
|
+
let lang = "en";
|
|
51
|
+
let baseurl = "https://www.ons.gov.uk";
|
|
52
|
+
let location = null; // For keeping track of navigation multi-page apps
|
|
53
|
+
|
|
54
|
+
function setPaths() {
|
|
55
|
+
const url = page?.url || document.location;
|
|
56
|
+
lang = url.host.startsWith("cy") ? "cy" : "en";
|
|
57
|
+
baseurl = lang === "cy" ? "https://cy.ons.gov.uk" : "https://www.ons.gov.uk";
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function hasCookiesPreferencesSet() {
|
|
61
|
+
return -1 < document.cookie.indexOf("ons_cookie_message_displayed=true");
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// extractValue extracts the value from a undecodeable json cookie string
|
|
65
|
+
function extractValue(key, extractionString) {
|
|
66
|
+
const extractionRegex = new RegExp(`'${key}':(.*?)[,}]`);
|
|
67
|
+
const match = extractionString.match(extractionRegex);
|
|
68
|
+
if (match) {
|
|
69
|
+
return match[1];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Check if usage cookies are allowed (for Google Analytics + Hotjar)
|
|
76
|
+
// note: this ported function returns the inverse truth value to the dp-renderer code that it's based on
|
|
77
|
+
// ----------------------
|
|
78
|
+
// getUsageCookieValue reads the legacy cookies_policy and ons_cookie_policy to determine the user's usage preference.
|
|
79
|
+
// The legacy policy takes precedence over the new policy. When no policy is found, the user is opted out by default.
|
|
80
|
+
function getUsageCookieValue() {
|
|
81
|
+
// TODO: this is the legacy cookie (cookies_policy) handling and will be removed in due course
|
|
82
|
+
var legacyPolicyCookie = document.cookie.match(
|
|
83
|
+
new RegExp("(^|;) ?cookies_policy=([^;]*)(;|$)")
|
|
84
|
+
);
|
|
85
|
+
if (legacyPolicyCookie) {
|
|
86
|
+
console.debug("legacy cookies_policy found");
|
|
87
|
+
var decodedCookie = decodeURIComponent(legacyPolicyCookie[2]);
|
|
88
|
+
var cookieValue = JSON.parse(decodedCookie);
|
|
89
|
+
console.debug("usage is", cookieValue.usage);
|
|
90
|
+
return cookieValue.usage;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// ons_cookie_policy handler
|
|
94
|
+
var policyCookie = document.cookie.match("(?:^|; )ons_cookie_policy=({.*?})");
|
|
95
|
+
if (policyCookie) {
|
|
96
|
+
console.debug("ons_cookie_policy found");
|
|
97
|
+
|
|
98
|
+
var usageValue = extractValue("usage", policyCookie[1]);
|
|
99
|
+
console.debug("usage is", usageValue);
|
|
100
|
+
|
|
101
|
+
return usageValue === "true";
|
|
102
|
+
}
|
|
103
|
+
console.debug("no cookie found - opting out");
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Set site cookie with 'all' or 'essential' cookies
|
|
108
|
+
function setCookie(option) {
|
|
109
|
+
let oneYearInSeconds = 60 * 60 * 24 * 365;
|
|
110
|
+
let cookiesDomain = window.location.hostname;
|
|
111
|
+
let cookiesPreference = !0;
|
|
112
|
+
let acceptAllCookiesPolicy = `{'essential':true,'settings':true,'usage':true,'campaigns':true}`;
|
|
113
|
+
let rejectAllCookiesPolicy = `{'essential':true,'settings':false,'usage':false,'campaigns':false}`;
|
|
114
|
+
let cookiesPolicy = option == "all" ? acceptAllCookiesPolicy : rejectAllCookiesPolicy;
|
|
115
|
+
let cookiesPath = "/";
|
|
116
|
+
|
|
117
|
+
document.cookie = `ons_cookie_message_displayed=${cookiesPreference};max-age=${oneYearInSeconds};domain=${cookiesDomain};path=${cookiesPath};`;
|
|
118
|
+
document.cookie = `ons_cookie_policy=${cookiesPolicy};max-age=${oneYearInSeconds};domain=${cookiesDomain};path=${cookiesPath};`;
|
|
119
|
+
|
|
120
|
+
message = `You have ${option == "all" ? "accepted" : "rejected"} all additional cookies.`;
|
|
121
|
+
if (option == "all") usageCookies = true;
|
|
122
|
+
showConfirm = true;
|
|
123
|
+
|
|
124
|
+
if (option == "all") initAnalytics();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Initialise analytics and 'window.dataLayer' (which can be used throughout the app)
|
|
128
|
+
function initAnalytics() {
|
|
129
|
+
console.log("initialising analytics");
|
|
130
|
+
window.dataLayer = [
|
|
131
|
+
{
|
|
132
|
+
analyticsOptOut: false,
|
|
133
|
+
"gtm.whitelist": ["google", "hjtc", "lcl"],
|
|
134
|
+
"gtm.blacklist": ["customScripts", "sp", "adm", "awct", "k", "d", "j"],
|
|
135
|
+
...analyticsProps
|
|
136
|
+
}
|
|
137
|
+
];
|
|
138
|
+
|
|
139
|
+
(function (w, d, s, l, i) {
|
|
140
|
+
w[l] = w[l] || [];
|
|
141
|
+
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
|
|
142
|
+
var f = d.head,
|
|
143
|
+
j = d.createElement(s),
|
|
144
|
+
dl = l != "dataLayer" ? "&l=" + l : "";
|
|
145
|
+
j.async = true;
|
|
146
|
+
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
|
|
147
|
+
f.appendChild(j);
|
|
148
|
+
})(window, document, "script", "dataLayer", analyticsId);
|
|
149
|
+
|
|
150
|
+
if ($page) location = `${$page.url.href}`.replace($page.url.hash, "");
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// This code is only relevant for multi-page Svelte Kit apps. It sends an analytics event when the URL changes
|
|
154
|
+
function onPageChange(page) {
|
|
155
|
+
if (page && location) {
|
|
156
|
+
const newlocation = `${page.url.href}`.replace(page.url.hash, "");
|
|
157
|
+
if (newlocation !== location) {
|
|
158
|
+
location = newlocation;
|
|
159
|
+
analyticsEvent({
|
|
160
|
+
event: "pageView",
|
|
161
|
+
pageURL: location,
|
|
162
|
+
...analyticsProps
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
$: if (pageViewEnabled) onPageChange($page);
|
|
168
|
+
|
|
169
|
+
onMount(() => {
|
|
170
|
+
setPaths();
|
|
171
|
+
live = true;
|
|
172
|
+
//live = document.location.hostname == "www.ons.gov.uk" || document.location.hostname == "cy.ons.gov.uk";
|
|
173
|
+
if (!page) lang = document.location.host.startsWith("cy") ? "cy" : "en";
|
|
174
|
+
showBanner = !hasCookiesPreferencesSet();
|
|
175
|
+
usageCookies = getUsageCookieValue();
|
|
176
|
+
if (usageCookies && live) initAnalytics();
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
const texts = {
|
|
180
|
+
"Cookies on ons.gov.uk": "Cwcis ar ons.gov.uk",
|
|
181
|
+
"Cookies are small files stored on your device when you visit a website. We use some essential cookies to make this website work.":
|
|
182
|
+
"Ffeiliau bach a gaiff eu storio ar eich dyfais pan fyddwch yn mynd ar wefan yw cwcis. Rydym ni’n defnyddio rhai cwcis hanfodol i wneud i’r wefan hon weithio.",
|
|
183
|
+
"We would like to set": "Hoffem osod",
|
|
184
|
+
"additional cookies": "cwcis ychwanegol",
|
|
185
|
+
"to remember your settings and understand how you use the site. This helps us to improve our services.":
|
|
186
|
+
"er mwyn cofio eich gosodiadau a deall sut rydych chi’n defnyddio’r wefan. Mae hyn yn ein helpu ni i wella ein gwasanaethau.",
|
|
187
|
+
"Accept additional cookies": "Derbyn cwcis ychwanegol",
|
|
188
|
+
"Reject additional cookies": "Gwrthod cwcis ychwanegol",
|
|
189
|
+
"View cookies": "Gweld cwcis",
|
|
190
|
+
"You have accepted all additional cookies.": "Rydych chi wedi derbyn yr holl gwcis ychwanegol.",
|
|
191
|
+
"You have rejected all additional cookies.":
|
|
192
|
+
"Rydych chi wedi gwrthod yr holl gwcis ychwanegol.",
|
|
193
|
+
"You can": "Gallwch chi",
|
|
194
|
+
"change your cookie preferences": "newid eich dewisiadau o ran cwcis",
|
|
195
|
+
"at any time.": "ar unrhyw adeg.",
|
|
196
|
+
Hide: "Cuddio",
|
|
197
|
+
"Hide this message": "Cuddiwch y neges yma"
|
|
198
|
+
};
|
|
199
|
+
$: i18n = (text) => (lang === "cy" && texts[text] ? texts[text] : text);
|
|
200
|
+
</script>
|
|
201
|
+
|
|
202
|
+
{#if showBanner && !hideBanner}
|
|
203
|
+
<div
|
|
204
|
+
class="ons-cookies-banner"
|
|
205
|
+
role="region"
|
|
206
|
+
aria-label="Cookies banner"
|
|
207
|
+
style:display={showBanner ? "block" : null}
|
|
208
|
+
>
|
|
209
|
+
{#if !showConfirm}
|
|
210
|
+
<form
|
|
211
|
+
action={baseurl + "/cookies/accept-all"}
|
|
212
|
+
method="GET"
|
|
213
|
+
id="global-cookie-message"
|
|
214
|
+
aria-label="cookie banner"
|
|
215
|
+
>
|
|
216
|
+
<div
|
|
217
|
+
class="ons-container ons-cookies-banner__primary"
|
|
218
|
+
class:ons-page__container--wider={width === "wider"}
|
|
219
|
+
>
|
|
220
|
+
<div class="ons-grid">
|
|
221
|
+
<div class="ons-grid__col ons-col-8@m">
|
|
222
|
+
<h2 class="ons-cookies-banner__title ons-u-mb-xs">{i18n("Cookies on ons.gov.uk")}</h2>
|
|
223
|
+
<div class="ons-cookies-banner__statement">
|
|
224
|
+
<p>
|
|
225
|
+
{i18n(
|
|
226
|
+
"Cookies are small files stored on your device when you visit a website. We use some essential cookies to make this website work."
|
|
227
|
+
)}
|
|
228
|
+
</p>
|
|
229
|
+
<p>
|
|
230
|
+
{i18n("We would like to set")}
|
|
231
|
+
<a href={baseurl + "/cookies"}>{i18n("additional cookies")}</a>
|
|
232
|
+
{i18n(
|
|
233
|
+
"to remember your settings and understand how you use the site. This helps us to improve our services."
|
|
234
|
+
)}
|
|
235
|
+
</p>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
<div class="ons-grid ons-grid--flex ons-u-mt-s">
|
|
240
|
+
<div class="ons-grid__col">
|
|
241
|
+
<button
|
|
242
|
+
type="submit"
|
|
243
|
+
class="ons-btn ons-btn--small ons-js-accept-cookies ons-cookies-banner__btn"
|
|
244
|
+
data-button="accept"
|
|
245
|
+
on:click|preventDefault={() => setCookie("all")}
|
|
246
|
+
>
|
|
247
|
+
<span class="ons-btn__inner"
|
|
248
|
+
><span class="ons-btn__text">{i18n("Accept additional cookies")}</span>
|
|
249
|
+
</span>
|
|
250
|
+
</button>
|
|
251
|
+
</div>
|
|
252
|
+
<div class="ons-grid__col">
|
|
253
|
+
<button
|
|
254
|
+
type="button"
|
|
255
|
+
class="ons-btn ons-btn--small ons-js-reject-cookies ons-cookies-banner__btn"
|
|
256
|
+
data-button="reject"
|
|
257
|
+
on:click|preventDefault={() => setCookie("reject")}
|
|
258
|
+
>
|
|
259
|
+
<span class="ons-btn__inner"
|
|
260
|
+
><span class="ons-btn__text">{i18n("Reject additional cookies")}</span>
|
|
261
|
+
</span>
|
|
262
|
+
</button>
|
|
263
|
+
</div>
|
|
264
|
+
<div class="ons-grid__col">
|
|
265
|
+
<a class="ons-cookies-banner__link" href={baseurl + "/cookies"}
|
|
266
|
+
>{i18n("View cookies")}</a
|
|
267
|
+
>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
</form>
|
|
272
|
+
{:else}
|
|
273
|
+
<div
|
|
274
|
+
class="ons-container ons-cookies-banner__confirmation"
|
|
275
|
+
class:ons-page__container--wider={width === "wider"}
|
|
276
|
+
>
|
|
277
|
+
<div
|
|
278
|
+
class="ons-grid ons-grid--flex ons-grid--between ons-grid--gutterless ons-grid--no-wrap@s ons-grid--vertical-center"
|
|
279
|
+
>
|
|
280
|
+
<div class="ons-grid__col ons-grid__col--flex ons-col-auto ons-u-flex-shrink@s">
|
|
281
|
+
<p class="ons-cookies-banner__desc ons-u-mb-no@s ons-u-mr-s@s">
|
|
282
|
+
<span>{i18n(message)}</span>
|
|
283
|
+
<span class="ons-cookies-banner__preferences-text"
|
|
284
|
+
>{i18n("You can")}
|
|
285
|
+
<a href={baseurl + "/cookies"}>{i18n("change your cookie preferences")}</a>
|
|
286
|
+
{i18n("at any time")}.</span
|
|
287
|
+
>
|
|
288
|
+
</p>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="ons-grid__col">
|
|
291
|
+
<button
|
|
292
|
+
type="button"
|
|
293
|
+
class="ons-btn ons-btn--secondary ons-btn--small ons-js-hide-button"
|
|
294
|
+
aria-label={i18n("Hide this message")}
|
|
295
|
+
on:click={() => (showBanner = false)}
|
|
296
|
+
>
|
|
297
|
+
<span class="ons-btn__inner"><span class="ons-btn__text">{i18n("Hide")}</span> </span>
|
|
298
|
+
</button>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
{/if}
|
|
303
|
+
</div>
|
|
304
|
+
{/if}
|
|
305
|
+
|
|
306
|
+
<style>
|
|
307
|
+
.ons-cookies-banner {
|
|
308
|
+
/* padding: 0; */
|
|
309
|
+
background: var(--pale, #f0f0f0) !important;
|
|
310
|
+
}
|
|
311
|
+
.ons-page__container--wider {
|
|
312
|
+
max-width: 1240px;
|
|
313
|
+
}
|
|
314
|
+
</style>
|