govuk_publishing_components 29.10.0 → 29.11.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/assets/javascripts/govuk_publishing_components/analytics-ga4/gtm-click-tracking.js +33 -23
- data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +15 -0
- data/app/assets/stylesheets/govuk_publishing_components/_all_components_print.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_organisation-logo.scss +4 -0
- data/app/views/govuk_publishing_components/components/_accordion.html.erb +7 -5
- data/app/views/govuk_publishing_components/components/_character_count.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_date_input.html.erb +0 -1
- data/app/views/govuk_publishing_components/components/_input.html.erb +0 -2
- data/app/views/govuk_publishing_components/components/docs/accordion.yml +20 -13
- data/lib/govuk_publishing_components/presenters/public_layout_helper.rb +1 -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: 4908ab95bb70e9f55096b46cae08b0ea6fff5f168da24aa427c810a39de96e4a
|
4
|
+
data.tar.gz: 99873d158278fbbf30eb341558a5424b9957054b0711486312bd4e18b9c45b35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c6a51b33e3f4fccb750bdc8ab05171bb7d3e877f5ee8e9f0a601be977baa390162cfbab07a94facf2905d7eadd5f504640e25e86260d5b756e82959a8532522
|
7
|
+
data.tar.gz: 5531061592b4e1db78a34d8ecf15f613f05140585df1d5edb76224e82b317a62be16fb7ae4345d75c075297f164b3eb1569c794a7337a09d7345fee4061e0daf
|
@@ -1,3 +1,4 @@
|
|
1
|
+
// = require govuk/vendor/polyfills/Element/prototype/closest.js
|
1
2
|
window.GOVUK = window.GOVUK || {}
|
2
3
|
window.GOVUK.Modules = window.GOVUK.Modules || {};
|
3
4
|
|
@@ -10,38 +11,47 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
10
11
|
}
|
11
12
|
|
12
13
|
GtmClickTracking.prototype.init = function () {
|
13
|
-
|
14
|
-
if (!this.module.getAttribute(this.trackingTrigger)) {
|
15
|
-
trackClicksOn = this.module.querySelectorAll('[' + this.trackingTrigger + ']')
|
16
|
-
}
|
17
|
-
|
18
|
-
for (var i = 0; i < trackClicksOn.length; i++) {
|
19
|
-
trackClicksOn[i].addEventListener('click', this.trackClick.bind(this))
|
20
|
-
}
|
14
|
+
this.module.addEventListener('click', this.trackClick.bind(this), true) // useCapture must be true
|
21
15
|
}
|
22
16
|
|
23
17
|
GtmClickTracking.prototype.trackClick = function (event) {
|
24
18
|
if (window.dataLayer) {
|
25
|
-
var target = event.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
19
|
+
var target = this.findTrackingAttributes(event.target)
|
20
|
+
if (target) {
|
21
|
+
var data = {
|
22
|
+
event: 'analytics',
|
23
|
+
event_name: target.getAttribute('data-gtm-event-name'),
|
24
|
+
// get entire URL apart from domain
|
25
|
+
link_url: window.location.href.substring(window.location.origin.length),
|
26
|
+
ui: JSON.parse(target.getAttribute('data-gtm-attributes')) || {}
|
27
|
+
}
|
28
|
+
var ariaExpanded = this.checkExpandedState(target)
|
29
|
+
if (ariaExpanded) {
|
30
|
+
data.ui.state = ariaExpanded === 'false' ? 'opened' : 'closed'
|
31
|
+
data.ui.text = data.ui.text || target.innerText
|
32
|
+
}
|
33
|
+
window.dataLayer.push(data)
|
36
34
|
}
|
37
|
-
window.dataLayer.push(data)
|
38
35
|
}
|
39
36
|
}
|
40
37
|
|
38
|
+
GtmClickTracking.prototype.findTrackingAttributes = function (clicked) {
|
39
|
+
if (clicked.hasAttribute('[' + this.trackingTrigger + ']')) {
|
40
|
+
return clicked
|
41
|
+
} else {
|
42
|
+
return clicked.closest('[' + this.trackingTrigger + ']')
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
// check either element is expandable or contains expandable element
|
41
47
|
GtmClickTracking.prototype.checkExpandedState = function (clicked) {
|
42
|
-
var
|
43
|
-
|
44
|
-
|
48
|
+
var isExpandable = clicked.getAttribute('aria-expanded')
|
49
|
+
var containsExpandable = clicked.querySelector('[aria-expanded]')
|
50
|
+
|
51
|
+
if (isExpandable) {
|
52
|
+
return isExpandable
|
53
|
+
} else if (containsExpandable) {
|
54
|
+
return containsExpandable.getAttribute('aria-expanded')
|
45
55
|
}
|
46
56
|
}
|
47
57
|
|
@@ -45,6 +45,21 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
|
45
45
|
if (this.$module.getAttribute('data-track-sections') === 'true') {
|
46
46
|
this.addEventListenerSections()
|
47
47
|
}
|
48
|
+
|
49
|
+
// look for data attributes to put onto the 'show/hide all' link
|
50
|
+
var showAllAttributes = this.$module.getAttribute('data-show-all-attributes')
|
51
|
+
if (showAllAttributes) {
|
52
|
+
try {
|
53
|
+
var showAll = this.$module.querySelector('.' + this.showAllControls)
|
54
|
+
var values = JSON.parse(showAllAttributes)
|
55
|
+
var keys = Object.keys(values)
|
56
|
+
for (var i = 0; i < keys.length; i++) {
|
57
|
+
showAll.setAttribute('data-' + keys[i], values[keys[i]])
|
58
|
+
}
|
59
|
+
} catch (e) {
|
60
|
+
console.error('Could not read accordion data attributes error: ' + e.message, window.location)
|
61
|
+
}
|
62
|
+
}
|
48
63
|
}
|
49
64
|
|
50
65
|
// Navigate to and open accordions with anchored content on page load if a hash is present
|
@@ -10,6 +10,7 @@
|
|
10
10
|
@import "components/print/govspeak-html-publication";
|
11
11
|
@import "components/print/govspeak";
|
12
12
|
@import "components/print/layout-super-navigation-header";
|
13
|
+
@import "components/print/organisation-logo";
|
13
14
|
@import "components/print/step-by-step-nav-header";
|
14
15
|
@import "components/print/step-by-step-nav";
|
15
16
|
@import "components/print/textarea";
|
@@ -27,6 +27,9 @@
|
|
27
27
|
data_attributes[:track_show_all_clicks] = track_show_all_clicks
|
28
28
|
data_attributes[:track_sections] = track_sections
|
29
29
|
|
30
|
+
data_attributes_show_all ||= nil
|
31
|
+
data_attributes[:show_all_attributes] = data_attributes_show_all if data_attributes_show_all
|
32
|
+
|
30
33
|
translations.each do |key, translation|
|
31
34
|
locales[key] = shared_helper.t_locale(translation)
|
32
35
|
data_attributes[key] = t(translation)
|
@@ -47,8 +50,8 @@
|
|
47
50
|
<%= tag.div(class: accordion_classes, id: id, data: data_attributes) do %>
|
48
51
|
<% items.each_with_index do |item, i| %>
|
49
52
|
<%
|
50
|
-
# The GOVUK Frontend JavaScript for this component
|
51
|
-
# uses a loop starting at 1 for accessing heading ID values,
|
53
|
+
# The GOVUK Frontend JavaScript for this component
|
54
|
+
# uses a loop starting at 1 for accessing heading ID values,
|
52
55
|
# hence the increment below
|
53
56
|
index = i + 1
|
54
57
|
|
@@ -65,11 +68,10 @@
|
|
65
68
|
content_tag(
|
66
69
|
shared_helper.get_heading_level,
|
67
70
|
content_tag(
|
68
|
-
'span',
|
69
|
-
item[:heading][:text],
|
71
|
+
'span',
|
72
|
+
item[:heading][:text],
|
70
73
|
class: "govuk-accordion__section-button",
|
71
74
|
id: "#{id}-heading-#{index}"
|
72
|
-
|
73
75
|
),
|
74
76
|
class: "govuk-accordion__section-heading",
|
75
77
|
id: item[:heading][:id],
|
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
<%= render "govuk_publishing_components/components/textarea", { id: id, character_count: true }.merge(textarea.symbolize_keys) %>
|
19
19
|
|
20
|
-
<div id="<%= id %>-info" class="govuk-hint govuk-character-count__message"
|
20
|
+
<div id="<%= id %>-info" class="govuk-hint govuk-character-count__message">
|
21
21
|
<%= t("components.character_count.body", number: maxlength || maxwords, type: maxwords ? t("components.character_count.type.words") : t("components.character_count.type.characters")) %>
|
22
22
|
</div>
|
23
23
|
<% end %>
|
@@ -189,10 +189,17 @@ examples:
|
|
189
189
|
|
190
190
|
Each item can also have a `data_attributes` hash. These `data_attributes` are placed on the `button` that triggers the opening and closing - useful for differentiating between each section of the accordion.
|
191
191
|
|
192
|
+
Data attributes can also be added to the 'Show/hide all' link using the `data_attributes_show_all` option, primarily where custom tracking is required. These attributes are read from the accordion markup and then added to the link by JavaScript (which is how the link is created).
|
192
193
|
data:
|
193
194
|
data_attributes:
|
194
195
|
gtm: gtm-accordion
|
195
196
|
ga: ga-accordion
|
197
|
+
data_attributes_show_all:
|
198
|
+
module: example
|
199
|
+
track-action: click
|
200
|
+
ui:
|
201
|
+
type: test
|
202
|
+
text: something
|
196
203
|
items:
|
197
204
|
- heading:
|
198
205
|
text: Writing well for the web
|
@@ -277,13 +284,13 @@ examples:
|
|
277
284
|
html: <p class="govuk-body">This is the content for How people read.</p>
|
278
285
|
with_the_anchor_link_navigation:
|
279
286
|
description: |
|
280
|
-
Some apps require custom `id`s per accordion section heading. Custom `id`s allow you to link section headings, sometimes across multiple pages.
|
281
|
-
|
287
|
+
Some apps require custom `id`s per accordion section heading. Custom `id`s allow you to link section headings, sometimes across multiple pages.
|
288
|
+
|
282
289
|
For example on [guidance pages for Content Designers, referred to as "manuals",](https://www.gov.uk/guidance/how-to-publish-on-gov-uk/creating-and-updating-pages#associations) each manual includes multiple sets of accordions and will reference between specific sections to easily access content.
|
283
290
|
|
284
|
-
Using the same rules, custom `id`s automatically open accordions when users click within another accordion that links to either
|
291
|
+
Using the same rules, custom `id`s automatically open accordions when users click within another accordion that links to either
|
285
292
|
|
286
|
-
* the `id` of an accordion section heading
|
293
|
+
* the `id` of an accordion section heading
|
287
294
|
* an `id` within the content of an accordion (this will also automatically navigate to and open accordions on page load)
|
288
295
|
|
289
296
|
This feature will only be used if the `anchor_navigation` flag is passed as `true`. This mitigates performance risk from event listeners on a large number of links.
|
@@ -294,13 +301,13 @@ examples:
|
|
294
301
|
items:
|
295
302
|
- heading:
|
296
303
|
text: Writing well for the web
|
297
|
-
id: writing-well-for-the-web
|
304
|
+
id: writing-well-for-the-web-1
|
298
305
|
content:
|
299
|
-
html: <p class="govuk-body">This is content for accordion 1 of 2</p><p class="govuk-body">This content contains a <a href="#anchor-nav-test" class="govuk-link">link</a></p>
|
306
|
+
html: <p class="govuk-body">This is content for accordion 1 of 2</p><p class="govuk-body">This content contains a <a href="#anchor-nav-test-1" class="govuk-link">link</a></p>
|
300
307
|
- heading:
|
301
308
|
text: Writing well for specialists
|
302
309
|
content:
|
303
|
-
html: <p class="govuk-body" id="anchor-nav-test">This is content for accordion 2 of 2</p>
|
310
|
+
html: <p class="govuk-body" id="anchor-nav-test-1">This is content for accordion 2 of 2</p>
|
304
311
|
- heading:
|
305
312
|
text: Know your audience
|
306
313
|
content:
|
@@ -312,31 +319,31 @@ examples:
|
|
312
319
|
with_track_show_all_clicks:
|
313
320
|
description: |
|
314
321
|
To switch on Google Analytics for the "Show all sections" button on click, pass `track_show_all_clicks: true` the values passed on open will be
|
315
|
-
`Event Action: accordionOpened` `Event Category: pageElementInteraction` `Event Label: Show all sections`
|
322
|
+
`Event Action: accordionOpened` `Event Category: pageElementInteraction` `Event Label: Show all sections`
|
316
323
|
data:
|
317
324
|
track_show_all_clicks: true
|
318
325
|
items:
|
319
326
|
- heading:
|
320
327
|
text: Writing well for the web
|
321
|
-
id: writing-well-for-the-web
|
328
|
+
id: writing-well-for-the-web-2
|
322
329
|
content:
|
323
|
-
html: <p class="govuk-body">This is content for accordion 1 of 2</p
|
330
|
+
html: <p class="govuk-body">This is content for accordion 1 of 2</p>
|
324
331
|
- heading:
|
325
332
|
text: Writing well for specialists
|
326
333
|
content:
|
327
|
-
html: <p class="govuk-body"
|
334
|
+
html: <p class="govuk-body">This is content for accordion 2 of 2</p>
|
328
335
|
with_track_sections:
|
329
336
|
description: |
|
330
337
|
To switch on Google Analytics for each section, on click, pass `track_sections: true` the values passed on open will be
|
331
338
|
`Event Action: accordionOpened` / `accordionClosed` `Event Category: pageElementInteraction` and the `Event Label` being the heading text.
|
332
|
-
|
339
|
+
|
333
340
|
(`track_show_all_clicks: true` can be added to track the "Show all sections" button as well, if required)
|
334
341
|
data:
|
335
342
|
track_sections: true
|
336
343
|
items:
|
337
344
|
- heading:
|
338
345
|
text: Writing well for the web
|
339
|
-
id: writing-well-for-the-web
|
346
|
+
id: writing-well-for-the-web-3
|
340
347
|
content:
|
341
348
|
html: <p class="govuk-body">This is content for accordion 1 of 2</p><p class="govuk-body">This content contains a <a href="#anchor-nav-test" class="govuk-link">link</a></p>
|
342
349
|
- heading:
|
@@ -2,7 +2,7 @@ module GovukPublishingComponents
|
|
2
2
|
module Presenters
|
3
3
|
class PublicLayoutHelper
|
4
4
|
FOOTER_NAVIGATION_COLUMNS = [2, 1].freeze
|
5
|
-
FOOTER_TRACK_ACTIONS = %w[topicsLink
|
5
|
+
FOOTER_TRACK_ACTIONS = %w[topicsLink governmentactivityLink].freeze
|
6
6
|
FOOTER_META = {
|
7
7
|
items: [
|
8
8
|
{
|
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: 29.
|
4
|
+
version: 29.11.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: 2022-05-
|
11
|
+
date: 2022-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: govuk_app_config
|