govuk_frontend_toolkit 4.18.3 → 4.18.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/.gitignore +1 -0
  3. data/app/assets/CHANGELOG.md +5 -0
  4. data/app/assets/Gruntfile.js +21 -22
  5. data/app/assets/README.md +4 -0
  6. data/app/assets/VERSION.txt +1 -1
  7. data/app/assets/docs/javascript.md +29 -28
  8. data/app/assets/javascripts/govuk/analytics/analytics.js +37 -37
  9. data/app/assets/javascripts/govuk/analytics/download-link-tracker.js +21 -21
  10. data/app/assets/javascripts/govuk/analytics/error-tracking.js +19 -19
  11. data/app/assets/javascripts/govuk/analytics/external-link-tracker.js +23 -24
  12. data/app/assets/javascripts/govuk/analytics/google-analytics-universal-tracker.js +71 -70
  13. data/app/assets/javascripts/govuk/analytics/mailto-link-tracker.js +20 -21
  14. data/app/assets/javascripts/govuk/analytics/print-intent.js +19 -20
  15. data/app/assets/javascripts/govuk/modules.js +33 -32
  16. data/app/assets/javascripts/govuk/modules/auto-track-event.js +18 -18
  17. data/app/assets/javascripts/govuk/multivariate-test.js +83 -85
  18. data/app/assets/javascripts/govuk/primary-links.js +39 -38
  19. data/app/assets/javascripts/govuk/selection-buttons.js +57 -58
  20. data/app/assets/javascripts/govuk/shim-links-with-button-role.js +14 -15
  21. data/app/assets/javascripts/govuk/stick-at-top-when-scrolling.js +70 -70
  22. data/app/assets/javascripts/govuk/stop-scrolling-at-footer.js +74 -75
  23. data/app/assets/javascripts/govuk_toolkit.js +1 -1
  24. data/app/assets/javascripts/stageprompt.js +24 -25
  25. data/app/assets/javascripts/vendor/jquery/jquery.player.min.js +1 -1
  26. data/app/assets/package.json +10 -3
  27. data/app/assets/spec/manifest.js +2 -0
  28. data/app/assets/spec/support/console-runner.js +0 -1
  29. data/app/assets/spec/unit/analytics/analytics.spec.js +51 -47
  30. data/app/assets/spec/unit/analytics/download-link-tracker.spec.js +59 -51
  31. data/app/assets/spec/unit/analytics/error-tracking.spec.js +35 -30
  32. data/app/assets/spec/unit/analytics/external-link-tracker.spec.js +69 -61
  33. data/app/assets/spec/unit/analytics/google-analytics-universal-tracker.spec.js +129 -122
  34. data/app/assets/spec/unit/analytics/mailto-link-tracker.spec.js +55 -47
  35. data/app/assets/spec/unit/modules.spec.js +82 -78
  36. data/app/assets/spec/unit/modules/auto-track-event.spec.js +45 -40
  37. data/app/assets/spec/unit/multivariate-test.spec.js +150 -145
  38. data/app/assets/spec/unit/primary-links.spec.js +53 -47
  39. data/app/assets/spec/unit/selection-button.spec.js +701 -693
  40. data/app/assets/spec/unit/shim-links-with-button-role.spec.js +33 -28
  41. data/app/assets/spec/unit/show-hide-content.spec.js +5 -1
  42. data/app/assets/spec/unit/stick-at-top-when-scrolling.spec.js +104 -107
  43. metadata +2 -2
@@ -1,49 +1,55 @@
1
- describe('primary-links', function(){
2
- var shortList, mediumList, longList;
1
+ /* global describe it expect beforeEach spyOn */
2
+
3
+ var $ = window.jQuery
4
+
5
+ describe('primary-links', function () {
6
+ 'use strict'
7
+ var GOVUK = window.GOVUK
8
+
9
+ var shortList, mediumList
3
10
 
4
11
  beforeEach(function () {
5
- shortList = $('<ul><li class="primary">one</li><li>two</li></ul>');
6
- mediumList = $('<ul><li class="primary">one</li><li>two</li><li>three</li></ul>');
7
- longList = $('<ul><li class="primary">one</li><li class="primary">two</li><li>three</li><li>four</li></ul>');
8
- });
9
-
10
- it('visually hides extra links', function(){
11
- var list = new GOVUK.PrimaryList(mediumList, '.primary');
12
-
13
- expect(mediumList.find('.visuallyhidden').length).toBe(2);
14
- });
15
-
16
- it('creates appropriate toggle text', function(){
17
- var short = new GOVUK.PrimaryList(shortList, '.primary');
18
- var medium = new GOVUK.PrimaryList(mediumList, '.primary');
19
-
20
- expect(short.toggleText()).toEqual('+1 other');
21
- expect(medium.toggleText()).toEqual('+2 others');
22
- });
23
-
24
- it('add a toggle link', function(){
25
- var container = $('<div>').append(mediumList);
26
- var list = new GOVUK.PrimaryList(mediumList, '.primary');
27
-
28
- expect(container.find('a').length).toBe(1);
29
- });
30
-
31
- it('show extra links when toggled', function(){
32
- var list = new GOVUK.PrimaryList(mediumList, '.primary');
33
- var event = { preventDefault: function(){} };
34
- spyOn(event, 'preventDefault');
35
- spyOn(list, 'showExtraLinks');
36
-
37
- list.toggleLinks(event);
38
- expect(event.preventDefault).toHaveBeenCalled();
39
- expect(list.showExtraLinks).toHaveBeenCalled();
40
- });
41
-
42
- it('only adds toggle if more than one extra link', function(){
43
- var short = new GOVUK.PrimaryList(shortList, '.primary');
44
- var medium = new GOVUK.PrimaryList(mediumList, '.primary');
45
-
46
- expect(shortList.find('.visuallyhidden').length).toBe(0);
47
- expect(mediumList.find('.visuallyhidden').length).toBe(2);
48
- });
49
- });
12
+ shortList = $('<ul><li class="primary">one</li><li>two</li></ul>')
13
+ mediumList = $('<ul><li class="primary">one</li><li>two</li><li>three</li></ul>')
14
+ })
15
+
16
+ it('visually hides extra links', function () {
17
+ new GOVUK.PrimaryList(mediumList, '.primary') // eslint-disable-line no-new
18
+
19
+ expect(mediumList.find('.visuallyhidden').length).toBe(2)
20
+ })
21
+
22
+ it('creates appropriate toggle text', function () {
23
+ var short = new GOVUK.PrimaryList(shortList, '.primary')
24
+ var medium = new GOVUK.PrimaryList(mediumList, '.primary')
25
+
26
+ expect(short.toggleText()).toEqual('+1 other')
27
+ expect(medium.toggleText()).toEqual('+2 others')
28
+ })
29
+
30
+ it('add a toggle link', function () {
31
+ var container = $('<div>').append(mediumList)
32
+ new GOVUK.PrimaryList(mediumList, '.primary') // eslint-disable-line no-new
33
+
34
+ expect(container.find('a').length).toBe(1)
35
+ })
36
+
37
+ it('show extra links when toggled', function () {
38
+ var list = new GOVUK.PrimaryList(mediumList, '.primary')
39
+ var event = { preventDefault: function () {} }
40
+ spyOn(event, 'preventDefault')
41
+ spyOn(list, 'showExtraLinks')
42
+
43
+ list.toggleLinks(event)
44
+ expect(event.preventDefault).toHaveBeenCalled()
45
+ expect(list.showExtraLinks).toHaveBeenCalled()
46
+ })
47
+
48
+ it('only adds toggle if more than one extra link', function () {
49
+ new GOVUK.PrimaryList(shortList, '.primary') // eslint-disable-line no-new
50
+ new GOVUK.PrimaryList(mediumList, '.primary') // eslint-disable-line no-new
51
+
52
+ expect(shortList.find('.visuallyhidden').length).toBe(0)
53
+ expect(mediumList.find('.visuallyhidden').length).toBe(2)
54
+ })
55
+ })
@@ -1,9 +1,17 @@
1
- describe("selection-buttons", function () {
2
- var $radioButtons,
3
- $radioLabels,
4
- $checkboxButtons,
5
- $checkboxLabels,
6
- buttonsInstance;
1
+ /* global describe it expect beforeEach afterEach spyOn */
2
+
3
+ var $ = window.jQuery
4
+
5
+ describe('selection-buttons', function () {
6
+ 'use strict'
7
+ var GOVUK = window.GOVUK
8
+
9
+ var $radioButtons
10
+ var $radioLabels
11
+ var $checkboxButtons
12
+ var $checkboxLabels
13
+ var buttonsInstance
14
+ var $content
7
15
 
8
16
  beforeEach(function () {
9
17
  $radioLabels = $(
@@ -19,7 +27,7 @@ describe("selection-buttons", function () {
19
27
  'Large' +
20
28
  '<input type="radio" name="size" id="large" value="large" />' +
21
29
  '</label>'
22
- );
30
+ )
23
31
  $checkboxLabels = $(
24
32
  '<label class="selectable">' +
25
33
  'Eggs' +
@@ -33,721 +41,721 @@ describe("selection-buttons", function () {
33
41
  'Fruit' +
34
42
  '<input id="fruit" name="food" value="fruit" type="checkbox" />' +
35
43
  '</label>'
36
- );
37
- $radioButtons = $radioLabels.find('input');
38
- $checkboxButtons = $checkboxLabels.find('input');
39
- $radioForm = $('<form action="" method="post" />');
40
- $checkboxForm = $('<form action="" method="post" />');
41
- $content = $('<div id="content" />');
42
- $radioForm.append($radioLabels);
43
- $checkboxForm.append($checkboxLabels);
44
- $content.append($radioForm);
45
- $content.append($checkboxForm);
46
- $(document.body).append($content);
47
- });
44
+ )
45
+ $radioButtons = $radioLabels.find('input')
46
+ $checkboxButtons = $checkboxLabels.find('input')
47
+ var $radioForm = $('<form action="" method="post" />')
48
+ var $checkboxForm = $('<form action="" method="post" />')
49
+ $content = $('<div id="content" />')
50
+ $radioForm.append($radioLabels)
51
+ $checkboxForm.append($checkboxLabels)
52
+ $content.append($radioForm)
53
+ $content.append($checkboxForm)
54
+ $(document.body).append($content)
55
+ })
48
56
 
49
57
  afterEach(function () {
50
- $content.remove();
51
- });
52
-
53
- describe("When buttonsInstance = new GOVUK.SelectionButtons is called with a jQuery object", function () {
54
- describe("When that object contains only radio inputs", function () {
55
- describe("At the point it is called", function () {
56
- it("Should do nothing if no radios are checked", function () {
57
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
58
- expect($radioLabels.eq(0).hasClass('selected')).toBe(false);
59
- expect($radioLabels.eq(1).hasClass('selected')).toBe(false);
60
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
61
- });
62
-
63
- it("Should mark checked radios with the selected class", function () {
64
- $radioButtons.eq(0).prop('checked', true);
65
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
66
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
67
- });
68
-
69
- it("Should mark checked radios with the custom selected class if given", function () {
70
- $radioButtons.eq(0).prop('checked', true);
71
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons, { 'selectedClass' : 'selectable-selected' });
72
- expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true);
73
- });
74
- });
75
-
76
- describe("If one of those radios receives focus", function () {
77
- it("Should add the focused class to that radio", function () {
78
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
79
- $radioButtons.eq(0).focus();
80
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
81
- });
82
-
83
- it("Should add a custom focused class to that radio if specified as an option", function () {
84
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons, { 'focusedClass' : 'selectable-focused' });
85
- $radioButtons.eq(0).focus();
86
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
87
- });
88
- });
89
-
90
- describe("If one of those radios loses focus", function () {
91
- it("Should remove the focused class from that radio", function () {
92
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
93
- $radioButtons.eq(0).focus();
94
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
95
- $radioButtons.eq(0).blur();
96
- expect($radioLabels.eq(0).hasClass('focused')).toBe(false);
97
- });
98
-
99
- it("Should add a custom focused class to that radio if specified as an option", function () {
100
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons, { 'focusedClass' : 'selectable-focused' });
101
- $radioButtons.eq(0).focus();
102
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
103
- $radioButtons.eq(0).blur();
104
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(false);
105
- });
106
- });
107
-
108
- describe("If one of those radios is clicked", function () {
109
- it("Should mark that radio with the selected class", function () {
110
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
111
- $radioButtons.eq(0).trigger('click');
112
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
113
- });
114
-
115
- it("Should remove the selected class from all other radios", function () {
116
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
117
- $radioLabels.eq(1).addClass('selected');
118
- $radioButtons.eq(0).trigger('click');
119
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
120
- });
121
- });
122
- });
123
-
124
- describe("When that object contains only checkbox inputs", function () {
125
- describe("At the point it is called", function () {
126
- it("Should do nothing if no checkboxes are checked", function () {
127
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons);
128
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false);
129
- expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false);
130
- expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false);
131
- });
132
-
133
- it("Should mark checked checkboxes with the selected class", function () {
134
- $checkboxButtons.eq(0).prop('checked', true);
135
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons);
136
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
137
- });
138
-
139
- it("Should mark all checked checkboxes with the selected class if there are more than one", function () {
140
- $checkboxButtons.eq(0).prop('checked', true);
141
- $checkboxButtons.eq(1).prop('checked', true);
142
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons);
143
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
144
- expect($checkboxLabels.eq(1).hasClass('selected')).toBe(true);
145
- });
146
-
147
- it("Should mark checked checkboxes with the custom selected class if given", function () {
148
- $checkboxButtons.eq(0).prop('checked', true);
149
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'selectedClass' : 'selectable-selected' });
150
- expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true);
151
- });
152
- });
153
-
154
- describe("If one of those checkboxes receives focus", function () {
155
- it("Should add the focused class to that checkbox", function () {
156
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons);
157
- $checkboxButtons.eq(0).focus();
158
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
159
- });
160
-
161
- it("Should add a custom focused class to that checkbox if specified as an option", function () {
162
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'focusedClass' : 'selectable-focused' });
163
- $checkboxButtons.eq(0).focus();
164
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
165
- });
166
- });
167
-
168
- describe("If one of those checkboxes loses focus", function () {
169
- it("Should add the focused class to that checkbox", function () {
170
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons);
171
- $checkboxButtons.eq(0).focus();
172
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
173
- $checkboxButtons.eq(0).blur();
174
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false);
175
- });
176
-
177
- it("Should add a custom focused class to that checkbox if specified as an option", function () {
178
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'focusedClass' : 'selectable-focused' });
179
- $checkboxButtons.eq(0).focus();
180
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
181
- $checkboxButtons.eq(0).blur();
182
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(false);
183
- });
184
- });
185
-
186
- describe("If one of those checkboxes is clicked", function () {
187
- it("Should add the selected class to that checkbox", function () {
188
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons);
189
- $checkboxButtons.eq(0).trigger('click');
190
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
191
- });
192
-
193
- it("Should add the selected class to that checkbox", function () {
194
- buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'selectedClass' : 'selectable-selected' });
195
- $checkboxButtons.eq(0).trigger('click');
196
- expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true);
197
- });
198
- });
199
- });
200
-
201
- describe("When that object contains a mixture of checkbox and radio inputs", function () {
202
- var $mixedButtons;
58
+ $content.remove()
59
+ })
60
+
61
+ describe('When buttonsInstance = new GOVUK.SelectionButtons is called with a jQuery object', function () {
62
+ describe('When that object contains only radio inputs', function () {
63
+ describe('At the point it is called', function () {
64
+ it('Should do nothing if no radios are checked', function () {
65
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
66
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(false)
67
+ expect($radioLabels.eq(1).hasClass('selected')).toBe(false)
68
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
69
+ })
70
+
71
+ it('Should mark checked radios with the selected class', function () {
72
+ $radioButtons.eq(0).prop('checked', true)
73
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
74
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
75
+ })
76
+
77
+ it('Should mark checked radios with the custom selected class if given', function () {
78
+ $radioButtons.eq(0).prop('checked', true)
79
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons, { 'selectedClass': 'selectable-selected' })
80
+ expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true)
81
+ })
82
+ })
83
+
84
+ describe('If one of those radios receives focus', function () {
85
+ it('Should add the focused class to that radio', function () {
86
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
87
+ $radioButtons.eq(0).focus()
88
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
89
+ })
90
+
91
+ it('Should add a custom focused class to that radio if specified as an option', function () {
92
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons, { 'focusedClass': 'selectable-focused' })
93
+ $radioButtons.eq(0).focus()
94
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
95
+ })
96
+ })
97
+
98
+ describe('If one of those radios loses focus', function () {
99
+ it('Should remove the focused class from that radio', function () {
100
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
101
+ $radioButtons.eq(0).focus()
102
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
103
+ $radioButtons.eq(0).blur()
104
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(false)
105
+ })
106
+
107
+ it('Should add a custom focused class to that radio if specified as an option', function () {
108
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons, { 'focusedClass': 'selectable-focused' })
109
+ $radioButtons.eq(0).focus()
110
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
111
+ $radioButtons.eq(0).blur()
112
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(false)
113
+ })
114
+ })
115
+
116
+ describe('If one of those radios is clicked', function () {
117
+ it('Should mark that radio with the selected class', function () {
118
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
119
+ $radioButtons.eq(0).trigger('click')
120
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
121
+ })
122
+
123
+ it('Should remove the selected class from all other radios', function () {
124
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
125
+ $radioLabels.eq(1).addClass('selected')
126
+ $radioButtons.eq(0).trigger('click')
127
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
128
+ })
129
+ })
130
+ })
131
+
132
+ describe('When that object contains only checkbox inputs', function () {
133
+ describe('At the point it is called', function () {
134
+ it('Should do nothing if no checkboxes are checked', function () {
135
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons)
136
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false)
137
+ expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false)
138
+ expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false)
139
+ })
140
+
141
+ it('Should mark checked checkboxes with the selected class', function () {
142
+ $checkboxButtons.eq(0).prop('checked', true)
143
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons)
144
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
145
+ })
146
+
147
+ it('Should mark all checked checkboxes with the selected class if there are more than one', function () {
148
+ $checkboxButtons.eq(0).prop('checked', true)
149
+ $checkboxButtons.eq(1).prop('checked', true)
150
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons)
151
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
152
+ expect($checkboxLabels.eq(1).hasClass('selected')).toBe(true)
153
+ })
154
+
155
+ it('Should mark checked checkboxes with the custom selected class if given', function () {
156
+ $checkboxButtons.eq(0).prop('checked', true)
157
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'selectedClass': 'selectable-selected' })
158
+ expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true)
159
+ })
160
+ })
161
+
162
+ describe('If one of those checkboxes receives focus', function () {
163
+ it('Should add the focused class to that checkbox', function () {
164
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons)
165
+ $checkboxButtons.eq(0).focus()
166
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
167
+ })
168
+
169
+ it('Should add a custom focused class to that checkbox if specified as an option', function () {
170
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'focusedClass': 'selectable-focused' })
171
+ $checkboxButtons.eq(0).focus()
172
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
173
+ })
174
+ })
175
+
176
+ describe('If one of those checkboxes loses focus', function () {
177
+ it('Should add the focused class to that checkbox', function () {
178
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons)
179
+ $checkboxButtons.eq(0).focus()
180
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
181
+ $checkboxButtons.eq(0).blur()
182
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false)
183
+ })
184
+
185
+ it('Should add a custom focused class to that checkbox if specified as an option', function () {
186
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'focusedClass': 'selectable-focused' })
187
+ $checkboxButtons.eq(0).focus()
188
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
189
+ $checkboxButtons.eq(0).blur()
190
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(false)
191
+ })
192
+ })
193
+
194
+ describe('If one of those checkboxes is clicked', function () {
195
+ it('Should add the selected class to that checkbox', function () {
196
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons)
197
+ $checkboxButtons.eq(0).trigger('click')
198
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
199
+ })
200
+
201
+ it('Should add the selected class to that checkbox', function () {
202
+ buttonsInstance = new GOVUK.SelectionButtons($checkboxButtons, { 'selectedClass': 'selectable-selected' })
203
+ $checkboxButtons.eq(0).trigger('click')
204
+ expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true)
205
+ })
206
+ })
207
+ })
208
+
209
+ describe('When that object contains a mixture of checkbox and radio inputs', function () {
210
+ var $mixedButtons
203
211
 
204
212
  beforeEach(function () {
205
- $mixedButtons = $checkboxButtons.add($radioButtons);
206
- });
207
-
208
- describe("At the point it is called", function () {
209
- it("Should do nothing if no checkboxes or radios are checked", function () {
210
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
211
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false);
212
- expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false);
213
- expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false);
214
- expect($radioLabels.eq(0).hasClass('selected')).toBe(false);
215
- expect($radioLabels.eq(1).hasClass('selected')).toBe(false);
216
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
217
- });
218
-
219
- it("Should mark checked checkboxes or radios with the selected class", function () {
220
- $mixedButtons.eq(0).prop('checked', true);
221
- $mixedButtons.eq(3).prop('checked', true);
222
-
223
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
224
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
225
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
226
- });
227
-
228
- it("Should mark checked checkboxes or radios with the custom selected class if given", function () {
229
- $mixedButtons.eq(0).prop('checked', true);
230
- $mixedButtons.eq(3).prop('checked', true);
231
-
232
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'selectedClass' : 'selectable-selected' });
233
- expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true);
234
- expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true);
235
- });
236
- });
237
-
238
- describe("If a checkbox in the set receives focus", function () {
239
- it("Should add the focused class to that checkbox", function () {
240
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
241
- $checkboxButtons.eq(0).focus();
242
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
243
- });
244
-
245
- it("Should add a custom focused class to that checkbox if specified as an option", function () {
246
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass' : 'selectable-focused' });
247
- $checkboxButtons.eq(0).focus();
248
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
249
- });
250
- });
251
-
252
- describe("If a checkbox in the set loses focus", function () {
253
- it("Should add the focused class to that checkbox", function () {
254
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
255
- $checkboxButtons.eq(0).focus();
256
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
257
- $checkboxButtons.eq(0).blur();
258
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false);
259
- });
260
-
261
- it("Should add a custom focused class to that checkbox if specified as an option", function () {
262
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass' : 'selectable-focused' });
263
- $checkboxButtons.eq(0).focus();
264
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
265
- $checkboxButtons.eq(0).blur();
266
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(false);
267
- });
268
- });
269
-
270
- describe("If one of those checkboxes is clicked", function () {
271
- it("Should add the selected class to that checkbox", function () {
272
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
273
- $checkboxButtons.eq(0).trigger('click');
274
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
275
- });
276
-
277
- it("Should add the selected class to that checkbox", function () {
278
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'selectedClass' : 'selectable-selected' });
279
- $checkboxButtons.eq(0).trigger('click');
280
- expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true);
281
- });
282
- });
283
-
284
- describe("If a radio in the set receives focus", function () {
285
- it("Should add the focused class to that radio", function () {
286
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
287
- $radioButtons.eq(0).focus();
288
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
289
- });
290
-
291
- it("Should add a custom focused class to that radio if specified as an option", function () {
292
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass' : 'selectable-focused' });
293
- $radioButtons.eq(0).focus();
294
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
295
- });
296
- });
297
-
298
- describe("If a radio in the set loses focus", function () {
299
- it("Should remove the focused class from that radio", function () {
300
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
301
- $radioButtons.eq(0).focus();
302
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
303
- $radioButtons.eq(0).blur();
304
- expect($radioLabels.eq(0).hasClass('focused')).toBe(false);
305
- });
306
-
307
- it("Should add a custom focused class to that radio if specified as an option", function () {
308
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass' : 'selectable-focused' });
309
- $radioButtons.eq(0).focus();
310
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
311
- $radioButtons.eq(0).blur();
312
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(false);
313
- });
314
- });
315
-
316
- describe("If a radio in the set is clicked", function () {
317
- it("Should mark that radio with the selected class", function () {
318
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
319
- $radioButtons.eq(0).trigger('click');
320
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
321
- });
322
-
323
- it("Should remove the selected class from all other radios", function () {
324
- buttonsInstance = new GOVUK.SelectionButtons($mixedButtons);
325
- $radioLabels.eq(1).addClass('selected');
326
- $radioButtons.eq(0).trigger('click');
327
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
328
- });
329
- });
330
- });
331
- });
332
-
333
- describe("When new GOVUK.SelectionButtons is called with a selector", function () {
334
- describe("When that selector matches radio inputs", function () {
213
+ $mixedButtons = $checkboxButtons.add($radioButtons)
214
+ })
215
+
216
+ describe('At the point it is called', function () {
217
+ it('Should do nothing if no checkboxes or radios are checked', function () {
218
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
219
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false)
220
+ expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false)
221
+ expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false)
222
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(false)
223
+ expect($radioLabels.eq(1).hasClass('selected')).toBe(false)
224
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
225
+ })
226
+
227
+ it('Should mark checked checkboxes or radios with the selected class', function () {
228
+ $mixedButtons.eq(0).prop('checked', true)
229
+ $mixedButtons.eq(3).prop('checked', true)
230
+
231
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
232
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
233
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
234
+ })
235
+
236
+ it('Should mark checked checkboxes or radios with the custom selected class if given', function () {
237
+ $mixedButtons.eq(0).prop('checked', true)
238
+ $mixedButtons.eq(3).prop('checked', true)
239
+
240
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'selectedClass': 'selectable-selected' })
241
+ expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true)
242
+ expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true)
243
+ })
244
+ })
245
+
246
+ describe('If a checkbox in the set receives focus', function () {
247
+ it('Should add the focused class to that checkbox', function () {
248
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
249
+ $checkboxButtons.eq(0).focus()
250
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
251
+ })
252
+
253
+ it('Should add a custom focused class to that checkbox if specified as an option', function () {
254
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass': 'selectable-focused' })
255
+ $checkboxButtons.eq(0).focus()
256
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
257
+ })
258
+ })
259
+
260
+ describe('If a checkbox in the set loses focus', function () {
261
+ it('Should add the focused class to that checkbox', function () {
262
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
263
+ $checkboxButtons.eq(0).focus()
264
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
265
+ $checkboxButtons.eq(0).blur()
266
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false)
267
+ })
268
+
269
+ it('Should add a custom focused class to that checkbox if specified as an option', function () {
270
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass': 'selectable-focused' })
271
+ $checkboxButtons.eq(0).focus()
272
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
273
+ $checkboxButtons.eq(0).blur()
274
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(false)
275
+ })
276
+ })
277
+
278
+ describe('If one of those checkboxes is clicked', function () {
279
+ it('Should add the selected class to that checkbox', function () {
280
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
281
+ $checkboxButtons.eq(0).trigger('click')
282
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
283
+ })
284
+
285
+ it('Should add the selected class to that checkbox', function () {
286
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'selectedClass': 'selectable-selected' })
287
+ $checkboxButtons.eq(0).trigger('click')
288
+ expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true)
289
+ })
290
+ })
291
+
292
+ describe('If a radio in the set receives focus', function () {
293
+ it('Should add the focused class to that radio', function () {
294
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
295
+ $radioButtons.eq(0).focus()
296
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
297
+ })
298
+
299
+ it('Should add a custom focused class to that radio if specified as an option', function () {
300
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass': 'selectable-focused' })
301
+ $radioButtons.eq(0).focus()
302
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
303
+ })
304
+ })
305
+
306
+ describe('If a radio in the set loses focus', function () {
307
+ it('Should remove the focused class from that radio', function () {
308
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
309
+ $radioButtons.eq(0).focus()
310
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
311
+ $radioButtons.eq(0).blur()
312
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(false)
313
+ })
314
+
315
+ it('Should add a custom focused class to that radio if specified as an option', function () {
316
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons, { 'focusedClass': 'selectable-focused' })
317
+ $radioButtons.eq(0).focus()
318
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
319
+ $radioButtons.eq(0).blur()
320
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(false)
321
+ })
322
+ })
323
+
324
+ describe('If a radio in the set is clicked', function () {
325
+ it('Should mark that radio with the selected class', function () {
326
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
327
+ $radioButtons.eq(0).trigger('click')
328
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
329
+ })
330
+
331
+ it('Should remove the selected class from all other radios', function () {
332
+ buttonsInstance = new GOVUK.SelectionButtons($mixedButtons)
333
+ $radioLabels.eq(1).addClass('selected')
334
+ $radioButtons.eq(0).trigger('click')
335
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
336
+ })
337
+ })
338
+ })
339
+ })
340
+
341
+ describe('When new GOVUK.SelectionButtons is called with a selector', function () {
342
+ describe('When that selector matches radio inputs', function () {
335
343
  afterEach(function () {
336
- buttonsInstance.destroy();
337
- });
338
-
339
- describe("At the point it is called", function () {
340
- it("Should mark radios with the selection-button-radio class", function () {
341
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
342
- expect($radioLabels.eq(0).hasClass('selection-button-radio')).toBe(true);
343
- expect($radioLabels.eq(1).hasClass('selection-button-radio')).toBe(true);
344
- expect($radioLabels.eq(2).hasClass('selection-button-radio')).toBe(true);
345
- });
346
-
347
- it("Should not add a selected class if no radios are checked", function () {
348
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
349
- expect($radioLabels.eq(0).hasClass('selected')).toBe(false);
350
- expect($radioLabels.eq(1).hasClass('selected')).toBe(false);
351
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
352
- });
353
-
354
- it("Should mark checked radios with the selected class", function () {
355
- $radioButtons.eq(0).prop('checked', true);
356
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
357
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
358
- });
359
-
360
- it("Should mark checked radios with the custom selected class if given", function () {
361
- $radioButtons.eq(0).prop('checked', true);
362
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'selectedClass' : 'selectable-selected' });
363
- expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true);
364
- });
365
- });
366
-
367
- describe("If one of those radios receives focus", function () {
368
- it("Should add the focused class to that radio", function () {
369
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
370
- $radioButtons.eq(0).focus();
371
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
372
- });
373
-
374
- it("Should add a custom focused class to that radio if specified as an option", function () {
375
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'focusedClass' : 'selectable-focused' });
376
- $radioButtons.eq(0).focus();
377
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
378
- });
379
- });
380
-
381
- describe("If one of those radios loses focus", function () {
382
- it("Should remove the focused class from that radio", function () {
383
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
384
- $radioButtons.eq(0).focus();
385
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
386
- $radioButtons.eq(0).blur();
387
- expect($radioLabels.eq(0).hasClass('focused')).toBe(false);
388
- });
389
-
390
- it("Should add a custom focused class to that radio if specified as an option", function () {
391
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'focusedClass' : 'selectable-focused' });
392
- $radioButtons.eq(0).focus();
393
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
394
- $radioButtons.eq(0).blur();
395
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(false);
396
- });
397
- });
398
-
399
- describe("If one of those radios is clicked", function () {
400
- it("Should mark that radio with the selected class", function () {
401
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
402
- $radioButtons.eq(0).trigger('click');
403
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
404
- });
405
-
406
- it("Should remove the selected class from all other radios", function () {
407
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
408
- $radioLabels.eq(1).addClass('selected');
409
- $radioButtons.eq(0).trigger('click');
410
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
411
- });
412
- });
413
- });
414
-
415
- describe("When that selector matches checkbox inputs", function () {
344
+ buttonsInstance.destroy()
345
+ })
346
+
347
+ describe('At the point it is called', function () {
348
+ it('Should mark radios with the selection-button-radio class', function () {
349
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
350
+ expect($radioLabels.eq(0).hasClass('selection-button-radio')).toBe(true)
351
+ expect($radioLabels.eq(1).hasClass('selection-button-radio')).toBe(true)
352
+ expect($radioLabels.eq(2).hasClass('selection-button-radio')).toBe(true)
353
+ })
354
+
355
+ it('Should not add a selected class if no radios are checked', function () {
356
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
357
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(false)
358
+ expect($radioLabels.eq(1).hasClass('selected')).toBe(false)
359
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
360
+ })
361
+
362
+ it('Should mark checked radios with the selected class', function () {
363
+ $radioButtons.eq(0).prop('checked', true)
364
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
365
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
366
+ })
367
+
368
+ it('Should mark checked radios with the custom selected class if given', function () {
369
+ $radioButtons.eq(0).prop('checked', true)
370
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'selectedClass': 'selectable-selected' })
371
+ expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true)
372
+ })
373
+ })
374
+
375
+ describe('If one of those radios receives focus', function () {
376
+ it('Should add the focused class to that radio', function () {
377
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
378
+ $radioButtons.eq(0).focus()
379
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
380
+ })
381
+
382
+ it('Should add a custom focused class to that radio if specified as an option', function () {
383
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'focusedClass': 'selectable-focused' })
384
+ $radioButtons.eq(0).focus()
385
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
386
+ })
387
+ })
388
+
389
+ describe('If one of those radios loses focus', function () {
390
+ it('Should remove the focused class from that radio', function () {
391
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
392
+ $radioButtons.eq(0).focus()
393
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
394
+ $radioButtons.eq(0).blur()
395
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(false)
396
+ })
397
+
398
+ it('Should add a custom focused class to that radio if specified as an option', function () {
399
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'focusedClass': 'selectable-focused' })
400
+ $radioButtons.eq(0).focus()
401
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
402
+ $radioButtons.eq(0).blur()
403
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(false)
404
+ })
405
+ })
406
+
407
+ describe('If one of those radios is clicked', function () {
408
+ it('Should mark that radio with the selected class', function () {
409
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
410
+ $radioButtons.eq(0).trigger('click')
411
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
412
+ })
413
+
414
+ it('Should remove the selected class from all other radios', function () {
415
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
416
+ $radioLabels.eq(1).addClass('selected')
417
+ $radioButtons.eq(0).trigger('click')
418
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
419
+ })
420
+ })
421
+ })
422
+
423
+ describe('When that selector matches checkbox inputs', function () {
416
424
  afterEach(function () {
417
- buttonsInstance.destroy();
418
- });
419
-
420
- describe("At the point it is called", function () {
421
- it("Should mark checkboxes with the selection-button-checkbox class", function () {
422
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
423
- expect($checkboxLabels.eq(0).hasClass('selection-button-checkbox')).toBe(true);
424
- expect($checkboxLabels.eq(1).hasClass('selection-button-checkbox')).toBe(true);
425
- expect($checkboxLabels.eq(2).hasClass('selection-button-checkbox')).toBe(true);
426
- });
427
-
428
- it("Should not add a selected class if no checkboxes are checked", function () {
429
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
430
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false);
431
- expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false);
432
- expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false);
433
- });
434
-
435
- it("Should mark checked checkboxes with the selected class", function () {
436
- $checkboxButtons.eq(0).prop('checked', true);
437
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
438
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
439
- });
440
-
441
- it("Should mark all checked checkboxes with the selected class if there are more than one", function () {
442
- $checkboxButtons.eq(0).prop('checked', true);
443
- $checkboxButtons.eq(1).prop('checked', true);
444
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
445
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
446
- expect($checkboxLabels.eq(1).hasClass('selected')).toBe(true);
447
- });
448
-
449
- it("Should mark checked checkboxes with the custom selected class if given", function () {
450
- $checkboxButtons.eq(0).prop('checked', true);
451
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'selectedClass' : 'selectable-selected' });
452
- expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true);
453
- });
454
- });
455
-
456
- describe("If one of those checkboxes receives focus", function () {
457
- it("Should add the focused class to that checkbox", function () {
458
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
459
- $checkboxButtons.eq(0).focus();
460
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
461
- });
462
-
463
- it("Should add a custom focused class to that checkbox if specified as an option", function () {
464
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'focusedClass' : 'selectable-focused' });
465
- $checkboxButtons.eq(0).focus();
466
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
467
- });
468
- });
469
-
470
- describe("If one of those checkboxes loses focus", function () {
471
- it("Should add the focused class to that checkbox", function () {
472
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
473
- $checkboxButtons.eq(0).focus();
474
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
475
- $checkboxButtons.eq(0).blur();
476
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false);
477
- });
478
-
479
- it("Should add a custom focused class to that checkbox if specified as an option", function () {
480
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'focusedClass' : 'selectable-focused' });
481
- $checkboxButtons.eq(0).focus();
482
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
483
- $checkboxButtons.eq(0).blur();
484
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(false);
485
- });
486
- });
487
- });
488
-
489
- describe("When that selector matches a mixture of checkbox and radio inputs", function () {
490
- var $mixedButtons;
425
+ buttonsInstance.destroy()
426
+ })
427
+
428
+ describe('At the point it is called', function () {
429
+ it('Should mark checkboxes with the selection-button-checkbox class', function () {
430
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
431
+ expect($checkboxLabels.eq(0).hasClass('selection-button-checkbox')).toBe(true)
432
+ expect($checkboxLabels.eq(1).hasClass('selection-button-checkbox')).toBe(true)
433
+ expect($checkboxLabels.eq(2).hasClass('selection-button-checkbox')).toBe(true)
434
+ })
435
+
436
+ it('Should not add a selected class if no checkboxes are checked', function () {
437
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
438
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false)
439
+ expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false)
440
+ expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false)
441
+ })
442
+
443
+ it('Should mark checked checkboxes with the selected class', function () {
444
+ $checkboxButtons.eq(0).prop('checked', true)
445
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
446
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
447
+ })
448
+
449
+ it('Should mark all checked checkboxes with the selected class if there are more than one', function () {
450
+ $checkboxButtons.eq(0).prop('checked', true)
451
+ $checkboxButtons.eq(1).prop('checked', true)
452
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
453
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
454
+ expect($checkboxLabels.eq(1).hasClass('selected')).toBe(true)
455
+ })
456
+
457
+ it('Should mark checked checkboxes with the custom selected class if given', function () {
458
+ $checkboxButtons.eq(0).prop('checked', true)
459
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'selectedClass': 'selectable-selected' })
460
+ expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true)
461
+ })
462
+ })
463
+
464
+ describe('If one of those checkboxes receives focus', function () {
465
+ it('Should add the focused class to that checkbox', function () {
466
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
467
+ $checkboxButtons.eq(0).focus()
468
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
469
+ })
470
+
471
+ it('Should add a custom focused class to that checkbox if specified as an option', function () {
472
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'focusedClass': 'selectable-focused' })
473
+ $checkboxButtons.eq(0).focus()
474
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
475
+ })
476
+ })
477
+
478
+ describe('If one of those checkboxes loses focus', function () {
479
+ it('Should add the focused class to that checkbox', function () {
480
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
481
+ $checkboxButtons.eq(0).focus()
482
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
483
+ $checkboxButtons.eq(0).blur()
484
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false)
485
+ })
486
+
487
+ it('Should add a custom focused class to that checkbox if specified as an option', function () {
488
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'focusedClass': 'selectable-focused' })
489
+ $checkboxButtons.eq(0).focus()
490
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
491
+ $checkboxButtons.eq(0).blur()
492
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(false)
493
+ })
494
+ })
495
+ })
496
+
497
+ describe('When that selector matches a mixture of checkbox and radio inputs', function () {
498
+ var $mixedButtons
491
499
 
492
500
  beforeEach(function () {
493
- $mixedButtons = $checkboxButtons.add($radioButtons);
494
- });
501
+ $mixedButtons = $checkboxButtons.add($radioButtons)
502
+ })
495
503
 
496
504
  afterEach(function () {
497
- buttonsInstance.destroy();
498
- });
499
-
500
- it("Should do nothing if no checkboxes or radios are checked", function () {
501
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input");
502
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false);
503
- expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false);
504
- expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false);
505
- expect($radioLabels.eq(0).hasClass('selected')).toBe(false);
506
- expect($radioLabels.eq(1).hasClass('selected')).toBe(false);
507
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
508
- });
509
-
510
- it("Should mark checked checkboxes or radios with the selected class", function () {
511
- $mixedButtons.eq(0).prop('checked', true);
512
- $mixedButtons.eq(3).prop('checked', true);
513
-
514
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input");
515
- expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true);
516
- expect($radioLabels.eq(0).hasClass('selected')).toBe(true);
517
- });
518
-
519
- it("Should mark checked checkboxes or radios with the custom selected class if given", function () {
520
- $mixedButtons.eq(0).prop('checked', true);
521
- $mixedButtons.eq(3).prop('checked', true);
522
-
523
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input", { 'selectedClass' : 'selectable-selected' });
524
- expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true);
525
- expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true);
526
- });
527
- });
528
- });
529
-
530
- describe("When GOVUK.SelectionButtons is called with a selector and then the page content is replaced", function () {
531
- describe("When that selector matches radio inputs", function () {
532
- describe("If one of those radios is clicked", function () {
505
+ buttonsInstance.destroy()
506
+ })
507
+
508
+ it('Should do nothing if no checkboxes or radios are checked', function () {
509
+ buttonsInstance = new GOVUK.SelectionButtons('label.selectable input')
510
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(false)
511
+ expect($checkboxLabels.eq(1).hasClass('selected')).toBe(false)
512
+ expect($checkboxLabels.eq(2).hasClass('selected')).toBe(false)
513
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(false)
514
+ expect($radioLabels.eq(1).hasClass('selected')).toBe(false)
515
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
516
+ })
517
+
518
+ it('Should mark checked checkboxes or radios with the selected class', function () {
519
+ $mixedButtons.eq(0).prop('checked', true)
520
+ $mixedButtons.eq(3).prop('checked', true)
521
+
522
+ buttonsInstance = new GOVUK.SelectionButtons('label.selectable input')
523
+ expect($checkboxLabels.eq(0).hasClass('selected')).toBe(true)
524
+ expect($radioLabels.eq(0).hasClass('selected')).toBe(true)
525
+ })
526
+
527
+ it('Should mark checked checkboxes or radios with the custom selected class if given', function () {
528
+ $mixedButtons.eq(0).prop('checked', true)
529
+ $mixedButtons.eq(3).prop('checked', true)
530
+
531
+ buttonsInstance = new GOVUK.SelectionButtons('label.selectable input', { 'selectedClass': 'selectable-selected' })
532
+ expect($checkboxLabels.eq(0).hasClass('selectable-selected')).toBe(true)
533
+ expect($radioLabels.eq(0).hasClass('selectable-selected')).toBe(true)
534
+ })
535
+ })
536
+ })
537
+
538
+ describe('When GOVUK.SelectionButtons is called with a selector and then the page content is replaced', function () {
539
+ describe('When that selector matches radio inputs', function () {
540
+ describe('If one of those radios is clicked', function () {
533
541
  afterEach(function () {
534
- buttonsInstance.destroy();
535
- });
536
-
537
- it("Should mark that radio with the selected class", function () {
538
- var contentCache;
539
-
540
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
541
- contentCache = $('#content').html();
542
- $('#content').html('');
543
- $('#content').html(contentCache);
544
- $("label.selectable input[type='radio']").eq(0).trigger('click');
545
- expect($("label.selectable input[type='radio']").eq(0).parent('label').hasClass('selected')).toBe(true);
546
- });
547
-
548
- it("Should remove the selected class from all other radios", function () {
549
- var contentCache;
550
-
551
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
552
- contentCache = $('#content').html();
553
- $('#content').html('');
554
- $('#content').html(contentCache);
555
- $radioButtons = $("label.selectable input[type='radio']");
556
- $radioLabels = $radioButtons.parent('label');
557
- $radioLabels.eq(1).addClass('selected');
558
- $radioButtons.eq(0).trigger('click');
559
- expect($radioLabels.eq(2).hasClass('selected')).toBe(false);
560
- });
561
- });
562
-
563
- describe("If one of those radios is focused", function () {
542
+ buttonsInstance.destroy()
543
+ })
544
+
545
+ it('Should mark that radio with the selected class', function () {
546
+ var contentCache
547
+
548
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
549
+ contentCache = $('#content').html()
550
+ $('#content').html('')
551
+ $('#content').html(contentCache)
552
+ $("label.selectable input[type='radio']").eq(0).trigger('click')
553
+ expect($("label.selectable input[type='radio']").eq(0).parent('label').hasClass('selected')).toBe(true)
554
+ })
555
+
556
+ it('Should remove the selected class from all other radios', function () {
557
+ var contentCache
558
+
559
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
560
+ contentCache = $('#content').html()
561
+ $('#content').html('')
562
+ $('#content').html(contentCache)
563
+ $radioButtons = $("label.selectable input[type='radio']")
564
+ $radioLabels = $radioButtons.parent('label')
565
+ $radioLabels.eq(1).addClass('selected')
566
+ $radioButtons.eq(0).trigger('click')
567
+ expect($radioLabels.eq(2).hasClass('selected')).toBe(false)
568
+ })
569
+ })
570
+
571
+ describe('If one of those radios is focused', function () {
564
572
  afterEach(function () {
565
- buttonsInstance.destroy();
566
- });
567
-
568
- it("Should add the focused class to the radio", function () {
569
- var contentCache;
570
-
571
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
572
- contentCache = $('#content').html();
573
- $('#content').html('');
574
- $('#content').html(contentCache);
575
- $radioButtons = $("label.selectable input[type='radio']");
576
- $radioLabels = $radioButtons.parent('label');
577
- $radioButtons.eq(0).focus();
578
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
579
- });
580
-
581
- it("Should add a custom focused class to the radio if sent in as an option", function () {
582
- var contentCache;
583
-
584
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'focusedClass' : 'selectable-focused' });
585
- contentCache = $('#content').html();
586
- $('#content').html('');
587
- $('#content').html(contentCache);
588
- $radioButtons = $("label.selectable input[type='radio']");
589
- $radioLabels = $radioButtons.parent('label');
590
- $radioButtons.eq(0).focus();
591
- expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true);
592
- });
593
-
594
- it("Should remove the focused class from a radio when it loses focus", function () {
595
- var contentCache;
596
-
597
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']");
598
- contentCache = $('#content').html();
599
- $('#content').html('');
600
- $('#content').html(contentCache);
601
- $radioButtons = $("label.selectable input[type='radio']");
602
- $radioLabels = $radioButtons.parent('label');
603
- $radioButtons.eq(0).focus();
604
- expect($radioLabels.eq(0).hasClass('focused')).toBe(true);
605
- $radioButtons.eq(0).blur();
606
- expect($radioLabels.eq(0).hasClass('focused')).toBe(false);
607
- });
608
- });
609
- });
610
-
611
- describe("When that selector matches checkbox inputs", function () {
612
- describe("If one of those checkboxes is clicked", function () {
573
+ buttonsInstance.destroy()
574
+ })
575
+
576
+ it('Should add the focused class to the radio', function () {
577
+ var contentCache
578
+
579
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
580
+ contentCache = $('#content').html()
581
+ $('#content').html('')
582
+ $('#content').html(contentCache)
583
+ $radioButtons = $("label.selectable input[type='radio']")
584
+ $radioLabels = $radioButtons.parent('label')
585
+ $radioButtons.eq(0).focus()
586
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
587
+ })
588
+
589
+ it('Should add a custom focused class to the radio if sent in as an option', function () {
590
+ var contentCache
591
+
592
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']", { 'focusedClass': 'selectable-focused' })
593
+ contentCache = $('#content').html()
594
+ $('#content').html('')
595
+ $('#content').html(contentCache)
596
+ $radioButtons = $("label.selectable input[type='radio']")
597
+ $radioLabels = $radioButtons.parent('label')
598
+ $radioButtons.eq(0).focus()
599
+ expect($radioLabels.eq(0).hasClass('selectable-focused')).toBe(true)
600
+ })
601
+
602
+ it('Should remove the focused class from a radio when it loses focus', function () {
603
+ var contentCache
604
+
605
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='radio']")
606
+ contentCache = $('#content').html()
607
+ $('#content').html('')
608
+ $('#content').html(contentCache)
609
+ $radioButtons = $("label.selectable input[type='radio']")
610
+ $radioLabels = $radioButtons.parent('label')
611
+ $radioButtons.eq(0).focus()
612
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(true)
613
+ $radioButtons.eq(0).blur()
614
+ expect($radioLabels.eq(0).hasClass('focused')).toBe(false)
615
+ })
616
+ })
617
+ })
618
+
619
+ describe('When that selector matches checkbox inputs', function () {
620
+ describe('If one of those checkboxes is clicked', function () {
613
621
  afterEach(function () {
614
- buttonsInstance.destroy();
615
- });
616
-
617
- it("Should add the selected class to the checkbox", function () {
618
- var contentCache;
619
-
620
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
621
- contentCache = $('#content').html();
622
- $('#content').html('');
623
- $('#content').html(contentCache);
624
- $("label.selectable input[type='checkbox']").eq(0).trigger('click');
625
- expect($("label.selectable input[type='checkbox']").eq(0).parent('label').hasClass('selected')).toBe(true);
626
- });
627
- });
628
-
629
- describe("If one of those checkboxes is focused", function () {
622
+ buttonsInstance.destroy()
623
+ })
624
+
625
+ it('Should add the selected class to the checkbox', function () {
626
+ var contentCache
627
+
628
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
629
+ contentCache = $('#content').html()
630
+ $('#content').html('')
631
+ $('#content').html(contentCache)
632
+ $("label.selectable input[type='checkbox']").eq(0).trigger('click')
633
+ expect($("label.selectable input[type='checkbox']").eq(0).parent('label').hasClass('selected')).toBe(true)
634
+ })
635
+ })
636
+
637
+ describe('If one of those checkboxes is focused', function () {
630
638
  afterEach(function () {
631
- buttonsInstance.destroy();
632
- });
633
-
634
- it("Should add the focused class to the checkbox", function () {
635
- var contentCache;
636
-
637
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
638
- contentCache = $('#content').html();
639
- $('#content').html('');
640
- $('#content').html(contentCache);
641
- $checkboxButtons = $("label.selectable input[type='checkbox']");
642
- $checkboxLabels = $checkboxButtons.parent('label');
643
- $checkboxButtons.eq(0).focus();
644
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
645
- });
646
-
647
- it("Should add a custom focused class to the checkbox if sent in as an option", function () {
648
- var contentCache;
649
-
650
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'focusedClass' : 'selectable-focused' });
651
- contentCache = $('#content').html();
652
- $('#content').html('');
653
- $('#content').html(contentCache);
654
- $checkboxButtons = $("label.selectable input[type='checkbox']");
655
- $checkboxLabels = $checkboxButtons.parent('label');
656
- $checkboxButtons.eq(0).focus();
657
- expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true);
658
- });
659
-
660
- it("Should remove the focused class from the checkbox when it loses focus", function () {
661
- var contentCache;
662
-
663
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
664
- contentCache = $('#content').html();
665
- $('#content').html('');
666
- $('#content').html(contentCache);
667
- $checkboxButtons = $("label.selectable input[type='checkbox']");
668
- $checkboxLabels = $checkboxButtons.parent('label');
669
- $checkboxButtons.eq(0).focus();
670
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true);
671
- $checkboxButtons.eq(0).blur();
672
- expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false);
673
- });
674
- });
675
- });
676
- });
677
-
678
- describe("GOVUK.SelectionButtons.prototype.destroy", function () {
679
- it("Should remove the events bound to the jQuery-wrapped elements sent into GOVUK.SelectionButtons", function () {
680
- var clickCallbackBound = false,
681
- focusBlurCallbackBound = false,
682
- clickCallbackCancelled = false,
683
- focusBlurCallbackCancelled = false;
684
-
685
- spyOn($.fn, "on").and.callFake(function (evt, callback) {
639
+ buttonsInstance.destroy()
640
+ })
641
+
642
+ it('Should add the focused class to the checkbox', function () {
643
+ var contentCache
644
+
645
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
646
+ contentCache = $('#content').html()
647
+ $('#content').html('')
648
+ $('#content').html(contentCache)
649
+ $checkboxButtons = $("label.selectable input[type='checkbox']")
650
+ $checkboxLabels = $checkboxButtons.parent('label')
651
+ $checkboxButtons.eq(0).focus()
652
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
653
+ })
654
+
655
+ it('Should add a custom focused class to the checkbox if sent in as an option', function () {
656
+ var contentCache
657
+
658
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']", { 'focusedClass': 'selectable-focused' })
659
+ contentCache = $('#content').html()
660
+ $('#content').html('')
661
+ $('#content').html(contentCache)
662
+ $checkboxButtons = $("label.selectable input[type='checkbox']")
663
+ $checkboxLabels = $checkboxButtons.parent('label')
664
+ $checkboxButtons.eq(0).focus()
665
+ expect($checkboxLabels.eq(0).hasClass('selectable-focused')).toBe(true)
666
+ })
667
+
668
+ it('Should remove the focused class from the checkbox when it loses focus', function () {
669
+ var contentCache
670
+
671
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
672
+ contentCache = $('#content').html()
673
+ $('#content').html('')
674
+ $('#content').html(contentCache)
675
+ $checkboxButtons = $("label.selectable input[type='checkbox']")
676
+ $checkboxLabels = $checkboxButtons.parent('label')
677
+ $checkboxButtons.eq(0).focus()
678
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(true)
679
+ $checkboxButtons.eq(0).blur()
680
+ expect($checkboxLabels.eq(0).hasClass('focused')).toBe(false)
681
+ })
682
+ })
683
+ })
684
+ })
685
+
686
+ describe('GOVUK.SelectionButtons.prototype.destroy', function () {
687
+ it('Should remove the events bound to the jQuery-wrapped elements sent into GOVUK.SelectionButtons', function () {
688
+ var clickCallbackBound = false
689
+ var focusBlurCallbackBound = false
690
+ var clickCallbackCancelled = false
691
+ var focusBlurCallbackCancelled = false
692
+
693
+ spyOn($.fn, 'on').and.callFake(function (evt, callback) {
686
694
  if (this === $radioButtons) {
687
- if (evt === "click") {
688
- clickCallbackBound = callback;
695
+ if (evt === 'click') {
696
+ clickCallbackBound = callback
689
697
  }
690
- if (evt === "focus blur") {
691
- focusBlurCallbackBound = callback;
698
+ if (evt === 'focus blur') {
699
+ focusBlurCallbackBound = callback
692
700
  }
693
701
  }
694
- return this;
695
- });
702
+ return this
703
+ })
696
704
 
697
- spyOn($.fn, "off").and.callFake(function (evt, callback) {
705
+ spyOn($.fn, 'off').and.callFake(function (evt, callback) {
698
706
  if (this === $radioButtons) {
699
- if (evt === "click") {
700
- clickCallbackCancelled = callback;
707
+ if (evt === 'click') {
708
+ clickCallbackCancelled = callback
701
709
  }
702
- if (evt === "focus blur") {
703
- focusBlurCallbackCancelled = callback;
710
+ if (evt === 'focus blur') {
711
+ focusBlurCallbackCancelled = callback
704
712
  }
705
713
  }
706
- return this;
707
- });
708
- buttonsInstance = new GOVUK.SelectionButtons($radioButtons);
709
- expect(clickCallbackBound).not.toBe(false);
710
- expect(focusBlurCallbackBound).not.toBe(false);
711
- buttonsInstance.destroy();
712
- expect(clickCallbackCancelled).toEqual(clickCallbackBound);
713
- expect(focusBlurCallbackCancelled).toEqual(focusBlurCallbackBound);
714
- });
715
-
716
- it("Should remove the events bound to the document for the selector was sent into GOVUK.SelectionButtons", function () {
717
- var clickCallbackBound = false,
718
- focusBlurCallbackBound = false,
719
- clickCallbackCancelled = false,
720
- focusBlurCallbackCancelled = false;
721
-
722
- spyOn($.fn, "on").and.callFake(function (evt, selector, callback) {
714
+ return this
715
+ })
716
+ buttonsInstance = new GOVUK.SelectionButtons($radioButtons)
717
+ expect(clickCallbackBound).not.toBe(false)
718
+ expect(focusBlurCallbackBound).not.toBe(false)
719
+ buttonsInstance.destroy()
720
+ expect(clickCallbackCancelled).toEqual(clickCallbackBound)
721
+ expect(focusBlurCallbackCancelled).toEqual(focusBlurCallbackBound)
722
+ })
723
+
724
+ it('Should remove the events bound to the document for the selector was sent into GOVUK.SelectionButtons', function () {
725
+ var clickCallbackBound = false
726
+ var focusBlurCallbackBound = false
727
+ var clickCallbackCancelled = false
728
+ var focusBlurCallbackCancelled = false
729
+
730
+ spyOn($.fn, 'on').and.callFake(function (evt, selector, callback) {
723
731
  if ((this[0] === document) && (selector === "label.selectable input[type='checkbox']")) {
724
- if (evt === "click") {
725
- clickCallbackBound = callback;
732
+ if (evt === 'click') {
733
+ clickCallbackBound = callback
726
734
  }
727
- if (evt === "focus blur") {
728
- focusBlurCallbackBound = callback;
735
+ if (evt === 'focus blur') {
736
+ focusBlurCallbackBound = callback
729
737
  }
730
738
  }
731
- return this;
732
- });
739
+ return this
740
+ })
733
741
 
734
- spyOn($.fn, "off").and.callFake(function (evt, selector, callback) {
742
+ spyOn($.fn, 'off').and.callFake(function (evt, selector, callback) {
735
743
  if ((this[0] === document) && (selector === "label.selectable input[type='checkbox']")) {
736
- if (evt === "click") {
737
- clickCallbackCancelled = callback;
744
+ if (evt === 'click') {
745
+ clickCallbackCancelled = callback
738
746
  }
739
- if (evt === "focus blur") {
740
- focusBlurCallbackCancelled = callback;
747
+ if (evt === 'focus blur') {
748
+ focusBlurCallbackCancelled = callback
741
749
  }
742
750
  }
743
- return this;
744
- });
745
- buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']");
746
- expect(clickCallbackBound).not.toBe(false);
747
- expect(focusBlurCallbackBound).not.toBe(false);
748
- buttonsInstance.destroy();
749
- expect(clickCallbackCancelled).toEqual(clickCallbackBound);
750
- expect(focusBlurCallbackCancelled).toEqual(focusBlurCallbackBound);
751
- });
752
- });
753
- });
751
+ return this
752
+ })
753
+ buttonsInstance = new GOVUK.SelectionButtons("label.selectable input[type='checkbox']")
754
+ expect(clickCallbackBound).not.toBe(false)
755
+ expect(focusBlurCallbackBound).not.toBe(false)
756
+ buttonsInstance.destroy()
757
+ expect(clickCallbackCancelled).toEqual(clickCallbackBound)
758
+ expect(focusBlurCallbackCancelled).toEqual(focusBlurCallbackBound)
759
+ })
760
+ })
761
+ })