govuk_publishing_components 31.2.0 → 32.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91b9d62f7f0bee126ffb2fa60dcca311f06489100cdc686a4c4404f54ae4c4e3
4
- data.tar.gz: df1410de982d60ae348bad56b9dda41ea67666d1c4117b5f61260998aaac9bea
3
+ metadata.gz: 40c8f5cd0a641b265004d0db4aa4dad79cc1f251bc6510655d69bc7fa954614f
4
+ data.tar.gz: 80b737085d4e49d8a2d5558472f918ed7632db5932d32c9945ad82d936c3a2d0
5
5
  SHA512:
6
- metadata.gz: 3ce3821fa73df20270408a383dba70232b5312628fe31299bc8b3b6577dc786da3e1afe24e72dcd38a1217e04739563b2a09bde9f4a8228f50c1a63c656ca7b9
7
- data.tar.gz: 8ea5b431d7ed318852c4c1fdd1991b09f28d8abca00d8732b5cb6cf4de698a1a66a98fb5298ac49769666867d5641275e284fff04d8f12e950ee22c0809a4359
6
+ metadata.gz: c18a6aee8070978fd4f72f29eb7d916d8899a261c3bac0fac075703a18d5c7e7b1854fc56dc3d9ee4bfae10e1c5725aa4693f0488edac5429bb5f9b6ceed3e33
7
+ data.tar.gz: 2903283d75f095a49ebd6940cb003bc6653bf3e2e96cd990f311b3b113b1925bf042b9bc689a0f01d1f951973aee8f58fd00945e771507477e1ec69fa29eca1b
@@ -1,3 +1,9 @@
1
- <svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path fill-rule="evenodd" clip-rule="evenodd" d="M11.4893 23C17.8406 23 22.9893 17.8513 22.9893 11.5C22.9893 5.14873 17.8406 0 11.4893 0C5.64643 0 0.821276 4.35747 0.0862655 10H12.7633L8.98933 5.67277L10.4482 4L16.9893 11.5L10.4482 19L8.98933 17.3272L13.6354 12H0C0.261778 18.1193 5.30558 23 11.4893 23ZM13.9893 11.5942L14.0715 11.5L13.9893 11.4057V11.5942Z" fill="#366FB3"/>
1
+ <svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="19.5" cy="19.5" r="19.5" fill="#366FB3" mask="url(#mask)"/>
3
+
4
+ <mask id="mask">
5
+ <rect width="100%" height="100%" fill="white"/>
6
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M24.0343 20L14.1812 10.1469L17.0096 7.31848L29.6912 20L17.0096 32.6815L14.1812 29.8531L24.0343 20Z" fill="black"/>
7
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M0.000423781 18L25.1328 18L25.1328 22L0.000423431 22L0.000423781 18Z" fill="black"/>
8
+ </mask>
3
9
  </svg>
@@ -19,7 +19,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
19
19
  var target = e.target
20
20
  if (!trackLinksOnly) {
21
21
  that.$module.handleClick(target)
22
- } else if (trackLinksOnly && target.tagName === 'A') {
22
+ } else if (trackLinksOnly && target.closest('a')) {
23
23
  if (!limitToElementClass) {
24
24
  that.$module.handleClick(target)
25
25
  } else if (limitToElementClass && target.closest('.' + limitToElementClass)) {
@@ -9,12 +9,17 @@
9
9
  PIIRemover: new GOVUK.analyticsGa4.PIIRemover(),
10
10
  DEFAULT_LIST_TITLE: 'Site search results',
11
11
 
12
- init: function (isNewPageLoad) {
12
+ init: function (referrer) {
13
13
  if (window.dataLayer) {
14
+ /* The referrer parameter is only passed to the init() function as a result of an AJAX request
15
+ (in live_search.js in the finder-frontend repository). Otherwise it will not be available and this indicates a fresh page load.
16
+ This is needed to trigger a fresh pageViewTracker push to the dataLayer on dynamic page updates and to prevent multiple
17
+ click listeners from being applied on this.searchResultsBlocks elements. */
18
+ var isNewPageLoad = !referrer
19
+
14
20
  /* The data-ga4-ecommerce attribute may be present on several DOM elements e.g. search results and spelling
15
21
  suggestions, hence why document.querySelectorAll is required */
16
22
  this.searchResultsBlocks = document.querySelectorAll('[data-ga4-ecommerce]')
17
- this.isNewPageLoad = isNewPageLoad
18
23
 
19
24
  if (!this.searchResultsBlocks.length === 0) {
20
25
  return
@@ -23,18 +28,18 @@
23
28
  /* If the results are updated by JS, the URL of the page will change and this needs to be visible to PA's,
24
29
  hence the pageView object push to the dataLayer. We do not need to send a pageView object on page load as
25
30
  this is handled elsewhere. */
26
- if (!this.isNewPageLoad) {
31
+ if (referrer) {
27
32
  var pageViewTracker = window.GOVUK.analyticsGa4.analyticsModules.PageViewTracker
28
33
 
29
34
  if (pageViewTracker) {
30
- pageViewTracker.init()
35
+ pageViewTracker.init(referrer)
31
36
  }
32
37
  }
33
38
 
34
39
  for (var i = 0; i < this.searchResultsBlocks.length; i++) {
35
40
  this.trackSearchResults(this.searchResultsBlocks[i])
36
41
 
37
- if (this.isNewPageLoad) {
42
+ if (isNewPageLoad) {
38
43
  this.searchResultsBlocks[i].addEventListener('click', this.handleClick.bind(this))
39
44
  }
40
45
  }
@@ -51,8 +51,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
51
51
  }
52
52
  }
53
53
 
54
- // Ensure it only tracks aria-expanded in an accordion element, instead of in any child of the clicked element
55
- if (target.closest('.gem-c-accordion')) {
54
+ /* Ensure it only tracks aria-expanded in an accordion or element with data-ga4-expandable on it. */
55
+ if (target.closest('.gem-c-accordion') || target.closest('[data-ga4-expandable]')) {
56
56
  var ariaExpanded = this.getClosestAttribute(target, 'aria-expanded')
57
57
  }
58
58
 
@@ -9,13 +9,15 @@ window.GOVUK.analyticsGa4.analyticsModules = window.GOVUK.analyticsGa4.analytics
9
9
  PIIRemover: new window.GOVUK.analyticsGa4.PIIRemover(), // imported in analytics-ga4.js
10
10
  nullValue: undefined,
11
11
 
12
- init: function () {
12
+ init: function (referrer) {
13
13
  if (window.dataLayer) {
14
14
  var data = {
15
15
  event: 'page_view',
16
16
  page_view: {
17
17
  location: this.getLocation(),
18
- referrer: this.getReferrer(),
18
+ /* If the init() function receives a referrer parameter, this indicates that it has been called as a part of an AJAX request and
19
+ this.getReferrer() will not return the correct value. Therefore we need to rely on the referrer parameter. */
20
+ referrer: referrer || this.getReferrer(),
19
21
  title: this.getTitle(),
20
22
  status_code: this.getStatusCode(),
21
23
 
@@ -42,7 +44,12 @@ window.GOVUK.analyticsGa4.analyticsModules = window.GOVUK.analyticsGa4.analytics
42
44
  political_status: this.getMetaContent('political-status'),
43
45
  primary_publishing_organisation: this.getMetaContent('primary-publishing-organisation'),
44
46
  organisations: this.getMetaContent('analytics:organisations'),
45
- world_locations: this.getMetaContent('analytics:world-locations')
47
+ world_locations: this.getMetaContent('analytics:world-locations'),
48
+
49
+ /* The existence of a referrer parameter indicates that the page has been dynamically updated via an AJAX request
50
+ and therefore we can use it to set the dynamic property appropriately. This value is used by PA's to differentiate
51
+ between fresh page loads and dynamic page updates. */
52
+ dynamic: referrer ? 'true' : 'false'
46
53
  }
47
54
  }
48
55
  window.GOVUK.analyticsGa4.core.sendData(data)
@@ -15,7 +15,7 @@
15
15
  hide_navigation_menu_text = t("components.layout_super_navigation_header.menu_toggle_label.hide", :label => "navigation")
16
16
  show_navigation_menu_text = t("components.layout_super_navigation_header.menu_toggle_label.show", :label => "navigation")
17
17
  %>
18
- <header role="banner" class="gem-c-layout-super-navigation-header" data-module="gem-track-click" data-track-links-only>
18
+ <header role="banner" class="gem-c-layout-super-navigation-header" data-module="gem-track-click ga4-event-tracker" data-track-links-only data-ga4-expandable>
19
19
  <div class="gem-c-layout-super-navigation-header__container govuk-width-container govuk-clearfix">
20
20
  <div class="gem-c-layout-super-navigation-header__header-logo">
21
21
  <a
@@ -78,6 +78,14 @@
78
78
  hidden
79
79
  id="super-navigation-menu-toggle"
80
80
  type="button"
81
+ data-ga4="<%= {
82
+ "event_name": "select_content",
83
+ "type": "header menu bar",
84
+ "text": "Menu",
85
+ "index": 1,
86
+ "index_total": navigation_links.length + 2,
87
+ "section": "Menu"
88
+ }.to_json %>"
81
89
  >
82
90
  <span class="gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner">
83
91
  Menu
@@ -124,6 +132,14 @@
124
132
  toggle_desktop_group: "top",
125
133
  toggle_mobile_group: "second",
126
134
  tracking_key: tracking_label,
135
+ ga4: {
136
+ event_name: "select_content",
137
+ type: "header menu bar",
138
+ text: link[:label],
139
+ index: index + 2,
140
+ index_total: navigation_links.length + 2,
141
+ section: link[:label]
142
+ }
127
143
  },
128
144
  hidden: true,
129
145
  id: "super-navigation-menu__section-#{unique_id}-toggle",
@@ -217,6 +233,14 @@
217
233
  hidden
218
234
  id="super-search-menu-toggle"
219
235
  type="button"
236
+ data-ga4="<%= {
237
+ "event_name": "select_content",
238
+ "type": "header menu bar",
239
+ "text": "Search",
240
+ "index": navigation_links.length + 2,
241
+ "index_total": navigation_links.length + 2,
242
+ "section": "Search"
243
+ }.to_json %>"
220
244
  >
221
245
  <span class="govuk-visually-hidden">
222
246
  <%= search_text %>
@@ -39,25 +39,32 @@
39
39
  } %>
40
40
 
41
41
  <%= render "govuk_publishing_components/components/button", {
42
- text: t("components.feedback.send")
42
+ text: t("components.feedback.send"),
43
+ data_attributes: {
44
+ ga4: {
45
+ event_name: "form_submit",
46
+ type: "feedback",
47
+ text: "Send",
48
+ section: "Help us improve GOV.UK",
49
+ }
50
+ }
43
51
  } %>
44
52
 
45
- <button
46
- class="govuk-button govuk-button--secondary gem-c-feedback__close gem-c-feedback__js-show js-close-form"
47
- data-track-category="Onsite Feedback"
48
- data-track-action="GOV.UK Close Form"
49
- aria-controls="something-is-wrong"
50
- aria-expanded="true">
51
- <%= t("components.feedback.close") %>
52
- </button>
53
-
53
+ <button
54
+ class="govuk-button govuk-button--secondary gem-c-feedback__close gem-c-feedback__js-show js-close-form"
55
+ data-track-category="Onsite Feedback"
56
+ data-track-action="GOV.UK Close Form"
57
+ aria-controls="something-is-wrong"
58
+ aria-expanded="true">
59
+ <%= t("components.feedback.close") %>
60
+ </button>
54
61
  </div>
55
62
  </div>
56
63
  </form>
57
64
 
58
65
  <%
59
- # I've added the following script inline in case of a scenario where a bot is able to parse the page,
60
- # without downloading any of the external scripts.
66
+ # I've added the following script inline in case of a scenario where a bot is able to parse the page,
67
+ # without downloading any of the external scripts.
61
68
  # This seems to be a more reliable way to make sure the script is executed.
62
69
  %>
63
70
 
@@ -25,8 +25,16 @@
25
25
  describedby: "survey_explanation"
26
26
  } %>
27
27
 
28
- <%= render "govuk_publishing_components/components/button", {
28
+ <%= render "govuk_publishing_components/components/button", {
29
29
  text: t("components.feedback.send_me_survey"),
30
+ data_attributes: {
31
+ ga4: {
32
+ event_name: "form_submit",
33
+ type: "feedback",
34
+ text: "Send me the survey",
35
+ section: "Help us improve GOV.UK",
36
+ }
37
+ }
30
38
  } %>
31
39
 
32
40
  <button
@@ -38,7 +46,7 @@
38
46
  hidden>
39
47
  <%= t("components.feedback.close") %>
40
48
  </button>
41
-
49
+
42
50
  </div>
43
51
  </div>
44
52
  </form>
@@ -39,10 +39,9 @@
39
39
  </div>
40
40
 
41
41
  <div class="gem-c-feedback__prompt-questions gem-c-feedback__prompt-questions--something-is-wrong js-prompt-questions" hidden>
42
- <button class="govuk-button gem-c-feedback__prompt-link js-toggle-form js-something-is-wrong" data-track-category="Onsite Feedback" data-track-action="GOV-UK Open Form" aria-controls="something-is-wrong" aria-expanded="false">
42
+ <button class="govuk-button gem-c-feedback__prompt-link js-toggle-form js-something-is-wrong" data-track-category="Onsite Feedback" data-track-action="GOV-UK Open Form" aria-controls="something-is-wrong" aria-expanded="false" data-ga4='{"event_name":"form_submit","type":"feedback","text":"Report a problem with this page", "section": "Is this page useful?"}'>
43
43
  <%= t("components.feedback.something_wrong") %>
44
44
  </button>
45
45
  </div>
46
-
47
46
  </div>
48
47
  </div>
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = "31.2.0".freeze
2
+ VERSION = "32.0.0".freeze
3
3
  end
@@ -78,9 +78,9 @@ The [axe-core API](doc/API.md) fully supports the following browsers:
78
78
  - Google Chrome v42 and above
79
79
  - Mozilla Firefox v38 and above
80
80
  - Apple Safari v7 and above
81
- - Internet Explorer v11
81
+ - Internet Explorer v11 (DEPRECATED)
82
82
 
83
- Support means that we will fix bugs and attempt to test each browser regularly. Only Firefox, Chrome, and Internet Explorer 11 are currently tested on every pull request.
83
+ Support means that we will fix bugs and attempt to test each browser regularly. Only Chrome and Firefox are currently tested on every pull request.
84
84
 
85
85
  There is limited support for JSDOM. We will attempt to make all rules compatible with JSDOM but where this is not possible, we recommend turning those rules off. Currently the `color-contrast` rule is known not to work with JSDOM.
86
86
 
@@ -103,9 +103,9 @@ or equivalently:
103
103
 
104
104
  `npm run build -- --lang=nl`
105
105
 
106
- This will create a new build for axe, called `axe.<lang>.js` and `axe.<lang>.min.js`. If you want to build localized versions, simply pass in `--all-lang` instead. If you want to build multiple localized versions (but not all of them), you can pass in a comma-separated list of langages to the `--lang` flag, like `--lang=nl,ja`.
106
+ This will create a new build for axe, called `axe.<lang>.js` and `axe.<lang>.min.js`. If you want to build localized versions, simply pass in `--all-lang` instead. If you want to build multiple localized versions (but not all of them), you can pass in a comma-separated list of languages to the `--lang` flag, like `--lang=nl,ja`.
107
107
 
108
- To create a new translation for axe, start by running `grunt translate --lang=<langcode>`. This will create a json file fin the `./locales` directory, with the default English text in it for you to translate. We welcome any localization for axe-core. For details on how to contribute, see the Contributing section below. For details on the message syntax, see [Check Message Template](/docs/check-message-template.md).
108
+ To create a new translation for axe, start by running `grunt translate --lang=<langcode>`. This will create a json file fin the `./locales` directory, with the default English text in it for you to translate. Alternatively, you could copy `./locales/_template.json`. We welcome any localization for axe-core. For details on how to contribute, see the Contributing section below. For details on the message syntax, see [Check Message Template](/docs/check-message-template.md).
109
109
 
110
110
  To update existing translation file, re-run `grunt translate --lang=<langcode>`. This will add new messages used in English and remove messages which were not used in English.
111
111
 
@@ -127,8 +127,7 @@ axe.configure({
127
127
  },
128
128
  'aria-errormessage': {
129
129
  // Note: doT (https://github.com/olado/dot) templates are supported here.
130
- fail:
131
- 'Der Wert der aria-errormessage ${data.values}` muss eine Technik verwenden, um die Message anzukündigen (z. B., aria-live, aria-describedby, role=alert, etc.).'
130
+ fail: 'Der Wert der aria-errormessage ${data.values}` muss eine Technik verwenden, um die Message anzukündigen (z. B., aria-live, aria-describedby, role=alert, etc.).'
132
131
  }
133
132
  // ...
134
133
  }
@@ -145,8 +144,10 @@ Axe-core supports the following locales. Do note that since locales are contribu
145
144
  - Dutch
146
145
  - French
147
146
  - German
147
+ - Hebrew
148
148
  - Japanese
149
149
  - Korean
150
+ - Norwegian (Bokmål)
150
151
  - Polish
151
152
  - Portuguese (Brazilian)
152
153
  - Spanish
@@ -250,6 +250,7 @@ declare namespace axe {
250
250
  help: string;
251
251
  helpUrl: string;
252
252
  tags: string[];
253
+ actIds?: string[];
253
254
  }
254
255
  interface SerialDqElement {
255
256
  source: string;