jekyll-docs 3.6.0 → 3.6.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/lib/jekyll.rb +195 -0
- data/lib/jekyll/cleaner.rb +110 -0
- data/lib/jekyll/collection.rb +230 -0
- data/lib/jekyll/command.rb +78 -0
- data/lib/jekyll/commands/build.rb +102 -0
- data/lib/jekyll/commands/clean.rb +43 -0
- data/lib/jekyll/commands/doctor.rb +153 -0
- data/lib/jekyll/commands/help.rb +34 -0
- data/lib/jekyll/commands/new.rb +156 -0
- data/lib/jekyll/commands/new_theme.rb +40 -0
- data/lib/jekyll/commands/serve.rb +245 -0
- data/lib/jekyll/commands/serve/servlet.rb +62 -0
- data/lib/jekyll/configuration.rb +410 -0
- data/lib/jekyll/converter.rb +54 -0
- data/lib/jekyll/converters/identity.rb +23 -0
- data/lib/jekyll/converters/markdown.rb +104 -0
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +123 -0
- data/lib/jekyll/converters/markdown/rdiscount_parser.rb +35 -0
- data/lib/jekyll/converters/markdown/redcarpet_parser.rb +108 -0
- data/lib/jekyll/converters/smartypants.rb +36 -0
- data/lib/jekyll/convertible.rb +251 -0
- data/lib/jekyll/deprecator.rb +52 -0
- data/lib/jekyll/document.rb +507 -0
- data/lib/jekyll/drops/collection_drop.rb +22 -0
- data/lib/jekyll/drops/document_drop.rb +69 -0
- data/lib/jekyll/drops/drop.rb +214 -0
- data/lib/jekyll/drops/excerpt_drop.rb +15 -0
- data/lib/jekyll/drops/jekyll_drop.rb +33 -0
- data/lib/jekyll/drops/site_drop.rb +47 -0
- data/lib/jekyll/drops/static_file_drop.rb +13 -0
- data/lib/jekyll/drops/unified_payload_drop.rb +25 -0
- data/lib/jekyll/drops/url_drop.rb +88 -0
- data/lib/jekyll/entry_filter.rb +123 -0
- data/lib/jekyll/errors.rb +20 -0
- data/lib/jekyll/excerpt.rb +126 -0
- data/lib/jekyll/external.rb +74 -0
- data/lib/jekyll/filters.rb +430 -0
- data/lib/jekyll/filters/grouping_filters.rb +65 -0
- data/lib/jekyll/filters/url_filters.rb +60 -0
- data/lib/jekyll/frontmatter_defaults.rb +197 -0
- data/lib/jekyll/generator.rb +5 -0
- data/lib/jekyll/hooks.rb +104 -0
- data/lib/jekyll/layout.rb +62 -0
- data/lib/jekyll/liquid_extensions.rb +24 -0
- data/lib/jekyll/liquid_renderer.rb +49 -0
- data/lib/jekyll/liquid_renderer/file.rb +56 -0
- data/lib/jekyll/liquid_renderer/table.rb +96 -0
- data/lib/jekyll/log_adapter.rb +147 -0
- data/lib/jekyll/mime.types +825 -0
- data/lib/jekyll/page.rb +187 -0
- data/lib/jekyll/plugin.rb +98 -0
- data/lib/jekyll/plugin_manager.rb +113 -0
- data/lib/jekyll/publisher.rb +23 -0
- data/lib/jekyll/reader.rb +134 -0
- data/lib/jekyll/readers/collection_reader.rb +22 -0
- data/lib/jekyll/readers/data_reader.rb +77 -0
- data/lib/jekyll/readers/layout_reader.rb +71 -0
- data/lib/jekyll/readers/page_reader.rb +25 -0
- data/lib/jekyll/readers/post_reader.rb +72 -0
- data/lib/jekyll/readers/static_file_reader.rb +25 -0
- data/lib/jekyll/readers/theme_assets_reader.rb +49 -0
- data/lib/jekyll/regenerator.rb +201 -0
- data/lib/jekyll/related_posts.rb +52 -0
- data/lib/jekyll/renderer.rb +269 -0
- data/lib/jekyll/site.rb +471 -0
- data/lib/jekyll/static_file.rb +162 -0
- data/lib/jekyll/stevenson.rb +61 -0
- data/lib/jekyll/tags/highlight.rb +141 -0
- data/lib/jekyll/tags/include.rb +215 -0
- data/lib/jekyll/tags/link.rb +37 -0
- data/lib/jekyll/tags/post_url.rb +103 -0
- data/lib/jekyll/theme.rb +68 -0
- data/lib/jekyll/theme_builder.rb +119 -0
- data/lib/jekyll/url.rb +161 -0
- data/lib/jekyll/utils.rb +337 -0
- data/lib/jekyll/utils/ansi.rb +59 -0
- data/lib/jekyll/utils/exec.rb +27 -0
- data/lib/jekyll/utils/platforms.rb +82 -0
- data/lib/jekyll/utils/rouge.rb +21 -0
- data/lib/jekyll/utils/win_tz.rb +75 -0
- data/lib/jekyll/version.rb +5 -0
- data/lib/site_template/404.html +24 -0
- data/lib/site_template/_config.yml +43 -0
- data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +25 -0
- data/lib/site_template/about.md +18 -0
- data/lib/site_template/index.md +6 -0
- data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -0
- data/lib/theme_template/Gemfile +4 -0
- data/lib/theme_template/LICENSE.txt.erb +21 -0
- data/lib/theme_template/README.md.erb +52 -0
- data/lib/theme_template/_layouts/default.html +1 -0
- data/lib/theme_template/_layouts/page.html +5 -0
- data/lib/theme_template/_layouts/post.html +5 -0
- data/lib/theme_template/example/_config.yml.erb +1 -0
- data/lib/theme_template/example/_post.md +12 -0
- data/lib/theme_template/example/index.html +14 -0
- data/lib/theme_template/example/style.scss +7 -0
- data/lib/theme_template/gitignore.erb +5 -0
- data/lib/theme_template/theme.gemspec.erb +19 -0
- metadata +103 -156
- data/lib/jekyll-docs.rb +0 -31
- data/site/404.html +0 -153
- data/site/CNAME +0 -1
- data/site/community/index.html +0 -299
- data/site/conduct/index.html +0 -10
- data/site/css/screen.css +0 -1
- data/site/docs/assets/index.html +0 -724
- data/site/docs/code_of_conduct/index.html +0 -730
- data/site/docs/collections/index.html +0 -1097
- data/site/docs/conduct/index.html +0 -744
- data/site/docs/configuration/index.html +0 -1403
- data/site/docs/continuous-integration/buddyworks/index.html +0 -726
- data/site/docs/continuous-integration/circleci/index.html +0 -757
- data/site/docs/continuous-integration/index.html +0 -681
- data/site/docs/continuous-integration/travis-ci/index.html +0 -891
- data/site/docs/contributing/index.html +0 -863
- data/site/docs/datafiles/index.html +0 -780
- data/site/docs/deployment-methods/index.html +0 -875
- data/site/docs/drafts/index.html +0 -636
- data/site/docs/extras/index.html +0 -689
- data/site/docs/frontmatter/index.html +0 -807
- data/site/docs/github-pages/index.html +0 -819
- data/site/docs/history/index.html +0 -3955
- data/site/docs/home/index.html +0 -644
- data/site/docs/includes/index.html +0 -800
- data/site/docs/index.html +0 -10
- data/site/docs/installation/index.html +0 -732
- data/site/docs/maintaining/affinity-team-captain/index.html +0 -706
- data/site/docs/maintaining/avoiding-burnout/index.html +0 -709
- data/site/docs/maintaining/becoming-a-maintainer/index.html +0 -717
- data/site/docs/maintaining/index.html +0 -713
- data/site/docs/maintaining/merging-a-pull-request/index.html +0 -747
- data/site/docs/maintaining/reviewing-a-pull-request/index.html +0 -725
- data/site/docs/maintaining/special-labels/index.html +0 -705
- data/site/docs/maintaining/triaging-an-issue/index.html +0 -735
- data/site/docs/migrations/index.html +0 -647
- data/site/docs/pages/index.html +0 -695
- data/site/docs/pagination/index.html +0 -870
- data/site/docs/permalinks/index.html +0 -1027
- data/site/docs/plugins/index.html +0 -1800
- data/site/docs/posts/index.html +0 -858
- data/site/docs/quickstart/index.html +0 -650
- data/site/docs/resources/index.html +0 -769
- data/site/docs/sites/index.html +0 -702
- data/site/docs/static-files/index.html +0 -720
- data/site/docs/structure/index.html +0 -822
- data/site/docs/templates/index.html +0 -1208
- data/site/docs/themes/index.html +0 -935
- data/site/docs/troubleshooting/index.html +0 -893
- data/site/docs/upgrading/0-to-2/index.html +0 -826
- data/site/docs/upgrading/2-to-3/index.html +0 -824
- data/site/docs/upgrading/index.html +0 -693
- data/site/docs/usage/index.html +0 -705
- data/site/docs/variables/index.html +0 -1048
- data/site/docs/windows/index.html +0 -799
- data/site/favicon.ico +0 -0
- data/site/feed.xml +0 -372
- data/site/fonts/FontAwesome.eot +0 -0
- data/site/fonts/FontAwesome.svg +0 -12
- data/site/fonts/FontAwesome.ttf +0 -0
- data/site/fonts/FontAwesome.woff +0 -0
- data/site/github.html +0 -10
- data/site/help/index.html +0 -244
- data/site/icomoon-selection.json +0 -96
- data/site/img/article-footer.png +0 -0
- data/site/img/footer-arrow.png +0 -0
- data/site/img/footer-logo.png +0 -0
- data/site/img/jekyll-sticker.jpg +0 -0
- data/site/img/jekylllayoutconcept.png +0 -0
- data/site/img/logo-2x.png +0 -0
- data/site/img/logo-rss.png +0 -0
- data/site/img/octojekyll.png +0 -0
- data/site/index.html +0 -267
- data/site/issues.html +0 -10
- data/site/js/html5shiv.min.js +0 -4
- data/site/js/respond.min.js +0 -5
- data/site/latest_version.txt +0 -1
- data/site/news/2013/05/05/jekyll-1-0-0-released/index.html +0 -570
- data/site/news/2013/05/08/jekyll-1-0-1-released/index.html +0 -570
- data/site/news/2013/05/12/jekyll-1-0-2-released/index.html +0 -571
- data/site/news/2013/06/07/jekyll-1-0-3-released/index.html +0 -568
- data/site/news/2013/07/14/jekyll-1-1-0-released/index.html +0 -570
- data/site/news/2013/07/24/jekyll-1-1-1-released/index.html +0 -569
- data/site/news/2013/07/25/jekyll-1-0-4-released/index.html +0 -565
- data/site/news/2013/07/25/jekyll-1-1-2-released/index.html +0 -565
- data/site/news/2013/09/06/jekyll-1-2-0-released/index.html +0 -572
- data/site/news/2013/09/14/jekyll-1-2-1-released/index.html +0 -566
- data/site/news/2013/10/28/jekyll-1-3-0-rc1-released/index.html +0 -564
- data/site/news/2013/11/04/jekyll-1-3-0-released/index.html +0 -599
- data/site/news/2013/11/26/jekyll-1-3-1-released/index.html +0 -568
- data/site/news/2013/12/07/jekyll-1-4-0-released/index.html +0 -583
- data/site/news/2013/12/09/jekyll-1-4-1-released/index.html +0 -565
- data/site/news/2013/12/16/jekyll-1-4-2-released/index.html +0 -564
- data/site/news/2014/01/13/jekyll-1-4-3-released/index.html +0 -573
- data/site/news/2014/03/24/jekyll-1-5-0-released/index.html +0 -564
- data/site/news/2014/03/27/jekyll-1-5-1-released/index.html +0 -569
- data/site/news/2014/05/06/jekyll-turns-2-0-0/index.html +0 -585
- data/site/news/2014/05/08/jekyll-2-0-3-released/index.html +0 -565
- data/site/news/2014/06/04/jekyll-stickers-1-dollar-stickermule/index.html +0 -567
- data/site/news/2014/06/28/jekyll-turns-21-i-mean-2-1-0/index.html +0 -582
- data/site/news/2014/07/01/jekyll-2-1-1-released/index.html +0 -579
- data/site/news/2014/07/29/jekyll-2-2-0-released/index.html +0 -568
- data/site/news/2014/08/10/jekyll-2-3-0-released/index.html +0 -588
- data/site/news/2014/09/09/jekyll-2-4-0-released/index.html +0 -574
- data/site/news/2014/11/05/jekylls-midlife-crisis-jekyll-turns-2-5-0/index.html +0 -597
- data/site/news/2014/11/09/jekyll-2-5-1-released/index.html +0 -575
- data/site/news/2014/11/12/jekyll-2-5-2-released/index.html +0 -565
- data/site/news/2014/12/17/alfredxing-welcome-to-jekyll-core/index.html +0 -572
- data/site/news/2014/12/22/jekyll-2-5-3-released/index.html +0 -567
- data/site/news/2015/01/20/jekyll-meet-and-greet/index.html +0 -568
- data/site/news/2015/01/24/jekyll-3-0-0-beta1-released/index.html +0 -588
- data/site/news/2015/02/26/introducing-jekyll-talk/index.html +0 -563
- data/site/news/2015/10/26/jekyll-3-0-released/index.html +0 -592
- data/site/news/2015/11/17/jekyll-3-0-1-released/index.html +0 -576
- data/site/news/2016/01/20/jekyll-3-0-2-released/index.html +0 -566
- data/site/news/2016/01/24/jekyll-3-1-0-released/index.html +0 -599
- data/site/news/2016/01/28/jekyll-3-1-1-released/index.html +0 -583
- data/site/news/2016/02/08/jekyll-3-0-3-released/index.html +0 -578
- data/site/news/2016/02/19/jekyll-3-1-2-released/index.html +0 -569
- data/site/news/2016/03/10/making-it-easier-to-contribute-to-jekyll/index.html +0 -565
- data/site/news/2016/04/19/jekyll-3-0-4-released/index.html +0 -571
- data/site/news/2016/04/19/jekyll-3-1-3-released/index.html +0 -566
- data/site/news/2016/04/26/jekyll-3-0-5-released/index.html +0 -572
- data/site/news/2016/05/18/jekyll-3-1-4-released/index.html +0 -576
- data/site/news/2016/05/18/jekyll-3-1-5-released/index.html +0 -564
- data/site/news/2016/05/19/jekyll-3-1-6-released/index.html +0 -566
- data/site/news/2016/06/03/update-on-jekyll-s-google-summer-of-code-projects/index.html +0 -567
- data/site/news/2016/07/26/jekyll-3-2-0-released/index.html +0 -676
- data/site/news/2016/08/02/jekyll-3-2-1-released/index.html +0 -571
- data/site/news/2016/08/24/jekyll-admin-initial-release/index.html +0 -566
- data/site/news/2016/10/06/jekyll-3-3-is-here/index.html +0 -645
- data/site/news/2016/11/14/jekyll-3-3-1-released/index.html +0 -569
- data/site/news/2017/01/18/jekyll-3-4-0-released/index.html +0 -592
- data/site/news/2017/03/02/jekyll-3-4-1-released/index.html +0 -649
- data/site/news/2017/03/09/jekyll-3-4-2-released/index.html +0 -598
- data/site/news/2017/03/21/jekyll-3-4-3-released/index.html +0 -594
- data/site/news/2017/06/15/jekyll-3-5-0-released/index.html +0 -589
- data/site/news/2017/07/17/jekyll-3-5-1-released/index.html +0 -569
- data/site/news/2017/08/12/jekyll-3-5-2-released/index.html +0 -573
- data/site/news/2017/09/21/jekyll-3-6-0-released/index.html +0 -565
- data/site/news/index.html +0 -3609
- data/site/news/releases/index.html +0 -3344
- data/site/philosophy.html +0 -46
- data/site/readme.md +0 -23
- data/site/robots.txt +0 -1
- data/site/sitemap.xml +0 -485
- data/site/tutorials/convert-site-to-jekyll/index.html +0 -793
- data/site/tutorials/custom-404-page/index.html +0 -358
- data/site/tutorials/home/index.html +0 -323
- data/site/tutorials/index.html +0 -10
- data/site/tutorials/navigation/index.html +0 -872
- data/site/tutorials/orderofinterpretation/index.html +0 -441
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
class Command
|
|
5
|
+
class << self
|
|
6
|
+
# A list of subclasses of Jekyll::Command
|
|
7
|
+
def subclasses
|
|
8
|
+
@subclasses ||= []
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Keep a list of subclasses of Jekyll::Command every time it's inherited
|
|
12
|
+
# Called automatically.
|
|
13
|
+
#
|
|
14
|
+
# base - the subclass
|
|
15
|
+
#
|
|
16
|
+
# Returns nothing
|
|
17
|
+
def inherited(base)
|
|
18
|
+
subclasses << base
|
|
19
|
+
super(base)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Run Site#process and catch errors
|
|
23
|
+
#
|
|
24
|
+
# site - the Jekyll::Site object
|
|
25
|
+
#
|
|
26
|
+
# Returns nothing
|
|
27
|
+
def process_site(site)
|
|
28
|
+
site.process
|
|
29
|
+
rescue Jekyll::Errors::FatalException => e
|
|
30
|
+
Jekyll.logger.error "ERROR:", "YOUR SITE COULD NOT BE BUILT:"
|
|
31
|
+
Jekyll.logger.error "", "------------------------------------"
|
|
32
|
+
Jekyll.logger.error "", e.message
|
|
33
|
+
exit(1)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Create a full Jekyll configuration with the options passed in as overrides
|
|
37
|
+
#
|
|
38
|
+
# options - the configuration overrides
|
|
39
|
+
#
|
|
40
|
+
# Returns a full Jekyll configuration
|
|
41
|
+
def configuration_from_options(options)
|
|
42
|
+
return options if options.is_a?(Jekyll::Configuration)
|
|
43
|
+
Jekyll.configuration(options)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Add common options to a command for building configuration
|
|
47
|
+
#
|
|
48
|
+
# c - the Jekyll::Command to add these options to
|
|
49
|
+
#
|
|
50
|
+
# Returns nothing
|
|
51
|
+
# rubocop:disable Metrics/MethodLength
|
|
52
|
+
def add_build_options(c)
|
|
53
|
+
c.option "config", "--config CONFIG_FILE[,CONFIG_FILE2,...]",
|
|
54
|
+
Array, "Custom configuration file"
|
|
55
|
+
c.option "destination", "-d", "--destination DESTINATION",
|
|
56
|
+
"The current folder will be generated into DESTINATION"
|
|
57
|
+
c.option "source", "-s", "--source SOURCE", "Custom source directory"
|
|
58
|
+
c.option "future", "--future", "Publishes posts with a future date"
|
|
59
|
+
c.option "limit_posts", "--limit_posts MAX_POSTS", Integer,
|
|
60
|
+
"Limits the number of posts to parse and publish"
|
|
61
|
+
c.option "watch", "-w", "--[no-]watch", "Watch for changes and rebuild"
|
|
62
|
+
c.option "baseurl", "-b", "--baseurl URL",
|
|
63
|
+
"Serve the website from the given base URL"
|
|
64
|
+
c.option "force_polling", "--force_polling", "Force watch to use polling"
|
|
65
|
+
c.option "lsi", "--lsi", "Use LSI for improved related posts"
|
|
66
|
+
c.option "show_drafts", "-D", "--drafts", "Render posts in the _drafts folder"
|
|
67
|
+
c.option "unpublished", "--unpublished",
|
|
68
|
+
"Render posts that were marked as unpublished"
|
|
69
|
+
c.option "quiet", "-q", "--quiet", "Silence output."
|
|
70
|
+
c.option "verbose", "-V", "--verbose", "Print verbose output."
|
|
71
|
+
c.option "incremental", "-I", "--incremental", "Enable incremental rebuild."
|
|
72
|
+
c.option "strict_front_matter", "--strict_front_matter",
|
|
73
|
+
"Fail if errors are present in front matter"
|
|
74
|
+
end
|
|
75
|
+
# rubocop:enable Metrics/MethodLength
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
module Commands
|
|
5
|
+
class Build < Command
|
|
6
|
+
class << self
|
|
7
|
+
# Create the Mercenary command for the Jekyll CLI for this Command
|
|
8
|
+
def init_with_program(prog)
|
|
9
|
+
prog.command(:build) do |c|
|
|
10
|
+
c.syntax "build [options]"
|
|
11
|
+
c.description "Build your site"
|
|
12
|
+
c.alias :b
|
|
13
|
+
|
|
14
|
+
add_build_options(c)
|
|
15
|
+
|
|
16
|
+
c.action do |_, options|
|
|
17
|
+
options["serving"] = false
|
|
18
|
+
Jekyll::Commands::Build.process(options)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Build your jekyll site
|
|
24
|
+
# Continuously watch if `watch` is set to true in the config.
|
|
25
|
+
def process(options)
|
|
26
|
+
# Adjust verbosity quickly
|
|
27
|
+
Jekyll.logger.adjust_verbosity(options)
|
|
28
|
+
|
|
29
|
+
options = configuration_from_options(options)
|
|
30
|
+
site = Jekyll::Site.new(options)
|
|
31
|
+
|
|
32
|
+
if options.fetch("skip_initial_build", false)
|
|
33
|
+
Jekyll.logger.warn "Build Warning:", "Skipping the initial build." \
|
|
34
|
+
" This may result in an out-of-date site."
|
|
35
|
+
else
|
|
36
|
+
build(site, options)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
if options.fetch("detach", false)
|
|
40
|
+
Jekyll.logger.info "Auto-regeneration:",
|
|
41
|
+
"disabled when running server detached."
|
|
42
|
+
elsif options.fetch("watch", false)
|
|
43
|
+
watch(site, options)
|
|
44
|
+
else
|
|
45
|
+
Jekyll.logger.info "Auto-regeneration:", "disabled. Use --watch to enable."
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Build your Jekyll site.
|
|
50
|
+
#
|
|
51
|
+
# site - the Jekyll::Site instance to build
|
|
52
|
+
# options - A Hash of options passed to the command
|
|
53
|
+
#
|
|
54
|
+
# Returns nothing.
|
|
55
|
+
def build(site, options)
|
|
56
|
+
t = Time.now
|
|
57
|
+
source = options["source"]
|
|
58
|
+
destination = options["destination"]
|
|
59
|
+
incremental = options["incremental"]
|
|
60
|
+
Jekyll.logger.info "Source:", source
|
|
61
|
+
Jekyll.logger.info "Destination:", destination
|
|
62
|
+
Jekyll.logger.info "Incremental build:",
|
|
63
|
+
(incremental ? "enabled" : "disabled. Enable with --incremental")
|
|
64
|
+
Jekyll.logger.info "Generating..."
|
|
65
|
+
process_site(site)
|
|
66
|
+
Jekyll.logger.info "", "done in #{(Time.now - t).round(3)} seconds."
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Private: Watch for file changes and rebuild the site.
|
|
70
|
+
#
|
|
71
|
+
# site - A Jekyll::Site instance
|
|
72
|
+
# options - A Hash of options passed to the command
|
|
73
|
+
#
|
|
74
|
+
# Returns nothing.
|
|
75
|
+
def watch(site, options)
|
|
76
|
+
# Warn Windows users that they might need to upgrade.
|
|
77
|
+
if Utils::Platforms.bash_on_windows?
|
|
78
|
+
Jekyll.logger.warn "",
|
|
79
|
+
"Auto-regeneration may not work on some Windows versions."
|
|
80
|
+
Jekyll.logger.warn "",
|
|
81
|
+
"Please see: https://github.com/Microsoft/BashOnWindows/issues/216"
|
|
82
|
+
Jekyll.logger.warn "",
|
|
83
|
+
"If it does not work, please upgrade Bash on Windows or "\
|
|
84
|
+
"run Jekyll with --no-watch."
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
External.require_with_graceful_fail "jekyll-watch"
|
|
88
|
+
watch_method = Jekyll::Watcher.method(:watch)
|
|
89
|
+
if watch_method.parameters.size == 1
|
|
90
|
+
watch_method.call(
|
|
91
|
+
options
|
|
92
|
+
)
|
|
93
|
+
else
|
|
94
|
+
watch_method.call(
|
|
95
|
+
options, site
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end # end of class << self
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
module Commands
|
|
5
|
+
class Clean < Command
|
|
6
|
+
class << self
|
|
7
|
+
def init_with_program(prog)
|
|
8
|
+
prog.command(:clean) do |c|
|
|
9
|
+
c.syntax "clean [subcommand]"
|
|
10
|
+
c.description "Clean the site " \
|
|
11
|
+
"(removes site output and metadata file) without building."
|
|
12
|
+
|
|
13
|
+
add_build_options(c)
|
|
14
|
+
|
|
15
|
+
c.action do |_, options|
|
|
16
|
+
Jekyll::Commands::Clean.process(options)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def process(options)
|
|
22
|
+
options = configuration_from_options(options)
|
|
23
|
+
destination = options["destination"]
|
|
24
|
+
metadata_file = File.join(options["source"], ".jekyll-metadata")
|
|
25
|
+
sass_cache = File.join(options["source"], ".sass-cache")
|
|
26
|
+
|
|
27
|
+
remove(destination, :checker_func => :directory?)
|
|
28
|
+
remove(metadata_file, :checker_func => :file?)
|
|
29
|
+
remove(sass_cache, :checker_func => :directory?)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def remove(filename, checker_func: :file?)
|
|
33
|
+
if File.public_send(checker_func, filename)
|
|
34
|
+
Jekyll.logger.info "Cleaner:", "Removing #{filename}..."
|
|
35
|
+
FileUtils.rm_rf(filename)
|
|
36
|
+
else
|
|
37
|
+
Jekyll.logger.info "Cleaner:", "Nothing to do for #{filename}."
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "addressable/uri"
|
|
4
|
+
|
|
5
|
+
module Jekyll
|
|
6
|
+
module Commands
|
|
7
|
+
class Doctor < Command
|
|
8
|
+
class << self
|
|
9
|
+
def init_with_program(prog)
|
|
10
|
+
prog.command(:doctor) do |c|
|
|
11
|
+
c.syntax "doctor"
|
|
12
|
+
c.description "Search site and print specific deprecation warnings"
|
|
13
|
+
c.alias(:hyde)
|
|
14
|
+
|
|
15
|
+
c.option "config", "--config CONFIG_FILE[,CONFIG_FILE2,...]", Array,
|
|
16
|
+
"Custom configuration file"
|
|
17
|
+
|
|
18
|
+
c.action do |_, options|
|
|
19
|
+
Jekyll::Commands::Doctor.process(options)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process(options)
|
|
25
|
+
site = Jekyll::Site.new(configuration_from_options(options))
|
|
26
|
+
site.reset
|
|
27
|
+
site.read
|
|
28
|
+
site.generate
|
|
29
|
+
|
|
30
|
+
if healthy?(site)
|
|
31
|
+
Jekyll.logger.info "Your test results", "are in. Everything looks fine."
|
|
32
|
+
else
|
|
33
|
+
abort
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def healthy?(site)
|
|
38
|
+
[
|
|
39
|
+
fsnotify_buggy?(site),
|
|
40
|
+
!deprecated_relative_permalinks(site),
|
|
41
|
+
!conflicting_urls(site),
|
|
42
|
+
!urls_only_differ_by_case(site),
|
|
43
|
+
proper_site_url?(site),
|
|
44
|
+
].all?
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def deprecated_relative_permalinks(site)
|
|
48
|
+
if site.config["relative_permalinks"]
|
|
49
|
+
Jekyll::Deprecator.deprecation_message "Your site still uses relative" \
|
|
50
|
+
" permalinks, which was removed in" \
|
|
51
|
+
" Jekyll v3.0.0."
|
|
52
|
+
return true
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def conflicting_urls(site)
|
|
57
|
+
conflicting_urls = false
|
|
58
|
+
urls = {}
|
|
59
|
+
urls = collect_urls(urls, site.pages, site.dest)
|
|
60
|
+
urls = collect_urls(urls, site.posts.docs, site.dest)
|
|
61
|
+
urls.each do |url, paths|
|
|
62
|
+
next unless paths.size > 1
|
|
63
|
+
conflicting_urls = true
|
|
64
|
+
Jekyll.logger.warn "Conflict:", "The URL '#{url}' is the destination" \
|
|
65
|
+
" for the following pages: #{paths.join(", ")}"
|
|
66
|
+
end
|
|
67
|
+
conflicting_urls
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def fsnotify_buggy?(_site)
|
|
71
|
+
return true unless Utils::Platforms.osx?
|
|
72
|
+
if Dir.pwd != `pwd`.strip
|
|
73
|
+
Jekyll.logger.error " " + <<-STR.strip.gsub(%r!\n\s+!, "\n ")
|
|
74
|
+
We have detected that there might be trouble using fsevent on your
|
|
75
|
+
operating system, you can read https://github.com/thibaudgg/rb-fsevent/wiki/no-fsevents-fired-(OSX-bug)
|
|
76
|
+
for possible work arounds or you can work around it immediately
|
|
77
|
+
with `--force-polling`.
|
|
78
|
+
STR
|
|
79
|
+
|
|
80
|
+
false
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
true
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def urls_only_differ_by_case(site)
|
|
87
|
+
urls_only_differ_by_case = false
|
|
88
|
+
urls = case_insensitive_urls(site.pages + site.docs_to_write, site.dest)
|
|
89
|
+
urls.each_value do |real_urls|
|
|
90
|
+
next unless real_urls.uniq.size > 1
|
|
91
|
+
urls_only_differ_by_case = true
|
|
92
|
+
Jekyll.logger.warn "Warning:", "The following URLs only differ" \
|
|
93
|
+
" by case. On a case-insensitive file system one of the URLs" \
|
|
94
|
+
" will be overwritten by the other: #{real_urls.join(", ")}"
|
|
95
|
+
end
|
|
96
|
+
urls_only_differ_by_case
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def proper_site_url?(site)
|
|
100
|
+
url = site.config["url"]
|
|
101
|
+
[
|
|
102
|
+
url_exists?(url),
|
|
103
|
+
url_valid?(url),
|
|
104
|
+
url_absolute(url),
|
|
105
|
+
].all?
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
private
|
|
109
|
+
def collect_urls(urls, things, destination)
|
|
110
|
+
things.each do |thing|
|
|
111
|
+
dest = thing.destination(destination)
|
|
112
|
+
if urls[dest]
|
|
113
|
+
urls[dest] << thing.path
|
|
114
|
+
else
|
|
115
|
+
urls[dest] = [thing.path]
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
urls
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def case_insensitive_urls(things, destination)
|
|
122
|
+
things.each_with_object({}) do |thing, memo|
|
|
123
|
+
dest = thing.destination(destination)
|
|
124
|
+
(memo[dest.downcase] ||= []) << dest
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def url_exists?(url)
|
|
129
|
+
return true unless url.nil? || url.empty?
|
|
130
|
+
Jekyll.logger.warn "Warning:", "You didn't set an URL in the config file, "\
|
|
131
|
+
"you may encounter problems with some plugins."
|
|
132
|
+
false
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def url_valid?(url)
|
|
136
|
+
Addressable::URI.parse(url)
|
|
137
|
+
true
|
|
138
|
+
rescue
|
|
139
|
+
Jekyll.logger.warn "Warning:", "The site URL does not seem to be valid, "\
|
|
140
|
+
"check the value of `url` in your config file."
|
|
141
|
+
false
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def url_absolute(url)
|
|
145
|
+
return true if Addressable::URI.parse(url).absolute?
|
|
146
|
+
Jekyll.logger.warn "Warning:", "Your site URL does not seem to be absolute, "\
|
|
147
|
+
"check the value of `url` in your config file."
|
|
148
|
+
false
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jekyll
|
|
4
|
+
module Commands
|
|
5
|
+
class Help < Command
|
|
6
|
+
class << self
|
|
7
|
+
def init_with_program(prog)
|
|
8
|
+
prog.command(:help) do |c|
|
|
9
|
+
c.syntax "help [subcommand]"
|
|
10
|
+
c.description "Show the help message, optionally for a given subcommand."
|
|
11
|
+
|
|
12
|
+
c.action do |args, _|
|
|
13
|
+
cmd = (args.first || "").to_sym
|
|
14
|
+
if args.empty?
|
|
15
|
+
puts prog
|
|
16
|
+
elsif prog.has_command? cmd
|
|
17
|
+
puts prog.commands[cmd]
|
|
18
|
+
else
|
|
19
|
+
invalid_command(prog, cmd)
|
|
20
|
+
abort
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def invalid_command(prog, cmd)
|
|
27
|
+
Jekyll.logger.error "Error:",
|
|
28
|
+
"Hmm... we don't know what the '#{cmd}' command is."
|
|
29
|
+
Jekyll.logger.info "Valid commands:", prog.commands.keys.join(", ")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "erb"
|
|
4
|
+
|
|
5
|
+
module Jekyll
|
|
6
|
+
module Commands
|
|
7
|
+
class New < Command
|
|
8
|
+
class << self
|
|
9
|
+
def init_with_program(prog)
|
|
10
|
+
prog.command(:new) do |c|
|
|
11
|
+
c.syntax "new PATH"
|
|
12
|
+
c.description "Creates a new Jekyll site scaffold in PATH"
|
|
13
|
+
|
|
14
|
+
c.option "force", "--force", "Force creation even if PATH already exists"
|
|
15
|
+
c.option "blank", "--blank", "Creates scaffolding but with empty files"
|
|
16
|
+
c.option "skip-bundle", "--skip-bundle", "Skip 'bundle install'"
|
|
17
|
+
|
|
18
|
+
c.action do |args, options|
|
|
19
|
+
Jekyll::Commands::New.process(args, options)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process(args, options = {})
|
|
25
|
+
raise ArgumentError, "You must specify a path." if args.empty?
|
|
26
|
+
|
|
27
|
+
new_blog_path = File.expand_path(args.join(" "), Dir.pwd)
|
|
28
|
+
FileUtils.mkdir_p new_blog_path
|
|
29
|
+
if preserve_source_location?(new_blog_path, options)
|
|
30
|
+
Jekyll.logger.abort_with "Conflict:",
|
|
31
|
+
"#{new_blog_path} exists and is not empty."
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
if options["blank"]
|
|
35
|
+
create_blank_site new_blog_path
|
|
36
|
+
else
|
|
37
|
+
create_site new_blog_path
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
after_install(new_blog_path, options)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def create_blank_site(path)
|
|
44
|
+
Dir.chdir(path) do
|
|
45
|
+
FileUtils.mkdir(%w(_layouts _posts _drafts))
|
|
46
|
+
FileUtils.touch("index.html")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def scaffold_post_content
|
|
51
|
+
ERB.new(File.read(File.expand_path(scaffold_path, site_template))).result
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Internal: Gets the filename of the sample post to be created
|
|
55
|
+
#
|
|
56
|
+
# Returns the filename of the sample post, as a String
|
|
57
|
+
def initialized_post_name
|
|
58
|
+
"_posts/#{Time.now.strftime("%Y-%m-%d")}-welcome-to-jekyll.markdown"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def gemfile_contents
|
|
64
|
+
<<-RUBY
|
|
65
|
+
source "https://rubygems.org"
|
|
66
|
+
|
|
67
|
+
# Hello! This is where you manage which Jekyll version is used to run.
|
|
68
|
+
# When you want to use a different version, change it below, save the
|
|
69
|
+
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
|
|
70
|
+
#
|
|
71
|
+
# bundle exec jekyll serve
|
|
72
|
+
#
|
|
73
|
+
# This will help ensure the proper Jekyll version is running.
|
|
74
|
+
# Happy Jekylling!
|
|
75
|
+
gem "jekyll", "~> #{Jekyll::VERSION}"
|
|
76
|
+
|
|
77
|
+
# This is the default theme for new Jekyll sites. You may change this to anything you like.
|
|
78
|
+
gem "minima", "~> 2.0"
|
|
79
|
+
|
|
80
|
+
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
|
81
|
+
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
|
82
|
+
# gem "github-pages", group: :jekyll_plugins
|
|
83
|
+
|
|
84
|
+
# If you have any plugins, put them here!
|
|
85
|
+
group :jekyll_plugins do
|
|
86
|
+
gem "jekyll-feed", "~> 0.6"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
|
90
|
+
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
|
|
91
|
+
|
|
92
|
+
RUBY
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def create_site(new_blog_path)
|
|
96
|
+
create_sample_files new_blog_path
|
|
97
|
+
|
|
98
|
+
File.open(File.expand_path(initialized_post_name, new_blog_path), "w") do |f|
|
|
99
|
+
f.write(scaffold_post_content)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
File.open(File.expand_path("Gemfile", new_blog_path), "w") do |f|
|
|
103
|
+
f.write(gemfile_contents)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def preserve_source_location?(path, options)
|
|
108
|
+
!options["force"] && !Dir["#{path}/**/*"].empty?
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def create_sample_files(path)
|
|
112
|
+
FileUtils.cp_r site_template + "/.", path
|
|
113
|
+
FileUtils.chmod_R "u+w", path
|
|
114
|
+
FileUtils.rm File.expand_path(scaffold_path, path)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def site_template
|
|
118
|
+
File.expand_path("../../site_template", __dir__)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def scaffold_path
|
|
122
|
+
"_posts/0000-00-00-welcome-to-jekyll.markdown.erb"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# After a new blog has been created, print a success notification and
|
|
126
|
+
# then automatically execute bundle install from within the new blog dir
|
|
127
|
+
# unless the user opts to generate a blank blog or skip 'bundle install'.
|
|
128
|
+
|
|
129
|
+
def after_install(path, options = {})
|
|
130
|
+
unless options["blank"] || options["skip-bundle"]
|
|
131
|
+
begin
|
|
132
|
+
require "bundler"
|
|
133
|
+
bundle_install path
|
|
134
|
+
rescue LoadError
|
|
135
|
+
Jekyll.logger.info "Could not load Bundler. Bundle install skipped."
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
Jekyll.logger.info "New jekyll site installed in #{path.cyan}."
|
|
140
|
+
Jekyll.logger.info "Bundle install skipped." if options["skip-bundle"]
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def bundle_install(path)
|
|
144
|
+
Jekyll.logger.info "Running bundle install in #{path.cyan}..."
|
|
145
|
+
Dir.chdir(path) do
|
|
146
|
+
process, output = Jekyll::Utils::Exec.run("bundle", "install")
|
|
147
|
+
output.to_s.each_line do |line|
|
|
148
|
+
Jekyll.logger.info("Bundler:".green, line.strip) unless line.to_s.empty?
|
|
149
|
+
end
|
|
150
|
+
raise SystemExit unless process.success?
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|