ccs-frontend_helpers 0.2.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/Gemfile +4 -4
- data/Gemfile.lock +90 -85
- data/README.md +2 -0
- data/lib/ccs/components/ccs/footer.rb +0 -1
- data/lib/ccs/components/ccs/header.rb +0 -1
- data/lib/ccs/components/govuk/error_summary.rb +6 -4
- data/lib/ccs/components/govuk/field/input/character_count/count_message.rb +62 -0
- data/lib/ccs/components/govuk/field/input/character_count.rb +30 -60
- data/lib/ccs/components/govuk/field/input/password_input/show_hide_button.rb +72 -0
- data/lib/ccs/components/govuk/field/input/password_input.rb +101 -0
- data/lib/ccs/components/govuk/field/input/text_input.rb +23 -7
- data/lib/ccs/components/govuk/field/input.rb +4 -0
- data/lib/ccs/components/govuk/field/inputs/checkboxes.rb +1 -22
- data/lib/ccs/components/govuk/field/inputs/date_input.rb +1 -22
- data/lib/ccs/components/govuk/field/inputs/radios.rb +2 -17
- data/lib/ccs/components/govuk/field/inputs.rb +8 -2
- data/lib/ccs/components/govuk/field.rb +12 -2
- data/lib/ccs/components/govuk/footer.rb +0 -1
- data/lib/ccs/components/govuk/header.rb +0 -1
- data/lib/ccs/components/govuk/pagination.rb +0 -1
- data/lib/ccs/frontend_helpers/govuk_frontend/error_summary.rb +1 -1
- data/lib/ccs/frontend_helpers/govuk_frontend/password_input.rb +28 -0
- data/lib/ccs/frontend_helpers/govuk_frontend.rb +2 -0
- data/lib/ccs/frontend_helpers/version.rb +1 -1
- data/package.json +1 -1
- data/yarn.lock +4 -4
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fca2cbae35b1e0e0845af49145d1c9141bdcf235dea294ab305acbbeb301f781
|
4
|
+
data.tar.gz: 3e874c9bc894b40c56efefd54397f134b697ad717ce5b4ab9a3247fe36160d67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6109e7f5c6a7bb6d210c47b07ce9e88f83ccb81a6c76fba097bf9ce467423aca549230686f78ec6fcabfe8e48443f9cfe9c41f8cb947181631ce33895ee7ccf6
|
7
|
+
data.tar.gz: c6cd26aedc098f409ecb4a625daef8236f3eabe9a071dfb611d6352f9c5e6595034de5b3a9d5b260c724cec5b1be41bd1e974153e43d6b1e9a8e6b47cfeae662
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## [0.4.0] - 2024-05-20
|
2
|
+
|
3
|
+
Update components to be compatible with GOV.UK Frontend v5.4
|
4
|
+
|
5
|
+
## [0.3.0] - 2024-04-12
|
6
|
+
|
7
|
+
Update components to be compatible with GOV.UK Frontend v5.3
|
8
|
+
|
9
|
+
### 🆕 New features
|
10
|
+
|
11
|
+
The following GOV.UK helpers have been added:
|
12
|
+
|
13
|
+
- Password input
|
14
|
+
|
1
15
|
## [0.2.0] - 2024-03-13
|
2
16
|
|
3
17
|
### 💥 Breaking changes
|
data/Gemfile
CHANGED
@@ -7,7 +7,7 @@ gemspec
|
|
7
7
|
|
8
8
|
# Gems for building the package
|
9
9
|
gem 'bundler', '~> 2.3'
|
10
|
-
gem 'rake', '~> 13.
|
10
|
+
gem 'rake', '~> 13.2'
|
11
11
|
|
12
12
|
# Gems for testing the package
|
13
13
|
gem 'capybara', '~> 3.40.0'
|
@@ -16,10 +16,10 @@ gem 'simplecov', '~> 0.21'
|
|
16
16
|
gem 'nokogiri-diff', '~> 0.3.0'
|
17
17
|
|
18
18
|
# Gems for linting/formatting the package
|
19
|
-
gem 'rubocop', '~> 1.
|
20
|
-
gem 'rubocop-rails', '~> 2.
|
19
|
+
gem 'rubocop', '~> 1.63'
|
20
|
+
gem 'rubocop-rails', '~> 2.25'
|
21
21
|
gem 'rubocop-rake', '~> 0.6'
|
22
|
-
gem 'rubocop-rspec', '~> 2.
|
22
|
+
gem 'rubocop-rspec', '~> 2.29'
|
23
23
|
|
24
24
|
# Gems for documenting the package
|
25
25
|
gem 'yard', '~> 0.9'
|
data/Gemfile.lock
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ccs-frontend_helpers (0.
|
4
|
+
ccs-frontend_helpers (0.4.0)
|
5
5
|
rails (>= 6.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
actioncable (7.1.3.
|
11
|
-
actionpack (= 7.1.3.
|
12
|
-
activesupport (= 7.1.3.
|
10
|
+
actioncable (7.1.3.3)
|
11
|
+
actionpack (= 7.1.3.3)
|
12
|
+
activesupport (= 7.1.3.3)
|
13
13
|
nio4r (~> 2.0)
|
14
14
|
websocket-driver (>= 0.6.1)
|
15
15
|
zeitwerk (~> 2.6)
|
16
|
-
actionmailbox (7.1.3.
|
17
|
-
actionpack (= 7.1.3.
|
18
|
-
activejob (= 7.1.3.
|
19
|
-
activerecord (= 7.1.3.
|
20
|
-
activestorage (= 7.1.3.
|
21
|
-
activesupport (= 7.1.3.
|
16
|
+
actionmailbox (7.1.3.3)
|
17
|
+
actionpack (= 7.1.3.3)
|
18
|
+
activejob (= 7.1.3.3)
|
19
|
+
activerecord (= 7.1.3.3)
|
20
|
+
activestorage (= 7.1.3.3)
|
21
|
+
activesupport (= 7.1.3.3)
|
22
22
|
mail (>= 2.7.1)
|
23
23
|
net-imap
|
24
24
|
net-pop
|
25
25
|
net-smtp
|
26
|
-
actionmailer (7.1.3.
|
27
|
-
actionpack (= 7.1.3.
|
28
|
-
actionview (= 7.1.3.
|
29
|
-
activejob (= 7.1.3.
|
30
|
-
activesupport (= 7.1.3.
|
26
|
+
actionmailer (7.1.3.3)
|
27
|
+
actionpack (= 7.1.3.3)
|
28
|
+
actionview (= 7.1.3.3)
|
29
|
+
activejob (= 7.1.3.3)
|
30
|
+
activesupport (= 7.1.3.3)
|
31
31
|
mail (~> 2.5, >= 2.5.4)
|
32
32
|
net-imap
|
33
33
|
net-pop
|
34
34
|
net-smtp
|
35
35
|
rails-dom-testing (~> 2.2)
|
36
|
-
actionpack (7.1.3.
|
37
|
-
actionview (= 7.1.3.
|
38
|
-
activesupport (= 7.1.3.
|
36
|
+
actionpack (7.1.3.3)
|
37
|
+
actionview (= 7.1.3.3)
|
38
|
+
activesupport (= 7.1.3.3)
|
39
39
|
nokogiri (>= 1.8.5)
|
40
40
|
racc
|
41
41
|
rack (>= 2.2.4)
|
@@ -43,35 +43,35 @@ GEM
|
|
43
43
|
rack-test (>= 0.6.3)
|
44
44
|
rails-dom-testing (~> 2.2)
|
45
45
|
rails-html-sanitizer (~> 1.6)
|
46
|
-
actiontext (7.1.3.
|
47
|
-
actionpack (= 7.1.3.
|
48
|
-
activerecord (= 7.1.3.
|
49
|
-
activestorage (= 7.1.3.
|
50
|
-
activesupport (= 7.1.3.
|
46
|
+
actiontext (7.1.3.3)
|
47
|
+
actionpack (= 7.1.3.3)
|
48
|
+
activerecord (= 7.1.3.3)
|
49
|
+
activestorage (= 7.1.3.3)
|
50
|
+
activesupport (= 7.1.3.3)
|
51
51
|
globalid (>= 0.6.0)
|
52
52
|
nokogiri (>= 1.8.5)
|
53
|
-
actionview (7.1.3.
|
54
|
-
activesupport (= 7.1.3.
|
53
|
+
actionview (7.1.3.3)
|
54
|
+
activesupport (= 7.1.3.3)
|
55
55
|
builder (~> 3.1)
|
56
56
|
erubi (~> 1.11)
|
57
57
|
rails-dom-testing (~> 2.2)
|
58
58
|
rails-html-sanitizer (~> 1.6)
|
59
|
-
activejob (7.1.3.
|
60
|
-
activesupport (= 7.1.3.
|
59
|
+
activejob (7.1.3.3)
|
60
|
+
activesupport (= 7.1.3.3)
|
61
61
|
globalid (>= 0.3.6)
|
62
|
-
activemodel (7.1.3.
|
63
|
-
activesupport (= 7.1.3.
|
64
|
-
activerecord (7.1.3.
|
65
|
-
activemodel (= 7.1.3.
|
66
|
-
activesupport (= 7.1.3.
|
62
|
+
activemodel (7.1.3.3)
|
63
|
+
activesupport (= 7.1.3.3)
|
64
|
+
activerecord (7.1.3.3)
|
65
|
+
activemodel (= 7.1.3.3)
|
66
|
+
activesupport (= 7.1.3.3)
|
67
67
|
timeout (>= 0.4.0)
|
68
|
-
activestorage (7.1.3.
|
69
|
-
actionpack (= 7.1.3.
|
70
|
-
activejob (= 7.1.3.
|
71
|
-
activerecord (= 7.1.3.
|
72
|
-
activesupport (= 7.1.3.
|
68
|
+
activestorage (7.1.3.3)
|
69
|
+
actionpack (= 7.1.3.3)
|
70
|
+
activejob (= 7.1.3.3)
|
71
|
+
activerecord (= 7.1.3.3)
|
72
|
+
activesupport (= 7.1.3.3)
|
73
73
|
marcel (~> 1.0)
|
74
|
-
activesupport (7.1.3.
|
74
|
+
activesupport (7.1.3.3)
|
75
75
|
base64
|
76
76
|
bigdecimal
|
77
77
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
@@ -85,7 +85,7 @@ GEM
|
|
85
85
|
public_suffix (>= 2.0.2, < 6.0)
|
86
86
|
ast (2.4.2)
|
87
87
|
base64 (0.2.0)
|
88
|
-
bigdecimal (3.1.
|
88
|
+
bigdecimal (3.1.8)
|
89
89
|
builder (3.2.4)
|
90
90
|
capybara (3.40.0)
|
91
91
|
addressable
|
@@ -106,13 +106,13 @@ GEM
|
|
106
106
|
erubi (1.12.0)
|
107
107
|
globalid (1.2.1)
|
108
108
|
activesupport (>= 6.1)
|
109
|
-
i18n (1.14.
|
109
|
+
i18n (1.14.5)
|
110
110
|
concurrent-ruby (~> 1.0)
|
111
111
|
io-console (0.7.2)
|
112
|
-
irb (1.
|
113
|
-
rdoc
|
112
|
+
irb (1.13.1)
|
113
|
+
rdoc (>= 4.0.0)
|
114
114
|
reline (>= 0.4.2)
|
115
|
-
json (2.7.
|
115
|
+
json (2.7.2)
|
116
116
|
language_server-protocol (3.17.0.3)
|
117
117
|
loofah (2.22.0)
|
118
118
|
crass (~> 1.0.2)
|
@@ -122,37 +122,37 @@ GEM
|
|
122
122
|
net-imap
|
123
123
|
net-pop
|
124
124
|
net-smtp
|
125
|
-
marcel (1.0.
|
125
|
+
marcel (1.0.4)
|
126
126
|
matrix (0.4.2)
|
127
127
|
mini_mime (1.1.5)
|
128
|
-
minitest (5.
|
128
|
+
minitest (5.23.0)
|
129
129
|
mutex_m (0.2.0)
|
130
|
-
net-imap (0.4.
|
130
|
+
net-imap (0.4.11)
|
131
131
|
date
|
132
132
|
net-protocol
|
133
133
|
net-pop (0.1.2)
|
134
134
|
net-protocol
|
135
135
|
net-protocol (0.2.2)
|
136
136
|
timeout
|
137
|
-
net-smtp (0.
|
137
|
+
net-smtp (0.5.0)
|
138
138
|
net-protocol
|
139
|
-
nio4r (2.7.
|
140
|
-
nokogiri (1.16.
|
139
|
+
nio4r (2.7.3)
|
140
|
+
nokogiri (1.16.5-x86_64-darwin)
|
141
141
|
racc (~> 1.4)
|
142
|
-
nokogiri (1.16.
|
142
|
+
nokogiri (1.16.5-x86_64-linux)
|
143
143
|
racc (~> 1.4)
|
144
144
|
nokogiri-diff (0.3.0)
|
145
145
|
nokogiri (~> 1.5)
|
146
146
|
tdiff (~> 0.4)
|
147
147
|
parallel (1.24.0)
|
148
|
-
parser (3.3.0
|
148
|
+
parser (3.3.1.0)
|
149
149
|
ast (~> 2.4.1)
|
150
150
|
racc
|
151
151
|
psych (5.1.2)
|
152
152
|
stringio
|
153
153
|
public_suffix (5.0.4)
|
154
|
-
racc (1.
|
155
|
-
rack (3.0.
|
154
|
+
racc (1.8.0)
|
155
|
+
rack (3.0.11)
|
156
156
|
rack-session (2.0.0)
|
157
157
|
rack (>= 3.0.0)
|
158
158
|
rack-test (2.1.0)
|
@@ -160,20 +160,20 @@ GEM
|
|
160
160
|
rackup (2.1.0)
|
161
161
|
rack (>= 3)
|
162
162
|
webrick (~> 1.8)
|
163
|
-
rails (7.1.3.
|
164
|
-
actioncable (= 7.1.3.
|
165
|
-
actionmailbox (= 7.1.3.
|
166
|
-
actionmailer (= 7.1.3.
|
167
|
-
actionpack (= 7.1.3.
|
168
|
-
actiontext (= 7.1.3.
|
169
|
-
actionview (= 7.1.3.
|
170
|
-
activejob (= 7.1.3.
|
171
|
-
activemodel (= 7.1.3.
|
172
|
-
activerecord (= 7.1.3.
|
173
|
-
activestorage (= 7.1.3.
|
174
|
-
activesupport (= 7.1.3.
|
163
|
+
rails (7.1.3.3)
|
164
|
+
actioncable (= 7.1.3.3)
|
165
|
+
actionmailbox (= 7.1.3.3)
|
166
|
+
actionmailer (= 7.1.3.3)
|
167
|
+
actionpack (= 7.1.3.3)
|
168
|
+
actiontext (= 7.1.3.3)
|
169
|
+
actionview (= 7.1.3.3)
|
170
|
+
activejob (= 7.1.3.3)
|
171
|
+
activemodel (= 7.1.3.3)
|
172
|
+
activerecord (= 7.1.3.3)
|
173
|
+
activestorage (= 7.1.3.3)
|
174
|
+
activesupport (= 7.1.3.3)
|
175
175
|
bundler (>= 1.15.0)
|
176
|
-
railties (= 7.1.3.
|
176
|
+
railties (= 7.1.3.3)
|
177
177
|
rails-dom-testing (2.2.0)
|
178
178
|
activesupport (>= 5.0.0)
|
179
179
|
minitest
|
@@ -181,22 +181,23 @@ GEM
|
|
181
181
|
rails-html-sanitizer (1.6.0)
|
182
182
|
loofah (~> 2.21)
|
183
183
|
nokogiri (~> 1.14)
|
184
|
-
railties (7.1.3.
|
185
|
-
actionpack (= 7.1.3.
|
186
|
-
activesupport (= 7.1.3.
|
184
|
+
railties (7.1.3.3)
|
185
|
+
actionpack (= 7.1.3.3)
|
186
|
+
activesupport (= 7.1.3.3)
|
187
187
|
irb
|
188
188
|
rackup (>= 1.0.0)
|
189
189
|
rake (>= 12.2)
|
190
190
|
thor (~> 1.0, >= 1.2.2)
|
191
191
|
zeitwerk (~> 2.6)
|
192
192
|
rainbow (3.1.1)
|
193
|
-
rake (13.1
|
194
|
-
rdoc (6.6.
|
193
|
+
rake (13.2.1)
|
194
|
+
rdoc (6.6.3.1)
|
195
195
|
psych (>= 4.0.0)
|
196
|
-
regexp_parser (2.9.
|
197
|
-
reline (0.
|
196
|
+
regexp_parser (2.9.2)
|
197
|
+
reline (0.5.7)
|
198
198
|
io-console (~> 0.5)
|
199
|
-
rexml (3.2.
|
199
|
+
rexml (3.2.8)
|
200
|
+
strscan (>= 3.0.9)
|
200
201
|
rspec (3.13.0)
|
201
202
|
rspec-core (~> 3.13.0)
|
202
203
|
rspec-expectations (~> 3.13.0)
|
@@ -210,7 +211,7 @@ GEM
|
|
210
211
|
diff-lcs (>= 1.2.0, < 2.0)
|
211
212
|
rspec-support (~> 3.13.0)
|
212
213
|
rspec-support (3.13.1)
|
213
|
-
rubocop (1.
|
214
|
+
rubocop (1.63.5)
|
214
215
|
json (~> 2.3)
|
215
216
|
language_server-protocol (>= 3.17.0)
|
216
217
|
parallel (~> 1.10)
|
@@ -221,23 +222,26 @@ GEM
|
|
221
222
|
rubocop-ast (>= 1.31.1, < 2.0)
|
222
223
|
ruby-progressbar (~> 1.7)
|
223
224
|
unicode-display_width (>= 2.4.0, < 3.0)
|
224
|
-
rubocop-ast (1.31.
|
225
|
-
parser (>= 3.3.0
|
225
|
+
rubocop-ast (1.31.3)
|
226
|
+
parser (>= 3.3.1.0)
|
226
227
|
rubocop-capybara (2.20.0)
|
227
228
|
rubocop (~> 1.41)
|
228
229
|
rubocop-factory_bot (2.25.1)
|
229
230
|
rubocop (~> 1.41)
|
230
|
-
rubocop-rails (2.
|
231
|
+
rubocop-rails (2.25.0)
|
231
232
|
activesupport (>= 4.2.0)
|
232
233
|
rack (>= 1.1)
|
233
234
|
rubocop (>= 1.33.0, < 2.0)
|
234
235
|
rubocop-ast (>= 1.31.1, < 2.0)
|
235
236
|
rubocop-rake (0.6.0)
|
236
237
|
rubocop (~> 1.0)
|
237
|
-
rubocop-rspec (2.
|
238
|
+
rubocop-rspec (2.29.2)
|
238
239
|
rubocop (~> 1.40)
|
239
240
|
rubocop-capybara (~> 2.17)
|
240
241
|
rubocop-factory_bot (~> 2.22)
|
242
|
+
rubocop-rspec_rails (~> 2.28)
|
243
|
+
rubocop-rspec_rails (2.28.3)
|
244
|
+
rubocop (~> 1.40)
|
241
245
|
ruby-progressbar (1.13.0)
|
242
246
|
simplecov (0.22.0)
|
243
247
|
docile (~> 1.1)
|
@@ -246,8 +250,9 @@ GEM
|
|
246
250
|
simplecov-html (0.12.3)
|
247
251
|
simplecov_json_formatter (0.1.4)
|
248
252
|
stringio (3.1.0)
|
253
|
+
strscan (3.1.0)
|
249
254
|
tdiff (0.4.0)
|
250
|
-
thor (1.3.
|
255
|
+
thor (1.3.1)
|
251
256
|
timeout (0.4.1)
|
252
257
|
tzinfo (2.0.6)
|
253
258
|
concurrent-ruby (~> 1.0)
|
@@ -259,7 +264,7 @@ GEM
|
|
259
264
|
xpath (3.2.0)
|
260
265
|
nokogiri (~> 1.8)
|
261
266
|
yard (0.9.36)
|
262
|
-
zeitwerk (2.6.
|
267
|
+
zeitwerk (2.6.14)
|
263
268
|
|
264
269
|
PLATFORMS
|
265
270
|
x86_64-darwin-19
|
@@ -271,12 +276,12 @@ DEPENDENCIES
|
|
271
276
|
capybara (~> 3.40.0)
|
272
277
|
ccs-frontend_helpers!
|
273
278
|
nokogiri-diff (~> 0.3.0)
|
274
|
-
rake (~> 13.
|
279
|
+
rake (~> 13.2)
|
275
280
|
rspec (~> 3.13)
|
276
|
-
rubocop (~> 1.
|
277
|
-
rubocop-rails (~> 2.
|
281
|
+
rubocop (~> 1.63)
|
282
|
+
rubocop-rails (~> 2.25)
|
278
283
|
rubocop-rake (~> 0.6)
|
279
|
-
rubocop-rspec (~> 2.
|
284
|
+
rubocop-rspec (~> 2.29)
|
280
285
|
simplecov (~> 0.21)
|
281
286
|
yard (~> 0.9)
|
282
287
|
|
data/README.md
CHANGED
@@ -14,6 +14,8 @@ The following table shows the version of CCS Frontend Helpers that you should us
|
|
14
14
|
|
15
15
|
| CCS Frontend Helpers Version | Target GOV.UK Frontend Version |
|
16
16
|
| ----------------------------- | ------------------------------ |
|
17
|
+
| [0.4.0](https://github.com/tim-s-ccs/ccs-frontend_helpers/releases/tag/v0.4.0) | [5.4.0](https://github.com/alphagov/govuk-frontend/releases/tag/v5.4.0) |
|
18
|
+
| [0.3.0](https://github.com/tim-s-ccs/ccs-frontend_helpers/releases/tag/v0.3.0) | [5.3.0](https://github.com/alphagov/govuk-frontend/releases/tag/v5.3.0) |
|
17
19
|
| [0.2.0](https://github.com/tim-s-ccs/ccs-frontend_helpers/releases/tag/v0.2.0) | [5.2.0](https://github.com/alphagov/govuk-frontend/releases/tag/v5.2.0) |
|
18
20
|
| [0.1.2](https://github.com/tim-s-ccs/ccs-frontend_helpers/releases/tag/v0.1.2) | [4.7.0](https://github.com/alphagov/govuk-frontend/releases/tag/v4.7.0) |
|
19
21
|
|
@@ -37,7 +37,6 @@ module CCS
|
|
37
37
|
def initialize(navigation: nil, meta: nil, **options)
|
38
38
|
super(**options)
|
39
39
|
|
40
|
-
@options[:attributes][:role] = 'contentinfo'
|
41
40
|
@options[:copyright] ||= '© Crown copyright'
|
42
41
|
|
43
42
|
@navigation = navigation&.map { |navigation_item| Navigation.new(context: @context, **navigation_item) }
|
@@ -45,7 +45,6 @@ module CCS
|
|
45
45
|
def initialize(service_authentication_items: nil, navigation: nil, menu_button: nil, service: nil, **options)
|
46
46
|
super(**options)
|
47
47
|
|
48
|
-
@options[:attributes][:role] = 'banner'
|
49
48
|
@options[:container_classes] ||= 'govuk-width-container'
|
50
49
|
@options[:homepage_url] ||= 'https://www.crowncommercial.gov.uk'
|
51
50
|
|
@@ -31,7 +31,7 @@ module CCS
|
|
31
31
|
# @option options [String] :classes additional CSS classes for the error summary HTML
|
32
32
|
# @option options [Hash] :attributes ({}) any additional attributes that will be added as part of the HTML
|
33
33
|
|
34
|
-
def initialize(title:, error_summary_items
|
34
|
+
def initialize(title:, error_summary_items: [], description: nil, **options)
|
35
35
|
super(**options)
|
36
36
|
|
37
37
|
@title = title
|
@@ -51,9 +51,11 @@ module CCS
|
|
51
51
|
concat(tag.h2(title, class: 'govuk-error-summary__title'))
|
52
52
|
concat(tag.div(class: 'govuk-error-summary__body') do
|
53
53
|
concat(tag.p(description)) if description
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
if error_summary_items.any?
|
55
|
+
concat(tag.ul(class: 'govuk-list govuk-error-summary__list') do
|
56
|
+
error_summary_items.each { |error_summary_item| concat(error_summary_item.render) }
|
57
|
+
end)
|
58
|
+
end
|
57
59
|
end)
|
58
60
|
end
|
59
61
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module CCS
|
2
|
+
module Components
|
3
|
+
module GovUK
|
4
|
+
class Field < Base
|
5
|
+
class Input < Field
|
6
|
+
class CharacterCount
|
7
|
+
# = GOV.UK Character count message
|
8
|
+
#
|
9
|
+
# This is used to generate the character count message
|
10
|
+
#
|
11
|
+
# @!attribute [r] count_message
|
12
|
+
# @return [Hint] Hint with the count message
|
13
|
+
# @!attribute [r] after_input
|
14
|
+
# @return [String] Text or HTML for after the textarea input
|
15
|
+
|
16
|
+
class CountMessage
|
17
|
+
include ActionView::Context
|
18
|
+
include ActionView::Helpers
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :count_message, :after_input
|
23
|
+
|
24
|
+
public
|
25
|
+
|
26
|
+
# @param character_count_attribute [String] the name of the field as it will appear in the textarea
|
27
|
+
# @param context [ActionView::Base] the view context
|
28
|
+
# @param character_count_options (see CCS::Components::GovUK::Field::Input::CharacterCount.get_character_count_from_group_options)
|
29
|
+
# @param after_input [String] Text or HTML that goes after the input
|
30
|
+
#
|
31
|
+
# @option (see CCS::Components::GovUK::Field::Input::CharacterCount.get_character_count_from_group_options)
|
32
|
+
|
33
|
+
def initialize(character_count_attribute:, context:, character_count_options:, after_input: nil)
|
34
|
+
count_message = character_count_options[:textarea_description] || {}
|
35
|
+
|
36
|
+
count_message_length = character_count_options[:maxwords] || character_count_options[:maxlength]
|
37
|
+
count_message_default = "You can enter up to %<count>s #{character_count_options[:maxwords] ? 'words' : 'characters'}"
|
38
|
+
|
39
|
+
text = count_message_length ? format(count_message[:count_message] || count_message_default, count: count_message_length) : ''
|
40
|
+
classes = "govuk-character-count__message #{count_message[:classes]}".rstrip
|
41
|
+
|
42
|
+
@count_message = Hint.new(text: text, classes: classes, attributes: { id: "#{character_count_attribute}-info" }, context: context)
|
43
|
+
@after_input = after_input
|
44
|
+
end
|
45
|
+
|
46
|
+
# Generates the HTML for the GOV.UK Character count message
|
47
|
+
#
|
48
|
+
# @return [ActiveSupport::SafeBuffer]
|
49
|
+
|
50
|
+
def render
|
51
|
+
capture do
|
52
|
+
concat(count_message.render)
|
53
|
+
concat(after_input) if after_input
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative 'textarea'
|
2
|
-
require_relative '
|
2
|
+
require_relative 'character_count/count_message'
|
3
3
|
|
4
4
|
module CCS
|
5
5
|
module Components
|
@@ -21,12 +21,9 @@ module CCS
|
|
21
21
|
# @return [Hash] HTML options for the character count
|
22
22
|
|
23
23
|
class CharacterCount
|
24
|
-
include ActionView::Context
|
25
|
-
include ActionView::Helpers
|
26
|
-
|
27
24
|
private
|
28
25
|
|
29
|
-
attr_reader :textarea, :textarea_description
|
26
|
+
attr_reader :textarea, :textarea_description
|
30
27
|
|
31
28
|
public
|
32
29
|
|
@@ -41,21 +38,10 @@ module CCS
|
|
41
38
|
def initialize(attribute:, context:, character_count_options: {}, **options)
|
42
39
|
character_count_attribute = options[:form] ? "#{options[:form].object_name}_#{attribute}" : attribute
|
43
40
|
|
44
|
-
initialise_textarea(attribute, character_count_attribute, context, options)
|
45
|
-
initialise_character_count_html_options(character_count_options)
|
46
|
-
initialise_textarea_description(character_count_attribute, context, character_count_options)
|
41
|
+
initialise_textarea(attribute, character_count_attribute, character_count_options, context, options)
|
47
42
|
end
|
48
43
|
|
49
|
-
|
50
|
-
#
|
51
|
-
# @return [ActiveSupport::SafeBuffer]
|
52
|
-
|
53
|
-
def render
|
54
|
-
tag.div(**character_count_html_options) do
|
55
|
-
concat(textarea.render)
|
56
|
-
concat(textarea_description.render)
|
57
|
-
end
|
58
|
-
end
|
44
|
+
delegate :render, to: :textarea
|
59
45
|
|
60
46
|
private
|
61
47
|
|
@@ -63,19 +49,23 @@ module CCS
|
|
63
49
|
#
|
64
50
|
# @param attribute [Symbol] the attribute of the field
|
65
51
|
# @param character_count_attribute [String] the name of the field as it will appear in the textarea
|
52
|
+
# @param character_count_options [Hash] options for the character count
|
66
53
|
# @param context [ActionView::Base] the view context
|
67
54
|
# @param options [Hash] options that will be used for the textarea
|
68
55
|
#
|
69
56
|
# @option (see CCS::Components::GovUK::Field::Input::Textarea#initialize)
|
70
57
|
|
71
|
-
def initialise_textarea(attribute, character_count_attribute, context, options)
|
58
|
+
def initialise_textarea(attribute, character_count_attribute, character_count_options, context, options)
|
59
|
+
set_character_count_from_group_options(character_count_options, options)
|
60
|
+
|
72
61
|
((options[:attributes] ||= {})[:aria] ||= {})[:describedby] = [options.dig(:attributes, :aria, :describedby), "#{character_count_attribute}-info"].compact.join(' ')
|
73
62
|
options[:classes] = "govuk-js-character-count #{options[:classes]}".rstrip
|
74
63
|
|
75
|
-
|
64
|
+
count_message = CountMessage.new(character_count_attribute: character_count_attribute, context: context, character_count_options: character_count_options, after_input: options.delete(:after_input))
|
65
|
+
@textarea = Textarea.new(attribute: attribute, context: context, after_input: count_message.render, **options)
|
76
66
|
end
|
77
67
|
|
78
|
-
#
|
68
|
+
# Sets the charcter count form group options
|
79
69
|
#
|
80
70
|
# @param character_count_options [Hash] options for the charcter count
|
81
71
|
#
|
@@ -91,50 +81,29 @@ module CCS
|
|
91
81
|
# - +:count_message+ replaced the default text for the count message.
|
92
82
|
# If you want the count number to appear, put %<count>s in the string and it will be replaced with the number
|
93
83
|
# - +classes+ additional CSS classes for the textarea description HTML
|
94
|
-
# @option character_count_options [
|
84
|
+
# @option character_count_options [String] :characters_under_limit Message displayed when the number of characters is under the configured maximum, maxlength
|
95
85
|
# @option character_count_options [String] :characters_at_limit_text Message displayed when the number of characters reaches the configured maximum, maxlength
|
96
|
-
# @option character_count_options [
|
97
|
-
# @option character_count_options [
|
86
|
+
# @option character_count_options [String] :characters_over_limit Message displayed when the number of characters is over the configured maximum, maxlength
|
87
|
+
# @option character_count_options [String] :words_under_limit Message displayed when the number of words is under the configured maximum, maxwords
|
98
88
|
# @option character_count_options [String] :words_at_limit_text Message displayed when the number of words reaches the configured maximum, maxwords
|
99
|
-
# @option character_count_options [
|
89
|
+
# @option character_count_options [String] :words_over_limit Message displayed when the number of words is over the configured maximum, maxwords
|
100
90
|
|
101
|
-
def
|
102
|
-
|
91
|
+
def set_character_count_from_group_options(character_count_options, options)
|
92
|
+
(options[:form_group] ||= {})[:classes] = "govuk-character-count #{options.dig(:form_group, :classes)}".rstrip
|
93
|
+
((options[:form_group][:attributes] ||= {})[:data] ||= {})[:module] = 'govuk-character-count'
|
103
94
|
|
104
95
|
%i[maxlength threshold maxwords].each do |data_attribute|
|
105
|
-
|
96
|
+
options[:form_group][:attributes][:data][data_attribute] = character_count_options[data_attribute].to_s if character_count_options[data_attribute]
|
106
97
|
end
|
107
98
|
|
108
|
-
get_chacrter_count_translations(character_count_options)
|
109
|
-
|
99
|
+
get_chacrter_count_translations(character_count_options) do |data_attribute, value|
|
100
|
+
options[:form_group][:attributes][:data][data_attribute] = value
|
110
101
|
end
|
111
|
-
|
112
|
-
@character_count_html_options = character_count_html_options
|
113
|
-
end
|
114
|
-
|
115
|
-
# Initialises the charcter count textarea description
|
116
|
-
#
|
117
|
-
# @param character_count_attribute [String] the name of the field as it will appear in the textarea
|
118
|
-
# @param context [ActionView::Base] the view context
|
119
|
-
# @param (see initialise_character_count_html_options)
|
120
|
-
#
|
121
|
-
# @option (see initialise_character_count_html_options)
|
122
|
-
|
123
|
-
def initialise_textarea_description(character_count_attribute, context, character_count_options)
|
124
|
-
textarea_description = character_count_options[:textarea_description] || {}
|
125
|
-
|
126
|
-
textarea_description_length = character_count_options[:maxwords] || character_count_options[:maxlength]
|
127
|
-
textarea_description_default = "You can enter up to %<count>s #{character_count_options[:maxwords] ? 'words' : 'characters'}"
|
128
|
-
|
129
|
-
text = textarea_description_length ? format(textarea_description[:count_message] || textarea_description_default, count: textarea_description_length) : ''
|
130
|
-
classes = "govuk-character-count__message #{textarea_description[:classes]}".rstrip
|
131
|
-
|
132
|
-
@textarea_description = Hint.new(text: text, classes: classes, attributes: { id: "#{character_count_attribute}-info" }, context: context)
|
133
102
|
end
|
134
103
|
|
135
104
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
136
105
|
|
137
|
-
#
|
106
|
+
# Generator for the translation options for character count
|
138
107
|
#
|
139
108
|
# @param (see initialise_character_count_html_options)
|
140
109
|
#
|
@@ -143,24 +112,25 @@ module CCS
|
|
143
112
|
# @return [Hash]
|
144
113
|
|
145
114
|
def get_chacrter_count_translations(character_count_options)
|
146
|
-
character_count_data_options = {}
|
147
|
-
|
148
115
|
%i[characters_at_limit words_at_limit].each do |data_attribute|
|
149
116
|
data_attribute_name = :"#{data_attribute}_text"
|
150
|
-
|
117
|
+
|
118
|
+
next unless character_count_options[data_attribute_name]
|
119
|
+
|
120
|
+
yield :"i18n.#{data_attribute.to_s.gsub('_', '-')}", character_count_options[data_attribute_name]
|
151
121
|
end
|
152
122
|
|
153
123
|
%i[characters_under_limit characters_over_limit words_under_limit words_over_limit].each do |data_attribute|
|
154
124
|
next unless character_count_options[data_attribute]
|
155
125
|
|
156
126
|
%i[other one].each do |plural_rule|
|
157
|
-
|
127
|
+
next unless character_count_options[data_attribute][plural_rule]
|
128
|
+
|
129
|
+
yield :"i18n.#{data_attribute.to_s.gsub('_', '-')}.#{plural_rule}", character_count_options[data_attribute][plural_rule]
|
158
130
|
end
|
159
131
|
end
|
160
132
|
|
161
|
-
|
162
|
-
|
163
|
-
character_count_data_options
|
133
|
+
yield :'i18n.textarea-description.other', character_count_options[:textarea_description][:count_message] if character_count_options.dig(:textarea_description, :count_message) && !(character_count_options[:maxwords] || character_count_options[:maxlength])
|
164
134
|
end
|
165
135
|
|
166
136
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|