@ons/design-system 70.0.7 → 70.0.9
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 +11 -17
- package/components/access-code/_macro.njk +31 -25
- package/components/access-code/_macro.spec.js +145 -145
- package/components/access-code/access-code.dom.js +5 -5
- package/components/access-code/access-code.js +16 -16
- package/components/access-code/access-code.scss +22 -22
- package/components/access-code/access-code.spec.js +17 -17
- package/components/access-code/example-access-code-error.njk +49 -37
- package/components/access-code/example-access-code.njk +40 -30
- package/components/accordion/_macro.njk +7 -6
- package/components/accordion/_macro.spec.js +154 -154
- package/components/accordion/accordion.dom.js +10 -10
- package/components/accordion/accordion.js +50 -50
- package/components/accordion/accordion.spec.js +104 -104
- package/components/accordion/example-accordion-open.njk +0 -1
- package/components/address-input/_macro.njk +23 -11
- package/components/address-input/_macro.spec.js +420 -420
- package/components/address-input/autosuggest.address.dom.js +5 -5
- package/components/address-input/autosuggest.address.error.js +77 -77
- package/components/address-input/autosuggest.address.js +354 -359
- package/components/address-input/autosuggest.address.setter.js +95 -95
- package/components/address-input/autosuggest.address.spec.js +668 -651
- package/components/address-input/example-address-input-editable.njk +52 -50
- package/components/address-input/example-address-input-manual.njk +23 -21
- package/components/address-input/example-address-input.njk +40 -38
- package/components/address-output/_address-output.scss +3 -3
- package/components/address-output/_macro.njk +6 -6
- package/components/address-output/_macro.spec.js +84 -84
- package/components/autosuggest/_autosuggest.scss +114 -114
- package/components/autosuggest/_macro.njk +57 -37
- package/components/autosuggest/_macro.spec.js +255 -255
- package/components/autosuggest/autosuggest.dom.js +5 -5
- package/components/autosuggest/autosuggest.helpers.js +11 -11
- package/components/autosuggest/autosuggest.helpers.spec.js +73 -73
- package/components/autosuggest/autosuggest.js +20 -20
- package/components/autosuggest/autosuggest.spec.js +542 -536
- package/components/autosuggest/autosuggest.ui.js +478 -475
- package/components/autosuggest/example-autosuggest-country-multiple.njk +26 -26
- package/components/autosuggest/example-autosuggest-country.njk +24 -24
- package/components/autosuggest/fuse-config.js +17 -17
- package/components/back-to-top/_back-to-top.scss +27 -27
- package/components/back-to-top/_macro.spec.js +49 -49
- package/components/back-to-top/back-to-top.dom.js +5 -5
- package/components/back-to-top/back-to-top.js +52 -52
- package/components/back-to-top/back-to-top.spec.js +106 -106
- package/components/back-to-top/example-back-to-top.njk +183 -6
- package/components/back-to-top/example-full-page-back-to-top.njk +135 -123
- package/components/breadcrumbs/_breadcrumbs.scss +63 -65
- package/components/breadcrumbs/_macro.njk +12 -4
- package/components/breadcrumbs/_macro.spec.js +91 -91
- package/components/browser-banner/_browser-banner.scss +23 -23
- package/components/browser-banner/_macro.njk +6 -3
- package/components/browser-banner/_macro.spec.js +92 -92
- package/components/button/_button.scss +525 -491
- package/components/button/_macro.njk +63 -62
- package/components/button/_macro.spec.js +363 -363
- package/components/button/button.dom.js +15 -15
- package/components/button/button.js +53 -53
- package/components/button/button.spec.js +248 -240
- package/components/button/example-button-ghost.njk +1 -0
- package/components/call-to-action/_call-to-action.scss +5 -5
- package/components/call-to-action/_macro.njk +7 -5
- package/components/call-to-action/_macro.spec.js +28 -28
- package/components/call-to-action/example-call-to-action-default.njk +3 -2
- package/components/card/_card.scss +23 -23
- package/components/card/_macro.njk +26 -10
- package/components/card/_macro.spec.js +180 -180
- package/components/card/example-card-set-with-images.njk +31 -29
- package/components/card/example-card-set-with-lists.njk +58 -56
- package/components/card/example-card-set.njk +28 -26
- package/components/card/example-card.njk +9 -7
- package/components/char-check-limit/_macro.njk +1 -3
- package/components/char-check-limit/_macro.spec.js +48 -48
- package/components/char-check-limit/character-check.js +58 -58
- package/components/char-check-limit/character-check.spec.js +173 -173
- package/components/char-check-limit/character-limit.js +40 -40
- package/components/checkboxes/_checkbox-macro.njk +19 -15
- package/components/checkboxes/_checkbox-macro.spec.js +355 -355
- package/components/checkboxes/_checkbox.scss +180 -180
- package/components/checkboxes/_checkboxes.scss +37 -27
- package/components/checkboxes/_macro.njk +81 -72
- package/components/checkboxes/_macro.spec.js +261 -261
- package/components/checkboxes/checkbox-with-autoselect.js +32 -32
- package/components/checkboxes/checkbox-with-fieldset.js +21 -21
- package/components/checkboxes/checkboxes-with-reveal.js +10 -10
- package/components/checkboxes/checkboxes.dom.js +27 -27
- package/components/checkboxes/checkboxes.spec.js +183 -183
- package/components/checkboxes/example-checkboxes-disabled.njk +30 -30
- package/components/checkboxes/example-checkboxes-error.njk +0 -1
- package/components/checkboxes/example-checkboxes-with-descriptions.njk +7 -5
- package/components/checkboxes/example-checkboxes-with-hidden-label.njk +162 -170
- package/components/checkboxes/example-checkboxes-with-revealed-checkboxes-expanded.njk +81 -81
- package/components/checkboxes/example-checkboxes-with-revealed-checkboxes.njk +79 -79
- package/components/checkboxes/example-checkboxes-with-revealed-select-expanded.njk +7 -5
- package/components/checkboxes/example-checkboxes-with-revealed-select.njk +7 -5
- package/components/checkboxes/example-checkboxes-with-revealed-text-input-expanded.njk +7 -5
- package/components/checkboxes/example-checkboxes-with-revealed-text-input.njk +7 -5
- package/components/checkboxes/example-checkboxes-with-select-all-button.njk +7 -5
- package/components/checkboxes/example-checkboxes-with-visible-text-input.njk +7 -5
- package/components/checkboxes/example-checkboxes.njk +7 -5
- package/components/content-pagination/_content-pagination.scss +41 -41
- package/components/content-pagination/_macro.njk +34 -32
- package/components/content-pagination/_macro.spec.js +159 -159
- package/components/content-pagination/example-content-pagination.njk +17 -17
- package/components/cookies-banner/_cookies-banner.scss +22 -22
- package/components/cookies-banner/_macro.njk +19 -6
- package/components/cookies-banner/_macro.spec.js +177 -177
- package/components/cookies-banner/cookies-banner.dom.js +7 -7
- package/components/cookies-banner/cookies-banner.js +76 -76
- package/components/cookies-banner/cookies-banner.spec.js +72 -68
- package/components/cookies-banner/example-cookies-banner-cymraeg.njk +2 -1
- package/components/cookies-banner/example-cookies-banner.njk +3 -4
- package/components/date-input/_macro.njk +71 -63
- package/components/date-input/_macro.spec.js +338 -338
- package/components/date-input/example-date-input-error-for-single-field.njk +0 -1
- package/components/date-input/example-date-input-error.njk +0 -1
- package/components/description-list/_description-list.scss +23 -23
- package/components/description-list/_macro.njk +20 -11
- package/components/description-list/_macro.spec.js +144 -144
- package/components/details/_details.scss +109 -109
- package/components/details/_macro.njk +18 -11
- package/components/details/_macro.spec.js +132 -132
- package/components/details/details.dom.js +6 -6
- package/components/details/details.js +60 -60
- package/components/details/details.spec.js +106 -106
- package/components/details/example-details-with-warning.njk +15 -10
- package/components/document-list/_macro.njk +102 -93
- package/components/document-list/_macro.spec.js +444 -444
- package/components/document-list/document-list.scss +145 -149
- package/components/document-list/example-document-list-article-featured.njk +27 -25
- package/components/document-list/example-document-list-articles.njk +55 -53
- package/components/document-list/example-document-list-downloads.njk +49 -47
- package/components/document-list/example-document-list-search-result-featured.njk +19 -17
- package/components/document-list/example-document-list-search-results.njk +60 -58
- package/components/download-resources/_download-resources.scss +109 -108
- package/components/download-resources/download-resources.js +907 -900
- package/components/download-resources/download-resources.spec.js +461 -461
- package/components/duration/_macro.njk +61 -55
- package/components/duration/_macro.spec.js +291 -291
- package/components/duration/example-duration-error-for-single-field.njk +28 -26
- package/components/duration/example-duration-single-field.njk +23 -19
- package/components/duration/example-duration.njk +33 -29
- package/components/error/_macro.njk +8 -6
- package/components/error/_macro.spec.js +72 -72
- package/components/external-link/_external-link.scss +19 -19
- package/components/external-link/_macro.njk +7 -5
- package/components/external-link/_macro.spec.js +68 -68
- package/components/external-link/example-external-link.njk +9 -6
- package/components/feedback/_feedback.scss +31 -31
- package/components/feedback/_macro.njk +7 -5
- package/components/feedback/_macro.spec.js +72 -72
- package/components/field/_field-group.scss +10 -10
- package/components/field/_field.scss +16 -16
- package/components/field/_macro.njk +2 -2
- package/components/field/_macro.spec.js +80 -80
- package/components/fieldset/_fieldset.scss +27 -27
- package/components/fieldset/_macro.njk +23 -16
- package/components/fieldset/_macro.spec.js +161 -161
- package/components/footer/_footer.scss +45 -45
- package/components/footer/_macro.njk +28 -21
- package/components/footer/_macro.spec.js +452 -452
- package/components/footer/example-footer-cymraeg.njk +2 -1
- package/components/footer/example-footer-default.njk +3 -4
- package/components/footer/example-footer-transactional.njk +2 -1
- package/components/footer/example-footer-warning.njk +2 -1
- package/components/footer/example-footer-with-alternative-organisation.njk +2 -1
- package/components/footer/example-footer-with-coat-of-arms.njk +2 -1
- package/components/footer/example-footer-with-copyright.njk +2 -1
- package/components/footer/example-footer.njk +2 -1
- package/components/header/_header.scss +207 -202
- package/components/header/_macro.njk +183 -141
- package/components/header/_macro.spec.js +833 -829
- package/components/header/example-header-default.njk +2 -1
- package/components/header/example-header-external-for-survey-with-description.njk +2 -1
- package/components/header/example-header-external-for-surveys.njk +2 -1
- package/components/header/example-header-external-welsh.njk +7 -7
- package/components/header/example-header-external-with-navigation-and-search.njk +3 -2
- package/components/header/example-header-external-with-navigation.njk +2 -1
- package/components/header/example-header-external-with-service-links.njk +2 -1
- package/components/header/example-header-external-with-sub-navigation-removed.njk +2 -1
- package/components/header/example-header-external-with-sub-navigation.njk +3 -2
- package/components/header/example-header-internal.njk +2 -1
- package/components/header/example-header-multiple-logos.njk +2 -1
- package/components/header/{example-header-neutral-for-multicoloured-logo.njk → example-header-neutral.njk} +2 -1
- package/components/helpers/_grid.scss +4 -4
- package/components/helpers/grid.njk +17 -16
- package/components/hero/_hero.scss +48 -48
- package/components/hero/_macro.njk +6 -11
- package/components/hero/_macro.spec.js +59 -59
- package/components/hero/example-hero-dark.njk +2 -1
- package/components/hero/example-hero-default.njk +2 -1
- package/components/icon/_icon.scss +44 -44
- package/components/icon/_macro.njk +601 -168
- package/components/icon/_macro.spec.js +110 -110
- package/components/image/_image.scss +11 -11
- package/components/image/_macro.njk +7 -5
- package/components/image/_macro.spec.js +81 -81
- package/components/input/_input-type.scss +86 -89
- package/components/input/_input.scss +123 -124
- package/components/input/_macro.njk +114 -95
- package/components/input/_macro.spec.js +604 -604
- package/components/input/character-check.dom.js +5 -5
- package/components/input/example-input-search-with-character-check.njk +1 -1
- package/components/input/example-input-search-with-placeholder.njk +1 -1
- package/components/input/example-input-search.njk +1 -1
- package/components/input/input.dom.js +5 -5
- package/components/input/input.js +10 -10
- package/components/input/input.spec.js +18 -18
- package/components/label/_label.scss +24 -24
- package/components/label/_macro.njk +32 -26
- package/components/label/_macro.spec.js +173 -170
- package/components/language-selector/_macro.njk +11 -2
- package/components/language-selector/_macro.spec.js +97 -97
- package/components/language-selector/language.scss +7 -7
- package/components/list/_list.scss +110 -97
- package/components/list/_macro.njk +93 -73
- package/components/list/_macro.spec.js +583 -583
- package/components/message/_macro.njk +20 -7
- package/components/message/_macro.spec.js +74 -74
- package/components/message/_message.scss +39 -39
- package/components/message-list/_macro.njk +26 -20
- package/components/message-list/_macro.spec.js +86 -86
- package/components/message-list/_message-list.scss +16 -16
- package/components/modal/_macro.njk +11 -12
- package/components/modal/_macro.spec.js +69 -69
- package/components/modal/_modal.scss +36 -36
- package/components/modal/modal.dom.js +6 -6
- package/components/modal/modal.js +89 -89
- package/components/modal/modal.spec.js +50 -50
- package/components/multiple-input-fields/_macro.njk +30 -28
- package/components/mutually-exclusive/_macro.njk +20 -13
- package/components/mutually-exclusive/_macro.spec.js +140 -140
- package/components/mutually-exclusive/example-mutually-exclusive-checkboxes.njk +6 -4
- package/components/mutually-exclusive/example-mutually-exclusive-date.njk +7 -5
- package/components/mutually-exclusive/example-mutually-exclusive-duration.njk +44 -40
- package/components/mutually-exclusive/example-mutually-exclusive-email.njk +7 -5
- package/components/mutually-exclusive/example-mutually-exclusive-multiple-options.njk +6 -4
- package/components/mutually-exclusive/example-mutually-exclusive-number.njk +6 -4
- package/components/mutually-exclusive/example-mutually-exclusive-textarea.njk +6 -4
- package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
- package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
- package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
- package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
- package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
- package/components/mutually-exclusive/mutually-exclusive.js +137 -137
- package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
- package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
- package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
- package/components/navigation/_macro.njk +133 -67
- package/components/navigation/_macro.spec.js +360 -354
- package/components/navigation/_navigation.scss +112 -122
- package/components/navigation/navigation.dom.js +35 -35
- package/components/navigation/navigation.js +49 -49
- package/components/navigation/navigation.spec.js +249 -249
- package/components/pagination/_macro.njk +42 -20
- package/components/pagination/_macro.spec.js +342 -335
- package/components/pagination/_pagination.scss +58 -58
- package/components/panel/_macro.njk +27 -16
- package/components/panel/_macro.spec.js +372 -372
- package/components/panel/_panel.scss +200 -199
- package/components/panel/example-panel-bare.njk +6 -4
- package/components/panel/example-panel-with-announcement.njk +7 -4
- package/components/panel/example-panel-with-error-summary.njk +6 -4
- package/components/panel/example-panel-with-warning.njk +5 -3
- package/components/password/_macro.njk +7 -5
- package/components/password/_macro.spec.js +95 -95
- package/components/password/password.dom.js +5 -5
- package/components/password/password.js +10 -10
- package/components/password/password.spec.js +26 -26
- package/components/phase-banner/_macro.njk +3 -3
- package/components/phase-banner/_macro.spec.js +86 -86
- package/components/phase-banner/_phase-banner.scss +16 -16
- package/components/phase-banner/example-phase-banner-alpha.njk +2 -1
- package/components/phase-banner/example-phase-banner-beta.njk +4 -3
- package/components/question/_macro.njk +62 -47
- package/components/question/_macro.spec.js +235 -235
- package/components/question/_question.scss +24 -24
- package/components/question/example-question-ccs.njk +40 -35
- package/components/question/example-question-fieldset.njk +84 -80
- package/components/question/example-question-interviewer-note.njk +27 -24
- package/components/question/example-question-no-fieldset.njk +39 -33
- package/components/quote/_macro.njk +3 -1
- package/components/quote/_macro.spec.js +52 -52
- package/components/quote/_quote.scss +24 -24
- package/components/radios/_macro.njk +54 -36
- package/components/radios/_macro.spec.js +545 -524
- package/components/radios/_radio.scss +49 -48
- package/components/radios/_radios.scss +14 -20
- package/components/radios/check-radios.js +21 -21
- package/components/radios/clear-radios.js +45 -45
- package/components/radios/example-radios-with-clear-button-expanded.njk +6 -4
- package/components/radios/example-radios-with-clear-button.njk +6 -4
- package/components/radios/example-radios-with-descriptions.njk +7 -5
- package/components/radios/example-radios-with-revealed-select-expanded.njk +6 -4
- package/components/radios/example-radios-with-revealed-select.njk +6 -4
- package/components/radios/example-radios-with-revealed-text-area-expanded.njk +7 -5
- package/components/radios/example-radios-with-revealed-text-area.njk +7 -5
- package/components/radios/example-radios-with-revealed-text-input-expanded.njk +7 -5
- package/components/radios/example-radios-with-revealed-text-input.njk +7 -5
- package/components/radios/example-radios-with-separator.njk +6 -4
- package/components/radios/example-radios-with-visible-text-input.njk +7 -5
- package/components/radios/example-radios-without-border.njk +0 -1
- package/components/radios/example-radios.njk +7 -5
- package/components/radios/radio-with-fieldset.js +22 -22
- package/components/radios/radios.dom.js +32 -32
- package/components/radios/radios.spec.js +251 -251
- package/components/related-content/_macro.njk +10 -11
- package/components/related-content/_macro.spec.js +109 -109
- package/components/related-content/_related-content.scss +12 -12
- package/components/related-content/_section-macro.njk +7 -7
- package/components/related-content/_section-macro.spec.js +20 -20
- package/components/related-content/example-related-content-general.njk +5 -3
- package/components/related-content/example-related-content-multiple-rows-of-links.njk +51 -49
- package/components/related-content/example-related-content-social-media.njk +40 -38
- package/components/relationships/_macro.njk +10 -8
- package/components/relationships/_macro.spec.js +94 -94
- package/components/relationships/_relationships.scss +9 -9
- package/components/relationships/example-relationships-error.njk +176 -168
- package/components/relationships/example-relationships-you.njk +169 -163
- package/components/relationships/example-relationships.njk +167 -161
- package/components/relationships/relationships.dom.js +5 -5
- package/components/relationships/relationships.js +18 -18
- package/components/relationships/relationships.spec.js +71 -71
- package/components/reply/_macro.spec.js +47 -47
- package/components/reply/reply-input.js +15 -15
- package/components/reply/reply.dom.js +5 -5
- package/components/reply/reply.spec.js +57 -57
- package/components/section-navigation/_macro.njk +34 -12
- package/components/section-navigation/_macro.spec.js +210 -210
- package/components/section-navigation/_section-navigation.scss +76 -76
- package/components/select/_macro.njk +21 -18
- package/components/select/_macro.spec.js +166 -166
- package/components/share-page/_macro.njk +10 -5
- package/components/share-page/_macro.spec.js +68 -68
- package/components/skip-to-content/_macro.njk +1 -1
- package/components/skip-to-content/_macro.spec.js +54 -54
- package/components/skip-to-content/_skip.scss +30 -30
- package/components/skip-to-content/example-skip-to-content.njk +1 -0
- package/components/skip-to-content/skip-to-content.dom.js +6 -6
- package/components/skip-to-content/skip-to-content.js +7 -7
- package/components/skip-to-content/skip-to-content.spec.js +21 -21
- package/components/status/_macro.njk +1 -1
- package/components/status/_macro.spec.js +53 -53
- package/components/status/_status.scss +32 -32
- package/components/summary/_macro.njk +53 -23
- package/components/summary/_macro.spec.js +551 -535
- package/components/summary/_summary.scss +191 -195
- package/components/summary/example-summary-household-no-rows.njk +18 -16
- package/components/summary/example-summary-household.njk +75 -73
- package/components/summary/example-summary-hub-minimal.njk +74 -72
- package/components/summary/example-summary-hub.njk +169 -167
- package/components/table/_macro.njk +72 -45
- package/components/table/_macro.spec.js +499 -499
- package/components/table/_table.scss +204 -201
- package/components/table/scrollable-table.dom.js +5 -5
- package/components/table/scrollable-table.js +60 -60
- package/components/table/sortable-table.dom.js +5 -5
- package/components/table/sortable-table.js +135 -135
- package/components/table/table.spec.js +144 -140
- package/components/table-of-contents/_macro.njk +34 -32
- package/components/table-of-contents/_macro.spec.js +125 -125
- package/components/table-of-contents/_toc.scss +9 -9
- package/components/table-of-contents/example-table-of-contents-grouped.njk +1 -1
- package/components/table-of-contents/example-table-of-contents-single.njk +1 -1
- package/components/table-of-contents/example-table-of-contents-sticky-full-page.njk +79 -38
- package/components/table-of-contents/example-table-of-contents-sticky.njk +50 -13
- package/components/table-of-contents/toc.dom.js +5 -5
- package/components/table-of-contents/toc.js +30 -30
- package/components/table-of-contents/toc.spec.js +88 -88
- package/components/tabs/_macro.njk +12 -6
- package/components/tabs/_macro.spec.js +92 -92
- package/components/tabs/_tabs.scss +120 -115
- package/components/tabs/example-tabs-details.njk +5 -6
- package/components/tabs/tabs.dom.js +5 -5
- package/components/tabs/tabs.js +266 -266
- package/components/tabs/tabs.spec.js +268 -268
- package/components/text-indent/_macro.njk +1 -3
- package/components/text-indent/_macro.spec.js +33 -33
- package/components/text-indent/_text-indent.scss +3 -3
- package/components/textarea/_macro.njk +49 -46
- package/components/textarea/_macro.spec.js +227 -238
- package/components/textarea/textarea.dom.js +5 -5
- package/components/textarea/textarea.spec.js +78 -74
- package/components/timeline/_macro.njk +4 -6
- package/components/timeline/_macro.spec.js +83 -83
- package/components/timeline/_timeline.scss +26 -26
- package/components/timeout-modal/_macro.njk +21 -19
- package/components/timeout-modal/_macro.spec.js +47 -47
- package/components/timeout-modal/example-timeout-modal.njk +16 -14
- package/components/timeout-modal/timeout-modal.dom.js +9 -9
- package/components/timeout-modal/timeout-modal.js +66 -66
- package/components/timeout-modal/timeout-modal.spec.js +157 -157
- package/components/timeout-panel/_macro.njk +19 -17
- package/components/timeout-panel/_macro.spec.js +41 -41
- package/components/timeout-panel/example-panel-with-timeout-warning.njk +13 -11
- package/components/timeout-panel/timeout-panel.dom.js +8 -8
- package/components/timeout-panel/timeout-panel.spec.js +118 -118
- package/components/upload/_macro.njk +20 -16
- package/components/upload/_macro.spec.js +52 -52
- package/components/upload/_upload.scss +28 -28
- package/components/video/_macro.njk +16 -2
- package/components/video/_macro.spec.js +42 -42
- package/components/video/_video.scss +16 -16
- package/components/video/example-video.njk +2 -2
- package/components/video/video.dom.js +5 -5
- package/components/video/video.js +32 -32
- package/components/video/video.spec.js +103 -97
- package/css/main.css +1 -1
- package/favicons/manifest.json +25 -25
- package/js/abortable-fetch.js +23 -23
- package/js/analytics.js +53 -53
- package/js/cookies-functions.js +135 -135
- package/js/cookies-settings.dom.js +7 -7
- package/js/cookies-settings.js +77 -77
- package/js/cookies-settings.spec.js +106 -106
- package/js/domready.js +8 -8
- package/js/fetch.js +14 -14
- package/js/inpagelink.dom.js +5 -5
- package/js/inpagelink.js +19 -19
- package/js/polyfills.js +0 -1
- package/js/print-button.js +6 -6
- package/js/timeout.js +211 -211
- package/layout/_dsTemplate.njk +22 -20
- package/layout/_template.njk +63 -51
- package/package.json +132 -128
- package/scripts/main.es5.js +1 -1
- package/scripts/main.js +1 -1
- package/scss/base/_forms.scss +10 -10
- package/scss/base/_global.scss +45 -44
- package/scss/base/_typography.scss +20 -20
- package/scss/helpers/_functions.scss +18 -15
- package/scss/helpers/_mixins.scss +59 -53
- package/scss/helpers/_mq.scss +62 -65
- package/scss/objects/_container.scss +20 -20
- package/scss/objects/_page.scss +33 -33
- package/scss/objects/_spacing.scss +10 -10
- package/scss/overrides/hcm.scss +237 -237
- package/scss/overrides/rtl.scss +95 -95
- package/scss/print.scss +47 -47
- package/scss/utilities/_border.scss +7 -7
- package/scss/utilities/_colors.scss +6 -6
- package/scss/utilities/_display.scss +8 -8
- package/scss/utilities/_float.scss +7 -7
- package/scss/utilities/_grid.scss +144 -144
- package/scss/utilities/_highlight.scss +4 -4
- package/scss/utilities/_margin.scss +17 -17
- package/scss/utilities/_pad.scss +15 -15
- package/scss/utilities/_typography.scss +35 -33
- package/scss/utilities/_utilities.scss +8 -8
- package/scss/utilities/_visibility.scss +25 -25
- package/scss/vars/_colors.scss +116 -116
- package/scss/vars/_forms.scss +22 -22
- package/scss/vars/_grid.scss +11 -9
- package/scss/vars/_typography.scss +54 -54
|
@@ -7,566 +7,566 @@ import { mapAll } from '../../tests/helpers/cheerio';
|
|
|
7
7
|
import { renderComponent, templateFaker } from '../../tests/helpers/rendering';
|
|
8
8
|
|
|
9
9
|
const EXAMPLE_OGL_LINK_PARAM = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
pre: 'All content is available under the',
|
|
11
|
+
link: 'Open Government Licence v3.0',
|
|
12
|
+
url: 'https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/',
|
|
13
|
+
post: ', except where otherwise stated',
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
const EXAMPLE_COLS_PARAM = [
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
{
|
|
18
|
+
title: 'First column',
|
|
19
|
+
itemsList: [
|
|
20
|
+
{
|
|
21
|
+
url: '/example-link-a',
|
|
22
|
+
text: 'Example Link A',
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: 'Second column',
|
|
28
|
+
itemsList: [
|
|
29
|
+
{
|
|
30
|
+
url: '/example-link-b',
|
|
31
|
+
text: 'Example Link B',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
35
|
];
|
|
36
36
|
|
|
37
37
|
const EXAMPLE_ROWS_PARAM = [
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
{
|
|
39
|
+
itemsList: [
|
|
40
|
+
{
|
|
41
|
+
url: '/example-link-a',
|
|
42
|
+
text: 'Example Link A',
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
itemsList: [
|
|
48
|
+
{
|
|
49
|
+
url: '/example-link-b',
|
|
50
|
+
text: 'Example Link B',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
54
|
];
|
|
55
55
|
|
|
56
56
|
const EXAMPLE_LEGAL_PARAM = [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
57
|
+
{
|
|
58
|
+
itemsList: [
|
|
59
|
+
{
|
|
60
|
+
url: '/example-legal-link-a',
|
|
61
|
+
text: 'Example Legal Link A',
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
itemsList: [
|
|
67
|
+
{
|
|
68
|
+
url: '/example-legal-link-b',
|
|
69
|
+
text: 'Example Legal Link B',
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
73
|
];
|
|
74
74
|
|
|
75
75
|
describe('macro: footer', () => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const hasClass = $('.ons-container').hasClass('ons-container--wide');
|
|
84
|
-
expect(hasClass).toBe(true);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('does not decorate container block with `wide` modifier when the `wide` parameter is not provided', () => {
|
|
88
|
-
const $ = cheerio.load(renderComponent('footer', {}));
|
|
89
|
-
|
|
90
|
-
const hasClass = $('.ons-container').hasClass('ons-container--wide');
|
|
91
|
-
expect(hasClass).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('decorates container block with `fullWidth` modifier when the `fullWidth` parameter is provided', () => {
|
|
95
|
-
const $ = cheerio.load(
|
|
96
|
-
renderComponent('footer', {
|
|
97
|
-
fullWidth: true,
|
|
98
|
-
}),
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
const hasClass = $('.ons-container').hasClass('ons-container--full-width');
|
|
102
|
-
expect(hasClass).toBe(true);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('does not decorate container block with `fullWidth` modifier when the `fullWidth` parameter is not provided', () => {
|
|
106
|
-
const $ = cheerio.load(renderComponent('footer', {}));
|
|
107
|
-
|
|
108
|
-
const hasClass = $('.ons-container').hasClass('ons-container--full-width');
|
|
109
|
-
expect(hasClass).toBe(false);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('has additionally provided `attributes` on the `body` element', () => {
|
|
113
|
-
const $ = cheerio.load(
|
|
114
|
-
renderComponent('footer', {
|
|
115
|
-
attributes: {
|
|
116
|
-
a: '123',
|
|
117
|
-
b: '456',
|
|
118
|
-
},
|
|
119
|
-
}),
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
expect($('.ons-footer__body').attr('a')).toBe('123');
|
|
123
|
-
expect($('.ons-footer__body').attr('b')).toBe('456');
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
describe('OGL link', () => {
|
|
127
|
-
const params = {
|
|
128
|
-
OGLLink: EXAMPLE_OGL_LINK_PARAM,
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
it('passes jest-axe checks', async () => {
|
|
132
|
-
const $ = cheerio.load(renderComponent('footer', params));
|
|
133
|
-
|
|
134
|
-
const results = await axe($.html());
|
|
135
|
-
expect(results).toHaveNoViolations();
|
|
136
|
-
});
|
|
76
|
+
it('decorates container block with `wide` modifier when the `wide` parameter is provided', () => {
|
|
77
|
+
const $ = cheerio.load(
|
|
78
|
+
renderComponent('footer', {
|
|
79
|
+
wide: true,
|
|
80
|
+
}),
|
|
81
|
+
);
|
|
137
82
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const iconsSpy = faker.spy('icon');
|
|
141
|
-
|
|
142
|
-
faker.renderComponent('footer', params);
|
|
143
|
-
|
|
144
|
-
expect(iconsSpy.occurrences).toContainEqual(expect.objectContaining({ iconType: 'ogl' }));
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it('renders raw HTML when `HTML` is provided', () => {
|
|
148
|
-
const $ = cheerio.load(
|
|
149
|
-
renderComponent('footer', {
|
|
150
|
-
OGLLink: {
|
|
151
|
-
...params.OGLLink,
|
|
152
|
-
HTML: '<strong>Bold text.</strong>',
|
|
153
|
-
},
|
|
154
|
-
}),
|
|
155
|
-
);
|
|
156
|
-
|
|
157
|
-
const licenseHtml = $('.ons-footer__license').html();
|
|
158
|
-
expect(licenseHtml).toContain('<strong>Bold text.</strong>');
|
|
83
|
+
const hasClass = $('.ons-container').hasClass('ons-container--wide');
|
|
84
|
+
expect(hasClass).toBe(true);
|
|
159
85
|
});
|
|
160
86
|
|
|
161
|
-
it('
|
|
162
|
-
|
|
163
|
-
const externalLinkSpy = faker.spy('external-link');
|
|
87
|
+
it('does not decorate container block with `wide` modifier when the `wide` parameter is not provided', () => {
|
|
88
|
+
const $ = cheerio.load(renderComponent('footer', {}));
|
|
164
89
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
expect(externalLinkSpy.occurrences).toContainEqual(
|
|
168
|
-
expect.objectContaining({
|
|
169
|
-
url: 'https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/',
|
|
170
|
-
linkText: 'Open Government Licence v3.0',
|
|
171
|
-
}),
|
|
172
|
-
);
|
|
90
|
+
const hasClass = $('.ons-container').hasClass('ons-container--wide');
|
|
91
|
+
expect(hasClass).toBe(false);
|
|
173
92
|
});
|
|
174
93
|
|
|
175
|
-
it('
|
|
176
|
-
|
|
94
|
+
it('decorates container block with `fullWidth` modifier when the `fullWidth` parameter is provided', () => {
|
|
95
|
+
const $ = cheerio.load(
|
|
96
|
+
renderComponent('footer', {
|
|
97
|
+
fullWidth: true,
|
|
98
|
+
}),
|
|
99
|
+
);
|
|
177
100
|
|
|
178
|
-
|
|
179
|
-
|
|
101
|
+
const hasClass = $('.ons-container').hasClass('ons-container--full-width');
|
|
102
|
+
expect(hasClass).toBe(true);
|
|
180
103
|
});
|
|
181
104
|
|
|
182
|
-
it('
|
|
183
|
-
|
|
184
|
-
renderComponent('footer', {
|
|
185
|
-
lang: 'cy',
|
|
186
|
-
OGLLink: true,
|
|
187
|
-
}),
|
|
188
|
-
);
|
|
105
|
+
it('does not decorate container block with `fullWidth` modifier when the `fullWidth` parameter is not provided', () => {
|
|
106
|
+
const $ = cheerio.load(renderComponent('footer', {}));
|
|
189
107
|
|
|
190
|
-
|
|
191
|
-
|
|
108
|
+
const hasClass = $('.ons-container').hasClass('ons-container--full-width');
|
|
109
|
+
expect(hasClass).toBe(false);
|
|
192
110
|
});
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
describe('warning', () => {
|
|
196
|
-
const params = {
|
|
197
|
-
footerWarning: 'Footer warning text with <strong>bold</strong> content.',
|
|
198
|
-
};
|
|
199
111
|
|
|
200
|
-
it('
|
|
201
|
-
|
|
112
|
+
it('has additionally provided `attributes` on the `body` element', () => {
|
|
113
|
+
const $ = cheerio.load(
|
|
114
|
+
renderComponent('footer', {
|
|
115
|
+
attributes: {
|
|
116
|
+
a: '123',
|
|
117
|
+
b: '456',
|
|
118
|
+
},
|
|
119
|
+
}),
|
|
120
|
+
);
|
|
202
121
|
|
|
203
|
-
|
|
204
|
-
|
|
122
|
+
expect($('.ons-footer__body').attr('a')).toBe('123');
|
|
123
|
+
expect($('.ons-footer__body').attr('b')).toBe('456');
|
|
205
124
|
});
|
|
206
125
|
|
|
207
|
-
|
|
208
|
-
|
|
126
|
+
describe('OGL link', () => {
|
|
127
|
+
const params = {
|
|
128
|
+
OGLLink: EXAMPLE_OGL_LINK_PARAM,
|
|
129
|
+
};
|
|
209
130
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
131
|
+
it('passes jest-axe checks', async () => {
|
|
132
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
213
133
|
|
|
214
|
-
|
|
215
|
-
|
|
134
|
+
const results = await axe($.html());
|
|
135
|
+
expect(results).toHaveNoViolations();
|
|
136
|
+
});
|
|
216
137
|
|
|
217
|
-
|
|
218
|
-
|
|
138
|
+
it('renders OGL icon', () => {
|
|
139
|
+
const faker = templateFaker();
|
|
140
|
+
const iconsSpy = faker.spy('icon');
|
|
219
141
|
|
|
220
|
-
|
|
221
|
-
const faker = templateFaker();
|
|
222
|
-
const panelSpy = faker.spy('panel');
|
|
142
|
+
faker.renderComponent('footer', params);
|
|
223
143
|
|
|
224
|
-
|
|
144
|
+
expect(iconsSpy.occurrences).toContainEqual(expect.objectContaining({ iconType: 'ogl' }));
|
|
145
|
+
});
|
|
225
146
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
147
|
+
it('renders raw HTML when `HTML` is provided', () => {
|
|
148
|
+
const $ = cheerio.load(
|
|
149
|
+
renderComponent('footer', {
|
|
150
|
+
OGLLink: {
|
|
151
|
+
...params.OGLLink,
|
|
152
|
+
HTML: '<strong>Bold text.</strong>',
|
|
153
|
+
},
|
|
154
|
+
}),
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
const licenseHtml = $('.ons-footer__license').html();
|
|
158
|
+
expect(licenseHtml).toContain('<strong>Bold text.</strong>');
|
|
159
|
+
});
|
|
234
160
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
copyright: 'Crown copyright and database rights 2020 OS 100019153.',
|
|
239
|
-
text: 'Use of address data is subject to the terms and conditions.',
|
|
240
|
-
},
|
|
241
|
-
};
|
|
161
|
+
it('renders link using the external link component', () => {
|
|
162
|
+
const faker = templateFaker();
|
|
163
|
+
const externalLinkSpy = faker.spy('external-link');
|
|
242
164
|
|
|
243
|
-
|
|
244
|
-
const $ = cheerio.load(renderComponent('footer', params));
|
|
165
|
+
faker.renderComponent('footer', params);
|
|
245
166
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
167
|
+
expect(externalLinkSpy.occurrences).toContainEqual(
|
|
168
|
+
expect.objectContaining({
|
|
169
|
+
url: 'https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/',
|
|
170
|
+
linkText: 'Open Government Licence v3.0',
|
|
171
|
+
}),
|
|
172
|
+
);
|
|
173
|
+
});
|
|
249
174
|
|
|
250
|
-
|
|
251
|
-
|
|
175
|
+
it('renders `post` content when provided', () => {
|
|
176
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
252
177
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
);
|
|
257
|
-
});
|
|
178
|
+
const licenseHtml = $('.ons-footer__license').html();
|
|
179
|
+
expect(licenseHtml).toContain(', except where otherwise stated');
|
|
180
|
+
});
|
|
258
181
|
|
|
259
|
-
|
|
260
|
-
|
|
182
|
+
it('renders welsh `post` content when `lang:cy` provided and `OGLLink` is "true"', () => {
|
|
183
|
+
const $ = cheerio.load(
|
|
184
|
+
renderComponent('footer', {
|
|
185
|
+
lang: 'cy',
|
|
186
|
+
OGLLink: true,
|
|
187
|
+
}),
|
|
188
|
+
);
|
|
261
189
|
|
|
262
|
-
|
|
190
|
+
const licenseHtml = $('.ons-footer__license').html();
|
|
191
|
+
expect(licenseHtml).toContain(', oni bai y nodir fel arall');
|
|
192
|
+
});
|
|
263
193
|
});
|
|
264
|
-
});
|
|
265
194
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
195
|
+
describe('warning', () => {
|
|
196
|
+
const params = {
|
|
197
|
+
footerWarning: 'Footer warning text with <strong>bold</strong> content.',
|
|
198
|
+
};
|
|
270
199
|
|
|
271
|
-
|
|
272
|
-
|
|
200
|
+
it('passes jest-axe checks', async () => {
|
|
201
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
273
202
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
203
|
+
const results = await axe($.html());
|
|
204
|
+
expect(results).toHaveNoViolations();
|
|
205
|
+
});
|
|
277
206
|
|
|
278
|
-
|
|
279
|
-
|
|
207
|
+
it('renders warning element', () => {
|
|
208
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
280
209
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
210
|
+
const warningHtml = $('.ons-footer__warning').html();
|
|
211
|
+
expect(warningHtml).toContain('Footer warning text with <strong>bold</strong> content.');
|
|
212
|
+
});
|
|
284
213
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
const listsSpy = faker.spy('list');
|
|
214
|
+
it('is not rendered when `footerWarning` is not provided', () => {
|
|
215
|
+
const $ = cheerio.load(renderComponent('footer', {}));
|
|
288
216
|
|
|
289
|
-
|
|
217
|
+
expect($('.ons-footer__warning').length).toBe(0);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it('renders warning text using the panel component', () => {
|
|
221
|
+
const faker = templateFaker();
|
|
222
|
+
const panelSpy = faker.spy('panel');
|
|
290
223
|
|
|
291
|
-
|
|
292
|
-
expect(itemsList1[0]).toHaveProperty('url', '/example-link-a');
|
|
293
|
-
expect(itemsList1[0]).toHaveProperty('text', 'Example Link A');
|
|
224
|
+
faker.renderComponent('footer', params);
|
|
294
225
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
226
|
+
expect(panelSpy.occurrences).toContainEqual(
|
|
227
|
+
expect.objectContaining({
|
|
228
|
+
variant: 'warn',
|
|
229
|
+
classes: 'ons-panel--warn--footer',
|
|
230
|
+
}),
|
|
231
|
+
);
|
|
232
|
+
});
|
|
298
233
|
});
|
|
299
|
-
});
|
|
300
234
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
235
|
+
describe('copyright', () => {
|
|
236
|
+
const params = {
|
|
237
|
+
copyrightDeclaration: {
|
|
238
|
+
copyright: 'Crown copyright and database rights 2020 OS 100019153.',
|
|
239
|
+
text: 'Use of address data is subject to the terms and conditions.',
|
|
240
|
+
},
|
|
241
|
+
};
|
|
305
242
|
|
|
306
|
-
|
|
307
|
-
|
|
243
|
+
it('passes jest-axe checks', async () => {
|
|
244
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
308
245
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
246
|
+
const results = await axe($.html());
|
|
247
|
+
expect(results).toHaveNoViolations();
|
|
248
|
+
});
|
|
312
249
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
const listsSpy = faker.spy('list');
|
|
250
|
+
it('renders copyright declaration', () => {
|
|
251
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
316
252
|
|
|
317
|
-
|
|
253
|
+
const text = $('.ons-footer__copyright').text();
|
|
254
|
+
expect(text).toBe(
|
|
255
|
+
'© Crown copyright and database rights 2020 OS 100019153. Use of address data is subject to the terms and conditions.',
|
|
256
|
+
);
|
|
257
|
+
});
|
|
318
258
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
expect(itemsList1[0]).toHaveProperty('text', 'Example Link A');
|
|
259
|
+
it('is not rendered when `copyrightDeclaration` is not provided', () => {
|
|
260
|
+
const $ = cheerio.load(renderComponent('footer', {}));
|
|
322
261
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
expect(itemsList2[0]).toHaveProperty('text', 'Example Link B');
|
|
262
|
+
expect($('.ons-footer__copyright').length).toBe(0);
|
|
263
|
+
});
|
|
326
264
|
});
|
|
327
|
-
});
|
|
328
265
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
266
|
+
describe('cols', () => {
|
|
267
|
+
const params = {
|
|
268
|
+
cols: EXAMPLE_COLS_PARAM,
|
|
269
|
+
};
|
|
333
270
|
|
|
334
|
-
|
|
335
|
-
|
|
271
|
+
it('passes jest-axe checks', async () => {
|
|
272
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
336
273
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
274
|
+
const results = await axe($.html());
|
|
275
|
+
expect(results).toHaveNoViolations();
|
|
276
|
+
});
|
|
340
277
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
const listsSpy = faker.spy('list');
|
|
278
|
+
it('renders expected column titles', () => {
|
|
279
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
344
280
|
|
|
345
|
-
|
|
281
|
+
const titleHeadings = mapAll($('.ons-footer__heading'), (node) => node.text().trim());
|
|
282
|
+
expect(titleHeadings).toEqual(['First column', 'Second column']);
|
|
283
|
+
});
|
|
346
284
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
285
|
+
it('renders expected lists using list component', () => {
|
|
286
|
+
const faker = templateFaker();
|
|
287
|
+
const listsSpy = faker.spy('list');
|
|
350
288
|
|
|
351
|
-
|
|
352
|
-
expect(itemsList2[0]).toHaveProperty('url', '/example-legal-link-b');
|
|
353
|
-
expect(itemsList2[0]).toHaveProperty('text', 'Example Legal Link B');
|
|
354
|
-
});
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
describe('poweredBy logo', () => {
|
|
358
|
-
describe('default poweredBy logo', () => {
|
|
359
|
-
describe.each([
|
|
360
|
-
[
|
|
361
|
-
'the `lang` parameter is not provided',
|
|
362
|
-
{},
|
|
363
|
-
{
|
|
364
|
-
iconType: 'ons-logo-en',
|
|
365
|
-
altText: 'Office for National Statistics',
|
|
366
|
-
},
|
|
367
|
-
],
|
|
368
|
-
[
|
|
369
|
-
'the `lang` parameter is "en"',
|
|
370
|
-
{ lang: 'en' },
|
|
371
|
-
{
|
|
372
|
-
iconType: 'ons-logo-en',
|
|
373
|
-
altText: 'Office for National Statistics',
|
|
374
|
-
},
|
|
375
|
-
],
|
|
376
|
-
])('where %s', (_, langParams, defaultIcon) => {
|
|
377
|
-
const params = {
|
|
378
|
-
...langParams,
|
|
379
|
-
};
|
|
380
|
-
it('renders the expected icon', () => {
|
|
381
|
-
const faker = templateFaker();
|
|
382
|
-
const iconsSpy = faker.spy('icon');
|
|
289
|
+
faker.renderComponent('footer', params);
|
|
383
290
|
|
|
384
|
-
|
|
291
|
+
const itemsList1 = listsSpy.occurrences[0].itemsList;
|
|
292
|
+
expect(itemsList1[0]).toHaveProperty('url', '/example-link-a');
|
|
293
|
+
expect(itemsList1[0]).toHaveProperty('text', 'Example Link A');
|
|
385
294
|
|
|
386
|
-
|
|
295
|
+
const itemsList2 = listsSpy.occurrences[1].itemsList;
|
|
296
|
+
expect(itemsList2[0]).toHaveProperty('url', '/example-link-b');
|
|
297
|
+
expect(itemsList2[0]).toHaveProperty('text', 'Example Link B');
|
|
387
298
|
});
|
|
388
|
-
});
|
|
389
299
|
});
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
[
|
|
393
|
-
'the `lang` parameter is "cy"',
|
|
394
|
-
{ lang: 'cy' },
|
|
395
|
-
{
|
|
396
|
-
iconType: 'ons-logo-cy',
|
|
397
|
-
altText: 'Swyddfa Ystadegau Gwladol',
|
|
398
|
-
},
|
|
399
|
-
],
|
|
400
|
-
])('where %s', (_, langParams, defaultIcon) => {
|
|
300
|
+
|
|
301
|
+
describe('rows', () => {
|
|
401
302
|
const params = {
|
|
402
|
-
|
|
303
|
+
rows: EXAMPLE_ROWS_PARAM,
|
|
403
304
|
};
|
|
404
|
-
it('renders the expected icon', () => {
|
|
405
|
-
const faker = templateFaker();
|
|
406
|
-
const iconsSpy = faker.spy('icon');
|
|
407
305
|
|
|
408
|
-
|
|
306
|
+
it('passes jest-axe checks', async () => {
|
|
307
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
409
308
|
|
|
410
|
-
|
|
309
|
+
const results = await axe($.html());
|
|
310
|
+
expect(results).toHaveNoViolations();
|
|
411
311
|
});
|
|
412
|
-
});
|
|
413
|
-
});
|
|
414
|
-
describe('correct link for language', () => {
|
|
415
|
-
it('has the Welsh lang link when the default Welsh lang ons icon is present', () => {
|
|
416
|
-
const $ = cheerio.load(renderComponent('footer', { lang: 'cy' }));
|
|
417
312
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
313
|
+
it('renders expected lists using list component', () => {
|
|
314
|
+
const faker = templateFaker();
|
|
315
|
+
const listsSpy = faker.spy('list');
|
|
316
|
+
|
|
317
|
+
faker.renderComponent('footer', params);
|
|
318
|
+
|
|
319
|
+
const itemsList1 = listsSpy.occurrences[0].itemsList;
|
|
320
|
+
expect(itemsList1[0]).toHaveProperty('url', '/example-link-a');
|
|
321
|
+
expect(itemsList1[0]).toHaveProperty('text', 'Example Link A');
|
|
422
322
|
|
|
423
|
-
|
|
424
|
-
|
|
323
|
+
const itemsList2 = listsSpy.occurrences[1].itemsList;
|
|
324
|
+
expect(itemsList2[0]).toHaveProperty('url', '/example-link-b');
|
|
325
|
+
expect(itemsList2[0]).toHaveProperty('text', 'Example Link B');
|
|
326
|
+
});
|
|
425
327
|
});
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
[
|
|
429
|
-
'the `poweredBy` and `OGLLink` parameters are provided',
|
|
430
|
-
{
|
|
431
|
-
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
432
|
-
OGLLink: EXAMPLE_OGL_LINK_PARAM,
|
|
433
|
-
},
|
|
434
|
-
],
|
|
435
|
-
[
|
|
436
|
-
'the `poweredBy` and `legal` parameters are provided',
|
|
437
|
-
{
|
|
438
|
-
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
439
|
-
legal: EXAMPLE_LEGAL_PARAM,
|
|
440
|
-
},
|
|
441
|
-
],
|
|
442
|
-
[
|
|
443
|
-
'the `poweredBy` and `crest` parameters are provided',
|
|
444
|
-
{
|
|
445
|
-
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
446
|
-
crest: true,
|
|
447
|
-
},
|
|
448
|
-
],
|
|
449
|
-
[
|
|
450
|
-
'the `poweredBy`, `legal` and `crest` parameters are provided',
|
|
451
|
-
{
|
|
452
|
-
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
453
|
-
legal: EXAMPLE_LEGAL_PARAM,
|
|
454
|
-
crest: true,
|
|
455
|
-
},
|
|
456
|
-
],
|
|
457
|
-
[
|
|
458
|
-
'the `poweredBy` parameter is provided but the `legal` and `crest` parameters are not provided',
|
|
459
|
-
{
|
|
460
|
-
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
461
|
-
},
|
|
462
|
-
],
|
|
463
|
-
])('where %s', (_, poweredByParams) => {
|
|
328
|
+
|
|
329
|
+
describe('legal', () => {
|
|
464
330
|
const params = {
|
|
465
|
-
|
|
331
|
+
legal: EXAMPLE_LEGAL_PARAM,
|
|
466
332
|
};
|
|
467
333
|
|
|
468
334
|
it('passes jest-axe checks', async () => {
|
|
469
|
-
|
|
335
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
470
336
|
|
|
471
|
-
|
|
472
|
-
|
|
337
|
+
const results = await axe($.html());
|
|
338
|
+
expect(results).toHaveNoViolations();
|
|
473
339
|
});
|
|
474
340
|
|
|
475
|
-
it('renders
|
|
476
|
-
|
|
341
|
+
it('renders expected lists using list component', () => {
|
|
342
|
+
const faker = templateFaker();
|
|
343
|
+
const listsSpy = faker.spy('list');
|
|
344
|
+
|
|
345
|
+
faker.renderComponent('footer', params);
|
|
477
346
|
|
|
478
|
-
|
|
347
|
+
const itemsList1 = listsSpy.occurrences[0].itemsList;
|
|
348
|
+
expect(itemsList1[0]).toHaveProperty('url', '/example-legal-link-a');
|
|
349
|
+
expect(itemsList1[0]).toHaveProperty('text', 'Example Legal Link A');
|
|
350
|
+
|
|
351
|
+
const itemsList2 = listsSpy.occurrences[1].itemsList;
|
|
352
|
+
expect(itemsList2[0]).toHaveProperty('url', '/example-legal-link-b');
|
|
353
|
+
expect(itemsList2[0]).toHaveProperty('text', 'Example Legal Link B');
|
|
479
354
|
});
|
|
480
|
-
});
|
|
481
|
-
});
|
|
482
|
-
});
|
|
483
|
-
|
|
484
|
-
describe('save and sign out button', () => {
|
|
485
|
-
const params = {
|
|
486
|
-
button: {
|
|
487
|
-
id: 'save-and-sign-out',
|
|
488
|
-
classes: 'extra-class',
|
|
489
|
-
text: 'Save changes and sign out',
|
|
490
|
-
name: 'button-name',
|
|
491
|
-
attributes: { a: 42 },
|
|
492
|
-
url: 'https://example.com/',
|
|
493
|
-
},
|
|
494
|
-
};
|
|
495
|
-
|
|
496
|
-
it('passes jest-axe checks', async () => {
|
|
497
|
-
const $ = cheerio.load(renderComponent('footer', params));
|
|
498
|
-
|
|
499
|
-
const results = await axe($.html());
|
|
500
|
-
expect(results).toHaveNoViolations();
|
|
501
355
|
});
|
|
502
356
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
357
|
+
describe('poweredBy logo', () => {
|
|
358
|
+
describe('default poweredBy logo', () => {
|
|
359
|
+
describe.each([
|
|
360
|
+
[
|
|
361
|
+
'the `lang` parameter is not provided',
|
|
362
|
+
{},
|
|
363
|
+
{
|
|
364
|
+
iconType: 'ons-logo-en',
|
|
365
|
+
altText: 'Office for National Statistics',
|
|
366
|
+
},
|
|
367
|
+
],
|
|
368
|
+
[
|
|
369
|
+
'the `lang` parameter is "en"',
|
|
370
|
+
{ lang: 'en' },
|
|
371
|
+
{
|
|
372
|
+
iconType: 'ons-logo-en',
|
|
373
|
+
altText: 'Office for National Statistics',
|
|
374
|
+
},
|
|
375
|
+
],
|
|
376
|
+
])('where %s', (_, langParams, defaultIcon) => {
|
|
377
|
+
const params = {
|
|
378
|
+
...langParams,
|
|
379
|
+
};
|
|
380
|
+
it('renders the expected icon', () => {
|
|
381
|
+
const faker = templateFaker();
|
|
382
|
+
const iconsSpy = faker.spy('icon');
|
|
383
|
+
|
|
384
|
+
faker.renderComponent('footer', params);
|
|
385
|
+
|
|
386
|
+
expect(iconsSpy.occurrences).toContainEqual(expect.objectContaining(defaultIcon));
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
});
|
|
390
|
+
describe('provided poweredBy logo', () => {
|
|
391
|
+
describe.each([
|
|
392
|
+
[
|
|
393
|
+
'the `lang` parameter is "cy"',
|
|
394
|
+
{ lang: 'cy' },
|
|
395
|
+
{
|
|
396
|
+
iconType: 'ons-logo-cy',
|
|
397
|
+
altText: 'Swyddfa Ystadegau Gwladol',
|
|
398
|
+
},
|
|
399
|
+
],
|
|
400
|
+
])('where %s', (_, langParams, defaultIcon) => {
|
|
401
|
+
const params = {
|
|
402
|
+
...langParams,
|
|
403
|
+
};
|
|
404
|
+
it('renders the expected icon', () => {
|
|
405
|
+
const faker = templateFaker();
|
|
406
|
+
const iconsSpy = faker.spy('icon');
|
|
407
|
+
|
|
408
|
+
faker.renderComponent('footer', params);
|
|
409
|
+
|
|
410
|
+
expect(iconsSpy.occurrences).toContainEqual(expect.objectContaining(defaultIcon));
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
describe('correct link for language', () => {
|
|
415
|
+
it('has the Welsh lang link when the default Welsh lang ons icon is present', () => {
|
|
416
|
+
const $ = cheerio.load(renderComponent('footer', { lang: 'cy' }));
|
|
506
417
|
|
|
507
|
-
|
|
418
|
+
expect($('.ons-footer__poweredBy-link').attr('href')).toBe('https://cy.ons.gov.uk/');
|
|
419
|
+
});
|
|
420
|
+
it('has the English lang link when the default English lang ons icon is present', () => {
|
|
421
|
+
const $ = cheerio.load(renderComponent('footer', { lang: 'en' }));
|
|
508
422
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
423
|
+
expect($('.ons-footer__poweredBy-link').attr('href')).toBe('https://www.ons.gov.uk/');
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
describe('provided poweredBy logo', () => {
|
|
427
|
+
describe.each([
|
|
428
|
+
[
|
|
429
|
+
'the `poweredBy` and `OGLLink` parameters are provided',
|
|
430
|
+
{
|
|
431
|
+
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
432
|
+
OGLLink: EXAMPLE_OGL_LINK_PARAM,
|
|
433
|
+
},
|
|
434
|
+
],
|
|
435
|
+
[
|
|
436
|
+
'the `poweredBy` and `legal` parameters are provided',
|
|
437
|
+
{
|
|
438
|
+
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
439
|
+
legal: EXAMPLE_LEGAL_PARAM,
|
|
440
|
+
},
|
|
441
|
+
],
|
|
442
|
+
[
|
|
443
|
+
'the `poweredBy` and `crest` parameters are provided',
|
|
444
|
+
{
|
|
445
|
+
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
446
|
+
crest: true,
|
|
447
|
+
},
|
|
448
|
+
],
|
|
449
|
+
[
|
|
450
|
+
'the `poweredBy`, `legal` and `crest` parameters are provided',
|
|
451
|
+
{
|
|
452
|
+
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
453
|
+
legal: EXAMPLE_LEGAL_PARAM,
|
|
454
|
+
crest: true,
|
|
455
|
+
},
|
|
456
|
+
],
|
|
457
|
+
[
|
|
458
|
+
'the `poweredBy` parameter is provided but the `legal` and `crest` parameters are not provided',
|
|
459
|
+
{
|
|
460
|
+
poweredBy: '<img src="logo.svg" class="custom-logo" alt="logo">',
|
|
461
|
+
},
|
|
462
|
+
],
|
|
463
|
+
])('where %s', (_, poweredByParams) => {
|
|
464
|
+
const params = {
|
|
465
|
+
...poweredByParams,
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
it('passes jest-axe checks', async () => {
|
|
469
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
470
|
+
|
|
471
|
+
const results = await axe($.html());
|
|
472
|
+
expect(results).toHaveNoViolations();
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
it('renders the expected logo', () => {
|
|
476
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
477
|
+
|
|
478
|
+
expect($('.custom-logo').length).toBe(1);
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
});
|
|
515
482
|
});
|
|
516
|
-
});
|
|
517
483
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
484
|
+
describe('save and sign out button', () => {
|
|
485
|
+
const params = {
|
|
486
|
+
button: {
|
|
487
|
+
id: 'save-and-sign-out',
|
|
488
|
+
classes: 'extra-class',
|
|
489
|
+
text: 'Save changes and sign out',
|
|
490
|
+
name: 'button-name',
|
|
491
|
+
attributes: { a: 42 },
|
|
492
|
+
url: 'https://example.com/',
|
|
493
|
+
},
|
|
494
|
+
};
|
|
522
495
|
|
|
523
|
-
|
|
524
|
-
|
|
496
|
+
it('passes jest-axe checks', async () => {
|
|
497
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
525
498
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
499
|
+
const results = await axe($.html());
|
|
500
|
+
expect(results).toHaveNoViolations();
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
it('renders "Save changes and sign out" button using the button component', () => {
|
|
504
|
+
const faker = templateFaker();
|
|
505
|
+
const buttonSpy = faker.spy('button');
|
|
529
506
|
|
|
530
|
-
|
|
531
|
-
const $ = cheerio.load(renderComponent('footer', params));
|
|
507
|
+
faker.renderComponent('footer', params);
|
|
532
508
|
|
|
533
|
-
|
|
534
|
-
|
|
509
|
+
expect(buttonSpy.occurrences).toContainEqual(
|
|
510
|
+
expect.objectContaining({
|
|
511
|
+
...params.button,
|
|
512
|
+
variants: 'ghost',
|
|
513
|
+
}),
|
|
514
|
+
);
|
|
515
|
+
});
|
|
535
516
|
});
|
|
536
517
|
|
|
537
|
-
|
|
538
|
-
|
|
518
|
+
describe('new tab warning', () => {
|
|
519
|
+
const params = {
|
|
520
|
+
newTabWarning: 'The following links open in a <strong>new tab</strong>',
|
|
521
|
+
};
|
|
539
522
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
});
|
|
523
|
+
it('passes jest-axe checks', async () => {
|
|
524
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
543
525
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
526
|
+
const results = await axe($.html());
|
|
527
|
+
expect(results).toHaveNoViolations();
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
it('renders new tab warning element', () => {
|
|
531
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
549
532
|
|
|
550
|
-
|
|
551
|
-
|
|
533
|
+
const warningHtml = $('.ons-footer__new-tab-warning').html();
|
|
534
|
+
expect(warningHtml).toContain('The following links open in a <strong>new tab</strong>');
|
|
535
|
+
});
|
|
552
536
|
|
|
553
|
-
|
|
554
|
-
|
|
537
|
+
it('is not rendered when `newTabWarning` is not provided', () => {
|
|
538
|
+
const $ = cheerio.load(renderComponent('footer', {}));
|
|
539
|
+
|
|
540
|
+
expect($('.ons-footer__new-tab-warning').length).toBe(0);
|
|
541
|
+
});
|
|
555
542
|
});
|
|
556
543
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
544
|
+
describe('crest', () => {
|
|
545
|
+
const params = {
|
|
546
|
+
crest: true,
|
|
547
|
+
legal: true,
|
|
548
|
+
};
|
|
560
549
|
|
|
561
|
-
|
|
550
|
+
it('passes jest-axe checks', async () => {
|
|
551
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
562
552
|
|
|
563
|
-
|
|
564
|
-
|
|
553
|
+
const results = await axe($.html());
|
|
554
|
+
expect(results).toHaveNoViolations();
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
it('renders crest icon when `crest` parameter is provided', () => {
|
|
558
|
+
const faker = templateFaker();
|
|
559
|
+
const iconsSpy = faker.spy('icon');
|
|
560
|
+
|
|
561
|
+
faker.renderComponent('footer', params);
|
|
565
562
|
|
|
566
|
-
|
|
567
|
-
|
|
563
|
+
expect(iconsSpy.occurrences).toContainEqual(expect.objectContaining({ iconType: 'crest' }));
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
it('renders "crest" element', () => {
|
|
567
|
+
const $ = cheerio.load(renderComponent('footer', params));
|
|
568
568
|
|
|
569
|
-
|
|
569
|
+
expect($('.ons-footer__crest').length).toBe(1);
|
|
570
|
+
});
|
|
570
571
|
});
|
|
571
|
-
});
|
|
572
572
|
});
|