jekyll-pdf 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/jekyll/pdf/document.rb +27 -27
- data/lib/jekyll/pdf/generator.rb +2 -2
- data/lib/jekyll/pdf/partial.rb +29 -27
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0f8bd549af93a1701ca9536fe0ff023c65226ad
|
4
|
+
data.tar.gz: eb4af933b53461dd4560dd0ca2a7c5022cb0216e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8003730882c935204be9e2069a0b9706cd04f91c19daccc5e50c9ce9cd9c5b47436703449c0113a84f9ce5bafe08fe51769a3507e7b26d429523d726fc94110c
|
7
|
+
data.tar.gz: 1afb93d28dc6978a01f2502339ef319d203c59fb7d042b256c197b6d041f021b260aab1f76907f78771e4a5852b3569c0fdea4d2efed77129f0f300d0e8e5ce0
|
data/README.md
CHANGED
@@ -99,7 +99,7 @@ For asset URLs in CSS files we recommend creating a separate CSS file overriding
|
|
99
99
|
|
100
100
|
## To Do
|
101
101
|
|
102
|
-
- Remove
|
102
|
+
- Remove PDFKit Dependency
|
103
103
|
- Write tests (rspec)
|
104
104
|
- Package default PDF layout file in Gem
|
105
105
|
- Support layouts in partials
|
data/lib/jekyll/pdf/document.rb
CHANGED
@@ -1,99 +1,99 @@
|
|
1
1
|
require 'pdfkit'
|
2
|
-
|
2
|
+
|
3
3
|
module Jekyll
|
4
4
|
module PDF
|
5
5
|
class Document < Jekyll::Page
|
6
6
|
include Helper
|
7
|
-
|
7
|
+
|
8
8
|
def initialize(site, base, page)
|
9
9
|
@site = site
|
10
10
|
@base = base
|
11
11
|
@dir = File.dirname(page.url)
|
12
12
|
@name = File.basename(page.url, File.extname(page.url)) + ".pdf"
|
13
|
-
@settings = site.config['pdf'] || {}
|
13
|
+
@settings = site.config['pdf'].clone || {}
|
14
14
|
@partials = ['cover','header_html','footer_html']
|
15
|
-
|
15
|
+
|
16
16
|
self.process(@name)
|
17
17
|
self.data = page.data.clone
|
18
18
|
self.content = page.content.clone
|
19
|
-
|
19
|
+
|
20
20
|
# Set layout to the PDF layout
|
21
21
|
self.data['layout'] = layout
|
22
|
-
|
22
|
+
|
23
23
|
# Get PDF settings from the layouts
|
24
24
|
Jekyll::Utils.deep_merge_hashes!(@settings, self.getConfig(self.data))
|
25
|
-
|
25
|
+
|
26
26
|
PDFKit.configure do |config|
|
27
27
|
config.verbose = site.config['verbose']
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
# Set pdf_url variable in the source page (for linking to the PDF version)
|
31
31
|
page.data['pdf_url'] = self.url
|
32
|
-
|
32
|
+
|
33
33
|
# Set html_url variable in the source page (for linking to the HTML version)
|
34
34
|
self.data['html_url'] = page.url
|
35
|
-
|
35
|
+
|
36
36
|
# create the partial objects
|
37
37
|
@partials.each do |partial|
|
38
38
|
@settings[partial] = Jekyll::PDF::Partial.new(self, @settings[partial]) if @settings[partial] != nil
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
# Recursively merge settings from the page, layout, site config & jekyll-pdf defaults
|
43
43
|
# todo: use jekyll's merge function
|
44
44
|
def getConfig(data)
|
45
45
|
settings = data['pdf'].is_a?(Hash) ? data['pdf'] : {}
|
46
46
|
layout = @site.layouts[data['layout']].data.clone if data['layout'] != nil
|
47
|
-
|
47
|
+
|
48
48
|
# No parent layout found - return settings hash
|
49
49
|
return settings if layout == nil
|
50
|
-
|
50
|
+
|
51
51
|
# Merge settings with parent layout settings
|
52
52
|
layout['pdf'] ||= {}
|
53
53
|
Jekyll::Utils.deep_merge_hashes!(layout['pdf'], settings)
|
54
|
-
|
54
|
+
|
55
55
|
return self.getConfig(layout)
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def write(dest_prefix, dest_suffix = nil)
|
59
59
|
self.render(@site.layouts, @site.site_payload) if self.output == nil
|
60
|
-
|
60
|
+
|
61
61
|
path = File.join(dest_prefix, CGI.unescape(self.url))
|
62
62
|
dest = File.dirname(path)
|
63
|
-
|
63
|
+
|
64
64
|
# Create directory
|
65
65
|
FileUtils.mkdir_p(dest) unless File.exist?(dest)
|
66
|
-
|
66
|
+
|
67
67
|
# write partials
|
68
68
|
@partials.each do |partial|
|
69
69
|
@settings[partial].write if @settings[partial] != nil
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
# Debugging - create html version of PDF
|
73
73
|
File.open("#{path}.html", 'w') {|f| f.write(self.output) } if @settings["debug"]
|
74
74
|
@settings.delete("debug")
|
75
|
-
|
75
|
+
|
76
76
|
# Build PDF file
|
77
77
|
fix_relative_paths
|
78
78
|
kit = PDFKit.new(self.output, @settings)
|
79
79
|
file = kit.to_file(path)
|
80
|
-
|
80
|
+
|
81
81
|
#self.output = kit.to_pdf
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
def layout()
|
85
85
|
# Set page layout to the PDF layout
|
86
86
|
layout = self.data['pdf_layout'] || @settings['layout']
|
87
|
-
|
87
|
+
|
88
88
|
# Check if a PDF version exists for the current layout (e.g. layout_pdf)
|
89
89
|
if layout == nil && self.data['layout'] != nil && File.exist?("_layouts/" + self.data['layout'] + "_pdf.html")
|
90
|
-
layout = self.data['layout'] + "_pdf"
|
90
|
+
layout = self.data['layout'] + "_pdf"
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
layout || 'pdf'
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
end
|
97
|
-
|
97
|
+
|
98
98
|
end
|
99
99
|
end
|
data/lib/jekyll/pdf/generator.rb
CHANGED
@@ -3,7 +3,7 @@ module Jekyll
|
|
3
3
|
class Generator < Jekyll::Generator
|
4
4
|
safe true
|
5
5
|
priority :lowest
|
6
|
-
|
6
|
+
|
7
7
|
def generate(site)
|
8
8
|
# Loop through pages & documents and build PDFs
|
9
9
|
[site.pages, site.documents].each do |items|
|
@@ -12,7 +12,7 @@ module Jekyll
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/jekyll/pdf/partial.rb
CHANGED
@@ -5,16 +5,17 @@ module Jekyll
|
|
5
5
|
module PDF
|
6
6
|
class Partial
|
7
7
|
extend Forwardable
|
8
|
-
|
8
|
+
include Helper
|
9
|
+
|
9
10
|
attr_accessor :doc
|
10
11
|
attr_accessor :partial
|
11
12
|
attr_accessor :write
|
12
13
|
attr_accessor :content, :ext
|
13
14
|
attr_writer :output
|
14
|
-
|
15
|
+
|
15
16
|
def_delegators :@doc, :site, :name, :ext, :relative_path, :extname,
|
16
17
|
:render_with_liquid?, :collection, :related_posts
|
17
|
-
|
18
|
+
|
18
19
|
# Initialize this Partial instance.
|
19
20
|
#
|
20
21
|
# doc - The Document.
|
@@ -25,7 +26,7 @@ module Jekyll
|
|
25
26
|
self.partial = partial
|
26
27
|
self.content = build_partial(partial)
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
# Fetch YAML front-matter data from related doc, without layout key
|
30
31
|
#
|
31
32
|
# Returns Hash of doc data
|
@@ -34,97 +35,98 @@ module Jekyll
|
|
34
35
|
@data.delete("layout")
|
35
36
|
@data
|
36
37
|
end
|
37
|
-
|
38
|
+
|
38
39
|
def trigger_hooks(*)
|
39
40
|
end
|
40
|
-
|
41
|
+
|
41
42
|
def path
|
42
43
|
File.join(doc.path, partial)
|
43
44
|
end
|
44
|
-
|
45
|
+
|
45
46
|
def id
|
46
47
|
File.basename(path, File.extname(path)) + "-" + Digest::MD5.hexdigest(to_s) + File.extname(path)
|
47
48
|
end
|
48
|
-
|
49
|
+
|
49
50
|
# Returns the cache directory
|
50
51
|
def dir
|
51
52
|
@dir ||= cache_dir
|
52
53
|
end
|
53
|
-
|
54
|
+
|
54
55
|
def to_s
|
55
56
|
output || content
|
56
57
|
end
|
57
|
-
|
58
|
+
|
58
59
|
def to_liquid
|
59
60
|
doc.data[partial] = nil
|
60
61
|
@to_liquid ||= doc.to_liquid
|
61
62
|
doc.data[partial] = self
|
62
63
|
@to_liquid
|
63
64
|
end
|
64
|
-
|
65
|
+
|
65
66
|
# Returns the shorthand String identifier of this doc.
|
66
67
|
def inspect
|
67
68
|
"<Partial: #{self.id}>"
|
68
69
|
end
|
69
|
-
|
70
|
+
|
70
71
|
def output
|
71
72
|
@output ||= Renderer.new(doc.site, self, site.site_payload).run
|
72
73
|
end
|
73
|
-
|
74
|
+
|
74
75
|
# generate temp file & set output to it's path
|
75
76
|
def write
|
76
77
|
tempfile = File.absolute_path(File.join(dir, id))
|
77
78
|
unless File.exist?(tempfile)
|
78
79
|
FileUtils.mkdir_p(File.dirname(tempfile)) unless File.exist?(File.dirname(tempfile))
|
80
|
+
fix_relative_paths
|
79
81
|
File.open(tempfile, 'w') {|f| f.write(to_s) }
|
80
82
|
end
|
81
83
|
@output = tempfile
|
82
|
-
|
84
|
+
|
83
85
|
# store path for cleanup
|
84
86
|
site.data[:jekyll_pdf_partials] ||= []
|
85
87
|
site.data[:jekyll_pdf_partials] << "#{self}"
|
86
88
|
end
|
87
|
-
|
89
|
+
|
88
90
|
def place_in_layout?
|
89
91
|
false
|
90
92
|
end
|
91
|
-
|
93
|
+
|
92
94
|
protected
|
93
|
-
|
95
|
+
|
94
96
|
def cache_dir
|
95
97
|
return site.config["pdf"]["cache"] if site.config["pdf"] != nil && site.config["pdf"].has_key?('cache')
|
96
|
-
|
98
|
+
|
97
99
|
# Use jekyll-assets cache directory if it exists
|
98
100
|
cache_dir = site.config["assets"]["cache"] || '.asset-cache' if site.config["assets"] != nil
|
99
|
-
|
101
|
+
|
100
102
|
File.join(cache_dir || Dir.tmpdir(), 'pdf')
|
101
103
|
end
|
102
|
-
|
104
|
+
|
103
105
|
# Internal: Generate partial html
|
104
106
|
#
|
105
107
|
# Partials are rendered same time as content is rendered.
|
106
108
|
#
|
107
109
|
# Returns partial html String
|
108
110
|
def build_partial(path)
|
109
|
-
|
111
|
+
|
110
112
|
# vars to insert into partial
|
111
113
|
vars = ['frompage','topage','page','webpage','section','subsection','subsubsection']
|
112
114
|
doc.data["pdf"] = {}
|
113
115
|
vars.each { |var| doc.data["pdf"][var] = "<span class='__#{var}'></span>" }
|
114
|
-
|
116
|
+
|
115
117
|
# JavaScript to replace var placeholders with content
|
116
118
|
script = "<script>!function(){var t={},n=document.location.search.substring(1).split('&');for(var e in n){var o=n[e].split('=',2);t[o[0]]=decodeURIComponent(o[1])}var n=#{vars};for(var e in n)for(var r=document.getElementsByClassName('__'+n[e]),a=0;a<r.length;++a)r[a].textContent=t[n[e]]}();</script>\n"
|
117
|
-
|
119
|
+
|
118
120
|
# Parse & render
|
119
121
|
content = File.read(File.join("_includes", path))
|
120
|
-
|
122
|
+
|
121
123
|
# Add replacer script to body
|
122
124
|
if content =~ /<\/body>/i
|
123
125
|
content[/(<\/body>)/i] = script + content[/(<\/body>)/i]
|
124
126
|
else
|
125
127
|
Jekyll.logger.warn <<-eos
|
126
128
|
Couldn't find <body> in #{path}. Make sure your partial is a properly formatted HTML document (including DOCTYPE) e.g.
|
127
|
-
|
129
|
+
|
128
130
|
<!DOCTYPE html>
|
129
131
|
<html>
|
130
132
|
<head>
|
@@ -145,9 +147,9 @@ module Jekyll
|
|
145
147
|
</html>
|
146
148
|
}
|
147
149
|
end
|
148
|
-
|
150
|
+
|
149
151
|
content
|
150
|
-
|
152
|
+
|
151
153
|
end
|
152
154
|
end
|
153
155
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Bouqdib
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: wkhtmltopdf-installer
|
@@ -86,8 +86,8 @@ dependencies:
|
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '1.6'
|
89
|
-
description:
|
90
|
-
|
89
|
+
description: " A Jekyll plugin, that allows you to create PDF versions of your
|
90
|
+
pages & documents.\n"
|
91
91
|
email:
|
92
92
|
- adam@abemedia.co.uk
|
93
93
|
executables: []
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
version: '0'
|
126
126
|
requirements: []
|
127
127
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.5.1
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: PDF generator for Jekyll
|