html2odt 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Rakefile +1 -0
- data/html2odt.gemspec +1 -1
- data/lib/html2odt/document.rb +46 -12
- data/lib/html2odt/image.rb +2 -1
- data/lib/html2odt/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6e392a2bb293ff1f5ddade2b2584369040903a6
|
4
|
+
data.tar.gz: a95aa2ca695d94b779ea9357cdc9a282871e1a52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6bd769ca10d9cb05d365da4fc37dced0136b5509e94ff21e527ae50f920cb3c470cc4031e4b534856ff5d86ab96f402f6abe88f9df77da12ae07052c989f6ee0
|
7
|
+
data.tar.gz: 201dc464672f62141c80486f8a6984e89f56d793829936eedfe23c97b5e6eb86187bf56d2febbf0273c1eda938414a92b90c64ec59c7594e77709ed5e8634f46
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
data/html2odt.gemspec
CHANGED
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.12"
|
27
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
28
28
|
spec.add_development_dependency "minitest", "~> 5.0"
|
29
|
-
spec.add_development_dependency "
|
29
|
+
spec.add_development_dependency "fakeweb", "~> 1.3"
|
30
30
|
end
|
data/lib/html2odt/document.rb
CHANGED
@@ -17,6 +17,7 @@ class Html2Odt::Document
|
|
17
17
|
def initialize(template: Html2Odt::ODT_TEMPLATE, html: nil)
|
18
18
|
@html = html
|
19
19
|
@template = template
|
20
|
+
@base_uri = nil
|
20
21
|
|
21
22
|
read_xmls
|
22
23
|
end
|
@@ -246,13 +247,8 @@ class Html2Odt::Document
|
|
246
247
|
def fix_document_structure(html)
|
247
248
|
doc = Nokogiri::HTML::DocumentFragment.parse(html)
|
248
249
|
|
249
|
-
#
|
250
|
-
|
251
|
-
doc.css("code").select { |code| code.ancestors("p, pre").empty? }.each do |code|
|
252
|
-
p = create_node(doc, "p")
|
253
|
-
code.add_next_sibling(p)
|
254
|
-
p.add_child(code)
|
255
|
-
end
|
250
|
+
# Removing undesired elements
|
251
|
+
doc.css("script, object, embed, iframe, style, link, map, area").remove
|
256
252
|
|
257
253
|
# XHTML2ODT cannot handle <br> within <pre> tags properly, replacing them
|
258
254
|
# with new lines should have the same side effects.
|
@@ -260,9 +256,46 @@ class Html2Odt::Document
|
|
260
256
|
br.replace("\n")
|
261
257
|
end
|
262
258
|
|
259
|
+
# XHTML2ODT cannot handle inline nodes without containing block elements, so
|
260
|
+
# we're wrapping anything, that's a top-level inline element or text node
|
261
|
+
# into a newly created p tag, trying to join all sibling inline elements
|
262
|
+
# into a single paragraph.
|
263
|
+
children = doc.children.to_a
|
264
|
+
|
265
|
+
previous = nil
|
266
|
+
while !children.empty?
|
267
|
+
child = children.shift
|
268
|
+
if inline_node?(child)
|
269
|
+
if previous
|
270
|
+
previous.add_child(child)
|
271
|
+
elsif child.element? or child.text !~ /\A\s*\z/
|
272
|
+
p = create_node(doc, "p")
|
273
|
+
child.add_next_sibling(p)
|
274
|
+
p.add_child(child)
|
275
|
+
|
276
|
+
previous = p
|
277
|
+
end
|
278
|
+
else
|
279
|
+
previous = nil
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
|
263
284
|
doc.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML)
|
264
285
|
end
|
265
286
|
|
287
|
+
def inline_node? node
|
288
|
+
return true if node.text?
|
289
|
+
|
290
|
+
# https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements
|
291
|
+
[
|
292
|
+
"b", "big", "i", "small", "tt", "abbr", "acronym", "cite", "code", "dfn",
|
293
|
+
"em", "kbd", "strong", "samp", "time", "var", "a", "bdo", "br", "img",
|
294
|
+
"map", "object", "q", "script", "span", "sub", "sup", "button", "input",
|
295
|
+
"label", "select", "textarea"
|
296
|
+
].include?(node.name)
|
297
|
+
end
|
298
|
+
|
266
299
|
def fix_links(html)
|
267
300
|
doc = Nokogiri::HTML::DocumentFragment.parse(html)
|
268
301
|
|
@@ -364,18 +397,19 @@ class Html2Odt::Document
|
|
364
397
|
end
|
365
398
|
|
366
399
|
def uri_to_file(uri)
|
367
|
-
file = Tempfile.new("html2odt")
|
368
|
-
file.binmode
|
369
|
-
|
370
400
|
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
|
371
401
|
resp = http.get(uri.path)
|
372
402
|
|
403
|
+
return nil unless resp.is_a?(Net::HTTPSuccess)
|
404
|
+
|
405
|
+
file = Tempfile.new("html2odt")
|
406
|
+
file.binmode
|
407
|
+
|
373
408
|
file.write(resp.body)
|
374
409
|
file.flush
|
410
|
+
|
375
411
|
file
|
376
412
|
end
|
377
|
-
|
378
|
-
file
|
379
413
|
rescue
|
380
414
|
# Could not fetch remote image
|
381
415
|
#
|
data/lib/html2odt/image.rb
CHANGED
data/lib/html2odt/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html2odt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregor Schmidt (Planio)
|
@@ -95,19 +95,19 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '5.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: fakeweb
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ~>
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '1.3'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '1.3'
|
111
111
|
description: html2odt generates ODT documents based on HTML fragments using xhtml2odt
|
112
112
|
email:
|
113
113
|
- gregor@plan.io
|