@ons/design-system 74.0.0-next.1 → 74.0.0-next.10
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 +15 -3
- package/components/access-code/example-access-code-error.njk +1 -1
- package/components/access-code/example-access-code.njk +1 -1
- package/components/address-input/autosuggest.address.spec.js +23 -0
- package/components/autosuggest/autosuggest.ui.js +3 -0
- package/components/back-to-top/example-full-page-back-to-top.njk +1 -1
- package/components/breadcrumbs/_breadcrumbs.scss +4 -7
- package/components/breadcrumbs/_macro.njk +29 -25
- package/components/breadcrumbs/_macro.spec.js +39 -0
- package/components/breadcrumbs/example-breadcrumbs-wide.njk +52 -0
- package/components/chart/_chart.scss +0 -9
- package/components/chart/_macro.njk +96 -128
- package/components/chart/_macro.spec.js +43 -28
- package/components/chart/example-area-chart-with-axis-min-and-max-values.njk +6 -3
- package/components/chart/example-area-chart.njk +6 -3
- package/components/chart/example-bar-chart-with-annotations.njk +6 -3
- package/components/chart/example-bar-chart-with-axis-min-and-max-values.njk +6 -3
- package/components/chart/example-bar-chart-with-point-range-and-reference-line-annotations.njk +6 -3
- package/components/chart/example-bar-chart.njk +6 -3
- package/components/chart/example-bar-with-confidence-levels.njk +6 -3
- package/components/chart/example-clustered-bar-chart.njk +6 -3
- package/components/chart/example-clustered-column-chart.njk +6 -3
- package/components/chart/example-column-chart-with-annotations.njk +6 -3
- package/components/chart/example-column-chart-with-axis-min-and-max-values.njk +6 -3
- package/components/chart/example-column-chart-with-custom-reference-line-value.njk +6 -3
- package/components/chart/example-column-chart-with-range-annotations.njk +6 -3
- package/components/chart/example-column-chart-with-reference-line-annotations.njk +6 -3
- package/components/chart/example-column-chart.njk +6 -3
- package/components/chart/example-column-with-confidence-levels.njk +6 -3
- package/components/chart/example-column-with-line-chart.njk +6 -3
- package/components/chart/example-iframe-chart.njk +6 -3
- package/components/chart/example-line-chart-with-annotations.njk +6 -3
- package/components/chart/example-line-chart-with-axis-min-and-max-values.njk +6 -3
- package/components/chart/example-line-chart-with-custom-reference-line-value.njk +6 -3
- package/components/chart/example-line-chart-with-label-format.njk +6 -3
- package/components/chart/example-line-chart-with-markers.njk +6 -3
- package/components/chart/example-line-chart-with-range-annotations-inside.njk +6 -3
- package/components/chart/example-line-chart-with-range-annotations-outside-left-right.njk +6 -3
- package/components/chart/example-line-chart-with-range-annotations-outside-top-bottom.njk +6 -3
- package/components/chart/example-line-chart-with-reference-line-annotations.njk +6 -3
- package/components/chart/example-line-chart.njk +6 -3
- package/components/chart/example-scatter-chart-with-axis-min-and-max-values.njk +6 -3
- package/components/chart/example-scatter-chart.njk +6 -3
- package/components/chart/example-stacked-bar-chart.njk +6 -3
- package/components/chart/example-stacked-column-chart.njk +6 -3
- package/components/document-list/_macro.njk +2 -2
- package/components/document-list/_macro.spec.js +55 -0
- package/components/featured-article/_macro.njk +3 -37
- package/components/featured-article/example-featured-article-with-chart.njk +19 -14
- package/components/featured-article/example-featured-article-with-image.njk +12 -7
- package/components/featured-article/featured-article.scss +1 -1
- package/components/featured-article/macro.spec.js +44 -67
- package/components/figure/_figure.scss +31 -0
- package/components/figure/_macro.njk +98 -0
- package/components/figure/_macro.spec.js +520 -0
- package/components/figure/example-figure-heading-level-2.njk +34 -0
- package/components/figure/example-figure-with-div.njk +29 -0
- package/components/figure/example-figure-without-footer.njk +12 -0
- package/components/figure/example-figure-without-header.njk +24 -0
- package/components/figure/example-figure.njk +34 -0
- package/components/header/_header.scss +1 -3
- package/components/header/_macro.njk +8 -4
- package/components/header/_macro.spec.js +48 -0
- package/components/hero/_macro.njk +3 -2
- package/components/hero/_macro.spec.js +36 -0
- package/components/hero/example-hero-dark-wide.njk +17 -0
- package/components/hero/example-hero-dark-with-external-breadcrumbs.njk +17 -21
- package/components/hero/example-hero-default-full-width.njk +16 -0
- package/components/hero/example-hero-default-with-external-breadcrumbs.njk +165 -169
- package/components/hero/example-hero-grey-with-external-breadcrumbs.njk +207 -211
- package/components/hero/example-hero-navy-blue-with-external-breadcrumbs.njk +163 -167
- package/components/hero/example-hero-pale-blue-with-external-breadcrumbs.njk +165 -169
- package/components/image/_image.scss +0 -7
- package/components/image/_macro.njk +25 -14
- package/components/image/_macro.spec.js +122 -7
- package/components/image/example-image-with-figure-fields.njk +25 -0
- package/components/list/_macro.njk +1 -0
- package/components/list/_macro.spec.js +16 -0
- package/components/question/example-question-ccs.njk +1 -1
- package/components/question/example-question-fieldset.njk +1 -1
- package/components/question/example-question-interviewer-note.njk +1 -1
- package/components/question/example-question-no-fieldset.njk +1 -1
- package/components/relationships/example-relationships-error.njk +1 -1
- package/components/relationships/example-relationships-you.njk +1 -1
- package/components/relationships/example-relationships.njk +1 -1
- package/components/table/_macro.njk +138 -111
- package/components/table/_macro.spec.js +175 -16
- package/components/table/_table.scss +6 -1
- package/components/table/example-table-basic-no-caption.njk +46 -0
- package/components/table/example-table-basic-visually-hidden-caption.njk +47 -0
- package/components/table/example-table-with-figure-fields.njk +86 -0
- package/components/table/table.spec.js +2 -0
- package/components/table-of-contents/_macro.njk +6 -4
- package/components/table-of-contents/_macro.spec.js +43 -3
- package/components/table-of-contents/example-table-of-contents-ordered.njk +64 -0
- package/components/table-of-contents/example-table-of-contents-sticky-full-page-ordered.njk +156 -0
- package/components/table-of-contents/example-table-of-contents-sticky-full-page.njk +1 -1
- package/components/table-of-contents/table-of-contents.spec.js +4 -5
- package/css/main.css +1 -1
- package/layout/_template.njk +66 -46
- package/package.json +45 -36
- package/scripts/main.es5.js +3 -3
- package/scripts/main.js +2 -2
- package/scss/base/_global.scss +8 -0
- package/scss/main.scss +1 -0
- package/scss/objects/_page.scss +1 -1
- package/scss/objects/_spacing.scss +0 -4
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
{% set titleTag = "h1" if params.titleAsH1 else "div" %}
|
|
7
7
|
{% set openingTag = "<" + titleTag %}
|
|
8
8
|
{% set closingTag = "</" + titleTag + ">" %}
|
|
9
|
+
{% set rootElementTag = "div" if params.useDivForRootElement else "header" %}
|
|
9
10
|
{% set currentLanguageIsoCode = "en" %}
|
|
10
11
|
{% set logoAltText = params.mastheadLogoAltText or params.mastheadLogo.altText %}
|
|
11
12
|
|
|
@@ -13,10 +14,11 @@
|
|
|
13
14
|
{% set currentLanguage = params.language.languages | selectattr("current") | first %}
|
|
14
15
|
{% set currentLanguageIsoCode = currentLanguage.isoCode %}
|
|
15
16
|
{% endif %}
|
|
16
|
-
|
|
17
|
-
<
|
|
17
|
+
<!-- prettier-ignore-start -->
|
|
18
|
+
<{{ rootElementTag | safe }}
|
|
18
19
|
class="ons-header{{ ' '+ params.classes if params.classes }}{% if params.variants is not string %}{% for variant in params.variants %}{{ ' ' }}ons-header--{{ variant }}{% endfor %}{% else %}{{ ' ' }}ons-header--{{ params.variants }}{% endif %}"
|
|
19
20
|
>
|
|
21
|
+
<!-- prettier-ignore-end -->
|
|
20
22
|
{{
|
|
21
23
|
onsBrowserBanner({
|
|
22
24
|
"lang": currentLanguageIsoCode,
|
|
@@ -368,7 +370,7 @@
|
|
|
368
370
|
"name": params.search.form.inputName | default('q'),
|
|
369
371
|
"width": 'full',
|
|
370
372
|
"label": {
|
|
371
|
-
"text": (params.search.form.inputLabel if params.search.form else params.searchLinks.searchNavigationInputLabel) | default('Search the ONS'),
|
|
373
|
+
"text": (params.search.form.inputLabel if params.search.form else params.searchLinks.searchNavigationInputLabel) | default('Chwilio’r SYG' if currentLanguageIsoCode == 'cy' else 'Search the ONS'),
|
|
372
374
|
"id": "header-search-input-label"
|
|
373
375
|
},
|
|
374
376
|
"searchButton": {
|
|
@@ -535,5 +537,7 @@
|
|
|
535
537
|
{% if params.navigation %}
|
|
536
538
|
{{ onsNavigation(params) }}
|
|
537
539
|
{% endif %}
|
|
538
|
-
|
|
540
|
+
<!-- prettier-ignore-start -->
|
|
541
|
+
</{{ rootElementTag | safe }}>
|
|
542
|
+
<!-- prettier-ignore-end -->
|
|
539
543
|
{% endmacro %}
|
|
@@ -36,6 +36,33 @@ describe('FOR: Macro: Header', () => {
|
|
|
36
36
|
});
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
+
describe('GIVEN: Params: useDivForRootElement', () => {
|
|
40
|
+
describe('WHEN: useDivForRootElement is not set', () => {
|
|
41
|
+
const $ = cheerio.load(
|
|
42
|
+
renderComponent('header', {
|
|
43
|
+
...EXAMPLE_HEADER_BASIC,
|
|
44
|
+
}),
|
|
45
|
+
);
|
|
46
|
+
test('THEN: renders the root element as a header tag', () => {
|
|
47
|
+
expect($('header.ons-header').length).toBe(1);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('WHEN: useDivForRootElement is set to true', () => {
|
|
51
|
+
const $ = cheerio.load(
|
|
52
|
+
renderComponent('header', {
|
|
53
|
+
...EXAMPLE_HEADER_BASIC,
|
|
54
|
+
useDivForRootElement: true,
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
test('THEN: renders the root element as a div tag', () => {
|
|
58
|
+
expect($('div.ons-header').length).toBe(1);
|
|
59
|
+
});
|
|
60
|
+
test('THEN: does not render a header tag as the root element', () => {
|
|
61
|
+
expect($('header.ons-header').length).toBe(0);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
39
66
|
describe('Accessibility: search heading', () => {
|
|
40
67
|
test('THEN: axe passes when search heading is present (params.search.links.heading)', async () => {
|
|
41
68
|
const params = {
|
|
@@ -1104,6 +1131,27 @@ describe('FOR: Macro: Header', () => {
|
|
|
1104
1131
|
expect($('#header-search-input-label').text().trim()).toBe('Search the ONS');
|
|
1105
1132
|
});
|
|
1106
1133
|
});
|
|
1134
|
+
describe('WHEN: inputLabel is not provided and Welsh is the current language', () => {
|
|
1135
|
+
const $ = cheerio.load(
|
|
1136
|
+
renderComponent('header', {
|
|
1137
|
+
...EXAMPLE_HEADER_SEARCH,
|
|
1138
|
+
variants: 'basic',
|
|
1139
|
+
language: {
|
|
1140
|
+
languages: [
|
|
1141
|
+
{ url: '#0', isoCode: 'en', text: 'English', current: false },
|
|
1142
|
+
{ url: '#0', isoCode: 'cy', text: 'Cymraeg', current: true },
|
|
1143
|
+
],
|
|
1144
|
+
},
|
|
1145
|
+
search: {
|
|
1146
|
+
...EXAMPLE_HEADER_SEARCH.search,
|
|
1147
|
+
form: { ...EXAMPLE_HEADER_SEARCH.search.form, inputLabel: undefined },
|
|
1148
|
+
},
|
|
1149
|
+
}),
|
|
1150
|
+
);
|
|
1151
|
+
test('THEN: renders search input with Welsh default label', () => {
|
|
1152
|
+
expect($('#header-search-input-label').text().trim()).toBe('Chwilio’r SYG');
|
|
1153
|
+
});
|
|
1154
|
+
});
|
|
1107
1155
|
describe('WHEN: buttonText is provided', () => {
|
|
1108
1156
|
const $ = cheerio.load(renderComponent('header', { ...EXAMPLE_HEADER_SEARCH, variants: 'basic' }));
|
|
1109
1157
|
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
{% endfor %}
|
|
22
22
|
</div>
|
|
23
23
|
{% endif %}
|
|
24
|
-
<div
|
|
24
|
+
<div
|
|
25
|
+
class="ons-hero__container ons-container{{ ' ons-container--wide' if params.wide }}{{ ' ons-container--full-width' if params.fullWidth }}"
|
|
26
|
+
>
|
|
25
27
|
<div class="ons-hero__details ons-grid__col ons-col-{{ detailsColumns }}@m col-10@s@m">
|
|
26
28
|
<div class="ons-hero__content">
|
|
27
29
|
<div class="ons-hero__title-container">
|
|
@@ -44,7 +46,6 @@
|
|
|
44
46
|
{% elif params.richText %}
|
|
45
47
|
<div class="ons-hero__richtext">{{ params.richText | safe }}</div>
|
|
46
48
|
{% endif %}
|
|
47
|
-
|
|
48
49
|
</div>
|
|
49
50
|
|
|
50
51
|
{% if params.variants == "grey" and params.officialStatisticsBadge == true %}
|
|
@@ -34,6 +34,42 @@ describe('macro: hero', () => {
|
|
|
34
34
|
expect($('.ons-hero--variant-b').length).toBe(1);
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
+
it('has the `ons-container--wide` class on the container when `wide` is true', () => {
|
|
38
|
+
const $ = cheerio.load(renderComponent('hero', { ...EXAMPLE_HERO, wide: true }));
|
|
39
|
+
|
|
40
|
+
expect($('.ons-hero__container').hasClass('ons-container--wide')).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('does not have the `ons-container--wide` class on the container when `wide` is false', () => {
|
|
44
|
+
const $ = cheerio.load(renderComponent('hero', { ...EXAMPLE_HERO, wide: false }));
|
|
45
|
+
|
|
46
|
+
expect($('.ons-hero__container').hasClass('ons-container--wide')).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('does not have the `ons-container--wide` class on the container when `wide` is not set', () => {
|
|
50
|
+
const $ = cheerio.load(renderComponent('hero', EXAMPLE_HERO));
|
|
51
|
+
|
|
52
|
+
expect($('.ons-hero__container').hasClass('ons-container--wide')).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('has the `ons-container--full-width` class on the container when `fullWidth` is true', () => {
|
|
56
|
+
const $ = cheerio.load(renderComponent('hero', { ...EXAMPLE_HERO, fullWidth: true }));
|
|
57
|
+
|
|
58
|
+
expect($('.ons-hero__container').hasClass('ons-container--full-width')).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('does not have the `ons-container--full-width` class on the container when `fullWidth` is false', () => {
|
|
62
|
+
const $ = cheerio.load(renderComponent('hero', { ...EXAMPLE_HERO, fullWidth: false }));
|
|
63
|
+
|
|
64
|
+
expect($('.ons-hero__container').hasClass('ons-container--full-width')).toBe(false);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('does not have the `ons-container--full-width` class on the container when `fullWidth` is not set', () => {
|
|
68
|
+
const $ = cheerio.load(renderComponent('hero', EXAMPLE_HERO));
|
|
69
|
+
|
|
70
|
+
expect($('.ons-hero__container').hasClass('ons-container--full-width')).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
|
|
37
73
|
it('has expected `title`', () => {
|
|
38
74
|
const $ = cheerio.load(renderComponent('hero', EXAMPLE_HERO));
|
|
39
75
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
'fullWidth': true
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
{% from "components/hero/_macro.njk" import onsHero %}
|
|
6
|
+
{{
|
|
7
|
+
onsHero({
|
|
8
|
+
"title": 'Design and build digital services for the ONS',
|
|
9
|
+
"text": 'Everything you need to make accessible, consistent digital products',
|
|
10
|
+
"button": {
|
|
11
|
+
"url": '#0',
|
|
12
|
+
"text": 'Get started'
|
|
13
|
+
},
|
|
14
|
+
"variants": 'dark',
|
|
15
|
+
"wide": true
|
|
16
|
+
})
|
|
17
|
+
}}
|
|
@@ -4,7 +4,6 @@ layout: ~
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
{% from "components/hero/_macro.njk" import onsHero %}
|
|
7
|
-
{% from "components/breadcrumbs/_macro.njk" import onsBreadcrumbs %}
|
|
8
7
|
{% extends "layout/_template.njk" %}
|
|
9
8
|
{%
|
|
10
9
|
set pageConfig = {
|
|
@@ -162,12 +161,8 @@ layout: ~
|
|
|
162
161
|
}
|
|
163
162
|
]
|
|
164
163
|
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
%}
|
|
168
|
-
{% block pageContent %}
|
|
169
|
-
{{
|
|
170
|
-
onsBreadcrumbs({
|
|
164
|
+
},
|
|
165
|
+
"breadcrumbs": {
|
|
171
166
|
"ariaLabel": 'Breadcrumbs',
|
|
172
167
|
"variant": "dark",
|
|
173
168
|
"itemsList": [
|
|
@@ -175,20 +170,21 @@ layout: ~
|
|
|
175
170
|
"url": '/',
|
|
176
171
|
"text": 'Home'
|
|
177
172
|
}
|
|
178
|
-
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
%}
|
|
177
|
+
|
|
178
|
+
{% block hero %}
|
|
179
|
+
{{
|
|
180
|
+
onsHero({
|
|
181
|
+
"title": 'Design and build digital services for the ONS',
|
|
182
|
+
"text": 'Everything you need to make accessible, consistent digital products',
|
|
183
|
+
"button": {
|
|
184
|
+
"url": '#0',
|
|
185
|
+
"text": 'Get started'
|
|
186
|
+
},
|
|
187
|
+
"variants": 'dark'
|
|
179
188
|
})
|
|
180
189
|
}}
|
|
181
|
-
<main id="main-content">
|
|
182
|
-
{{
|
|
183
|
-
onsHero({
|
|
184
|
-
"title": 'Design and build digital services for the ONS',
|
|
185
|
-
"text": 'Everything you need to make accessible, consistent digital products',
|
|
186
|
-
"button": {
|
|
187
|
-
"url": '#0',
|
|
188
|
-
"text": 'Get started'
|
|
189
|
-
},
|
|
190
|
-
"variants": 'dark'
|
|
191
|
-
})
|
|
192
|
-
}}
|
|
193
|
-
</main>
|
|
194
190
|
{% endblock %}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
'fullWidth': true
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
{% from "components/hero/_macro.njk" import onsHero %}
|
|
6
|
+
{{
|
|
7
|
+
onsHero({
|
|
8
|
+
"title": 'Design and build digital services for the ONS',
|
|
9
|
+
"text": 'Everything you need to make accessible, consistent digital products',
|
|
10
|
+
"button": {
|
|
11
|
+
"url": '#0',
|
|
12
|
+
"text": 'Get started'
|
|
13
|
+
},
|
|
14
|
+
"fullWidth": true
|
|
15
|
+
})
|
|
16
|
+
}}
|
|
@@ -4,170 +4,165 @@ layout: ~
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
{% from "components/hero/_macro.njk" import onsHero %}
|
|
7
|
-
{% from "components/breadcrumbs/_macro.njk" import onsBreadcrumbs %}
|
|
8
7
|
{% extends "layout/_template.njk" %}
|
|
9
8
|
{%
|
|
10
9
|
set pageConfig = {
|
|
11
10
|
"header": {
|
|
12
11
|
"variants": 'basic',
|
|
13
12
|
"menuLinks": {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
13
|
+
"id": "menu-links",
|
|
14
|
+
"keyLinks": [
|
|
15
|
+
{
|
|
16
|
+
'heading': 'Taking part in a survey?',
|
|
17
|
+
'description': 'It’s never been more important.'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
'heading': 'Release calendar',
|
|
21
|
+
'description': 'View our latest and upcoming releases.'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
'heading': 'Explore local statistics',
|
|
25
|
+
'url': '#0',
|
|
26
|
+
'description': 'Explore statistics across the UK.'
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"columns": [
|
|
30
|
+
{
|
|
31
|
+
"groups": [
|
|
32
|
+
{
|
|
33
|
+
"heading": "People, population and community",
|
|
34
|
+
"groupItems": [
|
|
35
|
+
{
|
|
36
|
+
"text": "Armed forces community"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"text": "Births, deaths and marriages"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"text": "Crime and justice"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"text": "Cultural identity"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"text": "Education and childcare"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"text": "Elections"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"text": "Health and social care"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"text": "Household characteristics"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"text": "Housing"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"text": "Leisure and tourism"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"text": "Personal and household finances"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"text": "Population and migration"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"text": "Well-being"
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"groups": [
|
|
80
|
+
{
|
|
81
|
+
"heading": "Business, industry and trade",
|
|
82
|
+
"groupItems": [
|
|
83
|
+
{
|
|
84
|
+
"text": "Business"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"text": "Changes to business"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"text": "Construction industry"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"text": "International trade"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"text": "IT and internet industry"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"text": "Manufacturing and production industry"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"text": "Retail industry",
|
|
103
|
+
"url": "#0"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"text": "Tourism industry"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"heading": "Employment and labour market",
|
|
112
|
+
"url": "#0",
|
|
113
|
+
"groupItems":
|
|
114
|
+
[
|
|
115
|
+
{
|
|
116
|
+
"text": "People in work"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"text": "People not in work"
|
|
120
|
+
}
|
|
121
|
+
]
|
|
123
122
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
%}
|
|
168
|
-
{% block pageContent %}
|
|
169
|
-
{{
|
|
170
|
-
onsBreadcrumbs({
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"groups": [
|
|
128
|
+
{
|
|
129
|
+
"heading": "Economy",
|
|
130
|
+
"groupItems": [
|
|
131
|
+
{
|
|
132
|
+
"text": "Economic output and productivity"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"text": "Government, public sector and taxes"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"text": "Gross Value Added (GVA)"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"text": "Investments, pensions and trusts"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"text": "Regional accounts"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"text": "Environmental accounts"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"text": "Gross Domestic Product (GDP)"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"text": "Inflation and price indices"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"text": "National accounts"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
breadcrumbs: {
|
|
171
166
|
"ariaLabel": 'Breadcrumbs',
|
|
172
167
|
"variant": "pale-blue",
|
|
173
168
|
"itemsList": [
|
|
@@ -184,18 +179,19 @@ layout: ~
|
|
|
184
179
|
"text": 'Retail industry'
|
|
185
180
|
}
|
|
186
181
|
]
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
%}
|
|
185
|
+
|
|
186
|
+
{% block hero %}
|
|
187
|
+
{{
|
|
188
|
+
onsHero({
|
|
189
|
+
"title": 'Design and build digital services for the ONS',
|
|
190
|
+
"text": 'Everything you need to make accessible, consistent digital products',
|
|
191
|
+
"button": {
|
|
192
|
+
"url": '#0',
|
|
193
|
+
"text": 'Get started'
|
|
194
|
+
}
|
|
187
195
|
})
|
|
188
196
|
}}
|
|
189
|
-
<main id="main-content">
|
|
190
|
-
{{
|
|
191
|
-
onsHero({
|
|
192
|
-
"title": 'Design and build digital services for the ONS',
|
|
193
|
-
"text": 'Everything you need to make accessible, consistent digital products',
|
|
194
|
-
"button": {
|
|
195
|
-
"url": '#0',
|
|
196
|
-
"text": 'Get started'
|
|
197
|
-
}
|
|
198
|
-
})
|
|
199
|
-
}}
|
|
200
|
-
</main>
|
|
201
197
|
{% endblock %}
|