History

Convert the `decode_cloudflare_email` helper to a dedicated filter class

Jed Fox committed 9 years ago

Commit 608853b1 parent 68b80bc17 files · +29 −49Browse files

Unified · Split

17 files
  1. lib/docs/core/filter.rb +0 −11
  2. lib/docs/filters/ansible/clean_html.rb +0 −4
  3. lib/docs/filters/bootstrap/clean_html_v3.rb +0 −4
  4. lib/docs/filters/bootstrap/clean_html_v4.rb +0 −4
  5. lib/docs/filters/core/parse_cf_email.rb +21 −0
  6. lib/docs/filters/flow/clean_html.rb +0 −4
  7. lib/docs/filters/laravel/clean_html.rb +0 −4
  8. lib/docs/filters/node/clean_html.rb +0 −4
  9. lib/docs/filters/vue/clean_html.rb +0 −4
  10. lib/docs/filters/yarn/clean_html.rb +0 −4
  11. lib/docs/scrapers/ansible.rb +1 −1
  12. lib/docs/scrapers/bootstrap.rb +2 −0
  13. lib/docs/scrapers/flow.rb +1 −1
  14. lib/docs/scrapers/laravel.rb +1 −1
  15. lib/docs/scrapers/node.rb +1 −1
  16. lib/docs/scrapers/vue.rb +1 −1
  17. lib/docs/scrapers/yarn.rb +1 −1
lib/docs/core/filter.rb+0−11
@@ -91,17 +91,6 @@ module Docs · 90 unmodified lines
9191 super
9292 end
9393
94− def decode_cloudflare_email(str)
95− mask = "0x#{str[0..1]}".hex | 0
96− result = ''
97−
98− str.chars.drop(2).each_slice(2) do |slice|
99− result += "%" + "0#{("0x#{slice.join}".hex ^ mask).to_s(16)}"[-2..-1]
100− end
101−
102− URI.decode(result)
103− end
104−
10594 def clean_path(path)
10695 path = path.gsub %r{[!;:]}, '-'
10796 path = path.gsub %r{\+}, '_plus_'
lib/docs/filters/ansible/clean_html.rb+0−4
@@ -4,10 +4,6 @@ module Docs · 3 unmodified lines
44 def call
55 @doc = at_css('#page-content')
66
7− css('.__cf_email__').each do |node|
8− node.replace(decode_cloudflare_email(node['data-cfemail']))
9− end
10−
117 doc
128 end
139 end
lib/docs/filters/bootstrap/clean_html_v3.rb+0−4
@@ -39,10 +39,6 @@ module Docs · 38 unmodified lines
3939 node['class'] = 'col'
4040 end
4141
42− css('.__cf_email__').each do |node|
43− node.replace(decode_cloudflare_email(node['data-cfemail']))
44− end
45−
4642 css('figure.highlight').each do |node|
4743 code = node.at_css('code')
4844 node['data-language'] = code['data-lang']
lib/docs/filters/bootstrap/clean_html_v4.rb+0−4
@@ -40,10 +40,6 @@ module Docs · 39 unmodified lines
4040 node['class'] = 'col'
4141 end
4242
43− css('.__cf_email__').each do |node|
44− node.replace(decode_cloudflare_email(node['data-cfemail']))
45− end
46−
4743 css('.highlight').each do |node|
4844 code = node.at_css('code')
4945 node['data-language'] = code['data-lang']
lib/docs/filters/core/parse_cf_email.rb+21−0
@@ -0,0 +1,21 @@
1+# frozen_string_literal: true
2+
3+module Docs
4+ class ParseCfEmailFilter < Filter
5+ def call
6+ css('.__cf_email__').each do |node|
7+ str = node['data-cfemail']
8+ mask = "0x#{str[0..1]}".hex | 0
9+ result = ''
10+
11+ str.chars.drop(2).each_slice(2) do |slice|
12+ result += "%" + "0#{("0x#{slice.join}".hex ^ mask).to_s(16)}"[-2..-1]
13+ end
14+
15+ node.replace(URI.decode(result))
16+ end
17+
18+ doc
19+ end
20+ end
21+end
lib/docs/filters/flow/clean_html.rb+0−4
@@ -45,10 +45,6 @@ module Docs · 44 unmodified lines
4545 end
4646 end
4747
48− css('.__cf_email__').each do |node|
49− node.replace(decode_cloudflare_email(node['data-cfemail']))
50− end
51−
5248 css('.editor').each do |node|
5349 pre = node.at_css('.editor-code > pre')
5450 pre['data-language'] = 'javascript'
lib/docs/filters/laravel/clean_html.rb+0−4
@@ -8,10 +8,6 @@ module Docs · 7 unmodified lines
88 other
99 end
1010
11− css('a.__cf_email__').each do |node|
12− node.replace(decode_cloudflare_email(node['data-cfemail']))
13− end
14−
1511 # Remove code highlighting
1612 css('pre').each do |node|
1713 node.content = node.content
lib/docs/filters/node/clean_html.rb+0−4
@@ -22,10 +22,6 @@ module Docs · 21 unmodified lines
2222 node.content = node.content
2323 end
2424
25− css('.__cf_email__').each do |node|
26− node.replace(decode_cloudflare_email(node['data-cfemail']))
27− end
28−
2925 doc
3026 end
3127 end
lib/docs/filters/vue/clean_html.rb+0−4
@@ -9,10 +9,6 @@ module Docs · 8 unmodified lines
99
1010 css('.demo', '.guide-links', '.footer', '#ad').remove
1111
12− css('.__cf_email__').each do |node|
13− node.replace(decode_cloudflare_email(node['data-cfemail']))
14− end
15−
1612 # Remove code highlighting
1713 css('figure').each do |node|
1814 node.name = 'pre'
lib/docs/filters/yarn/clean_html.rb+0−4
@@ -43,10 +43,6 @@ module Docs · 42 unmodified lines
4343 end
4444 end
4545
46− css('.__cf_email__').each do |node|
47− node.replace(decode_cloudflare_email(node['data-cfemail']))
48− end
49−
5046 css('div.highlighter-rouge').each do |node|
5147 node['data-language'] = node['class'][/language-(\w+)/, 1] if node['class']
5248 node.content = node.content.strip
lib/docs/scrapers/ansible.rb+1−1
@@ -7,7 +7,7 @@ module Docs · 6 unmodified lines
77 code: 'https://github.com/ansible/ansible'
88 }
99
10− html_filters.push 'ansible/entries', 'ansible/clean_html', 'sphinx/clean_html'
10+ html_filters.push 'ansible/entries', 'sphinx/clean_html', 'parse_cf_email'
1111
1212 options[:skip] = %w(
1313 glossary.html
lib/docs/scrapers/bootstrap.rb+2−0
@@ -15,6 +15,8 @@ module Docs · 14 unmodified lines
1515 Documentation licensed under the Creative Commons Attribution License v3.0.
1616 HTML
1717
18+ html_filters.push 'parse_cf_email'
19+
1820 version '4' do
1921 self.release = '4.0.0'
2022 self.base_url = 'https://getbootstrap.com/docs/4.0/'
lib/docs/scrapers/flow.rb+1−1
@@ -8,7 +8,7 @@ module Docs · 7 unmodified lines
88 code: 'https://github.com/facebook/flow'
99 }
1010
11− html_filters.push 'flow/entries', 'flow/clean_html', 'title'
11+ html_filters.push 'flow/entries', 'flow/clean_html', 'title', 'parse_cf_email'
1212
1313 options[:trailing_slash] = false
1414 options[:root_title] = 'Flow'
lib/docs/scrapers/laravel.rb+1−1
@@ -7,7 +7,7 @@ module Docs · 6 unmodified lines
77 code: 'https://github.com/laravel/laravel'
88 }
99
10− html_filters.push 'laravel/entries', 'laravel/clean_html'
10+ html_filters.push 'laravel/entries', 'laravel/clean_html', 'parse_cf_email'
1111
1212 options[:container] = ->(filter) {
1313 filter.subpath.start_with?('/api') ? '#content' : '.docs-wrapper'
lib/docs/scrapers/node.rb+1−1
@@ -8,7 +8,7 @@ module Docs · 7 unmodified lines
88 code: 'https://github.com/nodejs/node'
99 }
1010
11− html_filters.push 'node/clean_html', 'node/entries', 'title'
11+ html_filters.push 'node/clean_html', 'node/entries', 'title', 'parse_cf_email'
1212
1313 options[:title] = false
1414 options[:root_title] = 'Node.js'
lib/docs/scrapers/vue.rb+1−1
@@ -8,7 +8,7 @@ module Docs · 7 unmodified lines
88 code: 'https://github.com/vuejs/vue'
99 }
1010
11− html_filters.push 'vue/entries', 'vue/clean_html'
11+ html_filters.push 'vue/entries', 'vue/clean_html', 'parse_cf_email'
1212
1313 options[:only_patterns] = [/guide\//, /api\//]
1414 options[:skip] = %w(guide/team.html)
lib/docs/scrapers/yarn.rb+1−1
@@ -8,7 +8,7 @@ module Docs · 7 unmodified lines
88 code: 'https://github.com/yarnpkg/yarn'
99 }
1010
11− html_filters.push 'yarn/entries', 'yarn/clean_html', 'title'
11+ html_filters.push 'yarn/entries', 'yarn/clean_html', 'title', 'parse_cf_email'
1212
1313 options[:root_title] = 'Yarn'
1414 options[:trailing_slash] = false