@ons/design-system 65.2.1 → 65.2.3
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/components/breadcrumbs/_macro.njk +1 -1
- package/components/breadcrumbs/_macro.spec.js +5 -5
- package/components/card/example-card-set-with-lists.njk +6 -6
- package/components/cookies-banner/_macro.njk +55 -41
- package/components/cookies-banner/_macro.spec.js +9 -27
- package/components/download-resources/download-resources.spec.js +37 -36
- package/components/panel/_macro.spec.js +7 -29
- package/components/phase-banner/_macro.njk +1 -1
- package/components/summary/_macro.njk +2 -2
- package/components/summary/_macro.spec.js +28 -25
- package/components/summary/example-summary-grouped-total.njk +2 -0
- package/components/summary/example-summary-grouped-with-errors.njk +4 -0
- package/components/summary/example-summary-grouped.njk +19 -0
- package/components/summary/example-summary-household.njk +5 -0
- package/components/summary/example-summary-hub.njk +8 -0
- package/components/summary/example-summary-multiple.njk +4 -0
- package/components/summary/example-summary.njk +4 -0
- package/components/tabs/_macro.njk +1 -1
- package/components/tabs/example-tabs.njk +1 -0
- package/components/tabs/tabs.spec.js +52 -44
- package/layout/_template.njk +48 -43
- package/package.json +6 -5
- /package/{fonts → scss/fonts}/opensans-bold.woff +0 -0
- /package/{fonts → scss/fonts}/opensans-bold.woff2 +0 -0
- /package/{fonts → scss/fonts}/opensans-regular.woff +0 -0
- /package/{fonts → scss/fonts}/opensans-regular.woff2 +0 -0
- /package/{fonts → scss/fonts}/robotomono-bold.woff +0 -0
- /package/{fonts → scss/fonts}/robotomono-bold.woff2 +0 -0
- /package/{fonts → scss/fonts}/robotomono-regular.woff +0 -0
- /package/{fonts → scss/fonts}/robotomono-regular.woff2 +0 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { KnownDevices } from 'puppeteer';
|
|
3
2
|
import { setViewport } from '../../tests/helpers/puppeteer';
|
|
4
3
|
import { renderComponent, setTestPage } from '../../tests/helpers/rendering';
|
|
5
4
|
|
|
5
|
+
const iPhoneX = KnownDevices['iPhone X'];
|
|
6
|
+
|
|
6
7
|
const EXAMPLE_TABS = {
|
|
7
8
|
title: 'Example tabs',
|
|
9
|
+
titleClasses: 'ons-u-fs-m',
|
|
8
10
|
tabs: [
|
|
9
11
|
{
|
|
10
12
|
id: 'tab.id.1',
|
|
@@ -74,44 +76,50 @@ describe('script: tabs', () => {
|
|
|
74
76
|
await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS));
|
|
75
77
|
});
|
|
76
78
|
|
|
79
|
+
it('has additionally provided `titleClasses`', async () => {
|
|
80
|
+
const hasClass = await page.$eval('.ons-tabs__title', (node) => node.classList.contains('ons-u-fs-m'));
|
|
81
|
+
|
|
82
|
+
expect(hasClass).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
|
|
77
85
|
it('has the "presentation" role assigned to tab list items', async () => {
|
|
78
|
-
const role = await page.$eval('.ons-tab__list-item', node => node.getAttribute('role'));
|
|
86
|
+
const role = await page.$eval('.ons-tab__list-item', (node) => node.getAttribute('role'));
|
|
79
87
|
expect(role).toBe('presentation');
|
|
80
88
|
});
|
|
81
89
|
|
|
82
90
|
it('has the "tab" role assigned to each tab', async () => {
|
|
83
|
-
const tabRoleValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('role')));
|
|
91
|
+
const tabRoleValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('role')));
|
|
84
92
|
|
|
85
93
|
expect(tabRoleValues).toEqual(['tab', 'tab', 'tab']);
|
|
86
94
|
});
|
|
87
95
|
|
|
88
96
|
it('has "aria-controls" assigned to each tab with the corresponding panel id', async () => {
|
|
89
|
-
const ariaControlsValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('aria-controls')));
|
|
97
|
+
const ariaControlsValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('aria-controls')));
|
|
90
98
|
|
|
91
99
|
expect(ariaControlsValues).toEqual(['tab.id.1', 'tab.id.2', 'tab.id.3']);
|
|
92
100
|
});
|
|
93
101
|
|
|
94
102
|
it('has "aria-selected" assigned to the first tab', async () => {
|
|
95
|
-
const ariaSelectedValue = await page.$eval('.ons-tab', node => node.getAttribute('aria-selected'));
|
|
103
|
+
const ariaSelectedValue = await page.$eval('.ons-tab', (node) => node.getAttribute('aria-selected'));
|
|
96
104
|
|
|
97
105
|
expect(ariaSelectedValue).toBe('true');
|
|
98
106
|
});
|
|
99
107
|
|
|
100
108
|
it('has the "ons-tab--selected" class assigned to the first tab', async () => {
|
|
101
|
-
const hasClass = await page.$eval('.ons-tab', node => node.classList.contains('ons-tab--selected'));
|
|
109
|
+
const hasClass = await page.$eval('.ons-tab', (node) => node.classList.contains('ons-tab--selected'));
|
|
102
110
|
|
|
103
111
|
expect(hasClass).toBe(true);
|
|
104
112
|
});
|
|
105
113
|
|
|
106
114
|
it('has "tabindex" assigned to each tab', async () => {
|
|
107
|
-
const tabIndexValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('tabindex')));
|
|
115
|
+
const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
|
|
108
116
|
|
|
109
117
|
expect(tabIndexValues).toEqual(['0', '-1', '-1']);
|
|
110
118
|
});
|
|
111
119
|
|
|
112
120
|
it('has only one visible tab panel', async () => {
|
|
113
|
-
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', nodes =>
|
|
114
|
-
nodes.map(node => node.classList.contains('ons-tabs__panel--hidden')),
|
|
121
|
+
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
|
|
122
|
+
nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
|
|
115
123
|
);
|
|
116
124
|
|
|
117
125
|
expect(panelHiddenStates).toEqual([false, true, true]);
|
|
@@ -124,26 +132,26 @@ describe('script: tabs', () => {
|
|
|
124
132
|
});
|
|
125
133
|
|
|
126
134
|
it('is assigned a "tabindex" value', async () => {
|
|
127
|
-
const tabIndexValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('tabindex')));
|
|
135
|
+
const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
|
|
128
136
|
|
|
129
137
|
expect(tabIndexValues).toEqual(['-1', '0', '-1']);
|
|
130
138
|
});
|
|
131
139
|
|
|
132
140
|
it('has the "aria-selected" attribute', async () => {
|
|
133
|
-
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', node => node.getAttribute('aria-selected'));
|
|
141
|
+
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
|
|
134
142
|
|
|
135
143
|
expect(ariaSelectedValue).toBe('true');
|
|
136
144
|
});
|
|
137
145
|
|
|
138
146
|
it('has the "ons-tab--selected" class assigned', async () => {
|
|
139
|
-
const hasClass = await page.$eval('a[href="#tab.id.2"]', node => node.classList.contains('ons-tab--selected'));
|
|
147
|
+
const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
|
|
140
148
|
|
|
141
149
|
expect(hasClass).toBe(true);
|
|
142
150
|
});
|
|
143
151
|
|
|
144
152
|
it('shows the corresponding panel', async () => {
|
|
145
|
-
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', nodes =>
|
|
146
|
-
nodes.map(node => node.classList.contains('ons-tabs__panel--hidden')),
|
|
153
|
+
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
|
|
154
|
+
nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
|
|
147
155
|
);
|
|
148
156
|
|
|
149
157
|
expect(panelHiddenStates).toEqual([true, false, true]);
|
|
@@ -178,26 +186,26 @@ describe('script: tabs', () => {
|
|
|
178
186
|
});
|
|
179
187
|
|
|
180
188
|
it('is assigned a "tabindex" value', async () => {
|
|
181
|
-
const tabIndexValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('tabindex')));
|
|
189
|
+
const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
|
|
182
190
|
|
|
183
191
|
expect(tabIndexValues).toEqual(['-1', '0', '-1']);
|
|
184
192
|
});
|
|
185
193
|
|
|
186
194
|
it('has the "aria-selected" attribute', async () => {
|
|
187
|
-
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', node => node.getAttribute('aria-selected'));
|
|
195
|
+
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
|
|
188
196
|
|
|
189
197
|
expect(ariaSelectedValue).toBe('true');
|
|
190
198
|
});
|
|
191
199
|
|
|
192
200
|
it('has the "ons-tab--selected" class assigned', async () => {
|
|
193
|
-
const hasClass = await page.$eval('a[href="#tab.id.2"]', node => node.classList.contains('ons-tab--selected'));
|
|
201
|
+
const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
|
|
194
202
|
|
|
195
203
|
expect(hasClass).toBe(true);
|
|
196
204
|
});
|
|
197
205
|
|
|
198
206
|
it('shows the corresponding panel', async () => {
|
|
199
|
-
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', nodes =>
|
|
200
|
-
nodes.map(node => node.classList.contains('ons-tabs__panel--hidden')),
|
|
207
|
+
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
|
|
208
|
+
nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
|
|
201
209
|
);
|
|
202
210
|
|
|
203
211
|
expect(panelHiddenStates).toEqual([true, false, true]);
|
|
@@ -206,7 +214,7 @@ describe('script: tabs', () => {
|
|
|
206
214
|
|
|
207
215
|
describe('when the viewport is small', () => {
|
|
208
216
|
beforeEach(async () => {
|
|
209
|
-
await page.emulate(
|
|
217
|
+
await page.emulate(iPhoneX);
|
|
210
218
|
|
|
211
219
|
await setTestPage('/test', renderComponent('tabs', EXAMPLE_TABS_LONGER));
|
|
212
220
|
});
|
|
@@ -214,27 +222,27 @@ describe('script: tabs', () => {
|
|
|
214
222
|
it('has no aria attributes on tabs', async () => {
|
|
215
223
|
const tabElements = await page.$$('.ons-tab');
|
|
216
224
|
for (let i = 0; i < 3; ++i) {
|
|
217
|
-
const hasRoleAttribute = await tabElements[i].evaluate(node => node.getAttribute('role') !== null);
|
|
225
|
+
const hasRoleAttribute = await tabElements[i].evaluate((node) => node.getAttribute('role') !== null);
|
|
218
226
|
expect(hasRoleAttribute).toBe(false);
|
|
219
227
|
|
|
220
|
-
const hasAriaControlsAttribute = await tabElements[i].evaluate(node => node.getAttribute('aria-controls') !== null);
|
|
228
|
+
const hasAriaControlsAttribute = await tabElements[i].evaluate((node) => node.getAttribute('aria-controls') !== null);
|
|
221
229
|
expect(hasAriaControlsAttribute).toBe(false);
|
|
222
230
|
|
|
223
|
-
const hasAriaSelectedAttribute = await tabElements[i].evaluate(node => node.getAttribute('aria-selected') !== null);
|
|
231
|
+
const hasAriaSelectedAttribute = await tabElements[i].evaluate((node) => node.getAttribute('aria-selected') !== null);
|
|
224
232
|
expect(hasAriaSelectedAttribute).toBe(false);
|
|
225
233
|
}
|
|
226
234
|
});
|
|
227
235
|
|
|
228
236
|
it('has no hidden tab panels', async () => {
|
|
229
|
-
const panelCount = await page.$$eval('.ons-tabs__panel', nodes => nodes.length);
|
|
237
|
+
const panelCount = await page.$$eval('.ons-tabs__panel', (nodes) => nodes.length);
|
|
230
238
|
expect(panelCount).toBe(5);
|
|
231
239
|
|
|
232
|
-
const hiddenPanelCount = await page.$$eval('.ons-tabs__panel--hidden', nodes => nodes.length);
|
|
240
|
+
const hiddenPanelCount = await page.$$eval('.ons-tabs__panel--hidden', (nodes) => nodes.length);
|
|
233
241
|
expect(hiddenPanelCount).toBe(0);
|
|
234
242
|
});
|
|
235
243
|
|
|
236
244
|
it('displays a h2 element with a unique id', async () => {
|
|
237
|
-
const panelCount = await page.$$eval('#tab-1-content-title', nodes => nodes.length);
|
|
245
|
+
const panelCount = await page.$$eval('#tab-1-content-title', (nodes) => nodes.length);
|
|
238
246
|
expect(panelCount).toBe(1);
|
|
239
247
|
});
|
|
240
248
|
});
|
|
@@ -246,13 +254,13 @@ describe('script: tabs', () => {
|
|
|
246
254
|
});
|
|
247
255
|
|
|
248
256
|
it('does not assign "aria-selected" to the first tab', async () => {
|
|
249
|
-
const ariaSelectedValue = await page.$eval('.ons-tab', node => node.getAttribute('aria-selected'));
|
|
257
|
+
const ariaSelectedValue = await page.$eval('.ons-tab', (node) => node.getAttribute('aria-selected'));
|
|
250
258
|
|
|
251
259
|
expect(ariaSelectedValue).not.toBe('true');
|
|
252
260
|
});
|
|
253
261
|
|
|
254
262
|
it('does not assign the "ons-tab--selected" class to the first tab', async () => {
|
|
255
|
-
const hasClass = await page.$eval('.ons-tab', node => node.classList.contains('ons-tab--selected'));
|
|
263
|
+
const hasClass = await page.$eval('.ons-tab', (node) => node.classList.contains('ons-tab--selected'));
|
|
256
264
|
|
|
257
265
|
expect(hasClass).toBe(false);
|
|
258
266
|
});
|
|
@@ -264,26 +272,26 @@ describe('script: tabs', () => {
|
|
|
264
272
|
});
|
|
265
273
|
|
|
266
274
|
it('is assigned a "tabindex" value', async () => {
|
|
267
|
-
const tabIndexValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('tabindex')));
|
|
275
|
+
const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
|
|
268
276
|
|
|
269
277
|
expect(tabIndexValues).toEqual(['0', '-1', '-1']);
|
|
270
278
|
});
|
|
271
279
|
|
|
272
280
|
it('has the "aria-selected" attribute', async () => {
|
|
273
|
-
const ariaSelectedValue = await page.$eval('a[href="#tab.id.1"]', node => node.getAttribute('aria-selected'));
|
|
281
|
+
const ariaSelectedValue = await page.$eval('a[href="#tab.id.1"]', (node) => node.getAttribute('aria-selected'));
|
|
274
282
|
|
|
275
283
|
expect(ariaSelectedValue).toBe('true');
|
|
276
284
|
});
|
|
277
285
|
|
|
278
286
|
it('has the "ons-tab--selected" class assigned', async () => {
|
|
279
|
-
const hasClass = await page.$eval('a[href="#tab.id.1"]', node => node.classList.contains('ons-tab--selected'));
|
|
287
|
+
const hasClass = await page.$eval('a[href="#tab.id.1"]', (node) => node.classList.contains('ons-tab--selected'));
|
|
280
288
|
|
|
281
289
|
expect(hasClass).toBe(true);
|
|
282
290
|
});
|
|
283
291
|
|
|
284
292
|
it('shows the corresponding panel', async () => {
|
|
285
|
-
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', nodes =>
|
|
286
|
-
nodes.map(node => node.classList.contains('ons-tabs__panel--hidden')),
|
|
293
|
+
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
|
|
294
|
+
nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
|
|
287
295
|
);
|
|
288
296
|
|
|
289
297
|
expect(panelHiddenStates).toEqual([false, true, true]);
|
|
@@ -298,26 +306,26 @@ describe('script: tabs', () => {
|
|
|
298
306
|
});
|
|
299
307
|
|
|
300
308
|
it('is assigned a "tabindex" value', async () => {
|
|
301
|
-
const tabIndexValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('tabindex')));
|
|
309
|
+
const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
|
|
302
310
|
|
|
303
311
|
expect(tabIndexValues).toEqual(['0', '-1', '-1']);
|
|
304
312
|
});
|
|
305
313
|
|
|
306
314
|
it('does not have the "aria-selected" attribute', async () => {
|
|
307
|
-
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', node => node.getAttribute('aria-selected'));
|
|
315
|
+
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
|
|
308
316
|
|
|
309
317
|
expect(ariaSelectedValue).not.toBe('true');
|
|
310
318
|
});
|
|
311
319
|
|
|
312
320
|
it('does not have the "ons-tab--selected" class assigned', async () => {
|
|
313
|
-
const hasClass = await page.$eval('a[href="#tab.id.2"]', node => node.classList.contains('ons-tab--selected'));
|
|
321
|
+
const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
|
|
314
322
|
|
|
315
323
|
expect(hasClass).toBe(false);
|
|
316
324
|
});
|
|
317
325
|
|
|
318
326
|
it('hides the corresponding panel', async () => {
|
|
319
|
-
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', nodes =>
|
|
320
|
-
nodes.map(node => node.classList.contains('ons-tabs__panel--hidden')),
|
|
327
|
+
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
|
|
328
|
+
nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
|
|
321
329
|
);
|
|
322
330
|
|
|
323
331
|
expect(panelHiddenStates).toEqual([true, true, true]);
|
|
@@ -332,26 +340,26 @@ describe('script: tabs', () => {
|
|
|
332
340
|
});
|
|
333
341
|
|
|
334
342
|
it('is assigned a "tabindex" value', async () => {
|
|
335
|
-
const tabIndexValues = await page.$$eval('.ons-tab', nodes => nodes.map(node => node.getAttribute('tabindex')));
|
|
343
|
+
const tabIndexValues = await page.$$eval('.ons-tab', (nodes) => nodes.map((node) => node.getAttribute('tabindex')));
|
|
336
344
|
|
|
337
345
|
expect(tabIndexValues).toEqual(['-1', '0', '-1']);
|
|
338
346
|
});
|
|
339
347
|
|
|
340
348
|
it('has the "aria-selected" attribute', async () => {
|
|
341
|
-
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', node => node.getAttribute('aria-selected'));
|
|
349
|
+
const ariaSelectedValue = await page.$eval('a[href="#tab.id.2"]', (node) => node.getAttribute('aria-selected'));
|
|
342
350
|
|
|
343
351
|
expect(ariaSelectedValue).toBe('true');
|
|
344
352
|
});
|
|
345
353
|
|
|
346
354
|
it('has the "ons-tab--selected" class assigned', async () => {
|
|
347
|
-
const hasClass = await page.$eval('a[href="#tab.id.2"]', node => node.classList.contains('ons-tab--selected'));
|
|
355
|
+
const hasClass = await page.$eval('a[href="#tab.id.2"]', (node) => node.classList.contains('ons-tab--selected'));
|
|
348
356
|
|
|
349
357
|
expect(hasClass).toBe(true);
|
|
350
358
|
});
|
|
351
359
|
|
|
352
360
|
it('shows the corresponding panel', async () => {
|
|
353
|
-
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', nodes =>
|
|
354
|
-
nodes.map(node => node.classList.contains('ons-tabs__panel--hidden')),
|
|
361
|
+
const panelHiddenStates = await page.$$eval('.ons-tabs__panel', (nodes) =>
|
|
362
|
+
nodes.map((node) => node.classList.contains('ons-tabs__panel--hidden')),
|
|
355
363
|
);
|
|
356
364
|
|
|
357
365
|
expect(panelHiddenStates).toEqual([true, false, true]);
|
package/layout/_template.njk
CHANGED
|
@@ -14,8 +14,9 @@
|
|
|
14
14
|
{% if pageConfig.cdn or release_version or designSystemVersion %}
|
|
15
15
|
{# Production #}
|
|
16
16
|
{% set cdn_url = (pageConfig.cdn.url if pageConfig.cdn and pageConfig.cdn.url) or "https://cdn.ons.gov.uk/sdc/design-system" %}
|
|
17
|
-
{% set slash = "" if cdn_url | last == "/" else
|
|
18
|
-
|
|
17
|
+
{% set slash = "" if cdn_url | last == "/" else
|
|
18
|
+
"/" %}
|
|
19
|
+
{% set assetsURL = cdn_url + slash + ((pageConfig.cdn.version if pageConfig.cdn and pageConfig.cdn.version)or release_version or designSystemVersion) %}
|
|
19
20
|
{% elif pageConfig.assetsURL %}
|
|
20
21
|
{# Runner Dev #}
|
|
21
22
|
{% set assetsURL = pageConfig.assetsURL %}
|
|
@@ -43,9 +44,12 @@
|
|
|
43
44
|
|
|
44
45
|
{# Page columns #}
|
|
45
46
|
{% set pageColNumber = pageConfig.pageColNumber | default("12") %}
|
|
46
|
-
{% set pageColClasses = pageConfig.pageColClasses if pageConfig.pageColClasses else
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
{% set pageColClasses = pageConfig.pageColClasses if pageConfig.pageColClasses else
|
|
48
|
+
'' %}
|
|
49
|
+
{% set mainClasses = pageConfig.mainColClasses if pageConfig.mainColClasses else
|
|
50
|
+
'' %}
|
|
51
|
+
{% set themeColor = pageConfig.themeColor if pageConfig.themeColor else
|
|
52
|
+
"#206095" %}
|
|
49
53
|
<!doctype html>
|
|
50
54
|
<html lang="{{ currentLanguageISOCode }}">
|
|
51
55
|
<head>
|
|
@@ -55,7 +59,7 @@
|
|
|
55
59
|
<title>{{ page_title }}</title>
|
|
56
60
|
<link rel="stylesheet" href="{{ assetsURL }}/css/main.css">
|
|
57
61
|
<link rel="stylesheet" media="print" href="{{ assetsURL }}/css/print.css">
|
|
58
|
-
<meta name="theme-color" content="
|
|
62
|
+
<meta name="theme-color" content="{{ themeColor }}"/>
|
|
59
63
|
{% block meta %}
|
|
60
64
|
{% if pageConfig.meta %}
|
|
61
65
|
{% if pageConfig.meta.description or pageConfig.description %}
|
|
@@ -87,12 +91,13 @@
|
|
|
87
91
|
<meta property="og:locale" content="{{ currentLanguageISOCode }}">
|
|
88
92
|
|
|
89
93
|
{% if otherLanguageISOCode %}
|
|
90
|
-
<meta property="og:locale:alternate" content="{{ otherLanguageISOCode }}">
|
|
94
|
+
<meta property="og:locale:alternate" content="{{ otherLanguageISOCode }}">
|
|
91
95
|
{% endif %}
|
|
92
96
|
|
|
93
97
|
{% if pageConfig.social %}
|
|
94
98
|
|
|
95
|
-
{% set twitterImagePath = pageConfig.social.twitterImage if pageConfig.social.twitterImage else
|
|
99
|
+
{% set twitterImagePath = pageConfig.social.twitterImage if pageConfig.social.twitterImage else
|
|
100
|
+
assetsURL + '/favicons/twitter.png' %}
|
|
96
101
|
<!-- Twitter -->
|
|
97
102
|
<meta name="twitter:card" content="summary">
|
|
98
103
|
<meta name="twitter:site" content="{{ pageConfig.social.twitterSite }}">
|
|
@@ -132,37 +137,37 @@
|
|
|
132
137
|
{% block preHeader %}{% endblock %}
|
|
133
138
|
{% block skipLink %}
|
|
134
139
|
{{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
onsSkipToContent({
|
|
141
|
+
"url": "#main-content",
|
|
142
|
+
"text": "Skip to main content"
|
|
143
|
+
})
|
|
144
|
+
}}
|
|
140
145
|
{% endblock %}
|
|
141
146
|
{% block header %}
|
|
142
147
|
{{
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
148
|
+
onsHeader({
|
|
149
|
+
"wide": pageConfig.wide,
|
|
150
|
+
"fullWidth": pageConfig.fullWidth,
|
|
151
|
+
"language": pageConfig.header.language,
|
|
152
|
+
"button": pageConfig.header.signoutButton,
|
|
153
|
+
"toggleNavigationButton": pageConfig.header.toggleNavigationButton,
|
|
154
|
+
"navigation": pageConfig.header.navigation,
|
|
155
|
+
"siteSearchAutosuggest": pageConfig.header.siteSearchAutosuggest,
|
|
156
|
+
"browserBanner": pageConfig.header.browserBanner,
|
|
157
|
+
"phase": pageConfig.header.phase,
|
|
158
|
+
"assetsURL": assetsURL,
|
|
159
|
+
"serviceLinks": pageConfig.header.serviceLinks,
|
|
160
|
+
"variants": pageConfig.header.variants,
|
|
161
|
+
"classes": pageConfig.header.classes,
|
|
162
|
+
"mastheadLogo": pageConfig.header.mastheadLogo,
|
|
163
|
+
"mastheadLogoUrl": pageConfig.header.mastheadLogoUrl,
|
|
164
|
+
"titleUrl": pageConfig.header.titleUrl,
|
|
165
|
+
"title": pageConfig.header.title | default(pageConfig.title),
|
|
166
|
+
"description": pageConfig.header.description,
|
|
167
|
+
"titleAsH1": pageConfig.header.titleAsH1,
|
|
168
|
+
"titleLogo": pageConfig.header.titleLogo
|
|
169
|
+
})
|
|
170
|
+
}}
|
|
166
171
|
{% endblock %}
|
|
167
172
|
{% block pageContent %}
|
|
168
173
|
<div class="ons-page__container ons-container{{ containerClasses }}">
|
|
@@ -170,12 +175,12 @@
|
|
|
170
175
|
{% if pageConfig.breadcrumbs %}
|
|
171
176
|
{% from "components/breadcrumbs/_macro.njk" import onsBreadcrumbs %}
|
|
172
177
|
{{
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
178
|
+
onsBreadcrumbs({
|
|
179
|
+
"id": pageConfig.breadcrumbs.id,
|
|
180
|
+
"ariaLabel": pageConfig.breadcrumbs.ariaLabel,
|
|
181
|
+
"itemsList": pageConfig.breadcrumbs.itemsList
|
|
182
|
+
})
|
|
183
|
+
}}
|
|
179
184
|
{% endif %}
|
|
180
185
|
{% endblock %}
|
|
181
186
|
<div class="ons-grid">
|
|
@@ -243,4 +248,4 @@
|
|
|
243
248
|
|
|
244
249
|
{% block scripts %}{% endblock %}
|
|
245
250
|
</body>
|
|
246
|
-
</html>
|
|
251
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ons/design-system",
|
|
3
3
|
"description": "ONS Design System built CSS, JS, and Nunjucks templates",
|
|
4
|
-
"version": "65.2.
|
|
4
|
+
"version": "65.2.3",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": {
|
|
@@ -97,9 +97,10 @@
|
|
|
97
97
|
"gulp-terser": "^2.0.1",
|
|
98
98
|
"http-server": "^0.12.3",
|
|
99
99
|
"husky": "^8.0.3",
|
|
100
|
-
"jest": "^
|
|
101
|
-
"jest-axe": "^
|
|
102
|
-
"jest-
|
|
100
|
+
"jest": "^29.6.1",
|
|
101
|
+
"jest-axe": "^8.0.0",
|
|
102
|
+
"jest-environment-jsdom": "^29.6.1",
|
|
103
|
+
"jest-puppeteer": "^9.0.0",
|
|
103
104
|
"js-beautify": "^1.11.0",
|
|
104
105
|
"lighthouse": "^10.4.0",
|
|
105
106
|
"lint-staged": "^8.1.0",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"postcss-url": "^8.0.0",
|
|
114
115
|
"prepend-file": "^1.3.1",
|
|
115
116
|
"prettier": "^3.0.0",
|
|
116
|
-
"puppeteer": "^
|
|
117
|
+
"puppeteer": "^21.0.2",
|
|
117
118
|
"remark-cli": "^11.0.0",
|
|
118
119
|
"remark-lint": "^9.1.2",
|
|
119
120
|
"remark-preset-lint-recommended": "^6.1.3",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|