metadata_presenter 2.16.12 → 2.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/metadata_presenter/engine_controller.rb +25 -0
- data/app/models/metadata_presenter/service.rb +1 -1
- data/app/models/metadata_presenter/traversed_pages.rb +23 -22
- data/app/views/layouts/metadata_presenter/application.html.erb +9 -1
- data/app/views/metadata_presenter/analytics/_cookie_banner.html.erb +63 -0
- data/app/views/metadata_presenter/analytics/_ga4.html.erb +10 -0
- data/app/views/metadata_presenter/analytics/_google.html.erb +5 -0
- data/app/views/metadata_presenter/analytics/_gtm.html.erb +7 -0
- data/app/views/metadata_presenter/analytics/_ua.html.erb +11 -0
- data/app/views/metadata_presenter/analytics/analytics.html.erb +3 -0
- data/config/initializers/supported_analytics.rb +1 -0
- data/config/locales/en.yml +12 -0
- data/lib/metadata_presenter/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69339189940b628d7be7e2a6515c4382cc44d5726d3ecac9adb86b975cd1d5d8
|
4
|
+
data.tar.gz: 1d5724fabda8bf28f79d6d31b28f348d9c144f63f49b3ac945e9f4f7a372bd61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 768d25f256f70733fb563fc75604e90690c36e78d7a8191b8d468c1b678e17d7e158e88bcfda50f028c40e21aeb6de3ca509650e21f1323965a3a01923460eff
|
7
|
+
data.tar.gz: 026c6ba54417b041a173a8523b11baadb3e15a18eaaab57ace3db3376bf47c6b46059ea6706900940deaeaf4edb61f9959ee6d7b9c2b098a61697739845dfda8
|
@@ -35,6 +35,21 @@ module MetadataPresenter
|
|
35
35
|
end
|
36
36
|
helper_method :answered?
|
37
37
|
|
38
|
+
def analytics_cookie_name
|
39
|
+
@analytics_cookie_name ||= "analytics-#{service.service_name.parameterize}"
|
40
|
+
end
|
41
|
+
helper_method :analytics_cookie_name
|
42
|
+
|
43
|
+
def allow_analytics?
|
44
|
+
no_analytics_cookie? || cookies[analytics_cookie_name] == 'accepted'
|
45
|
+
end
|
46
|
+
helper_method :allow_analytics?
|
47
|
+
|
48
|
+
def show_cookie_banner?
|
49
|
+
no_analytics_cookie? && analytics_tags_present?
|
50
|
+
end
|
51
|
+
helper_method :show_cookie_banner?
|
52
|
+
|
38
53
|
private
|
39
54
|
|
40
55
|
def not_found
|
@@ -44,5 +59,15 @@ module MetadataPresenter
|
|
44
59
|
def redirect_to_page(url)
|
45
60
|
redirect_to File.join(request.script_name, url)
|
46
61
|
end
|
62
|
+
|
63
|
+
def analytics_tags_present?
|
64
|
+
Rails.application.config.supported_analytics.values.flatten.any? do |analytic|
|
65
|
+
ENV[analytic].present?
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def no_analytics_cookie?
|
70
|
+
cookies[analytics_cookie_name].blank?
|
71
|
+
end
|
47
72
|
end
|
48
73
|
end
|
@@ -6,41 +6,42 @@ module MetadataPresenter
|
|
6
6
|
@service = service
|
7
7
|
@user_data = user_data
|
8
8
|
@pages = [service.start_page]
|
9
|
-
@current_page = current_page
|
9
|
+
@current_page = current_page
|
10
10
|
end
|
11
11
|
|
12
12
|
delegate :last, to: :all
|
13
13
|
|
14
14
|
def all
|
15
|
-
|
15
|
+
next_object = service.start_page
|
16
16
|
|
17
17
|
service.flow.size.times do
|
18
|
-
break if
|
19
|
-
|
20
|
-
flow_object = service.flow_object(
|
21
|
-
|
22
|
-
if
|
23
|
-
page = EvaluateConditionals.new(
|
24
|
-
service: service,
|
25
|
-
flow: flow_object,
|
26
|
-
user_data: user_data
|
27
|
-
).page
|
28
|
-
page_uuid = page.uuid
|
29
|
-
else
|
30
|
-
page_uuid = flow_object.default_next
|
31
|
-
page = service.find_page_by_uuid(page_uuid)
|
32
|
-
end
|
33
|
-
|
34
|
-
@pages.push(page) if page && page.uuid != current_page.uuid
|
18
|
+
break if next_object.blank? || next_object.uuid == current_page&.uuid
|
19
|
+
|
20
|
+
flow_object = service.flow_object(next_object.uuid)
|
21
|
+
next_object = flow_object.branch? ? evaluated_page(flow_object) : next_flow_object(flow_object.default_next)
|
22
|
+
@pages.push(next_object) if page_in_flow?(next_object)
|
35
23
|
end
|
36
24
|
|
37
25
|
@pages
|
38
26
|
end
|
39
27
|
|
40
|
-
|
41
|
-
|
28
|
+
private
|
29
|
+
|
30
|
+
def evaluated_page(flow_object)
|
31
|
+
EvaluateConditionals.new(
|
32
|
+
service: service,
|
33
|
+
flow: flow_object,
|
34
|
+
user_data: user_data
|
35
|
+
).page
|
36
|
+
end
|
37
|
+
|
38
|
+
def next_flow_object(uuid)
|
39
|
+
obj = service.flow_object(uuid)
|
40
|
+
obj.branch? ? obj : service.find_page_by_uuid(uuid)
|
41
|
+
end
|
42
42
|
|
43
|
-
|
43
|
+
def page_in_flow?(obj)
|
44
|
+
obj.is_a?(MetadataPresenter::Page) && obj.uuid != current_page&.uuid
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<title><%= service.service_name %></title>
|
5
5
|
<%= csrf_meta_tags %>
|
6
6
|
<%= csp_meta_tag %>
|
7
|
-
|
7
|
+
|
8
8
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
9
9
|
<link rel="shortcut icon" sizes="16x16 32x32 48x48" href="<%= asset_pack_url('media/images/favicon.ico') %>" type="image/x-icon" />
|
10
10
|
<link rel="mask-icon" href="<%= asset_pack_url('media/images/govuk-mask-icon.svg') %>" color="blue">
|
@@ -15,9 +15,17 @@
|
|
15
15
|
|
16
16
|
<%= stylesheet_pack_tag 'govuk' %>
|
17
17
|
<%= stylesheet_link_tag 'application', media: 'all' %>
|
18
|
+
|
19
|
+
<% if allow_analytics? %>
|
20
|
+
<%= render template: 'metadata_presenter/analytics/analytics' %>
|
21
|
+
<% end %>
|
18
22
|
</head>
|
19
23
|
|
20
24
|
<body class="govuk-template__body">
|
25
|
+
<% if show_cookie_banner? %>
|
26
|
+
<%= render partial: 'metadata_presenter/analytics/cookie_banner' %>
|
27
|
+
<% end %>
|
28
|
+
|
21
29
|
<%= render template: 'metadata_presenter/header/show' %>
|
22
30
|
<div class="govuk-width-container govuk-body-m">
|
23
31
|
<main class="govuk-main-wrapper govuk-main-wrapper--auto-spacing" id="main-content" role="main">
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<div class="govuk-cookie-banner" id="govuk-cookie-banner" data-nosnippet role="region" aria-label="<%= t('analytics.heading', service_name: service.service_name) %>">
|
2
|
+
<div class="govuk-cookie-banner__message govuk-width-container" id="govuk-cookie-banner-message">
|
3
|
+
|
4
|
+
<div class="govuk-grid-row">
|
5
|
+
<div class="govuk-grid-column-two-thirds">
|
6
|
+
<h2 class="govuk-cookie-banner__heading govuk-heading-m">
|
7
|
+
<%= t('analytics.heading', service_name: service.service_name) %>
|
8
|
+
</h2>
|
9
|
+
|
10
|
+
<div class="govuk-cookie-banner__content">
|
11
|
+
<p class="govuk-body"><%= t('analytics.body_1') %></p>
|
12
|
+
<p class="govuk-body"><%= t('analytics.body_2') %></p>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="govuk-button-group">
|
18
|
+
<button type="button" class="govuk-button" data-module="govuk-button" onclick='analytics.accept("<%= analytics_cookie_name %>")'>
|
19
|
+
<%= t('analytics.accept') %>
|
20
|
+
</button>
|
21
|
+
<button type="button" class="govuk-button" data-module="govuk-button" onclick='analytics.reject("<%= analytics_cookie_name %>")'>
|
22
|
+
<%= t('analytics.reject') %>
|
23
|
+
</button>
|
24
|
+
<a class="govuk-link" href="/cookies"><%= t('analytics.view_cookies') %></a>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="govuk-cookie-banner__message govuk-width-container" id="govuk-cookie-banner-message-accepted" role="alert" style="display: none;">
|
29
|
+
<div class="govuk-grid-row">
|
30
|
+
<div class="govuk-grid-column-two-thirds">
|
31
|
+
<div class="govuk-cookie-banner__content">
|
32
|
+
<p class="govuk-body">
|
33
|
+
<%= t('analytics.confirmation', action: t('analytics.accepted')) %>
|
34
|
+
</p>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="govuk-button-group">
|
40
|
+
<button class="govuk-button" data-module="govuk-button" onclick="analytics.hideCookieBanner()">
|
41
|
+
<%= t('analytics.hide') %>
|
42
|
+
</button>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div class="govuk-cookie-banner__message govuk-width-container" id="govuk-cookie-banner-message-rejected" role="alert" style="display: none;">
|
47
|
+
<div class="govuk-grid-row">
|
48
|
+
<div class="govuk-grid-column-two-thirds">
|
49
|
+
<div class="govuk-cookie-banner__content">
|
50
|
+
<p class="govuk-body">
|
51
|
+
<%= t('analytics.confirmation', action: t('analytics.rejected')) %>
|
52
|
+
</p>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div class="govuk-button-group">
|
58
|
+
<button class="govuk-button" data-module="govuk-button" onclick="analytics.hideCookieBanner()">
|
59
|
+
<%= t('analytics.hide') %>
|
60
|
+
</button>
|
61
|
+
</div>
|
62
|
+
</div>
|
63
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<!-- Global site tag (gtag.js) - Google Analytics -->
|
2
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=<%= analytic_tag %>"></script>
|
3
|
+
<script>
|
4
|
+
window.dataLayer = window.dataLayer || [];
|
5
|
+
function gtag(){dataLayer.push(arguments);}
|
6
|
+
gtag('js', new Date());
|
7
|
+
|
8
|
+
gtag('config', '<%= analytic_tag %>');
|
9
|
+
</script>
|
10
|
+
<!-- End Global site tag (gtag.js) - Google Analytics -->
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<!-- Google Tag Manager -->
|
2
|
+
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
3
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
4
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
5
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
6
|
+
})(window,document,'script','dataLayer','<%= analytic_tag %>');</script>
|
7
|
+
<!-- End Google Tag Manager -->
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<!-- Google Universal Analytics -->
|
2
|
+
<script>
|
3
|
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
4
|
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
5
|
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
6
|
+
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
7
|
+
|
8
|
+
ga('create', '<%= analytic_tag %>', 'auto');
|
9
|
+
ga('send', 'pageview');
|
10
|
+
</script>
|
11
|
+
<!-- End Google Universal Analytics -->
|
@@ -0,0 +1 @@
|
|
1
|
+
Rails.application.config.supported_analytics = { google: %w[UA GTM GA4] }
|
@@ -0,0 +1,12 @@
|
|
1
|
+
en:
|
2
|
+
analytics:
|
3
|
+
heading: Cookies on %{service_name}
|
4
|
+
body_1: We use some essential cookies to make this service work.
|
5
|
+
body_2: We'd also like to use analytics cookies so we can understand how you use the service and make improvements.
|
6
|
+
accept: Accept analytics cookies
|
7
|
+
reject: Reject analytics cookies
|
8
|
+
view_cookies: View cookies
|
9
|
+
accepted: accepted
|
10
|
+
rejected: rejected
|
11
|
+
confirmation: You've %{action} analytics cookies.
|
12
|
+
hide: Hide this message
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metadata_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MoJ Forms
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: govuk_design_system_formbuilder
|
@@ -333,6 +333,12 @@ files:
|
|
333
333
|
- app/validators/metadata_presenter/word_count.rb
|
334
334
|
- app/views/errors/404.html
|
335
335
|
- app/views/layouts/metadata_presenter/application.html.erb
|
336
|
+
- app/views/metadata_presenter/analytics/_cookie_banner.html.erb
|
337
|
+
- app/views/metadata_presenter/analytics/_ga4.html.erb
|
338
|
+
- app/views/metadata_presenter/analytics/_google.html.erb
|
339
|
+
- app/views/metadata_presenter/analytics/_gtm.html.erb
|
340
|
+
- app/views/metadata_presenter/analytics/_ua.html.erb
|
341
|
+
- app/views/metadata_presenter/analytics/analytics.html.erb
|
336
342
|
- app/views/metadata_presenter/attribute/_body.html.erb
|
337
343
|
- app/views/metadata_presenter/attribute/_heading.html.erb
|
338
344
|
- app/views/metadata_presenter/attribute/_lede.html.erb
|
@@ -363,7 +369,9 @@ files:
|
|
363
369
|
- config/initializers/default_text.rb
|
364
370
|
- config/initializers/inflections.rb
|
365
371
|
- config/initializers/schemas.rb
|
372
|
+
- config/initializers/supported_analytics.rb
|
366
373
|
- config/initializers/supported_components.rb
|
374
|
+
- config/locales/en.yml
|
367
375
|
- config/routes.rb
|
368
376
|
- default_metadata/component/autocomplete.json
|
369
377
|
- default_metadata/component/checkboxes.json
|