jekyll 4.0.0.pre.beta1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +204 -18
- data/README.markdown +2 -6
- data/lib/blank_template/_layouts/default.html +1 -1
- data/lib/jekyll.rb +6 -17
- data/lib/jekyll/cleaner.rb +3 -3
- data/lib/jekyll/collection.rb +2 -2
- data/lib/jekyll/command.rb +4 -2
- data/lib/jekyll/commands/doctor.rb +19 -15
- data/lib/jekyll/commands/new.rb +4 -4
- data/lib/jekyll/commands/new_theme.rb +0 -2
- data/lib/jekyll/commands/serve.rb +12 -1
- data/lib/jekyll/configuration.rb +18 -19
- data/lib/jekyll/converters/identity.rb +2 -2
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +70 -1
- data/lib/jekyll/convertible.rb +30 -23
- data/lib/jekyll/document.rb +41 -19
- data/lib/jekyll/drops/collection_drop.rb +3 -3
- data/lib/jekyll/drops/document_drop.rb +4 -3
- data/lib/jekyll/drops/drop.rb +98 -20
- data/lib/jekyll/drops/site_drop.rb +3 -3
- data/lib/jekyll/drops/static_file_drop.rb +4 -4
- data/lib/jekyll/drops/url_drop.rb +11 -3
- data/lib/jekyll/entry_filter.rb +18 -7
- data/lib/jekyll/excerpt.rb +1 -1
- data/lib/jekyll/filters.rb +112 -28
- data/lib/jekyll/filters/url_filters.rb +45 -15
- data/lib/jekyll/frontmatter_defaults.rb +14 -19
- data/lib/jekyll/hooks.rb +22 -21
- data/lib/jekyll/inclusion.rb +32 -0
- data/lib/jekyll/layout.rb +5 -0
- data/lib/jekyll/liquid_renderer.rb +18 -15
- data/lib/jekyll/liquid_renderer/file.rb +10 -0
- data/lib/jekyll/liquid_renderer/table.rb +1 -64
- data/lib/jekyll/page.rb +42 -11
- data/lib/jekyll/page_excerpt.rb +25 -0
- data/lib/jekyll/path_manager.rb +53 -10
- data/lib/jekyll/profiler.rb +58 -0
- data/lib/jekyll/reader.rb +11 -6
- data/lib/jekyll/readers/collection_reader.rb +1 -0
- data/lib/jekyll/readers/data_reader.rb +4 -0
- data/lib/jekyll/readers/layout_reader.rb +1 -0
- data/lib/jekyll/readers/page_reader.rb +1 -0
- data/lib/jekyll/readers/post_reader.rb +2 -1
- data/lib/jekyll/readers/static_file_reader.rb +1 -0
- data/lib/jekyll/readers/theme_assets_reader.rb +1 -0
- data/lib/jekyll/related_posts.rb +1 -1
- data/lib/jekyll/renderer.rb +15 -17
- data/lib/jekyll/site.rb +34 -10
- data/lib/jekyll/static_file.rb +17 -12
- data/lib/jekyll/tags/include.rb +82 -33
- data/lib/jekyll/tags/link.rb +2 -1
- data/lib/jekyll/tags/post_url.rb +3 -4
- data/lib/jekyll/theme.rb +6 -8
- data/lib/jekyll/url.rb +8 -5
- data/lib/jekyll/utils.rb +5 -5
- data/lib/jekyll/utils/platforms.rb +34 -49
- data/lib/jekyll/utils/win_tz.rb +1 -1
- data/lib/jekyll/version.rb +1 -1
- data/lib/theme_template/theme.gemspec.erb +1 -4
- metadata +34 -39
data/lib/jekyll/command.rb
CHANGED
@@ -67,6 +67,8 @@ module Jekyll
|
|
67
67
|
cmd.option "show_drafts", "-D", "--drafts", "Render posts in the _drafts folder"
|
68
68
|
cmd.option "unpublished", "--unpublished",
|
69
69
|
"Render posts that were marked as unpublished"
|
70
|
+
cmd.option "disable_disk_cache", "--disable-disk-cache",
|
71
|
+
"Disable caching to disk in non-safe mode"
|
70
72
|
cmd.option "quiet", "-q", "--quiet", "Silence output."
|
71
73
|
cmd.option "verbose", "-V", "--verbose", "Print verbose output."
|
72
74
|
cmd.option "incremental", "-I", "--incremental", "Enable incremental rebuild."
|
@@ -84,7 +86,7 @@ module Jekyll
|
|
84
86
|
# klass - an array of Jekyll::Command subclasses associated with the command
|
85
87
|
#
|
86
88
|
# Note that all exceptions are rescued..
|
87
|
-
# rubocop: disable RescueException
|
89
|
+
# rubocop: disable Lint/RescueException
|
88
90
|
def process_with_graceful_fail(cmd, options, *klass)
|
89
91
|
klass.each { |k| k.process(options) if k.respond_to?(:process) }
|
90
92
|
rescue Exception => e
|
@@ -97,7 +99,7 @@ module Jekyll
|
|
97
99
|
Jekyll.logger.error "", " for any additional information or backtrace. "
|
98
100
|
Jekyll.logger.abort_with "", dashes
|
99
101
|
end
|
100
|
-
# rubocop: enable RescueException
|
102
|
+
# rubocop: enable Lint/RescueException
|
101
103
|
end
|
102
104
|
end
|
103
105
|
end
|
@@ -67,15 +67,16 @@ module Jekyll
|
|
67
67
|
|
68
68
|
def conflicting_urls(site)
|
69
69
|
conflicting_urls = false
|
70
|
-
|
71
|
-
urls = collect_urls(urls, site.pages, site.dest)
|
72
|
-
urls = collect_urls(urls, site.posts.docs, site.dest)
|
73
|
-
urls.each do |url, paths|
|
70
|
+
destination_map(site).each do |dest, paths|
|
74
71
|
next unless paths.size > 1
|
75
72
|
|
76
73
|
conflicting_urls = true
|
77
|
-
Jekyll.logger.warn "Conflict:",
|
78
|
-
|
74
|
+
Jekyll.logger.warn "Conflict:",
|
75
|
+
"The following destination is shared by multiple files."
|
76
|
+
Jekyll.logger.warn "", "The written file may end up with unexpected contents."
|
77
|
+
Jekyll.logger.warn "", dest.to_s.cyan
|
78
|
+
paths.each { |path| Jekyll.logger.warn "", " - #{path}" }
|
79
|
+
Jekyll.logger.warn ""
|
79
80
|
end
|
80
81
|
conflicting_urls
|
81
82
|
end
|
@@ -84,7 +85,7 @@ module Jekyll
|
|
84
85
|
return true unless Utils::Platforms.osx?
|
85
86
|
|
86
87
|
if Dir.pwd != `pwd`.strip
|
87
|
-
Jekyll.logger.error
|
88
|
+
Jekyll.logger.error <<~STR
|
88
89
|
We have detected that there might be trouble using fsevent on your
|
89
90
|
operating system, you can read https://github.com/thibaudgg/rb-fsevent/wiki/no-fsevents-fired-(OSX-bug)
|
90
91
|
for possible work arounds or you can work around it immediately
|
@@ -122,16 +123,19 @@ module Jekyll
|
|
122
123
|
|
123
124
|
private
|
124
125
|
|
125
|
-
def
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
126
|
+
def destination_map(site)
|
127
|
+
{}.tap do |result|
|
128
|
+
site.each_site_file do |thing|
|
129
|
+
next if allow_used_permalink?(thing)
|
130
|
+
|
131
|
+
dest_path = thing.destination(site.dest)
|
132
|
+
(result[dest_path] ||= []) << thing.path
|
132
133
|
end
|
133
134
|
end
|
134
|
-
|
135
|
+
end
|
136
|
+
|
137
|
+
def allow_used_permalink?(item)
|
138
|
+
defined?(JekyllRedirectFrom) && item.is_a?(JekyllRedirectFrom::RedirectPage)
|
135
139
|
end
|
136
140
|
|
137
141
|
def case_insensitive_urls(things, destination)
|
data/lib/jekyll/commands/new.rb
CHANGED
@@ -80,24 +80,24 @@ module Jekyll
|
|
80
80
|
# Happy Jekylling!
|
81
81
|
gem "jekyll", "~> #{Jekyll::VERSION}"
|
82
82
|
# This is the default theme for new Jekyll sites. You may change this to anything you like.
|
83
|
-
gem "minima", "~> 2.
|
83
|
+
gem "minima", "~> 2.5"
|
84
84
|
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
85
85
|
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
86
86
|
# gem "github-pages", group: :jekyll_plugins
|
87
87
|
# If you have any plugins, put them here!
|
88
88
|
group :jekyll_plugins do
|
89
|
-
gem "jekyll-feed", "~> 0.
|
89
|
+
gem "jekyll-feed", "~> 0.12"
|
90
90
|
end
|
91
91
|
|
92
92
|
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
93
93
|
# and associated library.
|
94
|
-
|
94
|
+
platforms :mingw, :x64_mingw, :mswin, :jruby do
|
95
95
|
gem "tzinfo", "~> 1.2"
|
96
96
|
gem "tzinfo-data"
|
97
97
|
end
|
98
98
|
|
99
99
|
# Performance-booster for watching directories on Windows
|
100
|
-
gem "wdm", "~> 0.1.1", :
|
100
|
+
gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
|
101
101
|
|
102
102
|
RUBY
|
103
103
|
end
|
@@ -20,7 +20,6 @@ module Jekyll
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# rubocop:disable Metrics/AbcSize
|
24
23
|
def process(args, opts)
|
25
24
|
if !args || args.empty?
|
26
25
|
raise Jekyll::Errors::InvalidThemeName, "You must specify a theme name."
|
@@ -35,7 +34,6 @@ module Jekyll
|
|
35
34
|
" is ready for you in #{theme.path.to_s.cyan}!"
|
36
35
|
Jekyll.logger.info "For help getting started, read #{theme.path}/README.md."
|
37
36
|
end
|
38
|
-
# rubocop:enable Metrics/AbcSize
|
39
37
|
end
|
40
38
|
end
|
41
39
|
end
|
@@ -249,6 +249,9 @@ module Jekyll
|
|
249
249
|
|
250
250
|
def default_url(opts)
|
251
251
|
config = configuration_from_options(opts)
|
252
|
+
auth = config.values_at("host", "port").join(":")
|
253
|
+
return config["url"] if auth == "127.0.0.1:4000"
|
254
|
+
|
252
255
|
format_url(
|
253
256
|
config["ssl_cert"] && config["ssl_key"],
|
254
257
|
config["host"] == "127.0.0.1" ? "localhost" : config["host"],
|
@@ -307,7 +310,15 @@ module Jekyll
|
|
307
310
|
require "webrick/https"
|
308
311
|
|
309
312
|
opts[:SSLCertificate] = OpenSSL::X509::Certificate.new(read_file(src, cert))
|
310
|
-
|
313
|
+
begin
|
314
|
+
opts[:SSLPrivateKey] = OpenSSL::PKey::RSA.new(read_file(src, key))
|
315
|
+
rescue StandardError
|
316
|
+
if defined?(OpenSSL::PKey::EC)
|
317
|
+
opts[:SSLPrivateKey] = OpenSSL::PKey::EC.new(read_file(src, key))
|
318
|
+
else
|
319
|
+
raise
|
320
|
+
end
|
321
|
+
end
|
311
322
|
opts[:SSLEnable] = true
|
312
323
|
end
|
313
324
|
|
data/lib/jekyll/configuration.rb
CHANGED
@@ -4,7 +4,7 @@ module Jekyll
|
|
4
4
|
class Configuration < Hash
|
5
5
|
# Default options. Overridden by values in _config.yml.
|
6
6
|
# Strings rather than symbols are used for compatibility with YAML.
|
7
|
-
DEFAULTS =
|
7
|
+
DEFAULTS = {
|
8
8
|
# Where things are
|
9
9
|
"source" => Dir.pwd,
|
10
10
|
"destination" => File.join(Dir.pwd, "_site"),
|
@@ -66,7 +66,7 @@ module Jekyll
|
|
66
66
|
|
67
67
|
"kramdown" => {
|
68
68
|
"auto_ids" => true,
|
69
|
-
"toc_levels" =>
|
69
|
+
"toc_levels" => (1..6).to_a,
|
70
70
|
"entity_output" => "as_char",
|
71
71
|
"smart_quotes" => "lsquo,rsquo,ldquo,rdquo",
|
72
72
|
"input" => "GFM",
|
@@ -75,7 +75,7 @@ module Jekyll
|
|
75
75
|
"footnote_nr" => 1,
|
76
76
|
"show_warnings" => false,
|
77
77
|
},
|
78
|
-
}.
|
78
|
+
}.each_with_object(Configuration.new) { |(k, v), hsh| hsh[k] = v.freeze }.freeze
|
79
79
|
|
80
80
|
class << self
|
81
81
|
# Static: Produce a Configuration ready for use in a Site.
|
@@ -94,7 +94,7 @@ module Jekyll
|
|
94
94
|
#
|
95
95
|
# Return a copy of the hash where all its keys are strings
|
96
96
|
def stringify_keys
|
97
|
-
|
97
|
+
each_with_object({}) { |(k, v), hsh| hsh[k.to_s] = v }
|
98
98
|
end
|
99
99
|
|
100
100
|
def get_config_value_with_override(config_key, override)
|
@@ -235,7 +235,9 @@ module Jekyll
|
|
235
235
|
|
236
236
|
# Ensure we have a hash.
|
237
237
|
if config["collections"].is_a?(Array)
|
238
|
-
config["collections"] =
|
238
|
+
config["collections"] = config["collections"].each_with_object({}) do |collection, hash|
|
239
|
+
hash[collection] = {}
|
240
|
+
end
|
239
241
|
end
|
240
242
|
|
241
243
|
config["collections"] = Utils.deep_merge_hashes(
|
@@ -267,21 +269,18 @@ module Jekyll
|
|
267
269
|
|
268
270
|
private
|
269
271
|
|
272
|
+
STYLE_TO_PERMALINK = {
|
273
|
+
:none => "/:categories/:title:output_ext",
|
274
|
+
:date => "/:categories/:year/:month/:day/:title:output_ext",
|
275
|
+
:ordinal => "/:categories/:year/:y_day/:title:output_ext",
|
276
|
+
:pretty => "/:categories/:year/:month/:day/:title/",
|
277
|
+
:weekdate => "/:categories/:year/W:week/:short_day/:title:output_ext",
|
278
|
+
}.freeze
|
279
|
+
|
280
|
+
private_constant :STYLE_TO_PERMALINK
|
281
|
+
|
270
282
|
def style_to_permalink(permalink_style)
|
271
|
-
|
272
|
-
when :pretty
|
273
|
-
"/:categories/:year/:month/:day/:title/"
|
274
|
-
when :none
|
275
|
-
"/:categories/:title:output_ext"
|
276
|
-
when :date
|
277
|
-
"/:categories/:year/:month/:day/:title:output_ext"
|
278
|
-
when :ordinal
|
279
|
-
"/:categories/:year/:y_day/:title:output_ext"
|
280
|
-
when :weekdate
|
281
|
-
"/:categories/:year/W:week/:short_day/:title:output_ext"
|
282
|
-
else
|
283
|
-
permalink_style.to_s
|
284
|
-
end
|
283
|
+
STYLE_TO_PERMALINK[permalink_style.to_sym] || permalink_style.to_s
|
285
284
|
end
|
286
285
|
|
287
286
|
def check_include_exclude(config)
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
module Converters
|
5
|
-
#
|
5
|
+
# Identity converter. Returns same content as given.
|
6
6
|
# For more info on converters see https://jekyllrb.com/docs/plugins/converters/
|
7
7
|
class Identity < Converter
|
8
8
|
safe true
|
@@ -12,7 +12,7 @@ module Jekyll
|
|
12
12
|
# Public: Does the given extension match this converter's list of acceptable extensions?
|
13
13
|
# Takes one argument: the file's extension (including the dot).
|
14
14
|
#
|
15
|
-
#
|
15
|
+
# _ext - The String extension to check (not relevant here)
|
16
16
|
#
|
17
17
|
# Returns true since it always matches.
|
18
18
|
def matches(_ext)
|
@@ -1,5 +1,73 @@
|
|
1
1
|
# Frozen-string-literal: true
|
2
2
|
|
3
|
+
module Kramdown
|
4
|
+
# A Kramdown::Document subclass meant to optimize memory usage from initializing
|
5
|
+
# a kramdown document for parsing.
|
6
|
+
#
|
7
|
+
# The optimization is by using the same options Hash (and its derivatives) for
|
8
|
+
# converting all Markdown documents in a Jekyll site.
|
9
|
+
class JekyllDocument < Document
|
10
|
+
class << self
|
11
|
+
attr_reader :options, :parser
|
12
|
+
|
13
|
+
# The implementation is basically the core logic in +Kramdown::Document#initialize+
|
14
|
+
#
|
15
|
+
# rubocop:disable Naming/MemoizedInstanceVariableName
|
16
|
+
def setup(options)
|
17
|
+
@cache ||= {}
|
18
|
+
|
19
|
+
# reset variables on a subsequent set up with a different options Hash
|
20
|
+
unless @cache[:id] == options.hash
|
21
|
+
@options = @parser = nil
|
22
|
+
@cache[:id] = options.hash
|
23
|
+
end
|
24
|
+
|
25
|
+
@options ||= Options.merge(options).freeze
|
26
|
+
@parser ||= begin
|
27
|
+
parser_name = (@options[:input] || "kramdown").to_s
|
28
|
+
parser_name = parser_name[0..0].upcase + parser_name[1..-1]
|
29
|
+
try_require("parser", parser_name)
|
30
|
+
|
31
|
+
if Parser.const_defined?(parser_name)
|
32
|
+
Parser.const_get(parser_name)
|
33
|
+
else
|
34
|
+
raise Kramdown::Error, "kramdown has no parser to handle the specified " \
|
35
|
+
"input format: #{@options[:input]}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
# rubocop:enable Naming/MemoizedInstanceVariableName
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def try_require(type, name)
|
44
|
+
require "kramdown/#{type}/#{Utils.snake_case(name)}"
|
45
|
+
rescue LoadError
|
46
|
+
false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def initialize(source, options = {})
|
51
|
+
JekyllDocument.setup(options)
|
52
|
+
|
53
|
+
@options = JekyllDocument.options
|
54
|
+
@root, @warnings = JekyllDocument.parser.parse(source, @options)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Use Kramdown::Converter::Html class to convert this document into HTML.
|
58
|
+
#
|
59
|
+
# The implementation is basically an optimized version of core logic in
|
60
|
+
# +Kramdown::Document#method_missing+ from kramdown-2.1.0.
|
61
|
+
def to_html
|
62
|
+
output, warnings = Kramdown::Converter::Html.convert(@root, @options)
|
63
|
+
@warnings.concat(warnings)
|
64
|
+
output
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
#
|
70
|
+
|
3
71
|
module Jekyll
|
4
72
|
module Converters
|
5
73
|
class Markdown
|
@@ -31,13 +99,14 @@ module Jekyll
|
|
31
99
|
def setup
|
32
100
|
@config["syntax_highlighter"] ||= highlighter
|
33
101
|
@config["syntax_highlighter_opts"] ||= {}
|
102
|
+
@config["syntax_highlighter_opts"]["default_lang"] ||= "plaintext"
|
34
103
|
@config["syntax_highlighter_opts"]["guess_lang"] = @config["guess_lang"]
|
35
104
|
@config["coderay"] ||= {} # XXX: Legacy.
|
36
105
|
modernize_coderay_config
|
37
106
|
end
|
38
107
|
|
39
108
|
def convert(content)
|
40
|
-
document = Kramdown::
|
109
|
+
document = Kramdown::JekyllDocument.new(content, @config)
|
41
110
|
html_output = document.to_html
|
42
111
|
if @config["show_warnings"]
|
43
112
|
document.warnings.each do |warning|
|
data/lib/jekyll/convertible.rb
CHANGED
@@ -35,13 +35,13 @@ module Jekyll
|
|
35
35
|
# Returns nothing.
|
36
36
|
# rubocop:disable Metrics/AbcSize
|
37
37
|
def read_yaml(base, name, opts = {})
|
38
|
-
filename =
|
38
|
+
filename = @path || site.in_source_dir(base, name)
|
39
|
+
Jekyll.logger.debug "Reading:", relative_path
|
39
40
|
|
40
41
|
begin
|
41
|
-
self.content = File.read(
|
42
|
-
Utils.merged_file_read_opts(site, opts))
|
42
|
+
self.content = File.read(filename, **Utils.merged_file_read_opts(site, opts))
|
43
43
|
if content =~ Document::YAML_FRONT_MATTER_REGEXP
|
44
|
-
self.content =
|
44
|
+
self.content = Regexp.last_match.post_match
|
45
45
|
self.data = SafeYAML.load(Regexp.last_match(1))
|
46
46
|
end
|
47
47
|
rescue Psych::SyntaxError => e
|
@@ -69,7 +69,7 @@ module Jekyll
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def validate_permalink!(filename)
|
72
|
-
if self.data["permalink"]
|
72
|
+
if self.data["permalink"] == ""
|
73
73
|
raise Errors::InvalidPermalinkError, "Invalid permalink in #{filename}"
|
74
74
|
end
|
75
75
|
end
|
@@ -78,7 +78,7 @@ module Jekyll
|
|
78
78
|
#
|
79
79
|
# Returns the transformed contents.
|
80
80
|
def transform
|
81
|
-
|
81
|
+
renderer.convert(content)
|
82
82
|
end
|
83
83
|
|
84
84
|
# Determine the extension depending on content_type.
|
@@ -86,7 +86,7 @@ module Jekyll
|
|
86
86
|
# Returns the String extension for the output file.
|
87
87
|
# e.g. ".html" for an HTML output file.
|
88
88
|
def output_ext
|
89
|
-
|
89
|
+
renderer.output_ext
|
90
90
|
end
|
91
91
|
|
92
92
|
# Determine which converter to use based on this convertible's
|
@@ -94,7 +94,7 @@ module Jekyll
|
|
94
94
|
#
|
95
95
|
# Returns the Converter instance.
|
96
96
|
def converters
|
97
|
-
|
97
|
+
renderer.converters
|
98
98
|
end
|
99
99
|
|
100
100
|
# Render Liquid in the content
|
@@ -105,18 +105,14 @@ module Jekyll
|
|
105
105
|
#
|
106
106
|
# Returns the converted content
|
107
107
|
def render_liquid(content, payload, info, path)
|
108
|
-
|
108
|
+
renderer.render_liquid(content, payload, info, path)
|
109
109
|
end
|
110
110
|
|
111
111
|
# Convert this Convertible's data to a Hash suitable for use by Liquid.
|
112
112
|
#
|
113
113
|
# Returns the Hash representation of this Convertible.
|
114
114
|
def to_liquid(attrs = nil)
|
115
|
-
further_data =
|
116
|
-
[attribute, send(attribute)]
|
117
|
-
end]
|
118
|
-
|
119
|
-
defaults = site.frontmatter_defaults.all(relative_path, type)
|
115
|
+
further_data = attribute_hash(attrs || self.class::ATTRIBUTES_FOR_LIQUID)
|
120
116
|
Utils.deep_merge_hashes defaults, Utils.deep_merge_hashes(data, further_data)
|
121
117
|
end
|
122
118
|
|
@@ -190,10 +186,10 @@ module Jekyll
|
|
190
186
|
#
|
191
187
|
# Returns nothing
|
192
188
|
def render_all_layouts(layouts, payload, info)
|
193
|
-
|
194
|
-
self.output =
|
189
|
+
renderer.layouts = layouts
|
190
|
+
self.output = renderer.place_in_layouts(output, payload, info)
|
195
191
|
ensure
|
196
|
-
@
|
192
|
+
@renderer = nil # this will allow the modifications above to disappear
|
197
193
|
end
|
198
194
|
|
199
195
|
# Add any necessary layouts to this convertible document.
|
@@ -203,15 +199,15 @@ module Jekyll
|
|
203
199
|
#
|
204
200
|
# Returns nothing.
|
205
201
|
def do_layout(payload, layouts)
|
206
|
-
self.output =
|
207
|
-
|
208
|
-
|
202
|
+
self.output = renderer.tap do |doc_renderer|
|
203
|
+
doc_renderer.layouts = layouts
|
204
|
+
doc_renderer.payload = payload
|
209
205
|
end.run
|
210
206
|
|
211
207
|
Jekyll.logger.debug "Post-Render Hooks:", relative_path
|
212
208
|
Jekyll::Hooks.trigger hook_owner, :post_render, self
|
213
209
|
ensure
|
214
|
-
@
|
210
|
+
@renderer = nil # this will allow the modifications above to disappear
|
215
211
|
end
|
216
212
|
|
217
213
|
# Write the generated page file to the destination directory.
|
@@ -240,10 +236,21 @@ module Jekyll
|
|
240
236
|
end
|
241
237
|
end
|
242
238
|
|
239
|
+
def renderer
|
240
|
+
@renderer ||= Jekyll::Renderer.new(site, self)
|
241
|
+
end
|
242
|
+
|
243
243
|
private
|
244
244
|
|
245
|
-
def
|
246
|
-
@
|
245
|
+
def defaults
|
246
|
+
@defaults ||= site.frontmatter_defaults.all(relative_path, type)
|
247
|
+
end
|
248
|
+
|
249
|
+
def attribute_hash(attrs)
|
250
|
+
@attribute_hash ||= {}
|
251
|
+
@attribute_hash[attrs] ||= attrs.each_with_object({}) do |attribute, hsh|
|
252
|
+
hsh[attribute] = send(attribute)
|
253
|
+
end
|
247
254
|
end
|
248
255
|
|
249
256
|
def no_layout?
|