govuk_frontend_toolkit 4.18.3 → 4.18.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/.gitignore +1 -0
- data/app/assets/CHANGELOG.md +5 -0
- data/app/assets/Gruntfile.js +21 -22
- data/app/assets/README.md +4 -0
- data/app/assets/VERSION.txt +1 -1
- data/app/assets/docs/javascript.md +29 -28
- data/app/assets/javascripts/govuk/analytics/analytics.js +37 -37
- data/app/assets/javascripts/govuk/analytics/download-link-tracker.js +21 -21
- data/app/assets/javascripts/govuk/analytics/error-tracking.js +19 -19
- data/app/assets/javascripts/govuk/analytics/external-link-tracker.js +23 -24
- data/app/assets/javascripts/govuk/analytics/google-analytics-universal-tracker.js +71 -70
- data/app/assets/javascripts/govuk/analytics/mailto-link-tracker.js +20 -21
- data/app/assets/javascripts/govuk/analytics/print-intent.js +19 -20
- data/app/assets/javascripts/govuk/modules.js +33 -32
- data/app/assets/javascripts/govuk/modules/auto-track-event.js +18 -18
- data/app/assets/javascripts/govuk/multivariate-test.js +83 -85
- data/app/assets/javascripts/govuk/primary-links.js +39 -38
- data/app/assets/javascripts/govuk/selection-buttons.js +57 -58
- data/app/assets/javascripts/govuk/shim-links-with-button-role.js +14 -15
- data/app/assets/javascripts/govuk/stick-at-top-when-scrolling.js +70 -70
- data/app/assets/javascripts/govuk/stop-scrolling-at-footer.js +74 -75
- data/app/assets/javascripts/govuk_toolkit.js +1 -1
- data/app/assets/javascripts/stageprompt.js +24 -25
- data/app/assets/javascripts/vendor/jquery/jquery.player.min.js +1 -1
- data/app/assets/package.json +10 -3
- data/app/assets/spec/manifest.js +2 -0
- data/app/assets/spec/support/console-runner.js +0 -1
- data/app/assets/spec/unit/analytics/analytics.spec.js +51 -47
- data/app/assets/spec/unit/analytics/download-link-tracker.spec.js +59 -51
- data/app/assets/spec/unit/analytics/error-tracking.spec.js +35 -30
- data/app/assets/spec/unit/analytics/external-link-tracker.spec.js +69 -61
- data/app/assets/spec/unit/analytics/google-analytics-universal-tracker.spec.js +129 -122
- data/app/assets/spec/unit/analytics/mailto-link-tracker.spec.js +55 -47
- data/app/assets/spec/unit/modules.spec.js +82 -78
- data/app/assets/spec/unit/modules/auto-track-event.spec.js +45 -40
- data/app/assets/spec/unit/multivariate-test.spec.js +150 -145
- data/app/assets/spec/unit/primary-links.spec.js +53 -47
- data/app/assets/spec/unit/selection-button.spec.js +701 -693
- data/app/assets/spec/unit/shim-links-with-button-role.spec.js +33 -28
- data/app/assets/spec/unit/show-hide-content.spec.js +5 -1
- data/app/assets/spec/unit/stick-at-top-when-scrolling.spec.js +104 -107
- metadata +2 -2
@@ -1,44 +1,43 @@
|
|
1
|
-
(function(global) {
|
2
|
-
|
1
|
+
;(function (global) {
|
2
|
+
'use strict'
|
3
3
|
|
4
|
-
var $ = global.jQuery
|
5
|
-
var GOVUK = global.GOVUK || {}
|
4
|
+
var $ = global.jQuery
|
5
|
+
var GOVUK = global.GOVUK || {}
|
6
6
|
|
7
|
-
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
7
|
+
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
8
8
|
GOVUK.analyticsPlugins.externalLinkTracker = function () {
|
9
|
+
var currentHost = GOVUK.analyticsPlugins.externalLinkTracker.getHostname()
|
10
|
+
var externalLinkSelector = 'a[href^="http"]:not(a[href*="' + currentHost + '"])'
|
9
11
|
|
10
|
-
|
11
|
-
externalLinkSelector = 'a[href^="http"]:not(a[href*="' + currentHost + '"])';
|
12
|
+
$('body').on('click', externalLinkSelector, trackClickEvent)
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
var
|
17
|
-
|
18
|
-
href = $link.attr('href'),
|
19
|
-
linkText = $.trim($link.text());
|
14
|
+
function trackClickEvent (evt) {
|
15
|
+
var $link = getLinkFromEvent(evt)
|
16
|
+
var options = {transport: 'beacon'}
|
17
|
+
var href = $link.attr('href')
|
18
|
+
var linkText = $.trim($link.text())
|
20
19
|
|
21
20
|
if (linkText) {
|
22
|
-
options.label = linkText
|
21
|
+
options.label = linkText
|
23
22
|
}
|
24
23
|
|
25
|
-
GOVUK.analytics.trackEvent('External Link Clicked', href, options)
|
24
|
+
GOVUK.analytics.trackEvent('External Link Clicked', href, options)
|
26
25
|
}
|
27
26
|
|
28
|
-
function getLinkFromEvent(evt) {
|
29
|
-
var $target = $(evt.target)
|
27
|
+
function getLinkFromEvent (evt) {
|
28
|
+
var $target = $(evt.target)
|
30
29
|
|
31
30
|
if (!$target.is('a')) {
|
32
|
-
$target = $target.parents('a')
|
31
|
+
$target = $target.parents('a')
|
33
32
|
}
|
34
33
|
|
35
|
-
return $target
|
34
|
+
return $target
|
36
35
|
}
|
37
36
|
}
|
38
37
|
|
39
|
-
GOVUK.analyticsPlugins.externalLinkTracker.getHostname = function() {
|
40
|
-
return global.location.hostname
|
38
|
+
GOVUK.analyticsPlugins.externalLinkTracker.getHostname = function () {
|
39
|
+
return global.location.hostname
|
41
40
|
}
|
42
41
|
|
43
|
-
global.GOVUK = GOVUK
|
44
|
-
})(window)
|
42
|
+
global.GOVUK = GOVUK
|
43
|
+
})(window)
|
@@ -1,107 +1,108 @@
|
|
1
|
-
(function(global) {
|
2
|
-
|
1
|
+
;(function (global) {
|
2
|
+
'use strict'
|
3
3
|
|
4
|
-
var GOVUK = global.GOVUK || {}
|
4
|
+
var GOVUK = global.GOVUK || {}
|
5
5
|
|
6
|
-
var GoogleAnalyticsUniversalTracker = function(trackingId, fieldsObject) {
|
7
|
-
|
8
|
-
function configureProfile() {
|
6
|
+
var GoogleAnalyticsUniversalTracker = function (trackingId, fieldsObject) {
|
7
|
+
function configureProfile () {
|
9
8
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference#create
|
10
|
-
sendToGa('create', trackingId, fieldsObject)
|
9
|
+
sendToGa('create', trackingId, fieldsObject)
|
11
10
|
}
|
12
11
|
|
13
|
-
function anonymizeIp() {
|
12
|
+
function anonymizeIp () {
|
14
13
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#anonymizeip
|
15
|
-
sendToGa('set', 'anonymizeIp', true)
|
14
|
+
sendToGa('set', 'anonymizeIp', true)
|
16
15
|
}
|
17
16
|
|
18
17
|
// Support legacy cookieDomain param
|
19
18
|
if (typeof fieldsObject === 'string') {
|
20
|
-
fieldsObject = { cookieDomain: fieldsObject }
|
19
|
+
fieldsObject = { cookieDomain: fieldsObject }
|
21
20
|
}
|
22
21
|
|
23
|
-
configureProfile()
|
24
|
-
anonymizeIp()
|
25
|
-
}
|
22
|
+
configureProfile()
|
23
|
+
anonymizeIp()
|
24
|
+
}
|
26
25
|
|
27
|
-
GoogleAnalyticsUniversalTracker.load = function() {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
GoogleAnalyticsUniversalTracker.load = function () {
|
27
|
+
/* eslint-disable */
|
28
|
+
(function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
|
29
|
+
(i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o),
|
30
|
+
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
|
31
|
+
})(global, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga')
|
32
|
+
/* eslint-enable */
|
33
|
+
}
|
33
34
|
|
34
35
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/pages
|
35
|
-
GoogleAnalyticsUniversalTracker.prototype.trackPageview = function(path, title, options) {
|
36
|
-
|
36
|
+
GoogleAnalyticsUniversalTracker.prototype.trackPageview = function (path, title, options) {
|
37
|
+
options = options || {}
|
37
38
|
|
38
|
-
if (typeof path ===
|
39
|
+
if (typeof path === 'string') {
|
39
40
|
var pageviewObject = {
|
40
|
-
|
41
|
-
|
41
|
+
page: path
|
42
|
+
}
|
42
43
|
|
43
|
-
if (typeof title ===
|
44
|
-
pageviewObject.title = title
|
44
|
+
if (typeof title === 'string') {
|
45
|
+
pageviewObject.title = title
|
45
46
|
}
|
46
47
|
|
47
48
|
// Set the transport method for the pageview
|
48
49
|
// Typically used for enabling `navigator.sendBeacon` when the page might be unloading
|
49
50
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#transport
|
50
51
|
if (options.transport) {
|
51
|
-
pageviewObject.transport = options.transport
|
52
|
+
pageviewObject.transport = options.transport
|
52
53
|
}
|
53
54
|
|
54
|
-
sendToGa('send', 'pageview', pageviewObject)
|
55
|
+
sendToGa('send', 'pageview', pageviewObject)
|
55
56
|
} else {
|
56
|
-
sendToGa('send', 'pageview')
|
57
|
+
sendToGa('send', 'pageview')
|
57
58
|
}
|
58
|
-
}
|
59
|
+
}
|
59
60
|
|
60
61
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/events
|
61
|
-
GoogleAnalyticsUniversalTracker.prototype.trackEvent = function(category, action, options) {
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
62
|
+
GoogleAnalyticsUniversalTracker.prototype.trackEvent = function (category, action, options) {
|
63
|
+
options = options || {}
|
64
|
+
var value
|
65
|
+
var evt = {
|
66
|
+
hitType: 'event',
|
67
|
+
eventCategory: category,
|
68
|
+
eventAction: action
|
69
|
+
}
|
69
70
|
|
70
71
|
// Label is optional
|
71
|
-
if (typeof options.label ===
|
72
|
-
evt.eventLabel = options.label
|
72
|
+
if (typeof options.label === 'string') {
|
73
|
+
evt.eventLabel = options.label
|
73
74
|
}
|
74
75
|
|
75
76
|
// Page is optional
|
76
|
-
if (typeof options.page ===
|
77
|
-
evt.page = options.page
|
77
|
+
if (typeof options.page === 'string') {
|
78
|
+
evt.page = options.page
|
78
79
|
}
|
79
80
|
|
80
81
|
// Value is optional, but when used must be an
|
81
82
|
// integer, otherwise the event will be invalid
|
82
83
|
// and not logged
|
83
84
|
if (options.value || options.value === 0) {
|
84
|
-
value = parseInt(options.value, 10)
|
85
|
-
if (typeof value ===
|
86
|
-
evt.eventValue = value
|
85
|
+
value = parseInt(options.value, 10)
|
86
|
+
if (typeof value === 'number' && !isNaN(value)) {
|
87
|
+
evt.eventValue = value
|
87
88
|
}
|
88
89
|
}
|
89
90
|
|
90
91
|
// Prevents an event from affecting bounce rate
|
91
92
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/events#implementation
|
92
93
|
if (options.nonInteraction) {
|
93
|
-
evt.nonInteraction = 1
|
94
|
+
evt.nonInteraction = 1
|
94
95
|
}
|
95
96
|
|
96
97
|
// Set the transport method for the event
|
97
98
|
// Typically used for enabling `navigator.sendBeacon` when the page might be unloading
|
98
99
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#transport
|
99
100
|
if (options.transport) {
|
100
|
-
evt.transport = options.transport
|
101
|
+
evt.transport = options.transport
|
101
102
|
}
|
102
103
|
|
103
|
-
sendToGa('send', evt)
|
104
|
-
}
|
104
|
+
sendToGa('send', evt)
|
105
|
+
}
|
105
106
|
|
106
107
|
/*
|
107
108
|
https://developers.google.com/analytics/devguides/collection/analyticsjs/social-interactions
|
@@ -110,14 +111,14 @@
|
|
110
111
|
target – Specifies the target of a social interaction.
|
111
112
|
This value is typically a URL but can be any text.
|
112
113
|
*/
|
113
|
-
GoogleAnalyticsUniversalTracker.prototype.trackSocial = function(network, action, target) {
|
114
|
+
GoogleAnalyticsUniversalTracker.prototype.trackSocial = function (network, action, target) {
|
114
115
|
sendToGa('send', {
|
115
116
|
'hitType': 'social',
|
116
117
|
'socialNetwork': network,
|
117
118
|
'socialAction': action,
|
118
119
|
'socialTarget': target
|
119
|
-
})
|
120
|
-
}
|
120
|
+
})
|
121
|
+
}
|
121
122
|
|
122
123
|
/*
|
123
124
|
https://developers.google.com/analytics/devguides/collection/analyticsjs/cross-domain
|
@@ -125,35 +126,35 @@
|
|
125
126
|
name - name for the tracker
|
126
127
|
domain - the domain to track
|
127
128
|
*/
|
128
|
-
GoogleAnalyticsUniversalTracker.prototype.addLinkedTrackerDomain = function(trackerId, name, domain) {
|
129
|
+
GoogleAnalyticsUniversalTracker.prototype.addLinkedTrackerDomain = function (trackerId, name, domain) {
|
129
130
|
sendToGa('create',
|
130
131
|
trackerId,
|
131
132
|
'auto',
|
132
|
-
{'name': name})
|
133
|
+
{'name': name})
|
133
134
|
// Load the plugin.
|
134
|
-
sendToGa('require', 'linker')
|
135
|
-
sendToGa(name + '.require', 'linker')
|
135
|
+
sendToGa('require', 'linker')
|
136
|
+
sendToGa(name + '.require', 'linker')
|
136
137
|
|
137
138
|
// Define which domains to autoLink.
|
138
|
-
sendToGa('linker:autoLink', [domain])
|
139
|
-
sendToGa(name + '.linker:autoLink', [domain])
|
139
|
+
sendToGa('linker:autoLink', [domain])
|
140
|
+
sendToGa(name + '.linker:autoLink', [domain])
|
140
141
|
|
141
|
-
sendToGa(name + '.set', 'anonymizeIp', true)
|
142
|
-
sendToGa(name + '.send', 'pageview')
|
143
|
-
}
|
142
|
+
sendToGa(name + '.set', 'anonymizeIp', true)
|
143
|
+
sendToGa(name + '.send', 'pageview')
|
144
|
+
}
|
144
145
|
|
145
146
|
// https://developers.google.com/analytics/devguides/collection/analyticsjs/custom-dims-mets
|
146
|
-
GoogleAnalyticsUniversalTracker.prototype.setDimension = function(index, value) {
|
147
|
-
sendToGa('set', 'dimension' + index, String(value))
|
148
|
-
}
|
147
|
+
GoogleAnalyticsUniversalTracker.prototype.setDimension = function (index, value) {
|
148
|
+
sendToGa('set', 'dimension' + index, String(value))
|
149
|
+
}
|
149
150
|
|
150
|
-
function sendToGa() {
|
151
|
-
if (typeof global.ga ===
|
152
|
-
ga.apply(global, arguments)
|
151
|
+
function sendToGa () {
|
152
|
+
if (typeof global.ga === 'function') {
|
153
|
+
global.ga.apply(global, arguments)
|
153
154
|
}
|
154
155
|
}
|
155
156
|
|
156
|
-
GOVUK.GoogleAnalyticsUniversalTracker = GoogleAnalyticsUniversalTracker
|
157
|
+
GOVUK.GoogleAnalyticsUniversalTracker = GoogleAnalyticsUniversalTracker
|
157
158
|
|
158
|
-
global.GOVUK = GOVUK
|
159
|
-
})(window)
|
159
|
+
global.GOVUK = GOVUK
|
160
|
+
})(window)
|
@@ -1,39 +1,38 @@
|
|
1
|
-
(function(global) {
|
2
|
-
|
1
|
+
;(function (global) {
|
2
|
+
'use strict'
|
3
3
|
|
4
|
-
var $ = global.jQuery
|
5
|
-
var GOVUK = global.GOVUK || {}
|
4
|
+
var $ = global.jQuery
|
5
|
+
var GOVUK = global.GOVUK || {}
|
6
6
|
|
7
|
-
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
7
|
+
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
8
8
|
GOVUK.analyticsPlugins.mailtoLinkTracker = function () {
|
9
|
+
var mailtoLinkSelector = 'a[href^="mailto:"]'
|
9
10
|
|
10
|
-
|
11
|
+
$('body').on('click', mailtoLinkSelector, trackClickEvent)
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
var
|
16
|
-
|
17
|
-
href = $link.attr('href'),
|
18
|
-
linkText = $.trim($link.text());
|
13
|
+
function trackClickEvent (evt) {
|
14
|
+
var $link = getLinkFromEvent(evt)
|
15
|
+
var options = { transport: 'beacon' }
|
16
|
+
var href = $link.attr('href')
|
17
|
+
var linkText = $.trim($link.text())
|
19
18
|
|
20
19
|
if (linkText) {
|
21
|
-
options.label = linkText
|
20
|
+
options.label = linkText
|
22
21
|
}
|
23
22
|
|
24
|
-
GOVUK.analytics.trackEvent('Mailto Link Clicked', href, options)
|
23
|
+
GOVUK.analytics.trackEvent('Mailto Link Clicked', href, options)
|
25
24
|
}
|
26
25
|
|
27
|
-
function getLinkFromEvent(evt) {
|
28
|
-
var $target = $(evt.target)
|
26
|
+
function getLinkFromEvent (evt) {
|
27
|
+
var $target = $(evt.target)
|
29
28
|
|
30
29
|
if (!$target.is('a')) {
|
31
|
-
$target = $target.parents('a')
|
30
|
+
$target = $target.parents('a')
|
32
31
|
}
|
33
32
|
|
34
|
-
return $target
|
33
|
+
return $target
|
35
34
|
}
|
36
35
|
}
|
37
36
|
|
38
|
-
global.GOVUK = GOVUK
|
39
|
-
})(window)
|
37
|
+
global.GOVUK = GOVUK
|
38
|
+
})(window)
|
@@ -1,40 +1,39 @@
|
|
1
1
|
// Extension to monitor attempts to print pages.
|
2
|
-
(function (global) {
|
3
|
-
|
2
|
+
;(function (global) {
|
3
|
+
'use strict'
|
4
4
|
|
5
|
-
var GOVUK = global.GOVUK || {}
|
5
|
+
var GOVUK = global.GOVUK || {}
|
6
6
|
|
7
|
-
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
7
|
+
GOVUK.analyticsPlugins = GOVUK.analyticsPlugins || {}
|
8
8
|
|
9
9
|
GOVUK.analyticsPlugins.printIntent = function () {
|
10
|
-
var printAttempt =
|
11
|
-
GOVUK.analytics.trackEvent('Print Intent', document.location.pathname)
|
12
|
-
GOVUK.analytics.trackPageview('/print' + document.location.pathname)
|
13
|
-
}
|
10
|
+
var printAttempt = function () {
|
11
|
+
GOVUK.analytics.trackEvent('Print Intent', document.location.pathname)
|
12
|
+
GOVUK.analytics.trackPageview('/print' + document.location.pathname)
|
13
|
+
}
|
14
14
|
|
15
15
|
// Most browsers
|
16
16
|
if (global.matchMedia) {
|
17
|
-
var mediaQueryList = global.matchMedia('print')
|
18
|
-
|
17
|
+
var mediaQueryList = global.matchMedia('print')
|
18
|
+
var mqlListenerCount = 0
|
19
19
|
mediaQueryList.addListener(function (mql) {
|
20
20
|
if (!mql.matches && mqlListenerCount === 0) {
|
21
|
-
printAttempt()
|
22
|
-
mqlListenerCount
|
21
|
+
printAttempt()
|
22
|
+
mqlListenerCount++
|
23
23
|
// If we try and print again within 3 seconds, don't log it
|
24
24
|
setTimeout(function () {
|
25
|
-
mqlListenerCount = 0
|
25
|
+
mqlListenerCount = 0
|
26
26
|
// printing will be tracked again now
|
27
|
-
}, 3000)
|
27
|
+
}, 3000)
|
28
28
|
}
|
29
|
-
})
|
29
|
+
})
|
30
30
|
}
|
31
31
|
|
32
32
|
// IE < 10
|
33
33
|
if (global.onafterprint) {
|
34
|
-
global.onafterprint = printAttempt
|
34
|
+
global.onafterprint = printAttempt
|
35
35
|
}
|
36
|
+
}
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
global.GOVUK = GOVUK;
|
40
|
-
})(window);
|
38
|
+
global.GOVUK = GOVUK
|
39
|
+
})(window)
|
@@ -1,60 +1,61 @@
|
|
1
|
-
(function(global) {
|
2
|
-
|
1
|
+
;(function (global) {
|
2
|
+
'use strict'
|
3
3
|
|
4
|
-
var $ = global.jQuery
|
5
|
-
var GOVUK = global.GOVUK || {}
|
6
|
-
GOVUK.Modules = GOVUK.Modules || {}
|
4
|
+
var $ = global.jQuery
|
5
|
+
var GOVUK = global.GOVUK || {}
|
6
|
+
GOVUK.Modules = GOVUK.Modules || {}
|
7
7
|
|
8
8
|
GOVUK.modules = {
|
9
|
-
find: function(container) {
|
10
|
-
|
11
|
-
moduleSelector = '[data-module]',
|
12
|
-
container = container || $('body');
|
9
|
+
find: function (container) {
|
10
|
+
container = container || $('body')
|
13
11
|
|
14
|
-
modules
|
12
|
+
var modules
|
13
|
+
var moduleSelector = '[data-module]'
|
14
|
+
|
15
|
+
modules = container.find(moduleSelector)
|
15
16
|
|
16
17
|
// Container could be a module too
|
17
18
|
if (container.is(moduleSelector)) {
|
18
|
-
modules = modules.add(container)
|
19
|
+
modules = modules.add(container)
|
19
20
|
}
|
20
21
|
|
21
|
-
return modules
|
22
|
+
return modules
|
22
23
|
},
|
23
24
|
|
24
|
-
start: function(container) {
|
25
|
-
var modules = this.find(container)
|
25
|
+
start: function (container) {
|
26
|
+
var modules = this.find(container)
|
26
27
|
|
27
28
|
for (var i = 0, l = modules.length; i < l; i++) {
|
28
|
-
var module
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if (typeof GOVUK.Modules[type] ===
|
34
|
-
module = new GOVUK.Modules[type]()
|
35
|
-
module.start(element)
|
36
|
-
element.data('module-started', true)
|
29
|
+
var module
|
30
|
+
var element = $(modules[i])
|
31
|
+
var type = camelCaseAndCapitalise(element.data('module'))
|
32
|
+
var started = element.data('module-started')
|
33
|
+
|
34
|
+
if (typeof GOVUK.Modules[type] === 'function' && !started) {
|
35
|
+
module = new GOVUK.Modules[type]()
|
36
|
+
module.start(element)
|
37
|
+
element.data('module-started', true)
|
37
38
|
}
|
38
39
|
}
|
39
40
|
|
40
41
|
// eg selectable-table to SelectableTable
|
41
|
-
function camelCaseAndCapitalise(string) {
|
42
|
-
return capitaliseFirstLetter(camelCase(string))
|
42
|
+
function camelCaseAndCapitalise (string) {
|
43
|
+
return capitaliseFirstLetter(camelCase(string))
|
43
44
|
}
|
44
45
|
|
45
46
|
// http://stackoverflow.com/questions/6660977/convert-hyphens-to-camel-case-camelcase
|
46
|
-
function camelCase(string) {
|
47
|
+
function camelCase (string) {
|
47
48
|
return string.replace(/-([a-z])/g, function (g) {
|
48
|
-
return g[1].toUpperCase()
|
49
|
-
})
|
49
|
+
return g[1].toUpperCase()
|
50
|
+
})
|
50
51
|
}
|
51
52
|
|
52
53
|
// http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript
|
53
|
-
function capitaliseFirstLetter(string) {
|
54
|
-
return string.charAt(0).toUpperCase() + string.slice(1)
|
54
|
+
function capitaliseFirstLetter (string) {
|
55
|
+
return string.charAt(0).toUpperCase() + string.slice(1)
|
55
56
|
}
|
56
57
|
}
|
57
58
|
}
|
58
59
|
|
59
|
-
global.GOVUK = GOVUK
|
60
|
-
})(window)
|
60
|
+
global.GOVUK = GOVUK
|
61
|
+
})(window)
|