ccs-frontend_helpers 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +70 -74
- data/README.md +1 -0
- data/lib/ccs/components/govuk/service_navigation/link.rb +74 -0
- data/lib/ccs/components/govuk/service_navigation/navigation.rb +81 -0
- data/lib/ccs/components/govuk/service_navigation.rb +91 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/service_navigation.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 +2 -2
- data/yarn.lock +8 -8
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38560818156ac958cffb99cba75120dafce3be490c1536fdf83c92c532d66328
|
4
|
+
data.tar.gz: 2be3dc70f1282f56ce36ce5bb5092abf9a399bd29c8a582a24611caab9a6cbef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcedbbe479c7981653a8aad6fe8944cb1f51b5e6aed4f1bee1f9ca5d9a54b42bdc897aaa3016096235d6e3a0ff9a63d810bf6a0de91433e7a743142ee8ab67e8
|
7
|
+
data.tar.gz: dbbf68e53152b494b4e252b09c3ab019349d6c840199f5253bc84db021aee2fe8fcde8c747014eb61db332cef5a4d87f5d951d9f1c88da998eed2e1939d6bacf
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.3.
|
1
|
+
3.3.4
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [1.2.0] - 2024-09-02
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- Update to CCS Frontend v1.1.3
|
15
|
+
- Update to GOV.UK Frontend v5.6.0
|
16
|
+
- The following GOV.UK helpers have been added:
|
17
|
+
- Service navigation
|
18
|
+
|
10
19
|
## [1.1.1] - 2024-08-12
|
11
20
|
|
12
21
|
### Added
|
data/Gemfile
CHANGED
@@ -16,9 +16,9 @@ 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.
|
19
|
+
gem 'rubocop', '~> 1.66'
|
20
20
|
gem 'rubocop-capybara', '~> 2.20'
|
21
|
-
gem 'rubocop-rails', '~> 2.
|
21
|
+
gem 'rubocop-rails', '~> 2.26'
|
22
22
|
gem 'rubocop-rake', '~> 0.6'
|
23
23
|
gem 'rubocop-rspec', '~> 3.0'
|
24
24
|
|
data/Gemfile.lock
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ccs-frontend_helpers (1.
|
4
|
+
ccs-frontend_helpers (1.2.0)
|
5
5
|
rails (>= 6.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
actioncable (7.1.
|
11
|
-
actionpack (= 7.1.
|
12
|
-
activesupport (= 7.1.
|
10
|
+
actioncable (7.1.4)
|
11
|
+
actionpack (= 7.1.4)
|
12
|
+
activesupport (= 7.1.4)
|
13
13
|
nio4r (~> 2.0)
|
14
14
|
websocket-driver (>= 0.6.1)
|
15
15
|
zeitwerk (~> 2.6)
|
16
|
-
actionmailbox (7.1.
|
17
|
-
actionpack (= 7.1.
|
18
|
-
activejob (= 7.1.
|
19
|
-
activerecord (= 7.1.
|
20
|
-
activestorage (= 7.1.
|
21
|
-
activesupport (= 7.1.
|
16
|
+
actionmailbox (7.1.4)
|
17
|
+
actionpack (= 7.1.4)
|
18
|
+
activejob (= 7.1.4)
|
19
|
+
activerecord (= 7.1.4)
|
20
|
+
activestorage (= 7.1.4)
|
21
|
+
activesupport (= 7.1.4)
|
22
22
|
mail (>= 2.7.1)
|
23
23
|
net-imap
|
24
24
|
net-pop
|
25
25
|
net-smtp
|
26
|
-
actionmailer (7.1.
|
27
|
-
actionpack (= 7.1.
|
28
|
-
actionview (= 7.1.
|
29
|
-
activejob (= 7.1.
|
30
|
-
activesupport (= 7.1.
|
26
|
+
actionmailer (7.1.4)
|
27
|
+
actionpack (= 7.1.4)
|
28
|
+
actionview (= 7.1.4)
|
29
|
+
activejob (= 7.1.4)
|
30
|
+
activesupport (= 7.1.4)
|
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.
|
37
|
-
actionview (= 7.1.
|
38
|
-
activesupport (= 7.1.
|
36
|
+
actionpack (7.1.4)
|
37
|
+
actionview (= 7.1.4)
|
38
|
+
activesupport (= 7.1.4)
|
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.
|
47
|
-
actionpack (= 7.1.
|
48
|
-
activerecord (= 7.1.
|
49
|
-
activestorage (= 7.1.
|
50
|
-
activesupport (= 7.1.
|
46
|
+
actiontext (7.1.4)
|
47
|
+
actionpack (= 7.1.4)
|
48
|
+
activerecord (= 7.1.4)
|
49
|
+
activestorage (= 7.1.4)
|
50
|
+
activesupport (= 7.1.4)
|
51
51
|
globalid (>= 0.6.0)
|
52
52
|
nokogiri (>= 1.8.5)
|
53
|
-
actionview (7.1.
|
54
|
-
activesupport (= 7.1.
|
53
|
+
actionview (7.1.4)
|
54
|
+
activesupport (= 7.1.4)
|
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.
|
60
|
-
activesupport (= 7.1.
|
59
|
+
activejob (7.1.4)
|
60
|
+
activesupport (= 7.1.4)
|
61
61
|
globalid (>= 0.3.6)
|
62
|
-
activemodel (7.1.
|
63
|
-
activesupport (= 7.1.
|
64
|
-
activerecord (7.1.
|
65
|
-
activemodel (= 7.1.
|
66
|
-
activesupport (= 7.1.
|
62
|
+
activemodel (7.1.4)
|
63
|
+
activesupport (= 7.1.4)
|
64
|
+
activerecord (7.1.4)
|
65
|
+
activemodel (= 7.1.4)
|
66
|
+
activesupport (= 7.1.4)
|
67
67
|
timeout (>= 0.4.0)
|
68
|
-
activestorage (7.1.
|
69
|
-
actionpack (= 7.1.
|
70
|
-
activejob (= 7.1.
|
71
|
-
activerecord (= 7.1.
|
72
|
-
activesupport (= 7.1.
|
68
|
+
activestorage (7.1.4)
|
69
|
+
actionpack (= 7.1.4)
|
70
|
+
activejob (= 7.1.4)
|
71
|
+
activerecord (= 7.1.4)
|
72
|
+
activesupport (= 7.1.4)
|
73
73
|
marcel (~> 1.0)
|
74
|
-
activesupport (7.1.
|
74
|
+
activesupport (7.1.4)
|
75
75
|
base64
|
76
76
|
bigdecimal
|
77
77
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
@@ -96,7 +96,7 @@ GEM
|
|
96
96
|
rack-test (>= 0.6.3)
|
97
97
|
regexp_parser (>= 1.5, < 3.0)
|
98
98
|
xpath (~> 3.2)
|
99
|
-
concurrent-ruby (1.3.
|
99
|
+
concurrent-ruby (1.3.4)
|
100
100
|
connection_pool (2.4.1)
|
101
101
|
crass (1.0.6)
|
102
102
|
date (3.3.4)
|
@@ -125,9 +125,9 @@ GEM
|
|
125
125
|
marcel (1.0.4)
|
126
126
|
matrix (0.4.2)
|
127
127
|
mini_mime (1.1.5)
|
128
|
-
minitest (5.
|
128
|
+
minitest (5.25.1)
|
129
129
|
mutex_m (0.2.0)
|
130
|
-
net-imap (0.4.
|
130
|
+
net-imap (0.4.15)
|
131
131
|
date
|
132
132
|
net-protocol
|
133
133
|
net-pop (0.1.2)
|
@@ -137,14 +137,14 @@ GEM
|
|
137
137
|
net-smtp (0.5.0)
|
138
138
|
net-protocol
|
139
139
|
nio4r (2.7.3)
|
140
|
-
nokogiri (1.16.
|
140
|
+
nokogiri (1.16.7-x86_64-darwin)
|
141
141
|
racc (~> 1.4)
|
142
|
-
nokogiri (1.16.
|
142
|
+
nokogiri (1.16.7-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
|
-
parallel (1.26.
|
147
|
+
parallel (1.26.3)
|
148
148
|
parser (3.3.4.2)
|
149
149
|
ast (~> 2.4.1)
|
150
150
|
racc
|
@@ -152,7 +152,7 @@ GEM
|
|
152
152
|
stringio
|
153
153
|
public_suffix (5.0.4)
|
154
154
|
racc (1.8.1)
|
155
|
-
rack (3.1.
|
155
|
+
rack (3.1.7)
|
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.
|
164
|
-
actioncable (= 7.1.
|
165
|
-
actionmailbox (= 7.1.
|
166
|
-
actionmailer (= 7.1.
|
167
|
-
actionpack (= 7.1.
|
168
|
-
actiontext (= 7.1.
|
169
|
-
actionview (= 7.1.
|
170
|
-
activejob (= 7.1.
|
171
|
-
activemodel (= 7.1.
|
172
|
-
activerecord (= 7.1.
|
173
|
-
activestorage (= 7.1.
|
174
|
-
activesupport (= 7.1.
|
163
|
+
rails (7.1.4)
|
164
|
+
actioncable (= 7.1.4)
|
165
|
+
actionmailbox (= 7.1.4)
|
166
|
+
actionmailer (= 7.1.4)
|
167
|
+
actionpack (= 7.1.4)
|
168
|
+
actiontext (= 7.1.4)
|
169
|
+
actionview (= 7.1.4)
|
170
|
+
activejob (= 7.1.4)
|
171
|
+
activemodel (= 7.1.4)
|
172
|
+
activerecord (= 7.1.4)
|
173
|
+
activestorage (= 7.1.4)
|
174
|
+
activesupport (= 7.1.4)
|
175
175
|
bundler (>= 1.15.0)
|
176
|
-
railties (= 7.1.
|
176
|
+
railties (= 7.1.4)
|
177
177
|
rails-dom-testing (2.2.0)
|
178
178
|
activesupport (>= 5.0.0)
|
179
179
|
minitest
|
@@ -181,9 +181,9 @@ GEM
|
|
181
181
|
rails-html-sanitizer (1.6.0)
|
182
182
|
loofah (~> 2.21)
|
183
183
|
nokogiri (~> 1.14)
|
184
|
-
railties (7.1.
|
185
|
-
actionpack (= 7.1.
|
186
|
-
activesupport (= 7.1.
|
184
|
+
railties (7.1.4)
|
185
|
+
actionpack (= 7.1.4)
|
186
|
+
activesupport (= 7.1.4)
|
187
187
|
irb
|
188
188
|
rackup (>= 1.0.0)
|
189
189
|
rake (>= 12.2)
|
@@ -196,8 +196,6 @@ GEM
|
|
196
196
|
regexp_parser (2.9.2)
|
197
197
|
reline (0.5.9)
|
198
198
|
io-console (~> 0.5)
|
199
|
-
rexml (3.3.4)
|
200
|
-
strscan
|
201
199
|
rspec (3.13.0)
|
202
200
|
rspec-core (~> 3.13.0)
|
203
201
|
rspec-expectations (~> 3.13.0)
|
@@ -211,25 +209,24 @@ GEM
|
|
211
209
|
diff-lcs (>= 1.2.0, < 2.0)
|
212
210
|
rspec-support (~> 3.13.0)
|
213
211
|
rspec-support (3.13.1)
|
214
|
-
rubocop (1.
|
212
|
+
rubocop (1.66.0)
|
215
213
|
json (~> 2.3)
|
216
214
|
language_server-protocol (>= 3.17.0)
|
217
215
|
parallel (~> 1.10)
|
218
216
|
parser (>= 3.3.0.2)
|
219
217
|
rainbow (>= 2.2.2, < 4.0)
|
220
218
|
regexp_parser (>= 2.4, < 3.0)
|
221
|
-
|
222
|
-
rubocop-ast (>= 1.31.1, < 2.0)
|
219
|
+
rubocop-ast (>= 1.32.1, < 2.0)
|
223
220
|
ruby-progressbar (~> 1.7)
|
224
221
|
unicode-display_width (>= 2.4.0, < 3.0)
|
225
|
-
rubocop-ast (1.32.
|
222
|
+
rubocop-ast (1.32.1)
|
226
223
|
parser (>= 3.3.1.0)
|
227
224
|
rubocop-capybara (2.21.0)
|
228
225
|
rubocop (~> 1.41)
|
229
|
-
rubocop-rails (2.
|
226
|
+
rubocop-rails (2.26.0)
|
230
227
|
activesupport (>= 4.2.0)
|
231
228
|
rack (>= 1.1)
|
232
|
-
rubocop (>= 1.
|
229
|
+
rubocop (>= 1.52.0, < 2.0)
|
233
230
|
rubocop-ast (>= 1.31.1, < 2.0)
|
234
231
|
rubocop-rake (0.6.0)
|
235
232
|
rubocop (~> 1.0)
|
@@ -243,9 +240,8 @@ GEM
|
|
243
240
|
simplecov-html (0.12.3)
|
244
241
|
simplecov_json_formatter (0.1.4)
|
245
242
|
stringio (3.1.1)
|
246
|
-
strscan (3.1.0)
|
247
243
|
tdiff (0.4.0)
|
248
|
-
thor (1.3.
|
244
|
+
thor (1.3.2)
|
249
245
|
timeout (0.4.1)
|
250
246
|
tzinfo (2.0.6)
|
251
247
|
concurrent-ruby (~> 1.0)
|
@@ -257,7 +253,7 @@ GEM
|
|
257
253
|
xpath (3.2.0)
|
258
254
|
nokogiri (~> 1.8)
|
259
255
|
yard (0.9.36)
|
260
|
-
zeitwerk (2.6.
|
256
|
+
zeitwerk (2.6.18)
|
261
257
|
|
262
258
|
PLATFORMS
|
263
259
|
x86_64-darwin-19
|
@@ -272,9 +268,9 @@ DEPENDENCIES
|
|
272
268
|
nokogiri-diff (~> 0.3.0)
|
273
269
|
rake (~> 13.2)
|
274
270
|
rspec (~> 3.13)
|
275
|
-
rubocop (~> 1.
|
271
|
+
rubocop (~> 1.66)
|
276
272
|
rubocop-capybara (~> 2.20)
|
277
|
-
rubocop-rails (~> 2.
|
273
|
+
rubocop-rails (~> 2.26)
|
278
274
|
rubocop-rake (~> 0.6)
|
279
275
|
rubocop-rspec (~> 3.0)
|
280
276
|
simplecov (~> 0.21)
|
data/README.md
CHANGED
@@ -14,6 +14,7 @@ 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 | Target CCS Frontend Version |
|
16
16
|
| ----------------------------- | ------------------------------ | --------------------------- |
|
17
|
+
| [1.2.0](https://github.com/Crown-Commercial-Service/ccs-frontend_helpers/releases/tag/v1.2.0) | [5.6.0](https://github.com/alphagov/govuk-frontend/releases/tag/v5.6.0) | [1.1.3](https://github.com/Crown-Commercial-Service/ccs-frontend-project/releases/tag/v1.1.3) |
|
17
18
|
| [1.1.2](https://github.com/Crown-Commercial-Service/ccs-frontend_helpers/releases/tag/v1.1.2) | [5.5.0](https://github.com/alphagov/govuk-frontend/releases/tag/v5.5.0) | [1.1.2](https://github.com/Crown-Commercial-Service/ccs-frontend-project/releases/tag/v1.1.2) |
|
18
19
|
| [1.1.1](https://github.com/Crown-Commercial-Service/ccs-frontend_helpers/releases/tag/v1.1.1) | [5.4.1](https://github.com/alphagov/govuk-frontend/releases/tag/v5.4.1) | [1.1.1](https://github.com/Crown-Commercial-Service/ccs-frontend-project/releases/tag/v1.1.1) |
|
19
20
|
| [1.1.0](https://github.com/Crown-Commercial-Service/ccs-frontend_helpers/releases/tag/v1.1.0) | [5.4.0](https://github.com/alphagov/govuk-frontend/releases/tag/v5.4.0) | [1.1.0](https://github.com/Crown-Commercial-Service/ccs-frontend-project/releases/tag/v1.1.0) |
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative '../../base'
|
2
|
+
|
3
|
+
module CCS
|
4
|
+
module Components
|
5
|
+
module GovUK
|
6
|
+
class ServiceNavigation < Base
|
7
|
+
# = GOV.UK Service navigation link
|
8
|
+
#
|
9
|
+
# The individual service navigation link item
|
10
|
+
#
|
11
|
+
# @!attribute [r] text
|
12
|
+
# @return [String] Text for the service navigation link
|
13
|
+
# @!attribute [r] href
|
14
|
+
# @return [String] The href for the service navigation link
|
15
|
+
|
16
|
+
class Link < Base
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :text, :href
|
20
|
+
|
21
|
+
public
|
22
|
+
|
23
|
+
# @param text [String] the text for the service navigation link
|
24
|
+
# @param href [String] the href for the service navigation link
|
25
|
+
# @param options [Hash] options that will be used in customising the HTML
|
26
|
+
#
|
27
|
+
# @option options [Boolean] :active flag to mark the navigation item as active or not
|
28
|
+
# @option options [Hash] :attributes any additional attributes that will added as part of the HTML
|
29
|
+
|
30
|
+
def initialize(text:, href: nil, **options)
|
31
|
+
super(**options)
|
32
|
+
|
33
|
+
@options[:attributes][:aria] = { current: options[:current] ? 'page' : 'true' } if options[:active] || options[:current]
|
34
|
+
|
35
|
+
@text = text
|
36
|
+
@href = href
|
37
|
+
end
|
38
|
+
|
39
|
+
# Generates the HTML for the GOV.UK Service navigation link
|
40
|
+
#
|
41
|
+
# @return [ActiveSupport::SafeBuffer]
|
42
|
+
|
43
|
+
def render
|
44
|
+
tag.li(class: "govuk-service-navigation__item #{'govuk-service-navigation__item--active' if options[:active] || options[:current]}".rstrip) do
|
45
|
+
if href
|
46
|
+
options[:attributes][:class] = 'govuk-service-navigation__link'
|
47
|
+
|
48
|
+
link_to(inner_content, href, **options[:attributes])
|
49
|
+
else
|
50
|
+
options[:attributes][:class] = 'govuk-service-navigation__text'
|
51
|
+
|
52
|
+
tag.span(inner_content, **options[:attributes])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Generates the HTML for the inner content of the GOV.UK Service navigation link component
|
60
|
+
#
|
61
|
+
# @return [ActiveSupport::SafeBuffer]
|
62
|
+
|
63
|
+
def inner_content
|
64
|
+
if options[:active] || options[:current]
|
65
|
+
tag.strong(text, class: 'govuk-service-navigation__active-fallback')
|
66
|
+
else
|
67
|
+
text
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require_relative 'link'
|
2
|
+
|
3
|
+
module CCS
|
4
|
+
module Components
|
5
|
+
module GovUK
|
6
|
+
class ServiceNavigation < Base
|
7
|
+
# = GOV.UK Service navigation navigation
|
8
|
+
#
|
9
|
+
# The service navigation navigation section
|
10
|
+
#
|
11
|
+
# @!attribute [r] navigation
|
12
|
+
# @return Array<Hash> A hash with navigation options
|
13
|
+
# @!attribute [r] navigation_label
|
14
|
+
# @return [String] The aria label for the navigation
|
15
|
+
# @!attribute [r] navigation_classes
|
16
|
+
# @return [String] The classes for the navigation
|
17
|
+
# @!attribute [r] navigation_id
|
18
|
+
# @return [String] The id for the navigation
|
19
|
+
# @!attribute [r] menu_button
|
20
|
+
# @return [Hash] The options for the menu button
|
21
|
+
|
22
|
+
class Navigation
|
23
|
+
include ActionView::Context
|
24
|
+
include ActionView::Helpers
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :navigation, :menu_button
|
29
|
+
|
30
|
+
public
|
31
|
+
|
32
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
33
|
+
|
34
|
+
# @param navigation [Hash] options for the navigation
|
35
|
+
# @param context [ActionView::Base] the view context
|
36
|
+
# @param menu_button [Hash] options for the menu button
|
37
|
+
#
|
38
|
+
# @option navigation [Array] :items an array of links for the navigation section.
|
39
|
+
# See {Components::GovUK::ServiceNavigation::Link#initialize Link#initialize} for details of the items in the array.
|
40
|
+
# @option navigation [String] :classes additional CSS classes for the navigation HTML
|
41
|
+
# @option navigation [String] :label text for the aria-label attribute of the navigation. Defaults to the menu button text
|
42
|
+
#
|
43
|
+
# @option menu_button [String] :text text for the button that opens the mobile navigation menu.
|
44
|
+
# By default, this is set to +Menu+.
|
45
|
+
# @option menu_button [String] :label text for the aria-label attribute of the button that opens the mobile navigation.
|
46
|
+
# Defaults to +Show or hide menu+.
|
47
|
+
|
48
|
+
def initialize(navigation:, context:, menu_button: nil)
|
49
|
+
menu_button ||= {}
|
50
|
+
menu_button[:text] ||= 'Menu'
|
51
|
+
|
52
|
+
@navigation = { id: navigation[:id] || 'navigation' }
|
53
|
+
|
54
|
+
menu_button[:aria] = { controls: @navigation[:id] }
|
55
|
+
menu_button[:aria][:label] = menu_button[:label] if menu_button[:label] && menu_button[:label] != menu_button[:text]
|
56
|
+
|
57
|
+
@menu_button = menu_button
|
58
|
+
@navigation[:links] = navigation[:items].map { |navigation_link| Link.new(context: context, **navigation_link) }
|
59
|
+
@navigation[:label] = navigation[:label] || menu_button[:text]
|
60
|
+
@navigation[:class] = "govuk-service-navigation__wrapper #{navigation[:classes]}".rstrip
|
61
|
+
end
|
62
|
+
|
63
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
64
|
+
|
65
|
+
# Generates the HTML for the GOV.UK Service Navigation navigation
|
66
|
+
#
|
67
|
+
# @return [ActiveSupport::SafeBuffer]
|
68
|
+
|
69
|
+
def render
|
70
|
+
tag.nav(aria: { label: navigation[:label] }, class: navigation[:class]) do
|
71
|
+
concat(button_tag(menu_button[:text], type: :button, class: 'govuk-service-navigation__toggle govuk-js-service-navigation-toggle', aria: menu_button[:aria], hidden: true))
|
72
|
+
concat(tag.ul(id: navigation[:id], class: 'govuk-service-navigation__list') do
|
73
|
+
navigation[:links].each { |navigation_link| concat(navigation_link.render) }
|
74
|
+
end)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require_relative '../base'
|
2
|
+
require_relative 'service_navigation/navigation'
|
3
|
+
|
4
|
+
module CCS
|
5
|
+
module Components
|
6
|
+
module GovUK
|
7
|
+
# = GOV.UK Service Navigation
|
8
|
+
#
|
9
|
+
# This is used to generate the service navigation component from the
|
10
|
+
# {https://design-system.service.gov.uk/components/service-navigatio GDS - Components - Service navigation}
|
11
|
+
#
|
12
|
+
# @!attribute [r] text
|
13
|
+
# @return [String] Text for the service navigation
|
14
|
+
# @!attribute [r] href
|
15
|
+
# @return [String] The href for the service navigation
|
16
|
+
|
17
|
+
class ServiceNavigation < Base
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_reader :navigation, :service
|
21
|
+
|
22
|
+
public
|
23
|
+
|
24
|
+
# @param navigation [Hash] options for the navigation section of the service navigation.
|
25
|
+
# See {Components::GovUK::ServiceNavigation::Navigation#initialize Navigation#initialize} for details of the options.
|
26
|
+
# @param menu_button [Hash] options for the menu button in the service navigation.
|
27
|
+
# See {Components::GovUK::ServiceNavigation::Navigation#initialize Navigation#initialize} for details of the options.
|
28
|
+
# @param service [Hash] options for the service name
|
29
|
+
# @param options [Hash] options that will be used in customising the HTML
|
30
|
+
#
|
31
|
+
# @option service [String] :name the name of the service, included in the service navigation
|
32
|
+
# @option service [String] :href URL for the service name anchor
|
33
|
+
#
|
34
|
+
# @option options [String] :classes additional CSS classes for the service navigation HTML
|
35
|
+
# @option options [Hash] :attributes additional attributes that will added as part of the service navigation HTML
|
36
|
+
|
37
|
+
def initialize(navigation: nil, menu_button: nil, service: nil, **options)
|
38
|
+
super(**options)
|
39
|
+
|
40
|
+
(@options[:attributes][:aria] ||= {})[:label] ||= 'Service information' if service
|
41
|
+
|
42
|
+
@navigation = Navigation.new(navigation: navigation, menu_button: menu_button, context: @context) if navigation && navigation[:items].present?
|
43
|
+
@service = service
|
44
|
+
end
|
45
|
+
|
46
|
+
# Generates the HTML for the GOV.UK Service navigation component
|
47
|
+
#
|
48
|
+
# @return [ActiveSupport::SafeBuffer]
|
49
|
+
|
50
|
+
def render
|
51
|
+
if service
|
52
|
+
tag.section(inner_content, **options[:attributes])
|
53
|
+
else
|
54
|
+
tag.div(inner_content, **options[:attributes])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# The default attributes for the service navigation
|
59
|
+
|
60
|
+
DEFAULT_ATTRIBUTES = { class: 'govuk-service-navigation', data: { module: 'govuk-service-navigation' } }.freeze
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Generates the HTML for the inner content of the GOV.UK Service navigation component
|
65
|
+
#
|
66
|
+
# @return [ActiveSupport::SafeBuffer]
|
67
|
+
|
68
|
+
def inner_content
|
69
|
+
tag.div(class: 'govuk-width-container') do
|
70
|
+
tag.div(class: 'govuk-service-navigation__container') do
|
71
|
+
concat(tag.span(service_navigation_service_name, class: 'govuk-service-navigation__service-name')) if service
|
72
|
+
concat(navigation.render) if navigation
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Generates the service name section
|
78
|
+
#
|
79
|
+
# @return [ActiveSupport::SafeBuffer]
|
80
|
+
|
81
|
+
def service_navigation_service_name
|
82
|
+
if service[:href]
|
83
|
+
link_to(service[:name], service[:href], class: 'govuk-service-navigation__link')
|
84
|
+
else
|
85
|
+
tag.span(service[:name], class: 'govuk-service-navigation__text')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../components/govuk/service_navigation'
|
4
|
+
|
5
|
+
module CCS
|
6
|
+
module FrontendHelpers
|
7
|
+
module GovUKFrontend
|
8
|
+
# = GOV.UK Service Navigation
|
9
|
+
#
|
10
|
+
# This helper is used for generating the service navigation component from the
|
11
|
+
# {https://design-system.service.gov.uk/components/service-navigation GDS - Components - Service navigations}
|
12
|
+
|
13
|
+
module ServiceNavigation
|
14
|
+
# Generates the HTML for the GOV.UK Service navigation component
|
15
|
+
#
|
16
|
+
# @param (see CCS::Components::GovUK::ServiceNavigation#initialize)
|
17
|
+
#
|
18
|
+
# @option (see CCS::Components::GovUK::ServiceNavigation#initialize)
|
19
|
+
#
|
20
|
+
# @return (see CCS::Components::GovUK::ServiceNavigation#render)
|
21
|
+
|
22
|
+
def govuk_service_navigation(**options)
|
23
|
+
Components::GovUK::ServiceNavigation.new(context: self, **options).render
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -28,6 +28,7 @@ require_relative 'govuk_frontend/password_input'
|
|
28
28
|
require_relative 'govuk_frontend/phase_banner'
|
29
29
|
require_relative 'govuk_frontend/radios'
|
30
30
|
require_relative 'govuk_frontend/select'
|
31
|
+
require_relative 'govuk_frontend/service_navigation'
|
31
32
|
require_relative 'govuk_frontend/skip_link'
|
32
33
|
require_relative 'govuk_frontend/step_by_step_navigation'
|
33
34
|
require_relative 'govuk_frontend/summary_list'
|
@@ -72,6 +73,7 @@ module CCS
|
|
72
73
|
include PhaseBanner
|
73
74
|
include Radios
|
74
75
|
include Select
|
76
|
+
include ServiceNavigation
|
75
77
|
include SkipLink
|
76
78
|
include StepByStepNavigation
|
77
79
|
include SummaryList
|
data/package.json
CHANGED
data/yarn.lock
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
# yarn lockfile v1
|
3
3
|
|
4
4
|
|
5
|
-
ccs-frontend@^1.1.
|
6
|
-
version "1.1.
|
7
|
-
resolved "https://registry.yarnpkg.com/ccs-frontend/-/ccs-frontend-1.1.
|
8
|
-
integrity sha512-
|
5
|
+
ccs-frontend@^1.1.3:
|
6
|
+
version "1.1.3"
|
7
|
+
resolved "https://registry.yarnpkg.com/ccs-frontend/-/ccs-frontend-1.1.3.tgz#d42befcf40517a32161716e963c298add2f01141"
|
8
|
+
integrity sha512-jZKKnZVI1JEpHY/3F8Hgry0zlXwlMSBtBc/JBBenXy/T67lmVAf5IadcVCnrZkQ5gLxbY8rfq3nUWZsoF90p5w==
|
9
9
|
|
10
|
-
govuk-frontend@^5.
|
11
|
-
version "5.
|
12
|
-
resolved "https://registry.yarnpkg.com/govuk-frontend/-/govuk-frontend-5.
|
13
|
-
integrity sha512-
|
10
|
+
govuk-frontend@^5.6.0:
|
11
|
+
version "5.6.0"
|
12
|
+
resolved "https://registry.yarnpkg.com/govuk-frontend/-/govuk-frontend-5.6.0.tgz#8c0975f0d825ec7192bcfe64e3e97ef3dfa7dea1"
|
13
|
+
integrity sha512-yNA4bL7i7mNrg36wPNZ3RctHo9mjl82Phs8MWs1lwovxJuQ4ogEo/XWn2uB1HxkXNqgMlW4wnd0iiKgRMfxYfw==
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ccs-frontend_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Crown Commercial Service
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -119,6 +119,9 @@ files:
|
|
119
119
|
- lib/ccs/components/govuk/pagination/item/tag.rb
|
120
120
|
- lib/ccs/components/govuk/panel.rb
|
121
121
|
- lib/ccs/components/govuk/phase_banner.rb
|
122
|
+
- lib/ccs/components/govuk/service_navigation.rb
|
123
|
+
- lib/ccs/components/govuk/service_navigation/link.rb
|
124
|
+
- lib/ccs/components/govuk/service_navigation/navigation.rb
|
122
125
|
- lib/ccs/components/govuk/skip_link.rb
|
123
126
|
- lib/ccs/components/govuk/step_by_step_navigation.rb
|
124
127
|
- lib/ccs/components/govuk/step_by_step_navigation/section.rb
|
@@ -186,6 +189,7 @@ files:
|
|
186
189
|
- lib/ccs/frontend_helpers/govuk_frontend/phase_banner.rb
|
187
190
|
- lib/ccs/frontend_helpers/govuk_frontend/radios.rb
|
188
191
|
- lib/ccs/frontend_helpers/govuk_frontend/select.rb
|
192
|
+
- lib/ccs/frontend_helpers/govuk_frontend/service_navigation.rb
|
189
193
|
- lib/ccs/frontend_helpers/govuk_frontend/skip_link.rb
|
190
194
|
- lib/ccs/frontend_helpers/govuk_frontend/step_by_step_navigation.rb
|
191
195
|
- lib/ccs/frontend_helpers/govuk_frontend/summary_list.rb
|
@@ -222,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
226
|
- !ruby/object:Gem::Version
|
223
227
|
version: '0'
|
224
228
|
requirements: []
|
225
|
-
rubygems_version: 3.5.
|
229
|
+
rubygems_version: 3.5.11
|
226
230
|
signing_key:
|
227
231
|
specification_version: 4
|
228
232
|
summary: Gem containing view helpers for CCS Ruby on Rails projects
|