govuk_publishing_components 34.10.1 → 34.12.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.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-core.js +123 -10
  3. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-ecommerce-tracker.js +17 -92
  4. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-form-tracker.js +8 -2
  5. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js +12 -0
  6. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-schemas.js +16 -0
  7. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-smart-answer-results-tracker.js +57 -0
  8. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-specialist-link-tracker.js +2 -2
  9. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4.js +1 -0
  10. data/app/assets/javascripts/govuk_publishing_components/components/layout-super-navigation-header.js +0 -22
  11. data/app/assets/javascripts/govuk_publishing_components/lib/trigger-event.js +1 -0
  12. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +42 -94
  13. data/app/models/govuk_publishing_components/audit_components.rb +55 -1
  14. data/app/views/govuk_publishing_components/audit/_components.html.erb +46 -1
  15. data/app/views/govuk_publishing_components/components/_breadcrumbs.html.erb +1 -1
  16. data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +210 -221
  17. data/app/views/govuk_publishing_components/components/docs/breadcrumbs.yml +1 -1
  18. data/app/views/govuk_publishing_components/components/docs/related_navigation.yml +20 -0
  19. data/app/views/govuk_publishing_components/components/related_navigation/_section.html.erb +23 -13
  20. data/config/locales/en.yml +1 -1
  21. data/lib/govuk_publishing_components/presenters/breadcrumbs.rb +6 -0
  22. data/lib/govuk_publishing_components/presenters/related_navigation_helper.rb +14 -9
  23. data/lib/govuk_publishing_components/version.rb +1 -1
  24. metadata +4 -3
@@ -22,55 +22,57 @@
22
22
  navigation_links_length = navigation_links_length + popular_links.length
23
23
  %>
24
24
  <header role="banner" class="gem-c-layout-super-navigation-header" data-module="gem-track-click ga4-event-tracker ga4-link-tracker" data-track-links-only data-ga4-expandable>
25
- <div class="gem-c-layout-super-navigation-header__container govuk-width-container govuk-clearfix">
26
- <div class="gem-c-layout-super-navigation-header__header-logo">
27
- <a
28
- class="govuk-header__link govuk-header__link--homepage"
29
- data-track-action="logoLink"
30
- data-track-category="headerClicked"
31
- data-track-label="<%= logo_link %>"
32
- data-track-dimension="<%= logo_text %>"
33
- data-track-dimension-index="29"
34
- href="<%= logo_link %>"
35
- id="logo"
36
- title="<%= logo_link_title %>"
37
- data-ga4-link="<%= {
38
- "event_name": "navigation",
39
- "type": "header menu bar",
40
- "external": "false",
41
- "text": "GOV.UK",
42
- "section": "Logo",
43
- "index": 0,
44
- "index_total": navigation_links_length
45
- }.to_json %>"
46
- >
47
- <span class="govuk-header__logotype">
48
- <!--[if gt IE 8]><!-->
49
- <svg
50
- aria-hidden="true"
51
- class="govuk-header__logotype-crown gem-c-layout-super-navigation-header__logotype-crown"
52
- focusable="false"
53
- height="30"
54
- viewBox="0 0 132 97"
55
- width="36"
56
- xmlns="http://www.w3.org/2000/svg"
57
- >
58
- <path
59
- d="M25 30.2c3.5 1.5 7.7-.2 9.1-3.7 1.5-3.6-.2-7.8-3.9-9.2-3.6-1.4-7.6.3-9.1 3.9-1.4 3.5.3 7.5 3.9 9zM9 39.5c3.6 1.5 7.8-.2 9.2-3.7 1.5-3.6-.2-7.8-3.9-9.1-3.6-1.5-7.6.2-9.1 3.8-1.4 3.5.3 7.5 3.8 9zM4.4 57.2c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.5-1.5-7.6.3-9.1 3.8-1.4 3.5.3 7.6 3.9 9.1zm38.3-21.4c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.6-1.5-7.6.3-9.1 3.8-1.3 3.6.4 7.7 3.9 9.1zm64.4-5.6c-3.6 1.5-7.8-.2-9.1-3.7-1.5-3.6.2-7.8 3.8-9.2 3.6-1.4 7.7.3 9.2 3.9 1.3 3.5-.4 7.5-3.9 9zm15.9 9.3c-3.6 1.5-7.7-.2-9.1-3.7-1.5-3.6.2-7.8 3.7-9.1 3.6-1.5 7.7.2 9.2 3.8 1.5 3.5-.3 7.5-3.8 9zm4.7 17.7c-3.6 1.5-7.8-.2-9.2-3.8-1.5-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.3 3.5-.4 7.6-3.9 9.1zM89.3 35.8c-3.6 1.5-7.8-.2-9.2-3.8-1.4-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.4 3.6-.3 7.7-3.9 9.1zM69.7 17.7l8.9 4.7V9.3l-8.9 2.8c-.2-.3-.5-.6-.9-.9L72.4 0H59.6l3.5 11.2c-.3.3-.6.5-.9.9l-8.8-2.8v13.1l8.8-4.7c.3.3.6.7.9.9l-5 15.4v.1c-.2.8-.4 1.6-.4 2.4 0 4.1 3.1 7.5 7 8.1h.2c.3 0 .7.1 1 .1.4 0 .7 0 1-.1h.2c4-.6 7.1-4.1 7.1-8.1 0-.8-.1-1.7-.4-2.4V34l-5.1-15.4c.4-.2.7-.6 1-.9zM66 92.8c16.9 0 32.8 1.1 47.1 3.2 4-16.9 8.9-26.7 14-33.5l-9.6-3.4c1 4.9 1.1 7.2 0 10.2-1.5-1.4-3-4.3-4.2-8.7L108.6 76c2.8-2 5-3.2 7.5-3.3-4.4 9.4-10 11.9-13.6 11.2-4.3-.8-6.3-4.6-5.6-7.9 1-4.7 5.7-5.9 8-.5 4.3-8.7-3-11.4-7.6-8.8 7.1-7.2 7.9-13.5 2.1-21.1-8 6.1-8.1 12.3-4.5 20.8-4.7-5.4-12.1-2.5-9.5 6.2 3.4-5.2 7.9-2 7.2 3.1-.6 4.3-6.4 7.8-13.5 7.2-10.3-.9-10.9-8-11.2-13.8 2.5-.5 7.1 1.8 11 7.3L80.2 60c-4.1 4.4-8 5.3-12.3 5.4 1.4-4.4 8-11.6 8-11.6H55.5s6.4 7.2 7.9 11.6c-4.2-.1-8-1-12.3-5.4l1.4 16.4c3.9-5.5 8.5-7.7 10.9-7.3-.3 5.8-.9 12.8-11.1 13.8-7.2.6-12.9-2.9-13.5-7.2-.7-5 3.8-8.3 7.1-3.1 2.7-8.7-4.6-11.6-9.4-6.2 3.7-8.5 3.6-14.7-4.6-20.8-5.8 7.6-5 13.9 2.2 21.1-4.7-2.6-11.9.1-7.7 8.8 2.3-5.5 7.1-4.2 8.1.5.7 3.3-1.3 7.1-5.7 7.9-3.5.7-9-1.8-13.5-11.2 2.5.1 4.7 1.3 7.5 3.3l-4.7-15.4c-1.2 4.4-2.7 7.2-4.3 8.7-1.1-3-.9-5.3 0-10.2l-9.5 3.4c5 6.9 9.9 16.7 14 33.5 14.8-2.1 30.8-3.2 47.7-3.2z"
60
- fill="currentColor"
61
- fill-rule="evenodd"
25
+ <div class="gem-c-layout-super-navigation-header__container govuk-clearfix">
26
+ <div class="govuk-width-container">
27
+ <div class="gem-c-layout-super-navigation-header__header-logo">
28
+ <a
29
+ class="govuk-header__link govuk-header__link--homepage"
30
+ data-track-action="logoLink"
31
+ data-track-category="headerClicked"
32
+ data-track-label="<%= logo_link %>"
33
+ data-track-dimension="<%= logo_text %>"
34
+ data-track-dimension-index="29"
35
+ href="<%= logo_link %>"
36
+ id="logo"
37
+ title="<%= logo_link_title %>"
38
+ data-ga4-link="<%= {
39
+ "event_name": "navigation",
40
+ "type": "header menu bar",
41
+ "external": "false",
42
+ "text": "GOV.UK",
43
+ "section": "Logo",
44
+ "index": 0,
45
+ "index_total": navigation_links_length
46
+ }.to_json %>"
47
+ >
48
+ <span class="govuk-header__logotype">
49
+ <!--[if gt IE 8]><!-->
50
+ <svg
51
+ aria-hidden="true"
52
+ class="govuk-header__logotype-crown gem-c-layout-super-navigation-header__logotype-crown"
53
+ focusable="false"
54
+ height="30"
55
+ viewBox="0 0 132 97"
56
+ width="36"
57
+ xmlns="http://www.w3.org/2000/svg"
62
58
  >
63
- </path>
64
- </svg>
65
- <!--<![endif]-->
66
- <!--[if IE 8]>
67
- <img src="<%= asset_path('govuk-logotype-crown.png') %>" alt="" class="govuk-header__logotype-crown-fallback-image" width="36" height="32">
68
- <![endif]-->
69
- <span class="govuk-header__logotype-text">
70
- <%= logo_text %>
59
+ <path
60
+ d="M25 30.2c3.5 1.5 7.7-.2 9.1-3.7 1.5-3.6-.2-7.8-3.9-9.2-3.6-1.4-7.6.3-9.1 3.9-1.4 3.5.3 7.5 3.9 9zM9 39.5c3.6 1.5 7.8-.2 9.2-3.7 1.5-3.6-.2-7.8-3.9-9.1-3.6-1.5-7.6.2-9.1 3.8-1.4 3.5.3 7.5 3.8 9zM4.4 57.2c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.5-1.5-7.6.3-9.1 3.8-1.4 3.5.3 7.6 3.9 9.1zm38.3-21.4c3.5 1.5 7.7-.2 9.1-3.8 1.5-3.6-.2-7.7-3.9-9.1-3.6-1.5-7.6.3-9.1 3.8-1.3 3.6.4 7.7 3.9 9.1zm64.4-5.6c-3.6 1.5-7.8-.2-9.1-3.7-1.5-3.6.2-7.8 3.8-9.2 3.6-1.4 7.7.3 9.2 3.9 1.3 3.5-.4 7.5-3.9 9zm15.9 9.3c-3.6 1.5-7.7-.2-9.1-3.7-1.5-3.6.2-7.8 3.7-9.1 3.6-1.5 7.7.2 9.2 3.8 1.5 3.5-.3 7.5-3.8 9zm4.7 17.7c-3.6 1.5-7.8-.2-9.2-3.8-1.5-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.3 3.5-.4 7.6-3.9 9.1zM89.3 35.8c-3.6 1.5-7.8-.2-9.2-3.8-1.4-3.6.2-7.7 3.9-9.1 3.6-1.5 7.7.3 9.2 3.8 1.4 3.6-.3 7.7-3.9 9.1zM69.7 17.7l8.9 4.7V9.3l-8.9 2.8c-.2-.3-.5-.6-.9-.9L72.4 0H59.6l3.5 11.2c-.3.3-.6.5-.9.9l-8.8-2.8v13.1l8.8-4.7c.3.3.6.7.9.9l-5 15.4v.1c-.2.8-.4 1.6-.4 2.4 0 4.1 3.1 7.5 7 8.1h.2c.3 0 .7.1 1 .1.4 0 .7 0 1-.1h.2c4-.6 7.1-4.1 7.1-8.1 0-.8-.1-1.7-.4-2.4V34l-5.1-15.4c.4-.2.7-.6 1-.9zM66 92.8c16.9 0 32.8 1.1 47.1 3.2 4-16.9 8.9-26.7 14-33.5l-9.6-3.4c1 4.9 1.1 7.2 0 10.2-1.5-1.4-3-4.3-4.2-8.7L108.6 76c2.8-2 5-3.2 7.5-3.3-4.4 9.4-10 11.9-13.6 11.2-4.3-.8-6.3-4.6-5.6-7.9 1-4.7 5.7-5.9 8-.5 4.3-8.7-3-11.4-7.6-8.8 7.1-7.2 7.9-13.5 2.1-21.1-8 6.1-8.1 12.3-4.5 20.8-4.7-5.4-12.1-2.5-9.5 6.2 3.4-5.2 7.9-2 7.2 3.1-.6 4.3-6.4 7.8-13.5 7.2-10.3-.9-10.9-8-11.2-13.8 2.5-.5 7.1 1.8 11 7.3L80.2 60c-4.1 4.4-8 5.3-12.3 5.4 1.4-4.4 8-11.6 8-11.6H55.5s6.4 7.2 7.9 11.6c-4.2-.1-8-1-12.3-5.4l1.4 16.4c3.9-5.5 8.5-7.7 10.9-7.3-.3 5.8-.9 12.8-11.1 13.8-7.2.6-12.9-2.9-13.5-7.2-.7-5 3.8-8.3 7.1-3.1 2.7-8.7-4.6-11.6-9.4-6.2 3.7-8.5 3.6-14.7-4.6-20.8-5.8 7.6-5 13.9 2.2 21.1-4.7-2.6-11.9.1-7.7 8.8 2.3-5.5 7.1-4.2 8.1.5.7 3.3-1.3 7.1-5.7 7.9-3.5.7-9-1.8-13.5-11.2 2.5.1 4.7 1.3 7.5 3.3l-4.7-15.4c-1.2 4.4-2.7 7.2-4.3 8.7-1.1-3-.9-5.3 0-10.2l-9.5 3.4c5 6.9 9.9 16.7 14 33.5 14.8-2.1 30.8-3.2 47.7-3.2z"
61
+ fill="currentColor"
62
+ fill-rule="evenodd"
63
+ >
64
+ </path>
65
+ </svg>
66
+ <!--<![endif]-->
67
+ <!--[if IE 8]>
68
+ <img src="<%= asset_path('govuk-logotype-crown.png') %>" alt="" class="govuk-header__logotype-crown-fallback-image" width="36" height="32">
69
+ <![endif]-->
70
+ <span class="govuk-header__logotype-text">
71
+ <%= logo_text %>
72
+ </span>
71
73
  </span>
72
- </span>
73
- </a>
74
+ </a>
75
+ </div>
74
76
  </div>
75
77
  <nav
76
78
  aria-labelledby="super-navigation-menu-heading"
@@ -89,193 +91,180 @@
89
91
  tracking_label = link[:label].downcase.gsub(/\s+/, "")
90
92
  %>
91
93
 
92
- <%= link_to link[:href], {
93
- class: "gem-c-layout-super-navigation-header__navigation-item-link",
94
- data: {
95
- track_action: "#{tracking_label}Link",
96
- track_category: "headerClicked",
97
- track_label: link[:href],
98
- track_dimension: link[:label],
99
- track_dimension_index: "29",
100
- }
101
- } do %>
102
- <span class="gem-c-layout-super-navigation-header__navigation-item-link-inner">
103
- <%= link[:label] %>
104
- </span>
105
- <% end %>
94
+ <div class="govuk-width-container gem-c-layout-super-navigation-header__button-width-container">
95
+ <div class="gem-c-layout-super-navigation-header__button-container">
96
+ <div class="gem-c-layout-super-navigation-header__navigation-item">
97
+ <%= link_to link[:href], {
98
+ class: "gem-c-layout-super-navigation-header__navigation-item-link",
99
+ data: {
100
+ track_action: "#{tracking_label}Link",
101
+ track_category: "headerClicked",
102
+ track_label: link[:href],
103
+ track_dimension: link[:label],
104
+ track_dimension_index: "29",
105
+ }
106
+ } do %>
107
+ <span class="gem-c-layout-super-navigation-header__navigation-item-link-inner">
108
+ <%= link[:label] %>
109
+ </span>
110
+ <% end %>
106
111
 
107
- <%= content_tag(:button, {
108
- aria: {
109
- controls: "super-navigation-menu-#{unique_id}",
110
- expanded: false,
111
- label: show_menu_text,
112
- },
113
- class: "gem-c-layout-super-navigation-header__navigation-top-toggle-button",
114
- data: {
115
- text_for_hide: hide_menu_text,
116
- text_for_show: show_menu_text,
117
- toggle_desktop_group: "top",
118
- toggle_mobile_group: "top",
119
- tracking_key: tracking_label,
120
- ga4_event: {
121
- event_name: "select_content",
122
- type: "header menu bar",
123
- text: link[:label],
124
- index: 1,
125
- index_total: 2,
126
- section: link[:label]
127
- }
128
- },
129
- hidden: true,
130
- id: "super-navigation-menu-#{unique_id}-toggle",
131
- type: "button",
132
- }) do %>
133
- <%= tag.span link[:label], class: "gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner" %>
134
- <% end %>
135
- <%= tag.div class: "gem-c-layout-super-navigation-header__navigation-items" do %>
136
- <div
137
- id="super-navigation-menu-<%= unique_id %>" hidden
138
- class="gem-c-layout-super-navigation-header__navigation-dropdown-menu"
139
- >
140
- <div class="gem-c-layout-super-navigation-header__width-container">
141
- <div class="govuk-grid-row">
112
+ <%= content_tag(:button, {
113
+ aria: {
114
+ controls: "super-navigation-menu-#{unique_id}",
115
+ expanded: false,
116
+ label: show_menu_text,
117
+ },
118
+ class: "gem-c-layout-super-navigation-header__navigation-top-toggle-button",
119
+ data: {
120
+ text_for_hide: hide_menu_text,
121
+ text_for_show: show_menu_text,
122
+ toggle_desktop_group: "top",
123
+ toggle_mobile_group: "top",
124
+ tracking_key: tracking_label,
125
+ ga4_event: {
126
+ event_name: "select_content",
127
+ type: "header menu bar",
128
+ text: link[:label],
129
+ index: 1,
130
+ index_total: 2,
131
+ section: link[:label]
132
+ }
133
+ },
134
+ hidden: true,
135
+ id: "super-navigation-menu-#{unique_id}-toggle",
136
+ type: "button",
137
+ }) do %>
138
+ <%= tag.span link[:label], class: "gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner" %>
139
+ <% end %>
140
+ </div>
142
141
 
143
- <% navigation_links_columns.each_with_index do | column, column_index | %>
144
- <%
145
- case column[:size]
146
- when 2
147
- width_class = "govuk-grid-column-two-thirds-from-desktop"
148
- when 3
149
- width_class = "govuk-grid-column-full-from-desktop"
150
- else
151
- width_class = "govuk-grid-column-one-third-from-desktop"
152
- end
153
- %>
142
+ <div class="gem-c-layout-super-navigation-header__search-item">
143
+ <button
144
+ aria-controls="super-search-menu"
145
+ aria-expanded="true"
146
+ aria-label="<%= hide_search_menu_text %>"
147
+ class="gem-c-layout-super-navigation-header__search-toggle-button"
148
+ data-text-for-hide="<%= hide_search_menu_text %>"
149
+ data-text-for-show="<%= show_search_menu_text %>"
150
+ data-toggle-mobile-group="top"
151
+ data-toggle-desktop-group="top"
152
+ data-tracking-key="search"
153
+ hidden
154
+ id="super-search-menu-toggle"
155
+ type="button"
156
+ data-ga4-event="<%= {
157
+ "event_name": "select_content",
158
+ "type": "header menu bar",
159
+ "text": "Search",
160
+ "index": 2,
161
+ "index_total": 2,
162
+ "section": "Search"
163
+ }.to_json %>"
164
+ >
165
+ <span class="govuk-visually-hidden">
166
+ <%= search_text %>
167
+ </span>
168
+ <%=
169
+ render "govuk_publishing_components/components/search/search_icon", {
170
+ classes: %w[gem-c-layout-super-navigation-header__search-toggle-button-link-icon],
171
+ }
172
+ %>
173
+ <span
174
+ aria-hidden="true"
175
+ class="gem-c-layout-super-navigation-header__navigation-top-toggle-close-icon"
176
+ focusable="false"
177
+ >
178
+ &times;
179
+ </span>
180
+ </button>
154
181
 
155
- <div class="<%= width_class %> gem-c-layout-super-navigation-header__column--<%= column[:label].downcase.sub(" ", "-") %>">
156
- <h3 class="govuk-heading-m gem-c-layout-super-navigation-header__column-header">
157
- <%= column[:label] %>
158
- </h3>
159
- <ul class="gem-c-layout-super-navigation-header__navigation-second-items gem-c-layout-super-navigation-header__navigation-second-items--<%= column[:label].downcase.sub(" ", "-") %>">
160
- <% column[:menu_contents].each_with_index do | item, index | %>
161
- <%
162
- has_description = item[:description].present?
163
- link_classes = %w[govuk-link gem-c-layout-super-navigation-header__navigation-second-item-link]
164
- link_classes << "gem-c-layout-super-navigation-header__navigation-second-item-link--with-description" if has_description
165
- tracking_label = column[:label].downcase.gsub(/\s+/, "")
166
- %>
167
- <li class="gem-c-layout-super-navigation-header__dropdown-list-item">
168
- <%= link_to item[:label], item[:href], {
169
- class: link_classes,
170
- data: {
171
- track_action: "#{tracking_label}Link",
172
- track_category: "headerClicked",
173
- track_label: item[:href],
174
- track_dimension: item[:label],
175
- track_dimension_index: "29",
176
- ga4_link: {
177
- "event_name": "navigation",
178
- "type": "header menu bar",
179
- "index": "1.#{column_index + 1}.#{index + 1}",
180
- "index_total": navigation_links_length,
181
- "section": column[:label],
182
- }
183
- }
184
- } %>
185
- <%= tag.p item[:description], class: "gem-c-layout-super-navigation-header__navigation-second-item-description" if has_description %>
186
- </li>
187
- <% end %>
188
- </ul>
189
- </div>
190
- <% end %>
191
- </div>
192
- </div>
193
- </div>
194
- <% end %>
182
+ <a class="gem-c-layout-super-navigation-header__search-item-link" href="/search">
183
+ <span class="govuk-visually-hidden">
184
+ <%= search_text %>
185
+ </span>
186
+ <%=
187
+ render "govuk_publishing_components/components/search/search_icon", {
188
+ classes: %w[gem-c-layout-super-navigation-header__search-item-link-icon],
189
+ }
190
+ %>
191
+ </a>
192
+ </div>
193
+ </div>
194
+ </div>
195
195
 
196
- <button
197
- aria-controls="super-search-menu"
198
- aria-expanded="true"
199
- aria-label="<%= hide_search_menu_text %>"
200
- class="gem-c-layout-super-navigation-header__search-toggle-button"
201
- data-text-for-hide="<%= hide_search_menu_text %>"
202
- data-text-for-show="<%= show_search_menu_text %>"
203
- data-toggle-mobile-group="top"
204
- data-toggle-desktop-group="top"
205
- data-tracking-key="search"
206
- hidden
207
- id="super-search-menu-toggle"
208
- type="button"
209
- data-ga4-event="<%= {
210
- "event_name": "select_content",
211
- "type": "header menu bar",
212
- "text": "Search",
213
- "index": 2,
214
- "index_total": 2,
215
- "section": "Search"
216
- }.to_json %>"
196
+ <div
197
+ id="super-navigation-menu-<%= unique_id %>" hidden
198
+ class="gem-c-layout-super-navigation-header__navigation-dropdown-menu"
217
199
  >
218
- <span class="govuk-visually-hidden">
219
- <%= search_text %>
220
- </span>
221
- <%=
222
- render "govuk_publishing_components/components/search/search_icon", {
223
- classes: %w[gem-c-layout-super-navigation-header__search-toggle-button-link-icon],
224
- }
225
- %>
226
- <span
227
- aria-hidden="true"
228
- class="gem-c-layout-super-navigation-header__navigation-top-toggle-close-icon"
229
- focusable="false"
230
- >
231
- &times;
232
- </span>
233
- </button>
200
+ <div class="govuk-width-container">
201
+ <div class="govuk-grid-row gem-c-layout-super-navigation-header__navigation-items">
234
202
 
235
- <div id="super-search-menu" class="gem-c-layout-super-navigation-header__search-items">
236
- <h3 class="govuk-visually-hidden">
237
- <%= navigation_search_subheading %>
238
- </h3>
239
- <div class="gem-c-layout-super-navigation-header__search-item">
240
- <a class="gem-c-layout-super-navigation-header__search-item-link" href="/search">
241
- <span class="govuk-visually-hidden">
242
- <%= search_text %>
243
- </span>
244
- <svg
245
- class="gem-c-layout-super-navigation-header__search-item-link-icon"
246
- width="27"
247
- height="27"
248
- viewBox="0 0 27 27"
249
- fill="none"
250
- xmlns="http://www.w3.org/2000/svg"
251
- aria-hidden="true"
252
- focusable="false"
253
- >
254
- <circle
255
- cx="10.0161"
256
- cy="10.0161"
257
- r="8.51613"
258
- stroke="currentColor"
259
- stroke-width="3"
260
- />
261
- <line
262
- x1="15.8668"
263
- y1="16.3587"
264
- x2="25.4475"
265
- y2="25.9393"
266
- stroke="currentColor"
267
- stroke-width="3"
268
- />
269
- </svg>
270
- </a>
203
+ <% navigation_links_columns.each_with_index do | column, column_index | %>
204
+ <%
205
+ case column[:size]
206
+ when 2
207
+ width_class = "govuk-grid-column-two-thirds-from-desktop"
208
+ when 3
209
+ width_class = "govuk-grid-column-full-from-desktop"
210
+ else
211
+ width_class = "govuk-grid-column-one-third-from-desktop"
212
+ end
213
+ %>
214
+
215
+ <div class="<%= width_class %> gem-c-layout-super-navigation-header__column--<%= column[:label].downcase.sub(" ", "-") %>">
216
+ <h3 class="govuk-heading-m gem-c-layout-super-navigation-header__column-header">
217
+ <%= column[:label] %>
218
+ </h3>
219
+ <ul class="gem-c-layout-super-navigation-header__navigation-second-items gem-c-layout-super-navigation-header__navigation-second-items--<%= column[:label].downcase.sub(" ", "-") %>">
220
+ <% column[:menu_contents].each_with_index do | item, index | %>
221
+ <%
222
+ has_description = item[:description].present?
223
+ link_classes = %w[govuk-link gem-c-layout-super-navigation-header__navigation-second-item-link]
224
+ link_classes << "gem-c-layout-super-navigation-header__navigation-second-item-link--with-description" if has_description
225
+ tracking_label = column[:label].downcase.gsub(/\s+/, "")
226
+ %>
227
+ <li class="gem-c-layout-super-navigation-header__dropdown-list-item">
228
+ <%= link_to item[:label], item[:href], {
229
+ class: link_classes,
230
+ data: {
231
+ track_action: "#{tracking_label}Link",
232
+ track_category: "headerClicked",
233
+ track_label: item[:href],
234
+ track_dimension: item[:label],
235
+ track_dimension_index: "29",
236
+ ga4_link: {
237
+ "event_name": "navigation",
238
+ "type": "header menu bar",
239
+ "index": "1.#{column_index + 1}.#{index + 1}",
240
+ "index_total": navigation_links_length,
241
+ "section": column[:label],
242
+ }
243
+ }
244
+ } %>
245
+ <%= tag.p item[:description], class: "gem-c-layout-super-navigation-header__navigation-second-item-description" if has_description %>
246
+ </li>
247
+ <% end %>
248
+ </ul>
249
+ </div>
250
+ <% end %>
251
+ </div>
271
252
  </div>
253
+ </div>
272
254
 
273
- <div class="govuk-width-container gem-c-layout-super-navigation-header__search-and-popular">
255
+ <div id="super-search-menu" hidden class="gem-c-layout-super-navigation-header__navigation-dropdown-menu">
256
+ <div class="govuk-width-container gem-c-layout-super-navigation-header__search-container gem-c-layout-super-navigation-header__search-items">
257
+ <h3 class="govuk-visually-hidden">
258
+ <%= navigation_search_subheading %>
259
+ </h3>
274
260
  <div class="govuk-grid-row">
275
261
  <div class="govuk-grid-column-full">
276
262
  <form
277
263
  class="gem-c-layout-super-navigation-header__search-form"
278
264
  id="search"
265
+ data-module="ga4-form-tracker"
266
+ data-ga4-form='{ "event_name": "search", "type": "header menu bar", "section": "Search GOV.UK", "action": "Search", "url": "/search/all" }'
267
+ data-ga4-form-include-text
279
268
  action="/search"
280
269
  method="get"
281
270
  role="search"
@@ -2,7 +2,7 @@ name: "Breadcrumbs"
2
2
  description: "Navigational breadcrumbs, showing page hierarchy"
3
3
  body: |
4
4
  Accepts an array of breadcrumb objects. Each crumb must have a title and a URL.
5
- Links have tracking data but links to the homepage (any link with a url of `/`) will be tracked separately as `homeLinkClicked`.
5
+ Links are tracked, but in Universal Analytics, links to the homepage (any link with a url of `/`) will be tracked separately as `homeLinkClicked`.
6
6
 
7
7
  We recommend that if using the breadcrumbs for navigation purposes, you set `collapse_on_mobile` to `true` to make things more readable for mobile users. However, you can specify `collapse_on_mobile:``false` or remove the flag completely to stop this behaviour.
8
8
  shared_accessibility_criteria:
@@ -333,3 +333,23 @@ examples:
333
333
  - title: UK-China High-Level People to People Dialogue 2017
334
334
  base_path: /government/topical-events/uk-china-high-level-people-to-people-dialogue-2017
335
335
  document_type: topical_event
336
+ world_locations:
337
+ - title: Algeria
338
+ base_path: /world/algeria/news
339
+ - title: Austria
340
+ base_path: /world/austria/news
341
+ - title: Belarus
342
+ base_path: /world/belarus/news
343
+ - title: Belgium
344
+ base_path: /world/belgium/news
345
+ - title: Bolivia
346
+ base_path: /world/bolivia/news
347
+ - title: Brazil
348
+ base_path: /world/brazil/news
349
+ - title: Canada
350
+ base_path: /world/canada/news
351
+ - title: Chile
352
+ base_path: /world/chile/news
353
+ - title: China
354
+ base_path: /world/China/news
355
+
@@ -4,14 +4,18 @@
4
4
  data-module="gem-toggle">
5
5
 
6
6
  <% if section_title === "related_items" %>
7
- <% heading_text = related_nav_helper.component_title %>
7
+ <%
8
+ heading_text = related_nav_helper.construct_section_text("related_content", true)
9
+ ga4_heading_text = related_nav_helper.construct_ga4_section_text("related_content")
10
+ %>
8
11
  <% else %>
9
12
  <%=
10
13
  heading_class = related_nav_helper.section_css_class("gem-c-related-navigation__sub-heading", section_title)
11
14
  heading_data = { 'track-count' => related_nav_helper.section_data_track_count(:related_item_section) }
12
15
  heading_id = "related-nav-#{section_title}-#{random}"
13
16
  heading_level = related_nav_helper.section_heading_level
14
- heading_text = related_nav_helper.construct_section_heading(section_title)
17
+ heading_text = related_nav_helper.construct_section_text(section_title, true)
18
+ ga4_heading_text = related_nav_helper.construct_ga4_section_text(section_title)
15
19
 
16
20
  content_tag(heading_level, id: heading_id, class: heading_class, data: heading_data) do
17
21
  heading_text
@@ -31,7 +35,7 @@
31
35
  event_name: "navigation",
32
36
  type: "related content",
33
37
  index: "#{section_index}.#{index}",
34
- section: heading_text,
38
+ section: ga4_heading_text,
35
39
  } if ga4_tracking
36
40
  link_element = link_to(
37
41
  link[:text],
@@ -41,7 +45,7 @@
41
45
  lang: shared_helper.t_locale_check(link[:locale]),
42
46
  data: {
43
47
  track_category: 'relatedLinkClicked',
44
- track_action: "#{section_index}.#{index} #{related_nav_helper.construct_section_heading(section_title) || t('components.related_navigation.related_content')}",
48
+ track_action: "#{section_index}.#{index} #{related_nav_helper.construct_section_text(section_title, true) || t('components.related_navigation.related_content')}",
45
49
  track_label: link[:path],
46
50
  track_options: {
47
51
  dimension28: links.length.to_s,
@@ -59,17 +63,23 @@
59
63
  <% end %>
60
64
 
61
65
  <% if links.length > section_link_limit %>
62
- <li class="gem-c-related-navigation__link toggle-wrap">
63
- <a href="#"
64
- class="gem-c-related-navigation__toggle"
65
- data-controls="toggle_<%= section_title %>"
66
- data-expanded="false"
67
- data-toggled-text="<%= t("common.toggle_less") %>">
66
+ <%
67
+ classes = "gem-c-related-navigation__link toggle-wrap"
68
+ data_attributes_li = { module: "ga4-event-tracker" } if ga4_tracking
69
+ data_attributes_link = {
70
+ controls: "toggle_#{section_title}",
71
+ expanded: "false",
72
+ toggled_text: t("common.toggle_less")
73
+ }
74
+ data_attributes_link[:ga4_event] = { "event_name": "select_content", "type": "related content" } if ga4_tracking
75
+ %>
76
+ <%= tag.li(class: classes, data: data_attributes_li) do %>
77
+ <%= link_to("#", class: "gem-c-related-navigation__toggle", data: data_attributes_link) do %>
68
78
  <%= t("common.toggle_more",
69
79
  show: t('common.show'),
70
- number: related_nav_helper.remaining_link_count(links)) %>
71
- </a>
72
- </li>
80
+ number: related_nav_helper.remaining_link_count(links)) %>
81
+ <% end %>
82
+ <% end %>
73
83
 
74
84
  <li class="gem-c-related-navigation__link gem-c-related-navigation__link--truncated-links">
75
85
  <span id="toggle_<%= section_title %>" class="gem-c-related-navigation__toggle-more js-hidden">
@@ -293,7 +293,7 @@ en:
293
293
  - label: 'Homes for Ukraine: record your interest'
294
294
  href: https://www.gov.uk/register-interest-homes-ukraine
295
295
  - label: Find out about the UK’s response
296
- href: https://ukstandswithukraine.campaign.gov.uk/
296
+ href: https://www.gov.uk/government/topical-events/russian-invasion-of-ukraine-uk-government-response
297
297
  title: Invasion of Ukraine
298
298
  world_locations: World locations
299
299
  search_box:
@@ -58,6 +58,12 @@ module GovukPublishingComponents
58
58
  dimension28: breadcrumbs_length.to_s,
59
59
  dimension29: crumb[:title],
60
60
  },
61
+ ga4_link: {
62
+ event_name: "navigation",
63
+ type: "breadcrumbs",
64
+ index: index.to_s,
65
+ index_total: breadcrumbs_length.to_s,
66
+ },
61
67
  }
62
68
 
63
69
  is_homepage = crumb[:url] == "/"
@@ -53,20 +53,25 @@ module GovukPublishingComponents
53
53
  end
54
54
  end
55
55
 
56
- def construct_section_heading(section_title)
57
- unless section_title == "related_items"
56
+ def construct_section_text(section, underscores_to_spaces)
57
+ unless section == "related_items"
58
+ defaults = [I18n.t("components.related_navigation.#{section}")]
59
+ defaults << section.tr("_", " ") if underscores_to_spaces
60
+
58
61
  I18n.t(
59
- "components.related_#{@context}_navigation." + section_title,
60
- default: [
61
- I18n.t("components.related_navigation.#{section_title}"),
62
- section_title.tr("_", " "),
63
- ],
62
+ "components.related_#{@context}_navigation.#{section}",
63
+ default: defaults,
64
64
  )
65
65
  end
66
66
  end
67
67
 
68
- def component_title
69
- I18n.t("components.related_#{@context}_navigation.related_content", default: I18n.t("components.related_navigation.related_content"))
68
+ def construct_ga4_section_text(section)
69
+ # Force English so we can still understand what is being tracked if translated.
70
+ underscores_to_spaces = true
71
+ underscores_to_spaces = false if section == "related_content"
72
+ I18n.with_locale("en") do
73
+ construct_section_text(section, underscores_to_spaces)
74
+ end
70
75
  end
71
76
 
72
77
  def section_css_class(css_class, section_title, link: {}, link_is_inline: false)