slimmer 15.5.0 → 16.0.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: 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