@nationalarchives/frontend 0.41.1 → 0.42.0
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/config/.htmlvalidate.json +2 -1
- package/nationalarchives/all+analytics.js +1 -1
- package/nationalarchives/all+analytics.js.map +1 -1
- package/nationalarchives/all+analytics.mjs +5 -3
- package/nationalarchives/all.css +1 -1
- package/nationalarchives/all.css.map +1 -1
- package/nationalarchives/all.js +1 -1
- package/nationalarchives/all.js.map +1 -1
- package/nationalarchives/all.mjs +44 -30
- package/nationalarchives/analytics.js +1 -1
- package/nationalarchives/analytics.js.map +1 -1
- package/nationalarchives/analytics.mjs +39 -21
- package/nationalarchives/components/accordion/accordion.css +1 -1
- package/nationalarchives/components/accordion/accordion.css.map +1 -1
- package/nationalarchives/components/accordion/accordion.js +1 -1
- package/nationalarchives/components/accordion/accordion.js.map +1 -1
- package/nationalarchives/components/accordion/accordion.mjs +1 -1
- package/nationalarchives/components/back-link/back-link.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.mjs +2 -1
- package/nationalarchives/components/button/button.css +1 -1
- package/nationalarchives/components/button/button.css.map +1 -1
- package/nationalarchives/components/button/button.scss +2 -1
- package/nationalarchives/components/card/card.css +1 -1
- package/nationalarchives/components/card/card.css.map +1 -1
- package/nationalarchives/components/card/card.scss +4 -4
- package/nationalarchives/components/checkboxes/checkboxes.css +1 -1
- package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
- package/nationalarchives/components/checkboxes/checkboxes.scss +2 -2
- package/nationalarchives/components/checkboxes/fixtures.json +27 -0
- package/nationalarchives/components/checkboxes/macro-options.json +6 -0
- package/nationalarchives/components/checkboxes/template.njk +2 -2
- package/nationalarchives/components/code-block/code-block.css +1 -1
- package/nationalarchives/components/code-block/code-block.css.map +1 -1
- package/nationalarchives/components/code-block/code-block.js +1 -1
- package/nationalarchives/components/code-block/code-block.js.map +1 -1
- package/nationalarchives/components/code-block/code-block.mjs +2 -2
- package/nationalarchives/components/code-block/code-block.scss +4 -4
- package/nationalarchives/components/code-block/fixtures.json +6 -6
- package/nationalarchives/components/code-block/macro-options.json +1 -1
- package/nationalarchives/components/code-block/template.njk +12 -12
- package/nationalarchives/components/compound-filters/compound-filters.css +1 -1
- package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
- package/nationalarchives/components/compound-filters/compound-filters.scss +2 -2
- 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/date-input/date-input.css.map +1 -1
- package/nationalarchives/components/date-input/date-input.js +1 -1
- package/nationalarchives/components/date-input/date-input.js.map +1 -1
- package/nationalarchives/components/date-input/date-input.mjs +5 -2
- package/nationalarchives/components/details/analytics.js +1 -1
- package/nationalarchives/components/details/details.css.map +1 -1
- package/nationalarchives/components/details/macro-options.json +1 -1
- package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
- package/nationalarchives/components/error-summary/error-summary.js +1 -1
- package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
- package/nationalarchives/components/error-summary/error-summary.mjs +19 -15
- package/nationalarchives/components/fieldset/fieldset.css.map +1 -1
- package/nationalarchives/components/file-input/analytics.js +3 -3
- package/nationalarchives/components/file-input/file-input.css.map +1 -1
- package/nationalarchives/components/file-input/file-input.js +1 -1
- package/nationalarchives/components/file-input/file-input.js.map +1 -1
- package/nationalarchives/components/file-input/file-input.mjs +33 -17
- package/nationalarchives/components/files-list/files-list.css +1 -1
- package/nationalarchives/components/files-list/files-list.css.map +1 -1
- package/nationalarchives/components/files-list/files-list.scss +8 -8
- package/nationalarchives/components/footer/fixtures.json +2 -2
- package/nationalarchives/components/footer/footer.css.map +1 -1
- package/nationalarchives/components/footer/footer.js +1 -1
- package/nationalarchives/components/footer/footer.js.map +1 -1
- package/nationalarchives/components/footer/footer.mjs +2 -2
- package/nationalarchives/components/footer/template.njk +3 -3
- package/nationalarchives/components/gallery/analytics.js +1 -0
- package/nationalarchives/components/gallery/gallery.css.map +1 -1
- package/nationalarchives/components/gallery/gallery.js +1 -1
- package/nationalarchives/components/gallery/gallery.js.map +1 -1
- package/nationalarchives/components/gallery/gallery.mjs +16 -4
- package/nationalarchives/components/global-header/global-header.css.map +1 -1
- package/nationalarchives/components/global-header/global-header.js +1 -1
- package/nationalarchives/components/global-header/global-header.js.map +1 -1
- package/nationalarchives/components/global-header/global-header.mjs +11 -11
- package/nationalarchives/components/global-header/global-header.scss +1 -0
- package/nationalarchives/components/header/header.css.map +1 -1
- package/nationalarchives/components/header/header.js +1 -1
- package/nationalarchives/components/header/header.js.map +1 -1
- package/nationalarchives/components/header/header.mjs +11 -11
- package/nationalarchives/components/hero/hero.css.map +1 -1
- 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 +3 -3
- package/nationalarchives/components/pagination/pagination.css.map +1 -1
- package/nationalarchives/components/panel/panel.css.map +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
- package/nationalarchives/components/picture/picture.css.map +1 -1
- package/nationalarchives/components/picture/picture.js +1 -1
- package/nationalarchives/components/picture/picture.js.map +1 -1
- package/nationalarchives/components/picture/picture.mjs +4 -2
- package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -1
- package/nationalarchives/components/radios/fixtures.json +27 -0
- package/nationalarchives/components/radios/macro-options.json +7 -1
- package/nationalarchives/components/radios/radios.css +1 -1
- package/nationalarchives/components/radios/radios.css.map +1 -1
- package/nationalarchives/components/radios/radios.scss +2 -2
- package/nationalarchives/components/radios/template.njk +2 -2
- package/nationalarchives/components/search-field/analytics.js +0 -1
- package/nationalarchives/components/search-field/search-field.css +1 -1
- package/nationalarchives/components/search-field/search-field.css.map +1 -1
- package/nationalarchives/components/search-field/search-field.scss +2 -2
- package/nationalarchives/components/secondary-navigation/secondary-navigation.css +1 -1
- package/nationalarchives/components/secondary-navigation/secondary-navigation.css.map +1 -1
- package/nationalarchives/components/secondary-navigation/secondary-navigation.scss +4 -3
- package/nationalarchives/components/sidebar/fixtures.json +69 -0
- package/nationalarchives/components/sidebar/macro-options.json +7 -0
- package/nationalarchives/components/sidebar/sidebar.css +1 -1
- package/nationalarchives/components/sidebar/sidebar.css.map +1 -1
- package/nationalarchives/components/sidebar/sidebar.js +2 -0
- package/nationalarchives/components/sidebar/sidebar.js.map +1 -0
- package/nationalarchives/components/sidebar/sidebar.mjs +97 -0
- package/nationalarchives/components/sidebar/sidebar.scss +2 -2
- package/nationalarchives/components/sidebar/template.njk +1 -1
- package/nationalarchives/components/skip-link/skip-link.css +1 -1
- package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
- package/nationalarchives/components/tabs/tabs.css.map +1 -1
- package/nationalarchives/components/tabs/tabs.js.map +1 -1
- package/nationalarchives/components/tabs/tabs.mjs +11 -3
- package/nationalarchives/components/text-input/analytics.js +1 -1
- package/nationalarchives/components/text-input/fixtures.json +14 -2
- package/nationalarchives/components/text-input/template.njk +1 -1
- package/nationalarchives/components/textarea/analytics.js +0 -1
- package/nationalarchives/components/textarea/textarea.css +1 -1
- package/nationalarchives/components/textarea/textarea.css.map +1 -1
- package/nationalarchives/components/textarea/textarea.js +1 -1
- package/nationalarchives/components/textarea/textarea.js.map +1 -1
- package/nationalarchives/components/textarea/textarea.mjs +19 -13
- package/nationalarchives/components/textarea/textarea.scss +2 -2
- package/nationalarchives/components/warning/warning.css +1 -1
- package/nationalarchives/components/warning/warning.css.map +1 -1
- package/nationalarchives/components/warning/warning.scss +2 -2
- package/nationalarchives/error-page.css +1 -1
- package/nationalarchives/error-page.css.map +1 -1
- package/nationalarchives/lib/analytics-helpers.mjs +21 -19
- package/nationalarchives/lib/cookie-events.mjs +70 -0
- package/nationalarchives/lib/cookies.mjs +54 -92
- package/nationalarchives/lib/helpers.mjs +7 -13
- package/nationalarchives/lib/uuid.mjs +5 -3
- package/nationalarchives/prototype-kit.css +1 -1
- package/nationalarchives/prototype-kit.css.map +1 -1
- package/nationalarchives/templates/fixtures.json +1 -1
- package/nationalarchives/templates/layouts/email.njk +2 -2
- package/nationalarchives/templates/prototype-kit/plain-with-sidebar.njk +74 -0
- package/nationalarchives/templates/prototype-kit/plain.njk +1 -1
- package/nationalarchives/tools/_grid.scss +3 -0
- package/nationalarchives/tools/_typography.scss +1 -1
- package/nationalarchives/utilities/reset/_index.scss +4 -0
- package/nationalarchives/utilities/tables/_index.scss +6 -5
- package/nationalarchives/utilities/typography/_index.scss +1 -0
- package/package.json +18 -22
- package/config/.eslintrc.js +0 -25
- package/config/stylelint.config.js +0 -244
- package/nationalarchives/templates/prototype-kit/index-grid.njk +0 -146
|
@@ -1,63 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/* eslint-disable max-lines */
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
events = {};
|
|
6
|
-
oneTimeEvents = {};
|
|
7
|
-
debug = false;
|
|
4
|
+
import { CookieEventHandler } from "./cookie-events.mjs";
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
this.debug = debug;
|
|
11
|
-
if (window.TNAFrontendCookieEvents) {
|
|
12
|
-
this.log("Using existing TNAFrontendCookieEvents instance");
|
|
13
|
-
return window.TNAFrontendCookieEvents;
|
|
14
|
-
}
|
|
15
|
-
window.TNAFrontendCookieEvents = this;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
log(...args) {
|
|
19
|
-
if (this.debug) {
|
|
20
|
-
console.log("[TNA Frontend Cookie Events]", ...args);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Add an event listener.
|
|
26
|
-
* @param {String} event - The event to add a listener for.
|
|
27
|
-
* @param {Function} callback - The callback function to call when the event is triggered.
|
|
28
|
-
*/
|
|
29
|
-
on(event, callback) {
|
|
30
|
-
if (!Object.hasOwn(this.events, event)) {
|
|
31
|
-
this.events[event] = [];
|
|
32
|
-
}
|
|
33
|
-
this.events[event] = [...this.events[event], callback];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
once(event, callback) {
|
|
37
|
-
if (!Object.hasOwn(this.oneTimeEvents, event)) {
|
|
38
|
-
this.oneTimeEvents[event] = [];
|
|
39
|
-
}
|
|
40
|
-
this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** @protected */
|
|
44
|
-
trigger(event, data = {}) {
|
|
45
|
-
if (Object.hasOwn(this.events, event)) {
|
|
46
|
-
this.log(`Triggering event: ${event}`, data);
|
|
47
|
-
this.events[event].forEach((eventToTrigger) =>
|
|
48
|
-
eventToTrigger.call(this, data),
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
if (Object.hasOwn(this.oneTimeEvents, event)) {
|
|
52
|
-
this.log(`Triggering one-time event: ${event}`, data);
|
|
53
|
-
for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {
|
|
54
|
-
const eventToTrigger = this.oneTimeEvents[event][i];
|
|
55
|
-
eventToTrigger.call(this, data);
|
|
56
|
-
this.oneTimeEvents[event].splice(i, 1);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
6
|
+
window.TNAFrontendCookies ||= null;
|
|
61
7
|
|
|
62
8
|
const tnaCookiePolicies = ["usage", "settings", "marketing", "essential"];
|
|
63
9
|
|
|
@@ -106,39 +52,42 @@ export default class Cookies {
|
|
|
106
52
|
noInit = false,
|
|
107
53
|
} = options;
|
|
108
54
|
if (!newInstance && window.TNAFrontendCookies) {
|
|
55
|
+
/* eslint-disable-next-line no-constructor-return */
|
|
109
56
|
return window.TNAFrontendCookies;
|
|
110
57
|
}
|
|
111
|
-
if (defaultDomain
|
|
58
|
+
if (defaultDomain) {
|
|
59
|
+
this.defaultDomain = defaultDomain;
|
|
60
|
+
} else {
|
|
112
61
|
this.defaultDomain =
|
|
113
62
|
document.documentElement.dataset.tnaCookiesDomain ||
|
|
114
63
|
window.location.hostname;
|
|
115
|
-
} else {
|
|
116
|
-
this.defaultDomain = defaultDomain;
|
|
117
64
|
}
|
|
118
|
-
if (defaultPath
|
|
119
|
-
this.defaultPath = document.documentElement.dataset.tnaCookiesPath || "/";
|
|
120
|
-
} else {
|
|
65
|
+
if (defaultPath) {
|
|
121
66
|
this.defaultPath = defaultPath;
|
|
67
|
+
} else {
|
|
68
|
+
this.defaultPath = document.documentElement.dataset.tnaCookiesPath || "/";
|
|
122
69
|
}
|
|
123
|
-
if (secure
|
|
70
|
+
if (secure) {
|
|
71
|
+
this.secure = secure;
|
|
72
|
+
} else {
|
|
124
73
|
this.secure =
|
|
125
74
|
document.documentElement.dataset.tnaCookiesInsecure !== "true";
|
|
126
|
-
} else {
|
|
127
|
-
this.secure = secure;
|
|
128
75
|
}
|
|
129
|
-
if (policiesKey
|
|
76
|
+
if (policiesKey) {
|
|
77
|
+
this.policiesKey = policiesKey;
|
|
78
|
+
} else {
|
|
130
79
|
this.policiesKey =
|
|
131
80
|
document.documentElement.dataset.tnaCookiesPoliciesKey ||
|
|
132
81
|
"cookies_policy";
|
|
133
|
-
} else {
|
|
134
|
-
this.policiesKey = policiesKey;
|
|
135
82
|
}
|
|
136
|
-
if (defaultAge
|
|
137
|
-
this.defaultAge =
|
|
138
|
-
parseInt(document.documentElement.dataset.tnaCookiesDefaultAge) ||
|
|
139
|
-
31536000; // 365 days;
|
|
140
|
-
} else {
|
|
83
|
+
if (defaultAge) {
|
|
141
84
|
this.defaultAge = defaultAge;
|
|
85
|
+
} else {
|
|
86
|
+
/* eslint-disable-next-line no-magic-numbers */
|
|
87
|
+
const secondsInAYear = 365 * 24 * 60 * 60;
|
|
88
|
+
this.defaultAge =
|
|
89
|
+
parseInt(document.documentElement.dataset.tnaCookiesDefaultAge, 10) ||
|
|
90
|
+
secondsInAYear;
|
|
142
91
|
}
|
|
143
92
|
this.events = new CookieEventHandler(this.debug);
|
|
144
93
|
this.policiesCorrectOnInit =
|
|
@@ -173,7 +122,7 @@ export default class Cookies {
|
|
|
173
122
|
.filter((policy) => tnaCookiePolicies.includes(policy))
|
|
174
123
|
.map((policy) => [policy, existingPolicies[policy]]),
|
|
175
124
|
);
|
|
176
|
-
if (Object.keys(filteredExistingPolicies).length
|
|
125
|
+
if (Object.keys(filteredExistingPolicies).length) {
|
|
177
126
|
this.log("Filtered existing policies:", filteredExistingPolicies);
|
|
178
127
|
}
|
|
179
128
|
this.savePolicies({
|
|
@@ -197,15 +146,17 @@ export default class Cookies {
|
|
|
197
146
|
}
|
|
198
147
|
|
|
199
148
|
/** @protected */
|
|
149
|
+
/* eslint-disable-next-line class-methods-use-this */
|
|
200
150
|
get all() {
|
|
201
151
|
const deserialised = {};
|
|
202
152
|
document.cookie
|
|
203
153
|
.split("; ")
|
|
204
|
-
.filter((
|
|
154
|
+
.filter((cookie) => cookie.trim() !== "")
|
|
205
155
|
.forEach((cookie) => {
|
|
206
156
|
const parts = cookie.trim().split("=");
|
|
207
|
-
|
|
208
|
-
|
|
157
|
+
const [key, value] = parts;
|
|
158
|
+
if (key) {
|
|
159
|
+
deserialised[key] = decodeURIComponent(value || "");
|
|
209
160
|
}
|
|
210
161
|
});
|
|
211
162
|
return deserialised;
|
|
@@ -215,7 +166,8 @@ export default class Cookies {
|
|
|
215
166
|
get policies() {
|
|
216
167
|
try {
|
|
217
168
|
return JSON.parse(this.get(this.policiesKey) || "{}");
|
|
218
|
-
|
|
169
|
+
// eslint-disable-next-line no-unused-vars
|
|
170
|
+
} catch (error) {
|
|
219
171
|
return {};
|
|
220
172
|
}
|
|
221
173
|
}
|
|
@@ -236,16 +188,19 @@ export default class Cookies {
|
|
|
236
188
|
* @returns
|
|
237
189
|
*/
|
|
238
190
|
hasValue(key, value) {
|
|
239
|
-
return this.get(key)
|
|
191
|
+
return this.get(key) === value;
|
|
240
192
|
}
|
|
241
193
|
|
|
242
194
|
/**
|
|
243
195
|
* Get a cookie.
|
|
244
196
|
* @param {String} key - The cookie name.
|
|
245
|
-
* @returns {String|Number|Boolean}
|
|
197
|
+
* @returns {String|Number|Boolean|null}
|
|
246
198
|
*/
|
|
247
199
|
get(key) {
|
|
248
|
-
|
|
200
|
+
if (this.exists(key)) {
|
|
201
|
+
return decodeURIComponent(this.all[key]);
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
249
204
|
}
|
|
250
205
|
|
|
251
206
|
/**
|
|
@@ -273,9 +228,15 @@ export default class Cookies {
|
|
|
273
228
|
if (!key) {
|
|
274
229
|
return;
|
|
275
230
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
231
|
+
let secureString = "";
|
|
232
|
+
if (secure) {
|
|
233
|
+
secureString = "; secure";
|
|
234
|
+
}
|
|
235
|
+
let sessionString = "";
|
|
236
|
+
if (!session) {
|
|
237
|
+
sessionString = `; max-age=${maxAge}`;
|
|
238
|
+
}
|
|
239
|
+
const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${sessionString}${secureString}`;
|
|
279
240
|
document.cookie = cookie;
|
|
280
241
|
this.log("Set cookie:", {
|
|
281
242
|
key,
|
|
@@ -307,7 +268,7 @@ export default class Cookies {
|
|
|
307
268
|
* @param {String} [path=/] - The path to the cookie is registered on.
|
|
308
269
|
*/
|
|
309
270
|
delete(key, path = "/", domain = this.defaultDomain) {
|
|
310
|
-
const options = { maxAge: -1, path, domain: domain ||
|
|
271
|
+
const options = { maxAge: -1, path, domain: domain || this.defaultDomain };
|
|
311
272
|
this.set(key, "", options);
|
|
312
273
|
this.log("Deleted cookie:", { key, path, domain, ...options });
|
|
313
274
|
this.events.trigger("deleteCookie", { key, ...options });
|
|
@@ -371,7 +332,7 @@ export default class Cookies {
|
|
|
371
332
|
acceptAllPolicies() {
|
|
372
333
|
this.log("Accepting all policies");
|
|
373
334
|
const allPolicies = Object.fromEntries(
|
|
374
|
-
Object.keys(this.policies).map((
|
|
335
|
+
Object.keys(this.policies).map((key) => [key.toLowerCase(), true]),
|
|
375
336
|
);
|
|
376
337
|
this.savePolicies(allPolicies);
|
|
377
338
|
this.events.trigger("acceptAllPolicies");
|
|
@@ -385,7 +346,7 @@ export default class Cookies {
|
|
|
385
346
|
this.log("Rejecting all policies");
|
|
386
347
|
const allPolicies = {
|
|
387
348
|
...Object.fromEntries(
|
|
388
|
-
Object.keys(this.policies).map((
|
|
349
|
+
Object.keys(this.policies).map((key) => [key.toLowerCase(), false]),
|
|
389
350
|
),
|
|
390
351
|
essential: true,
|
|
391
352
|
};
|
|
@@ -409,9 +370,10 @@ export default class Cookies {
|
|
|
409
370
|
* @returns {Boolean}
|
|
410
371
|
*/
|
|
411
372
|
isPolicyAccepted(policy) {
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
373
|
+
if (Object.hasOwn(this.policies, policy)) {
|
|
374
|
+
return this.policies[policy] === true;
|
|
375
|
+
}
|
|
376
|
+
return null;
|
|
415
377
|
}
|
|
416
378
|
|
|
417
379
|
/**
|
|
@@ -7,10 +7,10 @@ export const iso8601ToPrettyDatetime = (dateStr) => {
|
|
|
7
7
|
throw new Error("No datetime provided");
|
|
8
8
|
}
|
|
9
9
|
const isDateTime =
|
|
10
|
-
/^\d{4}(
|
|
10
|
+
/^\d{4}(?:-\d{2}){2}(?:T| )\d{2}(?::\d{2}){1,2}(?:\.\d+)?(?:Z|(?:[+-]\d{2}:\d{2}))?$/u.test(
|
|
11
11
|
datetime,
|
|
12
12
|
);
|
|
13
|
-
const isDate = /^\d{4}(
|
|
13
|
+
const isDate = /^\d{4}(?:-\d{2}){2}$/u.test(datetime);
|
|
14
14
|
if (!isDateTime && !isDate) {
|
|
15
15
|
throw new Error("Invalid datetime provided");
|
|
16
16
|
}
|
|
@@ -23,7 +23,6 @@ export const iso8601ToPrettyDatetime = (dateStr) => {
|
|
|
23
23
|
const dayString = date.toLocaleDateString("en-GB", {
|
|
24
24
|
weekday: "long",
|
|
25
25
|
});
|
|
26
|
-
|
|
27
26
|
const dateString = date.toLocaleDateString("en-GB", {
|
|
28
27
|
day: "numeric",
|
|
29
28
|
month: "long",
|
|
@@ -43,9 +42,8 @@ export const iso8601ToPrettyDatetime = (dateStr) => {
|
|
|
43
42
|
});
|
|
44
43
|
}
|
|
45
44
|
return `${dayString} ${dateString}, ${timeString}`;
|
|
46
|
-
} else {
|
|
47
|
-
return `${dayString} ${dateString}`;
|
|
48
45
|
}
|
|
46
|
+
return `${dayString} ${dateString}`;
|
|
49
47
|
};
|
|
50
48
|
|
|
51
49
|
/*
|
|
@@ -91,20 +89,16 @@ export const updateTimeElement = ($el) => {
|
|
|
91
89
|
$el.setAttribute("title", $el.textContent);
|
|
92
90
|
$el.textContent = prettyDatetime;
|
|
93
91
|
}
|
|
94
|
-
|
|
92
|
+
// eslint-disable-next-line no-unused-vars
|
|
93
|
+
} catch (error) {
|
|
95
94
|
// Do nothing if the datetime is invalid or not provided
|
|
96
95
|
}
|
|
97
96
|
};
|
|
98
97
|
|
|
99
98
|
export const checkTableForScroll = ($tableWrapper) => {
|
|
100
|
-
const isUninitialised = !(
|
|
101
|
-
$tableWrapper.dataset.tableScrollInitialised === "true"
|
|
102
|
-
);
|
|
103
99
|
const $caption = $tableWrapper.querySelector("caption");
|
|
104
|
-
if (
|
|
105
|
-
if (!$caption) {
|
|
106
|
-
console.warn("Missing <caption> element on table", $tableWrapper);
|
|
107
|
-
} else if (!$caption.id) {
|
|
100
|
+
if (!($tableWrapper.dataset.tableScrollInitialised === "true")) {
|
|
101
|
+
if ($caption && !$caption.id) {
|
|
108
102
|
$caption.id = `table-caption-${uuidv4()}`;
|
|
109
103
|
}
|
|
110
104
|
$tableWrapper.dataset.tableScrollInitialised = "true";
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
/* eslint-disable no-bitwise */
|
|
1
3
|
const uuidv4 = () =>
|
|
2
|
-
([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/
|
|
4
|
+
([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/gu, (char) =>
|
|
3
5
|
(
|
|
4
|
-
|
|
5
|
-
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (
|
|
6
|
+
char ^
|
|
7
|
+
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (char / 4)))
|
|
6
8
|
).toString(16),
|
|
7
9
|
);
|
|
8
10
|
|