govuk_publishing_components 28.2.0 → 28.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/assets/javascripts/govuk_publishing_components/analytics/auto-scroll-tracker.js +2 -1
- data/app/assets/javascripts/govuk_publishing_components/analytics/auto-track-event.js +22 -22
- data/app/assets/javascripts/govuk_publishing_components/analytics/pii.js +9 -5
- data/app/assets/javascripts/govuk_publishing_components/analytics/track-click.js +4 -3
- data/app/assets/javascripts/govuk_publishing_components/analytics/track-select-change.js +4 -3
- data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +21 -291
- data/app/assets/javascripts/govuk_publishing_components/components/button.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/components/character-count.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/components/checkboxes.js +1 -2
- data/app/assets/javascripts/govuk_publishing_components/components/details.js +3 -4
- data/app/assets/javascripts/govuk_publishing_components/components/error-summary.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/components/layout-header.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/components/radio.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/components/skip-link.js +5 -0
- data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +40 -37
- data/app/assets/javascripts/govuk_publishing_components/components/tabs.js +1 -1
- data/app/assets/javascripts/govuk_publishing_components/lib/govspeak/barchart-enhancement.js +4 -3
- data/app/assets/javascripts/govuk_publishing_components/lib/govspeak/magna-charta.js +8 -10
- data/app/assets/javascripts/govuk_publishing_components/lib/initial-focus.js +4 -3
- data/app/assets/javascripts/govuk_publishing_components/lib/toggle-input-class-on-focus.js +4 -3
- data/app/assets/javascripts/govuk_publishing_components/lib/toggle.js +4 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/_accordion.scss +1 -329
- data/app/assets/stylesheets/govuk_publishing_components/components/_big-number.scss +5 -2
- data/app/assets/stylesheets/govuk_publishing_components/components/_contextual-sidebar.scss +0 -5
- data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +67 -21
- data/app/assets/stylesheets/govuk_publishing_components/components/_share-links.scss +3 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav.scss +95 -56
- data/app/assets/stylesheets/govuk_publishing_components/components/print/_accordion.scss +6 -17
- data/app/assets/stylesheets/govuk_publishing_components/govuk_frontend_support.scss +0 -9
- data/app/views/govuk_publishing_components/components/_accordion.html.erb +30 -15
- data/app/views/govuk_publishing_components/components/_action_link.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_big_number.html.erb +12 -8
- data/app/views/govuk_publishing_components/components/_button.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_character_count.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/_checkboxes.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/_contextual_sidebar.html.erb +0 -4
- data/app/views/govuk_publishing_components/components/_details.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_error_message.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_error_summary.html.erb +0 -1
- data/app/views/govuk_publishing_components/components/_heading.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_hint.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_inset_text.html.erb +12 -1
- data/app/views/govuk_publishing_components/components/_layout_footer.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +22 -18
- data/app/views/govuk_publishing_components/components/_list.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_modal_dialogue.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_notice.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_print_link.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/_radio.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_search.html.erb +2 -2
- data/app/views/govuk_publishing_components/components/_select.html.erb +19 -1
- data/app/views/govuk_publishing_components/components/_share_links.html.erb +25 -22
- data/app/views/govuk_publishing_components/components/_skip_link.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_subscription_links.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_textarea.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_title.html.erb +3 -3
- data/app/views/govuk_publishing_components/components/docs/accordion.yml +2 -97
- data/app/views/govuk_publishing_components/components/docs/contextual_sidebar.yml +0 -47
- data/app/views/govuk_publishing_components/components/docs/govspeak.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/inset_text.yml +6 -0
- data/app/views/govuk_publishing_components/components/docs/select.yml +12 -0
- data/app/views/govuk_publishing_components/components/docs/share_links.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/step_by_step_nav.yml +13 -13
- data/app/views/govuk_publishing_components/components/docs/tabs.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/textarea.yml +1 -1
- data/app/views/govuk_publishing_components/components/feedback/_problem_form.html.erb +26 -0
- data/app/views/govuk_publishing_components/components/feedback/_yes_no_banner.html.erb +14 -8
- data/app/views/govuk_publishing_components/components/layout_header/_navigation_items.html.erb +11 -11
- data/config/locales/ar.yml +2 -0
- data/config/locales/az.yml +2 -1
- data/config/locales/be.yml +2 -0
- data/config/locales/bg.yml +2 -0
- data/config/locales/bn.yml +2 -0
- data/config/locales/cs.yml +2 -0
- data/config/locales/cy.yml +2 -0
- data/config/locales/da.yml +2 -0
- data/config/locales/de.yml +2 -0
- data/config/locales/dr.yml +2 -0
- data/config/locales/el.yml +2 -0
- data/config/locales/en.yml +0 -4
- data/config/locales/es-419.yml +2 -0
- data/config/locales/es.yml +2 -0
- data/config/locales/et.yml +2 -0
- data/config/locales/fa.yml +2 -1
- data/config/locales/fi.yml +2 -0
- data/config/locales/fr.yml +2 -0
- data/config/locales/gd.yml +2 -0
- data/config/locales/gu.yml +2 -0
- data/config/locales/he.yml +2 -0
- data/config/locales/hi.yml +2 -0
- data/config/locales/hr.yml +2 -0
- data/config/locales/hu.yml +2 -0
- data/config/locales/hy.yml +2 -0
- data/config/locales/id.yml +2 -1
- data/config/locales/is.yml +2 -0
- data/config/locales/it.yml +2 -0
- data/config/locales/ja.yml +2 -1
- data/config/locales/ka.yml +2 -0
- data/config/locales/kk.yml +2 -0
- data/config/locales/ko.yml +2 -1
- data/config/locales/lt.yml +2 -0
- data/config/locales/lv.yml +2 -0
- data/config/locales/ms.yml +2 -1
- data/config/locales/mt.yml +2 -0
- data/config/locales/nl.yml +2 -0
- data/config/locales/no.yml +2 -0
- data/config/locales/pa-pk.yml +2 -0
- data/config/locales/pa.yml +2 -0
- data/config/locales/pl.yml +2 -0
- data/config/locales/ps.yml +2 -0
- data/config/locales/pt.yml +2 -0
- data/config/locales/ro.yml +2 -0
- data/config/locales/ru.yml +2 -0
- data/config/locales/si.yml +2 -0
- data/config/locales/sk.yml +2 -0
- data/config/locales/sl.yml +2 -0
- data/config/locales/so.yml +2 -0
- data/config/locales/sq.yml +2 -0
- data/config/locales/sr.yml +2 -1
- data/config/locales/sv.yml +2 -0
- data/config/locales/sw.yml +2 -0
- data/config/locales/ta.yml +2 -0
- data/config/locales/th.yml +2 -1
- data/config/locales/tk.yml +2 -0
- data/config/locales/tr.yml +2 -0
- data/config/locales/uk.yml +2 -0
- data/config/locales/ur.yml +2 -0
- data/config/locales/uz.yml +2 -0
- data/config/locales/vi.yml +2 -1
- data/config/locales/zh-hk.yml +2 -1
- data/config/locales/zh-tw.yml +2 -1
- data/config/locales/zh.yml +2 -1
- data/lib/govuk_publishing_components/presenters/big_number_helper.rb +30 -0
- data/lib/govuk_publishing_components/presenters/contextual_navigation.rb +0 -38
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/lib/govuk_publishing_components.rb +1 -0
- data/node_modules/govuk-frontend/govuk/all.js +294 -76
- data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +274 -99
- data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +169 -65
- data/node_modules/govuk-frontend/govuk/components/accordion/fixtures.json +37 -5
- data/node_modules/govuk-frontend/govuk/components/accordion/macro-options.json +4 -4
- data/node_modules/govuk-frontend/govuk/components/button/button.js +2 -2
- data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js +3 -3
- data/node_modules/govuk-frontend/govuk/components/character-count/fixtures.json +15 -2
- data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +8 -10
- data/node_modules/govuk-frontend/govuk/components/checkboxes/fixtures.json +52 -15
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/_index.scss +0 -2
- data/node_modules/govuk-frontend/govuk/components/cookie-banner/fixtures.json +31 -0
- data/node_modules/govuk-frontend/govuk/components/date-input/fixtures.json +25 -25
- data/node_modules/govuk-frontend/govuk/components/details/details.js +2 -2
- data/node_modules/govuk-frontend/govuk/components/error-message/_index.scss +1 -0
- data/node_modules/govuk-frontend/govuk/components/error-message/fixtures.json +8 -8
- data/node_modules/govuk-frontend/govuk/components/error-message/template.njk +2 -2
- data/node_modules/govuk-frontend/govuk/components/error-summary/error-summary.js +24 -3
- data/node_modules/govuk-frontend/govuk/components/error-summary/fixtures.json +25 -16
- data/node_modules/govuk-frontend/govuk/components/error-summary/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/error-summary/template.njk +2 -1
- data/node_modules/govuk-frontend/govuk/components/file-upload/fixtures.json +4 -4
- data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +3 -37
- data/node_modules/govuk-frontend/govuk/components/footer/fixtures.json +119 -15
- data/node_modules/govuk-frontend/govuk/components/footer/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/footer/template.njk +1 -1
- data/node_modules/govuk-frontend/govuk/components/header/_index.scss +10 -4
- data/node_modules/govuk-frontend/govuk/components/header/fixtures.json +11 -11
- data/node_modules/govuk-frontend/govuk/components/header/header.js +4 -4
- data/node_modules/govuk-frontend/govuk/components/header/template.njk +4 -3
- data/node_modules/govuk-frontend/govuk/components/hint/_index.scss +1 -3
- data/node_modules/govuk-frontend/govuk/components/input/_index.scss +1 -1
- data/node_modules/govuk-frontend/govuk/components/input/fixtures.json +40 -40
- data/node_modules/govuk-frontend/govuk/components/input/template.njk +4 -3
- data/node_modules/govuk-frontend/govuk/components/notification-banner/notification-banner.js +499 -2
- data/node_modules/govuk-frontend/govuk/components/phase-banner/fixtures.json +2 -2
- data/node_modules/govuk-frontend/govuk/components/radios/_index.scss +0 -8
- data/node_modules/govuk-frontend/govuk/components/radios/fixtures.json +44 -45
- data/node_modules/govuk-frontend/govuk/components/radios/radios.js +4 -4
- data/node_modules/govuk-frontend/govuk/components/radios/template.njk +2 -9
- data/node_modules/govuk-frontend/govuk/components/select/_index.scss +6 -1
- data/node_modules/govuk-frontend/govuk/components/select/fixtures.json +3 -3
- data/node_modules/govuk-frontend/govuk/components/skip-link/_index.scss +13 -0
- data/node_modules/govuk-frontend/govuk/components/skip-link/fixtures.json +9 -9
- data/node_modules/govuk-frontend/govuk/components/skip-link/skip-link.js +1108 -0
- data/node_modules/govuk-frontend/govuk/components/skip-link/template.njk +1 -1
- data/node_modules/govuk-frontend/govuk/components/summary-list/_index.scss +20 -23
- data/node_modules/govuk-frontend/govuk/components/summary-list/fixtures.json +86 -1
- data/node_modules/govuk-frontend/govuk/components/summary-list/template.njk +1 -4
- data/node_modules/govuk-frontend/govuk/components/tabs/_index.scss +2 -2
- data/node_modules/govuk-frontend/govuk/components/tabs/tabs.js +2 -2
- data/node_modules/govuk-frontend/govuk/components/tag/_index.scss +0 -5
- data/node_modules/govuk-frontend/govuk/components/tag/fixtures.json +2 -2
- data/node_modules/govuk-frontend/govuk/components/textarea/_index.scss +1 -1
- data/node_modules/govuk-frontend/govuk/components/textarea/fixtures.json +4 -4
- data/node_modules/govuk-frontend/govuk/core/_all.scss +0 -1
- data/node_modules/govuk-frontend/govuk/core/_global-styles.scss +0 -6
- data/node_modules/govuk-frontend/govuk/core/_links.scss +0 -6
- data/node_modules/govuk-frontend/govuk/core/_lists.scss +0 -6
- data/node_modules/govuk-frontend/govuk/core/_section-break.scss +0 -6
- data/node_modules/govuk-frontend/govuk/core/_typography.scss +0 -6
- data/node_modules/govuk-frontend/govuk/objects/_all.scss +1 -0
- data/node_modules/govuk-frontend/govuk/objects/_main-wrapper.scss +15 -30
- data/node_modules/govuk-frontend/govuk/{core → objects}/_template.scss +1 -5
- data/node_modules/govuk-frontend/govuk/overrides/_display.scss +0 -6
- data/node_modules/govuk-frontend/govuk/overrides/_spacing.scss +0 -6
- data/node_modules/govuk-frontend/govuk/overrides/_text-align.scss +0 -6
- data/node_modules/govuk-frontend/govuk/overrides/_typography.scss +0 -6
- data/node_modules/govuk-frontend/govuk/overrides/_width.scss +0 -6
- data/node_modules/govuk-frontend/govuk/settings/_colours-organisations.scss +3 -0
- data/node_modules/govuk-frontend/govuk/settings/_measurements.scss +0 -10
- data/node_modules/govuk-frontend/govuk/tools/_all.scss +0 -1
- data/node_modules/govuk-frontend/package.json +1 -1
- metadata +11 -16
- data/app/views/govuk_publishing_components/components/contextual_sidebar/_covid_cta.html.erb +0 -27
- data/node_modules/govuk-frontend/govuk/tools/_iff.scss +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85985bab4532c5cbccfa05369e032e61cedfda7468ab5654d10ce0eb937155b8
|
4
|
+
data.tar.gz: fd00b4c1e0784b1951f0103412dc7dd2eaf619d2ad72456c77b892903fc1cd9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd73aa7768ba4224e03065bb8b04becf3e4c227c50422eb5255ab52fe82a075a8e5968d143ecb80bbc3f3481432783ab1ef7dad55515801f2905c2449676989d
|
7
|
+
data.tar.gz: 6b0541c15147aedcbbd890cb222d280ba02f492fb84d5a280580b5fa6d64a58f6e5a80ae2277bd9667e3e9c7a9c28b22ba2ef590400b5b047230cb3e0036f41b
|
data/README.md
CHANGED
@@ -199,7 +199,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
199
199
|
|
200
200
|
for (var i = 0; i < this.config.percentages.length; i++) {
|
201
201
|
var percent = this.config.percentages[i]
|
202
|
-
|
202
|
+
// subtract 1 pixel to solve a bug where 100% can't be reached in some cases
|
203
|
+
var pos = ((pageHeight / 100) * percent) - 1
|
203
204
|
var alreadySeen = false
|
204
205
|
if (trackedNodes.length) {
|
205
206
|
alreadySeen = trackedNodes[i].alreadySeen
|
@@ -1,30 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
window.GOVUK = window.GOVUK || {}
|
2
|
+
window.GOVUK.Modules = window.GOVUK.Modules || {};
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
(function (Modules) {
|
5
|
+
function AutoTrackEvent ($module) {
|
6
|
+
this.$module = $module
|
7
|
+
}
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
var value = element.data('track-value')
|
9
|
+
AutoTrackEvent.prototype.init = function () {
|
10
|
+
var options = { nonInteraction: 1 } // automatic events shouldn't affect bounce rate
|
11
|
+
var category = this.$module.getAttribute('data-track-category')
|
12
|
+
var action = this.$module.getAttribute('data-track-action')
|
13
|
+
var label = this.$module.getAttribute('data-track-label')
|
14
|
+
var value = parseInt(this.$module.getAttribute('data-track-value'))
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
if (typeof label === 'string') {
|
17
|
+
options.label = label
|
18
|
+
}
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if (value || value === 0) {
|
21
|
+
options.value = value
|
22
|
+
}
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
}
|
24
|
+
if (window.GOVUK.analytics && window.GOVUK.analytics.trackEvent) {
|
25
|
+
window.GOVUK.analytics.trackEvent(category, action, options)
|
26
26
|
}
|
27
27
|
}
|
28
28
|
|
29
|
-
|
30
|
-
})(window)
|
29
|
+
Modules.AutoTrackEvent = AutoTrackEvent
|
30
|
+
})(window.GOVUK.Modules)
|
@@ -1,5 +1,3 @@
|
|
1
|
-
/* global $ */
|
2
|
-
|
3
1
|
;(function (global) {
|
4
2
|
'use strict'
|
5
3
|
|
@@ -15,15 +13,21 @@
|
|
15
13
|
var STATE_PATTERN = /state=.[^&]+/g
|
16
14
|
|
17
15
|
function shouldStripDates () {
|
18
|
-
|
16
|
+
var metas = document.querySelectorAll('meta[name="govuk:static-analytics:strip-dates"]')
|
17
|
+
return metas.length > 0
|
19
18
|
}
|
20
19
|
|
21
20
|
function shouldStripPostcodes () {
|
22
|
-
|
21
|
+
var metas = document.querySelectorAll('meta[name="govuk:static-analytics:strip-postcodes"]')
|
22
|
+
return metas.length > 0
|
23
23
|
}
|
24
24
|
|
25
25
|
function queryStringParametersToStrip () {
|
26
|
-
var
|
26
|
+
var meta = document.querySelector('meta[name="govuk:static-analytics:strip-query-string-parameters"]')
|
27
|
+
var value = false
|
28
|
+
if (meta) {
|
29
|
+
value = meta.getAttribute('content')
|
30
|
+
}
|
27
31
|
var parameters = []
|
28
32
|
|
29
33
|
if (value) {
|
@@ -4,10 +4,11 @@ window.GOVUK = window.GOVUK || {}
|
|
4
4
|
window.GOVUK.Modules = window.GOVUK.Modules || {};
|
5
5
|
|
6
6
|
(function (Modules) {
|
7
|
-
function GemTrackClick () {
|
7
|
+
function GemTrackClick ($module) {
|
8
|
+
this.$module = $module
|
9
|
+
}
|
8
10
|
|
9
|
-
GemTrackClick.prototype.
|
10
|
-
this.$module = $module[0]
|
11
|
+
GemTrackClick.prototype.init = function () {
|
11
12
|
this.$module.handleClick = this.handleClick.bind(this)
|
12
13
|
var trackLinksOnly = this.$module.hasAttribute('data-track-links-only')
|
13
14
|
var limitToElementClass = this.$module.getAttribute('data-limit-to-element-class')
|
@@ -2,10 +2,11 @@ window.GOVUK = window.GOVUK || {}
|
|
2
2
|
window.GOVUK.Modules = window.GOVUK.Modules || {};
|
3
3
|
|
4
4
|
(function (Modules) {
|
5
|
-
function TrackSelectChange () {
|
5
|
+
function TrackSelectChange ($module) {
|
6
|
+
this.$module = $module
|
7
|
+
}
|
6
8
|
|
7
|
-
TrackSelectChange.prototype.
|
8
|
-
this.$module = $module[0]
|
9
|
+
TrackSelectChange.prototype.init = function ($module) {
|
9
10
|
this.$module.trackChange = this.trackChange.bind(this)
|
10
11
|
this.$module.fireTrackingChange = this.fireTrackingChange.bind(this)
|
11
12
|
this.$module.addEventListener('change', this.trackChange)
|
@@ -1,32 +1,18 @@
|
|
1
1
|
/* global nodeListForEach */
|
2
|
-
// = require ../vendor/polyfills/closest.js
|
3
|
-
// = require ../vendor/polyfills/indexOf.js
|
4
2
|
// = require ../vendor/polyfills/common.js
|
5
|
-
|
3
|
+
// This component relies on JavaScript from GOV.UK Frontend
|
4
|
+
// = require govuk/components/accordion/accordion.js
|
6
5
|
window.GOVUK = window.GOVUK || {}
|
7
|
-
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
6
|
+
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
7
|
+
window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
|
8
8
|
|
9
9
|
(function (Modules) {
|
10
10
|
function GemAccordion ($module) {
|
11
11
|
this.$module = $module
|
12
|
-
this.sectionClass = '
|
13
|
-
this.
|
14
|
-
this.
|
15
|
-
this.
|
16
|
-
this.controlsClass = 'gem-c-accordion__controls'
|
17
|
-
this.openAllClass = 'gem-c-accordion__open-all'
|
18
|
-
this.openAllTextClass = 'gem-c-accordion__open-all-text'
|
19
|
-
this.sectionHeaderClass = 'gem-c-accordion__section-header'
|
20
|
-
this.sectionHeadingClass = 'gem-c-accordion__section-heading'
|
21
|
-
this.sectionSummaryClass = 'gem-c-accordion__section-summary'
|
22
|
-
this.sectionButtonClass = 'gem-c-accordion__section-button'
|
23
|
-
this.sectionExpandedClass = 'gem-c-accordion__section--expanded'
|
24
|
-
this.sectionInnerContent = 'gem-c-accordion__section-content'
|
25
|
-
this.toggleLinkClass = 'js-toggle-link'
|
26
|
-
this.sectionShowHideIconClass = 'gem-c-accordion__toggle-link'
|
27
|
-
this.sectionShowHideTextClass = 'gem-c-accordion__toggle-text'
|
28
|
-
this.upChevonIconClass = 'gem-c-accordion-nav__chevron'
|
29
|
-
this.downChevonIconClass = 'gem-c-accordion-nav__chevron--down'
|
12
|
+
this.sectionClass = 'govuk-accordion__section'
|
13
|
+
this.sectionClassExpanded = 'govuk-accordion__section--expanded'
|
14
|
+
this.sectionHeaderClass = 'govuk-accordion__section-header'
|
15
|
+
this.sectionInnerContent = 'govuk-accordion__section-content'
|
30
16
|
|
31
17
|
// Translated component content and language attribute pulled from data attributes
|
32
18
|
this.$module.actions = {}
|
@@ -39,279 +25,14 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
39
25
|
}
|
40
26
|
|
41
27
|
GemAccordion.prototype.init = function () {
|
42
|
-
this.browserSupportsSessionStorage = helper.checkForSessionStorage()
|
43
|
-
|
44
28
|
// Indicate that JavaScript has worked
|
45
29
|
this.$module.classList.add('gem-c-accordion--active')
|
46
30
|
|
47
|
-
this.initControls()
|
48
|
-
this.initSectionHeaders()
|
49
|
-
|
50
31
|
// Feature flag for anchor tag navigation used on manuals
|
51
32
|
if (this.$module.getAttribute('data-anchor-navigation') === 'true') {
|
52
33
|
this.openByAnchorOnLoad()
|
53
34
|
this.addEventListenersForAnchors()
|
54
35
|
}
|
55
|
-
|
56
|
-
// See if "Show all sections" button text should be updated
|
57
|
-
var areAllSectionsOpen = this.checkIfAllSectionsOpen()
|
58
|
-
this.updateOpenAllButton(areAllSectionsOpen)
|
59
|
-
}
|
60
|
-
|
61
|
-
// Initialise controls and set attributes
|
62
|
-
GemAccordion.prototype.initControls = function () {
|
63
|
-
// Create "Show all" button and set attributes
|
64
|
-
this.openAllButton = document.createElement('button')
|
65
|
-
this.openAllButton.setAttribute('class', this.openAllClass)
|
66
|
-
this.openAllButton.setAttribute('aria-expanded', 'false')
|
67
|
-
|
68
|
-
// Create icon, add to element
|
69
|
-
var icon = document.createElement('span')
|
70
|
-
icon.classList.add(this.upChevonIconClass)
|
71
|
-
this.openAllButton.appendChild(icon)
|
72
|
-
|
73
|
-
// Create control wrapper and add controls to it
|
74
|
-
var accordionControls = document.createElement('div')
|
75
|
-
accordionControls.setAttribute('class', this.controlsClass)
|
76
|
-
accordionControls.appendChild(this.openAllButton)
|
77
|
-
this.$module.insertBefore(accordionControls, this.$module.firstChild)
|
78
|
-
|
79
|
-
// Build additional wrapper for open all toggle text, place icon after wrapped text.
|
80
|
-
var wrapperOpenAllText = document.createElement('span')
|
81
|
-
wrapperOpenAllText.classList.add(this.openAllTextClass)
|
82
|
-
this.openAllButton.insertBefore(wrapperOpenAllText, this.openAllButton.childNodes[0] || null)
|
83
|
-
|
84
|
-
// Handle events for the controls
|
85
|
-
this.openAllButton.addEventListener('click', this.onOpenOrCloseAllToggle.bind(this))
|
86
|
-
}
|
87
|
-
|
88
|
-
// Initialise section headers
|
89
|
-
GemAccordion.prototype.initSectionHeaders = function () {
|
90
|
-
// Loop through section headers
|
91
|
-
nodeListForEach(this.sections, function (section, i) {
|
92
|
-
// Set header attributes
|
93
|
-
var header = section.querySelector('.' + this.sectionHeaderClass)
|
94
|
-
|
95
|
-
this.initHeaderAttributes(header, i)
|
96
|
-
this.setExpanded(this.isExpanded(section), section)
|
97
|
-
|
98
|
-
// Handle events
|
99
|
-
header.addEventListener('click', this.onSectionToggle.bind(this, section))
|
100
|
-
|
101
|
-
// See if there is any state stored in sessionStorage and set the sections to
|
102
|
-
// open or closed.
|
103
|
-
this.setInitialState(section)
|
104
|
-
}.bind(this))
|
105
|
-
}
|
106
|
-
|
107
|
-
// Set individual header attributes
|
108
|
-
GemAccordion.prototype.initHeaderAttributes = function (headerWrapper, index) {
|
109
|
-
var span = headerWrapper.querySelector('.' + this.sectionButtonClass)
|
110
|
-
var heading = headerWrapper.querySelector('.' + this.sectionHeadingClass)
|
111
|
-
var summary = headerWrapper.querySelector('.' + this.sectionSummaryClass)
|
112
|
-
|
113
|
-
// Copy existing span element to an actual button element, for improved accessibility.
|
114
|
-
var button = document.createElement('button')
|
115
|
-
button.setAttribute('id', this.moduleId + '-heading-' + (index + 1))
|
116
|
-
button.setAttribute('aria-controls', this.moduleId + '-content-' + (index + 1))
|
117
|
-
|
118
|
-
// Create show / hide arrow icons with text.
|
119
|
-
var showIcons = document.createElement('span')
|
120
|
-
showIcons.classList.add(this.sectionShowHideIconClass, this.toggleLinkClass)
|
121
|
-
|
122
|
-
// Add pause after heading for assistive technology.
|
123
|
-
var srPause = document.createElement('span')
|
124
|
-
srPause.classList.add('govuk-visually-hidden')
|
125
|
-
srPause.innerHTML = ', '
|
126
|
-
|
127
|
-
// Build additional copy for assistive technology
|
128
|
-
var srAdditionalCopy = document.createElement('span')
|
129
|
-
srAdditionalCopy.classList.add('govuk-visually-hidden')
|
130
|
-
srAdditionalCopy.innerHTML = this.$module.actions.thisSectionVisuallyHidden
|
131
|
-
|
132
|
-
if (this.$module.actions.locale) {
|
133
|
-
srAdditionalCopy.lang = this.filterLocale('this_section_visually_hidden')
|
134
|
-
}
|
135
|
-
|
136
|
-
// Build additional wrapper for toggle text, place icon after wrapped text.
|
137
|
-
var wrapperShowHideIcon = document.createElement('span')
|
138
|
-
var icon = document.createElement('span')
|
139
|
-
icon.classList.add(this.upChevonIconClass)
|
140
|
-
showIcons.appendChild(icon)
|
141
|
-
wrapperShowHideIcon.classList.add(this.sectionShowHideTextClass)
|
142
|
-
showIcons.insertBefore(wrapperShowHideIcon, showIcons.childNodes[0] || null)
|
143
|
-
|
144
|
-
// Copy all attributes (https://developer.mozilla.org/en-US/docs/Web/API/Element/attributes) from span to button
|
145
|
-
for (var i = 0; i < span.attributes.length; i++) {
|
146
|
-
var attr = span.attributes.item(i)
|
147
|
-
button.setAttribute(attr.nodeName, attr.nodeValue)
|
148
|
-
}
|
149
|
-
|
150
|
-
// span could contain HTML elements (see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content)
|
151
|
-
button.innerHTML = span.innerHTML
|
152
|
-
heading.removeChild(span)
|
153
|
-
heading.appendChild(button)
|
154
|
-
button.appendChild(srPause)
|
155
|
-
|
156
|
-
// If summary content exists add to DOM in correct order
|
157
|
-
if (typeof (summary) !== 'undefined' && summary !== null) {
|
158
|
-
button.setAttribute('aria-describedby', this.moduleId + '-summary-' + (index + 1))
|
159
|
-
button.appendChild(summary)
|
160
|
-
}
|
161
|
-
|
162
|
-
button.appendChild(showIcons)
|
163
|
-
button.appendChild(srAdditionalCopy)
|
164
|
-
}
|
165
|
-
|
166
|
-
// When section toggled, set and store state
|
167
|
-
GemAccordion.prototype.onSectionToggle = function (section) {
|
168
|
-
var expanded = this.isExpanded(section)
|
169
|
-
this.setExpanded(!expanded, section)
|
170
|
-
|
171
|
-
// Store the state in sessionStorage when a change is triggered
|
172
|
-
this.storeState(section)
|
173
|
-
}
|
174
|
-
|
175
|
-
// When Open/Close All toggled, set and store state
|
176
|
-
GemAccordion.prototype.onOpenOrCloseAllToggle = function () {
|
177
|
-
var module = this
|
178
|
-
var sections = this.sections
|
179
|
-
var nowExpanded = !this.checkIfAllSectionsOpen()
|
180
|
-
|
181
|
-
nodeListForEach(sections, function (section) {
|
182
|
-
module.setExpanded(nowExpanded, section)
|
183
|
-
// Store the state in sessionStorage when a change is triggered
|
184
|
-
module.storeState(section)
|
185
|
-
})
|
186
|
-
|
187
|
-
module.updateOpenAllButton(nowExpanded)
|
188
|
-
}
|
189
|
-
|
190
|
-
// Set section attributes when opened/closed
|
191
|
-
GemAccordion.prototype.setExpanded = function (expanded, section) {
|
192
|
-
var icon = section.querySelector('.' + this.upChevonIconClass)
|
193
|
-
var showHideText = section.querySelector('.' + this.sectionShowHideTextClass)
|
194
|
-
var button = section.querySelector('.' + this.sectionButtonClass)
|
195
|
-
var newButtonText = expanded ? this.$module.actions.hideText : this.$module.actions.showText
|
196
|
-
|
197
|
-
showHideText.innerHTML = newButtonText
|
198
|
-
button.setAttribute('aria-expanded', expanded)
|
199
|
-
button.classList.add(this.toggleLinkClass)
|
200
|
-
|
201
|
-
if (this.$module.actions.locale) {
|
202
|
-
showHideText.lang = this.filterLocale(expanded ? 'hide_text' : 'show_text')
|
203
|
-
}
|
204
|
-
|
205
|
-
// Swap icon, change class
|
206
|
-
if (expanded) {
|
207
|
-
section.classList.add(this.sectionExpandedClass)
|
208
|
-
icon.classList.remove(this.downChevonIconClass)
|
209
|
-
} else {
|
210
|
-
section.classList.remove(this.sectionExpandedClass)
|
211
|
-
icon.classList.add(this.downChevonIconClass)
|
212
|
-
}
|
213
|
-
|
214
|
-
// See if "Show all sections" button text should be updated
|
215
|
-
var areAllSectionsOpen = this.checkIfAllSectionsOpen()
|
216
|
-
this.updateOpenAllButton(areAllSectionsOpen)
|
217
|
-
}
|
218
|
-
|
219
|
-
// Get state of section
|
220
|
-
GemAccordion.prototype.isExpanded = function (section) {
|
221
|
-
return section.classList.contains(this.sectionExpandedClass)
|
222
|
-
}
|
223
|
-
|
224
|
-
// Check if all sections are open
|
225
|
-
GemAccordion.prototype.checkIfAllSectionsOpen = function () {
|
226
|
-
// Get a count of all the Accordion sections
|
227
|
-
var sectionsCount = this.sections.length
|
228
|
-
// Get a count of all Accordion sections that are expanded
|
229
|
-
var expandedSectionCount = this.$module.querySelectorAll('.' + this.sectionExpandedClass).length
|
230
|
-
var areAllSectionsOpen = sectionsCount === expandedSectionCount
|
231
|
-
|
232
|
-
return areAllSectionsOpen
|
233
|
-
}
|
234
|
-
|
235
|
-
// Update "Show all sections" button
|
236
|
-
GemAccordion.prototype.updateOpenAllButton = function (expanded) {
|
237
|
-
var icon = this.openAllButton.querySelector('.' + this.upChevonIconClass)
|
238
|
-
var openAllCopy = this.openAllButton.querySelector('.' + this.openAllTextClass)
|
239
|
-
var newButtonText = expanded ? this.$module.actions.hideAllText : this.$module.actions.showAllText
|
240
|
-
|
241
|
-
this.openAllButton.setAttribute('aria-expanded', expanded)
|
242
|
-
openAllCopy.innerHTML = newButtonText
|
243
|
-
|
244
|
-
if (this.$module.actions.locale) {
|
245
|
-
openAllCopy.lang = this.filterLocale(expanded ? 'hide_all_text' : 'show_all_text')
|
246
|
-
}
|
247
|
-
|
248
|
-
// Swap icon, toggle class
|
249
|
-
if (expanded) {
|
250
|
-
icon.classList.remove(this.downChevonIconClass)
|
251
|
-
} else {
|
252
|
-
icon.classList.add(this.downChevonIconClass)
|
253
|
-
}
|
254
|
-
}
|
255
|
-
|
256
|
-
var helper = {
|
257
|
-
checkForSessionStorage: function () {
|
258
|
-
var testString = 'this is the test string'
|
259
|
-
var result
|
260
|
-
try {
|
261
|
-
window.sessionStorage.setItem(testString, testString)
|
262
|
-
result = window.sessionStorage.getItem(testString) === testString.toString()
|
263
|
-
window.sessionStorage.removeItem(testString)
|
264
|
-
return result
|
265
|
-
} catch (exception) {
|
266
|
-
if ((typeof console === 'undefined' || typeof console.log === 'undefined')) {
|
267
|
-
console.log('Notice: sessionStorage not available.')
|
268
|
-
}
|
269
|
-
}
|
270
|
-
}
|
271
|
-
}
|
272
|
-
|
273
|
-
// Set the state of the accordions in sessionStorage
|
274
|
-
GemAccordion.prototype.storeState = function (section) {
|
275
|
-
if (this.browserSupportsSessionStorage) {
|
276
|
-
// We need a unique way of identifying each content in the GemAccordion. Since
|
277
|
-
// an `#id` should be unique and an `id` is required for `aria-` attributes
|
278
|
-
// `id` can be safely used.
|
279
|
-
var button = section.querySelector('.' + this.sectionButtonClass)
|
280
|
-
|
281
|
-
if (button) {
|
282
|
-
var contentId = button.getAttribute('aria-controls')
|
283
|
-
var contentState = button.getAttribute('aria-expanded')
|
284
|
-
|
285
|
-
if (typeof contentId === 'undefined' && (typeof console === 'undefined' || typeof console.log === 'undefined')) {
|
286
|
-
console.error(new Error('No aria controls present in accordion section heading.'))
|
287
|
-
}
|
288
|
-
|
289
|
-
if (typeof contentState === 'undefined' && (typeof console === 'undefined' || typeof console.log === 'undefined')) {
|
290
|
-
console.error(new Error('No aria expanded present in accordion section heading.'))
|
291
|
-
}
|
292
|
-
|
293
|
-
// Only set the state when both `contentId` and `contentState` are taken from the DOM.
|
294
|
-
if (contentId && contentState) {
|
295
|
-
window.sessionStorage.setItem(contentId, contentState)
|
296
|
-
}
|
297
|
-
}
|
298
|
-
}
|
299
|
-
}
|
300
|
-
|
301
|
-
// Read the state of the accordions from sessionStorage
|
302
|
-
GemAccordion.prototype.setInitialState = function (section) {
|
303
|
-
if (this.browserSupportsSessionStorage) {
|
304
|
-
var button = section.querySelector('.' + this.sectionButtonClass)
|
305
|
-
|
306
|
-
if (button) {
|
307
|
-
var contentId = button.getAttribute('aria-controls')
|
308
|
-
var contentState = contentId ? window.sessionStorage.getItem(contentId) : null
|
309
|
-
|
310
|
-
if (contentState !== null) {
|
311
|
-
this.setExpanded(contentState === 'true', section)
|
312
|
-
}
|
313
|
-
}
|
314
|
-
}
|
315
36
|
}
|
316
37
|
|
317
38
|
// Navigate to and open accordions with anchored content on page load if a hash is present
|
@@ -327,6 +48,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
327
48
|
// Adding an event listener to all anchor link a tags in an accordion is risky but we circumvent this risk partially by only being a layer of accordion behaviour instead of any sort of change to link behaviour
|
328
49
|
GemAccordion.prototype.addEventListenersForAnchors = function () {
|
329
50
|
var links = this.$module.querySelectorAll('.' + this.sectionInnerContent + ' a[href*="#"]')
|
51
|
+
|
330
52
|
nodeListForEach(links, function (link) {
|
331
53
|
if (link.pathname === window.location.pathname) {
|
332
54
|
link.addEventListener('click', this.openForAnchor.bind(this, link.hash.split('#')[1]))
|
@@ -337,9 +59,18 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
337
59
|
// Find the parent accordion section for the given id and open it
|
338
60
|
GemAccordion.prototype.openForAnchor = function (hash) {
|
339
61
|
var target = document.getElementById(hash)
|
340
|
-
var section = this.getContainingSection(target)
|
341
|
-
|
342
|
-
this.
|
62
|
+
var $section = this.getContainingSection(target)
|
63
|
+
var $header = $section.querySelector('.' + this.sectionHeaderClass)
|
64
|
+
var $expanded = this.getContainingSection($section)
|
65
|
+
var $parent = $header.parentElement
|
66
|
+
|
67
|
+
// manuals-frontend features:
|
68
|
+
// Should the target anchor link be within the same page, open section - navigate normally
|
69
|
+
// Should the target anchor link be within a different, closed section, open this section
|
70
|
+
// Should the target anchor link be within a different page and different, closed section open this section
|
71
|
+
if ($expanded && (!$parent.classList.contains(this.sectionClassExpanded))) {
|
72
|
+
$header.click()
|
73
|
+
}
|
343
74
|
}
|
344
75
|
|
345
76
|
// Loop through the given id's ancestors until the parent section class is found
|
@@ -347,7 +78,6 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
347
78
|
while (!target.classList.contains(this.sectionClass)) {
|
348
79
|
target = target.parentElement
|
349
80
|
}
|
350
|
-
|
351
81
|
return target
|
352
82
|
}
|
353
83
|
|
@@ -2,4 +2,4 @@
|
|
2
2
|
// = require govuk/components/character-count/character-count.js
|
3
3
|
window.GOVUK = window.GOVUK || {}
|
4
4
|
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
5
|
-
window.GOVUK.Modules.GovukCharacterCount = window.GOVUKFrontend
|
5
|
+
window.GOVUK.Modules.GovukCharacterCount = window.GOVUKFrontend.CharacterCount
|
@@ -1,9 +1,8 @@
|
|
1
|
-
/* eslint-env jquery */
|
2
1
|
// = require govuk/vendor/polyfills/Element/prototype/closest.js
|
3
2
|
// = require govuk/components/checkboxes/checkboxes.js
|
4
3
|
window.GOVUK = window.GOVUK || {}
|
5
4
|
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
6
|
-
window.GOVUK.Modules.GovukCheckboxes = window.GOVUKFrontend;
|
5
|
+
window.GOVUK.Modules.GovukCheckboxes = window.GOVUKFrontend.Checkboxes;
|
7
6
|
|
8
7
|
(function (Modules) {
|
9
8
|
function GemCheckboxes ($module) {
|
@@ -1,8 +1,7 @@
|
|
1
|
-
/* eslint-env jquery */
|
2
1
|
// = require govuk/components/details/details.js
|
3
2
|
window.GOVUK = window.GOVUK || {}
|
4
3
|
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
5
|
-
window.GOVUK.Modules.GovukDetails = window.GOVUKFrontend;
|
4
|
+
window.GOVUK.Modules.GovukDetails = window.GOVUKFrontend.Details;
|
6
5
|
|
7
6
|
(function (Modules) {
|
8
7
|
function GemDetails ($module) {
|
@@ -15,8 +14,8 @@ window.GOVUK.Modules.GovukDetails = window.GOVUKFrontend;
|
|
15
14
|
|
16
15
|
GemDetails.prototype.init = function () {
|
17
16
|
if (this.customTrackLabel) { // If a custom label has been provided, we can simply call the tracking module
|
18
|
-
var trackDetails = new window.GOVUK.Modules.GemTrackClick()
|
19
|
-
trackDetails.
|
17
|
+
var trackDetails = new window.GOVUK.Modules.GemTrackClick(this.$summary)
|
18
|
+
trackDetails.init()
|
20
19
|
} else if (this.detailsClick) { // If no custom label is set, we use the open/close status as the label
|
21
20
|
this.detailsClick.addEventListener('click', function (event) {
|
22
21
|
this.trackDefault(this.$summary)
|
@@ -2,4 +2,4 @@
|
|
2
2
|
// = require govuk/components/error-summary/error-summary.js
|
3
3
|
window.GOVUK = window.GOVUK || {}
|
4
4
|
window.GOVUK.Modules = window.GOVUK.Modules || {}
|
5
|
-
window.GOVUK.Modules.GovukErrorSummary = window.GOVUKFrontend
|
5
|
+
window.GOVUK.Modules.GovukErrorSummary = window.GOVUKFrontend.ErrorSummary
|