@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.
Files changed (270) hide show
  1. package/README.md +11 -17
  2. package/components/access-code/_macro.spec.js +145 -145
  3. package/components/access-code/access-code.dom.js +5 -5
  4. package/components/access-code/access-code.js +16 -16
  5. package/components/access-code/access-code.scss +22 -22
  6. package/components/access-code/access-code.spec.js +17 -17
  7. package/components/accordion/_macro.spec.js +154 -154
  8. package/components/accordion/accordion.dom.js +10 -10
  9. package/components/accordion/accordion.js +50 -50
  10. package/components/accordion/accordion.spec.js +104 -104
  11. package/components/address-input/_macro.spec.js +420 -420
  12. package/components/address-input/autosuggest.address.dom.js +5 -5
  13. package/components/address-input/autosuggest.address.error.js +77 -77
  14. package/components/address-input/autosuggest.address.js +357 -357
  15. package/components/address-input/autosuggest.address.setter.js +95 -95
  16. package/components/address-input/autosuggest.address.spec.js +668 -651
  17. package/components/address-input/example-address-input-editable.njk +1 -1
  18. package/components/address-input/example-address-input.njk +1 -1
  19. package/components/address-output/_address-output.scss +3 -3
  20. package/components/address-output/_macro.spec.js +84 -84
  21. package/components/autosuggest/_autosuggest.scss +114 -114
  22. package/components/autosuggest/_macro.spec.js +255 -255
  23. package/components/autosuggest/autosuggest.dom.js +5 -5
  24. package/components/autosuggest/autosuggest.helpers.js +11 -11
  25. package/components/autosuggest/autosuggest.helpers.spec.js +73 -73
  26. package/components/autosuggest/autosuggest.js +20 -20
  27. package/components/autosuggest/autosuggest.spec.js +542 -536
  28. package/components/autosuggest/autosuggest.ui.js +478 -475
  29. package/components/autosuggest/fuse-config.js +17 -17
  30. package/components/back-to-top/_back-to-top.scss +27 -27
  31. package/components/back-to-top/_macro.spec.js +49 -49
  32. package/components/back-to-top/back-to-top.dom.js +5 -5
  33. package/components/back-to-top/back-to-top.js +52 -52
  34. package/components/back-to-top/back-to-top.spec.js +106 -106
  35. package/components/back-to-top/example-back-to-top.njk +6 -6
  36. package/components/breadcrumbs/_breadcrumbs.scss +63 -65
  37. package/components/breadcrumbs/_macro.spec.js +91 -91
  38. package/components/browser-banner/_browser-banner.scss +23 -23
  39. package/components/browser-banner/_macro.spec.js +92 -92
  40. package/components/button/_button.scss +482 -483
  41. package/components/button/_macro.spec.js +363 -363
  42. package/components/button/button.dom.js +15 -15
  43. package/components/button/button.js +53 -53
  44. package/components/button/button.spec.js +248 -240
  45. package/components/call-to-action/_call-to-action.scss +5 -5
  46. package/components/call-to-action/_macro.spec.js +28 -28
  47. package/components/card/_card.scss +23 -23
  48. package/components/card/_macro.spec.js +180 -180
  49. package/components/char-check-limit/_macro.spec.js +48 -48
  50. package/components/char-check-limit/character-check.js +58 -58
  51. package/components/char-check-limit/character-check.spec.js +173 -173
  52. package/components/char-check-limit/character-limit.js +40 -40
  53. package/components/checkboxes/_checkbox-macro.spec.js +355 -355
  54. package/components/checkboxes/_checkbox.scss +180 -180
  55. package/components/checkboxes/_checkboxes.scss +37 -27
  56. package/components/checkboxes/_macro.spec.js +261 -261
  57. package/components/checkboxes/checkbox-with-autoselect.js +32 -32
  58. package/components/checkboxes/checkbox-with-fieldset.js +21 -21
  59. package/components/checkboxes/checkboxes-with-reveal.js +10 -10
  60. package/components/checkboxes/checkboxes.dom.js +27 -27
  61. package/components/checkboxes/checkboxes.spec.js +183 -183
  62. package/components/content-pagination/_content-pagination.scss +41 -41
  63. package/components/content-pagination/_macro.spec.js +159 -159
  64. package/components/cookies-banner/_cookies-banner.scss +22 -22
  65. package/components/cookies-banner/_macro.spec.js +177 -177
  66. package/components/cookies-banner/cookies-banner.dom.js +7 -7
  67. package/components/cookies-banner/cookies-banner.js +76 -76
  68. package/components/cookies-banner/cookies-banner.spec.js +72 -68
  69. package/components/date-input/_macro.spec.js +338 -338
  70. package/components/description-list/_description-list.scss +23 -23
  71. package/components/description-list/_macro.spec.js +144 -144
  72. package/components/details/_details.scss +109 -109
  73. package/components/details/_macro.spec.js +132 -132
  74. package/components/details/details.dom.js +6 -6
  75. package/components/details/details.js +60 -60
  76. package/components/details/details.spec.js +106 -106
  77. package/components/document-list/_macro.spec.js +444 -444
  78. package/components/document-list/document-list.scss +145 -149
  79. package/components/download-resources/_download-resources.scss +109 -108
  80. package/components/download-resources/download-resources.js +907 -900
  81. package/components/download-resources/download-resources.spec.js +461 -461
  82. package/components/duration/_macro.spec.js +291 -291
  83. package/components/error/_macro.spec.js +72 -72
  84. package/components/external-link/_external-link.scss +19 -19
  85. package/components/external-link/_macro.spec.js +68 -68
  86. package/components/feedback/_feedback.scss +31 -31
  87. package/components/feedback/_macro.spec.js +72 -72
  88. package/components/field/_field-group.scss +10 -10
  89. package/components/field/_field.scss +16 -16
  90. package/components/field/_macro.spec.js +80 -80
  91. package/components/fieldset/_fieldset.scss +27 -27
  92. package/components/fieldset/_macro.spec.js +161 -161
  93. package/components/footer/_footer.scss +45 -45
  94. package/components/footer/_macro.spec.js +452 -452
  95. package/components/header/_header.scss +202 -202
  96. package/components/header/_macro.spec.js +833 -829
  97. package/components/helpers/_grid.scss +4 -4
  98. package/components/hero/_hero.scss +48 -48
  99. package/components/hero/_macro.spec.js +59 -59
  100. package/components/icon/_icon.scss +44 -44
  101. package/components/icon/_macro.spec.js +110 -110
  102. package/components/image/_image.scss +11 -11
  103. package/components/image/_macro.spec.js +81 -81
  104. package/components/input/_input-type.scss +86 -89
  105. package/components/input/_input.scss +123 -124
  106. package/components/input/_macro.spec.js +604 -604
  107. package/components/input/character-check.dom.js +5 -5
  108. package/components/input/input.dom.js +5 -5
  109. package/components/input/input.js +10 -10
  110. package/components/input/input.spec.js +18 -18
  111. package/components/label/_label.scss +24 -24
  112. package/components/label/_macro.spec.js +173 -170
  113. package/components/language-selector/_macro.spec.js +97 -97
  114. package/components/language-selector/language.scss +7 -7
  115. package/components/list/_list.scss +84 -84
  116. package/components/list/_macro.spec.js +583 -583
  117. package/components/message/_macro.njk +5 -5
  118. package/components/message/_macro.spec.js +74 -74
  119. package/components/message/_message.scss +39 -39
  120. package/components/message-list/_macro.spec.js +86 -86
  121. package/components/message-list/_message-list.scss +16 -16
  122. package/components/modal/_macro.spec.js +69 -69
  123. package/components/modal/_modal.scss +36 -36
  124. package/components/modal/modal.dom.js +6 -6
  125. package/components/modal/modal.js +89 -89
  126. package/components/modal/modal.spec.js +50 -50
  127. package/components/mutually-exclusive/_macro.spec.js +140 -140
  128. package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
  129. package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
  130. package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
  131. package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
  132. package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
  133. package/components/mutually-exclusive/mutually-exclusive.js +137 -137
  134. package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
  135. package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
  136. package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
  137. package/components/navigation/_macro.spec.js +360 -354
  138. package/components/navigation/_navigation.scss +122 -123
  139. package/components/navigation/navigation.dom.js +35 -35
  140. package/components/navigation/navigation.js +49 -49
  141. package/components/navigation/navigation.spec.js +249 -249
  142. package/components/pagination/_macro.spec.js +342 -335
  143. package/components/pagination/_pagination.scss +58 -58
  144. package/components/panel/_macro.spec.js +372 -372
  145. package/components/panel/_panel.scss +200 -199
  146. package/components/password/_macro.spec.js +95 -95
  147. package/components/password/password.dom.js +5 -5
  148. package/components/password/password.js +10 -10
  149. package/components/password/password.spec.js +26 -26
  150. package/components/phase-banner/_macro.spec.js +86 -86
  151. package/components/phase-banner/_phase-banner.scss +16 -16
  152. package/components/question/_macro.spec.js +235 -235
  153. package/components/question/_question.scss +24 -24
  154. package/components/quote/_macro.spec.js +52 -52
  155. package/components/quote/_quote.scss +24 -24
  156. package/components/radios/_macro.spec.js +524 -524
  157. package/components/radios/_radio.scss +49 -48
  158. package/components/radios/_radios.scss +14 -20
  159. package/components/radios/check-radios.js +21 -21
  160. package/components/radios/clear-radios.js +45 -45
  161. package/components/radios/radio-with-fieldset.js +22 -22
  162. package/components/radios/radios.dom.js +32 -32
  163. package/components/radios/radios.spec.js +251 -251
  164. package/components/related-content/_macro.spec.js +109 -109
  165. package/components/related-content/_related-content.scss +12 -12
  166. package/components/related-content/_section-macro.spec.js +20 -20
  167. package/components/relationships/_macro.spec.js +94 -94
  168. package/components/relationships/_relationships.scss +9 -9
  169. package/components/relationships/relationships.dom.js +5 -5
  170. package/components/relationships/relationships.js +18 -18
  171. package/components/relationships/relationships.spec.js +71 -71
  172. package/components/reply/_macro.spec.js +47 -47
  173. package/components/reply/reply-input.js +15 -15
  174. package/components/reply/reply.dom.js +5 -5
  175. package/components/reply/reply.spec.js +57 -57
  176. package/components/section-navigation/_macro.spec.js +210 -210
  177. package/components/section-navigation/_section-navigation.scss +76 -76
  178. package/components/select/_macro.spec.js +166 -166
  179. package/components/share-page/_macro.spec.js +68 -68
  180. package/components/skip-to-content/_macro.spec.js +54 -54
  181. package/components/skip-to-content/_skip.scss +30 -30
  182. package/components/skip-to-content/skip-to-content.dom.js +6 -6
  183. package/components/skip-to-content/skip-to-content.js +7 -7
  184. package/components/skip-to-content/skip-to-content.spec.js +21 -21
  185. package/components/status/_macro.spec.js +53 -53
  186. package/components/status/_status.scss +32 -32
  187. package/components/summary/_macro.spec.js +551 -535
  188. package/components/summary/_summary.scss +191 -195
  189. package/components/table/_macro.spec.js +499 -499
  190. package/components/table/_table.scss +204 -201
  191. package/components/table/scrollable-table.dom.js +5 -5
  192. package/components/table/scrollable-table.js +60 -60
  193. package/components/table/sortable-table.dom.js +5 -5
  194. package/components/table/sortable-table.js +135 -135
  195. package/components/table/table.spec.js +144 -140
  196. package/components/table-of-contents/_macro.spec.js +125 -125
  197. package/components/table-of-contents/_toc.scss +9 -9
  198. package/components/table-of-contents/toc.dom.js +5 -5
  199. package/components/table-of-contents/toc.js +30 -30
  200. package/components/table-of-contents/toc.spec.js +88 -88
  201. package/components/tabs/_macro.spec.js +92 -92
  202. package/components/tabs/_tabs.scss +120 -115
  203. package/components/tabs/tabs.dom.js +5 -5
  204. package/components/tabs/tabs.js +266 -266
  205. package/components/tabs/tabs.spec.js +268 -268
  206. package/components/text-indent/_macro.spec.js +33 -33
  207. package/components/text-indent/_text-indent.scss +3 -3
  208. package/components/textarea/_macro.spec.js +238 -238
  209. package/components/textarea/textarea.dom.js +5 -5
  210. package/components/textarea/textarea.spec.js +78 -74
  211. package/components/timeline/_macro.spec.js +83 -83
  212. package/components/timeline/_timeline.scss +26 -26
  213. package/components/timeout-modal/_macro.spec.js +47 -47
  214. package/components/timeout-modal/timeout-modal.dom.js +9 -9
  215. package/components/timeout-modal/timeout-modal.js +66 -66
  216. package/components/timeout-modal/timeout-modal.spec.js +157 -157
  217. package/components/timeout-panel/_macro.spec.js +41 -41
  218. package/components/timeout-panel/timeout-panel.dom.js +8 -8
  219. package/components/timeout-panel/timeout-panel.spec.js +118 -118
  220. package/components/upload/_macro.spec.js +52 -52
  221. package/components/upload/_upload.scss +28 -28
  222. package/components/video/_macro.spec.js +42 -42
  223. package/components/video/_video.scss +16 -16
  224. package/components/video/video.dom.js +5 -5
  225. package/components/video/video.js +32 -32
  226. package/components/video/video.spec.js +103 -97
  227. package/css/main.css +1 -1
  228. package/favicons/manifest.json +25 -25
  229. package/js/abortable-fetch.js +23 -23
  230. package/js/analytics.js +53 -53
  231. package/js/cookies-functions.js +135 -135
  232. package/js/cookies-settings.dom.js +7 -7
  233. package/js/cookies-settings.js +77 -77
  234. package/js/cookies-settings.spec.js +106 -106
  235. package/js/domready.js +8 -8
  236. package/js/fetch.js +14 -14
  237. package/js/inpagelink.dom.js +5 -5
  238. package/js/inpagelink.js +19 -19
  239. package/js/polyfills.js +0 -1
  240. package/js/print-button.js +6 -6
  241. package/js/timeout.js +211 -211
  242. package/layout/_template.njk +5 -7
  243. package/package.json +131 -128
  244. package/scss/base/_forms.scss +10 -10
  245. package/scss/base/_global.scss +45 -44
  246. package/scss/base/_typography.scss +20 -20
  247. package/scss/helpers/_functions.scss +18 -15
  248. package/scss/helpers/_mixins.scss +59 -53
  249. package/scss/helpers/_mq.scss +62 -65
  250. package/scss/objects/_container.scss +20 -20
  251. package/scss/objects/_page.scss +33 -33
  252. package/scss/objects/_spacing.scss +10 -10
  253. package/scss/overrides/hcm.scss +237 -237
  254. package/scss/overrides/rtl.scss +95 -95
  255. package/scss/print.scss +47 -47
  256. package/scss/utilities/_border.scss +7 -7
  257. package/scss/utilities/_colors.scss +6 -6
  258. package/scss/utilities/_display.scss +8 -8
  259. package/scss/utilities/_float.scss +7 -7
  260. package/scss/utilities/_grid.scss +144 -144
  261. package/scss/utilities/_highlight.scss +4 -4
  262. package/scss/utilities/_margin.scss +17 -17
  263. package/scss/utilities/_pad.scss +15 -15
  264. package/scss/utilities/_typography.scss +35 -33
  265. package/scss/utilities/_utilities.scss +8 -8
  266. package/scss/utilities/_visibility.scss +25 -25
  267. package/scss/vars/_colors.scss +116 -116
  268. package/scss/vars/_forms.scss +22 -22
  269. package/scss/vars/_grid.scss +11 -9
  270. 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
- 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',
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
- type: 'reset',
25
- text: 'Reset all filters',
26
- classes: 'ons-adv-filter__reset ons-js-adv-filter__reset',
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
- 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
- ],
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
- 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
- ],
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
- type: 'button',
110
- html: 'Show (<span class="ons-js-adv-filter__show-results">7</span> results',
111
- classes: 'ons-js-adv-filter__show',
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
- type: 'button',
115
- html: 'Close',
116
- classes: 'ons-js-adv-filter__close',
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
- id: 'adv-filter-gallery',
139
- classes: 'ons-adv-filter__gallery ons-js-adv-filter__gallery',
140
- attributes: {
141
- 'data-filter-animation': 'off',
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
- 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
- ],
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
- 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
- });
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
- 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
- });
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
- 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
- });
492
+ afterEach(async () => {
493
+ // Clear viewport size and browser emulation after each test.
494
+ await jestPuppeteer.resetPage();
495
+ });
220
496
 
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
- });
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
- it('updates filter selection labels ', async () => {
227
- const filterSelectionLabels = await getFilterSelectionLabels(page);
228
- expect(filterSelectionLabels).toEqual(['Community groups', 'All types']);
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
- 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
- });
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
- 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
- });
510
+ const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
511
+ expect(displayStyle).not.toBe('none');
512
+ });
241
513
 
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
- });
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
- it('hides non-matching documents', async () => {
249
- const hiddenTitles = await getHiddenDocumentTitles(page);
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
- it('updates filter selection labels ', async () => {
254
- const filterSelectionLabels = await getFilterSelectionLabels(page);
255
- expect(filterSelectionLabels).toEqual(['General public', 'All types']);
256
- });
520
+ expect(pageIsHidden).toBe(true);
521
+ expect(pageIsAriaHidden).toBe('true');
522
+ });
257
523
 
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
- });
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
- 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
- });
528
+ const displayStyle = await page.$eval('.ons-adv-filter__panel', (node) => getComputedStyle(node).display);
529
+ expect(displayStyle).toBe('none');
530
+ });
268
531
 
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
- });
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
- it('hides non-matching documents', async () => {
277
- const hiddenTitles = await getHiddenDocumentTitles(page);
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
- it('updates filter selection labels ', async () => {
282
- const filterSelectionLabels = await getFilterSelectionLabels(page);
283
- expect(filterSelectionLabels).toEqual(['All audiences', '2 filters selected']);
284
- });
539
+ expect(pageIsHidden).toBe(false);
540
+ expect(pageIsAriaHidden).toBe('false');
541
+ });
285
542
 
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
- });
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
- 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
- });
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
- 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');
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
- 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'));
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
- expect(pageIsHidden).toBe(false);
559
- expect(pageIsAriaHidden).toBe('false');
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
- return await page.$$eval(selector, (nodes) => nodes.map((node) => node.textContent.trim()));
565
+ return await page.$$eval(selector, (nodes) => nodes.map((node) => node.textContent.trim()));
566
566
  }
567
567
 
568
568
  async function getFilterSelectionLabels(page) {
569
- return await getTextContent(page, '.ons-js-adv-filter__selection');
569
+ return await getTextContent(page, '.ons-js-adv-filter__selection');
570
570
  }
571
571
 
572
572
  async function getHiddenDocumentTitles(page) {
573
- return await getTextContent(page, '.ons-js-filter__item.ons-u-hidden .ons-document-list__item-title');
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
- return await getTextContent(page, '.ons-js-filter__item:not(.ons-u-hidden) .ons-document-list__item-title');
577
+ return await getTextContent(page, '.ons-js-filter__item:not(.ons-u-hidden) .ons-document-list__item-title');
578
578
  }