govuk_publishing_components 29.0.1 → 29.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b2249b313207eb5d21c77d4b5daf9ff81a39459ca3ae488aa27385ac3d107ac
4
- data.tar.gz: d484a78ee501972e49e477c386d84e4616b0668f9d865620875ddf687c0c5713
3
+ metadata.gz: 0fd7d68de807a05d01e46427e93dc8ed2bb444494f535b65dfdf981922ff030c
4
+ data.tar.gz: fdccf680599fd06ea9bea981bf5c12aea5b5c30d47a5597bdae4a43e3d5494e0
5
5
  SHA512:
6
- metadata.gz: d745f36953d411596341155eaf6797db40950023c1bbacf5938b0571e480b3083f6e80453fbf13ed5adf0d8f0c5d13838f33fada99f6287d705efbf9cae17a60
7
- data.tar.gz: b155b56e49062bdae108c6932d7e3c6baccb579a510a4018d5b89f789c9e1218d3e54f594738950bca50824c581c77aa573e59455b5aa2da63c4076eb5f4dced
6
+ metadata.gz: 336dc812fed04cbf9a394af91162f43aecac81e8104e47c81a0affb0b8b9a8d284114704fec01a0ad9d259d717d3697d90efcfa9e3abce9cc7fb4576ef84ef41
7
+ data.tar.gz: 654f0eea37003f7315ed72668de4ca540cd7c365bb85566791075f3d54e0fc10b042fbf5bd4cbbdba49eadf70a8c9240809c322cffd9aa09f81148ae13cacb62
@@ -3,7 +3,7 @@
3
3
 
4
4
  var GOVUK = global.GOVUK || {}
5
5
  // For usage and initialisation see:
6
- // https://github.com/alphagov/govuk_frontend_toolkit/blob/master/docs/analytics.md#create-an-analytics-tracker
6
+ // https://github.com/alphagov/govuk_publishing_components/blob/main/docs/analytics/analytics.md
7
7
 
8
8
  var Analytics = function (config) {
9
9
  this.pii = new GOVUK.Pii()
@@ -13,6 +13,8 @@
13
13
  return document.querySelectorAll('[data-track-count="accordionSection"]').length
14
14
  case isDocumentCollectionPage():
15
15
  return document.querySelectorAll('.document-collection .group-title').length
16
+ case isNewBrowsePage():
17
+ return document.querySelectorAll('[data-track-count="cardList"]').length
16
18
  case isMainstreamBrowsePage():
17
19
  return countVisible(document.querySelectorAll('#subsection ul')) || document.querySelectorAll('#section ul').length || document.querySelectorAll('#root ul').length
18
20
  case isTopicPage():
@@ -44,6 +46,8 @@
44
46
  return document.querySelectorAll('a[data-track-category="navAccordionLinkClicked"]').length
45
47
  case isDocumentCollectionPage():
46
48
  return document.querySelectorAll('.document-collection .group-document-list li a').length
49
+ case isNewBrowsePage():
50
+ return document.querySelectorAll('[data-track-count="cardLink"]').length
47
51
  case isMainstreamBrowsePage():
48
52
  return countVisible(document.querySelectorAll('#subsection ul a')) || document.querySelectorAll('#section ul a').length || document.querySelectorAll('#root ul a').length
49
53
  case isTopicPage():
@@ -67,6 +71,7 @@
67
71
  var metaApplicationSelector = 'meta[name="govuk:rendering-application"]'
68
72
  var metaFormatSelector = 'meta[name="govuk:format"]'
69
73
  var metaNavigationTypeSelector = 'meta[name="govuk:navigation-page-type"]'
74
+ var metaSectionSelector = 'meta[name="govuk:section"]'
70
75
 
71
76
  function getMetaAttribute (selector) {
72
77
  var element = document.querySelector(selector)
@@ -93,6 +98,12 @@
93
98
  getMetaAttribute(metaNavigationTypeSelector) === 'leaf'
94
99
  }
95
100
 
101
+ function isNewBrowsePage () {
102
+ return getMetaAttribute(metaApplicationSelector) === 'collections' &&
103
+ getMetaAttribute(metaSectionSelector) === 'new_browse_page' &&
104
+ getMetaAttribute(metaFormatSelector) === 'mainstream_browse_page'
105
+ }
106
+
96
107
  function isMainstreamBrowsePage () {
97
108
  return getMetaAttribute(metaApplicationSelector) === 'collections' &&
98
109
  getMetaAttribute(metaFormatSelector) === 'mainstream_browse_page'
@@ -13,6 +13,9 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
13
13
  this.sectionClassExpanded = 'govuk-accordion__section--expanded'
14
14
  this.sectionHeaderClass = 'govuk-accordion__section-header'
15
15
  this.sectionInnerContent = 'govuk-accordion__section-content'
16
+ this.showAllControls = 'govuk-accordion__show-all'
17
+ this.sectionButton = 'govuk-accordion__section-button'
18
+ this.headingText = 'govuk-accordion__section-heading-text'
16
19
 
17
20
  // Translated component content and language attribute pulled from data attributes
18
21
  this.$module.actions = {}
@@ -27,12 +30,21 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
27
30
  GemAccordion.prototype.init = function () {
28
31
  // Indicate that JavaScript has worked
29
32
  this.$module.classList.add('gem-c-accordion--active')
33
+ this.$module.querySelector('.' + this.showAllControls).classList.add('gem-c-accordion__show-all')
30
34
 
31
35
  // Feature flag for anchor tag navigation used on manuals
32
36
  if (this.$module.getAttribute('data-anchor-navigation') === 'true') {
33
37
  this.openByAnchorOnLoad()
34
38
  this.addEventListenersForAnchors()
35
39
  }
40
+ // Feature flag for "Show all sections" GA click event tracking
41
+ if (this.$module.getAttribute('data-track-show-all-clicks') === 'true') {
42
+ this.addAccordionOpenAllTracking()
43
+ }
44
+ // Feature flag for each section GA click event tracking
45
+ if (this.$module.getAttribute('data-track-sections') === 'true') {
46
+ this.addEventListenerSections()
47
+ }
36
48
  }
37
49
 
38
50
  // Navigate to and open accordions with anchored content on page load if a hash is present
@@ -90,5 +102,38 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
90
102
  }
91
103
  }
92
104
 
105
+ // To track the Accordion's "Show all sections" / "Hide all sections" button click events and pass them to the GA event tracking
106
+ GemAccordion.prototype.addAccordionOpenAllTracking = function () {
107
+ this.$module.querySelector('.' + this.showAllControls).addEventListener('click', function (event) {
108
+ var expanded = event.target.getAttribute('aria-expanded') === 'true'
109
+ var label = expanded ? 'Show all sections' : 'Hide all sections'
110
+ var action = expanded ? 'accordionOpened' : 'accordionClosed'
111
+ var options = { transport: 'beacon', label: label }
112
+ if (window.GOVUK.analytics && window.GOVUK.analytics.trackEvent) {
113
+ window.GOVUK.analytics.trackEvent('pageElementInteraction', action, options)
114
+ }
115
+ })
116
+ }
117
+
118
+ GemAccordion.prototype.addEventListenerSections = function () {
119
+ var sections = this.$module.querySelectorAll('.' + this.sectionButton)
120
+ nodeListForEach(sections, function (section) {
121
+ section.addEventListener('click', this.addAccordionSectionTracking.bind(this, section))
122
+ }.bind(this))
123
+ }
124
+
125
+ // If the Accordion's sections are opened on click, then pass them to the GA event tracking
126
+ GemAccordion.prototype.addAccordionSectionTracking = function (section) {
127
+ var expanded = section.getAttribute('aria-expanded') === 'false'
128
+ var label = section.querySelector('.' + this.headingText).textContent
129
+ var action = expanded ? 'accordionOpened' : 'accordionClosed'
130
+ var options = { transport: 'beacon', label: label }
131
+
132
+ if (window.GOVUK.analytics && window.GOVUK.analytics.trackEvent) {
133
+ window.GOVUK.analytics.trackEvent('pageElementInteraction', action, options)
134
+ console.log('pageElementInteraction', action, options)
135
+ }
136
+ }
137
+
93
138
  Modules.GemAccordion = GemAccordion
94
139
  })(window.GOVUK.Modules)
@@ -1,2 +1,7 @@
1
1
  @import "mixins/prefixed-transform";
2
2
  @import "govuk/components/accordion/accordion";
3
+
4
+ // Prevent elements inside the button from receiving click events
5
+ .gem-c-accordion__show-all > * {
6
+ pointer-events: none;
7
+ }
@@ -5,6 +5,8 @@
5
5
  id ||= "default-id-#{SecureRandom.hex(4)}"
6
6
  items ||= []
7
7
  anchor_navigation ||= false
8
+ track_show_all_clicks ||= false
9
+ track_sections ||= false
8
10
 
9
11
  accordion_classes = %w(gem-c-accordion govuk-accordion)
10
12
  accordion_classes << (shared_helper.get_margin_bottom)
@@ -22,6 +24,8 @@
22
24
  data_attributes ||= {}
23
25
  data_attributes[:module] = 'govuk-accordion gem-accordion'
24
26
  data_attributes[:anchor_navigation] = anchor_navigation
27
+ data_attributes[:track_show_all_clicks] = track_show_all_clicks
28
+ data_attributes[:track_sections] = track_sections
25
29
 
26
30
  translations.each do |key, translation|
27
31
  locales[key] = shared_helper.t_locale(translation)
@@ -18,8 +18,10 @@
18
18
  <%= heading %>
19
19
  <% end %>
20
20
  <% end %>
21
-
22
- <%= content_tag('ul', class: ul_classes) do %>
21
+ <%# data-track-count is used for analytics purposes in
22
+ https://github.com/alphagov/govuk_publishing_components/blob/main/app/assets/javascripts/govuk_publishing_components/analytics/page-content.js
23
+ %>
24
+ <%= content_tag('ul', class: ul_classes, "data-track-count": "cardList" ) do %>
23
25
  <%
24
26
  items.each do |item|
25
27
  link = item[:link]
@@ -33,7 +35,8 @@
33
35
  <%=
34
36
  link_to link[:text], link[:path],
35
37
  class: "govuk-link gem-c-cards__link",
36
- data: link[:data_attributes]
38
+ data: link[:data_attributes],
39
+ "data-track-count": "cardLink"
37
40
  %>
38
41
  <% end %>
39
42
  <% if item[:description] %>
@@ -12,9 +12,4 @@
12
12
  inverse: inverse,
13
13
  collapse_on_mobile: collapse_on_mobile %>
14
14
  <% end %>
15
- <% if breadcrumb_selector.priority_breadcrumbs %>
16
- <%= render 'govuk_publishing_components/components/step_by_step_nav_header', breadcrumb_selector.priority_breadcrumbs %>
17
- <% meta_tag = GovukPublishingComponents::Presenters::MetaTags.new(content_item, local_assigns, request).brexit_priority_breadcrumb_tag %>
18
- <meta name="<%= meta_tag.keys.first %>" content="<%= meta_tag.values.first %>">
19
- <% end %>
20
15
  </div>
@@ -309,3 +309,37 @@ examples:
309
309
  text: How people read
310
310
  content:
311
311
  html: <p class="govuk-body">This is the content for How people read.</p>
312
+ with_track_show_all_clicks:
313
+ description: |
314
+ To switch on Google Analytics for the "Show all sections" button on click, pass `track_show_all_clicks: true` the values passed on open will be
315
+ `Event Action: accordionOpened` `Event Category: pageElementInteraction` `Event Label: Show all sections`
316
+ data:
317
+ track_show_all_clicks: true
318
+ items:
319
+ - heading:
320
+ text: Writing well for the web
321
+ id: writing-well-for-the-web
322
+ content:
323
+ html: <p class="govuk-body">This is content for accordion 1 of 2</p><p class="govuk-body">This content contains a <a href="#anchor-nav-test" class="govuk-link">link</a></p>
324
+ - heading:
325
+ text: Writing well for specialists
326
+ content:
327
+ html: <p class="govuk-body" id="anchor-nav-test">This is content for accordion 2 of 2</p>
328
+ with_track_sections:
329
+ description: |
330
+ To switch on Google Analytics for each section, on click, pass `track_sections: true` the values passed on open will be
331
+ `Event Action: accordionOpened` / `accordionClosed` `Event Category: pageElementInteraction` and the `Event Label` being the heading text.
332
+
333
+ (`track_show_all_clicks: true` can be added to track the "Show all sections" button as well, if required)
334
+ data:
335
+ track_sections: true
336
+ items:
337
+ - heading:
338
+ text: Writing well for the web
339
+ id: writing-well-for-the-web
340
+ content:
341
+ html: <p class="govuk-body">This is content for accordion 1 of 2</p><p class="govuk-body">This content contains a <a href="#anchor-nav-test" class="govuk-link">link</a></p>
342
+ - heading:
343
+ text: Writing well for specialists
344
+ content:
345
+ html: <p class="govuk-body" id="anchor-nav-test">This is content for accordion 2 of 2</p>
@@ -5,8 +5,7 @@ module GovukPublishingComponents
5
5
  # rather than direct email for users to request accessible formats. When the pilot
6
6
  # scheme is rolled out further this can be removed.
7
7
  # Currently the HMRC are participating in the pilot.
8
- EMAILS_IN_ACCESSIBLE_FORMAT_REQUEST_PILOT = %w[govuk_publishing_components@example.com
9
- different.format@hmrc.gov.uk].freeze
8
+ EMAILS_IN_ACCESSIBLE_FORMAT_REQUEST_PILOT = %w[govuk_publishing_components@example.com].freeze
10
9
 
11
10
  delegate :opendocument?, :document?, :spreadsheet?, to: :content_type
12
11
 
@@ -17,19 +17,8 @@ module GovukPublishingComponents
17
17
  best_match_option[:step_by_step]
18
18
  end
19
19
 
20
- def priority_breadcrumbs
21
- return if hide_priority_breadcrumb?
22
- return parent_item_navigation.priority_breadcrumbs if content_item_navigation.html_publication_with_parent?
23
-
24
- content_item_navigation.priority_breadcrumbs
25
- end
26
-
27
20
  private
28
21
 
29
- def hide_priority_breadcrumb?
30
- content_item_navigation.content_tagged_to_current_step_by_step? && content_item_navigation.tagged_to_brexit?
31
- end
32
-
33
22
  def best_match_option
34
23
  return content_item_options unless content_item_navigation.html_publication_with_parent?
35
24
 
@@ -33,10 +33,6 @@ module GovukPublishingComponents
33
33
  @taxon_breadcrumbs ||= ContentBreadcrumbsBasedOnTaxons.call(content_item)
34
34
  end
35
35
 
36
- def priority_breadcrumbs
37
- @priority_breadcrumbs ||= ContentBreadcrumbsBasedOnPriority.call(content_item, query_parameters)
38
- end
39
-
40
36
  def topic_breadcrumbs
41
37
  @topic_breadcrumbs ||= ContentBreadcrumbsBasedOnTopic.call(content_item)
42
38
  end
@@ -92,22 +88,6 @@ module GovukPublishingComponents
92
88
  content_item.dig("links", "topics").present?
93
89
  end
94
90
 
95
- def tagged_to_brexit?
96
- taxons = content_item.dig("links", "taxons").to_a
97
- brexit_taxon = "d6c2de5d-ef90-45d1-82d4-5f2438369eea"
98
- world_brexit_taxon = "d4c4d91d-fbe7-4eff-bd57-189138c626c9"
99
-
100
- taxons.each do |taxon|
101
- if taxon["content_id"].eql?(brexit_taxon) ||
102
- taxon["content_id"].eql?(world_brexit_taxon) ||
103
- taxon.dig("links", "parent_taxons").to_a.any? { |taxon_item| taxon_item["content_id"].eql?(brexit_taxon) }
104
- return true
105
- end
106
- end
107
-
108
- false
109
- end
110
-
111
91
  def content_tagged_to_current_step_by_step?
112
92
  # TODO: remove indirection here
113
93
  step_nav_helper.show_header?
@@ -20,12 +20,7 @@ module GovukPublishingComponents
20
20
  meta_tags = add_organisation_tags(meta_tags)
21
21
  meta_tags = add_political_tags(meta_tags)
22
22
  meta_tags = add_taxonomy_tags(meta_tags)
23
- meta_tags = add_step_by_step_tags(meta_tags)
24
- add_brexit_tags("govuk:brexit-audience", meta_tags)
25
- end
26
-
27
- def brexit_priority_breadcrumb_tag
28
- add_brexit_tags("govuk:brexit-superbreadcrumb")
23
+ add_step_by_step_tags(meta_tags)
29
24
  end
30
25
 
31
26
  private
@@ -116,37 +111,6 @@ module GovukPublishingComponents
116
111
  meta_tags
117
112
  end
118
113
 
119
- def add_brexit_tags(tag_key, meta_tags = {})
120
- links = content_item[:links]
121
- taxons = links[:taxons] unless links.nil?
122
-
123
- return meta_tags if taxons.blank?
124
- return meta_tags unless tagged_to_priority_taxon?
125
-
126
- taxon =
127
- tag_key == "govuk:brexit-audience" ? priority_brexit_taxon : priority_taxon
128
-
129
- brexit_audience = priority_taxon_helper.brexit_audience(taxon)
130
- meta_tags[tag_key] = brexit_audience if brexit_audience.present?
131
- meta_tags
132
- end
133
-
134
- def tagged_to_priority_taxon?
135
- priority_taxon_helper.priority_taxon.present?
136
- end
137
-
138
- def priority_taxon_helper
139
- @priority_taxon_helper ||= ContentBreadcrumbsBasedOnPriority.new(content_item.deep_stringify_keys, request.query_parameters)
140
- end
141
-
142
- def priority_taxon
143
- priority_taxon_helper.priority_taxon
144
- end
145
-
146
- def priority_brexit_taxon
147
- priority_taxon_helper.priority_brexit_taxon
148
- end
149
-
150
114
  def has_content_history?
151
115
  (content_item[:public_updated_at] && details[:first_public_at] && content_item[:public_updated_at] != details[:first_public_at]) ||
152
116
  (details[:change_history] && details[:change_history].size > 1)
@@ -2,40 +2,6 @@ module GovukPublishingComponents
2
2
  module Presenters
3
3
  class PublicLayoutHelper
4
4
  FOOTER_NAV = [
5
- {
6
- title: "Coronavirus (COVID-19)",
7
- columns: 2,
8
- items: [
9
- {
10
- href: "/coronavirus",
11
- text: "Coronavirus (COVID-19): guidance and support",
12
- attributes: {
13
- data: {
14
- track_category: "footerClicked",
15
- track_action: "coronavirusLinks",
16
- track_label: "Coronavirus (COVID-19): guidance and support",
17
- },
18
- },
19
- },
20
- ],
21
- },
22
- {
23
- title: "Brexit",
24
- columns: 1,
25
- items: [
26
- {
27
- href: "/brexit",
28
- text: "Check what you need to do",
29
- attributes: {
30
- data: {
31
- track_category: "footerClicked",
32
- track_action: "transitionLinks",
33
- track_label: "Check what you need to do",
34
- },
35
- },
36
- },
37
- ],
38
- },
39
5
  {
40
6
  title: "Services and information",
41
7
  columns: 2,
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = "29.0.1".freeze
2
+ VERSION = "29.3.0".freeze
3
3
  end
@@ -17,7 +17,6 @@ require "govuk_publishing_components/presenters/step_by_step_nav_helper"
17
17
  require "govuk_publishing_components/presenters/page_with_step_by_step_navigation"
18
18
  require "govuk_publishing_components/presenters/public_layout_helper"
19
19
  require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_ancestors"
20
- require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_priority"
21
20
  require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons"
22
21
  require "govuk_publishing_components/presenters/content_breadcrumbs_based_on_topic"
23
22
  require "govuk_publishing_components/presenters/checkboxes_helper"
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.0.1
4
+ version: 29.3.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-03-25 00:00:00.000000000 Z
11
+ date: 2022-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_app_config
@@ -112,30 +112,30 @@ dependencies:
112
112
  name: capybara
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '3.25'
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '3.25'
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: faker
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '2.11'
131
+ version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '2.11'
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: gds-api-adapters
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -154,30 +154,30 @@ dependencies:
154
154
  name: govuk_schemas
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '4.0'
159
+ version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: '4.0'
166
+ version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: govuk_test
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - "~>"
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: '3'
173
+ version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - "~>"
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
- version: '3'
180
+ version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: i18n-coverage
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -196,16 +196,16 @@ dependencies:
196
196
  name: percy-capybara
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - "~>"
199
+ - - ">="
200
200
  - !ruby/object:Gem::Version
201
- version: 5.0.0
201
+ version: '0'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - "~>"
206
+ - - ">="
207
207
  - !ruby/object:Gem::Version
208
- version: 5.0.0
208
+ version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: pry-byebug
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: '1.5'
229
+ version: '0'
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ">="
235
235
  - !ruby/object:Gem::Version
236
- version: '1.5'
236
+ version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: rake
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -252,16 +252,16 @@ dependencies:
252
252
  name: rspec-rails
253
253
  requirement: !ruby/object:Gem::Requirement
254
254
  requirements:
255
- - - "~>"
255
+ - - ">="
256
256
  - !ruby/object:Gem::Version
257
- version: '5.0'
257
+ version: '0'
258
258
  type: :development
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
- - - "~>"
262
+ - - ">="
263
263
  - !ruby/object:Gem::Version
264
- version: '5.0'
264
+ version: '0'
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: rubocop-govuk
267
267
  requirement: !ruby/object:Gem::Requirement
@@ -280,44 +280,44 @@ dependencies:
280
280
  name: sassc-rails
281
281
  requirement: !ruby/object:Gem::Requirement
282
282
  requirements:
283
- - - "~>"
283
+ - - ">="
284
284
  - !ruby/object:Gem::Version
285
- version: '2'
285
+ version: '0'
286
286
  type: :development
287
287
  prerelease: false
288
288
  version_requirements: !ruby/object:Gem::Requirement
289
289
  requirements:
290
- - - "~>"
290
+ - - ">="
291
291
  - !ruby/object:Gem::Version
292
- version: '2'
292
+ version: '0'
293
293
  - !ruby/object:Gem::Dependency
294
294
  name: uglifier
295
295
  requirement: !ruby/object:Gem::Requirement
296
296
  requirements:
297
297
  - - ">="
298
298
  - !ruby/object:Gem::Version
299
- version: 4.1.0
299
+ version: '0'
300
300
  type: :development
301
301
  prerelease: false
302
302
  version_requirements: !ruby/object:Gem::Requirement
303
303
  requirements:
304
304
  - - ">="
305
305
  - !ruby/object:Gem::Version
306
- version: 4.1.0
306
+ version: '0'
307
307
  - !ruby/object:Gem::Dependency
308
308
  name: webmock
309
309
  requirement: !ruby/object:Gem::Requirement
310
310
  requirements:
311
- - - "~>"
311
+ - - ">="
312
312
  - !ruby/object:Gem::Version
313
- version: 3.8.3
313
+ version: '0'
314
314
  type: :development
315
315
  prerelease: false
316
316
  version_requirements: !ruby/object:Gem::Requirement
317
317
  requirements:
318
- - - "~>"
318
+ - - ">="
319
319
  - !ruby/object:Gem::Version
320
- version: 3.8.3
320
+ version: '0'
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: yard
323
323
  requirement: !ruby/object:Gem::Requirement
@@ -907,7 +907,6 @@ files:
907
907
  - lib/govuk_publishing_components/presenters/button_helper.rb
908
908
  - lib/govuk_publishing_components/presenters/checkboxes_helper.rb
909
909
  - lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_ancestors.rb
910
- - lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_priority.rb
911
910
  - lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_taxons.rb
912
911
  - lib/govuk_publishing_components/presenters/content_breadcrumbs_based_on_topic.rb
913
912
  - lib/govuk_publishing_components/presenters/content_item.rb
@@ -1,118 +0,0 @@
1
- module GovukPublishingComponents
2
- module Presenters
3
- class ContentBreadcrumbsBasedOnPriority
4
- # keys are labels, values are the content_ids for the matching taxons
5
- # Where multiple matching taxons are present, the top most one is the highest priority
6
- # and the bottom one the lowest priority
7
- PRIORITY_TAXONS = {
8
- brexit_business: "634fd193-8039-4a70-a059-919c34ff4bfc",
9
- brexit_individuals: "614b2e65-56ac-4f8d-bb9c-d1a14167ba25",
10
- brexit_taxon: "d6c2de5d-ef90-45d1-82d4-5f2438369eea",
11
- }.freeze
12
-
13
- # Returns the highest priority taxon that has a content_id matching those in PRIORITY_TAXONS
14
- def self.call(content_item, query_parameters = nil)
15
- new(content_item, query_parameters).breadcrumbs
16
- end
17
-
18
- attr_reader :content_item, :query_parameters
19
-
20
- def initialize(content_item, query_parameters = nil)
21
- @content_item = content_item
22
- @query_parameters = query_parameters
23
- end
24
-
25
- def priority_taxon
26
- @priority_taxon ||= begin
27
- default_taxon = priority_taxons.min_by { |t| PRIORITY_TAXONS.values.index(t["content_id"]) }
28
- preferred_taxon || default_taxon
29
- end
30
- end
31
-
32
- def priority_brexit_taxon
33
- if tagged_to_both_brexit_child_taxons?
34
- priority_taxons.find { |t| t["content_id"] == PRIORITY_TAXONS[:brexit_taxon] }
35
- else
36
- priority_taxons.min_by { |t| PRIORITY_TAXONS.values.index(t["content_id"]) }
37
- end
38
- end
39
-
40
- def breadcrumbs
41
- priority_taxon && {
42
- title: priority_taxon["title"],
43
- path: breadcrumb_path,
44
- tracking_category: "breadcrumbClicked",
45
- tracking_action: tracking_action,
46
- tracking_label: content_item["base_path"],
47
- tracking_dimension_enabled: false,
48
- }
49
- end
50
-
51
- def brexit_audience(taxon)
52
- return nil unless taxon
53
-
54
- {
55
- PRIORITY_TAXONS[:brexit_business] => "Brexitbusiness",
56
- PRIORITY_TAXONS[:brexit_individuals] => "Brexitcitizen",
57
- PRIORITY_TAXONS[:brexit_taxon] => "Brexitbusinessandcitizen",
58
- }[taxon["content_id"]]
59
- end
60
-
61
- private
62
-
63
- def preferred_taxon
64
- if preferred_priority_taxon
65
- priority_taxons.find { |t| t["content_id"] == preferred_priority_taxon }
66
- elsif tagged_to_both_brexit_child_taxons?
67
- priority_taxons.find { |t| t["content_id"] == PRIORITY_TAXONS[:brexit_taxon] }
68
- end
69
- end
70
-
71
- def priority_taxons
72
- return [] unless content_item["links"].is_a?(Hash)
73
-
74
- taxons = content_item.dig("links", "taxons")
75
- taxon_tree(taxons).select do |taxon|
76
- priority_taxon?(taxon)
77
- end
78
- end
79
-
80
- def taxon_tree(taxons)
81
- return [] if taxons.blank?
82
-
83
- taxons + taxons.flat_map { |taxon| taxon_tree(taxon.dig("links", "parent_taxons")) }
84
- end
85
-
86
- def priority_taxon?(taxon)
87
- PRIORITY_TAXONS.values.include?(taxon["content_id"])
88
- end
89
-
90
- def brexit_child_taxon?(taxon)
91
- brexit_child_taxons.include?(taxon["content_id"])
92
- end
93
-
94
- def brexit_child_taxons
95
- [PRIORITY_TAXONS[:brexit_business], PRIORITY_TAXONS[:brexit_individuals]]
96
- end
97
-
98
- def preferred_priority_taxon
99
- query_parameters["priority-taxon"] if query_parameters
100
- end
101
-
102
- def tracking_action
103
- action = %w[superBreadcrumb]
104
- action << brexit_audience(priority_taxon)
105
- action.compact.join(" ")
106
- end
107
-
108
- def tagged_to_both_brexit_child_taxons?
109
- t = priority_taxons.select { |taxon| brexit_child_taxon?(taxon) }
110
- t.uniq.count > 1
111
- end
112
-
113
- def breadcrumb_path
114
- priority_taxon.dig("details", "url_override").present? ? priority_taxon.dig("details", "url_override") : priority_taxon["base_path"]
115
- end
116
- end
117
- end
118
- end