govuk_publishing_components 34.13.0 → 34.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-auto-tracker.js +4 -1
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-core.js +31 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-event-tracker.js +1 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js +1 -0
- data/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +7 -4
- data/app/views/govuk_publishing_components/components/_contextual_sidebar.html.erb +3 -2
- data/app/views/govuk_publishing_components/components/_step_by_step_nav_header.html.erb +9 -1
- data/app/views/govuk_publishing_components/components/_step_by_step_nav_related.html.erb +20 -9
- data/app/views/govuk_publishing_components/components/docs/contextual_breadcrumbs.yml +13 -0
- data/app/views/govuk_publishing_components/components/docs/contextual_sidebar.yml +11 -0
- data/app/views/govuk_publishing_components/components/docs/step_by_step_nav_header.yml +6 -0
- data/app/views/govuk_publishing_components/components/docs/step_by_step_nav_related.yml +10 -0
- data/lib/govuk_publishing_components/presenters/breadcrumb_selector.rb +3 -2
- data/lib/govuk_publishing_components/presenters/breadcrumbs.rb +3 -1
- data/lib/govuk_publishing_components/presenters/page_with_step_by_step_navigation.rb +2 -1
- data/lib/govuk_publishing_components/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4137db9fa2f61ba41157832c2d8a959756eb36e11837e4d58654b264d68a3f0
|
4
|
+
data.tar.gz: a3eb50516bf440839af9b74e1fc5ab44e9fc21ee0afb7910cdb742d10a6d3182
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e780d3b9f9f2e72c471767c7be3bb611bae0eb7f2b211e19ae85b6fdae4338ae20d346c53b72c6d1b1d0e3d06447084eb389aeb64960df48b68d60bdaa4ed7e
|
7
|
+
data.tar.gz: 7cfd8703805c415ffad093fd18dc104d6d41c7e51305673c178b90778eb52bf3037b52ea2550cdb42c0ba4291d6e53c95c577800f2b8fe398ee503c1a3910b76
|
@@ -28,13 +28,16 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
28
28
|
if (window.dataLayer) {
|
29
29
|
try {
|
30
30
|
var data = this.module.getAttribute(this.trackingTrigger)
|
31
|
-
data = JSON.parse(data)
|
31
|
+
data = JSON.parse(data) || {}
|
32
32
|
} catch (e) {
|
33
33
|
// if there's a problem with the config, don't start the tracker
|
34
34
|
console.error('GA4 configuration error: ' + e.message, window.location)
|
35
35
|
return
|
36
36
|
}
|
37
37
|
|
38
|
+
if (data.index) {
|
39
|
+
data.index = window.GOVUK.analyticsGa4.core.trackFunctions.createIndexObject(data.index)
|
40
|
+
}
|
38
41
|
var schemas = new window.GOVUK.analyticsGa4.Schemas()
|
39
42
|
var schema = schemas.mergeProperties(data, 'event_data')
|
40
43
|
|
@@ -237,6 +237,37 @@ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {};
|
|
237
237
|
var ga4LinkData = JSON.parse(module.getAttribute('data-ga4-link'))
|
238
238
|
ga4LinkData.index_total = totalLinks
|
239
239
|
module.setAttribute('data-ga4-link', JSON.stringify(ga4LinkData))
|
240
|
+
},
|
241
|
+
|
242
|
+
// index is given as a string of the form 1.2.3 or 1.2
|
243
|
+
// split this into named sub-parameters
|
244
|
+
createIndexObject: function (index) {
|
245
|
+
if (typeof index === 'undefined') {
|
246
|
+
return undefined
|
247
|
+
}
|
248
|
+
if (typeof index === 'object') {
|
249
|
+
return index
|
250
|
+
}
|
251
|
+
|
252
|
+
index = index.toString().split('.')
|
253
|
+
// this will soon include 'index_section_count'
|
254
|
+
// number of sections overall in the thing being tracked (but not yet in use)
|
255
|
+
switch (index.length) {
|
256
|
+
case 1:
|
257
|
+
return {
|
258
|
+
index_section: parseInt(index[0])
|
259
|
+
}
|
260
|
+
case 2:
|
261
|
+
return {
|
262
|
+
index_section: parseInt(index[0]),
|
263
|
+
index_link: parseInt(index[1])
|
264
|
+
}
|
265
|
+
case 3:
|
266
|
+
return {
|
267
|
+
index_section: parseInt(index[1]),
|
268
|
+
index_link: parseInt(index[2])
|
269
|
+
}
|
270
|
+
}
|
240
271
|
}
|
241
272
|
},
|
242
273
|
|
@@ -42,6 +42,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
42
42
|
|
43
43
|
var text = data.text || event.target.textContent
|
44
44
|
data.text = window.GOVUK.analyticsGa4.core.trackFunctions.removeLinesAndExtraSpaces(text)
|
45
|
+
data.index = window.GOVUK.analyticsGa4.core.trackFunctions.createIndexObject(data.index)
|
45
46
|
|
46
47
|
var schemas = new window.GOVUK.analyticsGa4.Schemas()
|
47
48
|
var schema = schemas.mergeProperties(data, 'event_data')
|
@@ -87,6 +87,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
87
87
|
data.method = window.GOVUK.analyticsGa4.core.trackFunctions.getClickType(event)
|
88
88
|
data.external = window.GOVUK.analyticsGa4.core.trackFunctions.isExternalLink(data.url) ? 'true' : 'false'
|
89
89
|
data.index = event.target.getAttribute('data-ga4-index') ? parseInt(event.target.getAttribute('data-ga4-index')) : data.index || undefined
|
90
|
+
data.index = window.GOVUK.analyticsGa4.core.trackFunctions.createIndexObject(data.index)
|
90
91
|
|
91
92
|
var schemas = new window.GOVUK.analyticsGa4.Schemas()
|
92
93
|
var schema = schemas.mergeProperties(data, 'event_data')
|
@@ -1,7 +1,10 @@
|
|
1
|
-
<%
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<%
|
2
|
+
ga4_tracking ||= false
|
3
|
+
prioritise_taxon_breadcrumbs ||= false
|
4
|
+
breadcrumb_selector = GovukPublishingComponents::Presenters::BreadcrumbSelector.new(content_item, request, prioritise_taxon_breadcrumbs, ga4_tracking)
|
5
|
+
inverse ||= false
|
6
|
+
collapse_on_mobile ||= true unless local_assigns[:collapse_on_mobile].eql?(false)
|
7
|
+
%>
|
5
8
|
|
6
9
|
<div class="gem-c-contextual-breadcrumbs">
|
7
10
|
<% if breadcrumb_selector.step_by_step %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<div class="gem-c-contextual-sidebar">
|
11
11
|
<% if navigation.content_tagged_to_a_reasonable_number_of_step_by_steps? %>
|
12
12
|
<%# Rendering step by step related items because there are a few but not too many of them %>
|
13
|
-
<%= render 'govuk_publishing_components/components/step_by_step_nav_related', links: navigation.step_nav_helper.related_links %>
|
13
|
+
<%= render 'govuk_publishing_components/components/step_by_step_nav_related', links: navigation.step_nav_helper.related_links, ga4_tracking: ga4_tracking %>
|
14
14
|
<% end %>
|
15
15
|
|
16
16
|
<% if navigation.content_tagged_to_current_step_by_step? %>
|
@@ -26,7 +26,8 @@
|
|
26
26
|
<%= render 'govuk_publishing_components/components/step_by_step_nav_related', {
|
27
27
|
pretitle: t("components.contextual_sidebar.pretitle"),
|
28
28
|
links: navigation.step_nav_helper.also_part_of_step_nav,
|
29
|
-
always_display_as_list: true
|
29
|
+
always_display_as_list: true,
|
30
|
+
ga4_tracking: ga4_tracking
|
30
31
|
} %>
|
31
32
|
<% end %>
|
32
33
|
|
@@ -3,12 +3,17 @@
|
|
3
3
|
|
4
4
|
title ||= false
|
5
5
|
path ||= false
|
6
|
+
ga4_tracking ||= false
|
6
7
|
breadcrumbs = [
|
7
8
|
{ title: "Home", url: "/" },
|
8
9
|
{ title: title, url: path }
|
9
10
|
]
|
10
11
|
breadcrumb_presenter = GovukPublishingComponents::Presenters::Breadcrumbs.new(breadcrumbs)
|
11
12
|
|
13
|
+
data = {}
|
14
|
+
data[:module] = "gem-track-click"
|
15
|
+
data[:module] << " ga4-link-tracker" if ga4_tracking
|
16
|
+
|
12
17
|
tracking_id ||= false
|
13
18
|
tracking_category ||= "stepNavHeaderClicked"
|
14
19
|
tracking_action ||= "top"
|
@@ -30,7 +35,7 @@
|
|
30
35
|
<%= raw JSON.pretty_generate(breadcrumb_presenter.structured_data) %>
|
31
36
|
</script>
|
32
37
|
|
33
|
-
<%= tag.div
|
38
|
+
<%= tag.div(class: classes, data: data) do %>
|
34
39
|
<strong class="gem-c-step-nav-header__part-of">Part of</strong>
|
35
40
|
<% if path %>
|
36
41
|
<a href="<%= path %>"
|
@@ -38,6 +43,9 @@
|
|
38
43
|
data-track-category="<%= tracking_category %>"
|
39
44
|
data-track-action="<%= tracking_action %>"
|
40
45
|
data-track-label="<%= tracking_label %>"
|
46
|
+
<% if ga4_tracking %>
|
47
|
+
data-ga4-link='{"event_name":"navigation", "type":"super breadcrumb", "index":{"index_link": "1"}, "index_total":"1"}'
|
48
|
+
<% end %>
|
41
49
|
<% if tracking_dimension_enabled %>
|
42
50
|
data-track-dimension="<%= tracking_dimension %>"
|
43
51
|
data-track-dimension-index="<%= tracking_dimension_index %>"
|
@@ -1,14 +1,17 @@
|
|
1
1
|
<%
|
2
2
|
add_gem_component_stylesheet("step-by-step-nav-related")
|
3
|
-
|
3
|
+
ga4_tracking ||= false
|
4
4
|
links ||= []
|
5
5
|
pretitle ||= t("components.step_by_step_nav_related.part_of")
|
6
6
|
always_display_as_list ||= false
|
7
|
+
classes = %w(gem-c-step-nav-related)
|
8
|
+
classes << "gem-c-step-nav-related--singular" if links.length == 1
|
9
|
+
data = {}
|
10
|
+
data[:module] = "gem-track-click"
|
11
|
+
data[:module] << " ga4-link-tracker" if ga4_tracking
|
7
12
|
%>
|
8
13
|
<% if links.any? %>
|
9
|
-
|
10
|
-
class="gem-c-step-nav-related <%= "gem-c-step-nav-related--singular" if links.length == 1 %>"
|
11
|
-
data-module="gem-track-click">
|
14
|
+
<%= tag.div(class: classes, data: data) do %>
|
12
15
|
<h2 class="gem-c-step-nav-related__heading">
|
13
16
|
<span class="gem-c-step-nav-related__pretitle"><%= pretitle %></span>
|
14
17
|
<% if links.length == 1 && !always_display_as_list %>
|
@@ -19,14 +22,18 @@
|
|
19
22
|
data-track-label="<%= links[0][:href] %>"
|
20
23
|
data-track-dimension="<%= links[0][:text] %>"
|
21
24
|
data-track-dimension-index="29"
|
22
|
-
data-track-options='{"dimension96" : "<%= links[0][:tracking_id] %>" }'
|
25
|
+
data-track-options='{"dimension96" : "<%= links[0][:tracking_id] %>" }'
|
26
|
+
<% if ga4_tracking %>
|
27
|
+
data-ga4-link='{"event_name":"navigation", "type":"related content", "index":{"index_link": "1"}, "index_total":"1"}'
|
28
|
+
<% end %>
|
29
|
+
>
|
23
30
|
<%= links[0][:text] %>
|
24
31
|
</a>
|
25
32
|
</h2>
|
26
33
|
<% else %>
|
27
34
|
</h2>
|
28
35
|
<ul class="gem-c-step-nav-related__links">
|
29
|
-
<% links.
|
36
|
+
<% links.each_with_index do |link, index| %>
|
30
37
|
<li class="gem-c-step-nav-related__link-item">
|
31
38
|
<a href="<%= link[:href] %>"
|
32
39
|
class="govuk-link"
|
@@ -35,12 +42,16 @@
|
|
35
42
|
data-track-label="<%= link[:href] %>"
|
36
43
|
data-track-dimension="<%= link[:text] %>"
|
37
44
|
data-track-dimension-index="29"
|
38
|
-
data-track-options='{"dimension96" : "<%= link[:tracking_id] %>" }'
|
45
|
+
data-track-options='{"dimension96" : "<%= link[:tracking_id] %>" }'
|
46
|
+
<% if ga4_tracking %>
|
47
|
+
data-ga4-link='{"event_name":"navigation", "type":"related content", "index":{"index_link": "<%= index + 1 %>"}, "index_total": "<%= links.length %>"}'
|
48
|
+
<% end %>
|
49
|
+
>
|
39
50
|
<%= link[:text] %>
|
40
51
|
</a>
|
41
52
|
</li>
|
42
53
|
<% end %>
|
43
54
|
</ul>
|
44
55
|
<% end %>
|
45
|
-
|
46
|
-
<% end %>
|
56
|
+
<% end %>
|
57
|
+
<% end %>
|
@@ -32,3 +32,16 @@ examples:
|
|
32
32
|
inverse: true
|
33
33
|
context:
|
34
34
|
dark_background: true
|
35
|
+
with_ga4_tracking:
|
36
|
+
description: |
|
37
|
+
Adds GA4 tracking to the step by step nav header component when it is rendered as a breadcrumb. See the
|
38
|
+
[ga4-link-tracker documentation](https://github.com/alphagov/govuk_publishing_components/blob/main/docs/analytics-ga4/ga4-link-tracker.md) for more information.
|
39
|
+
Note: tracking on regular breadcrumbs is enabled by default and does not require activating.
|
40
|
+
data:
|
41
|
+
ga4_tracking: true
|
42
|
+
content_item:
|
43
|
+
title: "A content item"
|
44
|
+
links:
|
45
|
+
part_of_step_navs:
|
46
|
+
- title: "Learn to drive a car: step by step"
|
47
|
+
base_path: "/micropigs-vs-micropugs"
|
@@ -157,3 +157,14 @@ examples:
|
|
157
157
|
- text: Arrange the funeral
|
158
158
|
href: "/after-a-death/arrange-the-funeral"
|
159
159
|
optional: false
|
160
|
+
with_ga4_tracking_on_part_of_step_by_step_heading(s):
|
161
|
+
description: Adds Google Analytics 4 tracking to the "Part of" step by step heading(s) in the sidebar. Currently only the Related Navigation component, Step by Step navigation component and Ukraine CTA accept this option.
|
162
|
+
data:
|
163
|
+
ga4_tracking: true
|
164
|
+
content_item:
|
165
|
+
links:
|
166
|
+
part_of_step_navs:
|
167
|
+
- title: "Choosing a micropig or micropug: step by step"
|
168
|
+
base_path: "/micropigs-vs-micropugs"
|
169
|
+
- title: "Walk your micropig: step by step"
|
170
|
+
base_path: "/porgs-step-by-step"
|
@@ -51,3 +51,9 @@ examples:
|
|
51
51
|
tracking_action: "customTrackingAction"
|
52
52
|
tracking_label: "customTrackingLabel"
|
53
53
|
tracking_dimension_enabled: false
|
54
|
+
with_ga4_tracking:
|
55
|
+
description: The ga4_tracking boolean allows you to add Google Analytics 4 (GA4) tracking to your component. Setting this to true will add the `ga4-link-tracker` module to your component. The JavaScript will then add a `data-ga4-link` attribute which contains a JSON object with data relevant to our tracking. See the [ga4-link-tracker docs](https://github.com/alphagov/govuk_publishing_components/blob/main/docs/analytics-ga4/ga4-link-tracker.md) for more information.
|
56
|
+
data:
|
57
|
+
ga4_tracking: true
|
58
|
+
title: 'Learn to drive a motorbike: step by step'
|
59
|
+
path: /learn-to-drive-a-motorbike
|
@@ -76,3 +76,13 @@ examples:
|
|
76
76
|
text: 'Learn to drive a motorbike: step by step'
|
77
77
|
}
|
78
78
|
]
|
79
|
+
with_ga4_tracking:
|
80
|
+
description: The ga4_tracking boolean allows you to add Google Analytics 4 (GA4) tracking to your component. Setting this to true will add the `ga4-link-tracker` module to your component. The JavaScript will then add a `data-ga4-link` attribute which contains a JSON object with data relevant to our tracking. See the [ga4-link-tracker docs](https://github.com/alphagov/govuk_publishing_components/blob/main/docs/analytics-ga4/ga4-link-tracker.md) for more information.
|
81
|
+
data:
|
82
|
+
ga4_tracking: true
|
83
|
+
links: [
|
84
|
+
{
|
85
|
+
href: '#',
|
86
|
+
text: 'With ga4 tracking'
|
87
|
+
}
|
88
|
+
]
|
@@ -3,10 +3,11 @@ module GovukPublishingComponents
|
|
3
3
|
class BreadcrumbSelector
|
4
4
|
attr_reader :content_item, :request, :prioritise_taxon_breadcrumbs
|
5
5
|
|
6
|
-
def initialize(content_item, request, prioritise_taxon_breadcrumbs)
|
6
|
+
def initialize(content_item, request, prioritise_taxon_breadcrumbs, ga4_tracking)
|
7
7
|
@content_item = content_item
|
8
8
|
@request = request
|
9
9
|
@prioritise_taxon_breadcrumbs = prioritise_taxon_breadcrumbs
|
10
|
+
@ga4_tracking = ga4_tracking
|
10
11
|
end
|
11
12
|
|
12
13
|
def breadcrumbs
|
@@ -37,7 +38,7 @@ module GovukPublishingComponents
|
|
37
38
|
elsif navigation.content_tagged_to_current_step_by_step?
|
38
39
|
{
|
39
40
|
step_by_step: true,
|
40
|
-
breadcrumbs: navigation.step_nav_helper.header,
|
41
|
+
breadcrumbs: navigation.step_nav_helper.header(@ga4_tracking),
|
41
42
|
}
|
42
43
|
elsif navigation.content_is_tagged_to_a_live_taxon? && prioritise_taxon_breadcrumbs
|
43
44
|
{
|
@@ -82,12 +82,13 @@ module GovukPublishingComponents
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
def header
|
85
|
+
def header(ga4_tracking)
|
86
86
|
if show_header?
|
87
87
|
{
|
88
88
|
title: current_step_nav.title,
|
89
89
|
path: current_step_nav.base_path,
|
90
90
|
tracking_id: current_step_nav.content_id,
|
91
|
+
ga4_tracking: ga4_tracking,
|
91
92
|
}
|
92
93
|
else
|
93
94
|
{}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_publishing_components
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 34.
|
4
|
+
version: 34.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: govuk_app_config
|