govuk_publishing_components 29.15.1 → 30.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9201a328c875b8cb5c93315a6365ea7dbc632027d0b973f9b0e700c86e01f6a
4
- data.tar.gz: 78cd444356c208537d7108cda4c471774a09b140c9db3e7aec1b0899adebf968
3
+ metadata.gz: a9d5601a07939b79ec5f1d7f4251d9b7ad00628225282405c6e17bb95b3f7552
4
+ data.tar.gz: 866b2f17bc9cc6bab9e7a29bec0fbc9f5f72e96f99742556bed1d5ff8811e3b2
5
5
  SHA512:
6
- metadata.gz: cf29058c5c655fed33c3f10e34728752117387c0006893c70dccf563862a5cc98dae584218e974b40b63b71f64aef1ea8ffb9b9f0c98dde7bbc49fcea331da99
7
- data.tar.gz: 94bac53144fd6f7685976fbc884485d054ac991f07e1bee42c31707509cf6702063f3c1b9f67314e54dc48ea5f5d08ab00562a68e2af65b9b7dd0f98a7d5e1e5
6
+ metadata.gz: a4cac8f96d558bf72da3a0f016d40341ea211a9e3895401b7980a260c125f4ccd898b720968e7c207c227128400440237ad0f1d4f6739834aac1923200b4e4a0
7
+ data.tar.gz: e97320af9673d84fd8324c66d88dc6d64b0fb9708a41fe9e42573a33cfca2deea1b6e34400e546c762485141b38c6a088a15be4e5425283206bdfef37141178a
@@ -7,7 +7,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
7
7
 
8
8
  function GtmClickTracking (module) {
9
9
  this.module = module
10
- this.trackingTrigger = 'data-gtm-event-name' // elements with this attribute get tracked
10
+ this.trackingTrigger = 'data-ga4' // elements with this attribute get tracked
11
11
  }
12
12
 
13
13
  GtmClickTracking.prototype.init = function () {
@@ -18,12 +18,24 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
18
18
  if (window.dataLayer) {
19
19
  var target = this.findTrackingAttributes(event.target)
20
20
  if (target) {
21
- var data = {
22
- event: 'analytics',
23
- event_name: target.getAttribute('data-gtm-event-name'),
24
- // get entire URL apart from domain
25
- link_url: window.location.href.substring(window.location.origin.length),
26
- ui: JSON.parse(target.getAttribute('data-gtm-attributes')) || {}
21
+ var schema = new window.GOVUK.analyticsGA4.Schemas().eventSchema()
22
+
23
+ try {
24
+ var data = target.getAttribute(this.trackingTrigger)
25
+ data = JSON.parse(data)
26
+ } catch (e) {
27
+ // if there's a problem with the config, don't start the tracker
28
+ console.error('GA4 configuration error: ' + e.message, window.location)
29
+ return
30
+ }
31
+
32
+ schema.event = 'event_data'
33
+ // get attributes from the data attribute to send to GA
34
+ // only allow it if it already exists in the schema
35
+ for (var property in data) {
36
+ if (schema.event_data[property]) {
37
+ schema.event_data[property] = data[property]
38
+ }
27
39
  }
28
40
 
29
41
  // Ensure it only tracks aria-expanded in an accordion element, instead of in any child of the clicked element
@@ -39,15 +51,14 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
39
51
  var detailsElement = target.closest('details')
40
52
 
41
53
  if (ariaExpanded) {
42
- data.ui.text = data.ui.text || target.innerText
43
- data.ui.action = (ariaExpanded === 'false') ? 'opened' : 'closed'
54
+ schema.event_data.text = data.text || target.innerText
55
+ schema.event_data.action = (ariaExpanded === 'false') ? 'opened' : 'closed'
44
56
  } else if (detailsElement) {
45
- data.ui.text = data.ui.text || detailsElement.textContent
57
+ schema.event_data.text = data.text || detailsElement.textContent
46
58
  var openAttribute = detailsElement.getAttribute('open')
47
- data.ui.action = (openAttribute == null) ? 'opened' : 'closed'
59
+ schema.event_data.action = (openAttribute == null) ? 'opened' : 'closed'
48
60
  }
49
-
50
- window.dataLayer.push(data)
61
+ window.dataLayer.push(schema)
51
62
  }
52
63
  }
53
64
  }
@@ -9,29 +9,26 @@
9
9
  sendPageView: function () {
10
10
  if (window.dataLayer) {
11
11
  var data = {
12
- event: 'config_ready',
13
- page: {
12
+ event: 'page_view',
13
+ page_view: {
14
14
  location: this.getLocation(),
15
15
  referrer: this.getReferrer(),
16
16
  title: this.getTitle(),
17
- status_code: this.getStatusCode()
18
- },
19
- publishing: {
17
+ status_code: this.getStatusCode(),
18
+
20
19
  document_type: this.getMetaContent('format'),
21
20
  publishing_app: this.getMetaContent('publishing-app'),
22
21
  rendering_app: this.getMetaContent('rendering-app'),
23
22
  schema_name: this.getMetaContent('schema-name'),
24
- content_id: this.getMetaContent('content-id')
25
- },
26
- taxonomy: {
23
+ content_id: this.getMetaContent('content-id'),
24
+
27
25
  section: this.getMetaContent('section'),
28
26
  taxon_slug: this.getMetaContent('taxon-slug'),
29
27
  taxon_id: this.getMetaContent('taxon-id'),
30
28
  themes: this.getMetaContent('themes'),
31
29
  taxon_slugs: this.getMetaContent('taxon-slugs'),
32
- taxon_ids: this.getMetaContent('taxon-ids')
33
- },
34
- content: {
30
+ taxon_ids: this.getMetaContent('taxon-ids'),
31
+
35
32
  language: this.getLanguage(),
36
33
  history: this.getHistory(),
37
34
  withdrawn: this.getWithDrawn(),
@@ -65,9 +62,9 @@
65
62
  // https://github.com/alphagov/static/blob/main/app/views/root/_error_page.html.erb#L32
66
63
  getStatusCode: function () {
67
64
  if (window.httpStatusCode) {
68
- return window.httpStatusCode
65
+ return window.httpStatusCode.toString()
69
66
  } else {
70
- return 200
67
+ return '200'
71
68
  }
72
69
  },
73
70
 
@@ -0,0 +1,32 @@
1
+ ;(function (global) {
2
+ 'use strict'
3
+
4
+ var GOVUK = global.GOVUK || {}
5
+
6
+ var Schemas = function () {
7
+ this.null = 'n/a'
8
+ }
9
+
10
+ Schemas.prototype.eventSchema = function () {
11
+ return {
12
+ event: this.null,
13
+
14
+ event_data: {
15
+ event_name: this.null,
16
+ type: this.null,
17
+ url: this.null,
18
+ text: this.null,
19
+ index: this.null,
20
+ index_total: this.null,
21
+ section: this.null,
22
+ action: this.null,
23
+ external: this.null
24
+ }
25
+ }
26
+ }
27
+
28
+ GOVUK.analyticsGA4 = GOVUK.analyticsGA4 || {}
29
+ GOVUK.analyticsGA4.Schemas = Schemas
30
+
31
+ global.GOVUK = GOVUK
32
+ })(window)
@@ -1,4 +1,5 @@
1
1
  // The following modules are imported in a specific order
2
+ //= require ./analytics-ga4/gtm-schemas
2
3
  //= require ./analytics-ga4/pii-remover
3
4
  //= require ./analytics-ga4/gtm-page-views
4
5
  //= require ./analytics-ga4/gtm-click-tracking
@@ -25,12 +25,23 @@
25
25
  $caption-side: top; // Caption alignment. Top or bottom.
26
26
  $key-width: 160px; // Only used by IE. Other browsers get smallest width that fits content
27
27
 
28
+ // The following accessible colour palette has been developed to meet the colour contrast requirements for adjacent colours (as set out in WCAG 2.1)
29
+ // For charts, the palette should be used instead of the GOV.UK colour palette - https://design-system.service.gov.uk/styles/colour/
30
+ // https://gss.civilservice.gov.uk/policy-store/data-visualisation-colours-in-charts/#section-5
31
+
32
+ $gss-colour-dark-blue: #12436d;
33
+ $gss-colour-turquoise: #28a197;
34
+ $gss-colour-dark-pink: #801650;
35
+ $gss-colour-orange: #f46a25;
36
+ $gss-colour-dark-grey: #3d3d3d;
37
+ $gss-colour-plum: #a285d1;
38
+
28
39
  // CHART COLOUR SCHEME
29
40
 
30
41
  $chart-border: govuk-colour("white"); // Chart border colour
31
42
  $key-border: govuk-colour("white"); // Key border colour
32
- $bar-colours: govuk-colour("blue"), govuk-colour("turquoise"), govuk-colour("green"), govuk-colour("light-green"), govuk-colour("yellow"), govuk-colour("orange"), govuk-colour("red"), govuk-colour("bright-purple", $legacy: "bright-red");
33
- $bar-text-colours: govuk-colour("white"), govuk-colour("black"), govuk-colour("white"), govuk-colour("black"), govuk-colour("black"), govuk-colour("black"), govuk-colour("white"), govuk-colour("white");
43
+ $bar-colours: $gss-colour-dark-blue, $gss-colour-turquoise, $gss-colour-dark-pink, $gss-colour-orange, $gss-colour-dark-grey, $gss-colour-plum;
44
+ $bar-text-colours: govuk-colour("white"), govuk-colour("white"), govuk-colour("white"), govuk-colour("black"), govuk-colour("white"), govuk-colour("black");
34
45
  $bar-cell-colour: govuk-colour("black");
35
46
  $bar-outdented-colour: govuk-colour("black");
36
47
 
@@ -108,11 +108,3 @@
108
108
  @include govuk-link-style-inverse;
109
109
  }
110
110
  }
111
-
112
- // This helper class is for use by the primary links js module
113
- // We have this custom helper here with a single rule over using the design system helper class govuk-!-display-none
114
- // because jasmine tests don't like the "!" in the distributed helper class
115
-
116
- .primary-links--display-none {
117
- display: none;
118
- }
@@ -9,6 +9,7 @@ module GovukPublishingComponents
9
9
  @component_locations = {}
10
10
  @gem_style_references = []
11
11
  @jquery_references = []
12
+ @helper_references = {}
12
13
 
13
14
  if application_found
14
15
  templates = Dir["#{path}/app/views/**/*.erb"]
@@ -69,6 +70,7 @@ module GovukPublishingComponents
69
70
  gem_style_references: @gem_style_references.flatten.uniq.sort,
70
71
  jquery_references: @jquery_references.flatten.uniq.sort,
71
72
  component_locations: @component_locations,
73
+ helper_references: @helper_references,
72
74
  }
73
75
  end
74
76
 
@@ -95,6 +97,8 @@ module GovukPublishingComponents
95
97
  components_found << find_match(find, src, type)
96
98
  end
97
99
 
100
+ get_helper_references(file, src) if %w[ruby templates].include?(type)
101
+
98
102
  if type == "javascripts"
99
103
  jquery_references = find_code_references(file, src, /\$\(/)
100
104
  @jquery_references << jquery_references if jquery_references
@@ -109,6 +113,20 @@ module GovukPublishingComponents
109
113
  components_found.flatten.uniq.sort
110
114
  end
111
115
 
116
+ def get_helper_references(file, src)
117
+ helper_use = find_match(/GovukPublishingComponents::(?:AppHelpers|Presenters)::[a-zA-Z]+/, src, "helper")
118
+ if helper_use.any?
119
+ helper_use.each do |helper|
120
+ class_name = helper.gsub(/GovukPublishingComponents::(AppHelpers)?(Presenters)?::+/, "")
121
+ helper_sym = class_name.to_sym
122
+ @helper_references[helper_sym] = [] unless @helper_references[helper_sym]
123
+ @helper_references[helper_sym] << clean_file_path(file)
124
+ @helper_references[helper_sym].uniq!
125
+ @helper_references[helper_sym].sort!
126
+ end
127
+ end
128
+ end
129
+
112
130
  # looks for components in the given src of a file
113
131
  # returns an array of component names or an empty array
114
132
  def find_match(find, src, type)
@@ -22,6 +22,7 @@ module GovukPublishingComponents
22
22
  @gem_data = gem_data
23
23
  @applications_data = sort_results(results)
24
24
  @gem_data[:components_by_application] = get_components_by_application || []
25
+ @gem_data[:helpers_used_by_applications] = get_helpers_used_by_applications || []
25
26
  end
26
27
  end
27
28
 
@@ -107,6 +108,7 @@ module GovukPublishingComponents
107
108
  gem_style_references: result[:gem_style_references],
108
109
  jquery_references: result[:jquery_references],
109
110
  component_locations: result[:component_locations],
111
+ helper_references: result[:helper_references],
110
112
  }
111
113
  else
112
114
  data << {
@@ -269,7 +271,7 @@ module GovukPublishingComponents
269
271
  locations = locations.flatten
270
272
 
271
273
  results << {
272
- component: component_name,
274
+ name: component_name,
273
275
  count: locations.length,
274
276
  locations: locations,
275
277
  }
@@ -277,5 +279,35 @@ module GovukPublishingComponents
277
279
 
278
280
  results if found_something
279
281
  end
282
+
283
+ # returns data of components gem helpers used in applications
284
+ def get_helpers_used_by_applications
285
+ results = []
286
+
287
+ @applications_data.each do |application|
288
+ next unless application[:application_found] && !application[:helper_references].blank?
289
+
290
+ application[:helper_references].each do |key, value|
291
+ location = {
292
+ name: application[:name],
293
+ locations: value,
294
+ }
295
+
296
+ match = results.find { |x| x[:name] == key }
297
+ if match
298
+ match[:locations] << location
299
+ match[:count] = match[:count] + 1
300
+ else
301
+ results << {
302
+ name: key,
303
+ count: 1,
304
+ locations: [location],
305
+ }
306
+ end
307
+ end
308
+ end
309
+
310
+ results
311
+ end
280
312
  end
281
313
  end
@@ -56,56 +56,19 @@
56
56
  }
57
57
  %>
58
58
 
59
- <% if @other_applications %>
60
- <% components_by_application = capture do %>
61
- <% if @components[:components_by_application].any? %>
62
- <dl class="govuk-summary-list">
63
- <% @components[:components_by_application].each do |component| %>
64
- <div class="govuk-summary-list__row">
65
- <dt class="govuk-summary-list__key">
66
- <%= component[:component] %> (<%= pluralize(component[:count], 'use') %>)
67
- </dt>
68
- <dd class="govuk-summary-list__value">
69
- <% component[:locations].each do |application| %>
70
- <% github_link = 'https://github.com/alphagov/' + application[:name] + '/blob/main/' %>
71
- <details class="govuk-details govuk-!-margin-bottom-2" data-module="govuk-details">
72
- <summary class="govuk-details__summary">
73
- <span class="govuk-details__summary-text">
74
- <%= application[:name] %> (<%= application[:locations].length %>)
75
- </span>
76
- </summary>
77
- <div class="govuk-details__text">
78
- <ul class="govuk-list govuk-list--bullet">
79
- <% application[:locations].each do |location| %>
80
- <li>
81
- <a href="<%= github_link %><%= location %>" class="govuk-link"><%= location %></a>
82
- </li>
83
- <% end %>
84
- </ul>
85
- </div>
86
- </details>
87
- <% end %>
88
- </dd>
89
- </div>
90
- <% end %>
91
- </dl>
92
- <% end %>
93
- <% end %>
59
+ <%= render 'items_in_applications',
60
+ heading: 'Components by application',
61
+ summary: 'Shows which applications use each component',
62
+ content: @components[:components_by_application],
63
+ items: component_items
64
+ %>
94
65
 
95
- <%
96
- component_items << {
97
- heading: {
98
- text: "Components by application",
99
- },
100
- summary: {
101
- text: "Shows which applications use each component",
102
- },
103
- content: {
104
- html: components_by_application
105
- },
106
- }
107
- %>
108
- <% end %>
66
+ <%= render 'items_in_applications',
67
+ heading: 'Helpers by application',
68
+ summary: 'Shows any applications that use helper classes from the components gem',
69
+ content: @components[:helpers_used_by_applications],
70
+ items: component_items
71
+ %>
109
72
 
110
73
  <%= render "govuk_publishing_components/components/accordion", {
111
74
  items: component_items
@@ -0,0 +1,50 @@
1
+ <% if @other_applications %>
2
+ <% accordion_content = capture do %>
3
+ <% if content.any? %>
4
+ <dl class="govuk-summary-list">
5
+ <% content.each do |item| %>
6
+ <div class="govuk-summary-list__row">
7
+ <dt class="govuk-summary-list__key">
8
+ <%= item[:name] %> (<%= pluralize(item[:count], 'use') %>)
9
+ </dt>
10
+ <dd class="govuk-summary-list__value">
11
+ <% item[:locations].each do |application| %>
12
+ <% github_link = 'https://github.com/alphagov/' + application[:name] + '/blob/main/' %>
13
+ <details class="govuk-details govuk-!-margin-bottom-2" data-module="govuk-details">
14
+ <summary class="govuk-details__summary">
15
+ <span class="govuk-details__summary-text">
16
+ <%= application[:name] %> (<%= application[:locations].length %>)
17
+ </span>
18
+ </summary>
19
+ <div class="govuk-details__text">
20
+ <ul class="govuk-list govuk-list--bullet">
21
+ <% application[:locations].each do |location| %>
22
+ <li>
23
+ <a href="<%= github_link %><%= location %>" class="govuk-link"><%= location %></a>
24
+ </li>
25
+ <% end %>
26
+ </ul>
27
+ </div>
28
+ </details>
29
+ <% end %>
30
+ </dd>
31
+ </div>
32
+ <% end %>
33
+ </dl>
34
+ <% end %>
35
+ <% end %>
36
+
37
+ <%
38
+ items << {
39
+ heading: {
40
+ text: heading,
41
+ },
42
+ summary: {
43
+ text: summary,
44
+ },
45
+ content: {
46
+ html: accordion_content
47
+ },
48
+ }
49
+ %>
50
+ <% end %>
@@ -181,6 +181,11 @@ examples:
181
181
  </tbody>
182
182
  </table>
183
183
  charts:
184
+ description: |
185
+ The Government Statistical Service (GSS) guidance recommends [a limit of four categories as best practice for basic data visualisations](https://gss.civilservice.gov.uk/policy-store/data-visualisation-colours-in-charts/#section-5).
186
+
187
+ Note that charts which have up to 7 categories, [chart with colours](http://govuk-publishing-components.dev.gov.uk/component-guide/govspeak/chart_with_colours/preview), for example, will display subsequent bars in `#3d3d3d`, `#a285d1` and the 7th bar in the default colour of `#0b0c0c` and will still meet the colour contrast requirements for adjacent colours.
188
+ Charts that have 8 or more categories will display additional bars in the default colour and will not meet colour contrast requirements for adjacent colours.
184
189
  data:
185
190
  block: |
186
191
  <table class='js-barchart-table mc-auto-outdent'>
@@ -214,8 +219,6 @@ examples:
214
219
  <th scope="col">Grapes</th>
215
220
  <th scope="col">Strawberries</th>
216
221
  <th scope="col">Plums</th>
217
- <th scope="col">Apricots</th>
218
- <th scope="col">Pineapples</th>
219
222
  </tr>
220
223
  </thead>
221
224
  <tbody>
@@ -228,8 +231,6 @@ examples:
228
231
  <td>24</td>
229
232
  <td>10</td>
230
233
  <td>62</td>
231
- <td>29</td>
232
- <td>81</td>
233
234
  </tr>
234
235
  <tr>
235
236
  <td>Numbers outside bar</td>
@@ -238,10 +239,8 @@ examples:
238
239
  <td>2</td>
239
240
  <td>1</td>
240
241
  <td>1</td>
241
- <td>3</td>
242
- <td>3</td>
243
- <td>1</td>
244
242
  <td>2</td>
243
+ <td>1</td>
245
244
  </tr>
246
245
  </tbody>
247
246
  </table>
@@ -188,7 +188,7 @@ examples:
188
188
  data:
189
189
  large: true
190
190
  href: "/still-not-a-page"
191
- image_src: "https://assets.publishing.service.gov.uk/government/uploads/system/uploads/feature/image/62756/s300_courts-of-justice.JPG"
191
+ image_src: "https://assets.publishing.service.gov.uk/government/uploads/system/uploads/feature/image/91397/s712_SG_Swear_in_1_.jpg"
192
192
  image_alt: "some meaningful alt text please"
193
193
  context:
194
194
  date: 2017-06-14 11:30:00
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = "29.15.1".freeze
2
+ VERSION = "30.0.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_publishing_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 29.15.1
4
+ version: 30.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-20 00:00:00.000000000 Z
11
+ date: 2022-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_app_config
@@ -438,6 +438,7 @@ files:
438
438
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4.js
439
439
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/gtm-click-tracking.js
440
440
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/gtm-page-views.js
441
+ - app/assets/javascripts/govuk_publishing_components/analytics-ga4/gtm-schemas.js
441
442
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/pii-remover.js
442
443
  - app/assets/javascripts/govuk_publishing_components/analytics.js
443
444
  - app/assets/javascripts/govuk_publishing_components/analytics/analytics.js
@@ -494,7 +495,6 @@ files:
494
495
  - app/assets/javascripts/govuk_publishing_components/lib/govspeak/magna-charta.js
495
496
  - app/assets/javascripts/govuk_publishing_components/lib/govspeak/youtube-link-enhancement.js
496
497
  - app/assets/javascripts/govuk_publishing_components/lib/initial-focus.js
497
- - app/assets/javascripts/govuk_publishing_components/lib/primary-links.js
498
498
  - app/assets/javascripts/govuk_publishing_components/lib/toggle-input-class-on-focus.js
499
499
  - app/assets/javascripts/govuk_publishing_components/lib/toggle.js
500
500
  - app/assets/javascripts/govuk_publishing_components/lib/trigger-event.js
@@ -645,6 +645,7 @@ files:
645
645
  - app/views/govuk_publishing_components/audit/_applications.html.erb
646
646
  - app/views/govuk_publishing_components/audit/_component_contents.html.erb
647
647
  - app/views/govuk_publishing_components/audit/_components.html.erb
648
+ - app/views/govuk_publishing_components/audit/_items_in_applications.html.erb
648
649
  - app/views/govuk_publishing_components/audit/show.html.erb
649
650
  - app/views/govuk_publishing_components/component_guide/_application_stylesheet.html.erb
650
651
  - app/views/govuk_publishing_components/component_guide/component_doc/_call.html.erb
@@ -1930,7 +1931,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1930
1931
  - !ruby/object:Gem::Version
1931
1932
  version: '0'
1932
1933
  requirements: []
1933
- rubygems_version: 3.3.18
1934
+ rubygems_version: 3.3.19
1934
1935
  signing_key:
1935
1936
  specification_version: 4
1936
1937
  summary: A gem to document components in GOV.UK frontend applications
@@ -1,74 +0,0 @@
1
- // migrated from govuk_frontend_toolkit
2
- ;(function (global) {
3
- 'use strict'
4
-
5
- var GOVUK = global.GOVUK || {}
6
-
7
- // Only show the first {n} items in a list, documentation is in the README.md
8
- var PrimaryList = function (el, selector) {
9
- this.el = el
10
- this.extraLinks = this.el.querySelectorAll('li:not(' + selector + ')')
11
- // only hide more than one extra link
12
- if (this.extraLinks.length > 1) {
13
- this.addToggleLink()
14
- this.hideExtraLinks()
15
- }
16
- }
17
-
18
- PrimaryList.prototype = {
19
- toggleText: function () {
20
- if (this.extraLinks.length > 1) {
21
- return '+' + this.extraLinks.length + ' others'
22
- } else {
23
- return '+' + this.extraLinks.length + ' other'
24
- }
25
- },
26
- addToggleLink: function () {
27
- this.toggleLink = document.createElement('a')
28
- this.toggleLink.href = '#'
29
- this.toggleLink.setAttribute('aria-expanded', 'false')
30
- this.toggleLink.innerText = this.toggleText()
31
-
32
- this.el.parentNode.insertBefore(this.toggleLink, this.el.nextSibling)
33
- this.toggleLink.addEventListener('click', this.toggleLinks.bind(this))
34
- },
35
- toggleLinks: function (e) {
36
- e.preventDefault()
37
- this.toggleLink.remove()
38
- this.showExtraLinks()
39
- },
40
- hideExtraLinks: function () {
41
- for (var i = 0; i < this.extraLinks.length; i++) {
42
- this.extraLinks[i].className = 'primary-links--display-none'
43
- }
44
- },
45
- showExtraLinks: function () {
46
- for (var i = 0; i < this.extraLinks.length; i++) {
47
- this.extraLinks[i].className = ''
48
- }
49
- }
50
- }
51
-
52
- GOVUK.PrimaryList = PrimaryList
53
-
54
- GOVUK.primaryLinks = {
55
- init: function (selector) {
56
- var allListItems = document.querySelectorAll(selector)
57
- var AllLists = []
58
-
59
- for (var i = 0; i < allListItems.length; i++) {
60
- var parent = allListItems[i].parentNode
61
-
62
- if (AllLists.indexOf(parent) < 0) {
63
- AllLists.push(parent)
64
- }
65
- }
66
-
67
- AllLists.forEach(function (el, i) {
68
- new GOVUK.PrimaryList(el, selector) // eslint-disable-line no-new
69
- })
70
- }
71
- }
72
-
73
- global.GOVUK = GOVUK
74
- })(window)