@ons/design-system 70.0.6 → 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 (308) 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.njk +2 -2
  117. package/components/list/_macro.spec.js +583 -583
  118. package/components/message/_macro.njk +5 -5
  119. package/components/message/_macro.spec.js +74 -74
  120. package/components/message/_message.scss +39 -39
  121. package/components/message-list/_macro.spec.js +86 -86
  122. package/components/message-list/_message-list.scss +16 -16
  123. package/components/modal/_macro.spec.js +69 -69
  124. package/components/modal/_modal.scss +36 -36
  125. package/components/modal/modal.dom.js +6 -6
  126. package/components/modal/modal.js +89 -89
  127. package/components/modal/modal.spec.js +50 -50
  128. package/components/mutually-exclusive/_macro.spec.js +140 -140
  129. package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
  130. package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
  131. package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
  132. package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
  133. package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
  134. package/components/mutually-exclusive/mutually-exclusive.js +137 -137
  135. package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
  136. package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
  137. package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
  138. package/components/navigation/_macro.spec.js +360 -354
  139. package/components/navigation/_navigation.scss +122 -123
  140. package/components/navigation/navigation.dom.js +35 -35
  141. package/components/navigation/navigation.js +49 -49
  142. package/components/navigation/navigation.spec.js +249 -249
  143. package/components/pagination/_macro.spec.js +342 -335
  144. package/components/pagination/_pagination.scss +58 -58
  145. package/components/panel/_macro.spec.js +372 -372
  146. package/components/panel/_panel.scss +200 -199
  147. package/components/password/_macro.spec.js +95 -95
  148. package/components/password/password.dom.js +5 -5
  149. package/components/password/password.js +10 -10
  150. package/components/password/password.spec.js +26 -26
  151. package/components/phase-banner/_macro.spec.js +86 -86
  152. package/components/phase-banner/_phase-banner.scss +16 -16
  153. package/components/question/_macro.spec.js +235 -235
  154. package/components/question/_question.scss +24 -24
  155. package/components/quote/_macro.spec.js +52 -52
  156. package/components/quote/_quote.scss +24 -24
  157. package/components/radios/_macro.spec.js +524 -524
  158. package/components/radios/_radio.scss +49 -48
  159. package/components/radios/_radios.scss +14 -20
  160. package/components/radios/check-radios.js +21 -21
  161. package/components/radios/clear-radios.js +45 -45
  162. package/components/radios/radio-with-fieldset.js +22 -22
  163. package/components/radios/radios.dom.js +32 -32
  164. package/components/radios/radios.spec.js +251 -251
  165. package/components/related-content/_macro.spec.js +109 -109
  166. package/components/related-content/_related-content.scss +12 -12
  167. package/components/related-content/_section-macro.spec.js +20 -20
  168. package/components/relationships/_macro.spec.js +94 -94
  169. package/components/relationships/_relationships.scss +9 -9
  170. package/components/relationships/relationships.dom.js +5 -5
  171. package/components/relationships/relationships.js +18 -18
  172. package/components/relationships/relationships.spec.js +71 -71
  173. package/components/reply/_macro.spec.js +47 -47
  174. package/components/reply/reply-input.js +15 -15
  175. package/components/reply/reply.dom.js +5 -5
  176. package/components/reply/reply.spec.js +57 -57
  177. package/components/section-navigation/_macro.spec.js +210 -210
  178. package/components/section-navigation/_section-navigation.scss +76 -76
  179. package/components/select/_macro.spec.js +166 -166
  180. package/components/share-page/_macro.spec.js +68 -68
  181. package/components/skip-to-content/_macro.spec.js +54 -54
  182. package/components/skip-to-content/_skip.scss +30 -30
  183. package/components/skip-to-content/skip-to-content.dom.js +6 -6
  184. package/components/skip-to-content/skip-to-content.js +7 -7
  185. package/components/skip-to-content/skip-to-content.spec.js +21 -21
  186. package/components/status/_macro.spec.js +53 -53
  187. package/components/status/_status.scss +32 -32
  188. package/components/summary/_macro.spec.js +551 -535
  189. package/components/summary/_summary.scss +191 -195
  190. package/components/table/_macro.spec.js +499 -499
  191. package/components/table/_table.scss +204 -201
  192. package/components/table/scrollable-table.dom.js +5 -5
  193. package/components/table/scrollable-table.js +60 -60
  194. package/components/table/sortable-table.dom.js +5 -5
  195. package/components/table/sortable-table.js +135 -135
  196. package/components/table/table.spec.js +144 -140
  197. package/components/table-of-contents/_macro.spec.js +125 -125
  198. package/components/table-of-contents/_toc.scss +9 -9
  199. package/components/table-of-contents/toc.dom.js +5 -5
  200. package/components/table-of-contents/toc.js +30 -30
  201. package/components/table-of-contents/toc.spec.js +88 -88
  202. package/components/tabs/_macro.spec.js +92 -92
  203. package/components/tabs/_tabs.scss +120 -115
  204. package/components/tabs/tabs.dom.js +5 -5
  205. package/components/tabs/tabs.js +266 -266
  206. package/components/tabs/tabs.spec.js +268 -268
  207. package/components/text-indent/_macro.spec.js +33 -33
  208. package/components/text-indent/_text-indent.scss +3 -3
  209. package/components/textarea/_macro.spec.js +238 -238
  210. package/components/textarea/textarea.dom.js +5 -5
  211. package/components/textarea/textarea.spec.js +78 -74
  212. package/components/timeline/_macro.spec.js +83 -83
  213. package/components/timeline/_timeline.scss +26 -26
  214. package/components/timeout-modal/_macro.spec.js +47 -47
  215. package/components/timeout-modal/timeout-modal.dom.js +9 -9
  216. package/components/timeout-modal/timeout-modal.js +66 -66
  217. package/components/timeout-modal/timeout-modal.spec.js +157 -157
  218. package/components/timeout-panel/_macro.spec.js +41 -41
  219. package/components/timeout-panel/timeout-panel.dom.js +8 -8
  220. package/components/timeout-panel/timeout-panel.spec.js +118 -118
  221. package/components/upload/_macro.spec.js +52 -52
  222. package/components/upload/_upload.scss +28 -28
  223. package/components/video/_macro.spec.js +42 -42
  224. package/components/video/_video.scss +16 -16
  225. package/components/video/video.dom.js +5 -5
  226. package/components/video/video.js +32 -32
  227. package/components/video/video.spec.js +103 -97
  228. package/css/main.css +1 -1
  229. package/favicons/android-chrome-192x192.png +0 -0
  230. package/favicons/android-chrome-512x512.png +0 -0
  231. package/favicons/apple-touch-icon.png +0 -0
  232. package/favicons/favicon-16x16.png +0 -0
  233. package/favicons/favicon-32x32.png +0 -0
  234. package/favicons/favicon.ico +0 -0
  235. package/favicons/manifest.json +25 -25
  236. package/favicons/maskable_icon.png +0 -0
  237. package/favicons/opengraph.png +0 -0
  238. package/favicons/twitter.png +0 -0
  239. package/img/large/alison-pritchard-featured.jpg +0 -0
  240. package/img/large/alison-pritchard.jpg +0 -0
  241. package/img/large/census-monuments-lights-featured.jpg +0 -0
  242. package/img/large/census-monuments-lights.jpg +0 -0
  243. package/img/large/mother-and-daughter-in-ireland.jpg +0 -0
  244. package/img/large/mum-and-child-healthcare-belfast.jpg +0 -0
  245. package/img/large/ons-award-winners.jpg +0 -0
  246. package/img/large/placeholder-card.png +0 -0
  247. package/img/large/placeholder-news-medium.png +0 -0
  248. package/img/large/placeholder-news.png +0 -0
  249. package/img/large/placeholder-portrait.png +0 -0
  250. package/img/large/students.jpg +0 -0
  251. package/img/large/woman-in-purple-dress-shirt.jpg +0 -0
  252. package/img/small/alison-pritchard-featured.jpg +0 -0
  253. package/img/small/alison-pritchard.jpg +0 -0
  254. package/img/small/census-monuments-lights-featured.jpg +0 -0
  255. package/img/small/census-monuments-lights.jpg +0 -0
  256. package/img/small/mother-and-daughter-in-ireland.jpg +0 -0
  257. package/img/small/mum-and-child-healthcare-belfast.jpg +0 -0
  258. package/img/small/ons-award-winners.jpg +0 -0
  259. package/img/small/placeholder-card.png +0 -0
  260. package/img/small/placeholder-news-medium.png +0 -0
  261. package/img/small/placeholder-news.png +0 -0
  262. package/img/small/placeholder-portrait.png +0 -0
  263. package/img/small/students.jpg +0 -0
  264. package/img/small/woman-in-purple-dress-shirt.jpg +0 -0
  265. package/js/abortable-fetch.js +23 -23
  266. package/js/analytics.js +53 -53
  267. package/js/cookies-functions.js +135 -135
  268. package/js/cookies-settings.dom.js +7 -7
  269. package/js/cookies-settings.js +77 -77
  270. package/js/cookies-settings.spec.js +106 -106
  271. package/js/domready.js +8 -8
  272. package/js/fetch.js +14 -14
  273. package/js/inpagelink.dom.js +5 -5
  274. package/js/inpagelink.js +19 -19
  275. package/js/polyfills.js +0 -1
  276. package/js/print-button.js +6 -6
  277. package/js/timeout.js +211 -211
  278. package/layout/_template.njk +5 -7
  279. package/package.json +131 -127
  280. package/scripts/main.es5.js +1 -1
  281. package/scripts/main.js +1 -1
  282. package/scss/base/_forms.scss +10 -10
  283. package/scss/base/_global.scss +45 -44
  284. package/scss/base/_typography.scss +20 -20
  285. package/scss/helpers/_functions.scss +18 -15
  286. package/scss/helpers/_mixins.scss +59 -53
  287. package/scss/helpers/_mq.scss +62 -65
  288. package/scss/objects/_container.scss +20 -20
  289. package/scss/objects/_page.scss +33 -33
  290. package/scss/objects/_spacing.scss +10 -10
  291. package/scss/overrides/hcm.scss +237 -237
  292. package/scss/overrides/rtl.scss +95 -95
  293. package/scss/print.scss +47 -47
  294. package/scss/utilities/_border.scss +7 -7
  295. package/scss/utilities/_colors.scss +6 -6
  296. package/scss/utilities/_display.scss +8 -8
  297. package/scss/utilities/_float.scss +7 -7
  298. package/scss/utilities/_grid.scss +144 -144
  299. package/scss/utilities/_highlight.scss +4 -4
  300. package/scss/utilities/_margin.scss +17 -17
  301. package/scss/utilities/_pad.scss +15 -15
  302. package/scss/utilities/_typography.scss +35 -33
  303. package/scss/utilities/_utilities.scss +8 -8
  304. package/scss/utilities/_visibility.scss +25 -25
  305. package/scss/vars/_colors.scss +116 -116
  306. package/scss/vars/_forms.scss +22 -22
  307. package/scss/vars/_grid.scss +11 -9
  308. 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
  }