@ons/design-system 70.0.7 → 70.0.8
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.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/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/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 +357 -357
- 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 +1 -1
- package/components/address-input/example-address-input.njk +1 -1
- package/components/address-output/_address-output.scss +3 -3
- package/components/address-output/_macro.spec.js +84 -84
- package/components/autosuggest/_autosuggest.scss +114 -114
- 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/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 +6 -6
- package/components/breadcrumbs/_breadcrumbs.scss +63 -65
- package/components/breadcrumbs/_macro.spec.js +91 -91
- package/components/browser-banner/_browser-banner.scss +23 -23
- package/components/browser-banner/_macro.spec.js +92 -92
- package/components/button/_button.scss +482 -483
- 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/call-to-action/_call-to-action.scss +5 -5
- package/components/call-to-action/_macro.spec.js +28 -28
- package/components/card/_card.scss +23 -23
- package/components/card/_macro.spec.js +180 -180
- 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.spec.js +355 -355
- package/components/checkboxes/_checkbox.scss +180 -180
- package/components/checkboxes/_checkboxes.scss +37 -27
- 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/content-pagination/_content-pagination.scss +41 -41
- package/components/content-pagination/_macro.spec.js +159 -159
- package/components/cookies-banner/_cookies-banner.scss +22 -22
- 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/date-input/_macro.spec.js +338 -338
- package/components/description-list/_description-list.scss +23 -23
- package/components/description-list/_macro.spec.js +144 -144
- package/components/details/_details.scss +109 -109
- 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/document-list/_macro.spec.js +444 -444
- package/components/document-list/document-list.scss +145 -149
- 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.spec.js +291 -291
- package/components/error/_macro.spec.js +72 -72
- package/components/external-link/_external-link.scss +19 -19
- package/components/external-link/_macro.spec.js +68 -68
- package/components/feedback/_feedback.scss +31 -31
- 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.spec.js +80 -80
- package/components/fieldset/_fieldset.scss +27 -27
- package/components/fieldset/_macro.spec.js +161 -161
- package/components/footer/_footer.scss +45 -45
- package/components/footer/_macro.spec.js +452 -452
- package/components/header/_header.scss +202 -202
- package/components/header/_macro.spec.js +833 -829
- package/components/helpers/_grid.scss +4 -4
- package/components/hero/_hero.scss +48 -48
- package/components/hero/_macro.spec.js +59 -59
- package/components/icon/_icon.scss +44 -44
- package/components/icon/_macro.spec.js +110 -110
- package/components/image/_image.scss +11 -11
- 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.spec.js +604 -604
- package/components/input/character-check.dom.js +5 -5
- 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.spec.js +173 -170
- package/components/language-selector/_macro.spec.js +97 -97
- package/components/language-selector/language.scss +7 -7
- package/components/list/_list.scss +84 -84
- package/components/list/_macro.spec.js +583 -583
- package/components/message/_macro.njk +5 -5
- package/components/message/_macro.spec.js +74 -74
- package/components/message/_message.scss +39 -39
- package/components/message-list/_macro.spec.js +86 -86
- package/components/message-list/_message-list.scss +16 -16
- 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/mutually-exclusive/_macro.spec.js +140 -140
- 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.spec.js +360 -354
- package/components/navigation/_navigation.scss +122 -123
- 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.spec.js +342 -335
- package/components/pagination/_pagination.scss +58 -58
- package/components/panel/_macro.spec.js +372 -372
- package/components/panel/_panel.scss +200 -199
- 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.spec.js +86 -86
- package/components/phase-banner/_phase-banner.scss +16 -16
- package/components/question/_macro.spec.js +235 -235
- package/components/question/_question.scss +24 -24
- package/components/quote/_macro.spec.js +52 -52
- package/components/quote/_quote.scss +24 -24
- package/components/radios/_macro.spec.js +524 -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/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.spec.js +109 -109
- package/components/related-content/_related-content.scss +12 -12
- package/components/related-content/_section-macro.spec.js +20 -20
- package/components/relationships/_macro.spec.js +94 -94
- package/components/relationships/_relationships.scss +9 -9
- 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.spec.js +210 -210
- package/components/section-navigation/_section-navigation.scss +76 -76
- package/components/select/_macro.spec.js +166 -166
- package/components/share-page/_macro.spec.js +68 -68
- package/components/skip-to-content/_macro.spec.js +54 -54
- package/components/skip-to-content/_skip.scss +30 -30
- 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.spec.js +53 -53
- package/components/status/_status.scss +32 -32
- package/components/summary/_macro.spec.js +551 -535
- package/components/summary/_summary.scss +191 -195
- 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.spec.js +125 -125
- package/components/table-of-contents/_toc.scss +9 -9
- 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.spec.js +92 -92
- package/components/tabs/_tabs.scss +120 -115
- 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.spec.js +33 -33
- package/components/text-indent/_text-indent.scss +3 -3
- package/components/textarea/_macro.spec.js +238 -238
- package/components/textarea/textarea.dom.js +5 -5
- package/components/textarea/textarea.spec.js +78 -74
- package/components/timeline/_macro.spec.js +83 -83
- package/components/timeline/_timeline.scss +26 -26
- package/components/timeout-modal/_macro.spec.js +47 -47
- 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.spec.js +41 -41
- package/components/timeout-panel/timeout-panel.dom.js +8 -8
- package/components/timeout-panel/timeout-panel.spec.js +118 -118
- package/components/upload/_macro.spec.js +52 -52
- package/components/upload/_upload.scss +28 -28
- package/components/video/_macro.spec.js +42 -42
- package/components/video/_video.scss +16 -16
- 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/_template.njk +5 -7
- package/package.json +131 -128
- 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
|
@@ -10,20 +10,20 @@ const EXAMPLE_PAGE = `
|
|
|
10
10
|
<div class="ons-js-adv-filter">
|
|
11
11
|
<div class="ons-js-adv-filter__wrap">
|
|
12
12
|
${renderComponent('button', {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
type: 'button',
|
|
14
|
+
text: 'Show filters',
|
|
15
|
+
classes: 'ons-adv-filter__trigger ons-js-adv-filter__trigger',
|
|
16
|
+
'aria-expanded': 'false',
|
|
17
|
+
'aria-controls': 'filter-panel',
|
|
18
18
|
})}
|
|
19
19
|
|
|
20
20
|
<div class="ons-adv-filter__panel ons-js-adv-filter__panel" id="filter-panel">
|
|
21
21
|
<h2>Filters</h2>
|
|
22
22
|
<form class="ons-js-adv-filter__form" method="POST">
|
|
23
23
|
${renderComponent('button', {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
type: 'reset',
|
|
25
|
+
text: 'Reset all filters',
|
|
26
|
+
classes: 'ons-adv-filter__reset ons-js-adv-filter__reset',
|
|
27
27
|
})}
|
|
28
28
|
|
|
29
29
|
<div class="ons-adv-filter__item ons-js-adv-filter__item" data-default-text="All audiences" data-multi-select-text="{n} filters selected">
|
|
@@ -34,33 +34,33 @@ const EXAMPLE_PAGE = `
|
|
|
34
34
|
<span class="ons-js-adv-filter__selection">All audiences</span>
|
|
35
35
|
</div>
|
|
36
36
|
${renderComponent('checkboxes', {
|
|
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
|
-
|
|
37
|
+
dontWrap: 'true',
|
|
38
|
+
legend: 'Audience',
|
|
39
|
+
name: 'audience',
|
|
40
|
+
checkboxes: [
|
|
41
|
+
{
|
|
42
|
+
classes: 'ons-checkbox--toggle',
|
|
43
|
+
id: 'community-groups',
|
|
44
|
+
label: {
|
|
45
|
+
text: 'Community groups',
|
|
46
|
+
},
|
|
47
|
+
value: 'community-groups',
|
|
48
|
+
attributes: {
|
|
49
|
+
'data-filter': 'community-groups',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
classes: 'ons-checkbox--toggle',
|
|
54
|
+
id: 'general-public',
|
|
55
|
+
label: {
|
|
56
|
+
text: 'General public',
|
|
57
|
+
},
|
|
58
|
+
value: 'general-public',
|
|
59
|
+
attributes: {
|
|
60
|
+
'data-filter': 'general-public',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
64
|
})}
|
|
65
65
|
</fieldset>
|
|
66
66
|
</div>
|
|
@@ -73,47 +73,47 @@ const EXAMPLE_PAGE = `
|
|
|
73
73
|
<span class="ons-js-adv-filter__selection">All types</span>
|
|
74
74
|
</div>
|
|
75
75
|
${renderComponent('checkboxes', {
|
|
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
|
-
|
|
76
|
+
dontWrap: 'true',
|
|
77
|
+
legend: 'Type',
|
|
78
|
+
name: 'type',
|
|
79
|
+
checkboxes: [
|
|
80
|
+
{
|
|
81
|
+
classes: 'ons-checkbox--toggle',
|
|
82
|
+
id: 'booklet',
|
|
83
|
+
label: {
|
|
84
|
+
text: 'Booklet',
|
|
85
|
+
},
|
|
86
|
+
value: 'booklet',
|
|
87
|
+
attributes: {
|
|
88
|
+
'data-filter': 'booklet',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
classes: 'ons-checkbox--toggle',
|
|
93
|
+
id: 'logo',
|
|
94
|
+
label: {
|
|
95
|
+
text: 'Logo',
|
|
96
|
+
},
|
|
97
|
+
value: 'logo',
|
|
98
|
+
attributes: {
|
|
99
|
+
'data-filter': 'logo',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
103
|
})}
|
|
104
104
|
</fieldset>
|
|
105
105
|
</div>
|
|
106
106
|
|
|
107
107
|
<div class="ons-adv-filter__actions">
|
|
108
108
|
${renderComponent('button', {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
type: 'button',
|
|
110
|
+
html: 'Show (<span class="ons-js-adv-filter__show-results">7</span> results',
|
|
111
|
+
classes: 'ons-js-adv-filter__show',
|
|
112
112
|
})}
|
|
113
113
|
${renderComponent('button', {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
type: 'button',
|
|
115
|
+
html: 'Close',
|
|
116
|
+
classes: 'ons-js-adv-filter__close',
|
|
117
117
|
})}
|
|
118
118
|
</div>
|
|
119
119
|
</form>
|
|
@@ -135,43 +135,43 @@ const EXAMPLE_PAGE = `
|
|
|
135
135
|
</div>
|
|
136
136
|
|
|
137
137
|
${renderComponent('document-list', {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
},
|
|
143
|
-
documents: [
|
|
144
|
-
{
|
|
145
|
-
classes: 'ons-filter__item ons-js-filter__item',
|
|
146
|
-
attributes: {
|
|
147
|
-
'data-filter': 'general-public booklet',
|
|
148
|
-
'data-sort-index': '1',
|
|
149
|
-
},
|
|
150
|
-
url: '/example-booklet-1',
|
|
151
|
-
title: 'Example booklet 1',
|
|
152
|
-
description: 'The first example booklet.',
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
classes: 'ons-filter__item ons-js-filter__item',
|
|
156
|
-
attributes: {
|
|
157
|
-
'data-filter': 'general-public booklet logo',
|
|
158
|
-
'data-sort-index': '2',
|
|
159
|
-
},
|
|
160
|
-
url: '/example-booklet-2',
|
|
161
|
-
title: 'Example booklet 2 with logo',
|
|
162
|
-
description: 'The second example booklet with a logo.',
|
|
138
|
+
id: 'adv-filter-gallery',
|
|
139
|
+
classes: 'ons-adv-filter__gallery ons-js-adv-filter__gallery',
|
|
140
|
+
attributes: {
|
|
141
|
+
'data-filter-animation': 'off',
|
|
163
142
|
},
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
143
|
+
documents: [
|
|
144
|
+
{
|
|
145
|
+
classes: 'ons-filter__item ons-js-filter__item',
|
|
146
|
+
attributes: {
|
|
147
|
+
'data-filter': 'general-public booklet',
|
|
148
|
+
'data-sort-index': '1',
|
|
149
|
+
},
|
|
150
|
+
url: '/example-booklet-1',
|
|
151
|
+
title: 'Example booklet 1',
|
|
152
|
+
description: 'The first example booklet.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
classes: 'ons-filter__item ons-js-filter__item',
|
|
156
|
+
attributes: {
|
|
157
|
+
'data-filter': 'general-public booklet logo',
|
|
158
|
+
'data-sort-index': '2',
|
|
159
|
+
},
|
|
160
|
+
url: '/example-booklet-2',
|
|
161
|
+
title: 'Example booklet 2 with logo',
|
|
162
|
+
description: 'The second example booklet with a logo.',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
classes: 'ons-filter__item ons-js-filter__item',
|
|
166
|
+
attributes: {
|
|
167
|
+
'data-filter': 'logo',
|
|
168
|
+
'data-sort-index': '3',
|
|
169
|
+
},
|
|
170
|
+
url: '/example-logo',
|
|
171
|
+
title: 'Example logo',
|
|
172
|
+
description: 'An example logo.',
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
175
|
})}
|
|
176
176
|
|
|
177
177
|
<div class="ons-adv-filter__no-results" data-fallback-gallery-id="adv-filter-gallery">
|
|
@@ -186,393 +186,393 @@ const EXAMPLE_PAGE = `
|
|
|
186
186
|
const RENDERED_EXAMPLE_PAGE = renderTemplate(EXAMPLE_PAGE);
|
|
187
187
|
|
|
188
188
|
describe('script: download-resources', () => {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
189
|
+
describe('no filtering', () => {
|
|
190
|
+
beforeEach(async () => {
|
|
191
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it('shows all documents', async () => {
|
|
195
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
196
|
+
expect(hiddenTitles).toEqual([]);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('updates filter selection labels ', async () => {
|
|
200
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
201
|
+
expect(filterSelectionLabels).toEqual(['All audiences', 'All types']);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it('updates result count text', async () => {
|
|
205
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
206
|
+
expect(resultsCount).toBe('3');
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('hides the "No results" content', async () => {
|
|
210
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
211
|
+
expect(isHidden).toBe(true);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
describe('filtering one parameter where there are no results', () => {
|
|
216
|
+
beforeEach(async () => {
|
|
217
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
218
|
+
await page.click('#community-groups');
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it('hides all documents', async () => {
|
|
222
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
223
|
+
expect(hiddenTitles).toEqual(['Example booklet 1', 'Example booklet 2 with logo', 'Example logo']);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('updates filter selection labels ', async () => {
|
|
227
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
228
|
+
expect(filterSelectionLabels).toEqual(['Community groups', 'All types']);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('updates result count text', async () => {
|
|
232
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
233
|
+
expect(resultsCount).toBe('0');
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it('shows the "No results" content', async () => {
|
|
237
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
238
|
+
expect(isHidden).toBe(false);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
describe('filtering one parameter where there are results', () => {
|
|
243
|
+
beforeEach(async () => {
|
|
244
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
245
|
+
await page.click('#general-public');
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it('hides non-matching documents', async () => {
|
|
249
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
250
|
+
expect(hiddenTitles).toEqual(['Example logo']);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it('updates filter selection labels ', async () => {
|
|
254
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
255
|
+
expect(filterSelectionLabels).toEqual(['General public', 'All types']);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('updates result count text', async () => {
|
|
259
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
260
|
+
expect(resultsCount).toBe('2');
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('hides the "No results" content', async () => {
|
|
264
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
265
|
+
expect(isHidden).toBe(true);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
describe('filtering two values of the same parameter', () => {
|
|
270
|
+
beforeEach(async () => {
|
|
271
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
272
|
+
await page.click('#booklet');
|
|
273
|
+
await page.click('#logo');
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
it('hides non-matching documents', async () => {
|
|
277
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
278
|
+
expect(hiddenTitles).toEqual([]);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it('updates filter selection labels ', async () => {
|
|
282
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
283
|
+
expect(filterSelectionLabels).toEqual(['All audiences', '2 filters selected']);
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
it('updates result count text', async () => {
|
|
287
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
288
|
+
expect(resultsCount).toBe('3');
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('hides the "No results" content', async () => {
|
|
292
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
293
|
+
expect(isHidden).toBe(true);
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
describe('filtering two parameters where there are no results', () => {
|
|
298
|
+
beforeEach(async () => {
|
|
299
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
300
|
+
await page.click('#community-groups');
|
|
301
|
+
await page.click('#booklet');
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
it('hides all documents', async () => {
|
|
305
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
306
|
+
expect(hiddenTitles).toEqual(['Example booklet 1', 'Example booklet 2 with logo', 'Example logo']);
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
it('updates filter selection labels ', async () => {
|
|
310
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
311
|
+
expect(filterSelectionLabels).toEqual(['Community groups', 'Booklet']);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it('updates result count text', async () => {
|
|
315
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
316
|
+
expect(resultsCount).toBe('0');
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
it('shows the "No results" content', async () => {
|
|
320
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
321
|
+
expect(isHidden).toBe(false);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
describe('filtering two parameters where results match both', () => {
|
|
326
|
+
beforeEach(async () => {
|
|
327
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
328
|
+
await page.click('#general-public');
|
|
329
|
+
await page.click('#booklet');
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
it('hides non-matching documents', async () => {
|
|
333
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
334
|
+
expect(hiddenTitles).toEqual(['Example logo']);
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
it('updates filter selection labels ', async () => {
|
|
338
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
339
|
+
expect(filterSelectionLabels).toEqual(['General public', 'Booklet']);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it('updates result count text', async () => {
|
|
343
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
344
|
+
expect(resultsCount).toBe('2');
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
it('hides the "No results" content', async () => {
|
|
348
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
349
|
+
expect(isHidden).toBe(true);
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
describe('filtering two parameters where results do not match both', () => {
|
|
354
|
+
beforeEach(async () => {
|
|
355
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
356
|
+
await page.click('#general-public');
|
|
357
|
+
await page.click('#logo');
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it('hides non-matching documents ', async () => {
|
|
361
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
362
|
+
expect(hiddenTitles).toEqual(['Example booklet 1', 'Example logo']);
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
it('updates filter selection labels ', async () => {
|
|
366
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
367
|
+
expect(filterSelectionLabels).toEqual(['General public', 'Logo']);
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
it('updates result count text', async () => {
|
|
371
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
372
|
+
expect(resultsCount).toBe('1');
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
it('hides the "No results" content', async () => {
|
|
376
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
377
|
+
expect(isHidden).toBe(true);
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
describe('adding and then removing a filter', () => {
|
|
382
|
+
beforeEach(async () => {
|
|
383
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
384
|
+
await page.click('#general-public');
|
|
385
|
+
await page.click('#logo');
|
|
386
|
+
await page.click('#logo');
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
it('hides non-matching documents ', async () => {
|
|
390
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
391
|
+
expect(hiddenTitles).toEqual(['Example logo']);
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
it('updates filter selection labels ', async () => {
|
|
395
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
396
|
+
expect(filterSelectionLabels).toEqual(['General public', 'All types']);
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
it('updates result count text', async () => {
|
|
400
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
401
|
+
expect(resultsCount).toBe('2');
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
it('hides the "No results" content', async () => {
|
|
405
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
406
|
+
expect(isHidden).toBe(true);
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
describe('sorting', () => {
|
|
411
|
+
beforeEach(async () => {
|
|
412
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
it('sorts ascending by default', async () => {
|
|
416
|
+
const shownTitles = await getShownDocumentTitles(page);
|
|
417
|
+
expect(shownTitles).toEqual(['Example booklet 1', 'Example booklet 2 with logo', 'Example logo']);
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
it('sorts descending when "sort" selection is set to "desc"', async () => {
|
|
421
|
+
await page.type('#sort', 'O');
|
|
422
|
+
|
|
423
|
+
const shownTitles = await getShownDocumentTitles(page);
|
|
424
|
+
expect(shownTitles).toEqual(['Example logo', 'Example booklet 2 with logo', 'Example booklet 1']);
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
describe('"Reset all filters" button', () => {
|
|
429
|
+
beforeEach(async () => {
|
|
430
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
431
|
+
await page.click('#general-public');
|
|
432
|
+
await page.click('#logo');
|
|
433
|
+
await page.click('.ons-js-adv-filter__reset');
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
it('resets state of all filter checkboxes ', async () => {
|
|
437
|
+
const selector = '.ons-js-adv-filter__item .ons-js-checkbox';
|
|
438
|
+
const checkboxStates = await page.$$eval(selector, (nodes) => nodes.map((node) => `${node.id}: ${node.checked}`));
|
|
439
|
+
|
|
440
|
+
expect(checkboxStates).toEqual(['community-groups: false', 'general-public: false', 'booklet: false', 'logo: false']);
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
it('shows all documents ', async () => {
|
|
444
|
+
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
445
|
+
expect(hiddenTitles).toEqual([]);
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
it('updates filter selection labels ', async () => {
|
|
449
|
+
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
450
|
+
expect(filterSelectionLabels).toEqual(['All audiences', 'All types']);
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it('updates result count text', async () => {
|
|
454
|
+
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
455
|
+
expect(resultsCount).toBe('3');
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
it('hides the "No results" content', async () => {
|
|
459
|
+
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
460
|
+
expect(isHidden).toBe(true);
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
describe('when the viewport is large', () => {
|
|
465
|
+
beforeEach(async () => {
|
|
466
|
+
await setViewport(page, { width: 1650, height: 1050 });
|
|
467
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
afterEach(async () => {
|
|
471
|
+
// Clear viewport size and browser emulation after each test.
|
|
472
|
+
await jestPuppeteer.resetPage();
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
it('hides elements that are only needed for mobile', async () => {
|
|
476
|
+
const displayStyle = await page.$eval('.ons-adv-filter__trigger', (node) => getComputedStyle(node).display);
|
|
477
|
+
expect(displayStyle).toBe('none');
|
|
478
|
+
});
|
|
203
479
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
480
|
+
it('shows filter elements', async () => {
|
|
481
|
+
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
482
|
+
expect(displayStyle).not.toBe('none');
|
|
483
|
+
});
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
describe('when the viewport is small', () => {
|
|
487
|
+
beforeEach(async () => {
|
|
488
|
+
await page.emulate(iPhoneX);
|
|
489
|
+
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
490
|
+
});
|
|
214
491
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
});
|
|
492
|
+
afterEach(async () => {
|
|
493
|
+
// Clear viewport size and browser emulation after each test.
|
|
494
|
+
await jestPuppeteer.resetPage();
|
|
495
|
+
});
|
|
220
496
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
497
|
+
it('shows elements that are only needed for mobile', async () => {
|
|
498
|
+
const displayStyle = await page.$eval('.ons-adv-filter__trigger', (node) => getComputedStyle(node).display);
|
|
499
|
+
expect(displayStyle).not.toBe('none');
|
|
500
|
+
});
|
|
225
501
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
502
|
+
it('hides filter elements', async () => {
|
|
503
|
+
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
504
|
+
expect(displayStyle).toBe('none');
|
|
505
|
+
});
|
|
230
506
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
expect(resultsCount).toBe('0');
|
|
234
|
-
});
|
|
507
|
+
it('shows filter elements when the "Show filters" button is pressed', async () => {
|
|
508
|
+
await page.click('.ons-js-adv-filter__trigger');
|
|
235
509
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
});
|
|
240
|
-
});
|
|
510
|
+
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
511
|
+
expect(displayStyle).not.toBe('none');
|
|
512
|
+
});
|
|
241
513
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
245
|
-
await page.click('#general-public');
|
|
246
|
-
});
|
|
514
|
+
it('hides the underlying page elements when the "Show filters" button is pressed', async () => {
|
|
515
|
+
await page.click('.ons-js-adv-filter__trigger');
|
|
247
516
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
expect(hiddenTitles).toEqual(['Example logo']);
|
|
251
|
-
});
|
|
517
|
+
const pageIsHidden = await page.$eval('.ons-page', (node) => node.classList.contains('ons-u-d-no'));
|
|
518
|
+
const pageIsAriaHidden = await page.$eval('.ons-page', (node) => node.getAttribute('aria-hidden'));
|
|
252
519
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
});
|
|
520
|
+
expect(pageIsHidden).toBe(true);
|
|
521
|
+
expect(pageIsAriaHidden).toBe('true');
|
|
522
|
+
});
|
|
257
523
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
});
|
|
524
|
+
it('hides filter elements when the "Show (n results)" button is pressed', async () => {
|
|
525
|
+
await page.click('.ons-js-adv-filter__trigger');
|
|
526
|
+
await page.click('.ons-js-adv-filter__show');
|
|
262
527
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
});
|
|
267
|
-
});
|
|
528
|
+
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
529
|
+
expect(displayStyle).toBe('none');
|
|
530
|
+
});
|
|
268
531
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
await page.click('#booklet');
|
|
273
|
-
await page.click('#logo');
|
|
274
|
-
});
|
|
532
|
+
it('shows the underlying page elements when the "Show (n results)" button is pressed', async () => {
|
|
533
|
+
await page.click('.ons-js-adv-filter__trigger');
|
|
534
|
+
await page.click('.ons-js-adv-filter__show');
|
|
275
535
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
expect(hiddenTitles).toEqual([]);
|
|
279
|
-
});
|
|
536
|
+
const pageIsHidden = await page.$eval('.ons-page', (node) => node.classList.contains('ons-u-d-no'));
|
|
537
|
+
const pageIsAriaHidden = await page.$eval('.ons-page', (node) => node.getAttribute('aria-hidden'));
|
|
280
538
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
});
|
|
539
|
+
expect(pageIsHidden).toBe(false);
|
|
540
|
+
expect(pageIsAriaHidden).toBe('false');
|
|
541
|
+
});
|
|
285
542
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
it('hides the "No results" content', async () => {
|
|
292
|
-
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
293
|
-
expect(isHidden).toBe(true);
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
describe('filtering two parameters where there are no results', () => {
|
|
298
|
-
beforeEach(async () => {
|
|
299
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
300
|
-
await page.click('#community-groups');
|
|
301
|
-
await page.click('#booklet');
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
it('hides all documents', async () => {
|
|
305
|
-
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
306
|
-
expect(hiddenTitles).toEqual(['Example booklet 1', 'Example booklet 2 with logo', 'Example logo']);
|
|
307
|
-
});
|
|
308
|
-
|
|
309
|
-
it('updates filter selection labels ', async () => {
|
|
310
|
-
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
311
|
-
expect(filterSelectionLabels).toEqual(['Community groups', 'Booklet']);
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
it('updates result count text', async () => {
|
|
315
|
-
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
316
|
-
expect(resultsCount).toBe('0');
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
it('shows the "No results" content', async () => {
|
|
320
|
-
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
321
|
-
expect(isHidden).toBe(false);
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
describe('filtering two parameters where results match both', () => {
|
|
326
|
-
beforeEach(async () => {
|
|
327
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
328
|
-
await page.click('#general-public');
|
|
329
|
-
await page.click('#booklet');
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
it('hides non-matching documents', async () => {
|
|
333
|
-
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
334
|
-
expect(hiddenTitles).toEqual(['Example logo']);
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
it('updates filter selection labels ', async () => {
|
|
338
|
-
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
339
|
-
expect(filterSelectionLabels).toEqual(['General public', 'Booklet']);
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
it('updates result count text', async () => {
|
|
343
|
-
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
344
|
-
expect(resultsCount).toBe('2');
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
it('hides the "No results" content', async () => {
|
|
348
|
-
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
349
|
-
expect(isHidden).toBe(true);
|
|
350
|
-
});
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
describe('filtering two parameters where results do not match both', () => {
|
|
354
|
-
beforeEach(async () => {
|
|
355
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
356
|
-
await page.click('#general-public');
|
|
357
|
-
await page.click('#logo');
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
it('hides non-matching documents ', async () => {
|
|
361
|
-
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
362
|
-
expect(hiddenTitles).toEqual(['Example booklet 1', 'Example logo']);
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
it('updates filter selection labels ', async () => {
|
|
366
|
-
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
367
|
-
expect(filterSelectionLabels).toEqual(['General public', 'Logo']);
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
it('updates result count text', async () => {
|
|
371
|
-
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
372
|
-
expect(resultsCount).toBe('1');
|
|
373
|
-
});
|
|
543
|
+
it('hides filter elements when the "Close" button is pressed', async () => {
|
|
544
|
+
await page.click('.ons-js-adv-filter__trigger');
|
|
545
|
+
await page.click('.ons-js-adv-filter__close');
|
|
374
546
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
});
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
describe('adding and then removing a filter', () => {
|
|
382
|
-
beforeEach(async () => {
|
|
383
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
384
|
-
await page.click('#general-public');
|
|
385
|
-
await page.click('#logo');
|
|
386
|
-
await page.click('#logo');
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
it('hides non-matching documents ', async () => {
|
|
390
|
-
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
391
|
-
expect(hiddenTitles).toEqual(['Example logo']);
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
it('updates filter selection labels ', async () => {
|
|
395
|
-
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
396
|
-
expect(filterSelectionLabels).toEqual(['General public', 'All types']);
|
|
397
|
-
});
|
|
398
|
-
|
|
399
|
-
it('updates result count text', async () => {
|
|
400
|
-
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
401
|
-
expect(resultsCount).toBe('2');
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
it('hides the "No results" content', async () => {
|
|
405
|
-
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
406
|
-
expect(isHidden).toBe(true);
|
|
407
|
-
});
|
|
408
|
-
});
|
|
409
|
-
|
|
410
|
-
describe('sorting', () => {
|
|
411
|
-
beforeEach(async () => {
|
|
412
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
it('sorts ascending by default', async () => {
|
|
416
|
-
const shownTitles = await getShownDocumentTitles(page);
|
|
417
|
-
expect(shownTitles).toEqual(['Example booklet 1', 'Example booklet 2 with logo', 'Example logo']);
|
|
418
|
-
});
|
|
419
|
-
|
|
420
|
-
it('sorts descending when "sort" selection is set to "desc"', async () => {
|
|
421
|
-
await page.type('#sort', 'O');
|
|
422
|
-
|
|
423
|
-
const shownTitles = await getShownDocumentTitles(page);
|
|
424
|
-
expect(shownTitles).toEqual(['Example logo', 'Example booklet 2 with logo', 'Example booklet 1']);
|
|
425
|
-
});
|
|
426
|
-
});
|
|
427
|
-
|
|
428
|
-
describe('"Reset all filters" button', () => {
|
|
429
|
-
beforeEach(async () => {
|
|
430
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
431
|
-
await page.click('#general-public');
|
|
432
|
-
await page.click('#logo');
|
|
433
|
-
await page.click('.ons-js-adv-filter__reset');
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
it('resets state of all filter checkboxes ', async () => {
|
|
437
|
-
const selector = '.ons-js-adv-filter__item .ons-js-checkbox';
|
|
438
|
-
const checkboxStates = await page.$$eval(selector, (nodes) => nodes.map((node) => `${node.id}: ${node.checked}`));
|
|
439
|
-
|
|
440
|
-
expect(checkboxStates).toEqual(['community-groups: false', 'general-public: false', 'booklet: false', 'logo: false']);
|
|
441
|
-
});
|
|
442
|
-
|
|
443
|
-
it('shows all documents ', async () => {
|
|
444
|
-
const hiddenTitles = await getHiddenDocumentTitles(page);
|
|
445
|
-
expect(hiddenTitles).toEqual([]);
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
it('updates filter selection labels ', async () => {
|
|
449
|
-
const filterSelectionLabels = await getFilterSelectionLabels(page);
|
|
450
|
-
expect(filterSelectionLabels).toEqual(['All audiences', 'All types']);
|
|
451
|
-
});
|
|
452
|
-
|
|
453
|
-
it('updates result count text', async () => {
|
|
454
|
-
const resultsCount = await page.$eval('.ons-js-adv-filter__results-count', (node) => node.textContent.trim());
|
|
455
|
-
expect(resultsCount).toBe('3');
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
it('hides the "No results" content', async () => {
|
|
459
|
-
const isHidden = await page.$eval('.ons-adv-filter__no-results', (node) => node.classList.contains('ons-u-hidden'));
|
|
460
|
-
expect(isHidden).toBe(true);
|
|
461
|
-
});
|
|
462
|
-
});
|
|
463
|
-
|
|
464
|
-
describe('when the viewport is large', () => {
|
|
465
|
-
beforeEach(async () => {
|
|
466
|
-
await setViewport(page, { width: 1650, height: 1050 });
|
|
467
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
afterEach(async () => {
|
|
471
|
-
// Clear viewport size and browser emulation after each test.
|
|
472
|
-
await jestPuppeteer.resetPage();
|
|
473
|
-
});
|
|
474
|
-
|
|
475
|
-
it('hides elements that are only needed for mobile', async () => {
|
|
476
|
-
const displayStyle = await page.$eval('.ons-adv-filter__trigger', (node) => getComputedStyle(node).display);
|
|
477
|
-
expect(displayStyle).toBe('none');
|
|
478
|
-
});
|
|
479
|
-
|
|
480
|
-
it('shows filter elements', async () => {
|
|
481
|
-
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
482
|
-
expect(displayStyle).not.toBe('none');
|
|
483
|
-
});
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
describe('when the viewport is small', () => {
|
|
487
|
-
beforeEach(async () => {
|
|
488
|
-
await page.emulate(iPhoneX);
|
|
489
|
-
await setTestPage('/test', RENDERED_EXAMPLE_PAGE);
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
afterEach(async () => {
|
|
493
|
-
// Clear viewport size and browser emulation after each test.
|
|
494
|
-
await jestPuppeteer.resetPage();
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
it('shows elements that are only needed for mobile', async () => {
|
|
498
|
-
const displayStyle = await page.$eval('.ons-adv-filter__trigger', (node) => getComputedStyle(node).display);
|
|
499
|
-
expect(displayStyle).not.toBe('none');
|
|
500
|
-
});
|
|
501
|
-
|
|
502
|
-
it('hides filter elements', async () => {
|
|
503
|
-
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
504
|
-
expect(displayStyle).toBe('none');
|
|
505
|
-
});
|
|
506
|
-
|
|
507
|
-
it('shows filter elements when the "Show filters" button is pressed', async () => {
|
|
508
|
-
await page.click('.ons-js-adv-filter__trigger');
|
|
509
|
-
|
|
510
|
-
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
511
|
-
expect(displayStyle).not.toBe('none');
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
it('hides the underlying page elements when the "Show filters" button is pressed', async () => {
|
|
515
|
-
await page.click('.ons-js-adv-filter__trigger');
|
|
516
|
-
|
|
517
|
-
const pageIsHidden = await page.$eval('.ons-page', (node) => node.classList.contains('ons-u-d-no'));
|
|
518
|
-
const pageIsAriaHidden = await page.$eval('.ons-page', (node) => node.getAttribute('aria-hidden'));
|
|
519
|
-
|
|
520
|
-
expect(pageIsHidden).toBe(true);
|
|
521
|
-
expect(pageIsAriaHidden).toBe('true');
|
|
522
|
-
});
|
|
523
|
-
|
|
524
|
-
it('hides filter elements when the "Show (n results)" button is pressed', async () => {
|
|
525
|
-
await page.click('.ons-js-adv-filter__trigger');
|
|
526
|
-
await page.click('.ons-js-adv-filter__show');
|
|
527
|
-
|
|
528
|
-
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
529
|
-
expect(displayStyle).toBe('none');
|
|
530
|
-
});
|
|
531
|
-
|
|
532
|
-
it('shows the underlying page elements when the "Show (n results)" button is pressed', async () => {
|
|
533
|
-
await page.click('.ons-js-adv-filter__trigger');
|
|
534
|
-
await page.click('.ons-js-adv-filter__show');
|
|
535
|
-
|
|
536
|
-
const pageIsHidden = await page.$eval('.ons-page', (node) => node.classList.contains('ons-u-d-no'));
|
|
537
|
-
const pageIsAriaHidden = await page.$eval('.ons-page', (node) => node.getAttribute('aria-hidden'));
|
|
538
|
-
|
|
539
|
-
expect(pageIsHidden).toBe(false);
|
|
540
|
-
expect(pageIsAriaHidden).toBe('false');
|
|
541
|
-
});
|
|
542
|
-
|
|
543
|
-
it('hides filter elements when the "Close" button is pressed', async () => {
|
|
544
|
-
await page.click('.ons-js-adv-filter__trigger');
|
|
545
|
-
await page.click('.ons-js-adv-filter__close');
|
|
546
|
-
|
|
547
|
-
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
548
|
-
expect(displayStyle).toBe('none');
|
|
549
|
-
});
|
|
547
|
+
const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
|
|
548
|
+
expect(displayStyle).toBe('none');
|
|
549
|
+
});
|
|
550
550
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
551
|
+
it('shows the underlying page elements when the "Close" button is pressed', async () => {
|
|
552
|
+
await page.click('.ons-js-adv-filter__trigger');
|
|
553
|
+
await page.click('.ons-js-adv-filter__close');
|
|
554
554
|
|
|
555
|
-
|
|
556
|
-
|
|
555
|
+
const pageIsHidden = await page.$eval('.ons-page', (node) => node.classList.contains('ons-u-d-no'));
|
|
556
|
+
const pageIsAriaHidden = await page.$eval('.ons-page', (node) => node.getAttribute('aria-hidden'));
|
|
557
557
|
|
|
558
|
-
|
|
559
|
-
|
|
558
|
+
expect(pageIsHidden).toBe(false);
|
|
559
|
+
expect(pageIsAriaHidden).toBe('false');
|
|
560
|
+
});
|
|
560
561
|
});
|
|
561
|
-
});
|
|
562
562
|
});
|
|
563
563
|
|
|
564
564
|
async function getTextContent(page, selector) {
|
|
565
|
-
|
|
565
|
+
return await page.$$eval(selector, (nodes) => nodes.map((node) => node.textContent.trim()));
|
|
566
566
|
}
|
|
567
567
|
|
|
568
568
|
async function getFilterSelectionLabels(page) {
|
|
569
|
-
|
|
569
|
+
return await getTextContent(page, '.ons-js-adv-filter__selection');
|
|
570
570
|
}
|
|
571
571
|
|
|
572
572
|
async function getHiddenDocumentTitles(page) {
|
|
573
|
-
|
|
573
|
+
return await getTextContent(page, '.ons-js-filter__item.ons-u-hidden .ons-document-list__item-title');
|
|
574
574
|
}
|
|
575
575
|
|
|
576
576
|
async function getShownDocumentTitles(page) {
|
|
577
|
-
|
|
577
|
+
return await getTextContent(page, '.ons-js-filter__item:not(.ons-u-hidden) .ons-document-list__item-title');
|
|
578
578
|
}
|