slimmer 15.5.0 → 16.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: cc08f967bc13790ee7db7c1ee0b8ef0aaf07f5d7fb904c6ef1f3e6ce16650287
4
- data.tar.gz: 8807bcfc49959843c3c1beeae148aa3c3a89e2dce1bb1ecbaf450543de62049f
3
+ metadata.gz: 118378e1ad3f656164da144437d42085b0e7d69ffc567d922266e531001aeab5
4
+ data.tar.gz: e96c1f6bd1fe7d479a217dfa6ec3c76793c140063377d146bc418e0756f46dea
5
5
  SHA512:
6
- metadata.gz: b2f694bacade80d4c78994adc2df5a0e9feaa202ca27bcf982cfa68142a31642ebbdde19fc7a2ef0222411a0a632ebbae969244f43d625644b25fb4bfd0fed85
7
- data.tar.gz: 063ee728d14b6342bbb53247a7bb231a5fea95f4f7aebc839cc67117a6ca104c8fdea8ce5dcdb2ab83f18dfebc7397d9dab6143bd384b9b13367b91e4d79d50e
6
+ metadata.gz: 0fd17a9971da4ab0c6d43883b9ce7cff0556384e1470c9c26dc4c6e1c97e9a9c7510fd5b938a315d8ead09cb70af05e0e644257849aa15c950bdc31cc6ad373d
7
+ data.tar.gz: 76d732124e4efc8ec9b62c5ea7747a5316f740f38f2f9e80595bcda08ab3c864bf1bbe89985cade4ee2cdec10d70b866ac081e2b482f851ec7135c5660580c21
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ # 16.0.0
2
+ * BREAKING: Remove NavigationMover processor (#275)
3
+
4
+ # 15.6.1
5
+ * Use safe navigation operator in feedback url swapper (#273)
6
+
7
+ # 15.6.0
8
+
9
+ * Add feedback url swapper (#271)
10
+
11
+ # 15.5.1
12
+ * Update gem_layout template support (#267)
13
+
1
14
  # 15.5.0
2
15
  * Add support for gem layout in static (#265)
3
16
 
@@ -23,8 +23,15 @@ module Slimmer::Processors
23
23
  remove_signed_out(dest)
24
24
  remove_signed_in(dest)
25
25
  end
26
+
27
+ if is_navigation_empty?(dest)
28
+ header_content = dest.at_css(".govuk-header__content")
29
+ header_content.remove if header_content
30
+ end
26
31
  end
27
32
 
33
+ private
34
+
28
35
  def remove_signed_out(dest)
29
36
  signed_out = dest.at_css("#global-header #accounts-signed-out")
30
37
  signed_out_link = dest.css(".gem-c-layout-header [data-link-for='accounts-signed-out']")
@@ -45,7 +52,9 @@ module Slimmer::Processors
45
52
  end
46
53
  end
47
54
 
48
- private
55
+ def is_navigation_empty?(dest)
56
+ dest.at_css(".govuk-header__navigation a").nil?
57
+ end
49
58
 
50
59
  def is_gem_layout?
51
60
  @headers[Slimmer::Headers::TEMPLATE_HEADER]&.starts_with?("gem_layout")
@@ -1,13 +1,28 @@
1
1
  module Slimmer::Processors
2
2
  class BodyInserter
3
- def initialize(source_id = "wrapper", destination_id = "wrapper")
3
+ def initialize(source_id = "wrapper", destination_id = "wrapper", headers = {})
4
4
  @source_selector = "#" + source_id
5
5
  @destination_selector = "#" + destination_id
6
+ @headers = headers
6
7
  end
7
8
 
8
9
  def filter(src, dest)
9
- body = Nokogiri::HTML.fragment(src.at_css(@source_selector).to_html)
10
+ source_markup = src.at_css(@source_selector)
11
+ destination_markup = dest.at_css(@destination_selector)
12
+
13
+ css_classes = []
14
+ css_classes << source_markup.attributes["class"].to_s.split(/ +/) if source_markup.has_attribute?("class")
15
+ css_classes << destination_markup.attributes["class"].to_s.split(/ +/) if destination_markup.has_attribute?("class")
16
+
17
+ body = Nokogiri::HTML.fragment(source_markup.to_html)
10
18
  dest.at_css(@destination_selector).replace(body)
19
+ dest.at_css(@destination_selector).set_attribute("class", css_classes.flatten.uniq.join(" ")) if is_gem_layout? && css_classes.any?
20
+ end
21
+
22
+ private
23
+
24
+ def is_gem_layout?
25
+ @headers[Slimmer::Headers::TEMPLATE_HEADER]&.starts_with?("gem_layout")
11
26
  end
12
27
  end
13
28
  end
@@ -0,0 +1,34 @@
1
+ module Slimmer::Processors
2
+ class FeedbackURLSwapper
3
+ def initialize(request, headers)
4
+ @headers = headers
5
+ @request = request
6
+ end
7
+
8
+ def filter(_src, dest)
9
+ return dest unless is_gem_layout?
10
+
11
+ original_url_without_pii = remove_pii(@request.base_url + @request.fullpath)
12
+ dest.at_css(".gem-c-feedback input[name='url']")&.set_attribute("value", original_url_without_pii)
13
+
14
+ full_path_without_pii = remove_pii(@request.fullpath)
15
+ dest.at_css(".gem-c-feedback input[name='email_survey_signup[survey_source]']")&.set_attribute("value", full_path_without_pii)
16
+
17
+ dest
18
+ end
19
+
20
+ private
21
+
22
+ # This PII removal is also found in the [feedback component in the GOV.UK
23
+ # Publishing Components gem](https://git.io/JcCIE), and any changes made
24
+ # need to be kept in sync.
25
+ def remove_pii(string)
26
+ email_regex = /[^\s=\/?&]+(?:@|%40)[^\s=\/?&]+/
27
+ string.dup.force_encoding("UTF-8").gsub(email_regex, "[email]")
28
+ end
29
+
30
+ def is_gem_layout?
31
+ @headers[Slimmer::Headers::TEMPLATE_HEADER]&.starts_with?("gem_layout")
32
+ end
33
+ end
34
+ end
data/lib/slimmer/skin.rb CHANGED
@@ -101,13 +101,14 @@ module Slimmer
101
101
 
102
102
  def success(source_request, response, body)
103
103
  wrapper_id = options[:wrapper_id] || "wrapper"
104
+ template_wrapper_id = "wrapper" # All templates in Static use `#wrapper`
104
105
 
105
106
  processors = [
106
107
  Processors::TitleInserter.new,
107
108
  Processors::TagMover.new,
108
- Processors::NavigationMover.new(self),
109
109
  Processors::ConditionalCommentMover.new,
110
- Processors::BodyInserter.new(wrapper_id),
110
+ Processors::BodyInserter.new(wrapper_id, template_wrapper_id, response.headers),
111
+ Processors::FeedbackURLSwapper.new(source_request, response.headers),
111
112
  Processors::BodyClassCopier.new,
112
113
  Processors::InsideHeaderInserter.new,
113
114
  Processors::HeaderContextInserter.new,
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = "15.5.0".freeze
2
+ VERSION = "16.0.0".freeze
3
3
  end
data/lib/slimmer.rb CHANGED
@@ -32,10 +32,10 @@ module Slimmer
32
32
  autoload :BodyClassCopier, "slimmer/processors/body_class_copier"
33
33
  autoload :BodyInserter, "slimmer/processors/body_inserter"
34
34
  autoload :ConditionalCommentMover, "slimmer/processors/conditional_comment_mover"
35
+ autoload :FeedbackURLSwapper, "slimmer/processors/feedback_url_swapper"
35
36
  autoload :MetadataInserter, "slimmer/processors/metadata_inserter"
36
37
  autoload :HeaderContextInserter, "slimmer/processors/header_context_inserter"
37
38
  autoload :InsideHeaderInserter, "slimmer/processors/inside_header_inserter"
38
- autoload :NavigationMover, "slimmer/processors/navigation_mover"
39
39
  autoload :SearchPathSetter, "slimmer/processors/search_path_setter"
40
40
  autoload :SearchParameterInserter, "slimmer/processors/search_parameter_inserter"
41
41
  autoload :SearchRemover, "slimmer/processors/search_remover"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slimmer
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.5.0
4
+ version: 16.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: 2021-04-07 00:00:00.000000000 Z
11
+ date: 2022-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -256,10 +256,10 @@ files:
256
256
  - lib/slimmer/processors/body_class_copier.rb
257
257
  - lib/slimmer/processors/body_inserter.rb
258
258
  - lib/slimmer/processors/conditional_comment_mover.rb
259
+ - lib/slimmer/processors/feedback_url_swapper.rb
259
260
  - lib/slimmer/processors/header_context_inserter.rb
260
261
  - lib/slimmer/processors/inside_header_inserter.rb
261
262
  - lib/slimmer/processors/metadata_inserter.rb
262
- - lib/slimmer/processors/navigation_mover.rb
263
263
  - lib/slimmer/processors/search_parameter_inserter.rb
264
264
  - lib/slimmer/processors/search_path_setter.rb
265
265
  - lib/slimmer/processors/search_remover.rb
@@ -1,24 +0,0 @@
1
- class Slimmer::Processors::NavigationMover
2
- def initialize(skin)
3
- @skin = skin
4
- end
5
-
6
- def filter(src, dest)
7
- proposition_header = src.at_css("#proposition-menu")
8
- global_header = dest.at_css("#global-header")
9
- if proposition_header && global_header
10
- proposition_header.remove
11
-
12
- global_header["class"] = [global_header["class"], "with-proposition"].compact.join(" ")
13
-
14
- header_block = Nokogiri::HTML.fragment(proposition_header_block)
15
- header_block.at_css(".content") << proposition_header
16
-
17
- global_header.at_css(".header-wrapper") << header_block
18
- end
19
- end
20
-
21
- def proposition_header_block
22
- @proposition_header_block ||= @skin.template("proposition_menu")
23
- end
24
- end