govuk-components 3.0.4 → 3.1.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/README.md +2 -1
- data/app/components/govuk_component/accordion_component/section_component.html.erb +1 -1
- data/app/components/govuk_component/accordion_component/section_component.rb +4 -4
- data/app/components/govuk_component/accordion_component.html.erb +1 -1
- data/app/components/govuk_component/accordion_component.rb +5 -6
- data/app/components/govuk_component/back_link_component.rb +6 -6
- data/app/components/govuk_component/base.rb +17 -10
- data/app/components/govuk_component/breadcrumbs_component.html.erb +1 -1
- data/app/components/govuk_component/breadcrumbs_component.rb +10 -8
- data/app/components/govuk_component/cookie_banner_component/message_component.rb +5 -5
- data/app/components/govuk_component/cookie_banner_component.rb +7 -5
- data/app/components/govuk_component/details_component.rb +5 -5
- data/app/components/govuk_component/footer_component.html.erb +2 -2
- data/app/components/govuk_component/footer_component.rb +13 -9
- data/app/components/govuk_component/header_component.html.erb +4 -4
- data/app/components/govuk_component/header_component.rb +32 -29
- data/app/components/govuk_component/inset_text_component.rb +5 -5
- data/app/components/govuk_component/notification_banner_component.html.erb +1 -1
- data/app/components/govuk_component/notification_banner_component.rb +20 -21
- data/app/components/govuk_component/pagination_component/adjacent_page.rb +60 -0
- data/app/components/govuk_component/pagination_component/item.rb +77 -0
- data/app/components/govuk_component/pagination_component/next_page.rb +32 -0
- data/app/components/govuk_component/pagination_component/previous_page.rb +26 -0
- data/app/components/govuk_component/pagination_component.rb +121 -0
- data/app/components/govuk_component/panel_component.rb +5 -5
- data/app/components/govuk_component/phase_banner_component.html.erb +1 -1
- data/app/components/govuk_component/phase_banner_component.rb +4 -4
- data/app/components/govuk_component/section_break_component.rb +44 -0
- data/app/components/govuk_component/start_button_component.rb +16 -17
- data/app/components/govuk_component/summary_list_component/action_component.rb +7 -3
- data/app/components/govuk_component/summary_list_component/key_component.rb +5 -5
- data/app/components/govuk_component/summary_list_component/row_component.rb +15 -7
- data/app/components/govuk_component/summary_list_component/value_component.rb +3 -3
- data/app/components/govuk_component/summary_list_component.html.erb +1 -1
- data/app/components/govuk_component/summary_list_component.rb +4 -8
- data/app/components/govuk_component/tab_component.html.erb +2 -2
- data/app/components/govuk_component/tab_component.rb +17 -9
- data/app/components/govuk_component/table_component/body_component.html.erb +1 -1
- data/app/components/govuk_component/table_component/body_component.rb +2 -2
- data/app/components/govuk_component/table_component/caption_component.rb +5 -5
- data/app/components/govuk_component/table_component/cell_component.rb +10 -2
- data/app/components/govuk_component/table_component/head_component.html.erb +1 -1
- data/app/components/govuk_component/table_component/head_component.rb +2 -2
- data/app/components/govuk_component/table_component/row_component.html.erb +1 -1
- data/app/components/govuk_component/table_component/row_component.rb +4 -4
- data/app/components/govuk_component/table_component.html.erb +1 -1
- data/app/components/govuk_component/table_component.rb +4 -4
- data/app/components/govuk_component/tag_component.rb +7 -5
- data/app/components/govuk_component/warning_text_component.rb +5 -5
- data/app/helpers/govuk_components_helper.rb +2 -0
- data/app/helpers/govuk_link_helper.rb +2 -1
- data/lib/govuk/components/version.rb +1 -1
- data/lib/govuk/components.rb +1 -0
- metadata +74 -8
- data/app/components/govuk_component/table_component/cell_component.html.erb +0 -1
- data/app/components/govuk_component/traits/custom_classes.rb +0 -28
@@ -0,0 +1,60 @@
|
|
1
|
+
class GovukComponent::PaginationComponent::AdjacentPage < GovukComponent::Base
|
2
|
+
attr_reader :href, :label_text, :text, :suffix, :block_mode, :visually_hidden_text
|
3
|
+
alias_method :block_mode?, :block_mode
|
4
|
+
|
5
|
+
def initialize(href:, suffix:, visually_hidden_text:, text:, block_mode: true, label_text: nil, classes: [], html_attributes: {})
|
6
|
+
@href = href
|
7
|
+
@label_text = label_text
|
8
|
+
@text = text
|
9
|
+
@block_mode = block_mode
|
10
|
+
@suffix = suffix
|
11
|
+
@visually_hidden_text = visually_hidden_text
|
12
|
+
|
13
|
+
super(html_attributes: html_attributes, classes: classes)
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
tag.div(**html_attributes) do
|
18
|
+
tag.a(href: href, class: %w(govuk-link govuk-pagination__link), rel: suffix, aria: { label: aria_label }) do
|
19
|
+
safe_join([body, divider, label_content])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def default_attributes
|
27
|
+
{ class: ["govuk-pagination__#{suffix}"] }
|
28
|
+
end
|
29
|
+
|
30
|
+
def body
|
31
|
+
[arrow, title_span]
|
32
|
+
end
|
33
|
+
|
34
|
+
def title_span
|
35
|
+
tag.span(text, class: title_classes)
|
36
|
+
end
|
37
|
+
|
38
|
+
def divider
|
39
|
+
return if label_text.blank?
|
40
|
+
|
41
|
+
tag.span(":", class: %w(govuk-visually-hidden))
|
42
|
+
end
|
43
|
+
|
44
|
+
def label_content
|
45
|
+
return if label_text.blank?
|
46
|
+
|
47
|
+
tag.span(label_text, class: label_classes)
|
48
|
+
end
|
49
|
+
|
50
|
+
def title_classes
|
51
|
+
class_names(
|
52
|
+
%(govuk-pagination__link-title),
|
53
|
+
%(govuk-pagination__link-title--decorated) => label_text.blank?
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
def label_classes
|
58
|
+
%w(govuk-pagination__link-label)
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
class GovukComponent::PaginationComponent::Item < GovukComponent::Base
|
2
|
+
attr_reader :number, :href, :visually_hidden_text, :mode
|
3
|
+
|
4
|
+
def initialize(number: nil, href: nil, current: false, ellipsis: false, from_pagy: false, visually_hidden_text: nil, classes: [], html_attributes: {})
|
5
|
+
@number = number
|
6
|
+
@href = href
|
7
|
+
@visually_hidden_text = visually_hidden_text
|
8
|
+
|
9
|
+
# We have three modes for rendering links:
|
10
|
+
#
|
11
|
+
# * link (a link to another page)
|
12
|
+
# * current (a link to the current page)
|
13
|
+
# * gap (an ellipsis symbol)
|
14
|
+
#
|
15
|
+
# Pagy sets these by object type:
|
16
|
+
# Integer = link
|
17
|
+
# String = current
|
18
|
+
# :gap = gap
|
19
|
+
#
|
20
|
+
# The original Nunjucks component has two boolean settings instead,
|
21
|
+
# ellipsis and current. When ellipsis is true all other arguments are
|
22
|
+
# ignored
|
23
|
+
@mode = from_pagy ? pagy_mode(number) : manual_mode(ellipsis, current)
|
24
|
+
|
25
|
+
super(classes: classes, html_attributes: html_attributes)
|
26
|
+
end
|
27
|
+
|
28
|
+
def call
|
29
|
+
case mode
|
30
|
+
when :link
|
31
|
+
link(current: false)
|
32
|
+
when :current
|
33
|
+
link(current: true)
|
34
|
+
when :gap
|
35
|
+
ellipsis_item
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def pagy_mode(number)
|
42
|
+
return :link if number.is_a?(Integer)
|
43
|
+
return :current if number.is_a?(String)
|
44
|
+
|
45
|
+
:gap
|
46
|
+
end
|
47
|
+
|
48
|
+
def manual_mode(ellipsis, current)
|
49
|
+
return :gap if ellipsis
|
50
|
+
return :current if current
|
51
|
+
|
52
|
+
:link
|
53
|
+
end
|
54
|
+
|
55
|
+
def link(current: false)
|
56
|
+
attributes = html_attributes.tap { |ha| ha[:class] << "govuk-pagination__item--current" if current }
|
57
|
+
|
58
|
+
tag.li(**attributes) do
|
59
|
+
tag.a(href: href, class: %w(govuk-link govuk-pagination__link)) { number.to_s }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def ellipsis_item
|
64
|
+
tag.li("⋯", class: %w(govuk-pagination__item govuk-pagination__item--ellipses))
|
65
|
+
end
|
66
|
+
|
67
|
+
def default_attributes
|
68
|
+
{
|
69
|
+
class: %w(govuk-pagination__item),
|
70
|
+
aria: { label: aria_label }
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def aria_label
|
75
|
+
visually_hidden_text || "Page #{number}"
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class GovukComponent::PaginationComponent::NextPage < GovukComponent::PaginationComponent::AdjacentPage
|
2
|
+
def initialize(href:, text:, label_text: nil, visually_hidden_text: nil, block_mode: true, classes: [], html_attributes: {})
|
3
|
+
super(
|
4
|
+
suffix: "next",
|
5
|
+
text: text,
|
6
|
+
href: href,
|
7
|
+
label_text: label_text,
|
8
|
+
block_mode: block_mode,
|
9
|
+
visually_hidden_text: visually_hidden_text,
|
10
|
+
classes: classes,
|
11
|
+
html_attributes: html_attributes
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def body
|
16
|
+
return [arrow, title_span] if block_mode?
|
17
|
+
|
18
|
+
[title_span, arrow]
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def aria_label
|
24
|
+
@visually_hidden_text || "Next page"
|
25
|
+
end
|
26
|
+
|
27
|
+
def arrow
|
28
|
+
tag.svg(class: "govuk-pagination__icon govuk-pagination__icon--next", xmlns: "http://www.w3.org/2000/svg", height: "13", width: "15", focusable: "false", viewBox: "0 0 15 13", aria: { hidden: "true" }) do
|
29
|
+
tag.path(d: "m8.107-0.0078125-1.4136 1.414 4.2926 4.293h-12.986v2h12.896l-4.1855 3.9766 1.377 1.4492 6.7441-6.4062-6.7246-6.7266z")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class GovukComponent::PaginationComponent::PreviousPage < GovukComponent::PaginationComponent::AdjacentPage
|
2
|
+
def initialize(href:, text:, label_text: nil, visually_hidden_text: nil, block_mode: true, classes: [], html_attributes: {})
|
3
|
+
super(
|
4
|
+
suffix: "prev",
|
5
|
+
text: text,
|
6
|
+
href: href,
|
7
|
+
label_text: label_text,
|
8
|
+
block_mode: block_mode,
|
9
|
+
visually_hidden_text: visually_hidden_text,
|
10
|
+
classes: classes,
|
11
|
+
html_attributes: html_attributes
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def aria_label
|
18
|
+
@visually_hidden_text || "Previous page"
|
19
|
+
end
|
20
|
+
|
21
|
+
def arrow
|
22
|
+
tag.svg(class: "govuk-pagination__icon govuk-pagination__icon--prev", xmlns: "http://www.w3.org/2000/svg", height: "13", width: "15", focusable: "false", viewBox: "0 0 15 13", aria: { hidden: "true" }) do
|
23
|
+
tag.path(d: "m6.5938-0.0078125-6.7266 6.7266 6.7441 6.4062 1.377-1.449-4.1856-3.9768h12.896v-2h-12.984l4.2931-4.293-1.414-1.414z")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
class GovukComponent::PaginationComponent < GovukComponent::Base
|
2
|
+
include Pagy::UrlHelpers
|
3
|
+
|
4
|
+
attr_reader :pagy,
|
5
|
+
:next_text,
|
6
|
+
:previous_text,
|
7
|
+
:visually_hidden_next_text,
|
8
|
+
:visually_hidden_previous_text,
|
9
|
+
:page_items,
|
10
|
+
:previous_content,
|
11
|
+
:next_content,
|
12
|
+
:block_mode,
|
13
|
+
:landmark_label
|
14
|
+
|
15
|
+
alias_method :block_mode?, :block_mode
|
16
|
+
|
17
|
+
renders_many :items, "GovukComponent::PaginationComponent::Item"
|
18
|
+
|
19
|
+
renders_one :next_page, ->(href:, text: default_next_text, label_text: nil, visually_hidden_text: nil, classes: [], html_attributes: {}) do
|
20
|
+
GovukComponent::PaginationComponent::NextPage.new(
|
21
|
+
text: text,
|
22
|
+
href: href,
|
23
|
+
label_text: label_text,
|
24
|
+
block_mode: block_mode?,
|
25
|
+
visually_hidden_text: visually_hidden_text,
|
26
|
+
classes: classes,
|
27
|
+
html_attributes: html_attributes
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
renders_one :previous_page, ->(href:, text: default_previous_text, label_text: nil, visually_hidden_text: nil, classes: [], html_attributes: {}) do
|
32
|
+
GovukComponent::PaginationComponent::PreviousPage.new(
|
33
|
+
text: text,
|
34
|
+
href: href,
|
35
|
+
label_text: label_text,
|
36
|
+
block_mode: block_mode?,
|
37
|
+
visually_hidden_text: visually_hidden_text,
|
38
|
+
classes: classes,
|
39
|
+
html_attributes: html_attributes
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(pagy: nil, next_text: nil, previous_text: nil, visually_hidden_next_text: nil, visually_hidden_previous_text: nil, block_mode: false, landmark_label: "results", classes: [], html_attributes: {})
|
44
|
+
@pagy = pagy
|
45
|
+
@next_text = next_text
|
46
|
+
@previous_text = previous_text
|
47
|
+
@visually_hidden_next_text = visually_hidden_next_text
|
48
|
+
@visually_hidden_previous_text = visually_hidden_previous_text
|
49
|
+
@block_mode = block_mode
|
50
|
+
@landmark_label = landmark_label
|
51
|
+
|
52
|
+
build_items if pagy.present?
|
53
|
+
|
54
|
+
super(classes: classes, html_attributes: html_attributes)
|
55
|
+
end
|
56
|
+
|
57
|
+
def before_render
|
58
|
+
@page_items = items || build_items
|
59
|
+
@previous_content = previous_page || build_previous
|
60
|
+
@next_content = next_page || build_next
|
61
|
+
end
|
62
|
+
|
63
|
+
def call
|
64
|
+
attributes = html_attributes.tap { |ha| (ha[:class] << "govuk-pagination--block") if items.empty? }
|
65
|
+
|
66
|
+
tag.nav(**attributes) do
|
67
|
+
safe_join([
|
68
|
+
previous_content,
|
69
|
+
tag.ul(class: "govuk-pagination__list") { safe_join(page_items) },
|
70
|
+
next_content
|
71
|
+
])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def render?
|
76
|
+
# probably isn't any point rendering if there's only one page
|
77
|
+
(pagy.present? && pagy.series.size > 1) || @previous_content.present? || @next_content.present?
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def default_attributes
|
83
|
+
{ role: "navigation", aria: { label: landmark_label }, class: %w(govuk-pagination) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def build_previous
|
87
|
+
return unless pagy&.prev
|
88
|
+
|
89
|
+
kwargs = {
|
90
|
+
href: pagy_url_for(pagy, pagy.prev),
|
91
|
+
text: @previous_text,
|
92
|
+
visually_hidden_text: visually_hidden_previous_text,
|
93
|
+
}
|
94
|
+
|
95
|
+
previous_page(**kwargs.compact)
|
96
|
+
end
|
97
|
+
|
98
|
+
def build_next
|
99
|
+
return unless pagy&.next
|
100
|
+
|
101
|
+
kwargs = {
|
102
|
+
href: pagy_url_for(pagy, pagy.next),
|
103
|
+
text: @next_text,
|
104
|
+
visually_hidden_text: visually_hidden_next_text,
|
105
|
+
}
|
106
|
+
|
107
|
+
next_page(**kwargs.compact)
|
108
|
+
end
|
109
|
+
|
110
|
+
def build_items
|
111
|
+
pagy.series.map { |i| item(number: i, href: pagy_url_for(pagy, i), from_pagy: true) }
|
112
|
+
end
|
113
|
+
|
114
|
+
def default_next_text
|
115
|
+
safe_join(["Next", tag.span(class: "govuk-visually-hidden") { " page" }])
|
116
|
+
end
|
117
|
+
|
118
|
+
def default_previous_text
|
119
|
+
safe_join(["Previous", tag.span(class: "govuk-visually-hidden") { " page" }])
|
120
|
+
end
|
121
|
+
end
|
@@ -4,24 +4,24 @@ class GovukComponent::PanelComponent < GovukComponent::Base
|
|
4
4
|
renders_one :title_html
|
5
5
|
|
6
6
|
def initialize(title_text: nil, text: nil, heading_level: 1, id: nil, classes: [], html_attributes: {})
|
7
|
-
super(classes: classes, html_attributes: html_attributes)
|
8
|
-
|
9
7
|
@heading_level = heading_level
|
10
8
|
@title_text = title_text
|
11
9
|
@text = text
|
12
10
|
@id = id
|
11
|
+
|
12
|
+
super(classes: classes, html_attributes: html_attributes)
|
13
13
|
end
|
14
14
|
|
15
15
|
def call
|
16
|
-
tag.div(id: id,
|
16
|
+
tag.div(id: id, **html_attributes) do
|
17
17
|
safe_join([panel_title, panel_body].compact)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
-
def
|
24
|
-
%w(govuk-panel govuk-panel--confirmation)
|
23
|
+
def default_attributes
|
24
|
+
{ class: %w(govuk-panel govuk-panel--confirmation) }
|
25
25
|
end
|
26
26
|
|
27
27
|
def heading_tag
|
@@ -2,10 +2,10 @@ class GovukComponent::PhaseBannerComponent < GovukComponent::Base
|
|
2
2
|
attr_reader :text, :phase_tag
|
3
3
|
|
4
4
|
def initialize(tag: nil, text: nil, classes: [], html_attributes: {})
|
5
|
-
super(classes: classes, html_attributes: html_attributes)
|
6
|
-
|
7
5
|
@phase_tag = tag
|
8
6
|
@text = text
|
7
|
+
|
8
|
+
super(classes: classes, html_attributes: html_attributes)
|
9
9
|
end
|
10
10
|
|
11
11
|
def phase_tag_component
|
@@ -14,7 +14,7 @@ class GovukComponent::PhaseBannerComponent < GovukComponent::Base
|
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
def
|
18
|
-
%w(govuk-phase-banner)
|
17
|
+
def default_attributes
|
18
|
+
{ class: %w(govuk-phase-banner) }
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class GovukComponent::SectionBreakComponent < GovukComponent::Base
|
2
|
+
SIZES = %w(m l xl).freeze
|
3
|
+
|
4
|
+
def initialize(visible: false, size: nil, classes: [], html_attributes: {})
|
5
|
+
@visible = visible
|
6
|
+
@size = size
|
7
|
+
|
8
|
+
super(classes: classes, html_attributes: html_attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
tag.hr(**html_attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :size, :visible
|
18
|
+
|
19
|
+
def default_attributes
|
20
|
+
{ class: default_classes }
|
21
|
+
end
|
22
|
+
|
23
|
+
def default_classes
|
24
|
+
class_names(
|
25
|
+
"govuk-section-break",
|
26
|
+
size_class,
|
27
|
+
"govuk-section-break--visible" => visible?
|
28
|
+
).split
|
29
|
+
end
|
30
|
+
|
31
|
+
def size_class
|
32
|
+
if size.blank?
|
33
|
+
""
|
34
|
+
elsif size.in?(SIZES)
|
35
|
+
"govuk-section-break--#{size}"
|
36
|
+
else
|
37
|
+
raise ArgumentError, "invalid size #{size}, supported sizes are #{SIZES.to_sentence}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def visible?
|
42
|
+
visible
|
43
|
+
end
|
44
|
+
end
|
@@ -1,15 +1,21 @@
|
|
1
1
|
class GovukComponent::StartButtonComponent < GovukComponent::Base
|
2
|
+
BUTTON_ATTRIBUTES = {
|
3
|
+
role: 'button',
|
4
|
+
draggable: 'false',
|
5
|
+
data: { module: 'govuk-button' }
|
6
|
+
}.freeze
|
7
|
+
|
2
8
|
attr_reader :text, :href
|
3
9
|
|
4
10
|
def initialize(text:, href:, classes: [], html_attributes: {})
|
5
|
-
super(classes: classes, html_attributes: html_attributes)
|
6
|
-
|
7
11
|
@text = text
|
8
12
|
@href = href
|
13
|
+
|
14
|
+
super(classes: classes, html_attributes: html_attributes)
|
9
15
|
end
|
10
16
|
|
11
17
|
def call
|
12
|
-
link_to(href, **
|
18
|
+
link_to(href, **html_attributes) do
|
13
19
|
safe_join([text, icon])
|
14
20
|
end
|
15
21
|
end
|
@@ -17,20 +23,17 @@ class GovukComponent::StartButtonComponent < GovukComponent::Base
|
|
17
23
|
private
|
18
24
|
|
19
25
|
def default_attributes
|
20
|
-
{
|
21
|
-
role: 'button',
|
22
|
-
draggable: 'false',
|
23
|
-
class: classes,
|
24
|
-
data: { module: 'govuk-button' }
|
25
|
-
}
|
26
|
+
BUTTON_ATTRIBUTES.merge({ class: %w(govuk-button govuk-button--start) })
|
26
27
|
end
|
27
28
|
|
28
|
-
def
|
29
|
-
|
29
|
+
def icon
|
30
|
+
tag.svg(**svg_attributes) do
|
31
|
+
tag.path(fill: "currentColor", d: "M0 0h13l20 20-20 20H0l20-20z")
|
32
|
+
end
|
30
33
|
end
|
31
34
|
|
32
|
-
def
|
33
|
-
|
35
|
+
def svg_attributes
|
36
|
+
{
|
34
37
|
class: "govuk-button__start-icon",
|
35
38
|
xmlns: "http://www.w3.org/2000/svg",
|
36
39
|
width: "17.5",
|
@@ -39,9 +42,5 @@ private
|
|
39
42
|
focusable: "false",
|
40
43
|
aria: { hidden: "true" }
|
41
44
|
}
|
42
|
-
|
43
|
-
tag.svg(**svg_attributes) do
|
44
|
-
tag.path(fill: "currentColor", d: "M0 0h13l20 20-20 20H0l20-20z")
|
45
|
-
end
|
46
45
|
end
|
47
46
|
end
|
@@ -14,15 +14,19 @@ class GovukComponent::SummaryListComponent::ActionComponent < GovukComponent::Ba
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def call
|
17
|
-
|
18
|
-
|
19
|
-
link_to(href, class: link_classes, **html_attributes) do
|
17
|
+
link_to(href, **html_attributes) do
|
20
18
|
safe_join([action_text, visually_hidden_span].compact, " ")
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
24
22
|
private
|
25
23
|
|
24
|
+
def default_attributes
|
25
|
+
link_classes = govuk_link_classes.append(classes).flatten
|
26
|
+
|
27
|
+
{ class: link_classes }
|
28
|
+
end
|
29
|
+
|
26
30
|
def action_text
|
27
31
|
content || text || fail(ArgumentError, "no text or content")
|
28
32
|
end
|
@@ -2,19 +2,19 @@ class GovukComponent::SummaryListComponent::KeyComponent < GovukComponent::Base
|
|
2
2
|
attr_reader :text
|
3
3
|
|
4
4
|
def initialize(text: nil, classes: [], html_attributes: {})
|
5
|
-
super(classes: classes, html_attributes: html_attributes)
|
6
|
-
|
7
5
|
@text = text
|
6
|
+
|
7
|
+
super(classes: classes, html_attributes: html_attributes)
|
8
8
|
end
|
9
9
|
|
10
10
|
def call
|
11
|
-
tag.dt(key_content,
|
11
|
+
tag.dt(key_content, **html_attributes)
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
def
|
17
|
-
%w(govuk-summary-list__key)
|
16
|
+
def default_attributes
|
17
|
+
{ class: %w(govuk-summary-list__key) }
|
18
18
|
end
|
19
19
|
|
20
20
|
def key_content
|
@@ -6,17 +6,23 @@ class GovukComponent::SummaryListComponent::RowComponent < GovukComponent::Base
|
|
6
6
|
renders_many :actions, GovukComponent::SummaryListComponent::ActionComponent
|
7
7
|
|
8
8
|
def initialize(show_actions_column: nil, classes: [], html_attributes: {})
|
9
|
-
super(classes: classes, html_attributes: html_attributes)
|
10
|
-
|
11
9
|
@show_actions_column = show_actions_column
|
10
|
+
|
11
|
+
super(classes: classes, html_attributes: html_attributes)
|
12
12
|
end
|
13
13
|
|
14
14
|
def call
|
15
|
-
tag.div(
|
15
|
+
tag.div(**html_attributes) do
|
16
16
|
safe_join([key, value, actions_content])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def before_render
|
21
|
+
if show_actions_column && actions.none?
|
22
|
+
html_attributes[:class] << no_actions_class
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
20
26
|
private
|
21
27
|
|
22
28
|
def actions_content
|
@@ -37,13 +43,15 @@ private
|
|
37
43
|
end
|
38
44
|
end
|
39
45
|
|
40
|
-
def
|
41
|
-
%w(govuk-summary-list__row)
|
42
|
-
c << "govuk-summary-list__row--no-actions" if show_actions_column && actions.none?
|
43
|
-
end
|
46
|
+
def default_attributes
|
47
|
+
{ class: %w(govuk-summary-list__row) }
|
44
48
|
end
|
45
49
|
|
46
50
|
def actions_class
|
47
51
|
"govuk-summary-list__actions"
|
48
52
|
end
|
53
|
+
|
54
|
+
def no_actions_class
|
55
|
+
"govuk-summary-list__row--no-actions"
|
56
|
+
end
|
49
57
|
end
|
@@ -8,13 +8,13 @@ class GovukComponent::SummaryListComponent::ValueComponent < GovukComponent::Bas
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def call
|
11
|
-
tag.dd(value_content,
|
11
|
+
tag.dd(value_content, **html_attributes)
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
def
|
17
|
-
%w(govuk-summary-list__value)
|
16
|
+
def default_attributes
|
17
|
+
{ class: %w(govuk-summary-list__value) }
|
18
18
|
end
|
19
19
|
|
20
20
|
def value_content
|
@@ -12,28 +12,24 @@ module GovukComponent
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def initialize(rows: nil, actions: true, borders: true, classes: [], html_attributes: {})
|
15
|
-
super(classes: classes, html_attributes: html_attributes)
|
16
|
-
|
17
15
|
@borders = borders
|
18
16
|
@show_actions_column = actions
|
19
17
|
|
18
|
+
super(classes: classes, html_attributes: html_attributes)
|
19
|
+
|
20
20
|
return unless rows.presence
|
21
21
|
|
22
22
|
build(rows)
|
23
23
|
end
|
24
24
|
|
25
|
-
def classes
|
26
|
-
super.append(borders_class).compact
|
27
|
-
end
|
28
|
-
|
29
25
|
private
|
30
26
|
|
31
27
|
def borders_class
|
32
28
|
%(govuk-summary-list--no-border) unless borders
|
33
29
|
end
|
34
30
|
|
35
|
-
def
|
36
|
-
|
31
|
+
def default_attributes
|
32
|
+
{ class: ["govuk-summary-list", borders_class].compact }
|
37
33
|
end
|
38
34
|
|
39
35
|
def build(rows)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= tag.div(
|
1
|
+
<%= tag.div(**html_attributes) do %>
|
2
2
|
<%= tag.h2(title, class: "govuk-tabs__title") %>
|
3
3
|
<ul class="govuk-tabs__list">
|
4
4
|
<% tabs.each.with_index do |tab, i| %>
|
@@ -6,6 +6,6 @@
|
|
6
6
|
<% end %>
|
7
7
|
</ul>
|
8
8
|
<% tabs.each.with_index do |tab, i| %>
|
9
|
-
<%= tag.div(tab,
|
9
|
+
<%= tag.div(tab, **tab.combined_attributes(i)) %>
|
10
10
|
<% end %>
|
11
11
|
<% end %>
|