@ons/design-system 70.0.7 → 70.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -17
- package/components/access-code/_macro.spec.js +145 -145
- package/components/access-code/access-code.dom.js +5 -5
- package/components/access-code/access-code.js +16 -16
- package/components/access-code/access-code.scss +22 -22
- package/components/access-code/access-code.spec.js +17 -17
- package/components/accordion/_macro.spec.js +154 -154
- package/components/accordion/accordion.dom.js +10 -10
- package/components/accordion/accordion.js +50 -50
- package/components/accordion/accordion.spec.js +104 -104
- package/components/address-input/_macro.spec.js +420 -420
- package/components/address-input/autosuggest.address.dom.js +5 -5
- package/components/address-input/autosuggest.address.error.js +77 -77
- package/components/address-input/autosuggest.address.js +357 -357
- package/components/address-input/autosuggest.address.setter.js +95 -95
- package/components/address-input/autosuggest.address.spec.js +668 -651
- package/components/address-input/example-address-input-editable.njk +1 -1
- package/components/address-input/example-address-input.njk +1 -1
- package/components/address-output/_address-output.scss +3 -3
- package/components/address-output/_macro.spec.js +84 -84
- package/components/autosuggest/_autosuggest.scss +114 -114
- package/components/autosuggest/_macro.spec.js +255 -255
- package/components/autosuggest/autosuggest.dom.js +5 -5
- package/components/autosuggest/autosuggest.helpers.js +11 -11
- package/components/autosuggest/autosuggest.helpers.spec.js +73 -73
- package/components/autosuggest/autosuggest.js +20 -20
- package/components/autosuggest/autosuggest.spec.js +542 -536
- package/components/autosuggest/autosuggest.ui.js +478 -475
- package/components/autosuggest/fuse-config.js +17 -17
- package/components/back-to-top/_back-to-top.scss +27 -27
- package/components/back-to-top/_macro.spec.js +49 -49
- package/components/back-to-top/back-to-top.dom.js +5 -5
- package/components/back-to-top/back-to-top.js +52 -52
- package/components/back-to-top/back-to-top.spec.js +106 -106
- package/components/back-to-top/example-back-to-top.njk +6 -6
- package/components/breadcrumbs/_breadcrumbs.scss +63 -65
- package/components/breadcrumbs/_macro.spec.js +91 -91
- package/components/browser-banner/_browser-banner.scss +23 -23
- package/components/browser-banner/_macro.spec.js +92 -92
- package/components/button/_button.scss +482 -483
- package/components/button/_macro.spec.js +363 -363
- package/components/button/button.dom.js +15 -15
- package/components/button/button.js +53 -53
- package/components/button/button.spec.js +248 -240
- package/components/call-to-action/_call-to-action.scss +5 -5
- package/components/call-to-action/_macro.spec.js +28 -28
- package/components/card/_card.scss +23 -23
- package/components/card/_macro.spec.js +180 -180
- package/components/char-check-limit/_macro.spec.js +48 -48
- package/components/char-check-limit/character-check.js +58 -58
- package/components/char-check-limit/character-check.spec.js +173 -173
- package/components/char-check-limit/character-limit.js +40 -40
- package/components/checkboxes/_checkbox-macro.spec.js +355 -355
- package/components/checkboxes/_checkbox.scss +180 -180
- package/components/checkboxes/_checkboxes.scss +37 -27
- package/components/checkboxes/_macro.spec.js +261 -261
- package/components/checkboxes/checkbox-with-autoselect.js +32 -32
- package/components/checkboxes/checkbox-with-fieldset.js +21 -21
- package/components/checkboxes/checkboxes-with-reveal.js +10 -10
- package/components/checkboxes/checkboxes.dom.js +27 -27
- package/components/checkboxes/checkboxes.spec.js +183 -183
- package/components/content-pagination/_content-pagination.scss +41 -41
- package/components/content-pagination/_macro.spec.js +159 -159
- package/components/cookies-banner/_cookies-banner.scss +22 -22
- package/components/cookies-banner/_macro.spec.js +177 -177
- package/components/cookies-banner/cookies-banner.dom.js +7 -7
- package/components/cookies-banner/cookies-banner.js +76 -76
- package/components/cookies-banner/cookies-banner.spec.js +72 -68
- package/components/date-input/_macro.spec.js +338 -338
- package/components/description-list/_description-list.scss +23 -23
- package/components/description-list/_macro.spec.js +144 -144
- package/components/details/_details.scss +109 -109
- package/components/details/_macro.spec.js +132 -132
- package/components/details/details.dom.js +6 -6
- package/components/details/details.js +60 -60
- package/components/details/details.spec.js +106 -106
- package/components/document-list/_macro.spec.js +444 -444
- package/components/document-list/document-list.scss +145 -149
- package/components/download-resources/_download-resources.scss +109 -108
- package/components/download-resources/download-resources.js +907 -900
- package/components/download-resources/download-resources.spec.js +461 -461
- package/components/duration/_macro.spec.js +291 -291
- package/components/error/_macro.spec.js +72 -72
- package/components/external-link/_external-link.scss +19 -19
- package/components/external-link/_macro.spec.js +68 -68
- package/components/feedback/_feedback.scss +31 -31
- package/components/feedback/_macro.spec.js +72 -72
- package/components/field/_field-group.scss +10 -10
- package/components/field/_field.scss +16 -16
- package/components/field/_macro.spec.js +80 -80
- package/components/fieldset/_fieldset.scss +27 -27
- package/components/fieldset/_macro.spec.js +161 -161
- package/components/footer/_footer.scss +45 -45
- package/components/footer/_macro.spec.js +452 -452
- package/components/header/_header.scss +202 -202
- package/components/header/_macro.spec.js +833 -829
- package/components/helpers/_grid.scss +4 -4
- package/components/hero/_hero.scss +48 -48
- package/components/hero/_macro.spec.js +59 -59
- package/components/icon/_icon.scss +44 -44
- package/components/icon/_macro.spec.js +110 -110
- package/components/image/_image.scss +11 -11
- package/components/image/_macro.spec.js +81 -81
- package/components/input/_input-type.scss +86 -89
- package/components/input/_input.scss +123 -124
- package/components/input/_macro.spec.js +604 -604
- package/components/input/character-check.dom.js +5 -5
- package/components/input/input.dom.js +5 -5
- package/components/input/input.js +10 -10
- package/components/input/input.spec.js +18 -18
- package/components/label/_label.scss +24 -24
- package/components/label/_macro.spec.js +173 -170
- package/components/language-selector/_macro.spec.js +97 -97
- package/components/language-selector/language.scss +7 -7
- package/components/list/_list.scss +84 -84
- package/components/list/_macro.spec.js +583 -583
- package/components/message/_macro.njk +5 -5
- package/components/message/_macro.spec.js +74 -74
- package/components/message/_message.scss +39 -39
- package/components/message-list/_macro.spec.js +86 -86
- package/components/message-list/_message-list.scss +16 -16
- package/components/modal/_macro.spec.js +69 -69
- package/components/modal/_modal.scss +36 -36
- package/components/modal/modal.dom.js +6 -6
- package/components/modal/modal.js +89 -89
- package/components/modal/modal.spec.js +50 -50
- package/components/mutually-exclusive/_macro.spec.js +140 -140
- package/components/mutually-exclusive/mutually-exclusive.checkboxes.spec.js +188 -188
- package/components/mutually-exclusive/mutually-exclusive.date.spec.js +211 -211
- package/components/mutually-exclusive/mutually-exclusive.dom.js +5 -5
- package/components/mutually-exclusive/mutually-exclusive.duration.spec.js +210 -210
- package/components/mutually-exclusive/mutually-exclusive.email.spec.js +90 -90
- package/components/mutually-exclusive/mutually-exclusive.js +137 -137
- package/components/mutually-exclusive/mutually-exclusive.multiple-options.checkboxes.spec.js +197 -197
- package/components/mutually-exclusive/mutually-exclusive.number.spec.js +96 -96
- package/components/mutually-exclusive/mutually-exclusive.textarea.spec.js +102 -102
- package/components/navigation/_macro.spec.js +360 -354
- package/components/navigation/_navigation.scss +122 -123
- package/components/navigation/navigation.dom.js +35 -35
- package/components/navigation/navigation.js +49 -49
- package/components/navigation/navigation.spec.js +249 -249
- package/components/pagination/_macro.spec.js +342 -335
- package/components/pagination/_pagination.scss +58 -58
- package/components/panel/_macro.spec.js +372 -372
- package/components/panel/_panel.scss +200 -199
- package/components/password/_macro.spec.js +95 -95
- package/components/password/password.dom.js +5 -5
- package/components/password/password.js +10 -10
- package/components/password/password.spec.js +26 -26
- package/components/phase-banner/_macro.spec.js +86 -86
- package/components/phase-banner/_phase-banner.scss +16 -16
- package/components/question/_macro.spec.js +235 -235
- package/components/question/_question.scss +24 -24
- package/components/quote/_macro.spec.js +52 -52
- package/components/quote/_quote.scss +24 -24
- package/components/radios/_macro.spec.js +524 -524
- package/components/radios/_radio.scss +49 -48
- package/components/radios/_radios.scss +14 -20
- package/components/radios/check-radios.js +21 -21
- package/components/radios/clear-radios.js +45 -45
- package/components/radios/radio-with-fieldset.js +22 -22
- package/components/radios/radios.dom.js +32 -32
- package/components/radios/radios.spec.js +251 -251
- package/components/related-content/_macro.spec.js +109 -109
- package/components/related-content/_related-content.scss +12 -12
- package/components/related-content/_section-macro.spec.js +20 -20
- package/components/relationships/_macro.spec.js +94 -94
- package/components/relationships/_relationships.scss +9 -9
- package/components/relationships/relationships.dom.js +5 -5
- package/components/relationships/relationships.js +18 -18
- package/components/relationships/relationships.spec.js +71 -71
- package/components/reply/_macro.spec.js +47 -47
- package/components/reply/reply-input.js +15 -15
- package/components/reply/reply.dom.js +5 -5
- package/components/reply/reply.spec.js +57 -57
- package/components/section-navigation/_macro.spec.js +210 -210
- package/components/section-navigation/_section-navigation.scss +76 -76
- package/components/select/_macro.spec.js +166 -166
- package/components/share-page/_macro.spec.js +68 -68
- package/components/skip-to-content/_macro.spec.js +54 -54
- package/components/skip-to-content/_skip.scss +30 -30
- package/components/skip-to-content/skip-to-content.dom.js +6 -6
- package/components/skip-to-content/skip-to-content.js +7 -7
- package/components/skip-to-content/skip-to-content.spec.js +21 -21
- package/components/status/_macro.spec.js +53 -53
- package/components/status/_status.scss +32 -32
- package/components/summary/_macro.spec.js +551 -535
- package/components/summary/_summary.scss +191 -195
- package/components/table/_macro.spec.js +499 -499
- package/components/table/_table.scss +204 -201
- package/components/table/scrollable-table.dom.js +5 -5
- package/components/table/scrollable-table.js +60 -60
- package/components/table/sortable-table.dom.js +5 -5
- package/components/table/sortable-table.js +135 -135
- package/components/table/table.spec.js +144 -140
- package/components/table-of-contents/_macro.spec.js +125 -125
- package/components/table-of-contents/_toc.scss +9 -9
- package/components/table-of-contents/toc.dom.js +5 -5
- package/components/table-of-contents/toc.js +30 -30
- package/components/table-of-contents/toc.spec.js +88 -88
- package/components/tabs/_macro.spec.js +92 -92
- package/components/tabs/_tabs.scss +120 -115
- package/components/tabs/tabs.dom.js +5 -5
- package/components/tabs/tabs.js +266 -266
- package/components/tabs/tabs.spec.js +268 -268
- package/components/text-indent/_macro.spec.js +33 -33
- package/components/text-indent/_text-indent.scss +3 -3
- package/components/textarea/_macro.spec.js +238 -238
- package/components/textarea/textarea.dom.js +5 -5
- package/components/textarea/textarea.spec.js +78 -74
- package/components/timeline/_macro.spec.js +83 -83
- package/components/timeline/_timeline.scss +26 -26
- package/components/timeout-modal/_macro.spec.js +47 -47
- package/components/timeout-modal/timeout-modal.dom.js +9 -9
- package/components/timeout-modal/timeout-modal.js +66 -66
- package/components/timeout-modal/timeout-modal.spec.js +157 -157
- package/components/timeout-panel/_macro.spec.js +41 -41
- package/components/timeout-panel/timeout-panel.dom.js +8 -8
- package/components/timeout-panel/timeout-panel.spec.js +118 -118
- package/components/upload/_macro.spec.js +52 -52
- package/components/upload/_upload.scss +28 -28
- package/components/video/_macro.spec.js +42 -42
- package/components/video/_video.scss +16 -16
- package/components/video/video.dom.js +5 -5
- package/components/video/video.js +32 -32
- package/components/video/video.spec.js +103 -97
- package/css/main.css +1 -1
- package/favicons/manifest.json +25 -25
- package/js/abortable-fetch.js +23 -23
- package/js/analytics.js +53 -53
- package/js/cookies-functions.js +135 -135
- package/js/cookies-settings.dom.js +7 -7
- package/js/cookies-settings.js +77 -77
- package/js/cookies-settings.spec.js +106 -106
- package/js/domready.js +8 -8
- package/js/fetch.js +14 -14
- package/js/inpagelink.dom.js +5 -5
- package/js/inpagelink.js +19 -19
- package/js/polyfills.js +0 -1
- package/js/print-button.js +6 -6
- package/js/timeout.js +211 -211
- package/layout/_template.njk +5 -7
- package/package.json +131 -128
- package/scss/base/_forms.scss +10 -10
- package/scss/base/_global.scss +45 -44
- package/scss/base/_typography.scss +20 -20
- package/scss/helpers/_functions.scss +18 -15
- package/scss/helpers/_mixins.scss +59 -53
- package/scss/helpers/_mq.scss +62 -65
- package/scss/objects/_container.scss +20 -20
- package/scss/objects/_page.scss +33 -33
- package/scss/objects/_spacing.scss +10 -10
- package/scss/overrides/hcm.scss +237 -237
- package/scss/overrides/rtl.scss +95 -95
- package/scss/print.scss +47 -47
- package/scss/utilities/_border.scss +7 -7
- package/scss/utilities/_colors.scss +6 -6
- package/scss/utilities/_display.scss +8 -8
- package/scss/utilities/_float.scss +7 -7
- package/scss/utilities/_grid.scss +144 -144
- package/scss/utilities/_highlight.scss +4 -4
- package/scss/utilities/_margin.scss +17 -17
- package/scss/utilities/_pad.scss +15 -15
- package/scss/utilities/_typography.scss +35 -33
- package/scss/utilities/_utilities.scss +8 -8
- package/scss/utilities/_visibility.scss +25 -25
- package/scss/vars/_colors.scss +116 -116
- package/scss/vars/_forms.scss +22 -22
- package/scss/vars/_grid.scss +11 -9
- package/scss/vars/_typography.scss +54 -54
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
export default class CheckboxWithFieldset {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
constructor(context) {
|
|
3
|
+
this.context = context;
|
|
4
|
+
this.checkbox = context.querySelector('.ons-js-checkbox');
|
|
5
|
+
this.childInputs = [...this.context.querySelectorAll('input')];
|
|
6
|
+
this.selectAllChildrenInput = this.context.querySelector('.ons-js-select-all-children');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
if (this.selectAllChildrenInput) {
|
|
9
|
+
this.selectAllChildrenInput.addEventListener('change', this.checkChildInputsOnSelect.bind(this));
|
|
10
|
+
} else {
|
|
11
|
+
this.checkbox.addEventListener('change', this.uncheckChildInputsOnDeselect.bind(this));
|
|
12
|
+
}
|
|
12
13
|
}
|
|
13
|
-
}
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
checkChildInputsOnSelect() {
|
|
16
|
+
this.childInputs.forEach((input) => {
|
|
17
|
+
input.checked = this.selectAllChildrenInput.checked === true ? true : false;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
uncheckChildInputsOnDeselect() {
|
|
22
|
+
if (this.checkbox.checked === false) {
|
|
23
|
+
this.childInputs.forEach((input) => {
|
|
24
|
+
input.checked = false;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
26
27
|
}
|
|
27
|
-
}
|
|
28
28
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export default class Checkboxes {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
constructor(inputs) {
|
|
3
|
+
this.inputs = inputs;
|
|
4
|
+
this.inputs.forEach((input) => input.addEventListener('change', this.setExpandedAttributes.bind(this)));
|
|
5
|
+
this.setExpandedAttributes();
|
|
6
|
+
}
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
setExpandedAttributes() {
|
|
9
|
+
this.inputs
|
|
10
|
+
.filter((input) => input.hasAttribute('aria-haspopup'))
|
|
11
|
+
.forEach((input) => input.setAttribute('aria-expanded', input.checked));
|
|
12
|
+
}
|
|
13
13
|
}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
import domready from '../../js/domready';
|
|
2
2
|
|
|
3
3
|
domready(async () => {
|
|
4
|
-
|
|
4
|
+
const checkboxes = [...document.querySelectorAll('.ons-js-checkbox')];
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
if (checkboxes.length) {
|
|
7
|
+
const Checkboxes = (await import('./checkboxes-with-reveal')).default;
|
|
8
|
+
new Checkboxes(checkboxes);
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const openOther = document.querySelector('.ons-checkbox__other--open');
|
|
11
|
+
if (openOther) {
|
|
12
|
+
const checkboxInput = openOther.parentNode.querySelector('.ons-checkbox__input');
|
|
13
|
+
const CheckCheckbox = (await import('../radios/check-radios')).default;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
new CheckCheckbox(checkboxInput, openOther);
|
|
16
|
+
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
const otherFieldsets = [...document.querySelectorAll('.ons-js-other-fieldset-checkbox')];
|
|
19
|
+
if (otherFieldsets) {
|
|
20
|
+
const CheckboxWithInnerFieldset = (await import('./checkbox-with-fieldset')).default;
|
|
21
|
+
otherFieldsets.forEach((otherFieldset) => {
|
|
22
|
+
const context = otherFieldset.closest('.ons-checkbox');
|
|
23
|
+
new CheckboxWithInnerFieldset(context);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
const autoSelectButtons = [...document.querySelectorAll('.ons-js-auto-selector')];
|
|
28
|
+
if (autoSelectButtons) {
|
|
29
|
+
const CheckboxWithAutoSelect = (await import('./checkbox-with-autoselect')).default;
|
|
30
|
+
autoSelectButtons.forEach((button) => {
|
|
31
|
+
const context = button.parentNode;
|
|
32
|
+
const insideReveal = context.parentNode.parentNode.querySelector('.ons-js-other');
|
|
33
|
+
new CheckboxWithAutoSelect(context, button, insideReveal);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
35
36
|
}
|
|
36
|
-
}
|
|
37
37
|
});
|
|
@@ -1,208 +1,208 @@
|
|
|
1
1
|
import { renderComponent, setTestPage } from '../../tests/helpers/rendering';
|
|
2
2
|
|
|
3
3
|
describe('script: checkboxes', () => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
checkboxes: [
|
|
15
|
-
{
|
|
16
|
-
id: 'bacon-other',
|
|
17
|
-
label: {
|
|
18
|
-
text: 'Bacon',
|
|
19
|
-
},
|
|
20
|
-
value: 'bacon',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
id: 'olives-other',
|
|
24
|
-
label: {
|
|
25
|
-
text: 'Olives',
|
|
26
|
-
},
|
|
27
|
-
value: 'olives',
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
id: 'other-checkbox',
|
|
31
|
-
label: {
|
|
32
|
-
text: 'Other',
|
|
33
|
-
description: 'An answer is required',
|
|
34
|
-
},
|
|
35
|
-
value: 'other',
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
beforeEach(async () => {
|
|
41
|
-
await setTestPage('/test', renderComponent('checkboxes', params));
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
describe('and the autoselect button is clicked', () => {
|
|
45
|
-
beforeEach(async () => {
|
|
46
|
-
await page.click('.ons-js-auto-selector');
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('all checkboxes should be checked', async () => {
|
|
50
|
-
const checkedStates = await page.$$eval('.ons-js-checkbox', (nodes) => nodes.map((node) => node.checked));
|
|
51
|
-
expect(checkedStates).toEqual([true, true, true]);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('the button text should have changed', async () => {
|
|
55
|
-
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
56
|
-
expect(buttonText).toBe('Unselect all');
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
describe('and the autoselect button is clicked to select all and clicked again', () => {
|
|
61
|
-
beforeEach(async () => {
|
|
62
|
-
await page.click('.ons-js-auto-selector');
|
|
63
|
-
await page.click('.ons-js-auto-selector');
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it('all checkboxes should be unchecked', async () => {
|
|
67
|
-
const checkedStates = await page.$$eval('.ons-js-checkbox', (nodes) => nodes.map((node) => node.checked));
|
|
68
|
-
expect(checkedStates).toEqual([false, false, false]);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('the button text should have changed', async () => {
|
|
72
|
-
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
73
|
-
expect(buttonText).toBe('Select all');
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
describe('when all except one checkbox is checked', () => {
|
|
78
|
-
beforeEach(async () => {
|
|
79
|
-
await page.$eval('#olives-other', (node) => (node.checked = true));
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('the button text should be select all', async () => {
|
|
83
|
-
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
84
|
-
expect(buttonText).toBe('Select all');
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
describe('when the only unchecked checkbox is checked', () => {
|
|
89
|
-
beforeEach(async () => {
|
|
90
|
-
await page.click('#bacon-other');
|
|
91
|
-
await page.click('#olives-other');
|
|
92
|
-
await page.click('#other-checkbox');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('the button text should be unselect all', async () => {
|
|
96
|
-
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
97
|
-
expect(buttonText).toBe('Unselect all');
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
describe('reveal and fieldset', function () {
|
|
103
|
-
const params = {
|
|
104
|
-
legend: 'What are your favourite pizza toppings?',
|
|
105
|
-
checkboxesLabel: 'Select all that apply',
|
|
106
|
-
name: 'food-other',
|
|
107
|
-
checkboxes: [
|
|
108
|
-
{
|
|
109
|
-
id: 'bacon-other',
|
|
110
|
-
label: {
|
|
111
|
-
text: 'Bacon',
|
|
112
|
-
},
|
|
113
|
-
value: 'bacon',
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
id: 'olives-other',
|
|
117
|
-
label: {
|
|
118
|
-
text: 'Olives',
|
|
119
|
-
},
|
|
120
|
-
value: 'olives',
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
id: 'other-checkbox',
|
|
124
|
-
label: {
|
|
125
|
-
text: 'Other',
|
|
126
|
-
description: 'An answer is required',
|
|
127
|
-
},
|
|
128
|
-
value: 'other',
|
|
129
|
-
other: {
|
|
130
|
-
id: 'other-textbox',
|
|
131
|
-
name: 'other-answer',
|
|
132
|
-
legend: 'Please specify other',
|
|
133
|
-
otherType: 'checkboxes',
|
|
4
|
+
describe('automatic selection', () => {
|
|
5
|
+
const params = {
|
|
6
|
+
legend: 'What are your favourite pizza toppings?',
|
|
7
|
+
checkboxesLabel: 'Select all that apply',
|
|
8
|
+
name: 'food-other',
|
|
9
|
+
autoSelect: {
|
|
10
|
+
selectAllText: 'Select all',
|
|
11
|
+
unselectAllText: 'Unselect all',
|
|
12
|
+
context: 'following checkboxes',
|
|
13
|
+
},
|
|
134
14
|
checkboxes: [
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
15
|
+
{
|
|
16
|
+
id: 'bacon-other',
|
|
17
|
+
label: {
|
|
18
|
+
text: 'Bacon',
|
|
19
|
+
},
|
|
20
|
+
value: 'bacon',
|
|
139
21
|
},
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
22
|
+
{
|
|
23
|
+
id: 'olives-other',
|
|
24
|
+
label: {
|
|
25
|
+
text: 'Olives',
|
|
26
|
+
},
|
|
27
|
+
value: 'olives',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'other-checkbox',
|
|
31
|
+
label: {
|
|
32
|
+
text: 'Other',
|
|
33
|
+
description: 'An answer is required',
|
|
34
|
+
},
|
|
35
|
+
value: 'other',
|
|
146
36
|
},
|
|
147
|
-
value: 'olives',
|
|
148
|
-
},
|
|
149
37
|
],
|
|
150
|
-
|
|
151
|
-
},
|
|
152
|
-
],
|
|
153
|
-
};
|
|
38
|
+
};
|
|
154
39
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
40
|
+
beforeEach(async () => {
|
|
41
|
+
await setTestPage('/test', renderComponent('checkboxes', params));
|
|
42
|
+
});
|
|
158
43
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
44
|
+
describe('and the autoselect button is clicked', () => {
|
|
45
|
+
beforeEach(async () => {
|
|
46
|
+
await page.click('.ons-js-auto-selector');
|
|
47
|
+
});
|
|
163
48
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
49
|
+
it('all checkboxes should be checked', async () => {
|
|
50
|
+
const checkedStates = await page.$$eval('.ons-js-checkbox', (nodes) => nodes.map((node) => node.checked));
|
|
51
|
+
expect(checkedStates).toEqual([true, true, true]);
|
|
52
|
+
});
|
|
168
53
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
54
|
+
it('the button text should have changed', async () => {
|
|
55
|
+
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
56
|
+
expect(buttonText).toBe('Unselect all');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
173
59
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
60
|
+
describe('and the autoselect button is clicked to select all and clicked again', () => {
|
|
61
|
+
beforeEach(async () => {
|
|
62
|
+
await page.click('.ons-js-auto-selector');
|
|
63
|
+
await page.click('.ons-js-auto-selector');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('all checkboxes should be unchecked', async () => {
|
|
67
|
+
const checkedStates = await page.$$eval('.ons-js-checkbox', (nodes) => nodes.map((node) => node.checked));
|
|
68
|
+
expect(checkedStates).toEqual([false, false, false]);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('the button text should have changed', async () => {
|
|
72
|
+
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
73
|
+
expect(buttonText).toBe('Select all');
|
|
74
|
+
});
|
|
177
75
|
});
|
|
178
76
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
77
|
+
describe('when all except one checkbox is checked', () => {
|
|
78
|
+
beforeEach(async () => {
|
|
79
|
+
await page.$eval('#olives-other', (node) => (node.checked = true));
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('the button text should be select all', async () => {
|
|
83
|
+
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
84
|
+
expect(buttonText).toBe('Select all');
|
|
85
|
+
});
|
|
182
86
|
});
|
|
183
|
-
});
|
|
184
87
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
88
|
+
describe('when the only unchecked checkbox is checked', () => {
|
|
89
|
+
beforeEach(async () => {
|
|
90
|
+
await page.click('#bacon-other');
|
|
91
|
+
await page.click('#olives-other');
|
|
92
|
+
await page.click('#other-checkbox');
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('the button text should be unselect all', async () => {
|
|
96
|
+
const buttonText = await page.$eval('.ons-js-button-text', (node) => node.textContent);
|
|
97
|
+
expect(buttonText).toBe('Unselect all');
|
|
98
|
+
});
|
|
188
99
|
});
|
|
100
|
+
});
|
|
189
101
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
102
|
+
describe('reveal and fieldset', function () {
|
|
103
|
+
const params = {
|
|
104
|
+
legend: 'What are your favourite pizza toppings?',
|
|
105
|
+
checkboxesLabel: 'Select all that apply',
|
|
106
|
+
name: 'food-other',
|
|
107
|
+
checkboxes: [
|
|
108
|
+
{
|
|
109
|
+
id: 'bacon-other',
|
|
110
|
+
label: {
|
|
111
|
+
text: 'Bacon',
|
|
112
|
+
},
|
|
113
|
+
value: 'bacon',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 'olives-other',
|
|
117
|
+
label: {
|
|
118
|
+
text: 'Olives',
|
|
119
|
+
},
|
|
120
|
+
value: 'olives',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'other-checkbox',
|
|
124
|
+
label: {
|
|
125
|
+
text: 'Other',
|
|
126
|
+
description: 'An answer is required',
|
|
127
|
+
},
|
|
128
|
+
value: 'other',
|
|
129
|
+
other: {
|
|
130
|
+
id: 'other-textbox',
|
|
131
|
+
name: 'other-answer',
|
|
132
|
+
legend: 'Please specify other',
|
|
133
|
+
otherType: 'checkboxes',
|
|
134
|
+
checkboxes: [
|
|
135
|
+
{
|
|
136
|
+
id: 'inner-bacon-other',
|
|
137
|
+
label: {
|
|
138
|
+
text: 'Bacon',
|
|
139
|
+
},
|
|
140
|
+
value: 'bacon',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'inner-olives-other',
|
|
144
|
+
label: {
|
|
145
|
+
text: 'Olives',
|
|
146
|
+
},
|
|
147
|
+
value: 'olives',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
};
|
|
194
154
|
|
|
195
|
-
|
|
155
|
+
beforeEach(async () => {
|
|
156
|
+
await setTestPage('/test', renderComponent('checkboxes', params));
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('checkboxes with other options should be given aria-expanded attributes', async () => {
|
|
196
160
|
const ariaExpanded = await page.$eval('#other-checkbox', (node) => node.getAttribute('aria-expanded'));
|
|
197
161
|
expect(ariaExpanded).toBe('false');
|
|
198
|
-
|
|
162
|
+
});
|
|
199
163
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
164
|
+
describe('and a checkbox with an other input is checked', () => {
|
|
165
|
+
beforeEach(async () => {
|
|
166
|
+
await page.click('#other-checkbox');
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('has aria-expanded attribute should be set to true', async () => {
|
|
170
|
+
const ariaExpanded = await page.$eval('#other-checkbox', (node) => node.getAttribute('aria-expanded'));
|
|
171
|
+
expect(ariaExpanded).toBe('true');
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe('and any other checkbox is changed', () => {
|
|
175
|
+
beforeEach(async () => {
|
|
176
|
+
await page.click('#bacon-other');
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it('the checkbox with an other input aria-expanded attribute not change', async () => {
|
|
180
|
+
const ariaExpanded = await page.$eval('#other-checkbox', (node) => node.getAttribute('aria-expanded'));
|
|
181
|
+
expect(ariaExpanded).toBe('true');
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
describe('and a child of other checkbox is checked', () => {
|
|
186
|
+
beforeEach(async () => {
|
|
187
|
+
await page.click('#inner-bacon-other');
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
describe('and a checkbox with an other input is unchecked', () => {
|
|
191
|
+
beforeEach(async () => {
|
|
192
|
+
await page.click('#other-checkbox');
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('its aria-expanded attribute should be set to false', async () => {
|
|
196
|
+
const ariaExpanded = await page.$eval('#other-checkbox', (node) => node.getAttribute('aria-expanded'));
|
|
197
|
+
expect(ariaExpanded).toBe('false');
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it('the child of other checkbox should be unchecked', async () => {
|
|
201
|
+
const innerInputChecked = await page.$eval('#inner-bacon-other', (node) => node.checked);
|
|
202
|
+
expect(innerInputChecked).toBe(false);
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
});
|
|
204
206
|
});
|
|
205
|
-
});
|
|
206
207
|
});
|
|
207
|
-
});
|
|
208
208
|
});
|
|
@@ -1,52 +1,52 @@
|
|
|
1
1
|
.ons-content-pagination {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
&__item {
|
|
12
|
-
margin: 0 0 1.5rem;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
&__link {
|
|
16
|
-
display: inline-block;
|
|
17
|
-
text-decoration: none;
|
|
18
|
-
|
|
19
|
-
&:hover {
|
|
20
|
-
text-decoration: none;
|
|
21
|
-
.ons-content-pagination__link-label {
|
|
22
|
-
text-decoration: underline solid var(--ons-color-text-link-hover) 2px;
|
|
23
|
-
}
|
|
2
|
+
display: block;
|
|
3
|
+
margin: 1.5rem 0 2.5rem;
|
|
4
|
+
|
|
5
|
+
&__list {
|
|
6
|
+
list-style: none;
|
|
7
|
+
margin: 0;
|
|
8
|
+
padding: 0;
|
|
24
9
|
}
|
|
25
10
|
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
&__item {
|
|
12
|
+
margin: 0 0 1.5rem;
|
|
13
|
+
}
|
|
28
14
|
|
|
29
|
-
|
|
15
|
+
&__link {
|
|
16
|
+
display: inline-block;
|
|
30
17
|
text-decoration: none;
|
|
31
|
-
|
|
18
|
+
|
|
19
|
+
&:hover {
|
|
20
|
+
text-decoration: none;
|
|
21
|
+
.ons-content-pagination__link-label {
|
|
22
|
+
text-decoration: underline solid var(--ons-color-text-link-hover) 2px;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&:focus {
|
|
27
|
+
text-decoration: none;
|
|
28
|
+
|
|
29
|
+
.ons-content-pagination__link-label {
|
|
30
|
+
text-decoration: none;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
32
33
|
}
|
|
33
|
-
}
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
&__link-title {
|
|
36
|
+
display: block;
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
&__link-text {
|
|
40
|
+
@extend .ons-u-fs-r--b;
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
margin: 0 0 0 0.5rem;
|
|
43
|
+
vertical-align: middle;
|
|
44
|
+
}
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
&__link-label {
|
|
47
|
+
display: inline-block;
|
|
48
|
+
font-size: 0.9rem;
|
|
49
|
+
margin: 0 0 0 2rem;
|
|
50
|
+
text-decoration: underline;
|
|
51
|
+
}
|
|
52
52
|
}
|