ccs-frontend_helpers 0.1.0.rc.1
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 +7 -0
- data/.rspec +2 -0
- data/.rubocop.yml +127 -0
- data/CHANGELOG.md +44 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +241 -0
- data/LICENSE.txt +21 -0
- data/README.md +102 -0
- data/Rakefile +10 -0
- data/ccs-frontend_helpers.gemspec +47 -0
- data/lib/ccs/frontend_helpers/ccs_frontend/dashboard_panels.rb +79 -0
- data/lib/ccs/frontend_helpers/ccs_frontend/footer.rb +141 -0
- data/lib/ccs/frontend_helpers/ccs_frontend/header.rb +205 -0
- data/lib/ccs/frontend_helpers/ccs_frontend/logo.rb +49 -0
- data/lib/ccs/frontend_helpers/ccs_frontend.rb +20 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/accordion.rb +115 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/back_link.rb +39 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/breadcrumbs.rb +76 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/button.rb +127 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/cookie_banner.rb +136 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/details.rb +46 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/error_message.rb +67 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/error_summary.rb +100 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/character_count.rb +165 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/checkboxes.rb +200 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/date_input.rb +153 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/file_upload.rb +83 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/input.rb +153 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/radios.rb +201 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/select.rb +124 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field/textarea.rb +106 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/field.rb +213 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/fieldset.rb +71 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/footer.rb +183 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/form_group.rb +50 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/header.rb +161 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/hint.rb +38 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/inset_text.rb +44 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/label.rb +92 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/notification_banner.rb +136 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/pagination.rb +336 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/panel.rb +51 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/phase_banner.rb +49 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/skip_link.rb +40 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/step_by_step_navigation.rb +215 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/summary_list.rb +226 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/table.rb +124 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/tabs.rb +95 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/tag.rb +42 -0
- data/lib/ccs/frontend_helpers/govuk_frontend/warning_text.rb +53 -0
- data/lib/ccs/frontend_helpers/govuk_frontend.rb +82 -0
- data/lib/ccs/frontend_helpers/shared_methods.rb +27 -0
- data/lib/ccs/frontend_helpers/version.rb +7 -0
- data/lib/ccs/frontend_helpers.rb +20 -0
- data/sig/ccs/frontend_helpers.rbs +6 -0
- metadata +241 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
require_relative '../shared_methods'
|
6
|
+
|
7
|
+
module CCS
|
8
|
+
module FrontendHelpers
|
9
|
+
module GovUKFrontend
|
10
|
+
# = GOV.UK Breadcrumbs
|
11
|
+
#
|
12
|
+
# This helper is used for generating the breadcrumbs component from the
|
13
|
+
# {https://design-system.service.gov.uk/components/breadcrumbs GDS - Components - Breadcrumbs}
|
14
|
+
|
15
|
+
module Breadcrumbs
|
16
|
+
include SharedMethods
|
17
|
+
include ActionView::Context
|
18
|
+
include ActionView::Helpers::TagHelper
|
19
|
+
include ActionView::Helpers::TextHelper
|
20
|
+
include ActionView::Helpers::UrlHelper
|
21
|
+
|
22
|
+
# Generates the HTML for the GOV.UK breadcrumbs component
|
23
|
+
#
|
24
|
+
# @param govuk_breadcrumb_items [Array<Hash>] An array of links for the breadcrumbs list. See {#govuk_breadcrumb_link} for details of the items in the array.
|
25
|
+
# @param govuk_breadcrumbs_options [Hash] options that will be used in customising the HTML
|
26
|
+
#
|
27
|
+
# @option govuk_breadcrumbs_options [String] :classes additional CSS classes for the breadcrumbs HTML
|
28
|
+
# @option govuk_breadcrumbs_options [Boolean] :collapse_on_mobile indicates if it is to colapse breadcrumbs on mobile
|
29
|
+
# @option govuk_breadcrumbs_options [Hash] :attributes any additional attributes that will added as part of the HTML
|
30
|
+
#
|
31
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Breadcrumbs
|
32
|
+
# which can then be rendered on the page
|
33
|
+
|
34
|
+
def govuk_breadcrumbs(govuk_breadcrumb_items, **govuk_breadcrumbs_options)
|
35
|
+
initialise_attributes_and_set_classes(govuk_breadcrumbs_options, 'govuk-breadcrumbs')
|
36
|
+
|
37
|
+
govuk_breadcrumbs_options[:attributes][:class] << ' govuk-breadcrumbs--collapse-on-mobile' if govuk_breadcrumbs_options[:collapse_on_mobile]
|
38
|
+
|
39
|
+
tag.div(**govuk_breadcrumbs_options[:attributes]) do
|
40
|
+
tag.ol(class: 'govuk-breadcrumbs__list') do
|
41
|
+
govuk_breadcrumb_items.each { |govuk_breadcrumb_item| concat(govuk_breadcrumb_link(govuk_breadcrumb_item)) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# Generates the HTML for each link in the breadcrumbs.
|
49
|
+
# It is called by {#govuk_breadcrumbs} which will pass in the breadcrum item.
|
50
|
+
#
|
51
|
+
# @param govuk_breadcrumb_item [Hash] a hash containg options for the breadcrumb item
|
52
|
+
#
|
53
|
+
# @option govuk_breadcrumb_item [String] :text the text for the link
|
54
|
+
# @option govuk_breadcrumb_item [String] :href the URI for the link. If blank it is assumed that this item relates to current page
|
55
|
+
# @option govuk_breadcrumb_item [Hash] :attributes any additional attributes that will added as part of the HTML.
|
56
|
+
# If the link is blank then it defaults to +{ aria: { current: 'page' } }+
|
57
|
+
#
|
58
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Breadcrumb list item
|
59
|
+
|
60
|
+
def govuk_breadcrumb_link(govuk_breadcrumb_item)
|
61
|
+
if govuk_breadcrumb_item[:href].present?
|
62
|
+
(govuk_breadcrumb_item[:attributes] ||= {})[:class] = 'govuk-breadcrumbs__link'
|
63
|
+
|
64
|
+
tag.li(class: 'govuk-breadcrumbs__list-item') do
|
65
|
+
link_to(govuk_breadcrumb_item[:text], govuk_breadcrumb_item[:href], **govuk_breadcrumb_item[:attributes])
|
66
|
+
end
|
67
|
+
else
|
68
|
+
tag.li(class: 'govuk-breadcrumbs__list-item', aria: { current: 'page' }) do
|
69
|
+
govuk_breadcrumb_item[:text]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
require_relative '../shared_methods'
|
6
|
+
|
7
|
+
module CCS
|
8
|
+
module FrontendHelpers
|
9
|
+
module GovUKFrontend
|
10
|
+
# = GOV.UK Button
|
11
|
+
#
|
12
|
+
# This helper is used for generating the button component from the
|
13
|
+
# {https://design-system.service.gov.uk/components/button GDS - Components - Button}
|
14
|
+
|
15
|
+
module Button
|
16
|
+
include SharedMethods
|
17
|
+
include ActionView::Context
|
18
|
+
include ActionView::Helpers::TagHelper
|
19
|
+
include ActionView::Helpers::TextHelper
|
20
|
+
include ActionView::Helpers::UrlHelper
|
21
|
+
include ActionView::Helpers::FormTagHelper
|
22
|
+
|
23
|
+
# Generates the HTML for the GOV.UK button component
|
24
|
+
#
|
25
|
+
# @param text [String] the text that will be shown in the button
|
26
|
+
# @param govuk_button_options [Hash] options that will be used in customising the HTML
|
27
|
+
#
|
28
|
+
# @option govuk_button_options [String] :classes additional CSS classes for the button HTML
|
29
|
+
# @option govuk_button_options [Boolean] :is_start_button indicates if it is a start button
|
30
|
+
# @option govuk_button_options [String] :href the URI that will be used in anchor tag
|
31
|
+
# @option govuk_button_options [ActionView::Helpers::FormBuilder] :form the form builder used to create the submit button
|
32
|
+
# @option govuk_button_options [Hash] :attributes ({ data: { module: 'govuk-button' } }) any additional attributes that will added as part of the HTML
|
33
|
+
#
|
34
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Button
|
35
|
+
# which can then be rendered on the page
|
36
|
+
|
37
|
+
def govuk_button(text, **govuk_button_options)
|
38
|
+
initialise_attributes_and_set_classes(govuk_button_options, 'govuk-button')
|
39
|
+
set_data_module(govuk_button_options, 'govuk-button')
|
40
|
+
|
41
|
+
govuk_button_options[:attributes][:class] << ' govuk-button--disabled' if govuk_button_options[:attributes][:disabled]
|
42
|
+
govuk_button_options[:attributes][:class] << ' govuk-button--start' if govuk_button_options[:is_start_button]
|
43
|
+
|
44
|
+
button_method = if govuk_button_options[:href]
|
45
|
+
:govuk_button_link
|
46
|
+
elsif govuk_button_options[:form]
|
47
|
+
:govuk_button_submit
|
48
|
+
else
|
49
|
+
:govuk_button_button
|
50
|
+
end
|
51
|
+
|
52
|
+
send(button_method, text, **govuk_button_options)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
# Generates the HTML for the GOV.UK button component as an anchor tag.
|
58
|
+
# It is called by {#govuk_button} which will pass in the parameters, including any defaults.
|
59
|
+
#
|
60
|
+
# @param text [String] the text that will be shown in the button
|
61
|
+
# @param govuk_button_options [Hash] options that will be used in customising the HTML
|
62
|
+
#
|
63
|
+
# @option govuk_button_options [Boolean] :is_start_button indicates if it is a start button
|
64
|
+
# @option govuk_button_options [String] :href the URI that will be used in anchor tag
|
65
|
+
# @option govuk_button_options [Hash] :attributes any additional attributes that will added as part of the HTML
|
66
|
+
#
|
67
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Button as an anchor element
|
68
|
+
# which can then be rendered on the page
|
69
|
+
|
70
|
+
def govuk_button_link(text, **govuk_button_options)
|
71
|
+
govuk_button_options[:attributes][:role] = :button
|
72
|
+
govuk_button_options[:attributes][:draggable] = false
|
73
|
+
|
74
|
+
link_to(govuk_button_options[:href], **govuk_button_options[:attributes]) do
|
75
|
+
concat(text)
|
76
|
+
concat(govuk_start_button_icon) if govuk_button_options[:is_start_button]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Generates the HTML for the GOV.UK button component as a button.
|
81
|
+
# It is called by {#govuk_button} which will pass in the parameters, including any defaults.
|
82
|
+
#
|
83
|
+
# @param text [String] the text that will be shown in the button
|
84
|
+
# @param govuk_button_options [Hash] options that will be used in customising the HTML
|
85
|
+
#
|
86
|
+
# @option govuk_button_options [Boolean] :is_start_button indicates if it is a start button
|
87
|
+
# @option govuk_button_options [Hash] :attributes any additional attributes that will added as part of the HTML
|
88
|
+
#
|
89
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Button as a button element
|
90
|
+
# which can then be rendered on the page
|
91
|
+
|
92
|
+
def govuk_button_button(text, **govuk_button_options)
|
93
|
+
button_tag(**govuk_button_options[:attributes]) do
|
94
|
+
concat(text)
|
95
|
+
concat(govuk_start_button_icon) if govuk_button_options[:is_start_button]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# Generates the HTML for the GOV.UK button component as an input.
|
100
|
+
# It is called by {#govuk_button} which will pass in the parameters, including any defaults.
|
101
|
+
#
|
102
|
+
# @param text [String] the text that will be shown in the input
|
103
|
+
# @param govuk_button_options [Hash] options that will be used in customising the HTML
|
104
|
+
#
|
105
|
+
# @option govuk_button_options [ActionView::Helpers::FormBuilder] :form the form builder used to create the submit button
|
106
|
+
# @option govuk_button_options [Hash] :attributes any additional attributes that will added as part of the HTML
|
107
|
+
#
|
108
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Button as an input element
|
109
|
+
# which can then be rendered on the page
|
110
|
+
|
111
|
+
def govuk_button_submit(text, **govuk_button_options)
|
112
|
+
govuk_button_options[:form].submit(text, **govuk_button_options[:attributes])
|
113
|
+
end
|
114
|
+
|
115
|
+
# Generates the arrow for the start button option as part of {#govuk_button}
|
116
|
+
#
|
117
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the arrow for the start button
|
118
|
+
|
119
|
+
def govuk_start_button_icon
|
120
|
+
tag.svg(class: 'govuk-button__start-icon', xmlns: 'http://www.w3.org/2000/svg', width: 17.5, height: 19, viewBox: '0 0 33 40', aria: { hidden: true }, focusable: false) do
|
121
|
+
tag.path(fill: 'currentColor', d: 'M0 0h13l20 20-20 20H0l20-20z')
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'button'
|
4
|
+
|
5
|
+
module CCS
|
6
|
+
module FrontendHelpers
|
7
|
+
module GovUKFrontend
|
8
|
+
# = GOV.UK Cookie Banner
|
9
|
+
#
|
10
|
+
# This helper is used for generating the cookie banner component from the
|
11
|
+
# {https://design-system.service.gov.uk/components/cookie-banner GDS - Components - Cookie banner}
|
12
|
+
|
13
|
+
module CookieBanner
|
14
|
+
include ActionView::Context
|
15
|
+
include ActionView::Helpers::TagHelper
|
16
|
+
include ActionView::Helpers::TextHelper
|
17
|
+
include Button
|
18
|
+
|
19
|
+
# Generates the HTML for the GOV.UK Cookie banner component
|
20
|
+
#
|
21
|
+
# @param messages [Array] the different messages you can pass into the cookie banner. See {govuk_cookie_banner_message_content}
|
22
|
+
# @param govuk_cookie_banner_options [Hash] options that will be used in customising the HTML
|
23
|
+
#
|
24
|
+
# @option govuk_cookie_banner_options [String] :classes additional CSS classes for the cookie banner HTML
|
25
|
+
# @option govuk_cookie_banner_options [Hash] :attributes any additional attributes that will added as part of the HTML
|
26
|
+
#
|
27
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Cookie banner
|
28
|
+
# which can then be rendered on the page
|
29
|
+
|
30
|
+
def govuk_cookie_banner(messages, **govuk_cookie_banner_options)
|
31
|
+
determine_govuk_cookie_banner_attributes(govuk_cookie_banner_options)
|
32
|
+
|
33
|
+
tag.div(**govuk_cookie_banner_options[:attributes]) do
|
34
|
+
messages.each do |message|
|
35
|
+
initialise_attributes_and_set_classes(message, 'govuk-cookie-banner__message govuk-width-container')
|
36
|
+
|
37
|
+
concat(tag.div(**message[:attributes]) do
|
38
|
+
concat(govuk_cookie_banner_message_content(message))
|
39
|
+
concat(govuk_cookie_banner_message_actions(message[:actions])) if message[:actions]
|
40
|
+
end)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# Generates the HTML for a cookie banner message content used in {govuk_cookie_banner}
|
48
|
+
#
|
49
|
+
# @param message [Hash] the options for the cookie banner message
|
50
|
+
#
|
51
|
+
# @option message [String] :heading_text the heading text that displays in the message
|
52
|
+
# @option message [ActiveSupport::SafeBuffer] :content HTML to use as content for the message
|
53
|
+
# @option message [String] :text if +:content+ is blank then this is the text used for the message
|
54
|
+
# @option message [Array] :actions the buttons and links that you want to display in the message. See {govuk_cookie_banner_message_actions}
|
55
|
+
# @option message [String] :classes additional CSS classes for the cookie message HTML
|
56
|
+
# @option message [Hash] :attributes any additional attributes that will added as part of the HTML
|
57
|
+
#
|
58
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for a cookie banner message content used in {govuk_cookie_banner}
|
59
|
+
|
60
|
+
def govuk_cookie_banner_message_content(message)
|
61
|
+
tag.div(class: 'govuk-grid-row') do
|
62
|
+
tag.div(class: 'govuk-grid-column-two-thirds') do
|
63
|
+
concat(tag.h2(message[:heading_text], class: 'govuk-cookie-banner__heading govuk-heading-m')) if message[:heading_text]
|
64
|
+
concat(tag.div(class: 'govuk-cookie-banner__content') do
|
65
|
+
message[:content] || tag.p(message[:text], class: 'govuk-body')
|
66
|
+
end)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# rubocop:disable Metrics/AbcSize
|
72
|
+
|
73
|
+
# Generates the HTML for the cookie banner message actions used in {govuk_cookie_banner}
|
74
|
+
# It defaults to creating button unless a +href+ is set which will create a link
|
75
|
+
#
|
76
|
+
# @param message_actions [Hash] the options for the cookie banner message actions
|
77
|
+
#
|
78
|
+
# @option message_actions [String] :text the button or link text
|
79
|
+
# @option message_actions [String] :href the href for a link
|
80
|
+
# @option message_actions [String] :classes additional CSS classes for the cookie action button or link
|
81
|
+
# @option message_actions [Hash] :attributes any additional attributes that will added as part of the HTML.
|
82
|
+
# If the +:type+ key is present with a value of +:button+,
|
83
|
+
# the action will be rendered as a button
|
84
|
+
#
|
85
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the cookie banner message actions used in {govuk_cookie_banner}
|
86
|
+
|
87
|
+
def govuk_cookie_banner_message_actions(message_actions)
|
88
|
+
tag.div(class: 'govuk-button-group') do
|
89
|
+
message_actions.each do |message_action|
|
90
|
+
message_action[:attributes] ||= {}
|
91
|
+
|
92
|
+
concat(
|
93
|
+
if message_action[:href]
|
94
|
+
if message_action[:attributes][:type] == :button
|
95
|
+
govuk_button(
|
96
|
+
message_action[:text],
|
97
|
+
href: message_action[:href],
|
98
|
+
classes: message_action[:classes],
|
99
|
+
attributes: message_action[:attributes]
|
100
|
+
)
|
101
|
+
else
|
102
|
+
message_action[:attributes][:class] = "govuk-link #{message_action[:classes]}".rstrip
|
103
|
+
|
104
|
+
link_to(message_action[:text], message_action[:href], **message_action[:attributes])
|
105
|
+
end
|
106
|
+
else
|
107
|
+
govuk_button(
|
108
|
+
message_action[:text],
|
109
|
+
classes: message_action[:classes],
|
110
|
+
attributes: message_action[:attributes]
|
111
|
+
)
|
112
|
+
end
|
113
|
+
)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# rubocop:enable Metrics/AbcSize
|
119
|
+
|
120
|
+
# Sets the default attributes for {govuk_cookie_banner}
|
121
|
+
#
|
122
|
+
# @param govuk_cookie_banner_options [Hash] options that will be used in customising the HTML
|
123
|
+
#
|
124
|
+
# @option (see govuk_cookie_banner)
|
125
|
+
|
126
|
+
def determine_govuk_cookie_banner_attributes(govuk_cookie_banner_options)
|
127
|
+
initialise_attributes_and_set_classes(govuk_cookie_banner_options, 'govuk-cookie-banner')
|
128
|
+
|
129
|
+
(govuk_cookie_banner_options[:attributes][:data] ||= {})[:nosnippet] = 'true'
|
130
|
+
govuk_cookie_banner_options[:attributes][:role] = 'region'
|
131
|
+
(govuk_cookie_banner_options[:attributes][:aria] ||= {})[:label] ||= 'Cookie banner'
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
require_relative '../shared_methods'
|
6
|
+
|
7
|
+
module CCS
|
8
|
+
module FrontendHelpers
|
9
|
+
module GovUKFrontend
|
10
|
+
# = GOV.UK Details
|
11
|
+
#
|
12
|
+
# This helper is used for generating the details component from the
|
13
|
+
# {https://design-system.service.gov.uk/components/details GDS - Components - Details}
|
14
|
+
|
15
|
+
module Details
|
16
|
+
include SharedMethods
|
17
|
+
include ActionView::Context
|
18
|
+
include ActionView::Helpers::TagHelper
|
19
|
+
include ActionView::Helpers::TextHelper
|
20
|
+
|
21
|
+
# Generates the HTML for the GOV.UK Details component
|
22
|
+
#
|
23
|
+
# @param summary_text [String] the summary text for the details element
|
24
|
+
# @param govuk_details_options [Hash] options that will be used in customising the HTML
|
25
|
+
#
|
26
|
+
# @option govuk_details_options [String] :classes additional CSS classes for the details HTML
|
27
|
+
# @option govuk_details_options [Hash] :attributes ({ data: { module: 'govuk-details' } }) any additional attributes that will added as part of the HTML
|
28
|
+
#
|
29
|
+
# @yield HTML that will be contained within the 'govuk-details__text' div
|
30
|
+
#
|
31
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Details
|
32
|
+
# which can then be rendered on the page
|
33
|
+
|
34
|
+
def govuk_details(summary_text, **govuk_details_options, &block)
|
35
|
+
initialise_attributes_and_set_classes(govuk_details_options, 'govuk-details')
|
36
|
+
set_data_module(govuk_details_options, 'govuk-details')
|
37
|
+
|
38
|
+
tag.details(**govuk_details_options[:attributes]) do
|
39
|
+
concat(tag.summary(tag.span(summary_text, class: 'govuk-details__summary-text'), class: 'govuk-details__summary'))
|
40
|
+
concat(tag.div(class: 'govuk-details__text', &block))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
require_relative '../shared_methods'
|
6
|
+
|
7
|
+
module CCS
|
8
|
+
module FrontendHelpers
|
9
|
+
module GovUKFrontend
|
10
|
+
# = GOV.UK Error Message
|
11
|
+
#
|
12
|
+
# This helper is used for generating the error message component from the
|
13
|
+
# {https://design-system.service.gov.uk/components/error-message GDS - Components - Error message}
|
14
|
+
|
15
|
+
module ErrorMessage
|
16
|
+
include SharedMethods
|
17
|
+
include ActionView::Context
|
18
|
+
include ActionView::Helpers::TagHelper
|
19
|
+
include ActionView::Helpers::TextHelper
|
20
|
+
|
21
|
+
# Generates the HTML for the GOV.UK Error message component
|
22
|
+
#
|
23
|
+
# @param message [String] the message to be displayed
|
24
|
+
# @param attribute [String, Symbol] the attribute that has an error
|
25
|
+
# @param govuk_error_message_options [Hash] options that will be used in customising the HTML
|
26
|
+
#
|
27
|
+
# @option govuk_error_message_options [String] :classes additional CSS classes for the error message HTML
|
28
|
+
# @option govuk_error_message_options [String] :visually_hidden_text ('Error') visualy hidden text before the error message
|
29
|
+
# @option govuk_error_message_options [Hash] :attributes ({}) any additional attributes that will be added as part of the HTML
|
30
|
+
#
|
31
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Error message
|
32
|
+
# which can then be rendered on the page
|
33
|
+
|
34
|
+
def govuk_error_message(message, attribute, **govuk_error_message_options)
|
35
|
+
initialise_attributes_and_set_classes(govuk_error_message_options, 'govuk-error-message')
|
36
|
+
|
37
|
+
govuk_error_message_options[:attributes][:id] ||= "#{attribute}-error"
|
38
|
+
visually_hidden_text = govuk_error_message_options[:visually_hidden_text] || 'Error'
|
39
|
+
|
40
|
+
tag.p(**govuk_error_message_options[:attributes]) do
|
41
|
+
concat(tag.span("#{visually_hidden_text}: ", class: 'govuk-visually-hidden')) if visually_hidden_text.present?
|
42
|
+
concat(message)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Generates the HTML for the GOV.UK Error message component using the error messages in an ActiveModel
|
47
|
+
#
|
48
|
+
# @param model [ActiveModel] model that will be used to find the error message
|
49
|
+
# @param attribute [String, Symbol] the attribute that has an error
|
50
|
+
# @param govuk_error_message_options [Hash] options that will be used in customising the HTML
|
51
|
+
#
|
52
|
+
# @option (see #govuk_error_message)
|
53
|
+
#
|
54
|
+
# @return [NilClass, ActiveSupport::SafeBuffer] if the error message is not on the model it will return nil,
|
55
|
+
# otherwise the HTML for the GOV.UK Error message
|
56
|
+
# which can then be rendered on the page is returned
|
57
|
+
|
58
|
+
def govuk_error_message_with_model(model, attribute, **govuk_error_message_options)
|
59
|
+
error_message = model.errors[attribute].first
|
60
|
+
return unless error_message
|
61
|
+
|
62
|
+
govuk_error_message(error_message, attribute, **govuk_error_message_options)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
require_relative '../shared_methods'
|
6
|
+
|
7
|
+
module CCS
|
8
|
+
module FrontendHelpers
|
9
|
+
module GovUKFrontend
|
10
|
+
# = GOV.UK Error Summary
|
11
|
+
#
|
12
|
+
# This helper is used for generating the error summary component from the
|
13
|
+
# {https://design-system.service.gov.uk/components/error-summary GDS - Components - Error summary}
|
14
|
+
|
15
|
+
module ErrorSummary
|
16
|
+
include SharedMethods
|
17
|
+
include ActionView::Context
|
18
|
+
include ActionView::Helpers::TagHelper
|
19
|
+
include ActionView::Helpers::TextHelper
|
20
|
+
include ActionView::Helpers::UrlHelper
|
21
|
+
|
22
|
+
# Generates the HTML for the GOV.UK Error summary component
|
23
|
+
#
|
24
|
+
# @param title [String] text to use for the heading of the error summary block
|
25
|
+
# @param error_list [Array] the list of errors to include in the summary. See {govuk_error_summary_list}
|
26
|
+
# @param description [String] optional text to use for the description of the errors
|
27
|
+
# @param govuk_error_summary_options [Hash] options that will be used in customising the HTML
|
28
|
+
#
|
29
|
+
# @option govuk_error_summary_options [String] :classes additional CSS classes for the error summary HTML
|
30
|
+
# @option govuk_error_summary_options [Hash] :attributes ({}) any additional attributes that will be added as part of the HTML
|
31
|
+
#
|
32
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Error summary
|
33
|
+
# which can then be rendered on the page
|
34
|
+
|
35
|
+
def govuk_error_summary(title, error_list, description = nil, **govuk_error_summary_options)
|
36
|
+
initialise_attributes_and_set_classes(govuk_error_summary_options, 'govuk-error-summary')
|
37
|
+
set_data_module(govuk_error_summary_options, 'govuk-error-summary')
|
38
|
+
|
39
|
+
tag.div(**govuk_error_summary_options[:attributes]) do
|
40
|
+
tag.div(role: 'alert') do
|
41
|
+
concat(tag.h2(title, class: 'govuk-error-summary__title'))
|
42
|
+
concat(tag.div(class: 'govuk-error-summary__body') do
|
43
|
+
concat(tag.p(description)) if description
|
44
|
+
concat(govuk_error_summary_list(error_list))
|
45
|
+
end)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Generates the HTML for the GOV.UK Error summary component using the error messages in an ActiveModel
|
51
|
+
#
|
52
|
+
# @param model [ActiveModel] model that will be used to find the error messages to list
|
53
|
+
# @param title [String] text to use for the heading of the error summary block
|
54
|
+
# @param description [String] (nil) optional text to use for the description of the errors
|
55
|
+
# @param govuk_error_summary_options [Hash] options that will be used in customising the HTML
|
56
|
+
#
|
57
|
+
# @option (see #govuk_error_summary)
|
58
|
+
#
|
59
|
+
# @return [NilClass, ActiveSupport::SafeBuffer] if there are no errors on the model it will return nil,
|
60
|
+
# otherwise the HTML for the GOV.UK Error summary
|
61
|
+
# which can then be rendered on the page is returned
|
62
|
+
|
63
|
+
def govuk_error_summary_with_model(model, title, description = nil, **govuk_error_summary_options)
|
64
|
+
return if model.errors.blank?
|
65
|
+
|
66
|
+
error_list = model.errors.map { |error| { text: error.message, href: "##{error.attribute}-error" } }
|
67
|
+
|
68
|
+
govuk_error_summary(title, error_list, description, **govuk_error_summary_options)
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
# Generates the HTML for the error list in {govuk_error_summary}
|
74
|
+
#
|
75
|
+
# @param error_list [Array] The list of errors to include in the summary. See {#govuk_error_summary_list}
|
76
|
+
#
|
77
|
+
# @option error_list [String] :href href for the error link item. If provided item will be a link
|
78
|
+
# @option error_list [String] :text Text for the error link item
|
79
|
+
# @option error_list [Hash] :attributes ({}) any additional attributes that will be added as part of the link item
|
80
|
+
#
|
81
|
+
# @return [ActiveSupport::SafeBuffer] the HTML for the error list
|
82
|
+
# which is used in {govuk_error_summary}
|
83
|
+
|
84
|
+
def govuk_error_summary_list(error_list)
|
85
|
+
tag.ul(class: 'govuk-list govuk-error-summary__list') do
|
86
|
+
error_list.each do |error|
|
87
|
+
concat(tag.li do
|
88
|
+
if error[:href]
|
89
|
+
link_to(error[:text], error[:href], **(error[:attributes] || {}))
|
90
|
+
else
|
91
|
+
error[:text]
|
92
|
+
end
|
93
|
+
end)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|