wovnrb 0.2.28 → 0.2.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/wovnrb.rb +9 -5
- data/lib/wovnrb/lang.rb +17 -2
- data/lib/wovnrb/version.rb +1 -1
- data/test/lib/lang_test.rb +28 -0
- data/test/lib/wovnrb_test.rb +5 -1
- data/test/test_helper.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f15715b5f8a8d0d3bb58c2d8a86a915353d9cb7c
|
4
|
+
data.tar.gz: 0bb121940678dbc50aa0beb7f9b5839f35935844
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c51823510261c6a2d97ec201285f9eda6f51927e883f017815b48ddaf5c989b7776f670bc4c23599bbdfa5be2a46d33b60e72717d274072725898965b5062645
|
7
|
+
data.tar.gz: 01e7f5d664b053574da8a78a86c363ad23556f4e7e443ffc05998ffb2ae1fc7feea1f706cb8b376920522aaff9b44085a08316757e1c2ff41510a0295c9cd958
|
data/lib/wovnrb.rb
CHANGED
@@ -95,16 +95,13 @@ module Wovnrb
|
|
95
95
|
if ignore_all || !d.xpath('//html[@wovn-ignore]').empty? || is_amp_page?(d)
|
96
96
|
ignore_all = true
|
97
97
|
output = d.to_html.gsub(/href="([^"]*)"/) { |m| "href=\"#{URI.decode($1)}\"" }
|
98
|
+
put_back_noscripts!(output, noscripts)
|
98
99
|
new_body.push(output)
|
99
100
|
next
|
100
101
|
end
|
101
102
|
|
102
103
|
output = lang.switch_dom_lang(d, @store, values, url, headers)
|
103
|
-
|
104
|
-
noscripts.each_with_index do |noscript, index|
|
105
|
-
noscript_identifier = "<noscript wovn-id=\"#{index}\"></noscript>"
|
106
|
-
output.sub!(noscript_identifier, noscript)
|
107
|
-
end
|
104
|
+
put_back_noscripts!(output, noscripts)
|
108
105
|
new_body.push(output)
|
109
106
|
end
|
110
107
|
body.close if body.respond_to?(:close)
|
@@ -113,6 +110,13 @@ module Wovnrb
|
|
113
110
|
|
114
111
|
private
|
115
112
|
|
113
|
+
def put_back_noscripts!(output, noscripts)
|
114
|
+
noscripts.each_with_index do |noscript, index|
|
115
|
+
noscript_identifier = "<noscript wovn-id=\"#{index}\"></noscript>"
|
116
|
+
output.sub!(noscript_identifier, noscript)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
116
120
|
# Checks if a given HTML body is an Accelerated Mobile Page (AMP).
|
117
121
|
# To do so, it looks at the required attributes for the HTML tag:
|
118
122
|
# https://www.ampproject.org/docs/tutorials/create/basic_markup.
|
data/lib/wovnrb/lang.rb
CHANGED
@@ -89,7 +89,7 @@ module Wovnrb
|
|
89
89
|
# in the future, perhaps validate url rather than using begin rescue
|
90
90
|
# "#{url =~ /\// ? 'http:' : ''}#{url}" =~ URI::regexp
|
91
91
|
begin
|
92
|
-
uri = URI(href)
|
92
|
+
uri = Addressable::URI.parse(href)
|
93
93
|
rescue
|
94
94
|
return new_href
|
95
95
|
end
|
@@ -164,10 +164,25 @@ module Wovnrb
|
|
164
164
|
(dom.at_css('html') || dom.at_css('HTML')).set_attribute('lang', Lang::iso_639_1_normalization(@lang_code))
|
165
165
|
end
|
166
166
|
|
167
|
-
|
167
|
+
index_href = index_href_for_encoding_and_decoding(dom)
|
168
|
+
# NOTE: when we use `#to_html` with nokogiri, nokogiri encode all href.
|
169
|
+
# but we want to keep original href as much as possible.
|
170
|
+
# That's why we replace href with original href which added lang info by wovnrb like this after we used `to_html`
|
171
|
+
dom.to_html.gsub(/href="([^"]*)"/) { |m| "href=\"#{index_href[$1] || $1}\"" }
|
168
172
|
end
|
169
173
|
|
170
174
|
private
|
175
|
+
|
176
|
+
def index_href_for_encoding_and_decoding(dom)
|
177
|
+
result = {}
|
178
|
+
dom.xpath('//*[@href]').each do |a_tag|
|
179
|
+
url = a_tag['href']
|
180
|
+
encoded_url = Addressable::URI.parse(url).normalize.to_s
|
181
|
+
result[encoded_url] = url if encoded_url != url
|
182
|
+
end
|
183
|
+
result
|
184
|
+
end
|
185
|
+
|
171
186
|
def replace_dom_values(dom, values, store, url, headers)
|
172
187
|
text_index = values['text_vals'] || {}
|
173
188
|
src_index = values['img_vals'] || {}
|
data/lib/wovnrb/version.rb
CHANGED
data/test/lib/lang_test.rb
CHANGED
@@ -583,5 +583,33 @@ module Wovnrb
|
|
583
583
|
h = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://favy.tips'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
|
584
584
|
assert_equal("http://staging-fr.favy.tips/topics/50", lang.add_lang_code("/topics/50", 'subdomain', h))
|
585
585
|
end
|
586
|
+
|
587
|
+
def test_switch_dom_lang_for_keeping_originl_encoding_decoding
|
588
|
+
lang = Lang.new('ja')
|
589
|
+
header = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings)
|
590
|
+
html = <<-HTML
|
591
|
+
<head>
|
592
|
+
<link rel="stylesheet" type="text/css" href="%3Ca%3E%E3%81%B5%E3%82%86%3C%2Fa%3E/theme.css">
|
593
|
+
<link rel="stylesheet" type="text/css" href="テスト.css">
|
594
|
+
</head>
|
595
|
+
<ul>
|
596
|
+
<li><a href="http://page.com/%e5%ba%83%e5%b0%be">encoded japanese path</a></li>
|
597
|
+
<li><a href="http://page.com/テスト/DxA9J">no encoded japanese path</a></li>
|
598
|
+
<li><a href="http://page.com/#DnE897">decoded invalid path</a></li>
|
599
|
+
<li><a href="http://page.com/%23DnE897">encoded invalid path</a>
|
600
|
+
</ul>
|
601
|
+
HTML
|
602
|
+
|
603
|
+
dom = Wovnrb.to_dom(html)
|
604
|
+
url = header.url
|
605
|
+
|
606
|
+
swapped_body = lang.switch_dom_lang(dom, Store.instance, generate_values, url, header)
|
607
|
+
assert(swapped_body.include?('<link rel="stylesheet" type="text/css" href="%3Ca%3E%E3%81%B5%E3%82%86%3C%2Fa%3E/theme.css">'))
|
608
|
+
assert(swapped_body.include?('<link rel="stylesheet" type="text/css" href="テスト.css">'))
|
609
|
+
assert(swapped_body.include?('<a href="http://page.com/ja/%e5%ba%83%e5%b0%be">encoded japanese path</a>'))
|
610
|
+
assert(swapped_body.include?('<a href="http://page.com/ja/テスト/DxA9J">no encoded japanese path</a>'))
|
611
|
+
assert(swapped_body.include?('<a href="http://page.com/ja/#DnE897">decoded invalid path</a>'))
|
612
|
+
assert(swapped_body.include?('<a href="http://page.com/ja/%23DnE897">encoded invalid path</a>'))
|
613
|
+
end
|
586
614
|
end
|
587
615
|
end
|
data/test/lib/wovnrb_test.rb
CHANGED
@@ -112,6 +112,7 @@ class WovnrbTest < Minitest::Test
|
|
112
112
|
headers = Wovnrb::Headers.new(Wovnrb.get_env('url' => 'http://page.com'), Wovnrb.get_settings('url_pattern' => 'subdomain', 'url_pattern_reg' => '^(?<lang>[^.]+).'))
|
113
113
|
body = <<HTML
|
114
114
|
<html amp>
|
115
|
+
<head><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript></head>
|
115
116
|
<body>
|
116
117
|
<h1>Mr. Belvedere Fan Club</h1>
|
117
118
|
<div><p>Hello</p></div>
|
@@ -120,7 +121,10 @@ class WovnrbTest < Minitest::Test
|
|
120
121
|
HTML
|
121
122
|
expected_body = <<HTML
|
122
123
|
<html amp="">
|
123
|
-
<head
|
124
|
+
<head>
|
125
|
+
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
|
126
|
+
<noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
|
127
|
+
</head>
|
124
128
|
<body>
|
125
129
|
<h1>Mr. Belvedere Fan Club</h1>
|
126
130
|
<div><p>Hello</p></div>
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wovnrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Sandford
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-12-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogumbo
|
@@ -423,3 +423,4 @@ test_files:
|
|
423
423
|
- test/lib/wovnrb_test.rb
|
424
424
|
- test/services/url_test.rb
|
425
425
|
- test/test_helper.rb
|
426
|
+
has_rdoc:
|