jekyll 3.9.3 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +511 -89
- data/LICENSE +1 -1
- data/README.markdown +48 -27
- data/lib/blank_template/_config.yml +3 -0
- data/lib/blank_template/_layouts/default.html +12 -0
- data/lib/blank_template/_sass/base.scss +9 -0
- data/lib/blank_template/assets/css/main.scss +4 -0
- data/lib/blank_template/index.md +8 -0
- data/lib/jekyll/cache.rb +186 -0
- data/lib/jekyll/cleaner.rb +8 -7
- data/lib/jekyll/collection.rb +84 -11
- data/lib/jekyll/command.rb +33 -6
- data/lib/jekyll/commands/build.rb +8 -28
- data/lib/jekyll/commands/clean.rb +3 -2
- data/lib/jekyll/commands/doctor.rb +46 -35
- data/lib/jekyll/commands/help.rb +1 -1
- data/lib/jekyll/commands/new.rb +44 -50
- data/lib/jekyll/commands/new_theme.rb +27 -28
- data/lib/jekyll/commands/serve/live_reload_reactor.rb +9 -16
- data/lib/jekyll/commands/serve/servlet.rb +21 -22
- data/lib/jekyll/commands/serve/websockets.rb +1 -1
- data/lib/jekyll/commands/serve.rb +75 -97
- data/lib/jekyll/configuration.rb +66 -158
- data/lib/jekyll/converters/identity.rb +18 -0
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +83 -33
- data/lib/jekyll/converters/markdown.rb +49 -40
- data/lib/jekyll/converters/smartypants.rb +34 -14
- data/lib/jekyll/convertible.rb +36 -34
- data/lib/jekyll/deprecator.rb +2 -4
- data/lib/jekyll/document.rb +107 -72
- data/lib/jekyll/drops/collection_drop.rb +3 -4
- data/lib/jekyll/drops/document_drop.rb +9 -3
- data/lib/jekyll/drops/drop.rb +115 -33
- data/lib/jekyll/drops/excerpt_drop.rb +8 -0
- data/lib/jekyll/drops/site_drop.rb +9 -8
- data/lib/jekyll/drops/static_file_drop.rb +4 -4
- data/lib/jekyll/drops/theme_drop.rb +39 -0
- data/lib/jekyll/drops/unified_payload_drop.rb +7 -2
- data/lib/jekyll/drops/url_drop.rb +55 -3
- data/lib/jekyll/entry_filter.rb +42 -51
- data/lib/jekyll/excerpt.rb +48 -38
- data/lib/jekyll/external.rb +20 -19
- data/lib/jekyll/filters/date_filters.rb +6 -3
- data/lib/jekyll/filters/grouping_filters.rb +1 -2
- data/lib/jekyll/filters/url_filters.rb +50 -15
- data/lib/jekyll/filters.rb +211 -50
- data/lib/jekyll/frontmatter_defaults.rb +45 -36
- data/lib/jekyll/hooks.rb +26 -26
- data/lib/jekyll/inclusion.rb +32 -0
- data/lib/jekyll/layout.rb +12 -19
- data/lib/jekyll/liquid_extensions.rb +0 -2
- data/lib/jekyll/liquid_renderer/file.rb +24 -3
- data/lib/jekyll/liquid_renderer/table.rb +26 -77
- data/lib/jekyll/liquid_renderer.rb +31 -16
- data/lib/jekyll/log_adapter.rb +5 -1
- data/lib/jekyll/page.rb +51 -23
- data/lib/jekyll/page_excerpt.rb +25 -0
- data/lib/jekyll/page_without_a_file.rb +0 -4
- data/lib/jekyll/path_manager.rb +74 -0
- data/lib/jekyll/plugin.rb +5 -11
- data/lib/jekyll/plugin_manager.rb +15 -5
- data/lib/jekyll/profiler.rb +51 -0
- data/lib/jekyll/reader.rb +65 -10
- data/lib/jekyll/readers/collection_reader.rb +1 -0
- data/lib/jekyll/readers/data_reader.rb +48 -10
- data/lib/jekyll/readers/layout_reader.rb +3 -12
- data/lib/jekyll/readers/page_reader.rb +5 -5
- data/lib/jekyll/readers/post_reader.rb +32 -19
- data/lib/jekyll/readers/static_file_reader.rb +4 -4
- data/lib/jekyll/readers/theme_assets_reader.rb +8 -5
- data/lib/jekyll/regenerator.rb +4 -12
- data/lib/jekyll/related_posts.rb +1 -1
- data/lib/jekyll/renderer.rb +34 -49
- data/lib/jekyll/site.rb +151 -58
- data/lib/jekyll/static_file.rb +64 -28
- data/lib/jekyll/stevenson.rb +4 -8
- data/lib/jekyll/tags/highlight.rb +44 -57
- data/lib/jekyll/tags/include.rb +114 -80
- data/lib/jekyll/tags/link.rb +12 -7
- data/lib/jekyll/tags/post_url.rb +33 -30
- data/lib/jekyll/theme.rb +20 -18
- data/lib/jekyll/theme_builder.rb +91 -89
- data/lib/jekyll/url.rb +18 -10
- data/lib/jekyll/utils/ansi.rb +2 -2
- data/lib/jekyll/utils/exec.rb +0 -1
- data/lib/jekyll/utils/internet.rb +2 -4
- data/lib/jekyll/utils/platforms.rb +37 -52
- data/lib/jekyll/utils/thread_event.rb +1 -5
- data/lib/jekyll/utils.rb +29 -28
- data/lib/jekyll/version.rb +1 -1
- data/lib/jekyll.rb +9 -14
- data/lib/site_template/.gitignore +2 -0
- data/lib/site_template/404.html +2 -1
- data/lib/site_template/_config.yml +17 -5
- data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +5 -1
- data/lib/theme_template/README.md.erb +1 -3
- data/lib/theme_template/gitignore.erb +1 -0
- data/lib/theme_template/theme.gemspec.erb +1 -4
- data/rubocop/jekyll/assert_equal_literal_actual.rb +150 -0
- data/rubocop/jekyll/no_p_allowed.rb +5 -6
- data/rubocop/jekyll/no_puts_allowed.rb +5 -6
- metadata +149 -37
- data/lib/jekyll/converters/markdown/rdiscount_parser.rb +0 -37
- data/lib/jekyll/converters/markdown/redcarpet_parser.rb +0 -112
- data/lib/jekyll/utils/rouge.rb +0 -22
- /data/lib/site_template/{about.md → about.markdown} +0 -0
- /data/lib/site_template/{index.md → index.markdown} +0 -0
data/lib/jekyll/regenerator.rb
CHANGED
|
@@ -21,6 +21,7 @@ module Jekyll
|
|
|
21
21
|
# Returns a boolean.
|
|
22
22
|
def regenerate?(document)
|
|
23
23
|
return true if disabled
|
|
24
|
+
|
|
24
25
|
case document
|
|
25
26
|
when Page
|
|
26
27
|
regenerate_page?(document)
|
|
@@ -28,9 +29,7 @@ module Jekyll
|
|
|
28
29
|
regenerate_document?(document)
|
|
29
30
|
else
|
|
30
31
|
source_path = document.respond_to?(:path) ? document.path : nil
|
|
31
|
-
dest_path = if document.respond_to?(:destination)
|
|
32
|
-
document.destination(@site.dest)
|
|
33
|
-
end
|
|
32
|
+
dest_path = document.destination(@site.dest) if document.respond_to?(:destination)
|
|
34
33
|
source_modified_or_dest_missing?(source_path, dest_path)
|
|
35
34
|
end
|
|
36
35
|
end
|
|
@@ -89,9 +88,7 @@ module Jekyll
|
|
|
89
88
|
return true if path.nil?
|
|
90
89
|
|
|
91
90
|
# Check for path in cache
|
|
92
|
-
if cache.key? path
|
|
93
|
-
return cache[path]
|
|
94
|
-
end
|
|
91
|
+
return cache[path] if cache.key? path
|
|
95
92
|
|
|
96
93
|
if metadata[path]
|
|
97
94
|
# If we have seen this file before,
|
|
@@ -165,7 +162,6 @@ module Jekyll
|
|
|
165
162
|
end
|
|
166
163
|
end
|
|
167
164
|
|
|
168
|
-
private
|
|
169
165
|
def regenerate_page?(document)
|
|
170
166
|
document.asset_file? || document.data["regenerate"] ||
|
|
171
167
|
source_modified_or_dest_missing?(
|
|
@@ -173,7 +169,6 @@ module Jekyll
|
|
|
173
169
|
)
|
|
174
170
|
end
|
|
175
171
|
|
|
176
|
-
private
|
|
177
172
|
def regenerate_document?(document)
|
|
178
173
|
!document.write? || document.data["regenerate"] ||
|
|
179
174
|
source_modified_or_dest_missing?(
|
|
@@ -181,14 +176,11 @@ module Jekyll
|
|
|
181
176
|
)
|
|
182
177
|
end
|
|
183
178
|
|
|
184
|
-
private
|
|
185
179
|
def existing_file_modified?(path)
|
|
186
180
|
# If one of this file dependencies have been modified,
|
|
187
181
|
# set the regeneration bit for both the dependency and the file to true
|
|
188
182
|
metadata[path]["deps"].each do |dependency|
|
|
189
|
-
if modified?(dependency)
|
|
190
|
-
return cache[dependency] = cache[path] = true
|
|
191
|
-
end
|
|
183
|
+
return cache[dependency] = cache[path] = true if modified?(dependency)
|
|
192
184
|
end
|
|
193
185
|
|
|
194
186
|
if File.exist?(path) && metadata[path]["mtime"].eql?(File.mtime(path))
|
data/lib/jekyll/related_posts.rb
CHANGED
data/lib/jekyll/renderer.rb
CHANGED
|
@@ -9,6 +9,7 @@ module Jekyll
|
|
|
9
9
|
@site = site
|
|
10
10
|
@document = document
|
|
11
11
|
@payload = site_payload
|
|
12
|
+
@layouts = nil
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Fetches the payload used in Liquid rendering.
|
|
@@ -35,7 +36,7 @@ module Jekyll
|
|
|
35
36
|
#
|
|
36
37
|
# Returns Array of Converter instances.
|
|
37
38
|
def converters
|
|
38
|
-
@converters ||= site.converters.select { |c| c.matches(document.extname) }.sort
|
|
39
|
+
@converters ||= site.converters.select { |c| c.matches(document.extname) }.tap(&:sort!)
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
# Determine the extname the outputted file should have
|
|
@@ -65,7 +66,7 @@ module Jekyll
|
|
|
65
66
|
# Render the document.
|
|
66
67
|
#
|
|
67
68
|
# Returns String rendered document output
|
|
68
|
-
# rubocop: disable AbcSize
|
|
69
|
+
# rubocop: disable Metrics/AbcSize, Metrics/MethodLength
|
|
69
70
|
def render_document
|
|
70
71
|
info = {
|
|
71
72
|
:registers => { :site => site, :page => payload["page"] },
|
|
@@ -83,6 +84,10 @@ module Jekyll
|
|
|
83
84
|
output = convert(output.to_s)
|
|
84
85
|
document.content = output
|
|
85
86
|
|
|
87
|
+
Jekyll.logger.debug "Post-Convert Hooks:", document.relative_path
|
|
88
|
+
document.trigger_hooks(:post_convert)
|
|
89
|
+
output = document.content
|
|
90
|
+
|
|
86
91
|
if document.place_in_layout?
|
|
87
92
|
Jekyll.logger.debug "Rendering Layout:", document.relative_path
|
|
88
93
|
output = place_in_layouts(output, payload, info)
|
|
@@ -90,22 +95,20 @@ module Jekyll
|
|
|
90
95
|
|
|
91
96
|
output
|
|
92
97
|
end
|
|
93
|
-
# rubocop: enable AbcSize
|
|
98
|
+
# rubocop: enable Metrics/AbcSize, Metrics/MethodLength
|
|
94
99
|
|
|
95
100
|
# Convert the document using the converters which match this renderer's document.
|
|
96
101
|
#
|
|
97
102
|
# Returns String the converted content.
|
|
98
103
|
def convert(content)
|
|
99
104
|
converters.reduce(content) do |output, converter|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
raise e
|
|
108
|
-
end
|
|
105
|
+
converter.convert output
|
|
106
|
+
rescue StandardError => e
|
|
107
|
+
Jekyll.logger.error "Conversion error:",
|
|
108
|
+
"#{converter.class} encountered an error while " \
|
|
109
|
+
"converting '#{document.relative_path}':"
|
|
110
|
+
Jekyll.logger.error("", e.to_s)
|
|
111
|
+
raise e
|
|
109
112
|
end
|
|
110
113
|
end
|
|
111
114
|
|
|
@@ -121,16 +124,16 @@ module Jekyll
|
|
|
121
124
|
template = site.liquid_renderer.file(path).parse(content)
|
|
122
125
|
template.warnings.each do |e|
|
|
123
126
|
Jekyll.logger.warn "Liquid Warning:",
|
|
124
|
-
|
|
127
|
+
LiquidRenderer.format_error(e, path || document.relative_path)
|
|
125
128
|
end
|
|
126
129
|
template.render!(payload, info)
|
|
127
|
-
# rubocop: disable RescueException
|
|
130
|
+
# rubocop: disable Lint/RescueException
|
|
128
131
|
rescue Exception => e
|
|
129
132
|
Jekyll.logger.error "Liquid Exception:",
|
|
130
|
-
|
|
133
|
+
LiquidRenderer.format_error(e, path || document.relative_path)
|
|
131
134
|
raise e
|
|
132
135
|
end
|
|
133
|
-
# rubocop: enable RescueException
|
|
136
|
+
# rubocop: enable Lint/RescueException
|
|
134
137
|
|
|
135
138
|
# Checks if the layout specified in the document actually exists
|
|
136
139
|
#
|
|
@@ -158,36 +161,30 @@ module Jekyll
|
|
|
158
161
|
output = render_layout(output, layout, info)
|
|
159
162
|
add_regenerator_dependencies(layout)
|
|
160
163
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
next unless (layout = site.layouts[layout.data["layout"]])
|
|
165
|
+
break if used.include?(layout)
|
|
166
|
+
|
|
167
|
+
used << layout
|
|
165
168
|
end
|
|
166
169
|
output
|
|
167
170
|
end
|
|
168
171
|
|
|
172
|
+
private
|
|
173
|
+
|
|
169
174
|
# Checks if the layout specified in the document actually exists
|
|
170
175
|
#
|
|
171
176
|
# layout - the layout to check
|
|
172
177
|
# Returns nothing
|
|
173
|
-
private
|
|
174
178
|
def validate_layout(layout)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
"in #{document.relative_path} does not exist."
|
|
180
|
-
)
|
|
181
|
-
elsif !layout.nil?
|
|
182
|
-
layout_source = layout.path.start_with?(site.source) ? :site : :theme
|
|
183
|
-
Jekyll.logger.debug "Layout source:", layout_source
|
|
184
|
-
end
|
|
179
|
+
return unless invalid_layout?(layout)
|
|
180
|
+
|
|
181
|
+
Jekyll.logger.warn "Build Warning:", "Layout '#{document.data["layout"]}' requested " \
|
|
182
|
+
"in #{document.relative_path} does not exist."
|
|
185
183
|
end
|
|
186
184
|
|
|
187
185
|
# Render layout content into document.output
|
|
188
186
|
#
|
|
189
187
|
# Returns String rendered content
|
|
190
|
-
private
|
|
191
188
|
def render_layout(output, layout, info)
|
|
192
189
|
payload["content"] = output
|
|
193
190
|
payload["layout"] = Utils.deep_merge_hashes(layout.data, payload["layout"] || {})
|
|
@@ -196,13 +193,13 @@ module Jekyll
|
|
|
196
193
|
layout.content,
|
|
197
194
|
payload,
|
|
198
195
|
info,
|
|
199
|
-
layout.
|
|
196
|
+
layout.path
|
|
200
197
|
)
|
|
201
198
|
end
|
|
202
199
|
|
|
203
|
-
private
|
|
204
200
|
def add_regenerator_dependencies(layout)
|
|
205
201
|
return unless document.write?
|
|
202
|
+
|
|
206
203
|
site.regenerator.add_dependency(
|
|
207
204
|
site.in_source_dir(document.path),
|
|
208
205
|
layout.path
|
|
@@ -212,18 +209,14 @@ module Jekyll
|
|
|
212
209
|
# Set page content to payload and assign pager if document has one.
|
|
213
210
|
#
|
|
214
211
|
# Returns nothing
|
|
215
|
-
private
|
|
216
212
|
def assign_pages!
|
|
217
213
|
payload["page"] = document.to_liquid
|
|
218
|
-
payload["paginator"] = if document.respond_to?(:pager)
|
|
219
|
-
document.pager.to_liquid
|
|
220
|
-
end
|
|
214
|
+
payload["paginator"] = (document.pager.to_liquid if document.respond_to?(:pager))
|
|
221
215
|
end
|
|
222
216
|
|
|
223
217
|
# Set related posts to payload if document is a post.
|
|
224
218
|
#
|
|
225
219
|
# Returns nothing
|
|
226
|
-
private
|
|
227
220
|
def assign_current_document!
|
|
228
221
|
payload["site"].current_document = document
|
|
229
222
|
end
|
|
@@ -231,21 +224,16 @@ module Jekyll
|
|
|
231
224
|
# Set highlighter prefix and suffix
|
|
232
225
|
#
|
|
233
226
|
# Returns nothing
|
|
234
|
-
private
|
|
235
227
|
def assign_highlighter_options!
|
|
236
228
|
payload["highlighter_prefix"] = converters.first.highlighter_prefix
|
|
237
229
|
payload["highlighter_suffix"] = converters.first.highlighter_suffix
|
|
238
230
|
end
|
|
239
231
|
|
|
240
|
-
private
|
|
241
232
|
def assign_layout_data!
|
|
242
233
|
layout = layouts[document.data["layout"]]
|
|
243
|
-
if layout
|
|
244
|
-
payload["layout"] = Utils.deep_merge_hashes(layout.data, payload["layout"] || {})
|
|
245
|
-
end
|
|
234
|
+
payload["layout"] = Utils.deep_merge_hashes(layout.data, payload["layout"] || {}) if layout
|
|
246
235
|
end
|
|
247
236
|
|
|
248
|
-
private
|
|
249
237
|
def permalink_ext
|
|
250
238
|
document_permalink = document.permalink
|
|
251
239
|
if document_permalink && !document_permalink.end_with?("/")
|
|
@@ -254,7 +242,6 @@ module Jekyll
|
|
|
254
242
|
end
|
|
255
243
|
end
|
|
256
244
|
|
|
257
|
-
private
|
|
258
245
|
def converter_output_ext
|
|
259
246
|
if output_exts.size == 1
|
|
260
247
|
output_exts.last
|
|
@@ -263,14 +250,12 @@ module Jekyll
|
|
|
263
250
|
end
|
|
264
251
|
end
|
|
265
252
|
|
|
266
|
-
private
|
|
267
253
|
def output_exts
|
|
268
254
|
@output_exts ||= converters.map do |c|
|
|
269
255
|
c.output_ext(document.extname)
|
|
270
|
-
end.compact
|
|
256
|
+
end.tap(&:compact!)
|
|
271
257
|
end
|
|
272
258
|
|
|
273
|
-
private
|
|
274
259
|
def liquid_options
|
|
275
260
|
@liquid_options ||= site.config["liquid"]
|
|
276
261
|
end
|