govuk-components 5.2.0 → 5.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f49a8caa87e838e21d85b219d5344a50aa8d8ce70145d7c209c11f29d1fc96df
4
- data.tar.gz: 468c1bb30d836cbff55c1407f6fd83378ba384f9430e90e93fad94b48853b1b2
3
+ metadata.gz: b22deb7323c7532776a46557ba64d5a4aba958e1a684dc7d4a8eff188a1ed3ee
4
+ data.tar.gz: 235dbcf62c374970390c483532998f18480c74cfb3a746413e4bb6e0a277f557
5
5
  SHA512:
6
- metadata.gz: fa4e8e53212aa8b898954585dc9c96076499343325d967aea5896eb8c3e68b89ca3c56e1c8d0788b0d2a71a5b1aa1316bbb9b3cb4112d69ed4f6b2f1e3c16f2b
7
- data.tar.gz: 1fcaf8d663e7021a99bb4d55077772e5e33c9c10a0baad938d8895f504c191c6600b807ad30506fd9394ef404daf0210fae07c7dd756e007ab020748608738df
6
+ metadata.gz: 5122fe37f57d769672a1155a6f5c2cdc6ad63bf3216d35997869a2c48391d8741917cac02928532808db421c2b9a242a2948b0fc3bee835256f8a20407f615ab
7
+ data.tar.gz: 4fcdd601d78c4f03dc71d2ff33d6749d5166d8416acd1624e36a6101ec6554880ec7085ad4eefc4515046d44a01f5028225b85c6618d9e449f134ce36e4a4bbf
@@ -5,7 +5,7 @@
5
5
  <%= navigation %>
6
6
  </div>
7
7
 
8
- <hr class="<% brand %>-footer__section-break">
8
+ <%= tag.hr(class: "#{brand}-footer__section-break") %>
9
9
  <% end %>
10
10
 
11
11
  <%= tag.div(class: meta_classes, **meta_html_attributes) do %>
@@ -15,7 +15,7 @@
15
15
  <div class="<%= brand %>-footer__meta-item <%= brand %>-footer__meta-item--grow">
16
16
  <% if meta_items.any? %>
17
17
  <h2 class="<%= brand %>-visually-hidden"><%= meta_items_title %></h2>
18
-
18
+ <%= content_before_meta_items %>
19
19
  <ul class="<%= brand %>-footer__inline-list">
20
20
  <% @meta_items.each do |hyperlink| %>
21
21
  <li class="<%= brand %>-footer__inline-list-item">
@@ -23,6 +23,13 @@
23
23
  </li>
24
24
  <% end %>
25
25
  </ul>
26
+ <%= content_after_meta_items %>
27
+ <% end %>
28
+
29
+ <% if meta_content.present? %>
30
+ <div class="<%= brand %>-footer__meta-custom">
31
+ <%= meta_content %>
32
+ </div>
26
33
  <% end %>
27
34
 
28
35
  <% if meta_licence.nil? %>
@@ -34,12 +41,6 @@
34
41
  <% elsif meta_licence.present? %>
35
42
  <%= tag.span(meta_licence, class: "#{brand}-footer__licence-description") %>
36
43
  <% end %>
37
-
38
- <% if meta_content.present? %>
39
- <div class="<%= brand %>-footer__meta-custom">
40
- <%= meta_content %>
41
- </div>
42
- <% end %>
43
44
  </div>
44
45
 
45
46
  <%= tag.div(copyright, class: "#{brand}-footer__meta-item") %>
@@ -4,8 +4,10 @@ class GovukComponent::FooterComponent < GovukComponent::Base
4
4
  renders_one :meta_html
5
5
  renders_one :meta
6
6
  renders_one :navigation
7
+ renders_one :content_before_meta_items
8
+ renders_one :content_after_meta_items
7
9
 
8
- attr_reader :meta_items, :meta_text, :meta_items_title, :meta_licence, :copyright, :custom_container_classes
10
+ attr_reader :meta_items, :meta_text, :meta_items_title, :meta_licence, :copyright_text, :copyright_url, :custom_container_classes
9
11
 
10
12
  def initialize(
11
13
  classes: [],
@@ -27,7 +29,8 @@ class GovukComponent::FooterComponent < GovukComponent::Base
27
29
  @meta_licence = meta_licence
28
30
  @custom_meta_classes = meta_classes
29
31
  @custom_meta_html_attributes = meta_html_attributes
30
- @copyright = build_copyright(copyright_text, copyright_url)
32
+ @copyright_text = copyright_text
33
+ @copyright_url = copyright_url
31
34
  @custom_container_classes = container_classes
32
35
  @custom_container_html_attributes = container_html_attributes
33
36
 
@@ -67,9 +70,9 @@ private
67
70
 
68
71
  case links
69
72
  when Array
70
- links.map { |link| raw(link_to(link[:text], link[:href], class: "#{brand}-footer__link", **link.fetch(:attr, {}))) }
73
+ links.map { |link| govuk_footer_link_to(link[:text], link[:href], **link.fetch(:attr, {})) }
71
74
  when Hash
72
- links.map { |text, href| raw(link_to(text, href, class: "#{brand}-footer__link")) }
75
+ links.map { |text, href| govuk_footer_link_to(text, href) }
73
76
  else
74
77
  fail(ArgumentError, 'meta links must be a hash or array of hashes') unless links.is_a?(Hash)
75
78
  end
@@ -81,7 +84,7 @@ private
81
84
  raw(%(All content is available under the #{link}, except where otherwise stated))
82
85
  end
83
86
 
84
- def build_copyright(text, url)
85
- link_to(text, url, class: "#{brand}-footer__link #{brand}-footer__copyright-logo")
87
+ def copyright
88
+ link_to(copyright_text, copyright_url, class: "#{brand}-footer__link #{brand}-footer__copyright-logo")
86
89
  end
87
90
  end
@@ -1,4 +1,4 @@
1
- <%= tag.header(role: 'banner', data: { module: "#{brand}-header" }, **html_attributes) do %>
1
+ <%= tag.header(data: { module: "#{brand}-header" }, **html_attributes) do %>
2
2
  <%= tag.div(**container_html_attributes) do %>
3
3
  <div class="<%= brand %>-header__logo">
4
4
  <%= link_to(homepage_url, class: ["#{brand}-header__link", "#{brand}-header__link--homepage"]) do %>
@@ -85,7 +85,7 @@ class GovukComponent::PaginationComponent < GovukComponent::Base
85
85
  private
86
86
 
87
87
  def default_attributes
88
- { role: "navigation", aria: { label: landmark_label }, class: "#{brand}-pagination" }
88
+ { aria: { label: landmark_label }, class: "#{brand}-pagination" }
89
89
  end
90
90
 
91
91
  def build_previous
@@ -1,5 +1,5 @@
1
1
  <%= tag.div(**html_attributes) do %>
2
- <%= tag.h2(title, class: "#{brand}-tabs__title") %>
2
+ <%= tag.h2(title, class: "#{brand}-tabs__title") if title %>
3
3
  <ul class="<%= brand %>-tabs__list">
4
4
  <% tabs.each.with_index do |tab, i| %>
5
5
  <%= tag.li(tab.li_link, class: tab.li_classes(i)) %>
@@ -5,7 +5,7 @@ class GovukComponent::TabComponent < GovukComponent::Base
5
5
 
6
6
  attr_reader :title, :id
7
7
 
8
- def initialize(title:, id: nil, classes: [], html_attributes: {})
8
+ def initialize(title: 'Contents', id: nil, classes: [], html_attributes: {})
9
9
  @title = title
10
10
  @id = id
11
11
 
@@ -57,6 +57,12 @@ module GovukLinkHelper
57
57
  link_to(name, href, **link_args, &block)
58
58
  end
59
59
 
60
+ def govuk_footer_link_to(name, href = nil, **kwargs, &block)
61
+ link_args = { class: "#{brand}-footer__link" }.deep_merge_html_attributes(kwargs)
62
+
63
+ link_to(name, href, **link_args, &block)
64
+ end
65
+
60
66
  def govuk_link_classes(inverse: false, muted: false, no_underline: false, no_visited_state: false, text_colour: false)
61
67
  if [text_colour, inverse, muted].count(true) > 1
62
68
  fail("links can be only be one of text_colour, inverse or muted")
@@ -109,14 +115,16 @@ private
109
115
  Rails.logger.warn(controller_warning_message(kwargs.fetch(:controller))) if kwargs.key?(:controller)
110
116
 
111
117
  button_classes = extract_button_classes(inverse:, secondary:, warning:)
118
+ data_attributes = build_data_attributes("#{brand}-button")
112
119
 
113
- { **button_classes, **button_attributes(disabled), **new_tab_args(new_tab) }.deep_merge_html_attributes(kwargs)
120
+ { **button_classes, **data_attributes, **button_attributes(disabled), **new_tab_args(new_tab) }.deep_merge_html_attributes(kwargs)
114
121
  end
115
122
 
116
- def extract_button_args(disabled: false, inverse: false, secondary: false, warning: false, **kwargs)
123
+ def extract_button_args(disabled: false, inverse: false, secondary: false, warning: false, prevent_double_click: nil, **kwargs)
117
124
  button_classes = extract_button_classes(inverse:, secondary:, warning:)
125
+ data_attributes = build_data_attributes("#{brand}-button", prevent_double_click:)
118
126
 
119
- { **button_classes, **button_attributes(disabled) }.deep_merge_html_attributes(kwargs)
127
+ { **button_classes, **data_attributes, **button_attributes(disabled) }.deep_merge_html_attributes(kwargs)
120
128
  end
121
129
 
122
130
  def extract_link_classes(inverse: false, muted: false, no_underline: false, no_visited_state: false, text_colour: false)
@@ -177,6 +185,13 @@ private
177
185
  def controller_warning_message(value)
178
186
  "controller: '#{value}' parameter detected. Support for old style controller/action links has been removed. See https://github.com/x-govuk/govuk-components/releases/tag/v5.0.0"
179
187
  end
188
+
189
+ def build_data_attributes(data_module, prevent_double_click: nil)
190
+ {
191
+ "data-module": data_module,
192
+ "data-prevent-double-click": prevent_double_click
193
+ }.compact
194
+ end
180
195
  end
181
196
 
182
197
  ActiveSupport.on_load(:action_view) { include GovukLinkHelper }
@@ -0,0 +1,29 @@
1
+ module GovukListHelper
2
+ def govuk_list(array = nil, type: nil, spaced: nil, classes: nil, html_attributes: {}, &block)
3
+ type = type.to_s
4
+
5
+ fail "Unrecognised type for govuk_list - should be :bullet or :number or nil" unless type.in?(["bullet", "number", ""])
6
+
7
+ tag_type = (type == "number") ? "ol" : "ul"
8
+
9
+ html_classes = class_names(
10
+ "#{brand}-list",
11
+ *classes,
12
+ "#{brand}-list--bullet" => (type == "bullet"),
13
+ "#{brand}-list--number" => (type == "number"),
14
+ "#{brand}-list--spaced" => spaced
15
+ )
16
+
17
+ if block_given?
18
+ content_tag(tag_type, class: html_classes, **html_attributes, &block)
19
+ else
20
+ content_tag(tag_type, class: html_classes, **html_attributes) do
21
+ array.each do |item|
22
+ concat tag.li(item)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ ActiveSupport.on_load(:action_view) { include GovukListHelper }
@@ -44,7 +44,7 @@ module GovukRailsCompatibleLinkHelper
44
44
  def govuk_button_to(name = nil, options = nil, extra_options = {}, &block)
45
45
  extra_options = options if block_given?
46
46
  html_options = {
47
- data: { module: "govuk-button" }
47
+ data: { module: "#{brand}-button" }
48
48
  }
49
49
 
50
50
  if extra_options && extra_options[:prevent_double_click]
@@ -1,5 +1,5 @@
1
1
  module Govuk
2
2
  module Components
3
- VERSION = '5.2.0'.freeze
3
+ VERSION = '5.3.0'.freeze
4
4
  end
5
5
  end
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: 5.2.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DfE developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-22 00:00:00.000000000 Z
11
+ date: 2024-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: html-attributes-utils
@@ -34,16 +34,22 @@ dependencies:
34
34
  name: pagy
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '6'
40
+ - - "<"
38
41
  - !ruby/object:Gem::Version
39
- version: '6.0'
42
+ version: '8'
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '6'
50
+ - - "<"
45
51
  - !ruby/object:Gem::Version
46
- version: '6.0'
52
+ version: '8'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: view_component
49
55
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +59,7 @@ dependencies:
53
59
  version: '3.9'
54
60
  - - "<"
55
61
  - !ruby/object:Gem::Version
56
- version: '3.11'
62
+ version: '3.12'
57
63
  type: :runtime
58
64
  prerelease: false
59
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,7 +69,7 @@ dependencies:
63
69
  version: '3.9'
64
70
  - - "<"
65
71
  - !ruby/object:Gem::Version
66
- version: '3.11'
72
+ version: '3.12'
67
73
  - !ruby/object:Gem::Dependency
68
74
  name: deep_merge
69
75
  requirement: !ruby/object:Gem::Requirement
@@ -384,6 +390,7 @@ files:
384
390
  - app/helpers/govuk_components_helper.rb
385
391
  - app/helpers/govuk_exit_this_page_link_helper.rb
386
392
  - app/helpers/govuk_link_helper.rb
393
+ - app/helpers/govuk_list_helper.rb
387
394
  - app/helpers/govuk_rails_compatible_link_helper.rb
388
395
  - app/helpers/govuk_skip_link_helper.rb
389
396
  - app/helpers/govuk_visually_hidden_helper.rb