govuk-components 2.0.0 → 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/app/components/govuk_component/breadcrumbs_component.rb +1 -1
- data/app/components/govuk_component/header_component.html.erb +1 -5
- data/app/components/govuk_component/header_component.rb +16 -5
- data/app/components/govuk_component/table_component/body_component.html.erb +5 -0
- data/app/components/govuk_component/table_component/body_component.rb +21 -0
- data/app/components/govuk_component/table_component/caption_component.rb +39 -0
- data/app/components/govuk_component/table_component/cell_component.html.erb +1 -0
- data/app/components/govuk_component/table_component/cell_component.rb +55 -0
- data/app/components/govuk_component/table_component/head_component.html.erb +5 -0
- data/app/components/govuk_component/table_component/head_component.rb +23 -0
- data/app/components/govuk_component/table_component/row_component.html.erb +5 -0
- data/app/components/govuk_component/table_component/row_component.rb +30 -0
- data/app/components/govuk_component/table_component.html.erb +7 -0
- data/app/components/govuk_component/table_component.rb +33 -0
- data/app/helpers/govuk_components_helper.rb +1 -0
- data/lib/govuk/components/version.rb +1 -1
- metadata +18 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a251ce9b412d46a7fd70155a08ba3cc2f6e9830baca832622bdeb459936b791f
|
4
|
+
data.tar.gz: 85cccf721573ce9c734d7156de9da9c1ceefc22cac05888d8163d9441420be7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c94357e58eee8a5ee0ae6e059f3177e340340d7af7cd19cfc3de607cc3b04e52d62e689a9291cc94ae568a1e1de809e224c566cb82a9b148986346773b45064b
|
7
|
+
data.tar.gz: 89494b6d782f7aaf2e4453fc317c917bb87e6dafabd21cd8b6d0d363ebba546ae2ffbdef43f129d8eaff875f0a3cd1b804a99f271f5a33779fca3ec8fddf2d0b
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
[](https://codeclimate.com/github/DFE-Digital/govuk-components/maintainability)
|
5
5
|
[](https://codeclimate.com/github/DFE-Digital/govuk-components/test_coverage)
|
6
6
|
[](https://github.com/DFE-Digital/govuk-components/blob/master/LICENSE)
|
7
|
-
[](https://design-system.service.gov.uk)
|
8
8
|
|
9
9
|
This gem provides a suite of reusable components for the [GOV.UK Design System](https://design-system.service.gov.uk/). It is intended to provide a lightweight alternative to the [GOV.UK Publishing Components](https://github.com/alphagov/govuk_publishing_components) library and is built with Github's [ViewComponent](https://github.com/github/view_component) framework.
|
10
10
|
|
@@ -32,6 +32,7 @@ The provided components are:
|
|
32
32
|
* [Start button](https://dfe-digital.github.io/govuk-components/#start-button)
|
33
33
|
* [Summary list](https://dfe-digital.github.io/govuk-components/#summary-list)
|
34
34
|
* [Tabs](https://dfe-digital.github.io/govuk-components/#tabs)
|
35
|
+
* [Tables](https://dfe-digital.github.io/govuk-components/#table)
|
35
36
|
* [Tags](https://dfe-digital.github.io/govuk-components/#tags)
|
36
37
|
* [Warning text](https://dfe-digital.github.io/govuk-components/#warning-text)
|
37
38
|
|
@@ -44,7 +45,7 @@ All of the components can be rendered in two ways:
|
|
44
45
|
* directly using Rails' `#render` method:
|
45
46
|
|
46
47
|
```erb
|
47
|
-
<%= render GovukComponent::
|
48
|
+
<%= render GovukComponent::WarningTextComponent.new do %>
|
48
49
|
A serious warning
|
49
50
|
<% end %>
|
50
51
|
```
|
@@ -33,11 +33,7 @@
|
|
33
33
|
<%= tag.ul(class: navigation_classes, id: "navigation", aria: { label: navigation_label }) do %>
|
34
34
|
<% navigation_items.each do |item| %>
|
35
35
|
<%= tag.li(class: item.classes.append(item.active_class), **item.html_attributes) do %>
|
36
|
-
|
37
|
-
<%= link_to(item.text, item.href, class: "govuk-header__link") %>
|
38
|
-
<% else %>
|
39
|
-
<%= item.text %>
|
40
|
-
<% end %>
|
36
|
+
<%= item %>
|
41
37
|
<% end %>
|
42
38
|
<% end %>
|
43
39
|
<% end %>
|
@@ -53,17 +53,20 @@ private
|
|
53
53
|
end
|
54
54
|
|
55
55
|
class NavigationItem < GovukComponent::Base
|
56
|
-
attr_reader :text, :href, :active
|
56
|
+
attr_reader :text, :href, :options, :active
|
57
57
|
|
58
|
-
def initialize(text:, href: nil, active:
|
58
|
+
def initialize(text:, href: nil, options: {}, active: nil, classes: [], html_attributes: {})
|
59
59
|
super(classes: classes, html_attributes: html_attributes)
|
60
60
|
|
61
|
-
@text
|
62
|
-
@href
|
63
|
-
@
|
61
|
+
@text = text
|
62
|
+
@href = href
|
63
|
+
@options = options
|
64
|
+
@active = active
|
64
65
|
end
|
65
66
|
|
66
67
|
def active?
|
68
|
+
return current_page?(href) if active.nil?
|
69
|
+
|
67
70
|
active
|
68
71
|
end
|
69
72
|
|
@@ -75,6 +78,14 @@ private
|
|
75
78
|
href.present?
|
76
79
|
end
|
77
80
|
|
81
|
+
def call
|
82
|
+
if link?
|
83
|
+
link_to(text, href, **options, class: "govuk-header__link")
|
84
|
+
else
|
85
|
+
text
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
78
89
|
private
|
79
90
|
|
80
91
|
def default_classes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class GovukComponent::TableComponent::BodyComponent < GovukComponent::Base
|
2
|
+
renders_many :rows, GovukComponent::TableComponent::RowComponent
|
3
|
+
|
4
|
+
def initialize(rows: nil, first_cell_is_header: false, classes: [], html_attributes: {})
|
5
|
+
super(classes: classes, html_attributes: html_attributes)
|
6
|
+
|
7
|
+
build_rows_from_row_data(rows, first_cell_is_header)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def build_rows_from_row_data(data, first_cell_is_header)
|
13
|
+
return if data.blank?
|
14
|
+
|
15
|
+
data.each { |d| row(cell_data: d, first_cell_is_header: first_cell_is_header) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def default_classes
|
19
|
+
%w(govuk-table__body)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class GovukComponent::TableComponent::CaptionComponent < GovukComponent::Base
|
2
|
+
attr_reader :text, :size
|
3
|
+
|
4
|
+
SIZES = %w(s m l xl).freeze
|
5
|
+
|
6
|
+
def initialize(text: nil, id: nil, size: 'm', classes: [], html_attributes: {})
|
7
|
+
super(classes: classes, html_attributes: html_attributes)
|
8
|
+
|
9
|
+
@id = id
|
10
|
+
@text = text
|
11
|
+
@size = size
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
tag.caption(caption_content, class: classes, **html_attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def render?
|
19
|
+
caption_content.present?
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def caption_content
|
25
|
+
@caption_content ||= (content || text)
|
26
|
+
end
|
27
|
+
|
28
|
+
def default_classes
|
29
|
+
%w(govuk-table__caption).tap do |c|
|
30
|
+
c << caption_size_class if @size
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def caption_size_class
|
35
|
+
fail(ArgumentError, "bad size #{size}, must be in #{SIZES}") unless size.in?(SIZES)
|
36
|
+
|
37
|
+
%(govuk-table__caption--#{size})
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= content_tag(cell_element, cell_content, class: classes, **html_attributes) %>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class GovukComponent::TableComponent::CellComponent < GovukComponent::Base
|
2
|
+
attr_reader :text, :header, :numeric, :width
|
3
|
+
|
4
|
+
alias_method :numeric?, :numeric
|
5
|
+
|
6
|
+
WIDTHS = {
|
7
|
+
"full" => "govuk-input govuk-!-width-full",
|
8
|
+
"three-quarters" => "govuk-input govuk-!-width-three-quarters",
|
9
|
+
"two-thirds" => "govuk-input govuk-!-width-two-thirds",
|
10
|
+
"one-half" => "govuk-input govuk-!-width-one-half",
|
11
|
+
"one-third" => "govuk-input govuk-!-width-one-third",
|
12
|
+
"one-quarter" => "govuk-input govuk-!-width-one-quarter",
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
def initialize(header: false, text: nil, numeric: false, width: nil, classes: [], html_attributes: {})
|
16
|
+
super(classes: classes, html_attributes: html_attributes)
|
17
|
+
|
18
|
+
@header = header
|
19
|
+
@text = text
|
20
|
+
@numeric = numeric
|
21
|
+
@width = width
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def width?
|
27
|
+
width.present?
|
28
|
+
end
|
29
|
+
|
30
|
+
def cell_content
|
31
|
+
content || text
|
32
|
+
end
|
33
|
+
|
34
|
+
def cell_element
|
35
|
+
header ? :th : :td
|
36
|
+
end
|
37
|
+
|
38
|
+
def default_classes
|
39
|
+
if header
|
40
|
+
%w(govuk-table__header).tap do |c|
|
41
|
+
c << "govuk-table__header--numeric" if numeric?
|
42
|
+
c << width_class if width?
|
43
|
+
end
|
44
|
+
else
|
45
|
+
%w(govuk-table__cell).tap do |c|
|
46
|
+
c << "govuk-table__cell--numeric" if numeric?
|
47
|
+
c << width_class if width?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def width_class
|
53
|
+
WIDTHS.fetch(width)
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class GovukComponent::TableComponent::HeadComponent < GovukComponent::Base
|
2
|
+
renders_many :rows, GovukComponent::TableComponent::RowComponent
|
3
|
+
|
4
|
+
attr_reader :row_data
|
5
|
+
|
6
|
+
def initialize(rows: nil, classes: [], html_attributes: {})
|
7
|
+
super(classes: classes, html_attributes: html_attributes)
|
8
|
+
|
9
|
+
build_rows_from_row_data(rows)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def build_rows_from_row_data(data)
|
15
|
+
return if data.blank?
|
16
|
+
|
17
|
+
data.each { |d| row(cell_data: d, header: true) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def default_classes
|
21
|
+
%w(govuk-table__head)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class GovukComponent::TableComponent::RowComponent < GovukComponent::Base
|
2
|
+
renders_many :cells, GovukComponent::TableComponent::CellComponent
|
3
|
+
|
4
|
+
attr_reader :header, :first_cell_is_header
|
5
|
+
|
6
|
+
def initialize(cell_data: nil, first_cell_is_header: false, header: false, classes: [], html_attributes: {})
|
7
|
+
super(classes: classes, html_attributes: html_attributes)
|
8
|
+
|
9
|
+
@header = header
|
10
|
+
@first_cell_is_header = first_cell_is_header
|
11
|
+
|
12
|
+
build_cells_from_cell_data(cell_data)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def build_cells_from_cell_data(cell_data)
|
18
|
+
return if cell_data.blank?
|
19
|
+
|
20
|
+
cell_data.map.with_index { |cd, i| cell(header: cell_is_header?(i), text: cd) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def cell_is_header?(count)
|
24
|
+
header || (first_cell_is_header && count.zero?)
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_classes
|
28
|
+
%w(govuk-table__row)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class GovukComponent::TableComponent < GovukComponent::Base
|
2
|
+
renders_one :caption, GovukComponent::TableComponent::CaptionComponent
|
3
|
+
renders_one :head, GovukComponent::TableComponent::HeadComponent
|
4
|
+
renders_many :bodies, GovukComponent::TableComponent::BodyComponent
|
5
|
+
|
6
|
+
attr_accessor :id, :first_cell_is_header, :caption_text
|
7
|
+
|
8
|
+
def initialize(id: nil, rows: nil, head: nil, caption: nil, first_cell_is_header: false, classes: [], html_attributes: {})
|
9
|
+
super(classes: classes, html_attributes: html_attributes)
|
10
|
+
|
11
|
+
@id = id
|
12
|
+
@first_cell_is_header = first_cell_is_header
|
13
|
+
@caption_text = caption
|
14
|
+
|
15
|
+
# when no rows are passed in it's likely we're taking the slot approach
|
16
|
+
return unless rows.presence
|
17
|
+
|
18
|
+
# if no head is passed in,use the first row for headers
|
19
|
+
build(*(head ? [head, rows] : [rows[0], rows[1..]]), caption_text)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def build(head_data, body_data, caption_text)
|
25
|
+
caption(text: caption_text)
|
26
|
+
head(rows: [head_data])
|
27
|
+
body(rows: body_data, first_cell_is_header: first_cell_is_header)
|
28
|
+
end
|
29
|
+
|
30
|
+
def default_classes
|
31
|
+
%w(govuk-table)
|
32
|
+
end
|
33
|
+
end
|
@@ -13,6 +13,7 @@ module GovukComponentsHelper
|
|
13
13
|
govuk_phase_banner: 'GovukComponent::PhaseBannerComponent',
|
14
14
|
govuk_start_button: 'GovukComponent::StartButtonComponent',
|
15
15
|
govuk_summary_list: 'GovukComponent::SummaryListComponent',
|
16
|
+
govuk_table: 'GovukComponent::TableComponent',
|
16
17
|
govuk_tabs: 'GovukComponent::TabComponent',
|
17
18
|
govuk_tag: 'GovukComponent::TagComponent',
|
18
19
|
govuk_warning_text: 'GovukComponent::WarningTextComponent',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk-components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DfE developers
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.
|
47
|
+
version: 2.39.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
54
|
+
version: 2.39.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry-byebug
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,6 +191,17 @@ files:
|
|
191
191
|
- app/components/govuk_component/summary_list_component/value_component.rb
|
192
192
|
- app/components/govuk_component/tab_component.html.erb
|
193
193
|
- app/components/govuk_component/tab_component.rb
|
194
|
+
- app/components/govuk_component/table_component.html.erb
|
195
|
+
- app/components/govuk_component/table_component.rb
|
196
|
+
- app/components/govuk_component/table_component/body_component.html.erb
|
197
|
+
- app/components/govuk_component/table_component/body_component.rb
|
198
|
+
- app/components/govuk_component/table_component/caption_component.rb
|
199
|
+
- app/components/govuk_component/table_component/cell_component.html.erb
|
200
|
+
- app/components/govuk_component/table_component/cell_component.rb
|
201
|
+
- app/components/govuk_component/table_component/head_component.html.erb
|
202
|
+
- app/components/govuk_component/table_component/head_component.rb
|
203
|
+
- app/components/govuk_component/table_component/row_component.html.erb
|
204
|
+
- app/components/govuk_component/table_component/row_component.rb
|
194
205
|
- app/components/govuk_component/tag_component.rb
|
195
206
|
- app/components/govuk_component/traits/custom_classes.rb
|
196
207
|
- app/components/govuk_component/traits/custom_html_attributes.rb
|
@@ -209,7 +220,7 @@ homepage: https://github.com/DFE-Digital/govuk-components
|
|
209
220
|
licenses:
|
210
221
|
- MIT
|
211
222
|
metadata: {}
|
212
|
-
post_install_message:
|
223
|
+
post_install_message:
|
213
224
|
rdoc_options: []
|
214
225
|
require_paths:
|
215
226
|
- lib
|
@@ -225,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
225
236
|
version: '0'
|
226
237
|
requirements: []
|
227
238
|
rubygems_version: 3.1.6
|
228
|
-
signing_key:
|
239
|
+
signing_key:
|
229
240
|
specification_version: 4
|
230
241
|
summary: Lightweight set of reusable GOV.UK Design System components
|
231
242
|
test_files: []
|