govuk_publishing_components 27.16.0 → 27.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/images/govuk_publishing_components/image-card-srcset/cop26-170.jpg +0 -0
- data/app/assets/images/govuk_publishing_components/image-card-srcset/cop26-240.jpg +0 -0
- data/app/assets/images/govuk_publishing_components/image-card-srcset/cop26-320.jpg +0 -0
- data/app/assets/images/govuk_publishing_components/image-card-srcset/cop26-480.jpg +0 -0
- data/app/assets/images/govuk_publishing_components/image-card-srcset/cop26.jpg +0 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics/explicit-cross-domain-links.js +49 -48
- data/app/assets/javascripts/govuk_publishing_components/analytics/page-content.js +74 -65
- data/app/assets/javascripts/govuk_publishing_components/components/cookie-banner.js +0 -1
- data/app/assets/javascripts/govuk_publishing_components/components/single-page-notification-button.js +25 -11
- data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_big-number.scss +1 -6
- data/app/assets/stylesheets/govuk_publishing_components/components/_contextual-sidebar.scss +19 -14
- data/app/assets/stylesheets/govuk_publishing_components/components/_image-card.scss +17 -7
- data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +10 -109
- data/app/assets/stylesheets/govuk_publishing_components/components/_search.scss +24 -14
- data/app/assets/stylesheets/govuk_publishing_components/components/_signup-link.scss +34 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_single-page-notification-button.scss +8 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_tables.scss +8 -4
- data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_warning-callout.scss +7 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/mixins/_grid-helper.scss +141 -0
- data/app/views/govuk_publishing_components/components/_contextual_sidebar.html.erb +5 -1
- data/app/views/govuk_publishing_components/components/_cookie_banner.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_image_card.html.erb +1 -0
- data/app/views/govuk_publishing_components/components/_intervention.html.erb +10 -1
- data/app/views/govuk_publishing_components/components/_search.html.erb +1 -0
- data/app/views/govuk_publishing_components/components/_signup_link.html.erb +30 -0
- data/app/views/govuk_publishing_components/components/_single_page_notification_button.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/contextual_sidebar/_brexit_cta.html.erb +3 -3
- data/app/views/govuk_publishing_components/components/contextual_sidebar/_covid_cta.html.erb +27 -0
- data/app/views/govuk_publishing_components/components/docs/contextual_sidebar.yml +15 -87
- data/app/views/govuk_publishing_components/components/docs/image_card.yml +29 -0
- data/app/views/govuk_publishing_components/components/docs/intervention.yml +9 -0
- data/app/views/govuk_publishing_components/components/docs/search.yml +3 -0
- data/app/views/govuk_publishing_components/components/docs/signup_link.yml +39 -0
- data/app/views/govuk_publishing_components/components/layout_header/_header_logo.html.erb +1 -1
- data/config/i18n-tasks.yml +8 -0
- data/config/locales/ar.yml +134 -131
- data/config/locales/az.yml +131 -131
- data/config/locales/be.yml +136 -130
- data/config/locales/bg.yml +135 -131
- data/config/locales/bn.yml +132 -131
- data/config/locales/cs.yml +136 -131
- data/config/locales/cy.yml +129 -125
- data/config/locales/da.yml +132 -131
- data/config/locales/de.yml +135 -131
- data/config/locales/dr.yml +133 -131
- data/config/locales/el.yml +131 -131
- data/config/locales/en.yml +19 -14
- data/config/locales/es-419.yml +131 -131
- data/config/locales/es.yml +131 -131
- data/config/locales/et.yml +134 -131
- data/config/locales/fa.yml +130 -131
- data/config/locales/fi.yml +133 -131
- data/config/locales/fr.yml +130 -130
- data/config/locales/gd.yml +133 -131
- data/config/locales/gu.yml +131 -131
- data/config/locales/he.yml +131 -131
- data/config/locales/hi.yml +131 -131
- data/config/locales/hr.yml +133 -131
- data/config/locales/hu.yml +134 -131
- data/config/locales/hy.yml +135 -131
- data/config/locales/id.yml +132 -131
- data/config/locales/is.yml +131 -131
- data/config/locales/it.yml +131 -131
- data/config/locales/ja.yml +128 -131
- data/config/locales/ka.yml +134 -131
- data/config/locales/kk.yml +131 -131
- data/config/locales/ko.yml +13 -17
- data/config/locales/lt.yml +136 -131
- data/config/locales/lv.yml +135 -131
- data/config/locales/ms.yml +131 -131
- data/config/locales/mt.yml +133 -131
- data/config/locales/nl.yml +131 -131
- data/config/locales/no.yml +131 -131
- data/config/locales/pa-pk.yml +128 -132
- data/config/locales/pa.yml +131 -131
- data/config/locales/pl.yml +135 -131
- data/config/locales/ps.yml +128 -131
- data/config/locales/pt.yml +131 -131
- data/config/locales/ro.yml +132 -131
- data/config/locales/ru.yml +135 -131
- data/config/locales/si.yml +131 -131
- data/config/locales/sk.yml +136 -131
- data/config/locales/sl.yml +138 -131
- data/config/locales/so.yml +131 -131
- data/config/locales/sq.yml +131 -131
- data/config/locales/sr.yml +133 -131
- data/config/locales/sv.yml +131 -131
- data/config/locales/sw.yml +131 -131
- data/config/locales/ta.yml +132 -131
- data/config/locales/th.yml +130 -131
- data/config/locales/tk.yml +132 -131
- data/config/locales/tr.yml +132 -131
- data/config/locales/uk.yml +138 -131
- data/config/locales/ur.yml +128 -131
- data/config/locales/uz.yml +133 -131
- data/config/locales/vi.yml +131 -131
- data/config/locales/zh-hk.yml +130 -131
- data/config/locales/zh-tw.yml +130 -131
- data/config/locales/zh.yml +130 -131
- data/lib/govuk_publishing_components/presenters/contextual_navigation.rb +42 -170
- data/lib/govuk_publishing_components/presenters/image_card_helper.rb +11 -1
- data/lib/govuk_publishing_components/presenters/single_page_notification_button_helper.rb +3 -1
- data/lib/govuk_publishing_components/version.rb +1 -1
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abe5f80412062a42d0581b1137f85d3c6932cb23e20d840d08a345b642133e65
|
4
|
+
data.tar.gz: 6b46ff356ab253ec47fb4ed7d67f4cd8b40c0024bedf4511e03e4416b2ee519d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92c367ffdd7fc084e3b68fac798c1e1e51f3c37b361e6003c877b4c8839c40eaecb98ecbf20e5d65de3fe1aa8926167c557d6ef767516d3d9deacc64f32113c4
|
7
|
+
data.tar.gz: 971c347b11fdb3d12302e44deaa3bb77406b6b76d15c78e4af44c415b950aabfa688a1e9708de04eea09bf274b0484c30c27c2917392d862a1af10b013549380
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/app/assets/javascripts/govuk_publishing_components/analytics/explicit-cross-domain-links.js
CHANGED
@@ -6,33 +6,57 @@
|
|
6
6
|
|
7
7
|
GOVUK.Modules.ExplicitCrossDomainLinks = function () {
|
8
8
|
this.start = function ($module) {
|
9
|
-
|
9
|
+
this.element = $module[0]
|
10
|
+
this.attribute = 'href'
|
11
|
+
this.attributeValue = this.element.getAttribute(this.attribute)
|
12
|
+
this.eventType = 'click'
|
13
|
+
if (!this.attributeValue) {
|
14
|
+
this.attribute = 'action'
|
15
|
+
this.attributeValue = this.element.getAttribute(this.attribute)
|
16
|
+
this.eventType = 'submit'
|
17
|
+
}
|
10
18
|
|
11
|
-
|
19
|
+
this.handleEvent = this.handleEvent.bind(this)
|
20
|
+
this.handleCookiesAccepted = this.handleCookiesAccepted.bind(this)
|
21
|
+
// Listens for the 'submit' event if the element is a form, and the 'click' event if it is a link
|
22
|
+
this.element.addEventListener(this.eventType, this.handleEvent)
|
23
|
+
}
|
12
24
|
|
13
|
-
|
14
|
-
//
|
15
|
-
|
25
|
+
this.handleEvent = function (e) {
|
26
|
+
// prevent default: we want the link href and/or form action to be decorated before we navigate away
|
27
|
+
e.preventDefault()
|
28
|
+
var cookieBannerEngaged = GOVUK.cookie('cookies_preferences_set')
|
29
|
+
var cookieConsent = GOVUK.getConsentCookie()
|
16
30
|
|
17
31
|
if (cookieBannerEngaged !== 'true') {
|
18
|
-
|
19
|
-
this.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
window.addEventListener('cookie-reject', this.start)
|
25
|
-
return
|
32
|
+
// If not engaged, append only ?cookie_consent=not-engaged
|
33
|
+
this.decorate(this.element, 'cookie_consent=not-engaged', this.attribute)
|
34
|
+
} else if (cookieConsent && cookieConsent.usage === true) {
|
35
|
+
this.handleCookiesAccepted()
|
36
|
+
} else {
|
37
|
+
this.decorate(this.element, 'cookie_consent=reject', this.attribute)
|
26
38
|
}
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
39
|
+
|
40
|
+
// remove the event listener to avoid an infinite loop
|
41
|
+
this.element.removeEventListener(this.eventType, this.handleEvent)
|
42
|
+
|
43
|
+
// if the element is a form, submit it. If it is a link, click it
|
44
|
+
if (this.eventType === 'submit') {
|
45
|
+
this.element.submit()
|
46
|
+
} else {
|
47
|
+
this.element.click()
|
31
48
|
}
|
49
|
+
}
|
32
50
|
|
33
|
-
|
51
|
+
this.handleCookiesAccepted = function () {
|
52
|
+
// If the cookie banner was engaged and usage cookie accepted, append ?_ga=clientid if available and cookie_consent=accept
|
53
|
+
var element = this.element
|
54
|
+
var attribute = this.attribute
|
55
|
+
this.decorate(element, 'cookie_consent=accept', attribute)
|
34
56
|
|
35
|
-
if (!global.ga) {
|
57
|
+
if (!global.ga) {
|
58
|
+
return
|
59
|
+
}
|
36
60
|
|
37
61
|
global.ga(function () {
|
38
62
|
var trackers = global.ga.getAll()
|
@@ -40,44 +64,21 @@
|
|
40
64
|
if (!trackers.length) { return }
|
41
65
|
|
42
66
|
var linker = new global.gaplugins.Linker(trackers[0])
|
67
|
+
var attrValue = element.getAttribute(attribute)
|
43
68
|
|
44
|
-
|
45
|
-
if (attrAction) {
|
46
|
-
element.setAttribute('action', linker.decorate(attrAction))
|
47
|
-
}
|
48
|
-
|
49
|
-
var attrHref = element.getAttribute('href')
|
50
|
-
if (attrHref) {
|
51
|
-
element.href = linker.decorate(attrHref)
|
52
|
-
}
|
69
|
+
element.setAttribute(attribute, linker.decorate(attrValue))
|
53
70
|
})
|
54
71
|
}
|
55
72
|
|
56
|
-
this.decorate = function (element, param) {
|
57
|
-
var attribute = 'href'
|
73
|
+
this.decorate = function (element, param, attribute) {
|
58
74
|
var attributeValue = element.getAttribute(attribute)
|
59
|
-
var cookieConsentParameterPattern = /cookie_consent=[^&]*/
|
60
|
-
var paramIsCookieConsent = param.match(cookieConsentParameterPattern)
|
61
|
-
|
62
|
-
if (!attributeValue) {
|
63
|
-
attribute = 'action'
|
64
|
-
attributeValue = element.getAttribute(attribute)
|
65
|
-
}
|
66
75
|
|
67
76
|
if (!attributeValue) { return }
|
68
77
|
|
69
|
-
|
70
|
-
|
71
|
-
if (attributeHasCookieConsent && paramIsCookieConsent) {
|
72
|
-
// if the decorate function has received a cookie_consent parameter, but the target element already has a cookie_consent parameter, replace the existing parameter with the new value
|
73
|
-
attributeValue = attributeValue.replace(cookieConsentParameterPattern, param)
|
78
|
+
if (attributeValue.indexOf('?') !== -1) {
|
79
|
+
attributeValue += '&' + param
|
74
80
|
} else {
|
75
|
-
|
76
|
-
if (attributeValue.includes('?')) {
|
77
|
-
attributeValue += '&' + param
|
78
|
-
} else {
|
79
|
-
attributeValue += '?' + param
|
80
|
-
}
|
81
|
+
attributeValue += '?' + param
|
81
82
|
}
|
82
83
|
|
83
84
|
element.setAttribute(attribute, attributeValue)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* global GOVUK
|
1
|
+
/* global GOVUK */
|
2
2
|
|
3
3
|
(function () {
|
4
4
|
'use strict'
|
@@ -8,17 +8,17 @@
|
|
8
8
|
PageContent.getNumberOfSections = function () {
|
9
9
|
switch (true) {
|
10
10
|
case isNavigationGridPage():
|
11
|
-
return 1 +
|
11
|
+
return 1 + document.querySelectorAll('.parent-topic-contents').length
|
12
12
|
case isNavigationAccordionPage():
|
13
|
-
return
|
13
|
+
return document.querySelectorAll('[data-track-count="accordionSection"]').length
|
14
14
|
case isDocumentCollectionPage():
|
15
|
-
return
|
15
|
+
return document.querySelectorAll('.document-collection .group-title').length
|
16
16
|
case isMainstreamBrowsePage():
|
17
|
-
return
|
17
|
+
return countVisible(document.querySelectorAll('#subsection ul')) || document.querySelectorAll('#section ul').length
|
18
18
|
case isTopicPage():
|
19
|
-
return
|
19
|
+
return document.querySelectorAll('.topics-page nav.index-list').length
|
20
20
|
case isPolicyAreaPage():
|
21
|
-
return
|
21
|
+
return document.querySelectorAll('.topic section h1.label').length
|
22
22
|
case isFinderPage():
|
23
23
|
case isWhitehallFinderPage():
|
24
24
|
case isNavigationLeafPage():
|
@@ -28,8 +28,8 @@
|
|
28
28
|
return 1
|
29
29
|
default:
|
30
30
|
// It's a content page, not a "finding" page
|
31
|
-
var sidebarSections =
|
32
|
-
var sidebarTaxons =
|
31
|
+
var sidebarSections = document.querySelectorAll('[data-track-count="sidebarRelatedItemSection"]').length
|
32
|
+
var sidebarTaxons = document.querySelectorAll('[data-track-count="sidebarTaxonSection"]').length
|
33
33
|
|
34
34
|
return sidebarSections || sidebarTaxons
|
35
35
|
}
|
@@ -38,92 +38,101 @@
|
|
38
38
|
PageContent.getNumberOfLinks = function () {
|
39
39
|
switch (true) {
|
40
40
|
case isNavigationGridPage():
|
41
|
-
return
|
42
|
-
|
41
|
+
return document.querySelectorAll('a[data-track-category="navGridLinkClicked"]').length +
|
42
|
+
document.querySelectorAll('a[data-track-category="navGridLeafLinkClicked"]').length
|
43
43
|
case isNavigationAccordionPage():
|
44
|
-
return
|
45
|
-
case isNavigationLeafPage():
|
46
|
-
return $('a[data-track-category="navLeafLinkClicked"]').length
|
44
|
+
return document.querySelectorAll('a[data-track-category="navAccordionLinkClicked"]').length
|
47
45
|
case isDocumentCollectionPage():
|
48
|
-
return
|
46
|
+
return document.querySelectorAll('.document-collection .group-document-list li a').length
|
49
47
|
case isMainstreamBrowsePage():
|
50
|
-
return
|
51
|
-
$('#section ul a').length
|
48
|
+
return countVisible(document.querySelectorAll('#subsection ul a')) || document.querySelectorAll('#section ul a').length
|
52
49
|
case isTopicPage():
|
53
|
-
return
|
54
|
-
|
50
|
+
return document.querySelectorAll('.topics-page .index-list ul a').length ||
|
51
|
+
document.querySelectorAll('.topics-page .topics ul a').length
|
55
52
|
case isPolicyAreaPage():
|
56
|
-
return
|
57
|
-
|
58
|
-
case isWhitehallFinderPage():
|
59
|
-
return $('.document-list .document-row h3 a').length
|
53
|
+
return document.querySelectorAll('section.document-block a').length +
|
54
|
+
document.querySelectorAll('section .collection-list h2 a').length
|
60
55
|
case isFinderPage():
|
61
|
-
return
|
56
|
+
return document.querySelectorAll('.finder-frontend-content li.document a').length
|
57
|
+
case isWhitehallFinderPage():
|
58
|
+
return document.querySelectorAll('.document-list .document-row h3 a').length
|
59
|
+
case isNavigationLeafPage():
|
60
|
+
return document.querySelectorAll('a[data-track-category="navLeafLinkClicked"]').length
|
62
61
|
default:
|
63
62
|
// It's a content page, not a "finding" page, count related links
|
64
|
-
return
|
63
|
+
return document.querySelectorAll('a[data-track-category="relatedLinkClicked"]').length
|
65
64
|
}
|
66
65
|
}
|
67
66
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
function getFormat () {
|
73
|
-
return $('meta[name="govuk:format"]').attr('content')
|
74
|
-
};
|
67
|
+
var metaApplicationSelector = 'meta[name="govuk:rendering-application"]'
|
68
|
+
var metaFormatSelector = 'meta[name="govuk:format"]'
|
69
|
+
var metaNavigationTypeSelector = 'meta[name="govuk:navigation-page-type"]'
|
75
70
|
|
76
|
-
function
|
77
|
-
|
78
|
-
|
71
|
+
function getMetaAttribute (selector) {
|
72
|
+
var element = document.querySelector(selector)
|
73
|
+
if (element) {
|
74
|
+
return element.getAttribute('content')
|
75
|
+
}
|
76
|
+
}
|
79
77
|
|
80
78
|
function isNavigationGridPage () {
|
81
|
-
return
|
82
|
-
|
83
|
-
|
84
|
-
}
|
79
|
+
return getMetaAttribute(metaApplicationSelector) === 'collections' &&
|
80
|
+
getMetaAttribute(metaFormatSelector) === 'taxon' &&
|
81
|
+
getMetaAttribute(metaNavigationTypeSelector) === 'grid'
|
82
|
+
}
|
85
83
|
|
86
84
|
function isNavigationAccordionPage () {
|
87
|
-
return
|
88
|
-
|
89
|
-
|
90
|
-
}
|
85
|
+
return getMetaAttribute(metaApplicationSelector) === 'collections' &&
|
86
|
+
getMetaAttribute(metaFormatSelector) === 'taxon' &&
|
87
|
+
getMetaAttribute(metaNavigationTypeSelector) === 'accordion'
|
88
|
+
}
|
91
89
|
|
92
90
|
function isNavigationLeafPage () {
|
93
|
-
return
|
94
|
-
|
95
|
-
|
96
|
-
}
|
91
|
+
return getMetaAttribute(metaApplicationSelector) === 'collections' &&
|
92
|
+
getMetaAttribute(metaFormatSelector) === 'taxon' &&
|
93
|
+
getMetaAttribute(metaNavigationTypeSelector) === 'leaf'
|
94
|
+
}
|
97
95
|
|
98
96
|
function isMainstreamBrowsePage () {
|
99
|
-
return
|
100
|
-
|
101
|
-
}
|
97
|
+
return getMetaAttribute(metaApplicationSelector) === 'collections' &&
|
98
|
+
getMetaAttribute(metaFormatSelector) === 'mainstream_browse_page'
|
99
|
+
}
|
102
100
|
|
103
101
|
function isTopicPage () {
|
104
|
-
return
|
105
|
-
|
106
|
-
}
|
102
|
+
return getMetaAttribute(metaApplicationSelector) === 'collections' &&
|
103
|
+
getMetaAttribute(metaFormatSelector) === 'topic'
|
104
|
+
}
|
107
105
|
|
108
106
|
function isPolicyAreaPage () {
|
109
|
-
return
|
110
|
-
|
111
|
-
}
|
107
|
+
return getMetaAttribute(metaApplicationSelector) === 'whitehall' &&
|
108
|
+
getMetaAttribute(metaFormatSelector) === 'placeholder_policy_area'
|
109
|
+
}
|
112
110
|
|
113
111
|
function isDocumentCollectionPage () {
|
114
|
-
return
|
115
|
-
|
116
|
-
}
|
112
|
+
return getMetaAttribute(metaApplicationSelector) === 'government-frontend' &&
|
113
|
+
getMetaAttribute(metaFormatSelector) === 'document_collection'
|
114
|
+
}
|
117
115
|
|
118
116
|
function isFinderPage () {
|
119
|
-
return
|
120
|
-
|
121
|
-
}
|
117
|
+
return getMetaAttribute(metaApplicationSelector) === 'finder-frontend' &&
|
118
|
+
getMetaAttribute(metaFormatSelector) === 'finder'
|
119
|
+
}
|
122
120
|
|
123
121
|
function isWhitehallFinderPage () {
|
124
|
-
return
|
125
|
-
|
126
|
-
}
|
122
|
+
return getMetaAttribute(metaApplicationSelector) === 'whitehall' &&
|
123
|
+
getMetaAttribute(metaFormatSelector) === 'finder'
|
124
|
+
}
|
125
|
+
|
126
|
+
function countVisible (elements) {
|
127
|
+
var count = 0
|
128
|
+
for (var i = 0; i < elements.length; i++) {
|
129
|
+
var style = window.getComputedStyle(elements[i])
|
130
|
+
if (!(style.display === 'none' || style.visibility === 'hidden')) {
|
131
|
+
count++
|
132
|
+
}
|
133
|
+
}
|
134
|
+
return count
|
135
|
+
}
|
127
136
|
|
128
137
|
GOVUK.PageContent = PageContent
|
129
138
|
})()
|
@@ -97,7 +97,6 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
97
97
|
this.$module.cookieBannerConfirmationMessage.focus()
|
98
98
|
window.GOVUK.cookie('cookies_preferences_set', 'true', { days: 365 })
|
99
99
|
window.GOVUK.setDefaultConsentCookie()
|
100
|
-
window.GOVUK.triggerEvent(window, 'cookie-reject')
|
101
100
|
}
|
102
101
|
|
103
102
|
CookieBanner.prototype.showConfirmationMessage = function () {
|
@@ -7,6 +7,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
7
7
|
this.$module = $module
|
8
8
|
this.basePath = this.$module.querySelector('input[name="base_path"]').value
|
9
9
|
this.buttonLocation = this.$module.getAttribute('data-button-location')
|
10
|
+
this.buttonVisibleClass = 'gem-c-single-page-notification-button--visible'
|
10
11
|
|
11
12
|
this.personalisationEndpoint = '/api/personalisation/check-email-subscription?base_path=' + this.basePath
|
12
13
|
// This attribute is passed through to the personalisation API to ensure the updated button has the same button_location for analytics
|
@@ -16,21 +17,30 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
16
17
|
SinglePageNotificationButton.prototype.init = function () {
|
17
18
|
var xhr = new XMLHttpRequest()
|
18
19
|
xhr.open('GET', this.personalisationEndpoint, true)
|
20
|
+
// if XHR to the personalisation endpoint is taking an incredibly long time to complete, we are better off leaving the button in its default unpersonalised state. Content changing before the user's eyes while they are browsing can be jarring and should be avoided.
|
21
|
+
xhr.timeout = 10000
|
22
|
+
|
23
|
+
xhr.ontimeout = function () {
|
24
|
+
this.makeVisible(this.$module)
|
25
|
+
}.bind(this)
|
19
26
|
|
20
27
|
xhr.onreadystatechange = function () {
|
21
|
-
if (xhr.readyState === 4
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
if (xhr.readyState === 4) {
|
29
|
+
if (xhr.status === 200) {
|
30
|
+
var responseText = xhr.responseText
|
31
|
+
// if response text exists and is JSON parse-able, parse the response and get the button html
|
32
|
+
if (responseText && this.responseIsJSON(responseText)) {
|
33
|
+
var newButton = JSON.parse(responseText).button_html
|
34
|
+
var html = document.createElement('div')
|
35
|
+
html.innerHTML = newButton
|
36
|
+
// test that the html returned contains the button component; if yes, swap the button for the updated version
|
37
|
+
var responseButtonContainer = html.querySelector('form.gem-c-single-page-notification-button')
|
38
|
+
if (responseButtonContainer) {
|
39
|
+
this.$module.parentNode.replaceChild(responseButtonContainer, this.$module)
|
40
|
+
}
|
32
41
|
}
|
33
42
|
}
|
43
|
+
this.makeVisible(this.$module)
|
34
44
|
}
|
35
45
|
}.bind(this)
|
36
46
|
xhr.send()
|
@@ -44,5 +54,9 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
|
|
44
54
|
}
|
45
55
|
return true
|
46
56
|
}
|
57
|
+
|
58
|
+
SinglePageNotificationButton.prototype.makeVisible = function (target) {
|
59
|
+
target.classList.add(this.buttonVisibleClass)
|
60
|
+
}
|
47
61
|
Modules.SinglePageNotificationButton = SinglePageNotificationButton
|
48
62
|
})(window.GOVUK.Modules)
|
@@ -68,6 +68,7 @@ $govuk-new-link-styles: true;
|
|
68
68
|
@import "components/select";
|
69
69
|
@import "components/share-links";
|
70
70
|
@import "components/show-password";
|
71
|
+
@import "components/signup-link";
|
71
72
|
@import "components/single-page-notification-button";
|
72
73
|
@import "components/skip-link";
|
73
74
|
@import "components/step-by-step-nav-header";
|
@@ -15,12 +15,7 @@
|
|
15
15
|
}
|
16
16
|
|
17
17
|
.gem-c-big-number__label {
|
18
|
-
font
|
19
|
-
@include govuk-typography-weight-bold;
|
20
|
-
|
21
|
-
@if $govuk-typography-use-rem {
|
22
|
-
font-size: govuk-px-to-rem(16px);
|
23
|
-
}
|
18
|
+
@include govuk-font($size: 19, $weight: bold);
|
24
19
|
|
25
20
|
// This pseudo element is to bypass an issue with NVDA where block level elements are dictated separately.
|
26
21
|
// What's happening here is that the label and the number technically have an inline relationship but appear to have a block relationship thanks to this element
|
@@ -1,31 +1,36 @@
|
|
1
1
|
$transition-campaign-red: #ff003b;
|
2
|
+
$covid-colour: $govuk-link-colour;
|
2
3
|
|
3
|
-
.gem-c-contextual-
|
4
|
+
.gem-c-contextual-sidebar__related-links {
|
4
5
|
border-top: 2px solid $govuk-brand-colour;
|
5
6
|
}
|
6
7
|
|
7
|
-
.gem-c-contextual-
|
8
|
+
.gem-c-contextual-sidebar__heading {
|
8
9
|
margin-top: govuk-spacing(3);
|
9
10
|
margin-bottom: govuk-spacing(2);
|
11
|
+
color: $govuk-text-colour;
|
10
12
|
}
|
11
13
|
|
12
|
-
.gem-c-contextual-
|
14
|
+
.gem-c-contextual-sidebar__text {
|
15
|
+
@include govuk-font(16);
|
16
|
+
margin-bottom: govuk-spacing(1);
|
17
|
+
@include govuk-media-query($from: tablet) {
|
18
|
+
margin-bottom: govuk-spacing(2);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
.gem-c-contextual-sidebar__cta {
|
13
23
|
margin-bottom: govuk-spacing(6);
|
14
24
|
background-color: govuk-colour('light-grey', $legacy: 'grey-4');
|
15
|
-
border-top: 2px solid $transition-campaign-red;
|
16
25
|
display: block;
|
17
26
|
padding: 0 govuk-spacing(3) govuk-spacing(3);
|
18
27
|
text-decoration: none;
|
28
|
+
}
|
19
29
|
|
20
|
-
|
21
|
-
|
22
|
-
|
30
|
+
.gem-c-contextual-sidebar__cta--brexit {
|
31
|
+
border-top: 2px solid $transition-campaign-red;
|
32
|
+
}
|
23
33
|
|
24
|
-
|
25
|
-
|
26
|
-
margin-bottom: govuk-spacing(1);
|
27
|
-
@include govuk-media-query($from: tablet) {
|
28
|
-
margin-bottom: govuk-spacing(2);
|
29
|
-
}
|
30
|
-
}
|
34
|
+
.gem-c-contextual-sidebar__cta--covid {
|
35
|
+
border-top: 2px solid $covid-colour;
|
31
36
|
}
|
@@ -45,17 +45,21 @@
|
|
45
45
|
}
|
46
46
|
|
47
47
|
.gem-c-image-card__image-wrapper {
|
48
|
-
@include govuk-grid-column($width: one-
|
48
|
+
@include govuk-grid-column($width: one-half, $at: mobile);
|
49
49
|
}
|
50
50
|
|
51
51
|
.gem-c-image-card__text-wrapper {
|
52
|
-
@include govuk-grid-column($width:
|
52
|
+
@include govuk-grid-column($width: one-half, $at: mobile);
|
53
53
|
}
|
54
54
|
}
|
55
55
|
|
56
56
|
.gem-c-image-card__image {
|
57
57
|
display: block;
|
58
58
|
max-width: 100%;
|
59
|
+
border-top: 1px solid $govuk-border-colour;
|
60
|
+
border-left: none;
|
61
|
+
border-right: none;
|
62
|
+
border-bottom: none;
|
59
63
|
}
|
60
64
|
|
61
65
|
.gem-c-image-card__title {
|
@@ -100,7 +104,13 @@
|
|
100
104
|
|
101
105
|
.gem-c-image-card__context,
|
102
106
|
.gem-c-image-card__metadata {
|
103
|
-
@include govuk-font(
|
107
|
+
@include govuk-font($size: false);
|
108
|
+
font-size: 16px;
|
109
|
+
|
110
|
+
@if $govuk-typography-use-rem {
|
111
|
+
font-size: govuk-px-to-rem(16px);
|
112
|
+
}
|
113
|
+
|
104
114
|
margin: 0 0 (govuk-spacing(3) / 2);
|
105
115
|
color: govuk-colour("dark-grey", $legacy: "grey-1");
|
106
116
|
|
@@ -110,13 +120,13 @@
|
|
110
120
|
}
|
111
121
|
|
112
122
|
.gem-c-image-card__description {
|
113
|
-
@include govuk-font($size:
|
123
|
+
@include govuk-font($size: 19);
|
114
124
|
padding-top: (govuk-spacing(3) / 2);
|
115
125
|
word-wrap: break-word;
|
116
126
|
}
|
117
127
|
|
118
128
|
.gem-c-image-card__list {
|
119
|
-
@include govuk-font($size:
|
129
|
+
@include govuk-font($size: 19);
|
120
130
|
position: relative;
|
121
131
|
z-index: 2;
|
122
132
|
padding: (govuk-spacing(3) / 2) 0 0 0;
|
@@ -160,7 +170,7 @@
|
|
160
170
|
|
161
171
|
.gem-c-image-card--large {
|
162
172
|
.gem-c-image-card__image-wrapper {
|
163
|
-
@include govuk-grid-column($width:
|
173
|
+
@include govuk-grid-column($width: one-half, $at: tablet);
|
164
174
|
|
165
175
|
margin-bottom: govuk-spacing(2);
|
166
176
|
float: none;
|
@@ -175,7 +185,7 @@
|
|
175
185
|
}
|
176
186
|
|
177
187
|
.gem-c-image-card__text-wrapper {
|
178
|
-
@include govuk-grid-column($width: one-
|
188
|
+
@include govuk-grid-column($width: one-half, $at: tablet);
|
179
189
|
|
180
190
|
padding: 0;
|
181
191
|
overflow: hidden;
|