govuk-design-system-rails 0.10.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.
Files changed (137) hide show
  1. checksums.yaml +7 -0
  2. data/app/helpers/govuk_design_system/accordion_helper.rb +7 -0
  3. data/app/helpers/govuk_design_system/back_link_helper.rb +13 -0
  4. data/app/helpers/govuk_design_system/breadcrumbs_helper.rb +7 -0
  5. data/app/helpers/govuk_design_system/button_helper.rb +71 -0
  6. data/app/helpers/govuk_design_system/checkboxes_helper.rb +8 -0
  7. data/app/helpers/govuk_design_system/components_helper.rb +13 -0
  8. data/app/helpers/govuk_design_system/cookie_banner_helper.rb +7 -0
  9. data/app/helpers/govuk_design_system/date_input_helper.rb +8 -0
  10. data/app/helpers/govuk_design_system/details_helper.rb +32 -0
  11. data/app/helpers/govuk_design_system/error_message_helper.rb +7 -0
  12. data/app/helpers/govuk_design_system/error_summary_helper.rb +20 -0
  13. data/app/helpers/govuk_design_system/fieldset_helper.rb +9 -0
  14. data/app/helpers/govuk_design_system/file_upload_helper.rb +59 -0
  15. data/app/helpers/govuk_design_system/header_helper.rb +7 -0
  16. data/app/helpers/govuk_design_system/hint_helper.rb +7 -0
  17. data/app/helpers/govuk_design_system/hmcts_badge_helper.rb +7 -0
  18. data/app/helpers/govuk_design_system/hmcts_banner_helper.rb +7 -0
  19. data/app/helpers/govuk_design_system/input_helper.rb +8 -0
  20. data/app/helpers/govuk_design_system/inset_text_helper.rb +9 -0
  21. data/app/helpers/govuk_design_system/label_helper.rb +7 -0
  22. data/app/helpers/govuk_design_system/notification_banner_helper.rb +8 -0
  23. data/app/helpers/govuk_design_system/phase_banner_helper.rb +21 -0
  24. data/app/helpers/govuk_design_system/radios_helper.rb +8 -0
  25. data/app/helpers/govuk_design_system/select_helper.rb +8 -0
  26. data/app/helpers/govuk_design_system/skip_link_helper.rb +13 -0
  27. data/app/helpers/govuk_design_system/summary_list_helper.rb +7 -0
  28. data/app/helpers/govuk_design_system/tabs_helper.rb +7 -0
  29. data/app/helpers/govuk_design_system/tag_helper.rb +8 -0
  30. data/app/helpers/govuk_design_system/textarea_helper.rb +8 -0
  31. data/app/helpers/govuk_design_system/warning_text_helper.rb +20 -0
  32. data/app/views/components/_govuk_accordion.html.erb +44 -0
  33. data/app/views/components/_govuk_action_link.html.erb +12 -0
  34. data/app/views/components/_govuk_breadcrumbs.html.erb +25 -0
  35. data/app/views/components/_govuk_checkboxes.html.erb +125 -0
  36. data/app/views/components/_govuk_cookie_banner.html.erb +75 -0
  37. data/app/views/components/_govuk_date_input.html.erb +94 -0
  38. data/app/views/components/_govuk_error_message.html.erb +13 -0
  39. data/app/views/components/_govuk_error_summary.html.erb +32 -0
  40. data/app/views/components/_govuk_fieldset.html.erb +21 -0
  41. data/app/views/components/_govuk_header.html.erb +64 -0
  42. data/app/views/components/_govuk_hint.html.erb +7 -0
  43. data/app/views/components/_govuk_hr.html.erb +1 -0
  44. data/app/views/components/_govuk_input.html.erb +97 -0
  45. data/app/views/components/_govuk_inset_text.html.erb +10 -0
  46. data/app/views/components/_govuk_label.html.erb +18 -0
  47. data/app/views/components/_govuk_notification_banner.html.erb +68 -0
  48. data/app/views/components/_govuk_radios.html.erb +141 -0
  49. data/app/views/components/_govuk_select.html.erb +105 -0
  50. data/app/views/components/_govuk_summary_list.html.erb +39 -0
  51. data/app/views/components/_govuk_tabs.html.erb +46 -0
  52. data/app/views/components/_govuk_textarea.html.erb +70 -0
  53. data/app/views/components/_hmcts_banner.html.erb +33 -0
  54. data/app/views/form_components/_govuk_checkboxes.html.erb +21 -0
  55. data/app/views/form_components/_govuk_date_input.html.erb +32 -0
  56. data/app/views/form_components/_govuk_input.html.erb +11 -0
  57. data/app/views/form_components/_govuk_radios.html.erb +24 -0
  58. data/app/views/form_components/_govuk_select.html.erb +25 -0
  59. data/app/views/form_components/_govuk_textarea.html.erb +11 -0
  60. data/lib/govuk-design-system-rails.rb +1 -0
  61. data/lib/govuk_design_system/engine.rb +50 -0
  62. data/lib/govuk_design_system.rb +4 -0
  63. data/spec/dummy/Rakefile +6 -0
  64. data/spec/dummy/app/assets/config/manifest.js +2 -0
  65. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  66. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  67. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  68. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  69. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  70. data/spec/dummy/app/javascript/packs/application.js +15 -0
  71. data/spec/dummy/app/jobs/application_job.rb +7 -0
  72. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  73. data/spec/dummy/app/models/application_record.rb +3 -0
  74. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  75. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  76. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  77. data/spec/dummy/bin/rails +4 -0
  78. data/spec/dummy/bin/rake +4 -0
  79. data/spec/dummy/bin/setup +33 -0
  80. data/spec/dummy/config/application.rb +38 -0
  81. data/spec/dummy/config/boot.rb +5 -0
  82. data/spec/dummy/config/cable.yml +10 -0
  83. data/spec/dummy/config/database.yml +25 -0
  84. data/spec/dummy/config/environment.rb +5 -0
  85. data/spec/dummy/config/environments/development.rb +76 -0
  86. data/spec/dummy/config/environments/production.rb +120 -0
  87. data/spec/dummy/config/environments/test.rb +59 -0
  88. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  89. data/spec/dummy/config/initializers/assets.rb +12 -0
  90. data/spec/dummy/config/initializers/backtrace_silencers.rb +8 -0
  91. data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
  92. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  93. data/spec/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  94. data/spec/dummy/config/initializers/inflections.rb +16 -0
  95. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  96. data/spec/dummy/config/initializers/permissions_policy.rb +11 -0
  97. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  98. data/spec/dummy/config/locales/en.yml +33 -0
  99. data/spec/dummy/config/puma.rb +43 -0
  100. data/spec/dummy/config/routes.rb +3 -0
  101. data/spec/dummy/config/storage.yml +34 -0
  102. data/spec/dummy/config.ru +6 -0
  103. data/spec/dummy/db/development.sqlite3 +0 -0
  104. data/spec/dummy/db/test.sqlite3 +0 -0
  105. data/spec/dummy/public/404.html +67 -0
  106. data/spec/dummy/public/422.html +67 -0
  107. data/spec/dummy/public/500.html +66 -0
  108. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  109. data/spec/dummy/public/apple-touch-icon.png +0 -0
  110. data/spec/dummy/public/favicon.ico +0 -0
  111. data/spec/dummy/tmp/development_secret.txt +1 -0
  112. data/spec/helpers/govuk_design_system/accordion_helper_spec.rb +353 -0
  113. data/spec/helpers/govuk_design_system/breadcrumbs_helper_spec.rb +90 -0
  114. data/spec/helpers/govuk_design_system/button_helper_spec.rb +34 -0
  115. data/spec/helpers/govuk_design_system/checkboxes_helper_spec.rb +146 -0
  116. data/spec/helpers/govuk_design_system/cookie_banner_helper_spec.rb +65 -0
  117. data/spec/helpers/govuk_design_system/date_input_helper_spec.rb +63 -0
  118. data/spec/helpers/govuk_design_system/details_helper_spec.rb +42 -0
  119. data/spec/helpers/govuk_design_system/error_message_helper_spec.rb +18 -0
  120. data/spec/helpers/govuk_design_system/error_summary_helper_spec.rb +39 -0
  121. data/spec/helpers/govuk_design_system/header_helper_spec.rb +138 -0
  122. data/spec/helpers/govuk_design_system/hint_helper_spec.rb +20 -0
  123. data/spec/helpers/govuk_design_system/hmcts_badge_helper_spec.rb +16 -0
  124. data/spec/helpers/govuk_design_system/hmcts_banner_helper_spec.rb +59 -0
  125. data/spec/helpers/govuk_design_system/input_helper_spec.rb +157 -0
  126. data/spec/helpers/govuk_design_system/inset_text_helper_spec.rb +58 -0
  127. data/spec/helpers/govuk_design_system/label_helper_spec.rb +21 -0
  128. data/spec/helpers/govuk_design_system/notification_banner_helper_spec.rb +98 -0
  129. data/spec/helpers/govuk_design_system/radios_helper_spec.rb +270 -0
  130. data/spec/helpers/govuk_design_system/select_helper_spec.rb +85 -0
  131. data/spec/helpers/govuk_design_system/summary_list_helper_spec.rb +138 -0
  132. data/spec/helpers/govuk_design_system/tabs_helper_spec.rb +129 -0
  133. data/spec/helpers/govuk_design_system/tag_helper_spec.rb +17 -0
  134. data/spec/helpers/govuk_design_system/textarea_helper_spec.rb +67 -0
  135. data/spec/rails_helper.rb +64 -0
  136. data/spec/spec_helper.rb +116 -0
  137. metadata +401 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e76e9057f3d50ef6e64379373d685d310d8da0ebd530a8398c90bded0c43540b
4
+ data.tar.gz: 0fcc31f7dd8d80495fbb1b585777c55436b98b0cc7e548743d6a3bfadee211d2
5
+ SHA512:
6
+ metadata.gz: 6f92bc3beb2e702f03352c0ebb691b35635ebe2b5f2fa68d21b8fd0a251207ce2e5119a23e5da36312917bf35c691cfeda81a497d8e98a6e8f46e0e7c1d0cbf4
7
+ data.tar.gz: 7568abab4de1c9a796b58d839548de467069c4ab5911e5399b831a2ad53ffe584a6c546dd33df68d98ff1f9e6d4084c0699ac50b0e178b85dbfd1a3b7debdfb9
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module AccordionHelper
3
+ def govukAccordion(kwargs = {})
4
+ render "components/govuk_accordion", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module GovukDesignSystem
2
+ module BackLinkHelper
3
+ # Use the [back link component](https://design-system.service.gov.uk/components/back-link/)
4
+ # to help users go back to the previous page in a multi-page transaction.
5
+ #
6
+ # Code based upon [nunjucks template](https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/back-link/template.njk)
7
+ def govukBackLink(href:, text: nil, html: nil, classes: "", attributes: {})
8
+ attributes[:class] = "govuk-back-link #{classes}"
9
+
10
+ link_to (html || text), href, attributes
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module BreadcrumbsHelper
3
+ def govukBreadcrumbs(kwargs = {})
4
+ render "components/govuk_breadcrumbs", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,71 @@
1
+ module GovukDesignSystem
2
+ module ButtonHelper
3
+ # Based on https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/button/template.njk
4
+ def govukButton(element: nil, text: nil, html: nil, name: nil, type: nil, value: nil, disabled: nil, href: nil, classes: "", attributes: {}, preventDoubleClick: nil, isStartButton: nil)
5
+ # Set classes for this component
6
+ attributes[:class] = class_names("govuk-button", classes, { "govuk-button--disabled" => disabled })
7
+ attributes[:data] ||= {}
8
+ attributes[:data][:module] ||= "govuk-button"
9
+
10
+ # Element should be lower-case if set
11
+ element&.downcase!
12
+
13
+ # Determine type of element to use, if not explicitly set
14
+ element ||= (href ? "a" : "button")
15
+
16
+ if isStartButton
17
+ iconHtml = '<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"><path fill="currentColor" d="M0 0h13l20 20-20 20H0l20-20z"/></svg>'.html_safe
18
+ attributes[:class] += " govuk-button--start"
19
+ end
20
+
21
+ # Define common attributes we can use for both button and input types
22
+
23
+ button_attributes = {}
24
+
25
+ if name
26
+ button_attributes[:name] = name
27
+ end
28
+
29
+ if disabled
30
+ button_attributes[:disabled] = "disabled"
31
+ button_attributes["aria-disabled"] = "true"
32
+ end
33
+
34
+ if preventDoubleClick
35
+ button_attributes["data-prevent-double-click"] = "true"
36
+ end
37
+
38
+ # Actually create a button... or a link!
39
+ case element
40
+ when "a"
41
+
42
+ attributes[:role] = "button"
43
+ attributes[:draggable] = "false"
44
+
45
+ link_to (href || "#"), attributes do
46
+ concat(html || text)
47
+ concat iconHtml.to_s
48
+ end
49
+
50
+ when "button"
51
+ attributes[:value] = value if value
52
+ attributes[:type] = type if type
53
+
54
+ attributes.merge!(button_attributes)
55
+
56
+ tag.button(**attributes) do
57
+ concat(html || text)
58
+ concat iconHtml.to_s
59
+ end
60
+
61
+ when "input"
62
+ attributes[:value] = text
63
+ attributes[:type] = type || "submit"
64
+
65
+ attributes.merge!(button_attributes)
66
+
67
+ content_tag "input", attributes
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module CheckboxesHelper
3
+ def govukCheckboxes(kwargs = {})
4
+ form = kwargs[:form]
5
+ render((form.present? ? "form_components/govuk_checkboxes" : "components/govuk_checkboxes"), **kwargs)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module GovukDesignSystem
2
+ module ComponentsHelper
3
+ # Patterns for names and ids can be found in examples here: https://guides.rubyonrails.org/form_helpers.html
4
+ def get_attribute_name(form, attribute)
5
+ form.object_name.present? ? "#{form.object_name}[#{attribute}]" : attribute.to_s
6
+ end
7
+
8
+ def get_attribute_id_prefix(form, attribute)
9
+ initial_name = form.object_name.present? ? "#{form.object_name}_#{attribute}" : attribute.to_s
10
+ initial_name.gsub(/[\[\]_]+/, "_")
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module CookieBannerHelper
3
+ def govukCookieBanner(kwargs = {})
4
+ render "components/govuk_cookie_banner", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module DateInputHelper
3
+ def govukDateInput(kwargs = {})
4
+ form = kwargs[:form]
5
+ render((form.present? ? "form_components/govuk_date_input" : "components/govuk_date_input"), **kwargs)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ module GovukDesignSystem
2
+ module DetailsHelper
3
+ # Generates the HTML for the
4
+ # [Details component](https://design-system.service.gov.uk/components/details/)
5
+ # from the GOV.UK Design System.
6
+ #
7
+ # The method name and parameters are camelCased to follow the convention of
8
+ # the Nunjucks macros from the GOV.UK Design System, to make it easier to
9
+ # copy and paste templates from the Prototyping Kit.
10
+ #
11
+ #
12
+ # Implementation based on https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/details/
13
+ #
14
+ def govukDetails(summaryText: nil, summaryHtml: nil, text: nil, html: nil, id: nil, open: nil, classes: "", attributes: {})
15
+ attributes.merge!("class" => class_names("govuk-details", classes), id: id, "data-module" => "govuk-details")
16
+ attributes["open"] = "open" if open
17
+
18
+ content_tag("details", attributes) do
19
+ summary = content_tag("summary", class: "govuk-details__summary") do
20
+ content_tag("span", class: "govuk-details__summary-text") do
21
+ summaryHtml || summaryText
22
+ end
23
+ end
24
+ content = content_tag("div", class: "govuk-details__text") do
25
+ html || text || yield
26
+ end
27
+
28
+ summary + content
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module ErrorMessageHelper
3
+ def govukErrorMessage(kwargs = {})
4
+ render "components/govuk_error_message", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ module GovukDesignSystem
2
+ module ErrorSummaryHelper
3
+ def govukErrorSummary(kwargs = {})
4
+ form = kwargs[:form]
5
+
6
+ if form.present?
7
+ errors = kwargs[:errors] || form.object.errors
8
+ return unless errors.try(:any?)
9
+
10
+ kwargs[:titleText] = "There is a problem"
11
+ kwargs[:errorList] = errors.details.keys.flat_map do |attribute|
12
+ prefix = get_attribute_id_prefix(form, attribute)
13
+ errors.full_messages_for(attribute).map { |m| { text: m, href: "##{prefix}-error" } }
14
+ end
15
+ end
16
+
17
+ render "components/govuk_error_summary", **kwargs
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ module GovukDesignSystem
2
+ # Based on https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/fieldset/template.njk
3
+ module FieldsetHelper
4
+ def govukFieldset(kwargs = {}, &block)
5
+ kwargs[:block] = block
6
+ render "components/govuk_fieldset", **kwargs
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,59 @@
1
+ module GovukDesignSystem
2
+ module FileUploadHelper
3
+ # Use the [file upload component](https://design-system.service.gov.uk/components/file-upload/)
4
+ # to help users select and upload a file.
5
+ #
6
+ # Code based upon [nunjucks template](https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/file-upload/template.njk)
7
+ def govukFileUpload(id:, name:, label:, value: nil, hint: nil, errorMessage: nil, formGroup: {}, classes: "", attributes: {}, described_by: nil)
8
+ form_group_classes = "govuk-form-group"
9
+ form_group_classes += " govuk-form-group--error" if errorMessage
10
+ form_group_classes += " #{formGroup[:classes]}" if formGroup[:classes]
11
+
12
+ # a record of other elements that we need to associate with the input using
13
+ # aria-describedby – for example hints or error messages
14
+ described_by ||= ""
15
+
16
+ content_tag("div", class: form_group_classes) do
17
+ concat govukLabel(html: label[:html], text: label[:text], classes: label[:classes], isPageHeading: label[:isPageHeading], attributes: (label[:attributes] || {}), for: id)
18
+
19
+ if hint
20
+ hint_id = "#{id}-hint"
21
+ described_by += " #{hint_id}"
22
+
23
+ concat govukHint(
24
+ id: hint_id,
25
+ classes: hint[:classes],
26
+ attributes: hint[:attributes],
27
+ html: hint[:html],
28
+ text: hint[:text]
29
+ )
30
+ end
31
+
32
+ if errorMessage
33
+ error_id = "#{id}-error"
34
+ described_by += " #{error_id}"
35
+
36
+ concat govukErrorMessage(
37
+ id: error_id,
38
+ classes: errorMessage[:classes],
39
+ attributes: errorMessage[:attributes],
40
+ html: errorMessage[:html],
41
+ text: errorMessage[:text],
42
+ visuallyHiddenText: errorMessage[:visuallyHiddenText]
43
+ )
44
+ end
45
+
46
+ attributes[:class] = "govuk-file-upload"
47
+ attributes[:class] += " govuk-file-upload--error" if errorMessage
48
+ attributes[:class] += " #{classes}" if classes
49
+ attributes[:id] = id
50
+ attributes[:name] = name
51
+ attributes[:type] = "file"
52
+ attributes[:value] = value if value
53
+ attributes["aria-describedby"] = described_by if described_by
54
+
55
+ concat content_tag("input", nil, attributes)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module HeaderHelper
3
+ def govukHeader(kwargs = {})
4
+ render "components/govuk_header", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module HintHelper
3
+ def govukHint(kwargs = {})
4
+ render "components/govuk_hint", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module HmctsBadgeHelper
3
+ def hmctsBadge(text: "", classes: nil)
4
+ tag.span(text, class: class_names("hmcts-badge", classes))
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module HmctsBannerHelper
3
+ def hmctsBanner(kwargs = {})
4
+ render "components/hmcts_banner", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module InputHelper
3
+ def govukInput(kwargs = {})
4
+ form = kwargs[:form]
5
+ render((form.present? ? "form_components/govuk_input" : "components/govuk_input"), **kwargs)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module GovukDesignSystem
2
+ # Based on https://github.com/alphagov/govuk-frontend/blob/main/src/govuk/components/inset-text/template.njk
3
+ module InsetTextHelper
4
+ def govukInsetText(kwargs = {}, &block)
5
+ kwargs[:block] = block
6
+ render "components/govuk_inset_text", **kwargs
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module LabelHelper
3
+ def govukLabel(kwargs = {})
4
+ render "components/govuk_label", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module NotificationBannerHelper
3
+ def govukNotificationBanner(kwargs = {}, &block)
4
+ kwargs[:block] = block
5
+ render "components/govuk_notification_banner", **kwargs
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ module GovukDesignSystem
2
+ module PhaseBannerHelper
3
+ # Generates the HTML for the
4
+ # [Phase banner component](https://design-system.service.gov.uk/components/phase-banner/)
5
+ # from the GOV.UK Design System.
6
+ #
7
+ # Use the phase banner component to show users your service is still being worked on.
8
+ #
9
+ # Implementation based on https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/details/
10
+ def govukPhaseBanner(text: nil, html: nil, tag: nil, classes: "", attributes: {})
11
+ attributes["class"] = "govuk-phase-banner #{classes}"
12
+
13
+ content_tag("div", attributes) do
14
+ content_tag("p", { class: "govuk-phase-banner__content" }) do
15
+ concat govukTag(text: tag[:text], html: tag[:html], classes: "govuk-phase-banner__content__tag #{tag[:classes]}")
16
+ concat content_tag("span", (html || text), { class: "govuk-phase-banner__text" })
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module RadiosHelper
3
+ def govukRadios(kwargs = {})
4
+ form = kwargs[:form]
5
+ render((form.present? ? "form_components/govuk_radios" : "components/govuk_radios"), **kwargs)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module SelectHelper
3
+ def govukSelect(kwargs = {})
4
+ form = kwargs[:form]
5
+ render((form.present? ? "form_components/govuk_select" : "components/govuk_select"), **kwargs)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module GovukDesignSystem
2
+ module SkipLinkHelper
3
+ # Based on https://github.com/alphagov/govuk-frontend/blob/master/src/govuk/components/skip-link/template.njk
4
+ def govukSkipLink(text: nil, html: nil, href: "#content", classes: "", attributes: {})
5
+ attributes["class"] = "govuk-skip-link #{classes}"
6
+ attributes["href"] = href
7
+
8
+ content_tag("a", attributes) do
9
+ html || text
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module SummaryListHelper
3
+ def govukSummaryList(kwargs = {})
4
+ render "components/govuk_summary_list", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module GovukDesignSystem
2
+ module TabsHelper
3
+ def govukTabs(kwargs = {})
4
+ render "components/govuk_tabs", **kwargs
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module TagHelper
3
+ def govukTag(text: nil, html: nil, classes: "", attributes: {})
4
+ attributes["class"] = class_names("govuk-tag", classes)
5
+ content_tag("strong", (html || text), attributes)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module GovukDesignSystem
2
+ module TextareaHelper
3
+ def govukTextarea(kwargs = {})
4
+ form = kwargs[:form]
5
+ render((form.present? ? "form_components/govuk_textarea" : "components/govuk_textarea"), **kwargs)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ module GovukDesignSystem
2
+ module WarningTextHelper
3
+ # Use the [warning text component](https://design-system.service.gov.uk/components/warning-text/)
4
+ # when you need to warn users about something important, such as legal consequences of an action,
5
+ # or lack of action, that they might take.
6
+ #
7
+ # Implementation based on https://github.com/alphagov/govuk-frontend/tree/master/src/govuk/components/warning-text
8
+ def govukWarningText(iconFallbackText:, text: nil, html: nil, classes: "", attributes: {})
9
+ attributes[:class] = "govuk-warning-text #{classes}"
10
+
11
+ content_tag("div", attributes) do
12
+ content_tag("span", "!", class: "govuk-warning-text__icon", "aria-hidden" => "true") +
13
+ content_tag("strong", class: "govuk-warning-text__text") do
14
+ content_tag("span", iconFallbackText, class: "govuk-warning-text__assistive") +
15
+ (html || text)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,44 @@
1
+ <%
2
+ id = local_assigns[:id]
3
+ heading_level = local_assigns[:headingLevel].presence || 2
4
+ div_attributes = {
5
+ id: id,
6
+ class: class_names("govuk-accordion", local_assigns[:classes]),
7
+ data: { module: "govuk-accordion" },
8
+ "data-i18n" => {}
9
+ }
10
+ div_attributes["data-i18n"]["hide-all-sections"] = local_assigns[:hideAllSectionsText] if local_assigns[:hideAllSectionsText].present?
11
+ div_attributes["data-i18n"]["hide-section"] = local_assigns[:hideSectionText] if local_assigns[:hideSectionText].present?
12
+ div_attributes["data-i18n"]["hide-section-aria-label"] = local_assigns[:hideSectionAriaLabelText] if local_assigns[:hideSectionAriaLabelText].present?
13
+ div_attributes["data-i18n"]["show-all-sections"] = local_assigns[:showAllSectionsText] if local_assigns[:showAllSectionsText].present?
14
+ div_attributes["data-i18n"]["show-section"] = local_assigns[:showSectionText] if local_assigns[:showSectionText].present?
15
+ div_attributes["data-i18n"]["show-section-aria-label"] = local_assigns[:showSectionAriaLabelText] if local_assigns[:showSectionAriaLabelText].present?
16
+ div_attributes.merge!(local_assigns[:attributes]) if local_assigns[:attributes].present?
17
+ div_attributes.delete("data-i18n") if div_attributes["data-i18n"] == {}
18
+ %>
19
+ <%= tag.div(**div_attributes) do %>
20
+ <% local_assigns[:items].each.with_index(1) do |item, index| %>
21
+ <% next unless item.present? %>
22
+ <div class="<%= class_names "govuk-accordion__section", { "govuk-accordion__section--expanded" => item[:expanded] } %>">
23
+ <div class="govuk-accordion__section-header">
24
+ <h<%= heading_level %> class="govuk-accordion__section-heading">
25
+ <span class="govuk-accordion__section-button" id="<%= id %>-heading-<%= index %>">
26
+ <%= item.dig(:heading, :html).presence || item.dig(:heading, :text) %>
27
+ </span>
28
+ </h<%= heading_level %>>
29
+ <% if item.dig(:summary, :html).present? || item.dig(:summary, :text).present? %>
30
+ <div class="govuk-accordion__section-summary govuk-body" id="<%= id %>-summary-<%= index %>">
31
+ <%= item.dig(:summary, :html).presence || item.dig(:summary, :text) %>
32
+ </div>
33
+ <% end %>
34
+ </div>
35
+ <div id="<%= id %>-content-<%= index %>" class="govuk-accordion__section-content" aria-labelledby="<%= id %>-heading-<%= index %>">
36
+ <% if item.dig(:content, :html).present? %>
37
+ <%= item.dig(:content, :html) %>
38
+ <% elsif item.dig(:content, :text).present? %>
39
+ <p class="govuk-body"><%= item.dig(:content, :text) %></p>
40
+ <% end %>
41
+ </div>
42
+ </div>
43
+ <% end %>
44
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <%
2
+ link_attributes = {
3
+ class: class_names("govuk-link", local_assigns[:classes]),
4
+ href: local_assigns[:href]
5
+ }.merge!(local_assigns[:attributes] || {})
6
+ %>
7
+ <%= tag.a **link_attributes do %>
8
+ <%= local_assigns[:html].presence || local_assigns[:text] %>
9
+ <% if local_assigns[:visuallyHiddenText].present? %>
10
+ <span class="govuk-visually-hidden"> <%= local_assigns[:visuallyHiddenText] %></span>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <%
2
+ div_classes = class_names(
3
+ "govuk-breadcrumbs",
4
+ { "govuk-breadcrumbs--collapse-on-mobile" => local_assigns[:collapseOnMobile] },
5
+ local_assigns[:classes]
6
+ )
7
+ div_attributes = {
8
+ class: div_classes,
9
+ }.merge!(local_assigns[:attributes].presence || {})
10
+ items = local_assigns[:items].presence || []
11
+ %>
12
+ <%= tag.div(**div_attributes) do %>
13
+ <ol class="govuk-breadcrumbs__list">
14
+ <% items.each do |item| %>
15
+ <% item_content = item[:html].presence || item[:text] %>
16
+ <% if item[:href].present? %>
17
+ <li class="govuk-breadcrumbs__list-item">
18
+ <%= link_to item_content, item[:href], class: "govuk-breadcrumbs__link", **(item[:attributes] || {}) %>
19
+ </li>
20
+ <% else %>
21
+ <li class="govuk-breadcrumbs__list-item" aria-current="page"><%= item_content %></li>
22
+ <% end %>
23
+ <% end %>
24
+ </ol>
25
+ <% end %>