govuk-components 1.0.0 → 1.1.2

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: c3416a15e9cff8a8ed1f34bd5936d00abef53d308b8ceda1fb1a473cf0d6b6ad
4
- data.tar.gz: 6af9343561c9eb003c16d0cceea38aa131e1b43afe0429c6af01fecf6d5ffe24
3
+ metadata.gz: d3430369791dc162f3624dbd60986f511ab6d01134c26458f66c26229da1a104
4
+ data.tar.gz: b10aa6ae0151000e95f205b48125a5def70ff0a44824887503a1719a1f7c101b
5
5
  SHA512:
6
- metadata.gz: f700f825eaefe7f69808e06f27613a030aea3a86aa027d17cecbbaec08cad205344c888c1a8c97e2f6b34b0b3f9c4a0f460d1cd0fd5358782c271744ea6291cf
7
- data.tar.gz: d9a149d4b223807c8135af07c3edaf27a94fa93dc5ab028b4e7212d6decd986bc8ff73f466e23bca8381445c4c0c7cd3c380c1b63a35bb9b1f529c05270932d4
6
+ metadata.gz: cef1afe63eb5b9532db2c29e86d20fbf36373bdba14b8f9833e8fa770b8ca2029736bed2709bc89843fd41dd9e862c038992992a8101ae9562ff06d4f4e79523
7
+ data.tar.gz: 1040a0ad99e2946e32f88d985685abd167aecd0ae325c9fb4fc81ce20ecc6c832f551e4a03e1d22ec32eaafbdb9c741740c0a1e4473eb67dc9a3452ab6fad857
data/README.md CHANGED
@@ -1,10 +1,13 @@
1
- **This gem is under heavy development and the API is likely to change.**
2
-
3
1
  # GOV.UK Components
4
2
 
5
- [![Build Status](https://travis-ci.com/DFE-Digital/govuk-components.svg?branch=master)](https://travis-ci.com/DFE-Digital/govuk-components)
3
+ [![Tests](https://github.com/DFE-Digital/govuk-components/workflows/Tests/badge.svg)](https://github.com/DFE-Digital/govuk-components/actions?query=workflow%3ATests)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/cbcbc140f300b920d833/maintainability)](https://codeclimate.com/github/DFE-Digital/govuk-components/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/cbcbc140f300b920d833/test_coverage)](https://codeclimate.com/github/DFE-Digital/govuk-components/test_coverage)
6
+ [![GitHub license](https://img.shields.io/github/license/DFE-Digital/govuk-components)](https://github.com/DFE-Digital/govuk-components/blob/master/LICENSE)
7
+ [![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=DFE-Digital/govuk-components)](https://dependabot.com)
8
+ [![GOV.UK Design System Version](https://img.shields.io/badge/GOV.UK%20Design%20System-3.10.2-brightgreen)](https://design-system.service.gov.uk)
6
9
 
7
- 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. ViewComponent will be [supported natively in Rails 6.1](https://edgeguides.rubyonrails.org/layouts_and_rendering.html#rendering-objects).
10
+ 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.
8
11
 
9
12
  ## What's included
10
13
 
@@ -13,6 +16,7 @@ This gem provides a suite of reusable components for the [GOV.UK Design System](
13
16
  | [Accordion](app/components/govuk_component/accordion.rb) | `govuk_accordion` |
14
17
  | [Back link](app/components/govuk_component/back_link.rb) | `govuk_back_link` |
15
18
  | [Breadcrumbs](app/components/govuk_component/breadcrumbs.rb) | `govuk_breadcrumbs` |
19
+ | [Cookie banner](app/components/govuk_component/cookie_banner.rb) | `govuk_cookie_banner` |
16
20
  | [Details](app/components/govuk_component/details.rb) | `govuk_details` |
17
21
  | [Footer](app/components/govuk_component/footer.rb) | `govuk_footer` |
18
22
  | [Header](app/components/govuk_component/header.rb) | `govuk_header` |
@@ -3,7 +3,7 @@
3
3
  <%= tag.div(id: section.id(suffix: 'section'), class: section.classes, **section.html_attributes) do %>
4
4
  <div class="govuk-accordion__section-header">
5
5
  <h2 class="govuk-accordion__section-heading">
6
- <%= tag.span(section.title, id: section.id, class: "govuk-accordion__section-button") %>
6
+ <%= tag.span(section.title, id: section.id, class: "govuk-accordion__section-button", aria: { expanded: section.expanded? }) %>
7
7
  </h2>
8
8
  <% if section.summary.present? %>
9
9
  <%= tag.div(section.summary, id: section.id(suffix: 'summary'), class: %w(govuk-accordion__section-summary govuk-body)) %>
@@ -19,19 +19,26 @@ private
19
19
  end
20
20
 
21
21
  class Section < GovukComponent::Slot
22
- attr_accessor :title, :summary
22
+ attr_accessor :title, :summary, :expanded
23
23
 
24
- def initialize(title:, summary: nil, classes: [], html_attributes: {})
24
+ alias_method :expanded?, :expanded
25
+
26
+ def initialize(title:, summary: nil, expanded: false, classes: [], html_attributes: {})
25
27
  super(classes: classes, html_attributes: html_attributes)
26
28
 
27
29
  self.title = title
28
30
  self.summary = summary
31
+ self.expanded = expanded
29
32
  end
30
33
 
31
34
  def id(suffix: nil)
32
35
  [title.parameterize, suffix].compact.join('-')
33
36
  end
34
37
 
38
+ def classes
39
+ super + (expanded? ? %w(govuk-accordion__section--expanded) : [])
40
+ end
41
+
35
42
  private
36
43
 
37
44
  def default_classes
@@ -11,7 +11,7 @@ class GovukComponent::Base < ViewComponent::Base
11
11
  # with slots feel more DSL-like
12
12
  def self.wrap_slot(name)
13
13
  define_method(%(add_#{name})) do |*args, **kwargs, &block|
14
- self.slot(name, *args, **kwargs, &block)
14
+ slot(name, *args, **kwargs, &block)
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,21 @@
1
+ <%= tag.div(class: classes, role: "region", aria: { label: aria_label }, **html_attributes) do %>
2
+ <div class="govuk-cookie-banner__message govuk-width-container">
3
+ <div class="govuk-grid-row">
4
+ <div class="govuk-grid-column-two-thirds">
5
+ <% if title.present? %>
6
+ <h2 class="govuk-cookie-banner__heading govuk-heading-m">
7
+ <%= title %>
8
+ </h2>
9
+ <% end %>
10
+
11
+ <div class="govuk-cookie-banner__content">
12
+ <%= body %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+ <div class="govuk-button-group">
18
+ <%= actions %>
19
+ </div>
20
+ </div>
21
+ <% end %>
@@ -0,0 +1,18 @@
1
+ class GovukComponent::CookieBanner < GovukComponent::Base
2
+ with_content_areas :body, :actions
3
+
4
+ attr_accessor :title, :aria_label
5
+
6
+ def initialize(title: nil, aria_label: "Cookie banner", classes: [], html_attributes: {})
7
+ super(classes: classes, html_attributes: html_attributes)
8
+
9
+ @title = title
10
+ @aria_label = aria_label
11
+ end
12
+
13
+ private
14
+
15
+ def default_classes
16
+ %w(govuk-cookie-banner)
17
+ end
18
+ end
@@ -1,30 +1,42 @@
1
1
  <%= tag.footer(class: classes, role: 'contentinfo', **html_attributes) do %>
2
2
  <div class="govuk-width-container ">
3
- <% if content.present? %>
4
- <%= content %>
5
- <% end %>
6
3
  <div class="govuk-footer__meta">
7
- <div class="govuk-footer__meta-item govuk-footer__meta-item--grow">
8
- <% if @meta_links.any? %>
9
- <%= @meta_heading %>
10
- <ul class="govuk-footer__inline-list">
11
- <% @meta_links.each do |meta_link| %>
12
- <li class="govuk-footer__inline-list-item">
13
- <%= meta_link %>
14
- </li>
15
- <% end %>
16
- </ul>
17
- <% end %>
18
- <svg aria-hidden="true" focusable="false" class="govuk-footer__licence-logo" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 483.2 195.7" height="17" width="41">
19
- <path fill="currentColor" d="M421.5 142.8V.1l-50.7 32.3v161.1h112.4v-50.7zm-122.3-9.6A47.12 47.12 0 0 1 221 97.8c0-26 21.1-47.1 47.1-47.1 16.7 0 31.4 8.7 39.7 21.8l42.7-27.2A97.63 97.63 0 0 0 268.1 0c-36.5 0-68.3 20.1-85.1 49.7A98 98 0 0 0 97.8 0C43.9 0 0 43.9 0 97.8s43.9 97.8 97.8 97.8c36.5 0 68.3-20.1 85.1-49.7a97.76 97.76 0 0 0 149.6 25.4l19.4 22.2h3v-87.8h-80l24.3 27.5zM97.8 145c-26 0-47.1-21.1-47.1-47.1s21.1-47.1 47.1-47.1 47.2 21 47.2 47S123.8 145 97.8 145" />
20
- </svg>
21
- <span class="govuk-footer__licence-description">
22
- <%= licence %>
23
- </span>
24
- </div>
25
- <div class="govuk-footer__meta-item">
26
- <%= @copyright %>
27
- </div>
4
+ <% if meta.present? %>
5
+ <%= meta.content %>
6
+ <% else %>
7
+ <div class="govuk-footer__meta-item govuk-footer__meta-item--grow">
8
+ <% if meta_items.any? %>
9
+ <h2 class="govuk-visually-hidden"><%= meta_items_title %></h2>
10
+
11
+ <ul class="govuk-footer__inline-list">
12
+ <% @meta_items.each do |hyperlink| %>
13
+ <li class="govuk-footer__inline-list-item">
14
+ <%= hyperlink %>
15
+ </li>
16
+ <% end %>
17
+ </ul>
18
+ <% end %>
19
+
20
+ <% if meta_licence.nil? %>
21
+ <svg aria-hidden="true" focusable="false" class="govuk-footer__licence-logo" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 483.2 195.7" height="17" width="41">
22
+ <path fill="currentColor" d="M421.5 142.8V.1l-50.7 32.3v161.1h112.4v-50.7zm-122.3-9.6A47.12 47.12 0 0 1 221 97.8c0-26 21.1-47.1 47.1-47.1 16.7 0 31.4 8.7 39.7 21.8l42.7-27.2A97.63 97.63 0 0 0 268.1 0c-36.5 0-68.3 20.1-85.1 49.7A98 98 0 0 0 97.8 0C43.9 0 0 43.9 0 97.8s43.9 97.8 97.8 97.8c36.5 0 68.3-20.1 85.1-49.7a97.76 97.76 0 0 0 149.6 25.4l19.4 22.2h3v-87.8h-80l24.3 27.5zM97.8 145c-26 0-47.1-21.1-47.1-47.1s21.1-47.1 47.1-47.1 47.2 21 47.2 47S123.8 145 97.8 145" />
23
+ </svg>
24
+
25
+ <%= tag.span(default_licence, class: "govuk-footer__licence-description") %>
26
+ <% elsif meta_licence.present? %>
27
+ <%= tag.span(meta_licence, class: "govuk-footer__licence-description") %>
28
+ <% end %>
29
+
30
+ <% if meta_content.present? %>
31
+ <%= meta_content.content %>
32
+ <% end %>
33
+ </div>
34
+ <div class="govuk-footer__meta">
35
+ <div class="govuk-footer__meta-item">
36
+ <%= copyright %>
37
+ </div>
38
+ </div>
39
+ <% end %>
28
40
  </div>
29
41
  </div>
30
42
  <% end %>
@@ -1,13 +1,21 @@
1
1
  class GovukComponent::Footer < GovukComponent::Base
2
- attr_accessor :meta, :licence, :copyright
2
+ include ViewComponent::Slotable
3
3
 
4
- def initialize(meta_links: nil, meta_heading: default_meta_heading, licence: nil, copyright_text: default_copright_text, copyright_url: default_copyright_url, classes: [], html_attributes: {})
4
+ with_slot :meta_content
5
+ wrap_slot :meta_content
6
+
7
+ with_slot :meta
8
+ wrap_slot :meta
9
+
10
+ attr_accessor :meta_items, :meta_items_title, :meta_licence, :copyright
11
+
12
+ def initialize(meta_items: {}, meta_items_title: "Support links", meta_licence: nil, classes: [], html_attributes: {}, copyright_text: default_copright_text, copyright_url: default_copyright_url)
5
13
  super(classes: classes, html_attributes: html_attributes)
6
14
 
7
- @meta_links = build_meta_links(meta_links)
8
- @meta_heading = raw(tag.h2(meta_heading, class: 'govuk-visually-hidden'))
9
- @licence = raw(licence).presence || default_licence
10
- @copyright = build_copyright(copyright_text, copyright_url)
15
+ @meta_items = build_meta_links(meta_items)
16
+ @meta_items_title = meta_items_title
17
+ @meta_licence = meta_licence
18
+ @copyright = build_copyright(copyright_text, copyright_url)
11
19
  end
12
20
 
13
21
  private
@@ -24,10 +32,6 @@ private
24
32
  links.map { |text, href| raw(link_to(text, href, class: %w(govuk-footer__link))) }
25
33
  end
26
34
 
27
- def default_meta_heading
28
- 'Supporting links'
29
- end
30
-
31
35
  def default_licence
32
36
  link = link_to("Open Government Licence v3.0", "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/", class: %w(govuk-footer__link))
33
37
 
@@ -1,4 +1,4 @@
1
- <%= tag.div(class: classes.append(success_class).compact, **html_attributes, role: "region", aria: { labelledby: title_id }, data: data_params) do %>
1
+ <%= tag.div(class: classes.append(success_class).compact, role: "region", aria: { labelledby: title_id }, data: data_params, **html_attributes) do %>
2
2
  <div class="govuk-notification-banner__header">
3
3
  <%= content_tag(title_tag, class: "govuk-notification-banner__title", id: title_id) do %>
4
4
  <%= title %>
@@ -7,10 +7,13 @@
7
7
  <div class="govuk-notification-banner__content">
8
8
  <% headings.each do |heading| %>
9
9
  <p class="govuk-notification-banner__heading">
10
-
11
- <%= heading.text %>.
12
- <% if heading.link_target && heading.link_text %>
13
- <%= link_to(heading.link_text, heading.link_target, class: "govuk-notification-banner__link") %>.
10
+ <% if heading.text.present? %>
11
+ <%= heading.text %>
12
+ <% if heading.link_target && heading.link_text %>
13
+ <%= link_to(heading.link_text, heading.link_target, class: "govuk-notification-banner__link") %>.
14
+ <% end %>
15
+ <% else %>
16
+ <%= heading.content %>
14
17
  <% end %>
15
18
  </p>
16
19
  <% end %>
@@ -36,9 +36,9 @@ class GovukComponent::NotificationBanner < GovukComponent::Base
36
36
  class Heading < ViewComponent::Slot
37
37
  attr_accessor :text, :link_target, :link_text
38
38
 
39
- def initialize(text:, link_text: nil, link_target: nil)
40
- @text = text
41
- @link_text = link_text
39
+ def initialize(text: nil, link_text: nil, link_target: nil)
40
+ @text = text
41
+ @link_text = link_text
42
42
  @link_target = link_target
43
43
  end
44
44
 
@@ -21,7 +21,7 @@ private
21
21
  end
22
22
 
23
23
  def colour_class
24
- return nil unless @colour.present?
24
+ return nil if @colour.blank?
25
25
 
26
26
  fail("invalid tag colour #{@colour}, supported colours are #{COLOURS.to_sentence}") unless @colour.in?(COLOURS)
27
27
 
@@ -1,7 +1,6 @@
1
1
  module GovukComponent
2
2
  module Traits
3
3
  module CustomClasses
4
-
5
4
  def classes
6
5
  default_classes.concat(Array.wrap(@classes))
7
6
  end
@@ -15,7 +14,7 @@ module GovukComponent
15
14
  private
16
15
 
17
16
  def parse_classes(classes)
18
- return [] unless classes.present?
17
+ return [] if classes.blank?
19
18
 
20
19
  case classes
21
20
  when Array
@@ -3,6 +3,7 @@ module GovukComponentsHelper
3
3
  govuk_accordion: 'GovukComponent::Accordion',
4
4
  govuk_back_link: 'GovukComponent::BackLink',
5
5
  govuk_breadcrumbs: 'GovukComponent::Breadcrumbs',
6
+ govuk_cookie_banner: 'GovukComponent::CookieBanner',
6
7
  govuk_details: 'GovukComponent::Details',
7
8
  govuk_footer: 'GovukComponent::Footer',
8
9
  govuk_header: 'GovukComponent::Header',
@@ -19,7 +20,7 @@ module GovukComponentsHelper
19
20
  define_method(name) do |*args, **kwargs, &block|
20
21
  capture do
21
22
  render(klass.constantize.new(*args, **kwargs)) do |com|
22
- block.call(com) unless block.blank?
23
+ block.call(com) if block.present?
23
24
  end
24
25
  end
25
26
  end
@@ -6,4 +6,4 @@ module Govuk
6
6
  end
7
7
  end
8
8
 
9
- Dir[Govuk::Components::Engine.root.join(*%w(app helpers *.rb))].each { |f| require f }
9
+ Dir[Govuk::Components::Engine.root.join("app", "helpers", "*.rb")].sort.each { |f| require f }
@@ -1,5 +1,5 @@
1
1
  module Govuk
2
2
  module Components
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '1.1.2'.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: 1.0.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - DfE developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-15 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -28,18 +28,24 @@ dependencies:
28
28
  name: view_component
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.22.1
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 2.27.0
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: 2.22.1
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: 2.27.0
41
47
  - !ruby/object:Gem::Dependency
42
- name: sqlite3
48
+ name: capybara
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - ">="
@@ -53,7 +59,7 @@ dependencies:
53
59
  - !ruby/object:Gem::Version
54
60
  version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
- name: capybara
62
+ name: pry-byebug
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - ">="
@@ -81,7 +87,7 @@ dependencies:
81
87
  - !ruby/object:Gem::Version
82
88
  version: '0'
83
89
  - !ruby/object:Gem::Dependency
84
- name: pry-byebug
90
+ name: rubocop-govuk
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - ">="
@@ -108,6 +114,34 @@ dependencies:
108
114
  - - ">="
109
115
  - !ruby/object:Gem::Version
110
116
  version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: simplecov
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.20'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.20'
131
+ - !ruby/object:Gem::Dependency
132
+ name: sqlite3
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
111
145
  description: A collection of components intended to ease the building of GOV.UK Design
112
146
  System web applications
113
147
  email:
@@ -126,6 +160,8 @@ files:
126
160
  - app/components/govuk_component/base.rb
127
161
  - app/components/govuk_component/breadcrumbs.html.erb
128
162
  - app/components/govuk_component/breadcrumbs.rb
163
+ - app/components/govuk_component/cookie_banner.html.erb
164
+ - app/components/govuk_component/cookie_banner.rb
129
165
  - app/components/govuk_component/details.html.erb
130
166
  - app/components/govuk_component/details.rb
131
167
  - app/components/govuk_component/footer.html.erb