govuk_publishing_components 24.10.3 → 24.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +1 -1
  3. data/app/assets/javascripts/govuk_publishing_components/components/feedback.js +142 -104
  4. data/app/assets/javascripts/govuk_publishing_components/components/reorderable-list.js +1 -1
  5. data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +2 -2
  6. data/app/assets/javascripts/govuk_publishing_components/lib/trigger-event.js +1 -1
  7. data/app/assets/stylesheets/govuk_publishing_components/_all_components_print.scss +0 -11
  8. data/app/assets/stylesheets/govuk_publishing_components/components/print/_attachment.scss +2 -3
  9. data/app/assets/stylesheets/govuk_publishing_components/components/print/_back-link.scss +2 -3
  10. data/app/assets/stylesheets/govuk_publishing_components/components/print/_button.scss +0 -4
  11. data/app/assets/stylesheets/govuk_publishing_components/components/print/_feedback.scss +2 -3
  12. data/app/assets/stylesheets/govuk_publishing_components/components/print/_layout-footer.scss +2 -6
  13. data/app/assets/stylesheets/govuk_publishing_components/components/print/_layout-header.scss +2 -3
  14. data/app/assets/stylesheets/govuk_publishing_components/components/print/_metadata.scss +2 -6
  15. data/app/assets/stylesheets/govuk_publishing_components/components/print/_search.scss +2 -3
  16. data/app/assets/stylesheets/govuk_publishing_components/components/print/_share-links.scss +2 -3
  17. data/app/assets/stylesheets/govuk_publishing_components/components/print/_skip-link.scss +2 -3
  18. data/app/assets/stylesheets/govuk_publishing_components/components/print/_step-by-step-nav-header.scss +0 -4
  19. data/app/assets/stylesheets/govuk_publishing_components/components/print/_subscription-links.scss +2 -3
  20. data/app/assets/stylesheets/govuk_publishing_components/components/print/_translation-nav.scss +2 -3
  21. data/app/views/govuk_publishing_components/components/_attachment.html.erb +1 -1
  22. data/app/views/govuk_publishing_components/components/_back_link.html.erb +1 -1
  23. data/app/views/govuk_publishing_components/components/_button.html.erb +1 -1
  24. data/app/views/govuk_publishing_components/components/_feedback.html.erb +1 -1
  25. data/app/views/govuk_publishing_components/components/_layout_footer.html.erb +2 -2
  26. data/app/views/govuk_publishing_components/components/_machine_readable_metadata.html.erb +1 -1
  27. data/app/views/govuk_publishing_components/components/_metadata.html.erb +1 -1
  28. data/app/views/govuk_publishing_components/components/_print_link.html.erb +1 -1
  29. data/app/views/govuk_publishing_components/components/_search.html.erb +1 -1
  30. data/app/views/govuk_publishing_components/components/_share_links.html.erb +1 -1
  31. data/app/views/govuk_publishing_components/components/_skip_link.html.erb +1 -1
  32. data/app/views/govuk_publishing_components/components/_step_by_step_nav.html.erb +2 -2
  33. data/app/views/govuk_publishing_components/components/_subscription_links.html.erb +1 -1
  34. data/app/views/govuk_publishing_components/components/_translation_nav.html.erb +1 -1
  35. data/app/views/govuk_publishing_components/components/docs/feedback.yml +2 -0
  36. data/app/views/govuk_publishing_components/components/layout_header/_navigation_items.html.erb +1 -1
  37. data/app/views/govuk_publishing_components/components/metadata/_sentence.html.erb +2 -2
  38. data/config/locales/ar.yml +123 -0
  39. data/config/locales/az.yml +123 -0
  40. data/config/locales/be.yml +123 -0
  41. data/config/locales/bg.yml +123 -0
  42. data/config/locales/bn.yml +123 -0
  43. data/config/locales/cs.yml +123 -0
  44. data/config/locales/cy.yml +115 -6
  45. data/config/locales/da.yml +123 -0
  46. data/config/locales/de.yml +123 -0
  47. data/config/locales/dr.yml +123 -0
  48. data/config/locales/el.yml +123 -0
  49. data/config/locales/en.yml +109 -109
  50. data/config/locales/es-419.yml +123 -0
  51. data/config/locales/es.yml +123 -0
  52. data/config/locales/et.yml +120 -0
  53. data/config/locales/fa.yml +123 -0
  54. data/config/locales/fi.yml +123 -0
  55. data/config/locales/fr.yml +120 -0
  56. data/config/locales/gd.yml +123 -0
  57. data/config/locales/gu.yml +123 -0
  58. data/config/locales/he.yml +123 -0
  59. data/config/locales/hi.yml +123 -0
  60. data/config/locales/hr.yml +123 -0
  61. data/config/locales/hu.yml +123 -0
  62. data/config/locales/hy.yml +123 -0
  63. data/config/locales/id.yml +123 -0
  64. data/config/locales/is.yml +123 -0
  65. data/config/locales/it.yml +123 -0
  66. data/config/locales/ja.yml +123 -0
  67. data/config/locales/ka.yml +123 -0
  68. data/config/locales/kk.yml +123 -0
  69. data/config/locales/ko.yml +123 -0
  70. data/config/locales/lt.yml +123 -0
  71. data/config/locales/lv.yml +123 -0
  72. data/config/locales/ms.yml +123 -0
  73. data/config/locales/mt.yml +123 -0
  74. data/config/locales/nl.yml +123 -0
  75. data/config/locales/no.yml +124 -1
  76. data/config/locales/pa-pk.yml +123 -0
  77. data/config/locales/pa.yml +123 -0
  78. data/config/locales/pl.yml +123 -0
  79. data/config/locales/ps.yml +123 -0
  80. data/config/locales/pt.yml +123 -0
  81. data/config/locales/ro.yml +123 -0
  82. data/config/locales/ru.yml +123 -0
  83. data/config/locales/si.yml +123 -0
  84. data/config/locales/sk.yml +123 -0
  85. data/config/locales/sl.yml +123 -0
  86. data/config/locales/so.yml +123 -0
  87. data/config/locales/sq.yml +123 -0
  88. data/config/locales/sr.yml +123 -0
  89. data/config/locales/sv.yml +123 -0
  90. data/config/locales/sw.yml +123 -0
  91. data/config/locales/ta.yml +123 -0
  92. data/config/locales/th.yml +123 -0
  93. data/config/locales/tk.yml +123 -0
  94. data/config/locales/tr.yml +123 -0
  95. data/config/locales/uk.yml +123 -0
  96. data/config/locales/ur.yml +123 -0
  97. data/config/locales/uz.yml +123 -0
  98. data/config/locales/vi.yml +123 -0
  99. data/config/locales/zh-hk.yml +123 -0
  100. data/config/locales/zh-tw.yml +123 -0
  101. data/config/locales/zh.yml +123 -0
  102. data/lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons.rb +1 -2
  103. data/lib/govuk_publishing_components/presenters/content_item.rb +4 -0
  104. data/lib/govuk_publishing_components/presenters/machine_readable/page.rb +4 -0
  105. data/lib/govuk_publishing_components/version.rb +1 -1
  106. data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +7 -16
  107. data/node_modules/govuk-frontend/govuk/components/back-link/_index.scss +4 -15
  108. data/node_modules/govuk-frontend/govuk/components/character-count/macro-options.json +1 -1
  109. data/node_modules/govuk-frontend/govuk/components/checkboxes/macro-options.json +3 -3
  110. data/node_modules/govuk-frontend/govuk/components/cookie-banner/README.md +15 -0
  111. data/node_modules/govuk-frontend/govuk/components/cookie-banner/fixtures.json +40 -22
  112. data/node_modules/govuk-frontend/govuk/components/cookie-banner/macro-options.json +6 -6
  113. data/node_modules/govuk-frontend/govuk/components/cookie-banner/template.njk +15 -5
  114. data/node_modules/govuk-frontend/govuk/components/date-input/macro-options.json +2 -2
  115. data/node_modules/govuk-frontend/govuk/components/details/_index.scss +5 -1
  116. data/node_modules/govuk-frontend/govuk/components/file-upload/_index.scss +13 -14
  117. data/node_modules/govuk-frontend/govuk/components/file-upload/macro-options.json +1 -1
  118. data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +14 -19
  119. data/node_modules/govuk-frontend/govuk/components/header/_index.scss +39 -21
  120. data/node_modules/govuk-frontend/govuk/components/input/macro-options.json +1 -1
  121. data/node_modules/govuk-frontend/govuk/components/phase-banner/_index.scss +1 -1
  122. data/node_modules/govuk-frontend/govuk/components/radios/macro-options.json +3 -3
  123. data/node_modules/govuk-frontend/govuk/components/select/macro-options.json +1 -1
  124. data/node_modules/govuk-frontend/govuk/components/skip-link/_index.scss +1 -1
  125. data/node_modules/govuk-frontend/govuk/components/tabs/_index.scss +1 -6
  126. data/node_modules/govuk-frontend/govuk/components/textarea/macro-options.json +1 -1
  127. data/node_modules/govuk-frontend/govuk/components/warning-text/_index.scss +10 -0
  128. data/node_modules/govuk-frontend/govuk/core/_links.scss +8 -0
  129. data/node_modules/govuk-frontend/govuk/helpers/_links.scss +153 -38
  130. data/node_modules/govuk-frontend/govuk/settings/_all.scss +2 -0
  131. data/node_modules/govuk-frontend/govuk/settings/_links.scss +62 -0
  132. data/node_modules/govuk-frontend/package.json +1 -1
  133. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0506262186ba0a9a1bf7ad543de412379a31dcdbf85d340fe24a08ca4b168a9
4
- data.tar.gz: eaeea982722cc7e5ee8a06f2609719034495eed7e717e967bee5fa5fe7897fbe
3
+ metadata.gz: 78e0df66823b7cc209d7d062f04e17ce65954ee5c06a965fe18912240cc687fd
4
+ data.tar.gz: b527515c2c9211e77a392c8891bd9ca476782681a63fd05e43d9c0aa2f3b8e7c
5
5
  SHA512:
6
- metadata.gz: 570b60d946209abd90e62672f2fd1739f44cd2312ffe1662cec29d8a6330a1995e0dc338ab32e7c0029091571dc317b407e34454f0b96dddb31408e430db03c8
7
- data.tar.gz: 8816a7575cc3038dcdd148dd3809692d6263ceb7da18f080e413f3c9bd4f39ad891c7c54bc176373a4d4e281fad40a5467b40ed9b3bf7f4a2b7a43573d8c103e
6
+ metadata.gz: a458245e3e6f8f5a5c3b6fb5e3c8eabb3ea0b74b201dde838f2b8a600ea0b4709ae5c01dbadd1d3b55148d1cc95d38da4dc2843805d46daa09fcb78e417a2f46
7
+ data.tar.gz: 0b63b8847309278957552d167763f3fa26077a7406a370d9e3edebbf5173c6978c30c75990654a511a91f99d00c2b64ad4d08fc72e7ff71cfbd9b163d8c4f3cf
@@ -47,7 +47,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
47
47
  this.initSectionHeaders()
48
48
 
49
49
  // Feature flag for anchor tag navigation used on manuals
50
- if (this.$module.getAttribute('data-anchor-navigation')) {
50
+ if (this.$module.getAttribute('data-anchor-navigation') === 'true') {
51
51
  this.openByAnchorOnLoad()
52
52
  this.addEventListenersForAnchors()
53
53
  }
@@ -1,5 +1,4 @@
1
- /* eslint-env jquery */
2
-
1
+ /* global XMLHttpRequest, FormData */
3
2
  window.GOVUK = window.GOVUK || {}
4
3
  window.GOVUK.Modules = window.GOVUK.Modules || {};
5
4
 
@@ -11,53 +10,56 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
11
10
  this.element = $element[0]
12
11
  this.somethingIsWrongForm = this.element.querySelector('#something-is-wrong')
13
12
  this.surveyForm = this.element.querySelector('#page-is-not-useful')
14
- this.$prompt = $element.find('.js-prompt')
15
- this.$fields = $element.find('.gem-c-feedback__form-field')
16
- this.$forms = $element.find('.js-feedback-form')
17
- this.$toggleForms = $element.find('.js-toggle-form')
18
- this.$closeForms = $element.find('.js-close-form')
13
+ this.prompt = this.element.querySelector('.js-prompt')
14
+ this.forms = this.element.querySelectorAll('.js-feedback-form')
15
+ this.toggleForms = this.element.querySelectorAll('.js-toggle-form')
16
+ this.closeForms = this.element.querySelectorAll('.js-close-form')
19
17
  this.activeForm = false
20
- this.$activeForm = false
21
- this.$pageIsUsefulButton = $element.find('.js-page-is-useful')
22
- this.$pageIsNotUsefulButton = $element.find('.js-page-is-not-useful')
23
- this.$somethingIsWrongButton = $element.find('.js-something-is-wrong')
24
- this.$promptQuestions = $element.find('.js-prompt-questions')
25
- this.$promptSuccessMessage = $element.find('.js-prompt-success')
26
- this.$somethingIsWrongForm = $(this.somethingIsWrongForm)
27
- this.$surveyForm = $(this.surveyForm)
28
- this.$surveyWrapper = $element.find('#survey-wrapper')
29
-
30
- var that = this
18
+ this.pageIsUsefulButton = this.element.querySelector('.js-page-is-useful')
19
+ this.pageIsNotUsefulButton = this.element.querySelector('.js-page-is-not-useful')
20
+ this.somethingIsWrongButton = this.element.querySelector('.js-something-is-wrong')
21
+ this.promptQuestions = this.element.querySelectorAll('.js-prompt-questions')
22
+ this.promptSuccessMessage = this.element.querySelector('.js-prompt-success')
23
+ this.surveyWrapper = this.element.querySelector('#survey-wrapper')
24
+
25
+ var thisModule = this
31
26
  var jshiddenClass = 'js-hidden'
32
27
 
33
28
  setInitialAriaAttributes()
34
29
  setHiddenValues()
35
30
 
36
- this.$toggleForms.on('click', function (e) {
37
- e.preventDefault()
38
- toggleForm($(e.target).attr('aria-controls'))
39
- trackEvent(getTrackEventParams($(this)))
40
- updateAriaAttributes($(this))
41
- })
31
+ for (var j = 0; j < this.toggleForms.length; j++) {
32
+ this.toggleForms[j].addEventListener('click', function (e) {
33
+ e.preventDefault()
34
+ var el = e.target
35
+ toggleForm(el.getAttribute('aria-controls'))
36
+ trackEvent(getTrackEventParams(el))
37
+ updateAriaAttributes(el)
38
+ })
39
+ }
42
40
 
43
- this.$closeForms.on('click', function (e) {
44
- e.preventDefault()
45
- toggleForm($(e.target).attr('aria-controls'))
46
- trackEvent(getTrackEventParams($(this)))
47
- setInitialAriaAttributes()
48
- revealInitialPrompt()
49
- var refocusClass = '.js-' + $(e.target).attr('aria-controls')
50
- $element.find(refocusClass).focus()
51
- })
41
+ for (var i = 0; i < this.closeForms.length; i++) {
42
+ this.closeForms[i].addEventListener('click', function (e) {
43
+ e.preventDefault()
44
+ var el = e.target
45
+ var formToToggle = el.getAttribute('aria-controls')
46
+ toggleForm(formToToggle)
47
+ trackEvent(getTrackEventParams(el))
48
+ setInitialAriaAttributes()
49
+ revealInitialPrompt()
50
+ var refocusClass = '.js-' + formToToggle
51
+ thisModule.element.querySelector(refocusClass).focus()
52
+ })
53
+ }
52
54
 
53
- this.$pageIsUsefulButton.on('click', function (e) {
55
+ this.pageIsUsefulButton.addEventListener('click', function (e) {
54
56
  e.preventDefault()
55
- trackEvent(getTrackEventParams(that.$pageIsUsefulButton))
57
+ trackEvent(getTrackEventParams(thisModule.pageIsUsefulButton))
56
58
  showFormSuccess()
57
59
  revealInitialPrompt()
58
60
  })
59
61
 
60
- this.$pageIsNotUsefulButton.on('click', function (e) {
62
+ this.pageIsNotUsefulButton.addEventListener('click', function (e) {
61
63
  var gaClientId
62
64
  var dummyGaClientId = '111111111.1111111111'
63
65
  if (window.GOVUK.cookie('_ga') === null || window.GOVUK.cookie('_ga') === '') {
@@ -68,95 +70,129 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
68
70
  setHiddenValuesNotUsefulForm(gaClientId)
69
71
  })
70
72
 
71
- $element.find('form').on('submit', function (e) {
72
- e.preventDefault()
73
- var $form = $(this)
74
- $.ajax({
75
- type: 'POST',
76
- url: $form.attr('action'),
77
- dataType: 'json',
78
- data: $form.serialize(),
79
- beforeSend: disableSubmitFormButton($form),
80
- timeout: 6000
81
- }).done(function (xhr) {
82
- trackEvent(getTrackEventParams($form))
83
- showFormSuccess(xhr.message)
84
- revealInitialPrompt()
85
- setInitialAriaAttributes()
86
- that.$activeForm.toggleClass(jshiddenClass)
87
- }).fail(function (xhr) {
88
- showError(xhr)
89
- enableSubmitFormButton($form)
90
- })
91
- })
73
+ // much of the JS needed to support sending the form contents via this script is
74
+ // unsupported by IE, even IE11. This check causes IE to not intercept form submits
75
+ // and let them happen normally, which is handled already by the backend
76
+ if (typeof window.URLSearchParams === 'function') {
77
+ for (var f = 0; f < this.forms.length; f++) {
78
+ this.forms[f].addEventListener('submit', function (e) {
79
+ e.preventDefault()
80
+ var $form = e.target
81
+ var xhr = new XMLHttpRequest()
82
+ var url = $form.getAttribute('action')
83
+ var params = new FormData($form)
84
+ params = new URLSearchParams(params).toString()
85
+
86
+ xhr.open('POST', url, true)
87
+ xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
88
+
89
+ xhr.onreadystatechange = function () {
90
+ if (xhr.readyState === 4 && xhr.status === 200) {
91
+ trackEvent(getTrackEventParams($form))
92
+ showFormSuccess(xhr.message)
93
+ revealInitialPrompt()
94
+ setInitialAriaAttributes()
95
+ thisModule.activeForm.classList.toggle(jshiddenClass)
96
+ } else {
97
+ showError(xhr)
98
+ enableSubmitFormButton($form)
99
+ }
100
+ }
101
+
102
+ disableSubmitFormButton($form)
103
+ xhr.send(params)
104
+ })
105
+ }
106
+ }
92
107
 
93
108
  function disableSubmitFormButton ($form) {
94
- $form.find('input[type="submit"]').prop('disabled', true)
109
+ var formButton = $form.querySelector('[type="submit"]')
110
+ formButton.setAttribute('disabled', true)
95
111
  }
96
112
 
97
113
  function enableSubmitFormButton ($form) {
98
- $form.find('input[type="submit"]').removeAttr('disabled')
114
+ var formButton = $form.querySelector('[type="submit"]')
115
+ formButton.removeAttribute('disabled')
99
116
  }
100
117
 
101
118
  function setInitialAriaAttributes () {
102
- that.$forms.attr('aria-hidden', true)
103
- that.$pageIsNotUsefulButton.attr('aria-expanded', false)
104
- that.$somethingIsWrongButton.attr('aria-expanded', false)
119
+ for (var i = 0; i < thisModule.forms.length; i++) {
120
+ thisModule.forms[i].setAttribute('aria-hidden', true)
121
+ }
122
+ thisModule.pageIsNotUsefulButton.setAttribute('aria-expanded', false)
123
+ thisModule.somethingIsWrongButton.setAttribute('aria-expanded', false)
105
124
  }
106
125
 
107
126
  function setHiddenValues () {
108
- that.$somethingIsWrongForm.append('<input type="hidden" name="javascript_enabled" value="true"/>')
109
- that.$somethingIsWrongForm.append($('<input type="hidden" name="referrer">').val(document.referrer || 'unknown'))
110
- that.somethingIsWrongForm.invalidInfoError = [
111
- '<h2>',
112
- ' Sorry, we’re unable to send your message as you haven’t given us any information.',
113
- '</h2>',
114
- '<p>Please tell us what you were doing or what went wrong</p>'
127
+ var javascriptEnabled = document.createElement('input')
128
+ javascriptEnabled.setAttribute('type', 'hidden')
129
+ javascriptEnabled.setAttribute('name', 'javascript_enabled')
130
+ javascriptEnabled.setAttribute('value', true)
131
+ thisModule.somethingIsWrongForm.appendChild(javascriptEnabled)
132
+
133
+ var referrer = document.createElement('input')
134
+ referrer.setAttribute('type', 'hidden')
135
+ referrer.setAttribute('name', 'referrer')
136
+ referrer.setAttribute('value', document.referrer || 'unknown')
137
+ thisModule.somethingIsWrongForm.appendChild(referrer)
138
+ thisModule.somethingIsWrongForm.invalidInfoError = [
139
+ '<h2>Sorry, we’re unable to send your message as you haven’t given us any information.</h2>',
140
+ ' <p>Please tell us what you were doing or what went wrong</p>'
115
141
  ].join('')
116
142
  }
117
143
 
118
144
  function setHiddenValuesNotUsefulForm (gaClientId) {
119
145
  var currentPathName = window.location.pathname.replace(/[^\s=?&]+(?:@|%40)[^\s=?&]+/, '[email]')
120
146
  var finalPathName = encodeURI(currentPathName)
121
- that.surveyForm.invalidInfoError = [
122
- '<h2>',
123
- ' Sorry, we’re unable to send your message as you haven’t given us a valid email address. ',
124
- '</h2>',
125
- '<p>Enter an email address in the correct format, like name@example.com</p>'
147
+ thisModule.surveyForm.invalidInfoError = [
148
+ '<h2>Sorry, we’re unable to send your message as you haven’t given us a valid email address.</h2>',
149
+ ' <p>Enter an email address in the correct format, like name@example.com</p>'
126
150
  ].join('')
127
151
  if (document.querySelectorAll('[name="email_survey_signup[ga_client_id]"]').length === 0) {
128
- that.$surveyForm.append($('<input name="email_survey_signup[ga_client_id]" type="hidden">').val(gaClientId || '0'))
152
+ var hiddenInput = document.createElement('input')
153
+ hiddenInput.setAttribute('type', 'hidden')
154
+ hiddenInput.setAttribute('name', 'email_survey_signup[ga_client_id]')
155
+ hiddenInput.setAttribute('value', gaClientId || '0')
156
+ thisModule.surveyForm.appendChild(hiddenInput)
129
157
  }
130
158
 
131
159
  if (document.querySelectorAll('.gem-c-feedback__email-link#take-survey').length === 0) {
132
- that.$surveyWrapper.append('<a href="https://www.smartsurvey.co.uk/s/gov-uk-banner/?c=' + finalPathName + '&amp;gcl=' + gaClientId + '" class="gem-c-feedback__email-link govuk-link" id="take-survey" target="_blank" rel="noopener noreferrer">Don’t have an email address?</a>')
160
+ var takeSurvey = document.createElement('a')
161
+ takeSurvey.setAttribute('href', 'https://www.smartsurvey.co.uk/s/gov-uk-banner/?c=' + finalPathName + '&amp;gcl=' + gaClientId)
162
+ takeSurvey.setAttribute('class', 'gem-c-feedback__email-link govuk-link')
163
+ takeSurvey.setAttribute('id', 'take-survey')
164
+ takeSurvey.setAttribute('target', '_blank')
165
+ takeSurvey.setAttribute('rel', 'noopener noreferrer')
166
+ takeSurvey.innerHTML = 'Don’t have an email address?'
167
+ thisModule.surveyWrapper.appendChild(takeSurvey)
133
168
  }
134
169
  }
135
170
 
136
171
  function updateAriaAttributes (linkClicked) {
137
- linkClicked.attr('aria-expanded', true)
138
- $('#' + linkClicked.attr('aria-controls')).attr('aria-hidden', false)
172
+ linkClicked.setAttribute('aria-expanded', true)
173
+ var controls = linkClicked.getAttribute('aria-controls')
174
+ var ariaControls = document.querySelector('#' + controls)
175
+ ariaControls.setAttribute('aria-hidden', false)
139
176
  }
140
177
 
141
178
  function toggleForm (formId) {
142
- that.activeForm = that.element.querySelector('#' + formId)
143
- that.$activeForm = $(that.activeForm)
144
- that.$activeForm.toggleClass(jshiddenClass)
145
- that.$prompt.toggleClass(jshiddenClass)
179
+ thisModule.activeForm = thisModule.element.querySelector('#' + formId)
180
+ thisModule.activeForm.classList.toggle(jshiddenClass)
181
+ thisModule.prompt.classList.toggle(jshiddenClass)
146
182
 
147
- var formIsVisible = !that.$activeForm.hasClass(jshiddenClass)
183
+ var formIsVisible = !thisModule.activeForm.classList.contains(jshiddenClass)
148
184
 
149
185
  if (formIsVisible) {
150
- that.$activeForm.find('.gem-c-input').first().focus()
186
+ thisModule.activeForm.querySelector('.gem-c-input').focus()
151
187
  } else {
152
- that.$activeForm = false
188
+ thisModule.activeForm = false
153
189
  }
154
190
  }
155
191
 
156
192
  function getTrackEventParams ($node) {
157
193
  return {
158
- category: $node.data('track-category'),
159
- action: $node.data('track-action')
194
+ category: $node.getAttribute('data-track-category'),
195
+ action: $node.getAttribute('data-track-action')
160
196
  }
161
197
  }
162
198
 
@@ -168,40 +204,42 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
168
204
 
169
205
  function showError (error) {
170
206
  var genericError = [
171
- '<h2>',
172
- ' Sorry, we’re unable to receive your message right now. ',
173
- '</h2>',
174
- '<p>If the problem persists, we have other ways for you to provide',
207
+ '<h2>Sorry, we’re unable to receive your message right now.</h2>',
208
+ ' <p>If the problem persists, we have other ways for you to provide',
175
209
  ' feedback on the <a href="/contact/govuk">contact page</a>.</p>'
176
210
  ].join('')
177
211
  // if the response is not a 404 or 500, show the error message if it exists
178
212
  // otherwise show the generic message
179
- if (typeof (error.responseJSON) !== 'undefined') {
180
- error = typeof (error.responseJSON.message) === 'undefined' ? genericError : error.responseJSON.message
181
-
182
- if (error === 'email survey sign up failure') {
213
+ if ('response' in error) {
214
+ if (typeof error.response === 'object' && error.response !== null) {
215
+ error = error.response.message === 'email survey sign up failure' ? genericError : error.response.message
216
+ } else {
183
217
  error = genericError
184
218
  }
185
219
  } else if (error.status === 422) {
186
220
  // there's clobbering by nginx on all 422 requests, which is why the response returns a rendered html page instead of the expected JSON
187
- // this is a temporary workaround to ensure that are are displaying relevant error messages to the users
188
- error = that.activeForm.invalidInfoError || genericError
221
+ // this is a temporary workaround to ensure that we are displaying relevant error messages to the users
222
+ error = thisModule.activeForm.invalidInfoError || genericError
189
223
  } else {
190
- // for all other, show generic error
191
224
  error = genericError
192
225
  }
193
- var $errors = that.$activeForm.find('.js-errors')
194
- $errors.html(error).removeClass(jshiddenClass).focus()
226
+ var $errors = thisModule.activeForm.querySelector('.js-errors')
227
+ $errors.innerHTML = error
228
+ $errors.classList.remove(jshiddenClass)
229
+ $errors.focus()
195
230
  }
196
231
 
197
232
  function showFormSuccess () {
198
- that.$promptQuestions.addClass(jshiddenClass)
199
- that.$promptSuccessMessage.removeClass(jshiddenClass).focus()
233
+ for (var i = 0; i < thisModule.promptQuestions.length; i++) {
234
+ thisModule.promptQuestions[i].classList.add(jshiddenClass)
235
+ }
236
+ thisModule.promptSuccessMessage.classList.remove(jshiddenClass)
237
+ thisModule.promptSuccessMessage.focus()
200
238
  }
201
239
 
202
240
  function revealInitialPrompt () {
203
- that.$prompt.removeClass(jshiddenClass)
204
- that.$prompt.focus()
241
+ thisModule.prompt.classList.remove(jshiddenClass)
242
+ thisModule.prompt.focus()
205
243
  }
206
244
  }
207
245
  }
@@ -98,7 +98,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
98
98
  event = new window.CustomEvent(eventName, params)
99
99
  } else {
100
100
  event = document.createEvent('CustomEvent')
101
- event.initCustomEvent(eventName, params.bubbles, params.cancelable)
101
+ event.initCustomEvent(eventName, params.bubbles, params.cancelable, null)
102
102
  }
103
103
 
104
104
  element.dispatchEvent(event)
@@ -74,7 +74,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
74
74
 
75
75
  Gemstepnav.prototype.addShowHideAllButton = function () {
76
76
  var showall = document.createElement('div')
77
- showall.className = 'gem-c-step-nav__controls'
77
+ showall.className = 'gem-c-step-nav__controls govuk-!-display-none-print'
78
78
  showall.innerHTML = '<button aria-expanded="false" class="gem-c-step-nav__button gem-c-step-nav__button--controls js-step-controls-button">' +
79
79
  '<span class="gem-c-step-nav__button-text gem-c-step-nav__button-text--all js-step-controls-button-text">' + this.$module.actions.showAllText + '</span>' +
80
80
  '<span class="gem-c-step-nav__chevron js-step-controls-button-icon">' + this.$module.downChevronSvg + '</span>' +
@@ -98,7 +98,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
98
98
  var commaSpan = document.createElement('span')
99
99
  var thisSectionSpan = document.createElement('span')
100
100
 
101
- showHideSpan.className = 'gem-c-step-nav__toggle-link js-toggle-link'
101
+ showHideSpan.className = 'gem-c-step-nav__toggle-link js-toggle-link govuk-!-display-none-print'
102
102
  showHideSpanText.className = 'gem-c-step-nav__button-text js-toggle-link-text'
103
103
  showHideSpanIcon.className = 'gem-c-step-nav__chevron js-toggle-link-icon'
104
104
  commaSpan.className = 'govuk-visually-hidden'
@@ -10,7 +10,7 @@
10
10
  event = new window.CustomEvent(eventName, params)
11
11
  } else {
12
12
  event = document.createEvent('CustomEvent')
13
- event.initCustomEvent(eventName, params.bubbles, params.cancelable)
13
+ event.initCustomEvent(eventName, params.bubbles, params.cancelable, null)
14
14
  }
15
15
 
16
16
  element.dispatchEvent(event)
@@ -4,22 +4,11 @@
4
4
  @import "govuk_frontend_support";
5
5
 
6
6
  @import "components/print/accordion";
7
- @import "components/print/attachment";
8
- @import "components/print/back-link";
9
7
  @import "components/print/button";
10
8
  @import "components/print/contents-list";
11
- @import "components/print/feedback";
12
9
  @import "components/print/govspeak-html-publication";
13
10
  @import "components/print/govspeak";
14
- @import "components/print/layout-header";
15
- @import "components/print/layout-footer";
16
- @import "components/print/metadata";
17
- @import "components/print/search";
18
- @import "components/print/share-links";
19
- @import "components/print/skip-link";
20
11
  @import "components/print/step-by-step-nav-header";
21
12
  @import "components/print/step-by-step-nav";
22
- @import "components/print/subscription-links";
23
13
  @import "components/print/textarea";
24
14
  @import "components/print/title";
25
- @import "components/print/translation-nav";
@@ -1,3 +1,2 @@
1
- .gem-c-attachment__thumbnail-image {
2
- display: none;
3
- }
1
+ // Left this as an empty file as opposed to deleting it because it is @imported in application print stylesheets for example here:
2
+ // https://github.com/alphagov/government-frontend/blob/7a0b068a0faa1da07f58acf0b1d3a0aa3e1daf56/app/assets/stylesheets/print.scss#L2
@@ -1,3 +1,2 @@
1
- .gem-c-back-link {
2
- display: none;
3
- }
1
+ // Left this as an empty file as opposed to deleting it because it is @imported in application print stylesheets for example here:
2
+ // https://github.com/alphagov/govuk-account-manager-prototype/blob/7858b55afcddc2f855d909abd051838d95f21f13/app/assets/stylesheets/print.scss#L2
@@ -6,7 +6,3 @@
6
6
  color: $govuk-text-colour;
7
7
  text-decoration: none;
8
8
  }
9
-
10
- .govuk-button__start-icon {
11
- display: none;
12
- }
@@ -1,3 +1,2 @@
1
- .gem-c-feedback {
2
- display: none;
3
- }
1
+ // Left this as an empty file as opposed to deleting it because it is @imported in application print stylesheets for example here:
2
+ // https://github.com/alphagov/government-frontend/blob/7a0b068a0faa1da07f58acf0b1d3a0aa3e1daf56/app/assets/stylesheets/print.scss#L6