jekyll 4.2.1 → 4.2.2
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 +350 -350
- data/LICENSE +21 -21
- data/README.markdown +86 -86
- data/exe/jekyll +57 -57
- data/lib/blank_template/_config.yml +3 -3
- data/lib/blank_template/_layouts/default.html +12 -12
- data/lib/blank_template/_sass/main.scss +9 -9
- data/lib/blank_template/assets/css/main.scss +4 -4
- data/lib/blank_template/index.md +8 -8
- data/lib/jekyll/cache.rb +190 -190
- data/lib/jekyll/cleaner.rb +111 -111
- data/lib/jekyll/collection.rb +309 -309
- data/lib/jekyll/command.rb +105 -105
- data/lib/jekyll/commands/build.rb +93 -93
- data/lib/jekyll/commands/clean.rb +45 -45
- data/lib/jekyll/commands/doctor.rb +177 -177
- data/lib/jekyll/commands/help.rb +34 -34
- data/lib/jekyll/commands/new.rb +172 -169
- data/lib/jekyll/commands/new_theme.rb +40 -40
- data/lib/jekyll/commands/serve/live_reload_reactor.rb +122 -122
- data/lib/jekyll/commands/serve/livereload_assets/livereload.js +1183 -1183
- data/lib/jekyll/commands/serve/servlet.rb +202 -202
- data/lib/jekyll/commands/serve/websockets.rb +81 -81
- data/lib/jekyll/commands/serve.rb +362 -362
- data/lib/jekyll/configuration.rb +313 -313
- data/lib/jekyll/converter.rb +54 -54
- data/lib/jekyll/converters/identity.rb +41 -41
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +199 -199
- data/lib/jekyll/converters/markdown.rb +113 -113
- data/lib/jekyll/converters/smartypants.rb +70 -70
- data/lib/jekyll/convertible.rb +257 -257
- data/lib/jekyll/deprecator.rb +50 -50
- data/lib/jekyll/document.rb +544 -544
- data/lib/jekyll/drops/collection_drop.rb +20 -20
- data/lib/jekyll/drops/document_drop.rb +70 -70
- data/lib/jekyll/drops/drop.rb +293 -293
- data/lib/jekyll/drops/excerpt_drop.rb +19 -19
- data/lib/jekyll/drops/jekyll_drop.rb +32 -32
- data/lib/jekyll/drops/site_drop.rb +66 -66
- data/lib/jekyll/drops/static_file_drop.rb +14 -14
- data/lib/jekyll/drops/unified_payload_drop.rb +26 -26
- data/lib/jekyll/drops/url_drop.rb +140 -140
- data/lib/jekyll/entry_filter.rb +121 -121
- data/lib/jekyll/errors.rb +20 -20
- data/lib/jekyll/excerpt.rb +201 -201
- data/lib/jekyll/external.rb +79 -79
- data/lib/jekyll/filters/date_filters.rb +110 -110
- data/lib/jekyll/filters/grouping_filters.rb +64 -64
- data/lib/jekyll/filters/url_filters.rb +98 -98
- data/lib/jekyll/filters.rb +535 -535
- data/lib/jekyll/frontmatter_defaults.rb +240 -240
- data/lib/jekyll/generator.rb +5 -5
- data/lib/jekyll/hooks.rb +107 -107
- data/lib/jekyll/inclusion.rb +32 -32
- data/lib/jekyll/layout.rb +67 -67
- data/lib/jekyll/liquid_extensions.rb +22 -22
- data/lib/jekyll/liquid_renderer/file.rb +77 -77
- data/lib/jekyll/liquid_renderer/table.rb +55 -55
- data/lib/jekyll/liquid_renderer.rb +80 -80
- data/lib/jekyll/log_adapter.rb +151 -151
- data/lib/jekyll/mime.types +866 -866
- data/lib/jekyll/page.rb +217 -217
- data/lib/jekyll/page_excerpt.rb +25 -25
- data/lib/jekyll/page_without_a_file.rb +14 -14
- data/lib/jekyll/path_manager.rb +74 -74
- data/lib/jekyll/plugin.rb +92 -92
- data/lib/jekyll/plugin_manager.rb +115 -115
- data/lib/jekyll/profiler.rb +58 -58
- data/lib/jekyll/publisher.rb +23 -23
- data/lib/jekyll/reader.rb +192 -192
- data/lib/jekyll/readers/collection_reader.rb +23 -23
- data/lib/jekyll/readers/data_reader.rb +79 -79
- data/lib/jekyll/readers/layout_reader.rb +62 -62
- data/lib/jekyll/readers/page_reader.rb +25 -25
- data/lib/jekyll/readers/post_reader.rb +85 -85
- data/lib/jekyll/readers/static_file_reader.rb +25 -25
- data/lib/jekyll/readers/theme_assets_reader.rb +52 -52
- data/lib/jekyll/regenerator.rb +195 -195
- data/lib/jekyll/related_posts.rb +52 -52
- data/lib/jekyll/renderer.rb +265 -265
- data/lib/jekyll/site.rb +551 -551
- data/lib/jekyll/static_file.rb +208 -208
- data/lib/jekyll/stevenson.rb +60 -60
- data/lib/jekyll/tags/highlight.rb +110 -110
- data/lib/jekyll/tags/include.rb +275 -275
- data/lib/jekyll/tags/link.rb +42 -42
- data/lib/jekyll/tags/post_url.rb +106 -106
- data/lib/jekyll/theme.rb +86 -86
- data/lib/jekyll/theme_builder.rb +121 -121
- data/lib/jekyll/url.rb +167 -167
- data/lib/jekyll/utils/ansi.rb +57 -57
- data/lib/jekyll/utils/exec.rb +26 -26
- data/lib/jekyll/utils/internet.rb +37 -37
- data/lib/jekyll/utils/platforms.rb +67 -67
- data/lib/jekyll/utils/thread_event.rb +31 -31
- data/lib/jekyll/utils/win_tz.rb +75 -75
- data/lib/jekyll/utils.rb +367 -367
- data/lib/jekyll/version.rb +5 -5
- data/lib/jekyll.rb +195 -195
- data/lib/site_template/.gitignore +5 -5
- data/lib/site_template/404.html +25 -25
- data/lib/site_template/_config.yml +55 -55
- data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +29 -29
- data/lib/site_template/about.markdown +18 -18
- data/lib/site_template/index.markdown +6 -6
- data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -74
- data/lib/theme_template/Gemfile +4 -4
- data/lib/theme_template/LICENSE.txt.erb +21 -21
- data/lib/theme_template/README.md.erb +52 -52
- data/lib/theme_template/_layouts/default.html +1 -1
- data/lib/theme_template/_layouts/page.html +5 -5
- data/lib/theme_template/_layouts/post.html +5 -5
- data/lib/theme_template/example/_config.yml.erb +1 -1
- data/lib/theme_template/example/_post.md +12 -12
- data/lib/theme_template/example/index.html +14 -14
- data/lib/theme_template/example/style.scss +7 -7
- data/lib/theme_template/gitignore.erb +6 -6
- data/lib/theme_template/theme.gemspec.erb +16 -16
- data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -149
- data/rubocop/jekyll/no_p_allowed.rb +23 -23
- data/rubocop/jekyll/no_puts_allowed.rb +23 -23
- data/rubocop/jekyll.rb +5 -5
- metadata +3 -3
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Jekyll
|
|
4
|
-
class LayoutReader
|
|
5
|
-
attr_reader :site
|
|
6
|
-
|
|
7
|
-
def initialize(site)
|
|
8
|
-
@site = site
|
|
9
|
-
@layouts = {}
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def read
|
|
13
|
-
layout_entries.each do |layout_file|
|
|
14
|
-
@layouts[layout_name(layout_file)] = \
|
|
15
|
-
Layout.new(site, layout_directory, layout_file)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
theme_layout_entries.each do |layout_file|
|
|
19
|
-
@layouts[layout_name(layout_file)] ||= \
|
|
20
|
-
Layout.new(site, theme_layout_directory, layout_file)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
@layouts
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def layout_directory
|
|
27
|
-
@layout_directory ||= site.in_source_dir(site.config["layouts_dir"])
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def theme_layout_directory
|
|
31
|
-
@theme_layout_directory ||= site.theme.layouts_path if site.theme
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
def layout_entries
|
|
37
|
-
entries_in layout_directory
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def theme_layout_entries
|
|
41
|
-
theme_layout_directory ? entries_in(theme_layout_directory) : []
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def entries_in(dir)
|
|
45
|
-
entries = []
|
|
46
|
-
within(dir) do
|
|
47
|
-
entries = EntryFilter.new(site).filter(Dir["**/*.*"])
|
|
48
|
-
end
|
|
49
|
-
entries
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def layout_name(file)
|
|
53
|
-
file.split(".")[0..-2].join(".")
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def within(directory)
|
|
57
|
-
return unless File.exist?(directory)
|
|
58
|
-
|
|
59
|
-
Dir.chdir(directory) { yield }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
class LayoutReader
|
|
5
|
+
attr_reader :site
|
|
6
|
+
|
|
7
|
+
def initialize(site)
|
|
8
|
+
@site = site
|
|
9
|
+
@layouts = {}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def read
|
|
13
|
+
layout_entries.each do |layout_file|
|
|
14
|
+
@layouts[layout_name(layout_file)] = \
|
|
15
|
+
Layout.new(site, layout_directory, layout_file)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
theme_layout_entries.each do |layout_file|
|
|
19
|
+
@layouts[layout_name(layout_file)] ||= \
|
|
20
|
+
Layout.new(site, theme_layout_directory, layout_file)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@layouts
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def layout_directory
|
|
27
|
+
@layout_directory ||= site.in_source_dir(site.config["layouts_dir"])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def theme_layout_directory
|
|
31
|
+
@theme_layout_directory ||= site.theme.layouts_path if site.theme
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def layout_entries
|
|
37
|
+
entries_in layout_directory
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def theme_layout_entries
|
|
41
|
+
theme_layout_directory ? entries_in(theme_layout_directory) : []
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def entries_in(dir)
|
|
45
|
+
entries = []
|
|
46
|
+
within(dir) do
|
|
47
|
+
entries = EntryFilter.new(site).filter(Dir["**/*.*"])
|
|
48
|
+
end
|
|
49
|
+
entries
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def layout_name(file)
|
|
53
|
+
file.split(".")[0..-2].join(".")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def within(directory)
|
|
57
|
+
return unless File.exist?(directory)
|
|
58
|
+
|
|
59
|
+
Dir.chdir(directory) { yield }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Jekyll
|
|
4
|
-
class PageReader
|
|
5
|
-
attr_reader :site, :dir, :unfiltered_content
|
|
6
|
-
|
|
7
|
-
def initialize(site, dir)
|
|
8
|
-
@site = site
|
|
9
|
-
@dir = dir
|
|
10
|
-
@unfiltered_content = []
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Create a new `Jekyll::Page` object for each entry in a given array.
|
|
14
|
-
#
|
|
15
|
-
# files - An array of file names inside `@dir`
|
|
16
|
-
#
|
|
17
|
-
# Returns an array of publishable `Jekyll::Page` objects.
|
|
18
|
-
def read(files)
|
|
19
|
-
files.each do |page|
|
|
20
|
-
@unfiltered_content << Page.new(@site, @site.source, @dir, page)
|
|
21
|
-
end
|
|
22
|
-
@unfiltered_content.select { |page| site.publisher.publish?(page) }
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
class PageReader
|
|
5
|
+
attr_reader :site, :dir, :unfiltered_content
|
|
6
|
+
|
|
7
|
+
def initialize(site, dir)
|
|
8
|
+
@site = site
|
|
9
|
+
@dir = dir
|
|
10
|
+
@unfiltered_content = []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Create a new `Jekyll::Page` object for each entry in a given array.
|
|
14
|
+
#
|
|
15
|
+
# files - An array of file names inside `@dir`
|
|
16
|
+
#
|
|
17
|
+
# Returns an array of publishable `Jekyll::Page` objects.
|
|
18
|
+
def read(files)
|
|
19
|
+
files.each do |page|
|
|
20
|
+
@unfiltered_content << Page.new(@site, @site.source, @dir, page)
|
|
21
|
+
end
|
|
22
|
+
@unfiltered_content.select { |page| site.publisher.publish?(page) }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Jekyll
|
|
4
|
-
class PostReader
|
|
5
|
-
attr_reader :site, :unfiltered_content
|
|
6
|
-
|
|
7
|
-
def initialize(site)
|
|
8
|
-
@site = site
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# Read all the files in <source>/<dir>/_drafts and create a new
|
|
12
|
-
# Document object with each one.
|
|
13
|
-
#
|
|
14
|
-
# dir - The String relative path of the directory to read.
|
|
15
|
-
#
|
|
16
|
-
# Returns nothing.
|
|
17
|
-
def read_drafts(dir)
|
|
18
|
-
read_publishable(dir, "_drafts", Document::DATELESS_FILENAME_MATCHER)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Read all the files in <source>/<dir>/_posts and create a new Document
|
|
22
|
-
# object with each one.
|
|
23
|
-
#
|
|
24
|
-
# dir - The String relative path of the directory to read.
|
|
25
|
-
#
|
|
26
|
-
# Returns nothing.
|
|
27
|
-
def read_posts(dir)
|
|
28
|
-
read_publishable(dir, "_posts", Document::DATE_FILENAME_MATCHER)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Read all the files in <source>/<dir>/<magic_dir> and create a new
|
|
32
|
-
# Document object with each one insofar as it matches the regexp matcher.
|
|
33
|
-
#
|
|
34
|
-
# dir - The String relative path of the directory to read.
|
|
35
|
-
#
|
|
36
|
-
# Returns nothing.
|
|
37
|
-
def read_publishable(dir, magic_dir, matcher)
|
|
38
|
-
read_content(dir, magic_dir, matcher)
|
|
39
|
-
.tap { |docs| docs.each(&:read) }
|
|
40
|
-
.select { |doc| processable?(doc) }
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Read all the content files from <source>/<dir>/magic_dir
|
|
44
|
-
# and return them with the type klass.
|
|
45
|
-
#
|
|
46
|
-
# dir - The String relative path of the directory to read.
|
|
47
|
-
# magic_dir - The String relative directory to <dir>,
|
|
48
|
-
# looks for content here.
|
|
49
|
-
# klass - The return type of the content.
|
|
50
|
-
#
|
|
51
|
-
# Returns klass type of content files
|
|
52
|
-
def read_content(dir, magic_dir, matcher)
|
|
53
|
-
@site.reader.get_entries(dir, magic_dir).map do |entry|
|
|
54
|
-
next unless matcher.match?(entry)
|
|
55
|
-
|
|
56
|
-
path = @site.in_source_dir(File.join(dir, magic_dir, entry))
|
|
57
|
-
Document.new(path,
|
|
58
|
-
:site => @site,
|
|
59
|
-
:collection => @site.posts)
|
|
60
|
-
end.tap(&:compact!)
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
private
|
|
64
|
-
|
|
65
|
-
def processable?(doc)
|
|
66
|
-
if doc.content.nil?
|
|
67
|
-
Jekyll.logger.debug "Skipping:", "Content in #{doc.relative_path} is nil"
|
|
68
|
-
false
|
|
69
|
-
elsif !doc.content.valid_encoding?
|
|
70
|
-
Jekyll.logger.debug "Skipping:", "#{doc.relative_path} is not valid UTF-8"
|
|
71
|
-
false
|
|
72
|
-
else
|
|
73
|
-
publishable?(doc)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def publishable?(doc)
|
|
78
|
-
site.publisher.publish?(doc).tap do |will_publish|
|
|
79
|
-
if !will_publish && site.publisher.hidden_in_the_future?(doc)
|
|
80
|
-
Jekyll.logger.warn "Skipping:", "#{doc.relative_path} has a future date"
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
class PostReader
|
|
5
|
+
attr_reader :site, :unfiltered_content
|
|
6
|
+
|
|
7
|
+
def initialize(site)
|
|
8
|
+
@site = site
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Read all the files in <source>/<dir>/_drafts and create a new
|
|
12
|
+
# Document object with each one.
|
|
13
|
+
#
|
|
14
|
+
# dir - The String relative path of the directory to read.
|
|
15
|
+
#
|
|
16
|
+
# Returns nothing.
|
|
17
|
+
def read_drafts(dir)
|
|
18
|
+
read_publishable(dir, "_drafts", Document::DATELESS_FILENAME_MATCHER)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Read all the files in <source>/<dir>/_posts and create a new Document
|
|
22
|
+
# object with each one.
|
|
23
|
+
#
|
|
24
|
+
# dir - The String relative path of the directory to read.
|
|
25
|
+
#
|
|
26
|
+
# Returns nothing.
|
|
27
|
+
def read_posts(dir)
|
|
28
|
+
read_publishable(dir, "_posts", Document::DATE_FILENAME_MATCHER)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Read all the files in <source>/<dir>/<magic_dir> and create a new
|
|
32
|
+
# Document object with each one insofar as it matches the regexp matcher.
|
|
33
|
+
#
|
|
34
|
+
# dir - The String relative path of the directory to read.
|
|
35
|
+
#
|
|
36
|
+
# Returns nothing.
|
|
37
|
+
def read_publishable(dir, magic_dir, matcher)
|
|
38
|
+
read_content(dir, magic_dir, matcher)
|
|
39
|
+
.tap { |docs| docs.each(&:read) }
|
|
40
|
+
.select { |doc| processable?(doc) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Read all the content files from <source>/<dir>/magic_dir
|
|
44
|
+
# and return them with the type klass.
|
|
45
|
+
#
|
|
46
|
+
# dir - The String relative path of the directory to read.
|
|
47
|
+
# magic_dir - The String relative directory to <dir>,
|
|
48
|
+
# looks for content here.
|
|
49
|
+
# klass - The return type of the content.
|
|
50
|
+
#
|
|
51
|
+
# Returns klass type of content files
|
|
52
|
+
def read_content(dir, magic_dir, matcher)
|
|
53
|
+
@site.reader.get_entries(dir, magic_dir).map do |entry|
|
|
54
|
+
next unless matcher.match?(entry)
|
|
55
|
+
|
|
56
|
+
path = @site.in_source_dir(File.join(dir, magic_dir, entry))
|
|
57
|
+
Document.new(path,
|
|
58
|
+
:site => @site,
|
|
59
|
+
:collection => @site.posts)
|
|
60
|
+
end.tap(&:compact!)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def processable?(doc)
|
|
66
|
+
if doc.content.nil?
|
|
67
|
+
Jekyll.logger.debug "Skipping:", "Content in #{doc.relative_path} is nil"
|
|
68
|
+
false
|
|
69
|
+
elsif !doc.content.valid_encoding?
|
|
70
|
+
Jekyll.logger.debug "Skipping:", "#{doc.relative_path} is not valid UTF-8"
|
|
71
|
+
false
|
|
72
|
+
else
|
|
73
|
+
publishable?(doc)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def publishable?(doc)
|
|
78
|
+
site.publisher.publish?(doc).tap do |will_publish|
|
|
79
|
+
if !will_publish && site.publisher.hidden_in_the_future?(doc)
|
|
80
|
+
Jekyll.logger.warn "Skipping:", "#{doc.relative_path} has a future date"
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Jekyll
|
|
4
|
-
class StaticFileReader
|
|
5
|
-
attr_reader :site, :dir, :unfiltered_content
|
|
6
|
-
|
|
7
|
-
def initialize(site, dir)
|
|
8
|
-
@site = site
|
|
9
|
-
@dir = dir
|
|
10
|
-
@unfiltered_content = []
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# Create a new StaticFile object for every entry in a given list of basenames.
|
|
14
|
-
#
|
|
15
|
-
# files - an array of file basenames.
|
|
16
|
-
#
|
|
17
|
-
# Returns an array of static files.
|
|
18
|
-
def read(files)
|
|
19
|
-
files.each do |file|
|
|
20
|
-
@unfiltered_content << StaticFile.new(@site, @site.source, @dir, file)
|
|
21
|
-
end
|
|
22
|
-
@unfiltered_content
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
class StaticFileReader
|
|
5
|
+
attr_reader :site, :dir, :unfiltered_content
|
|
6
|
+
|
|
7
|
+
def initialize(site, dir)
|
|
8
|
+
@site = site
|
|
9
|
+
@dir = dir
|
|
10
|
+
@unfiltered_content = []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Create a new StaticFile object for every entry in a given list of basenames.
|
|
14
|
+
#
|
|
15
|
+
# files - an array of file basenames.
|
|
16
|
+
#
|
|
17
|
+
# Returns an array of static files.
|
|
18
|
+
def read(files)
|
|
19
|
+
files.each do |file|
|
|
20
|
+
@unfiltered_content << StaticFile.new(@site, @site.source, @dir, file)
|
|
21
|
+
end
|
|
22
|
+
@unfiltered_content
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Jekyll
|
|
4
|
-
class ThemeAssetsReader
|
|
5
|
-
attr_reader :site
|
|
6
|
-
|
|
7
|
-
def initialize(site)
|
|
8
|
-
@site = site
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def read
|
|
12
|
-
return unless site.theme&.assets_path
|
|
13
|
-
|
|
14
|
-
Find.find(site.theme.assets_path) do |path|
|
|
15
|
-
next if File.directory?(path)
|
|
16
|
-
|
|
17
|
-
if File.symlink?(path)
|
|
18
|
-
Jekyll.logger.warn "Theme reader:", "Ignored symlinked asset: #{path}"
|
|
19
|
-
else
|
|
20
|
-
read_theme_asset(path)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def read_theme_asset(path)
|
|
28
|
-
base = site.theme.root
|
|
29
|
-
dir = File.dirname(path.sub("#{site.theme.root}/", ""))
|
|
30
|
-
name = File.basename(path)
|
|
31
|
-
|
|
32
|
-
if Utils.has_yaml_header?(path)
|
|
33
|
-
append_unless_exists site.pages,
|
|
34
|
-
Jekyll::Page.new(site, base, dir, name)
|
|
35
|
-
else
|
|
36
|
-
append_unless_exists site.static_files,
|
|
37
|
-
Jekyll::StaticFile.new(site, base, "/#{dir}", name)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def append_unless_exists(haystack, new_item)
|
|
42
|
-
if haystack.any? { |file| file.relative_path == new_item.relative_path }
|
|
43
|
-
Jekyll.logger.debug "Theme:",
|
|
44
|
-
"Ignoring #{new_item.relative_path} in theme due to existing file " \
|
|
45
|
-
"with that path in site."
|
|
46
|
-
return
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
haystack << new_item
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
class ThemeAssetsReader
|
|
5
|
+
attr_reader :site
|
|
6
|
+
|
|
7
|
+
def initialize(site)
|
|
8
|
+
@site = site
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def read
|
|
12
|
+
return unless site.theme&.assets_path
|
|
13
|
+
|
|
14
|
+
Find.find(site.theme.assets_path) do |path|
|
|
15
|
+
next if File.directory?(path)
|
|
16
|
+
|
|
17
|
+
if File.symlink?(path)
|
|
18
|
+
Jekyll.logger.warn "Theme reader:", "Ignored symlinked asset: #{path}"
|
|
19
|
+
else
|
|
20
|
+
read_theme_asset(path)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def read_theme_asset(path)
|
|
28
|
+
base = site.theme.root
|
|
29
|
+
dir = File.dirname(path.sub("#{site.theme.root}/", ""))
|
|
30
|
+
name = File.basename(path)
|
|
31
|
+
|
|
32
|
+
if Utils.has_yaml_header?(path)
|
|
33
|
+
append_unless_exists site.pages,
|
|
34
|
+
Jekyll::Page.new(site, base, dir, name)
|
|
35
|
+
else
|
|
36
|
+
append_unless_exists site.static_files,
|
|
37
|
+
Jekyll::StaticFile.new(site, base, "/#{dir}", name)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def append_unless_exists(haystack, new_item)
|
|
42
|
+
if haystack.any? { |file| file.relative_path == new_item.relative_path }
|
|
43
|
+
Jekyll.logger.debug "Theme:",
|
|
44
|
+
"Ignoring #{new_item.relative_path} in theme due to existing file " \
|
|
45
|
+
"with that path in site."
|
|
46
|
+
return
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
haystack << new_item
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|