govuk_publishing_components 34.0.0 → 34.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-core.js +16 -27
  3. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-event-tracker.js +2 -0
  4. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-page-views.js +4 -4
  5. data/app/assets/javascripts/govuk_publishing_components/components/layout-super-navigation-header.js +12 -69
  6. data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +14 -13
  7. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +247 -412
  8. data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_brand-colours.scss +2 -2
  9. data/app/controllers/govuk_publishing_components/audit_controller.rb +1 -1
  10. data/app/models/govuk_publishing_components/audit_comparer.rb +1 -1
  11. data/app/models/govuk_publishing_components/audit_components.rb +103 -82
  12. data/app/views/govuk_publishing_components/audit/_applications.html.erb +1 -1
  13. data/app/views/govuk_publishing_components/audit/_component_contents.html.erb +47 -39
  14. data/app/views/govuk_publishing_components/audit/_components.html.erb +1 -1
  15. data/app/views/govuk_publishing_components/components/_cookie_banner.html.erb +2 -2
  16. data/app/views/govuk_publishing_components/components/_label.html.erb +3 -2
  17. data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +94 -143
  18. data/app/views/govuk_publishing_components/components/docs/label.yml +6 -0
  19. data/config/locales/ar.yml +4 -1
  20. data/config/locales/az.yml +4 -1
  21. data/config/locales/be.yml +4 -1
  22. data/config/locales/bg.yml +4 -1
  23. data/config/locales/bn.yml +4 -1
  24. data/config/locales/cs.yml +4 -1
  25. data/config/locales/cy.yml +4 -1
  26. data/config/locales/da.yml +4 -1
  27. data/config/locales/de.yml +4 -1
  28. data/config/locales/dr.yml +4 -1
  29. data/config/locales/el.yml +4 -1
  30. data/config/locales/en.yml +6 -10
  31. data/config/locales/es-419.yml +4 -1
  32. data/config/locales/es.yml +4 -1
  33. data/config/locales/et.yml +4 -1
  34. data/config/locales/fa.yml +4 -1
  35. data/config/locales/fi.yml +4 -1
  36. data/config/locales/fr.yml +4 -1
  37. data/config/locales/gd.yml +4 -1
  38. data/config/locales/gu.yml +4 -1
  39. data/config/locales/he.yml +4 -1
  40. data/config/locales/hi.yml +4 -1
  41. data/config/locales/hr.yml +4 -1
  42. data/config/locales/hu.yml +4 -1
  43. data/config/locales/hy.yml +4 -1
  44. data/config/locales/id.yml +4 -1
  45. data/config/locales/is.yml +4 -1
  46. data/config/locales/it.yml +4 -1
  47. data/config/locales/ja.yml +4 -1
  48. data/config/locales/ka.yml +4 -1
  49. data/config/locales/kk.yml +4 -1
  50. data/config/locales/ko.yml +4 -1
  51. data/config/locales/lt.yml +4 -1
  52. data/config/locales/lv.yml +4 -1
  53. data/config/locales/ms.yml +4 -1
  54. data/config/locales/mt.yml +4 -1
  55. data/config/locales/nl.yml +4 -1
  56. data/config/locales/no.yml +4 -1
  57. data/config/locales/pa-pk.yml +4 -1
  58. data/config/locales/pa.yml +4 -1
  59. data/config/locales/pl.yml +4 -1
  60. data/config/locales/ps.yml +4 -1
  61. data/config/locales/pt.yml +4 -1
  62. data/config/locales/ro.yml +4 -1
  63. data/config/locales/ru.yml +4 -1
  64. data/config/locales/si.yml +4 -1
  65. data/config/locales/sk.yml +4 -1
  66. data/config/locales/sl.yml +4 -1
  67. data/config/locales/so.yml +4 -1
  68. data/config/locales/sq.yml +4 -1
  69. data/config/locales/sr.yml +4 -1
  70. data/config/locales/sv.yml +4 -1
  71. data/config/locales/sw.yml +4 -1
  72. data/config/locales/ta.yml +4 -1
  73. data/config/locales/th.yml +4 -1
  74. data/config/locales/tk.yml +4 -1
  75. data/config/locales/tr.yml +4 -1
  76. data/config/locales/uk.yml +4 -1
  77. data/config/locales/ur.yml +4 -1
  78. data/config/locales/uz.yml +4 -1
  79. data/config/locales/vi.yml +4 -1
  80. data/config/locales/zh-hk.yml +4 -1
  81. data/config/locales/zh-tw.yml +4 -1
  82. data/config/locales/zh.yml +4 -1
  83. data/lib/govuk_publishing_components/version.rb +1 -1
  84. data/node_modules/axe-core/axe.d.ts +76 -24
  85. data/node_modules/axe-core/axe.js +4765 -4555
  86. data/node_modules/axe-core/axe.min.js +2 -2
  87. data/node_modules/axe-core/package.json +2 -2
  88. data/node_modules/axe-core/sri-history.json +8 -0
  89. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d27a853451e7e5d792f6d4844c3192d325093a13bb352e726a7d5917186d9207
4
- data.tar.gz: f564406c3fe69d492b3c1f86713b0d8e7fd4f9bba214e3056fa4de42cea452b4
3
+ metadata.gz: 14acdf5801364f256fc2f6bbf90bc8f2e707ad2c6ec7efdec2107c6e049afec3
4
+ data.tar.gz: 16341b4908cd390fa02460a2ec1b42c3fcab5bfb2c5f6dcee2badb6c809a6d98
5
5
  SHA512:
6
- metadata.gz: e4323ecea03126f79bf1dc2e173a6c19504341b956a92bd8bcf85dd82bcd6003fe68dec8a835f3c35874044b4e7bd6542b029ad885976fc6efc18527ab6e707a
7
- data.tar.gz: f5463262a5c4069311287fd9ba13f36191a4675bcc6c70e0c6b36d0a04f7c3a11d4229bc2f5caa9d194194dbda264264723d0d65846b85aa62b29c289892f716
6
+ metadata.gz: 0d8a6b735e43f3dea62c1ec898254b619ef6d329423572b56bad4df236c356d0f7d585a2893c8b4ea1c65ed0c3bae098b62c616577cf92d08e950b776294496b
7
+ data.tar.gz: 1db3cf177445fa4aba896b725744b25df73e1ac8c623208754dc82f00437cc3c8d8ea066e6d04bc18d29efd8cb470c39757e775c46f4d2dc4b93c2fde54079f5
@@ -11,34 +11,23 @@ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {};
11
11
  var newScript = document.createElement('script')
12
12
  newScript.async = true
13
13
 
14
- if (window.GOVUK.analyticsGa4.vars.gtag_id) {
15
- // initialise gtag
16
- window.dataLayer = window.dataLayer || []
17
- var gtag = function () { window.dataLayer.push(arguments) }
18
- gtag('js', new Date())
19
- gtag('config', window.GOVUK.analyticsGa4.vars.gtag_id)
20
-
21
- newScript.src = '//www.googletagmanager.com/gtag/js?id=' + window.GOVUK.analyticsGa4.vars.gtag_id
22
- firstScript.parentNode.insertBefore(newScript, firstScript)
23
- } else {
24
- // initialise GTM
25
- window.dataLayer = window.dataLayer || []
26
- window.dataLayer.push({ 'gtm.blocklist': ['customPixels', 'customScripts', 'html', 'nonGoogleScripts'] })
27
- window.dataLayer.push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' })
28
-
29
- var auth = window.GOVUK.analyticsGa4.vars.auth || ''
30
- var preview = window.GOVUK.analyticsGa4.vars.preview || ''
31
- if (auth) {
32
- auth = '&gtm_auth=' + auth
33
- }
34
- if (preview) {
35
- preview = '&gtm_preview=' + preview + '&gtm_cookies_win=x'
36
- }
37
-
38
- this.googleSrc = 'https://www.googletagmanager.com/gtm.js?id=' + window.GOVUK.analyticsGa4.vars.id + auth + preview
39
- newScript.src = this.googleSrc
40
- firstScript.parentNode.insertBefore(newScript, firstScript)
14
+ // initialise GTM
15
+ window.dataLayer = window.dataLayer || []
16
+ window.dataLayer.push({ 'gtm.blocklist': ['customPixels', 'customScripts', 'html', 'nonGoogleScripts'] })
17
+ window.dataLayer.push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' })
18
+
19
+ var auth = window.GOVUK.analyticsGa4.vars.auth || ''
20
+ var preview = window.GOVUK.analyticsGa4.vars.preview || ''
21
+ if (auth) {
22
+ auth = '&gtm_auth=' + auth
41
23
  }
24
+ if (preview) {
25
+ preview = '&gtm_preview=' + preview + '&gtm_cookies_win=x'
26
+ }
27
+
28
+ this.googleSrc = 'https://www.googletagmanager.com/gtm.js?id=' + window.GOVUK.analyticsGa4.vars.id + auth + preview
29
+ newScript.src = this.googleSrc
30
+ firstScript.parentNode.insertBefore(newScript, firstScript)
42
31
  },
43
32
 
44
33
  sendData: function (data) {
@@ -42,6 +42,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
42
42
  return
43
43
  }
44
44
 
45
+ var text = data.text || event.target.textContent
46
+ data.text = window.GOVUK.analyticsGa4.core.trackFunctions.removeLinesAndExtraSpaces(text)
45
47
  schema.event = 'event_data'
46
48
  // get attributes from the data attribute to send to GA
47
49
  // only allow it if it already exists in the schema
@@ -28,11 +28,11 @@ window.GOVUK.analyticsGa4.analyticsModules = window.GOVUK.analyticsGa4.analytics
28
28
  content_id: this.getMetaContent('content-id'),
29
29
 
30
30
  browse_topic: this.getMetaContent('section'),
31
- taxon_slug: this.getMetaContent('taxon-slug'),
32
- taxon_id: this.getMetaContent('taxon-id'),
33
31
  taxonomy_level1: this.getMetaContent('themes'),
34
- taxon_slugs: this.getMetaContent('taxon-slugs'),
35
- taxon_ids: this.getMetaContent('taxon-ids'),
32
+ taxonomy_main: this.getMetaContent('taxon-slug'),
33
+ taxonomy_main_id: this.getMetaContent('taxon-id'),
34
+ taxonomy_all: this.getMetaContent('taxon-slugs'),
35
+ taxonomy_all_ids: this.getMetaContent('taxon-ids'),
36
36
 
37
37
  language: this.getLanguage(),
38
38
  history: this.getHistory(),
@@ -92,32 +92,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
92
92
  return closestPrevious(previousElement, elementType)
93
93
  }
94
94
 
95
- // When moving from one screen size to another (eg mobile to desktop) we need
96
- // to find out whether a submenu is open so the parent menu can be kept open.
97
- var hasSubMenusOpen = function ($menu) {
98
- return $menu.querySelectorAll('button[aria-expanded="true"]').length > 0
99
- }
100
-
101
- // Detect the current viewport width. Return the string `desktop` or `mobile` so it can be interpolated to access the
102
- // `data-toggle-{desktop|mobile}-group` attribute.
103
- //
104
- // Use `matchedia` which mitigates issues in modern browsers when scrollbars are forced in MacOS (using `document.documentElement.clientWidth`
105
- // for viewport width detection has issues in Chrome and Firefox, and `window.innerWidth` has issues in Safari).
106
- //
107
- // Fall back to `document.documentElement.clientWidth` for legacy browsers.
108
- var windowSize = function () {
109
- var viewport = false
110
- if (typeof window.matchMedia === 'function') {
111
- viewport = window.matchMedia('(min-width:' + SETTINGS.breakpoint.desktop + 'px)').matches
112
- } else {
113
- viewport = document.documentElement.clientWidth >= SETTINGS.breakpoint.desktop
114
- }
115
- return viewport ? 'desktop' : 'mobile'
116
- }
117
95
  function SuperNavigationMegaMenu ($module) {
118
96
  this.$module = $module
119
- this.$navigationToggle = this.$module.querySelector('#super-navigation-menu-toggle')
120
- this.$navigationMenu = this.$module.querySelector('#super-navigation-menu')
121
97
  this.$searchToggle = this.$module.querySelector('#super-search-menu-toggle')
122
98
  this.$searchMenu = this.$module.querySelector('#super-search-menu')
123
99
 
@@ -132,55 +108,25 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
132
108
  )
133
109
 
134
110
  this.hiddenButtons = this.$module.querySelectorAll('button[hidden]')
135
-
136
- this.lastWindowSize = null
137
111
  }
138
112
 
139
- SuperNavigationMegaMenu.prototype.windowSize = windowSize
140
-
141
113
  SuperNavigationMegaMenu.prototype.updateStates = function () {
142
- if (this.windowSize() === 'mobile' && this.lastWindowSize !== 'mobile') {
143
- this.$navigationToggle.removeAttribute('hidden')
144
-
145
- // Hides navigation menu unless a submenu is open - this could be common
146
- // as the desktop view has the navigation submenu as top level in the
147
- // menu.
148
- if (!hasSubMenusOpen(this.$navigationMenu)) {
149
- hide(this.$navigationToggle, this.$navigationMenu)
150
- }
151
-
152
- this.$module.style.marginBottom = '0'
153
- }
154
-
155
- // Hide the navigation toggle button and show the navigation submenu:
156
- if (this.windowSize() === 'desktop' && this.lastWindowSize !== 'desktop') {
157
- this.$navigationToggle.setAttribute('hidden', 'hidden')
158
- this.$navigationMenu.removeAttribute('hidden')
159
- }
160
-
161
- // The dropdown menu height is only needed when in desktop mode as this is
162
- // when the dropdown menu is using `absolute` positioning. This requires
163
- // JavaScript to work out the height and make space for the dropdown menu.
164
- if (windowSize() === 'desktop') {
165
- // Check whether any of the dropdown menus are open.
166
- var $openButton = this.$module.querySelector('[aria-expanded="true"][data-toggle-desktop-group="top"]')
167
- // Gets the open dropdown menu
168
- var $openMenu = $openButton ? this.$module.querySelector('#' + $openButton.getAttribute('aria-controls')) : null
169
- // If there is an open dropdown menu, get the height of the dropdown menu.
170
- var margin = $openMenu ? $openMenu.offsetHeight : 0
171
-
172
- // Make space for the dropdown menu.
173
- this.$module.style.marginBottom = margin + 'px'
174
- }
175
-
176
- this.lastWindowSize = this.windowSize()
114
+ // Check whether any of the dropdown menus are open.
115
+ var $openButton = this.$module.querySelector('[aria-expanded="true"][data-toggle-desktop-group="top"]')
116
+ // Gets the open dropdown menu
117
+ var $openMenu = $openButton ? this.$module.querySelector('#' + $openButton.getAttribute('aria-controls')) : null
118
+ // If there is an open dropdown menu, get the height of the dropdown menu.
119
+ var margin = $openMenu ? $openMenu.offsetHeight : 0
120
+
121
+ // Make space for the dropdown menu.
122
+ this.$module.style.marginBottom = margin + 'px'
177
123
  }
178
124
 
179
125
  SuperNavigationMegaMenu.prototype.buttonHandler = function (event) {
180
126
  var $target = closestParentIncluding(event.target, 'button')
181
127
  var $targetMenu = this.$module.querySelector('#' + $target.getAttribute('aria-controls'))
182
128
 
183
- var toggleGroupAttribute = 'data-toggle-' + this.windowSize() + '-group'
129
+ var toggleGroupAttribute = 'data-toggle-desktop-group'
184
130
  var toggleGroupName = $target.getAttribute(toggleGroupAttribute)
185
131
  var toggleGroupList = this.$module.querySelectorAll('[' + toggleGroupAttribute + '="' + toggleGroupName + '"]')
186
132
 
@@ -194,9 +140,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
194
140
 
195
141
  toggle($target, $targetMenu)
196
142
 
197
- if (this.windowSize() === 'desktop') {
198
- this.$module.style.marginBottom = $targetMenu.offsetHeight + 'px'
199
- }
143
+ this.$module.style.marginBottom = $targetMenu.offsetHeight + 'px'
200
144
  }
201
145
 
202
146
  SuperNavigationMegaMenu.prototype.init = function () {
@@ -217,6 +161,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
217
161
  $element.removeAttribute('hidden')
218
162
 
219
163
  var closestSiblingLink = closestPrevious($element, 'a')
164
+
220
165
  if (closestSiblingLink) {
221
166
  closestSiblingLink.setAttribute('hidden', 'hidden')
222
167
  }
@@ -237,8 +182,6 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
237
182
  hide(this.$searchToggle, this.$searchMenu)
238
183
  this.updateStates()
239
184
 
240
- this.lastWindowSize = this.windowSize()
241
-
242
185
  // The menu needs to be updated when the window is resized to make sure that
243
186
  // the space needed for the dropdown menu is correct.
244
187
  window.addEventListener('resize', this.updateStates.bind(this), { passive: true })
@@ -178,30 +178,31 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
178
178
  var title = thisel.querySelectorAll('.js-step-title')[0]
179
179
  var contentId = thisel.querySelectorAll('.js-panel')[0].getAttribute('id')
180
180
  var titleText = title.textContent || title.innerText // IE8 fallback
181
- var ga4Data = ''
182
-
183
- if (this.$module.isGa4Enabled) {
184
- var ga4JSON = {
185
- event_name: 'select_content',
186
- type: 'step by step',
187
- text: titleText.trim(),
188
- index: i + 1,
189
- index_total: this.$module.totalSteps
190
- }
191
- ga4Data = "data-ga4-event='" + JSON.stringify(ga4JSON) + "'" // Construct GA4 data-attributes for ga4-event-tracker.
192
- }
193
181
 
194
182
  title.outerHTML =
195
183
  '<span class="js-step-title">' +
196
184
  '<button ' +
197
185
  'class="gem-c-step-nav__button gem-c-step-nav__button--title js-step-title-button" ' +
198
- 'aria-expanded="false" aria-controls="' + contentId + '" ' + ga4Data + '>' +
186
+ 'aria-expanded="false" aria-controls="' + contentId + '"' + '>' +
199
187
  '<span class="gem-c-step-nav____title-text-focus">' +
200
188
  '<span class="gem-c-step-nav__title-text js-step-title-text">' + titleText + '</span>' +
201
189
  '<span class="govuk-visually-hidden gem-c-step-nav__section-heading-divider">, </span>' +
202
190
  '</span>' +
203
191
  '</button>' +
204
192
  '</span>'
193
+
194
+ if (this.$module.isGa4Enabled) {
195
+ var ga4JSON = {
196
+ event_name: 'select_content',
197
+ type: 'step by step',
198
+ text: titleText.trim(),
199
+ index: i + 1,
200
+ index_total: this.$module.totalSteps
201
+ }
202
+
203
+ var button = thisel.querySelector('.js-step-title-button')
204
+ button.setAttribute('data-ga4-event', JSON.stringify(ga4JSON))
205
+ }
205
206
  }
206
207
  }
207
208