@nationalarchives/frontend 0.1.23-prerelease → 0.1.25-prerelease
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 +22 -0
- package/govuk-prototype-kit.config.json +4 -12
- package/nationalarchives/all.css +2 -2
- package/nationalarchives/all.css.map +1 -1
- package/nationalarchives/all.js +1 -1
- package/nationalarchives/all.js.map +1 -1
- package/nationalarchives/assets/fonts/OpenSans-Regular.ttf +0 -0
- package/nationalarchives/assets/fonts/RobotoMono-Medium.ttf +0 -0
- package/nationalarchives/components/_index.scss +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.stories.js +1 -1
- package/nationalarchives/components/button/button.css +1 -1
- package/nationalarchives/components/button/button.css.map +1 -1
- package/nationalarchives/components/button/button.scss +12 -12
- package/nationalarchives/components/button/template.njk +2 -2
- package/nationalarchives/components/card/card.css +1 -1
- package/nationalarchives/components/card/card.css.map +1 -1
- package/nationalarchives/components/card/card.scss +9 -4
- package/nationalarchives/components/card/card.stories.js +27 -78
- package/nationalarchives/components/card/fixtures.json +17 -17
- package/nationalarchives/components/card/macro-options.json +47 -17
- package/nationalarchives/components/card/template.njk +47 -46
- package/nationalarchives/components/cookie-banner/cookie-banner.css +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.mjs +17 -16
- package/nationalarchives/components/cookie-banner/cookie-banner.scss +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.stories.js +95 -45
- package/nationalarchives/components/cookie-banner/fixtures.json +84 -1
- package/nationalarchives/components/cookie-banner/macro-options.json +7 -1
- package/nationalarchives/components/cookie-banner/template.njk +4 -4
- package/nationalarchives/components/featured-records/_index.scss +1 -0
- package/nationalarchives/components/featured-records/featured-records.css +1 -0
- package/nationalarchives/components/featured-records/featured-records.css.map +1 -0
- package/nationalarchives/components/featured-records/featured-records.scss +95 -0
- package/nationalarchives/components/featured-records/featured-records.stories.js +51 -0
- package/nationalarchives/components/featured-records/fixtures.json +4 -0
- package/nationalarchives/components/featured-records/macro-options.json +70 -0
- package/nationalarchives/components/featured-records/macro.njk +3 -0
- package/nationalarchives/components/featured-records/template.njk +20 -0
- package/nationalarchives/components/filters/filters.css +1 -1
- package/nationalarchives/components/filters/filters.css.map +1 -1
- package/nationalarchives/components/filters/filters.scss +6 -6
- package/nationalarchives/components/filters/template.njk +1 -1
- package/nationalarchives/components/footer/footer.css +1 -1
- package/nationalarchives/components/footer/footer.css.map +1 -1
- package/nationalarchives/components/footer/footer.scss +2 -5
- package/nationalarchives/components/footer/footer.stories.js +1 -1
- package/nationalarchives/components/footer/template.njk +4 -4
- package/nationalarchives/components/gallery/gallery.css +1 -1
- package/nationalarchives/components/gallery/gallery.css.map +1 -1
- package/nationalarchives/components/gallery/gallery.scss +2 -2
- package/nationalarchives/components/gallery/gallery.stories.js +2 -2
- package/nationalarchives/components/grid/grid.css +1 -1
- package/nationalarchives/components/grid/grid.css.map +1 -1
- package/nationalarchives/components/grid/grid.scss +12 -0
- package/nationalarchives/components/grid/grid.stories.js +12 -0
- package/nationalarchives/components/header/header.css +1 -1
- package/nationalarchives/components/header/header.css.map +1 -1
- package/nationalarchives/components/header/header.scss +59 -27
- package/nationalarchives/components/header/header.stories.js +4 -6
- package/nationalarchives/components/header/macro-options.json +2 -2
- package/nationalarchives/components/header/template.njk +4 -4
- package/nationalarchives/components/hero/hero.css +1 -1
- package/nationalarchives/components/hero/hero.css.map +1 -1
- package/nationalarchives/components/hero/hero.scss +6 -6
- package/nationalarchives/components/hero/hero.stories.js +6 -0
- package/nationalarchives/components/index-grid/index-grid.css +1 -1
- package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
- package/nationalarchives/components/index-grid/index-grid.scss +1 -1
- package/nationalarchives/components/index-grid/index-grid.stories.js +3 -1
- package/nationalarchives/components/message/message.css +1 -1
- package/nationalarchives/components/message/message.css.map +1 -1
- package/nationalarchives/components/pagination/macro-options.json +6 -0
- package/nationalarchives/components/pagination/pagination.css +1 -1
- package/nationalarchives/components/pagination/pagination.css.map +1 -1
- package/nationalarchives/components/pagination/pagination.scss +5 -1
- package/nationalarchives/components/pagination/pagination.stories.js +417 -2
- package/nationalarchives/components/pagination/template.njk +10 -3
- package/nationalarchives/components/phase-banner/fixtures.json +5 -41
- package/nationalarchives/components/phase-banner/macro-options.json +6 -0
- package/nationalarchives/components/phase-banner/phase-banner.css +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.scss +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.stories.js +4 -28
- package/nationalarchives/components/phase-banner/template.njk +3 -1
- package/nationalarchives/components/picture/picture.css +1 -1
- package/nationalarchives/components/picture/picture.css.map +1 -1
- package/nationalarchives/components/picture/picture.scss +5 -4
- package/nationalarchives/components/sensitive-image/sensitive-image.css +1 -1
- package/nationalarchives/components/sensitive-image/sensitive-image.css.map +1 -1
- package/nationalarchives/components/sensitive-image/sensitive-image.stories.js +3 -0
- package/nationalarchives/components/skip-link/skip-link.css +1 -1
- package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
- package/nationalarchives/components/skip-link/skip-link.stories.js +4 -1
- package/nationalarchives/components/tabs/tabs.css +1 -1
- package/nationalarchives/components/tabs/tabs.css.map +1 -1
- package/nationalarchives/components/tabs/tabs.js +1 -1
- package/nationalarchives/components/tabs/tabs.js.map +1 -1
- package/nationalarchives/components/tabs/tabs.mjs +0 -4
- package/nationalarchives/components/tabs/tabs.stories.js +6 -3
- package/nationalarchives/lib/cookies.mjs +165 -62
- package/nationalarchives/prototype-kit.css +23 -0
- package/nationalarchives/prototype-kit.css.map +1 -0
- package/nationalarchives/{_prototype-kit.scss → prototype-kit.scss} +3 -3
- package/nationalarchives/stories/utilities/colour-schemes/colour-schemes.stories.js +189 -74
- package/nationalarchives/stories/utilities/lists/lists.mdx +18 -0
- package/nationalarchives/stories/utilities/{typography → lists}/lists.stories.js +1 -1
- package/nationalarchives/stories/utilities/overrides/overrides.mdx +27 -20
- package/nationalarchives/stories/utilities/overrides/overrides.stories.js +19 -2
- package/nationalarchives/stories/utilities/tables/tables.mdx +8 -0
- package/nationalarchives/stories/utilities/tables/tables.stories.js +45 -0
- package/nationalarchives/stories/utilities/typography/heading-groups.stories.js +59 -19
- package/nationalarchives/stories/utilities/typography/typography.mdx +3 -25
- package/nationalarchives/stories/utilities/typography/typography.stories.js +28 -2
- package/nationalarchives/templates/layouts/_generic.njk +1 -0
- package/nationalarchives/templates/layouts/_prototype-kit.njk +4 -1
- package/nationalarchives/tests/cookies.test.js +427 -0
- package/nationalarchives/tests/uuid.test.js +17 -0
- package/nationalarchives/tools/_colour.scss +15 -20
- package/nationalarchives/tools/_spacing.scss +91 -2
- package/nationalarchives/tools/_typography.scss +15 -8
- package/nationalarchives/utilities/_a11y.scss +2 -1
- package/nationalarchives/utilities/_colour.scss +100 -0
- package/nationalarchives/utilities/_global.scss +2 -98
- package/nationalarchives/utilities/_index.scss +2 -0
- package/nationalarchives/utilities/_lists.scss +5 -0
- package/nationalarchives/utilities/_overrides.scss +16 -36
- package/nationalarchives/utilities/_tables.scss +86 -0
- package/nationalarchives/utilities/_typography.scss +150 -71
- package/nationalarchives/variables/_colour.scss +10 -8
- package/nationalarchives/variables/_spacing.scss +14 -9
- package/nationalarchives/variables/_typography.scss +10 -7
- package/package.json +14 -14
- package/nationalarchives/assets/fonts/OpenSans-Medium.ttf +0 -0
- package/nationalarchives/assets/fonts/fa-regular-400.ttf +0 -0
- package/nationalarchives/assets/fonts/fa-regular-400.woff2 +0 -0
- package/nationalarchives/components/profile/_index.scss +0 -1
- package/nationalarchives/components/profile/fixtures.json +0 -4
- package/nationalarchives/components/profile/macro-options.json +0 -14
- package/nationalarchives/components/profile/macro.njk +0 -3
- package/nationalarchives/components/profile/profile.css +0 -1
- package/nationalarchives/components/profile/profile.css.map +0 -1
- package/nationalarchives/components/profile/profile.scss +0 -5
- package/nationalarchives/components/profile/profile.stories.js +0 -31
- package/nationalarchives/components/profile/template.njk +0 -15
- package/nationalarchives/lib/font-awesome/regular.css +0 -5
- package/nationalarchives/lib/font-awesome/regular.css.map +0 -1
- package/nationalarchives/lib/font-awesome/regular.scss +0 -28
- package/nationalarchives/stories/development/about.mdx +0 -122
- package/nationalarchives/stories/development/contributing.mdx +0 -32
- package/nationalarchives/stories/development/cookies.mdx +0 -82
- package/nationalarchives/stories/development/publishing.mdx +0 -15
- package/nationalarchives/stories/development/structure.mdx +0 -88
- package/nationalarchives/stories/development/using/compiled.mdx +0 -9
- package/nationalarchives/stories/development/using/hosted.mdx +0 -53
- package/nationalarchives/stories/development/using/npm.mdx +0 -59
@@ -1,3 +1,35 @@
|
|
1
|
+
export class CookieEventHandler {
|
2
|
+
events = {};
|
3
|
+
|
4
|
+
constructor() {
|
5
|
+
if (CookieEventHandler._instance) {
|
6
|
+
return CookieEventHandler._instance;
|
7
|
+
}
|
8
|
+
CookieEventHandler._instance = this;
|
9
|
+
}
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Add an event listener.
|
13
|
+
* @param {string} event - The event to add a listener for.
|
14
|
+
* @param {function} callback - The callback function to call when the event is triggered.
|
15
|
+
*/
|
16
|
+
on(event, callback) {
|
17
|
+
if (!Object.prototype.hasOwnProperty.call(this.events, event)) {
|
18
|
+
this.events[event] = [];
|
19
|
+
}
|
20
|
+
this.events[event] = [...this.events[event], callback];
|
21
|
+
}
|
22
|
+
|
23
|
+
/** @protected */
|
24
|
+
trigger(event, data = {}) {
|
25
|
+
if (Object.prototype.hasOwnProperty.call(this.events, event)) {
|
26
|
+
this.events[event].forEach((eventToTrigger) =>
|
27
|
+
eventToTrigger.call(this, data),
|
28
|
+
);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
1
33
|
/**
|
2
34
|
* Class to handle cookies.
|
3
35
|
* @class Cookies
|
@@ -6,49 +38,68 @@
|
|
6
38
|
*/
|
7
39
|
export default class Cookies {
|
8
40
|
/** @protected */
|
9
|
-
|
41
|
+
extraPolicies = [];
|
42
|
+
/** @protected */
|
43
|
+
domain = "";
|
44
|
+
/** @protected */
|
45
|
+
secure = true;
|
46
|
+
/** @protected */
|
47
|
+
policiesKey = "";
|
10
48
|
|
11
49
|
/**
|
12
50
|
* Create a cookie handler.
|
13
|
-
* @param {string[]} [
|
14
|
-
* @param {string} [
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
24
|
-
this
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
...this.#policies,
|
31
|
-
...this.allPolicies,
|
32
|
-
})
|
33
|
-
: this.#policies;
|
51
|
+
* @param {string[]} [extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.
|
52
|
+
* @param {string} [options.domain=""] - The domain to register the cookie with.
|
53
|
+
* @param {string} [options.secure=true] - Only set cookie in HTTPS environments.
|
54
|
+
* @param {string} [options.policiesKey=cookies_policy] - The name of the cookie.
|
55
|
+
*/
|
56
|
+
constructor(extraPolicies = [], options = {}) {
|
57
|
+
const {
|
58
|
+
domain = "",
|
59
|
+
secure = true,
|
60
|
+
policiesKey = "cookies_policy",
|
61
|
+
} = options;
|
62
|
+
this.extraPolicies = extraPolicies;
|
63
|
+
this.domain = domain;
|
64
|
+
this.secure = secure;
|
65
|
+
this.policiesKey = policiesKey;
|
66
|
+
this.events = new CookieEventHandler();
|
67
|
+
this.init();
|
34
68
|
}
|
35
69
|
|
36
|
-
|
37
|
-
|
70
|
+
/** @protected */
|
71
|
+
init() {
|
72
|
+
this.savePolicies({
|
73
|
+
...Object.fromEntries(
|
74
|
+
this.extraPolicies.map((k) => [k.toLowerCase(), false]),
|
75
|
+
),
|
76
|
+
usage: false,
|
77
|
+
settings: false,
|
78
|
+
...this.policies,
|
79
|
+
essential: true,
|
80
|
+
});
|
38
81
|
}
|
39
82
|
|
40
|
-
|
41
|
-
#deserialise(cookieString) {
|
83
|
+
get all() {
|
42
84
|
const deserialised = {};
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
85
|
+
document.cookie
|
86
|
+
.split("; ")
|
87
|
+
.filter((x) => x)
|
88
|
+
.forEach((cookie) => {
|
89
|
+
const parts = cookie.trim().split("=");
|
90
|
+
if (parts[0]) {
|
91
|
+
deserialised[parts[0]] = parts[1];
|
92
|
+
}
|
93
|
+
});
|
47
94
|
return deserialised;
|
48
95
|
}
|
49
96
|
|
50
|
-
get
|
51
|
-
|
97
|
+
get policies() {
|
98
|
+
try {
|
99
|
+
return JSON.parse(this.get(this.policiesKey) || "{}");
|
100
|
+
} catch (e) {
|
101
|
+
return {};
|
102
|
+
}
|
52
103
|
}
|
53
104
|
|
54
105
|
/**
|
@@ -87,16 +138,36 @@ export default class Cookies {
|
|
87
138
|
* @param {number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.
|
88
139
|
* @param {string} [options.path=/] - The path to register the cookie for.
|
89
140
|
* @param {string} [options.sameSite=Lax] - The sameSite attribute.
|
141
|
+
* @param {string} [options.domain=this.domain] - The domain to register the cookie with.
|
142
|
+
* @param {string} [options.secure=this.secure] - Only set cookie in HTTPS environments.
|
90
143
|
*/
|
91
144
|
set(key, value, options = {}) {
|
92
145
|
const {
|
93
146
|
maxAge = 60 * 60 * 24 * 365,
|
94
147
|
path = "/",
|
95
148
|
sameSite = "Lax",
|
149
|
+
domain = this.domain,
|
150
|
+
secure = this.secure,
|
96
151
|
} = options;
|
97
|
-
|
152
|
+
if (!key) {
|
153
|
+
return;
|
154
|
+
}
|
155
|
+
const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${
|
156
|
+
domain ? ` domain=${domain}; ` : ""
|
157
|
+
} samesite=${sameSite}; path=${path}; max-age=${maxAge}${
|
158
|
+
secure ? "; secure" : ""
|
159
|
+
}`;
|
160
|
+
document.cookie = cookie;
|
161
|
+
this.events.trigger("setCookie", {
|
162
|
+
key,
|
98
163
|
value,
|
99
|
-
|
164
|
+
maxAge,
|
165
|
+
path,
|
166
|
+
sameSite,
|
167
|
+
domain,
|
168
|
+
secure,
|
169
|
+
cookie,
|
170
|
+
});
|
100
171
|
}
|
101
172
|
|
102
173
|
/**
|
@@ -104,12 +175,20 @@ export default class Cookies {
|
|
104
175
|
* @param {string} key - The cookie name.
|
105
176
|
* @param {string} [path=/] - The path to the cookie is registered on.
|
106
177
|
*/
|
107
|
-
delete(key, path = "/") {
|
108
|
-
|
178
|
+
delete(key, path = "/", domain = null) {
|
179
|
+
const options = { maxAge: -1, path, domain: domain || undefined };
|
180
|
+
this.set(key, "", options);
|
181
|
+
this.events.trigger("deleteCookie", { key, ...options });
|
109
182
|
}
|
110
183
|
|
111
|
-
|
112
|
-
|
184
|
+
/**
|
185
|
+
* Delete all cookies.
|
186
|
+
*/
|
187
|
+
deleteAll(path = "/", domain = null) {
|
188
|
+
Object.keys(this.all).forEach((cookie) => {
|
189
|
+
this.delete(cookie, path, domain);
|
190
|
+
});
|
191
|
+
this.events.trigger("deleteAllCookies", { path, domain });
|
113
192
|
}
|
114
193
|
|
115
194
|
/**
|
@@ -117,8 +196,9 @@ export default class Cookies {
|
|
117
196
|
* @param {string} policy - The name of the policy.
|
118
197
|
*/
|
119
198
|
acceptPolicy(policy) {
|
120
|
-
this
|
121
|
-
this.
|
199
|
+
this.setPolicy(policy, true);
|
200
|
+
this.events.trigger("acceptPolicy", policy);
|
201
|
+
this.events.trigger("changePolicy", { [policy]: true });
|
122
202
|
}
|
123
203
|
|
124
204
|
/**
|
@@ -126,47 +206,61 @@ export default class Cookies {
|
|
126
206
|
* @param {string} policy - The name of the policy.
|
127
207
|
*/
|
128
208
|
rejectPolicy(policy) {
|
209
|
+
this.setPolicy(policy, false);
|
210
|
+
this.events.trigger("rejectPolicy", policy);
|
211
|
+
this.events.trigger("changePolicy", { [policy]: false });
|
212
|
+
}
|
213
|
+
|
214
|
+
/**
|
215
|
+
* Set a policy.
|
216
|
+
* @param {string} policy - The name of the policy.
|
217
|
+
* @param {boolean} accepted - Whether the policy is accepted or not.
|
218
|
+
*/
|
219
|
+
setPolicy(policy, accepted) {
|
129
220
|
if (policy === "essential") {
|
130
221
|
return;
|
131
222
|
}
|
132
|
-
this
|
133
|
-
this.savePolicies();
|
134
|
-
}
|
135
|
-
|
136
|
-
/** @protected */
|
137
|
-
#setPolicy(policy, accepted) {
|
138
|
-
this.policies = {
|
223
|
+
this.savePolicies({
|
139
224
|
...this.policies,
|
140
225
|
[policy]: accepted,
|
141
226
|
essential: true,
|
142
|
-
};
|
143
|
-
|
144
|
-
|
145
|
-
/**
|
146
|
-
* Commit the policy preferences to the browser.
|
147
|
-
*/
|
148
|
-
savePolicies() {
|
149
|
-
this.set(this.cookiesPolicyKey, JSON.stringify(this.policies));
|
227
|
+
});
|
228
|
+
this.events.trigger("changePolicy", { [policy]: accepted });
|
150
229
|
}
|
151
230
|
|
152
231
|
/**
|
153
232
|
* Accept all the cookie policies.
|
154
233
|
*/
|
155
234
|
acceptAllPolicies() {
|
156
|
-
Object.
|
157
|
-
this
|
235
|
+
const allPolicies = Object.fromEntries(
|
236
|
+
Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),
|
158
237
|
);
|
159
|
-
this.savePolicies();
|
238
|
+
this.savePolicies(allPolicies);
|
239
|
+
this.events.trigger("acceptAllPolicies");
|
240
|
+
this.events.trigger("changePolicy", allPolicies);
|
160
241
|
}
|
161
242
|
|
162
243
|
/**
|
163
244
|
* Reject all the cookie policies.
|
164
245
|
*/
|
165
246
|
rejectAllPolicies() {
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
247
|
+
const allPolicies = {
|
248
|
+
...Object.fromEntries(
|
249
|
+
Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),
|
250
|
+
),
|
251
|
+
essential: true,
|
252
|
+
};
|
253
|
+
this.savePolicies(allPolicies);
|
254
|
+
this.events.trigger("rejectAllPolicies");
|
255
|
+
this.events.trigger("changePolicy", allPolicies);
|
256
|
+
}
|
257
|
+
|
258
|
+
/**
|
259
|
+
* Commit policy preferences to the browser.
|
260
|
+
* @param {object} policies - The policies to commit.
|
261
|
+
*/
|
262
|
+
savePolicies(policies) {
|
263
|
+
this.set(this.policiesKey, JSON.stringify(policies));
|
170
264
|
}
|
171
265
|
|
172
266
|
/**
|
@@ -179,4 +273,13 @@ export default class Cookies {
|
|
179
273
|
? this.policies[policy] === true
|
180
274
|
: null;
|
181
275
|
}
|
276
|
+
|
277
|
+
/**
|
278
|
+
* Add an event listener.
|
279
|
+
* @param {string} event - The event to add a listener for.
|
280
|
+
* @param {function} callback - The callback function to call when the event is triggered.
|
281
|
+
*/
|
282
|
+
on(event, callback) {
|
283
|
+
this.events.on(event, callback);
|
284
|
+
}
|
182
285
|
}
|