jekyll 4.0.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +48 -19
  3. data/lib/jekyll.rb +3 -0
  4. data/lib/jekyll/collection.rb +1 -1
  5. data/lib/jekyll/command.rb +4 -2
  6. data/lib/jekyll/commands/new.rb +2 -2
  7. data/lib/jekyll/commands/serve.rb +9 -1
  8. data/lib/jekyll/configuration.rb +1 -1
  9. data/lib/jekyll/converters/identity.rb +2 -2
  10. data/lib/jekyll/converters/markdown/kramdown_parser.rb +70 -1
  11. data/lib/jekyll/convertible.rb +15 -15
  12. data/lib/jekyll/document.rb +18 -4
  13. data/lib/jekyll/drops/document_drop.rb +12 -0
  14. data/lib/jekyll/drops/page_drop.rb +18 -0
  15. data/lib/jekyll/drops/url_drop.rb +8 -0
  16. data/lib/jekyll/entry_filter.rb +19 -6
  17. data/lib/jekyll/excerpt.rb +1 -1
  18. data/lib/jekyll/filters.rb +99 -14
  19. data/lib/jekyll/filters/url_filters.rb +41 -14
  20. data/lib/jekyll/frontmatter_defaults.rb +12 -17
  21. data/lib/jekyll/hooks.rb +2 -5
  22. data/lib/jekyll/inclusion.rb +32 -0
  23. data/lib/jekyll/liquid_renderer.rb +18 -15
  24. data/lib/jekyll/liquid_renderer/table.rb +1 -21
  25. data/lib/jekyll/page.rb +43 -0
  26. data/lib/jekyll/page_excerpt.rb +26 -0
  27. data/lib/jekyll/profiler.rb +58 -0
  28. data/lib/jekyll/readers/collection_reader.rb +1 -0
  29. data/lib/jekyll/readers/data_reader.rb +1 -0
  30. data/lib/jekyll/readers/layout_reader.rb +1 -0
  31. data/lib/jekyll/readers/page_reader.rb +1 -0
  32. data/lib/jekyll/readers/post_reader.rb +1 -0
  33. data/lib/jekyll/readers/static_file_reader.rb +1 -0
  34. data/lib/jekyll/readers/theme_assets_reader.rb +1 -0
  35. data/lib/jekyll/renderer.rb +9 -15
  36. data/lib/jekyll/site.rb +14 -5
  37. data/lib/jekyll/static_file.rb +14 -9
  38. data/lib/jekyll/tags/include.rb +58 -3
  39. data/lib/jekyll/theme.rb +6 -0
  40. data/lib/jekyll/utils.rb +4 -4
  41. data/lib/jekyll/utils/win_tz.rb +1 -1
  42. data/lib/jekyll/version.rb +1 -1
  43. data/lib/theme_template/theme.gemspec.erb +1 -4
  44. metadata +14 -31
@@ -4,7 +4,7 @@ module Jekyll
4
4
  class StaticFile
5
5
  extend Forwardable
6
6
 
7
- attr_reader :relative_path, :extname, :name, :data
7
+ attr_reader :relative_path, :extname, :name
8
8
 
9
9
  def_delegator :to_liquid, :to_json, :to_json
10
10
 
@@ -25,7 +25,7 @@ module Jekyll
25
25
  # base - The String path to the <source>.
26
26
  # dir - The String path between <source> and the file.
27
27
  # name - The String filename of the file.
28
- # rubocop: disable ParameterLists
28
+ # rubocop: disable Metrics/ParameterLists
29
29
  def initialize(site, base, dir, name, collection = nil)
30
30
  @site = site
31
31
  @base = base
@@ -34,17 +34,18 @@ module Jekyll
34
34
  @collection = collection
35
35
  @relative_path = File.join(*[@dir, @name].compact)
36
36
  @extname = File.extname(@name)
37
- @data = @site.frontmatter_defaults.all(relative_path, type)
38
37
  end
39
- # rubocop: enable ParameterLists
38
+ # rubocop: enable Metrics/ParameterLists
40
39
 
41
40
  # Returns source file path.
42
41
  def path
43
- # Static file is from a collection inside custom collections directory
44
- if !@collection.nil? && !@site.config["collections_dir"].empty?
45
- File.join(*[@base, @site.config["collections_dir"], @dir, @name].compact)
46
- else
47
- File.join(*[@base, @dir, @name].compact)
42
+ @path ||= begin
43
+ # Static file is from a collection inside custom collections directory
44
+ if !@collection.nil? && !@site.config["collections_dir"].empty?
45
+ File.join(*[@base, @site.config["collections_dir"], @dir, @name].compact)
46
+ else
47
+ File.join(*[@base, @dir, @name].compact)
48
+ end
48
49
  end
49
50
  end
50
51
 
@@ -111,6 +112,10 @@ module Jekyll
111
112
  true
112
113
  end
113
114
 
115
+ def data
116
+ @data ||= @site.frontmatter_defaults.all(relative_path, type)
117
+ end
118
+
114
119
  def to_liquid
115
120
  @to_liquid ||= Drops::StaticFileDrop.new(self)
116
121
  end
@@ -18,12 +18,13 @@ module Jekyll
18
18
 
19
19
  def initialize(tag_name, markup, tokens)
20
20
  super
21
- matched = markup.strip.match(VARIABLE_SYNTAX)
21
+ markup = markup.strip
22
+ matched = markup.match(VARIABLE_SYNTAX)
22
23
  if matched
23
24
  @file = matched["variable"].strip
24
25
  @params = matched["params"].strip
25
26
  else
26
- @file, @params = markup.strip.split(%r!\s+!, 2)
27
+ @file, @params = markup.split(%r!\s+!, 2)
27
28
  end
28
29
  validate_params if @params
29
30
  @tag_name = tag_name
@@ -192,6 +193,60 @@ module Jekyll
192
193
  end
193
194
  end
194
195
 
196
+ # Do not inherit from this class.
197
+ # TODO: Merge into the `Jekyll::Tags::IncludeTag` in v5.0
198
+ class OptimizedIncludeTag < IncludeTag
199
+ def render(context)
200
+ @site ||= context.registers[:site]
201
+
202
+ file = render_variable(context) || @file
203
+ validate_file_name(file)
204
+
205
+ @site.inclusions[file] ||= locate_include_file(file)
206
+ inclusion = @site.inclusions[file]
207
+
208
+ add_include_to_dependency(inclusion, context) if @site.incremental?
209
+
210
+ context.stack do
211
+ context["include"] = parse_params(context) if @params
212
+ inclusion.render(context)
213
+ end
214
+ end
215
+
216
+ private
217
+
218
+ def locate_include_file(file)
219
+ @site.includes_load_paths.each do |dir|
220
+ path = PathManager.join(dir, file)
221
+ return Inclusion.new(@site, dir, file) if valid_include_file?(path, dir)
222
+ end
223
+ raise IOError, could_not_locate_message(file, @site.includes_load_paths, @site.safe)
224
+ end
225
+
226
+ def valid_include_file?(path, dir)
227
+ File.file?(path) && !outside_scope?(path, dir)
228
+ end
229
+
230
+ def outside_scope?(path, dir)
231
+ @site.safe && !realpath_prefixed_with?(path, dir)
232
+ end
233
+
234
+ def realpath_prefixed_with?(path, dir)
235
+ File.realpath(path).start_with?(dir)
236
+ rescue StandardError
237
+ false
238
+ end
239
+
240
+ def add_include_to_dependency(inclusion, context)
241
+ return unless context.registers[:page]&.key?("path")
242
+
243
+ @site.regenerator.add_dependency(
244
+ @site.in_source_dir(context.registers[:page]["path"]),
245
+ inclusion.path
246
+ )
247
+ end
248
+ end
249
+
195
250
  class IncludeRelativeTag < IncludeTag
196
251
  def tag_includes_dirs(context)
197
252
  Array(page_path(context)).freeze
@@ -217,5 +272,5 @@ module Jekyll
217
272
  end
218
273
  end
219
274
 
220
- Liquid::Template.register_tag("include", Jekyll::Tags::IncludeTag)
275
+ Liquid::Template.register_tag("include", Jekyll::Tags::OptimizedIncludeTag)
221
276
  Liquid::Template.register_tag("include_relative", Jekyll::Tags::IncludeRelativeTag)
@@ -4,6 +4,7 @@ module Jekyll
4
4
  class Theme
5
5
  extend Forwardable
6
6
  attr_reader :name
7
+
7
8
  def_delegator :gemspec, :version, :version
8
9
 
9
10
  def initialize(name)
@@ -21,6 +22,11 @@ module Jekyll
21
22
  "or includes a symbolic link loop"
22
23
  end
23
24
 
25
+ # The name of theme directory
26
+ def basename
27
+ @basename ||= File.basename(root)
28
+ end
29
+
24
30
  def includes_path
25
31
  @includes_path ||= path_for "_includes"
26
32
  end
@@ -13,8 +13,8 @@ module Jekyll
13
13
  # Constants for use in #slugify
14
14
  SLUGIFY_MODES = %w(raw default pretty ascii latin).freeze
15
15
  SLUGIFY_RAW_REGEXP = Regexp.new('\\s+').freeze
16
- SLUGIFY_DEFAULT_REGEXP = Regexp.new("[^[:alnum:]]+").freeze
17
- SLUGIFY_PRETTY_REGEXP = Regexp.new("[^[:alnum:]._~!$&'()+,;=@]+").freeze
16
+ SLUGIFY_DEFAULT_REGEXP = Regexp.new("[^\\p{M}\\p{L}\\p{Nd}]+").freeze
17
+ SLUGIFY_PRETTY_REGEXP = Regexp.new("[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+").freeze
18
18
  SLUGIFY_ASCII_REGEXP = Regexp.new("[^[A-Za-z0-9]]+").freeze
19
19
 
20
20
  # Takes a slug and turns it into a simple title.
@@ -136,7 +136,7 @@ module Jekyll
136
136
  # Determines whether a given file has
137
137
  #
138
138
  # Returns true if the YAML front matter is present.
139
- # rubocop: disable PredicateName
139
+ # rubocop: disable Naming/PredicateName
140
140
  def has_yaml_header?(file)
141
141
  File.open(file, "rb", &:readline).match? %r!\A---\s*\r?\n!
142
142
  rescue EOFError
@@ -151,7 +151,7 @@ module Jekyll
151
151
 
152
152
  content.include?("{%") || content.include?("{{")
153
153
  end
154
- # rubocop: enable PredicateName
154
+ # rubocop: enable Naming/PredicateName
155
155
 
156
156
  # Slugify a filename or title.
157
157
  #
@@ -30,7 +30,7 @@ module Jekyll
30
30
  #
31
31
  # Format the hour as a two-digit number.
32
32
  # Establish the minutes based on modulo expression.
33
- hh = format("%02d", absolute_hour(difference).ceil)
33
+ hh = format("%<hour>02d", :hour => absolute_hour(difference).ceil)
34
34
  mm = modulo.zero? ? "00" : "30"
35
35
 
36
36
  Jekyll.logger.debug "Timezone:", "#{timezone} #{offset}#{hh}:#{mm}"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jekyll
4
- VERSION = "4.0.1"
4
+ VERSION = "4.1.0"
5
5
  end
@@ -10,10 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.homepage = "TODO: Put your gem's website or public repo URL here."
11
11
  spec.license = "MIT"
12
12
 
13
- spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r!^(<%= theme_directories.join("|") %>|LICENSE|README)!i) }
13
+ spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r!^(<%= theme_directories.join("|") %>|LICENSE|README|_config\.yml)!i) }
14
14
 
15
15
  spec.add_runtime_dependency "jekyll", "~> <%= jekyll_version_with_minor %>"
16
-
17
- spec.add_development_dependency "bundler", "~> 1.16"
18
- spec.add_development_dependency "rake", "~> 12.0"
19
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2020-05-08 00:00:00.000000000 Z
13
+ date: 2020-05-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -58,22 +58,16 @@ dependencies:
58
58
  name: i18n
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- version: 0.9.5
64
- - - "<"
61
+ - - "~>"
65
62
  - !ruby/object:Gem::Version
66
- version: '2'
63
+ version: '1.0'
67
64
  type: :runtime
68
65
  prerelease: false
69
66
  version_requirements: !ruby/object:Gem::Requirement
70
67
  requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: 0.9.5
74
- - - "<"
68
+ - - "~>"
75
69
  - !ruby/object:Gem::Version
76
- version: '2'
70
+ version: '1.0'
77
71
  - !ruby/object:Gem::Dependency
78
72
  name: jekyll-sass-converter
79
73
  requirement: !ruby/object:Gem::Requirement
@@ -150,14 +144,14 @@ dependencies:
150
144
  requirements:
151
145
  - - "~>"
152
146
  - !ruby/object:Gem::Version
153
- version: 0.3.3
147
+ version: 0.4.0
154
148
  type: :runtime
155
149
  prerelease: false
156
150
  version_requirements: !ruby/object:Gem::Requirement
157
151
  requirements:
158
152
  - - "~>"
159
153
  - !ruby/object:Gem::Version
160
- version: 0.3.3
154
+ version: 0.4.0
161
155
  - !ruby/object:Gem::Dependency
162
156
  name: pathutil
163
157
  requirement: !ruby/object:Gem::Requirement
@@ -263,6 +257,7 @@ files:
263
257
  - lib/jekyll/drops/drop.rb
264
258
  - lib/jekyll/drops/excerpt_drop.rb
265
259
  - lib/jekyll/drops/jekyll_drop.rb
260
+ - lib/jekyll/drops/page_drop.rb
266
261
  - lib/jekyll/drops/site_drop.rb
267
262
  - lib/jekyll/drops/static_file_drop.rb
268
263
  - lib/jekyll/drops/unified_payload_drop.rb
@@ -278,6 +273,7 @@ files:
278
273
  - lib/jekyll/frontmatter_defaults.rb
279
274
  - lib/jekyll/generator.rb
280
275
  - lib/jekyll/hooks.rb
276
+ - lib/jekyll/inclusion.rb
281
277
  - lib/jekyll/layout.rb
282
278
  - lib/jekyll/liquid_extensions.rb
283
279
  - lib/jekyll/liquid_renderer.rb
@@ -286,10 +282,12 @@ files:
286
282
  - lib/jekyll/log_adapter.rb
287
283
  - lib/jekyll/mime.types
288
284
  - lib/jekyll/page.rb
285
+ - lib/jekyll/page_excerpt.rb
289
286
  - lib/jekyll/page_without_a_file.rb
290
287
  - lib/jekyll/path_manager.rb
291
288
  - lib/jekyll/plugin.rb
292
289
  - lib/jekyll/plugin_manager.rb
290
+ - lib/jekyll/profiler.rb
293
291
  - lib/jekyll/publisher.rb
294
292
  - lib/jekyll/reader.rb
295
293
  - lib/jekyll/readers/collection_reader.rb
@@ -347,26 +345,11 @@ homepage: https://jekyllrb.com
347
345
  licenses:
348
346
  - MIT
349
347
  metadata:
348
+ source_code_uri: https://github.com/jekyll/jekyll
350
349
  bug_tracker_uri: https://github.com/jekyll/jekyll/issues
351
350
  changelog_uri: https://github.com/jekyll/jekyll/releases
352
351
  homepage_uri: https://jekyllrb.com
353
- source_code_uri: https://github.com/jekyll/jekyll
354
- post_install_message: |
355
- -------------------------------------------------------------------------------------
356
- Jekyll 4.0 comes with some major changes, notably:
357
-
358
- * Our `link` tag now comes with the `relative_url` filter incorporated into it.
359
- You should no longer prepend `{{ site.baseurl }}` to `{% link foo.md %}`
360
- For further details: https://github.com/jekyll/jekyll/pull/6727
361
-
362
- * Our `post_url` tag now comes with the `relative_url` filter incorporated into it.
363
- You shouldn't prepend `{{ site.baseurl }}` to `{% post_url 2019-03-27-hello %}`
364
- For further details: https://github.com/jekyll/jekyll/pull/7589
365
-
366
- * Support for deprecated configuration options has been removed. We will no longer
367
- output a warning and gracefully assign their values to the newer counterparts
368
- internally.
369
- -------------------------------------------------------------------------------------
352
+ post_install_message:
370
353
  rdoc_options:
371
354
  - "--charset=UTF-8"
372
355
  require_paths: